viernes, octubre 16, 2015

Conquistar el mundo con OSINT & Known-Vulnerabilities (PARTE 1 de 2) #OSINT #Metasploit

Hace unas semanas tuve la suerte de estar en el congreso Albahaca CON 2015 celebrado en Huesca. La ponencia que tenía un título parecido a "¿Cómo los chicos malos pueden conquistar el mundo?" En honor al inglés del gran Rafa Otal, es una idea sencilla basada en las fuentes abiertas de información y procesamiento de ésta con el objetivo de encontrar máquinas distribuidas por el mundo que contengan software vulnerable. Una de las preguntas que podemos hacernos es, ¿Qué es exactamente conquistar el mundo? Pueden ser muchas cosas, pero para algunos usuarios podría definirse como la posibilidad de tener mucha presencia, gran capacidad de cómputo y tener todo esto de manera distribuido alrededor del mundo. Con este fin es difícil parar o bloquear a este ejército cibernético.

Figura 1: Conquistar el mundo con OSINT & Known-Vulnerabilities (Parte 1 de 2)

El vector de partida en esta investigación son las fuentes OSINT, las cuales proporcionan gran cantidad de información. La pregunta de la charla es:
¿Si procesáramos las fuentes de forma adecuada obtendríamos información sensible la cual podría ser utilizada para obtener el control de un gran número de máquinas distribuido? 
La vía para tomar el control de las máquinas está claro que podría ser un exploit público. ¿Existirán muchas vulnerabilidades conocidas? Ésta es una pregunta de difícil respuesta, al menos podemos intuir que sí, pero a ciencia cierta es complejo decir si mucho o poco. Entonces, ¿qué queremos comprobar?
1. Encontrar las fuentes de información abiertas que pueden proporcionar información sobre software y máquinas en Internet. 
2. Listar para el caso particular un número de software y versiones concretas. 
3. Procesar esta información con el fin de detectar software no seguro y para el que existe un exploit público que permitiría a un usuario malicioso tomar el control de las máquinas. 
4. Una vez detectadas las máquinas con software vulnerable se necesita una herramienta que permita demostrar cómo se podría tomar el control de las máquinas. Para esta ocasión se quiere ejecutar un módulo de Metasploit implementado por mí para hacer algo muy similar a lo que hacía el famoso autopwn. 
5. Las máquinas, ¿Dónde están? La geolocalización es fácil de realizar. Nos interesa demostrar la distribución de las máquinas, por lo que se puede obtener el país y provincia dónde se encuentra la máquina. Esto nos proporciona la posibilidad de realizar un mapa distribuido, que siempre ayudará a ver todo el impacto gráficamente.
Figura 2: Esquema de idea de trabajo

Análisis de OSINT y escaneos a IPv4

El primer paso en todo esto es verificar de dónde sacar la información que queremos procesar. En primer lugar uno siempre se dirige a Shodan si quiere realizar búsquedas de dispositivos. En Shodan podréis encontrar resultados asombrosos con software como Freesshd 1.2.6 instalado en más de 20.000 máquinas en todo el mundo. Utilizando un listado de otras aplicaciones con vulnerabilidades conocidas fui buscando más resultados en Shodan y todo hacía indicar que los números de máquinas serían grandes.

Otra alternativa que me planteé fue la de utilizar ZMap para barrer el direccionamiento de IPv4 y mediante la herramienta ZGrab poder detectar máquinas con servicios vulnerables en Internet. Para el que no conozca ZGrab solo decir que la herramienta realiza una conexión al puerto en cuestión y nos permite almacenar el banner del servicio. En muchas ocasiones los servicios FTP, por ejemplo, nos proporcionan en el propio banner la información necesaria para detectar la versión. Hay que tener en cuenta que en otras ocasiones el banner que se puede leer de un servicio puede estar falseado, por lo que esta información no es 100% válida, aunque si nos permite hacernos una idea del número de máquinas que podríamos “trastear”.

Mientras pensaba en qué opción utilizar para obtener la información lo más en bruto posible mi compañero de Eleven Paths y amigo Rafa Sánchez me comentó un sitio web llamado scans.io. En este sitio podemos encontrar bases de datos gigantescas con diferentes scopes. Por ejemplo, encontré que cada mes realizan entre 3 y 4 escaneos a todo IPv4 con ZMap y ZGrab y publican los resultados de lo encontrado. Entonces recordé una de las cosas que me decían mucho los profesores en la Universidad: “reutiliza”. Así que pensé que utilizar estas bases de datos podría ser interesante.

Antes de seguir quiero dejaros qué tipos de bases de datos podemos encontrar en scans.io: escaneo completo a IPv4 con captura de handshakes en HTTPs, escaneos a IPv4 para detectar la vulnerabilidad de Heartbleed, escaneo completo a IPv4 con recopilación de banner grab, escaneos al primer millón de dominios de Alexa, escaneo completo a IPv4 y recopilación de servidores HTTP, certificados, etcétera. ¿Cuáles son las fuentes? Los escaneos son llevados a cabo por los equipos de Rapid7, Universidad de Michigan, Fedora Project, Project 25499, etcétera.

Cómo mencioné anteriormente vi que en scans.io existe un escaneo periódico, entre 3 y 4 veces mensuales, a los servidores FTP accesibles en IPv4 y que recolectaban los banners de dichos servicios. Decidí descargar unas cuantas versiones de las bases de datos, aunque cada una era entre 3 y 4 GB.

Procesar información de la base de datos y detección para estudio

