Sí, he vuelto a bloguear y con una reseña de libro, que hacía bastante tiempo que no comentaba ninguno aunque he leído muchos. Supongo que más vale tarde que nunca :)
En esta ocasión he leído el libro sagrado de los hackers: International Journal of Proof-of-Concept or Get The Fuck Out (PoC||GTFO, ISBN-13: 978-1-59327-880-9). El libro es una recopilación de los mejores artículos de la revista hacker PoC||GTFO. Realmente puedes leerlo gratis si vas a la revista pero te recomiendo que compres una copia del libro sagrado. La editorial No Starch Press permite copiar artículos de libro para distribuirlos digitalmente.
Vamos al grano: s te gusta desarrollar exploits, la ingeniería inversa, hackear radios, las puertas traseras en software o el hacking de hardware, este es tu libro. De verdad que todo profesional de la ciberseguridad debería leerlo.
El libro, con un aspecto igual al de la Biblia, está dividido en 8 capítulos, y cada capítulo tiene varios versículos muy técnicos en diversos temas. Dependiendo del interés de cada uno, preferirás unos versículos que otros pero recomiendo leer todo el libro, las 772 páginas.
Mis versículos preferidos están relacionados con ficheros políglotas, explotación de SO, radio hacking, puerta traseras en software y hacking Linux.
Algunos de mis versículos favoritos:
1:4 Making a Multi-Windows PE
1:5 This ZIP is also a PDF
2:8 This OS is also a PDF
3:10 Tales of Python’s Encoding
4:3 This OS is a Boot Sector
5:5 A Flash PDF Polyglot
8:3 Compiler Bug Backdoors
8:7 Stegosploit
8:11 Naughty Signals
Así que adelante, cómprate una copia ahora, léelo y difunde la palabra del Señor ;)
Felicitaciones a los autores de PoC||GTFO, los editores y todos los involucrados con la revista y libro. ¡Que sigan viniendo los versículos, vecino!
¿Cuáles son tus versículos preferidos del libro sagrado?
Puntuación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)
Mirai es una botnet de DDoS que ha saltado a los medios de comunicación recientemente debido a varios ataques de alto impacto: uno al periodista Brian Krebs y el segundo uno de los mayores ataques en Internet hasta la fecha realizado el pasado viernes 21 de octubre 2016 contra el ISP Dyn, que desconectó una gran parte de Internet.
Aparte de la cobertura mediática, Mirai es muy interesante porque por un lado tenemos binarios reales capturados de sistemas comprometidos y, por otro, el código fuente fue liberado recientemente, por lo que seguramente podemos esperar muchas variantes de Mirai próximamente. El tener binarios y código fuente nos permite estudiar este malware con más detalle.
Lo que es realmente sorprendente es que estando en el 2016 todavía hablemos de gusanos, contraseñas débiles / por defecto y ataques DDoS: hola gusano de Morris (1988) y proyecto Rivolta (2000), por mencionar algunos.
Análisis de código fuente
Hemos compilado el código fuente de Mirai con Tintorera, una herramienta de análisis estático desarrollada por VULNEX que genera inteligencia mientras se compila código C/C++, proporcionando una rápida panorámica del código.
Con Tintorera obtenemos un resumen en detalle de la aplicación que muestra archivos compilados, numero de líneas de código, comentarios, líneas en blanco y otras métricas de interés. Tintorera también calcula el tiempo necesario para auditar el código. Mirai es un proyecto pequeño y no demasiado complicado de auditar. (Figura 1)
Figura 1
Mirai utiliza diferentes funciones del API de Linux, principalmente relaciones con operaciones de red. (Figura 2)
Figura 2
En el informe de inteligencia generado por Tintorera tenemos un listado de archivos, nombres de funciones, bloques básicos, Complejidad Ciclomática, llamadas al API y ensamblador en línea utilizado por Mirai. Al examinar esta lista nos hacemos una idea del código. (Figura 3)
Figura 3
En el archivo killer.c existe una función llamada killer_init que mata diversos servicios: telnet (puerto 23), ssh (puerto 22) y http (puerto 80) para impedir acceso al sistema comprometido por otros. (Figura 4)
Figura 4
En el mismo archivo, killer.c, otra función llamada memory_scan_match busca en memoria indicadores de otros malware. (Figura 5)
Figura 5
La función get_random_ip del archivo scanner.c genera IPs aleatorias que atacar, exceptuando direcciones de la siguiente lista blanca de General Electric, Hewlett-Packard, el servicio de correo y el departamento de defensa americanos. (Figura 6)
Figura 6
Mirai contiene una lista de 62 contraseñas por defecto / débiles para realizar ataques a dispositivos IoT. Esta lista esta declarada en la función scanner_init del archivo scanner.c. (Figura 7)
Figura 7
En el archivo main.c tenemos la función principal que impide que el dispositivo comprometido pueda reiniciar, para ello Mirai mata el servicio watchdog, y también lanza el scanner buscando nuevas víctimas, otros dispositivos IoT. En la Figura 8 vemos el callgraph de este archivo.
Figura 8
Mirai tiene capacidades ofensivas que consiste en lanzar ataques DDoS utilizando diferentes protocolos: UDP, TCP y HTTP.
Análisis de binarios
Ahora es el turno del análisis de binarios. Hasta el momento hemos analizado 19 binarios, obtenidos de distintas fuentes, para las siguientes arquitecturas: x86, ARM, MIPS, SPARC, Motorola 68020 y Renesas SH (SuperH).
Para el análisis de binarios hemos utilizado la plataforma BinSecSweeper de VULNEX, que permite analizar binarios y otros tipos de ficheros en gran detalle combinando SAST y Big Data.
En la Figura 9 tenemos gráfico del tipo de ficheros y arquitectura de los binarios. Todas las muestras son 32 bits.
Figura 9
Mediante el uso de BinSecSweeper hemos obtenido mucha información de cada muestra, similitudes entre ellos y diversas vulnerabilidades. Actualmente no muchos Antivirus identifican todas las muestras, así que cuidado con el Antivirus que utilices! En la Figura 10 tenemos una visualización del tamaño de los ficheros en bytes.
Figura 10
También hemos analizado todas las secciones de la cabecera ELF de las muestras. (Figura 11)
Figura 11
Como se mencionó anteriormente, las muestras son para diferentes arquitecturas, por lo que en este post no mostraremos el análisis de código.
Hemos actualizado el motor de análisis de BinSecSweeper para identificar el malware Mirai. Un informe al completo del análisis de binarios esta disponible para los clientes de los servicios de Ciber Inteligencia de VULNEX, por favor visiten nuestra web o póngase en contacto con nosotros para mas información.
Conclusiones
A pesar de ser un código bastante simple, Mirai tiene interesantes capacidades ofensivas y defensivas y se ha hecho un nombre. Ahora que el código fuente ha sido liberado es solo cuestión de tiempo que veamos variantes de Mirai.
Mirai botnet es una llamada a los fabricantes de dispositivos IoT para que mejoren la seguridad. Por desgracia, ya existen millones de dispositivos IoT inseguros en internet, por lo que habrá muchos más ataques IoT en un futuro cercano.
¿Qué opinas sobre la seguridad de Internet de las cosas (IoT)?
Esta VM vulnerable es un divertido y simple CTF que puede descargarse desde el estupendo portal VulnHub.
Nota: Para vmware puede ser necesario configurar la dirección MAC 08:00:27:A5:A6:76 para conseguir que funcione (obtenga DHCP). Yo lo hice, ver Fig 1.
¡Que comience el juego!
En este caso ya sé la dirección IP, por lo que empezamos lanzando un escaneo nmap. Del resultado podemos ver solo 1 puerto abierto (HTTP) y el archivo robots.txt con algunos directorios.
Abrimos el sitio Web.
Nada interesante por el momento. Ahora vamos a probar abrir el robots.txt
En estos directorios solo encontramos una imagen del Jedi Obi-Wan Kenobi y nada más.
Pensando un poco en próximos pasos y teniendo en cuenta que este es el juego fristi, llegamos a la siguiente URL; un portal admin con inicio de sesión y contraseña.
Revisando el código HTML encontramos que la imagen se codifica en Base64 y también un posible nombre de usuario: eezeepz
Mirando más de cerca el código fuente HTML nos encontramos con otro texto posiblemente codificado en base64.
Vamos a poner el texto codificado en base64 en el decodificador de Burp Proxy. Vemos una cabecera PNG. ¡Suena a una imagen!
Escribamos un script en Python para obtener la imagen.
Abrimos la imagen y ¡tiene pinta de ser una contraseña!
Ahora tenemos un nombre de usuario y una contraseña. ¡Continuemos!
Genial, tenemos acceso al portal.
Podemos subir una imagen.
¿Por qué no una webshell? :) Modificamos una de las que trae Kali para añadir mi dirección IP.
Subimos la webshell pero ocurre un error. ¡Algún tipo de filtro!
Abrimos Burp Proxy para intentar saltar el filtro, cambiando el nombre del archivo para agregar una extensión “.png”.
Perfecto! filtro saltado y tenemos una webshell subida.
Llamemos a nuestro webshell
Recuerda que antes de llamar a la webshell debemos poner Netcat a la escucha. Caballeros, tenemos shell :)
Un buen lugar para empezar es analizar el código de la aplicación web, escrita en PHP. En el directorio /var/ podemos ver un directorio llamado /fristigod/ del usuario fristigod, interesante.
Hurgando en el directorio /var/www/ encontramos un archivo llamado notes.txt.
En el directorio /home/ podemos ver varios usuarios.
Dentro del directorio /eezeepz/ encontramos otro archivo notes.txt con un mensaje interesante. Podemos ejecutar comandos, ¡genial!
Vamos a ejecutar un comando para poder acceder al directorio /admin/ utilizando el truco del archivo /tmp/runthis.
Dentro del directorio /admin/ vemos un montón de archivos interesantes.
Tenemos algunos archivos cifrados y un script de Python utilizado para cifrar los archivos.
Es hora de un poco más de Python, vamos a modificar el script de cifrar para descifrar los archivos.
Ahora que tenemos algunas contraseñas vamos a cambiar nuestro actual usuario al usuario fristigod. Recuerda que uno de los archivos cifrados se llamaba «whoisyourgodnow.txt». Necesitamos una terminal real por lo que vamos a conseguir una, una buena chuleta aquí.
El contenido del directorio /fristigod/ no revela nada.
Recordamos que en el directorio /var/ teníamos un directorio llamado /fristigod/. En este directorio podemos encontrar algunos archivos interesantes, ¡incluso ejecutar un binario con permisos root!
Al examinar el archivo. bash_history aprendemos cómo ejecutar el anterior binario root.
Es momento de examinar el contenido del directorio /root/ utilizando el binario root.
Premio! Tenemos shell de root y la bandera :)
¡Felicitaciones al autor por crear este divertido CTF!
¿Has conseguido root y la bandera utilizando otras tácticas?