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)?
— Simon Roses Femerling / Twitter @simonroses