Analizando el fichero json que nos descargamos de scans.io podemos ver qué campos son los que nos interesan. Accediendo al campo del banner y del host sabemos qué “escupe” el servicio cuando le preguntas y en qué dirección IP se encuentra. Para la ponencia fue interesante estudiar diferentes servidores FTP como son:
• ProFTPd 1.3.3c
• warFTPd 1.65
• WS_FTP Server 5.0.3
• WS_FTP Server 5.0.5
• PCMan FTPd 2.0.7
A priori, a muchos le sonarán de poco, pero para la prueba de concepto es más que suficiente. Todas estas aplicaciones son identificables por el banner que devuelven, aunque hay que recordar que existen honeypots que nos pueden engañar. Mediante el uso de expresiones regulares podemos ir detectando las versiones que se vuelvan en los banners y almacenándolos. La información recopilada por el primer script que se montó, denominado con un nombre original como procesar.rb, es la siguiente:
• Host
• Fecha
• Respuesta en la conexión (banner)
Además, el script cuando finaliza nos indica el número de máquinas que cumplen con las condiciones propuestas en la expresión regular.

Figura 3: Resultados del script tras procesar las expresiones regulares

Tras recopilar información sobre diferentes bases de datos de servicios FTP en IPv4 se pueden sacar algunas cosas en claro. Algo llamativo es la diferencia de máquinas entre los meses de Abril y Julio de 2015. En Abril de 2015 podemos encontrar con más de 14.000 máquinas que responden con banners de software vulnerable, asumiendo un 50% de falsos positivos, que pueden ser demasiados, podemos encontrar con más de 7.000 máquinas distribuidas vulnerables y que se encuentran a un “botonazo” para que cualquiera las pueda controlar, si no lo hacen ya.

Figura 4: Máquinas descubiertas en el escaneo de Abril de 2015

En el mes de Julio de 2015 se pueden encontrar en las bases de datos publicadas en scans.io más de 52.000 máquinas con alguno de los banners listados anteriormente. Se puede observar cómo las versiones de software vulnerables aumentan considerablemente. Quizá uno de los que más llama la atención sea el software ProFTPd 1.3.3c que incrementa los banners de 9546 máquinas a 35168.

Figura 5: Máquinas descubiertas en Julio de 2015

Procesar todas estas fuentes de datos OSINT a la vez, es decir, Shodan, Scans.io y los escaneos personalizados que se hagan para localizar los objetivos y los exploits que hay que ejecutar es una tarea perfecta para hacerlo usando Sinfonier. Con este proyecto - que puedes utilizar libremente en la versión Community -, puedes hacer topologías que procesen la información constantemente y vayan realizando las acciones necesarias.

En este caso se podría haber utilizado para que fuera el orquestador que localice los objetivos analizando los repositorios OSINT, para ello se utilizan los componentes SPOUT, localizar el exploit público desde otra fuente o tirando de bases de datos internos con los componentes BOLT y sacando con DRAINS los resultados. Si quieres conocer más sobre Sinfonier, en la Comunidad de Eleven Paths se ha abierto un foro para Sinfonier con el objeto de que puedas aprender más. Si te animas, tienes el Sinfonier Community Contest para llevarte hasta 3.000 USD en Bitcoins haciendo cosas como esta.

Creando el nodo central de ejecución (Remake de autopwn?)

Una vez identificadas las máquinas candidatas debemos pensar en centralizar esfuerzos. La idea de un nodo central de ejecución de exploits con toda la información procesada previamente nació de centralizar esfuerzos. Es cierto que quizá disponer de varias máquinas en el mundo y poder distribuir esfuerzos para la consecución del control sería una táctica mejor, pero la idea de la prueba de concepto es hacerlo lo más sencillo posible.

En la charla muchos vieron en este módulo una idea similar al autopwn de Metasploit, el cual ya no se encuentra en la edición Community. La información procesada previamente se clasifica en un fichero de texto con un formato específico, el cual será leído por el módulo que realicemos. El formato definido es el siguiente:
• Cada línea del fichero representa una máquina vulnerable en Internet encontrada mediante el uso de las bases de datos OSINT. 
• Los valores que deben ser leídos y que muestran diferentes atributos están separados por pipes. 
• El primer valor indica la dirección IP de la máquina vulnerable. 
• El segundo valor indica el módulo de Metasploit que debe ser cargado y configurado automáticamente. 
• El tercer valor indica el puerto remoto dónde el servicio se encuentra a la escucha. Este valor se leerá y configurará en el módulo automáticamente por nuestro módulo. 
• El cuarto valor indica qué tipo de payload se ejecutará en caso de que la ejecución del módulo indicado en el atributo 2 sea correcta. 
• El quinto valor es opcional, pudiendo indicar atributos avanzados de los módulos, como por ejemplo InitialAutoRunScript, el cual indica que cuando se ejecute un Meterpreter se migre automáticamente de proceso.
Figura 6: Información para automatizar la explotación de las máquinas vulnerables

Más adelante se podrán ver más detalles sobre el módulo, ya que tiene algunos detalles a bajo nivel que son interesantes. Además, se puede encontrar en mi Github.

Continuará: Conquistar el mundo con OSINT & Known-Vulnerabilities (PARTE 2 de 2)

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y “Pentesting con Powershell

1 comentario:

Anónimo dijo...

excelente.no sabia de scans.io......saludos desde ecuador...wilson criollo....

Entrada destacada

Navaja Negra: La CON de Albacete el 29 de Septiembre @navajanegra_ab @elevenpaths @0xWord

Es la sexta edición de esta CON que comenzó hace ya más de un lustro en la ciudad de Albacete , reúne el próximo 29 de Septiembre a una b...

Entradas populares