Mostrando entradas con la etiqueta metadatos. Mostrar todas las entradas
Mostrando entradas con la etiqueta metadatos. Mostrar todas las entradas

jueves, 11 de agosto de 2016

Pentesting Moodle - Parte I Desde fuera

Buenas compañeros,

Este post inicia una serie de entradas sobre Moodle, sobre el que hice mi trabajo de fin de carrera y quería mostraros un par de detalles que saqué en su día.

En esta primera entrada os voy a mostrar un par de vulnerabilidades web que posee esta plataforma. Para comenzar Moodle es un CMS, que es un gestor de contenidos multimedia que facilita la gestión de contenido dinámico en un servidor web. La verdad es que como todos los demás CMS como Drupal, Wordpress o Joomla, se han publicado numerosas vulnerabilidades durante su desarrollo (https://www.cvedetails.com/product/3590/Moodle-Moodle.html?vendor_id=2105)

Moodle es muy empleado en universidades,centros de estudio y academias, pues se basa en una plataforma web online para la gestión de contenido que facilita la interacción entre profesor y alumnos.

En primer lugar, citar que las pruebas que se van a mostrar se realizarán en entornos controlados y virtuales, por lo que la finalidad de esta entrada es con fines educativas y formativos, no nos hacemos responsables de uso para otro fin.

Las vulnerabilidades que se van a mostrar se corresponden con Moodle 2.6.3 que a pesar de estar desactualizado ( el día que hice la auditoría la última version estable era la 2.7.3), todavía se encuentra muy empleado hoy en día.

Para realizar las pruebas en un entorno seguro os invito a que os instaléis Moodle en un SSOO Linux manualmente (así jugáis!) apoyándoos en la documentación de Moodle (https://docs.moodle.org/26/en/Step-by-step_Installation_Guide_for_Ubuntu) aunque también podéis emplear el gestor AMPPS (http://www.ampps.com/downloads)  que lo tiene preinstalado y con tan sólo clicar en instalar lo tenéis corriendo...para gustos los colores!

Adquiriendo un enfoque de caja negra, es decir, sin ningún conocimiento del sitio web.

Denegación de servicio (DoS)

Accediendo al típico README.txt que se suele encontrar accesible desde el exterior, se puede observar que muestra rutas interesantes como la existencia de un script llamado cron.php, basado en realizar tareas de limpieza y mantenimiento.




Por lo tanto, como podéis deducir había que probar a entrar a esa ruta a ver si estaba accesible desde el exterior por supuesto... Y efectivamente estaba accesible, pudiendo observar que se ejecuta dicho script y llama la atención que en función de cómo esté de cargado ( número de cursos, alumnos de alto, material subido en la aplicación) el servidor tarda más o menos consumiendo una cantidad de RAM considerable.





Esto me hice pensar como uno de los "malos", ¿ Y si creó un script para realizar N peticiones cada X segundos a la url de tal manera que se ejecute el script constantemente y no paré de consumir memoria RAM?

Antes de lanzar el script, entré dos o tres veces de manera consecutiva y par mi sorpresa...efectivamente "petó" el servidor web quedándose sin memoria y dejar de estar accesible provocando un ataque de denegación de servicio.





Aunque ya se verá más adelante en detalle, adelanto que esta vulnerabilidad se puede corregir en la configuración de Moodle pudiendo evitar el acceso vía web a la url y así evitar la ejecución del script, sin embargo, por defecto no viene seleccionado.

Cabe destacar que esta vulnerabilidad fue reportad en su día al equipo de seguridad de Moodle, teniendo como respuesta:

"Web CLI cron has been disabled by default since 2.9,"

Por lo tanto, le comenté que las versiones anteriores, seguían con esta vulnerabilidad debido a la configuración por defecto...sin embargo, citan:

"There is not a huge risk and cron is designed to be run very frequently anyway "

 Lo cual como se ha mostrado anteriormente parece que no es así...


Enumeración de usuarios

Esta vulnerabilidad se basa en identificar posibles nombres de usuarios registrados en la aplicación interaccionando con la lógica de la misma. Esta vulnerabilidad suele encontrarse en un gran números de aplicaciones web.

El proceso de reseteo de contraseña ofrece dos posibilidades para reestablecer la contraseña, ya sea introduciendo el nombre de usuario o bien mediante la dirección de correo con la que se registró el usuario.



Examinando la funcionalidad de la opción de resetear la contraseña mediante nombre de usuario, la aplicación devuelve dos tipos de mensajes en función de si existe una cuenta que emplee el nombre de usuario introducido.

Como prueba de concepto se introducen nombre de típicos de usuarios estándar recién creados: admin, administrador, profesor, profe, alumno,…

A continuación empleando diccionarios del ámbito de cualquier plataforma learning se detecta que el mensaje varía facilitando una enumeración de cuentas válidas en la aplicación a través de sus nombres de usuarios.

Por lo tanto, en función de la existencia del nombre de usuario en la aplicación devuelve las siguientes respuestas:

Usuario no existente:


Usuario existente:



De esta manera, se puede conseguir una enumeración de usuarios válido en el sistema. Además si se tiene algún pdf o recurso ofimático accesible desde el exterior, se podrían extraer los metadatos y si hay suerte obtener usuarios, tal que se podría probar la existencia de los mismos.


Como se ha indicado anteriormente, el contenido de esta entrada es para fines educativos y formativos, ¡no seáis malos!

Ante cualquier cosa, comentad en el apartado de comentarios y estaré encantado de responder.

Saludos.

NaxHack5

La mejor defensa es un buen ataque

miércoles, 11 de mayo de 2016

Python Scripting (I) - Metadatos

Buenos días hackers, cuánto tiempo sin escribiros nada! Hoy vengo a introduciros un poco en el mundo de la programación de scripts en Python, ese lenguaje tan ampliamente utilizado en el mundo de la ciberseguridad.

Python

Python es un lenguaje interpretado y orientado a objetos cuyo principal objetivo es producir software de una forma fácil y rápida, así de sencillo. Python es rápido. Además, siendo bastante fácil de aprender y utilizar, lo hacen un lenguaje de programación perfecto para principiantes que quieran aprender programación.


Actualmente, la versión de Python más actualizada es la 3.5.1. Sin embargo, mucha gente (como yo de forma habitual) utiliza otra versión más antigua, de la familia 2.7.X. Esto se debe a que el paso de Python 2 a Python 3 llevó a una remodelación de algunos elementos del lenguaje. De todas formas, la rama de Python 2 aún sigue actualizándose, siendo la más actual la versión 2.7.11.

Pese a que estas diferencias existen, ambas ramas comparten el mismo paradigma y el mismo enfoque, y la sintaxis es prácticamente igual. Podéis usar cualquiera de estas dos versiones libremente, y los scripts escritos en una o en otra deberían poder usarse (con ciertos límites) en ambas versiones sin apenas modificaciones.

Dicho esto, soltaré una frase que me oiréis decir de vez en cuando: Saber programar no es saber un lenguaje. Cuando aprendes a programar, el lenguaje te da un poco igual. Esto, que puede sonar muy raro, al final tiene sentido; programar es comprender el flujo que tiene que seguir tu programa para solucionar tu problema de una forma ágil y fiable, y esto es igual en cualquier lenguaje de programación.

¡No me tengáis en cuenta los sermones! :)

Decir también que esta entrada y las que seguirán no pretenden realizar un paso-a-paso por la programación en Python; para ello puedo recomendar libros y manuales que os ayudarán mucho. Sin ir mas lejos, Python para todos de Raúl González Duque es el mejor manual que me he encontrado, y lo podéis descargar de forma gratuita. Lo que sí intentaré es justificar y explicar los elementos estructurales de la herramienta.

En Fwhibbit todos utilizamos Python en mayor o menor medida a la hora de crear herramientas y pruebas de concepto, como la que os traigo hoy. Este script, que podéis encontrar en mi perfil de GitHub, permite obtener metadatos de ficheros con extensión pdf y docx. Por supuesto, el script es ampliable (en un futuro seguramente se amplíe) con nuevos formatos soportados; os lo brindo como prueba de concepto a la recolección de metadatos.

Metadatos

Hablando de ello, ¿qué es eso de metadatos? Los metadatos son una serie de marcas o etiquetas en un archivo que describen diversa información acerca del mismo. La información que arrojan puede ser muy variada dependiendo de cómo se creó el archivo y con qué formato y extensión: autor, fecha de creación, programa y sistema operativo origen... La información que puede arrojar un solo fichero puede dejarnos muy sorprendidos y ser clave para la recolección de información de un objetivo.

El script metadatos.py

El proceso que suelo utilizar a la hora de realizar este tipo de scripts (que puede no ser la mejor, ¡uno no es perfecto!) es comenzar escribiendo la función principal del programa (la función main de toda la vida y que os sonará a los que sois más de Java o C), que verificará los argumentos que le pasamos al script; en este caso, es la dirección (absoluta o relativa) a un directorio que contendrá los ficheros a analizar.

Función principal del script

Una vez hecho esto, la función main invocará a la función que abre y realiza el análisis del fichero en sí, que llamo printMeta(target). Recibe como parámetro el directorio objetivo una vez comprobado y filtrado por la función principal. Una vez comprobado que el objetivo existe, realizará un recorrido en profundidad en su interior (utilizo la función os.walk(target), extremadamente útil en estos casos) y, por cada fichero encontrado, analizará su extensión e invocará a la función correspondiente para la impresión de metadatos si es una extensión soportada.

Función de apertura para analizar el directorio y ficheros encontrados

Por último, las funciones print_doxc(file_full_path) y print_pdf(file_full_path) reciben como parámetro la dirección completa del fichero objetivo e imprimen todos los metadatos encontrados. Para esto, hacemos uso de los módulos externos python-docx y PyPDF2, que proporcionan medios para crear, modificar y borrar ficheros .docx y .pdf respectivamente. En nuestro caso, servirán para analizar un fichero que ya existe y extraer toda la información en forma de metadatos que contengan, imprimiendo por pantalla los datos encontrados.

Análisis de metadatos en PDF
Análisis de metadatos en PDF

A continuación, la ejecución del script en nuestra distribución Linux favorita (funcionará en Windows excepto por la coloración de los resultados, dependiendo de nuestra shell): 

Ejecución del script sobre un directorio

Cabe destacar la importancia de varias cosas que podéis apreciar en el script como buenas prácticas que os animo encarecidamente a seguir: 
  • Los argumentos pasados al script deben verificarse antes de proceder a la ejecución de las funciones, evitando errores futuros. 
  • Es importante dividir el código en funciones para facilitar la lectura y el reciclado del código. Lo agradeceréis cuando abráis el script unos meses después. 
  • Los errores han de tratarse (bloques de código en try...except) y, si son conocidos, informar al usuario de lo que ha pasado.
  • ¡El código debe estar comentado! Una buena práctica es comenzar cada función con un docstring  y comentar el resto del código con comentarios normales (utilizando #). 



Y hasta aquí nuestro script de análisis de metadatos. Espero que os haya gustado y que os sirva para aprender, que es el objetivo de los scripts que os empezaré a traer más de vez en cuando en calidad de prueba de concepto. 

Un saludo hackers!
hartek

miércoles, 20 de abril de 2016

OSINT Parte II - Lo que esconden los metadatos

Buenas,

Esta es la segunda entrada del capítulo de OSINT. En este caso se hace hincapié en la información que alojan los metadatos.

Una definición precisa de los metadatos es que son los datos que describen otros datos, es decir, son los datos asociados a los archivos que contienen información sobre los mismos.

Ahora bien no todos los archivos tienen los mismo metadatos, cada tipo tiene unos asociados. Prácticamente todos los archivos tienen metadatos, sin embargo, los archivos en lo que más fácilmente se encuentran son los documentos ofimáticos (word, excel,...microsoft office), imágenes, pdf's, correos electrónicos,...

Aunque a priori no lo pueda parecer los metadatos contienen información realmente útil que puedan emplearse para diferentes fines: evidencias en un análisis forense, detectar los insiders en una fuga de información o parte de la fase de un footprinting.

¿Qué tipo de información nos podemos encontrar? El análisis de los metadatos pueden revelar información del sistema operativo, versiones de programas, fechas de creación, modificación, autor de un documento entre otras.

Para realizar el análisis de metadatos destacan principalmente dos herramientas: Exiftool y FOCA de Elevan Paths.

Por un lado con Exiftool, puede emplearse de dos maneras: a través de la consola de Windows o puede instalarse la interfaz web.

Por supuesto empleando la consola de comandos se puede explotar el potencial de esta herramienta. Para ello, empleando el comando:

exiftool.exe -a NOMBRE_FICHERO

Se obtiene el listado de todos los metadatos asociados al fichero analizado. En la siguiente imagen se puede ver un ejemplo:




Por el otro lado, se encuentra FOCA que está más bien enfocada al análisis de metadatos a partir de un target. Ahora bien esta herramienta es mucho más potente y permite obtener mucha más información como DNS, IP's, servicios,... 

Es importante remarcar que esta información es pública y solamente se encarga de recopilarla.

Centrándonos en el análisis de metadatos, añadiendo el fichero a la FOCA y analizándolo se obtiene lo siguiente:



Por ejemplo en el resumen de metadatos se pueden observar información del software, usuario y fechas por ejemplo:











Del mismo modo, Eleven Paths ofrece la posibilidad de analizar los metadatos de forma online con metashield (metashieldanalyzer.elevenpaths.com). Analizando el mismo fichero nos ofrece los siguientes datos:



Finalmente, recordad que los metadatos esconden información que no se ve pero es muy útil.

Por ejemplo, un atacante o un pentester puede comenzar con un análisis de metadatos de un target para obtener información de versiones de programas, del sistemas operativo, de nombre de usuarios para tener una primera toma de contacto para perfeccionar su objetivo.

De igual modo, un analista forense puede sacar información de un fichero que ha salido de una empresa con información confidencial. Analizando dicho fichero, podría obtener el nombre del autor y encontrar al insider de la empresa, responsable de su fuga.

Análogamente, analizando una foto de alguna red social, se puede obtener metadatos sobre la ubicación física desde dónde se ha subido la foto a Internet, la marca y modelo de la cámara con la que se ha hecho y multitud de datos más.

"La mejor defensa es el mejor ataque"

Naxhack5

Google Analytics