Botnets Linux: Mirai y Sus Variantes que Siguen Dominando el IoT
Análisis técnico de Mirai y las botnets Linux más relevantes. Código fuente de Mirai, mecanismo de propagación por telnet/SSH brute force, variantes modernas (Mozi, Gafgyt, Hajime), ataques DDoS, y detección en redes IoT.
La botnet que cambió Internet
El 21 de octubre de 2016, Mirai ejecutó un ataque DDoS contra Dyn (proveedor DNS) que tumbó Twitter, Reddit, Netflix, GitHub, Spotify y decenas de sitios web durante horas. El ataque alcanzó 1.2 Tbps generados por más de 100.000 dispositivos IoT infectados: cámaras IP, routers domésticos y grabadores de vídeo.
Mirai demostró que los dispositivos IoT, normalmente ignorados en materia de seguridad, podían convertirse en un arma masiva. Su código fuente fue publicado poco después, generando un ecosistema de variantes que, casi una década después, sigue siendo la amenaza dominante en el espacio IoT.
Anatomía de Mirai
Arquitectura
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ C2 Server │────→│ Bot │────→│ Scan/Infect │
│ (CNC) │ │ (dispositivo│ │ otros │
│ │ │ infectado) │ │ dispositivos│
│ Comandos: │ │ │ │ │
│ - DDoS │ │ Recibe │ │ Telnet │
│ - Scan │ │ comandos │ │ brute force │
│ - Update │ │ vía IRC/TCP │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
│
├──────────────┐
│ Report │
│ Server │
│ (recibe IPs │
│ de nuevas │
│ victimas) │
└──────────────┘
Proceso de infección
- Escaneo: el bot escanea rangos de IPs aleatorios buscando puertos telnet (23) y SSH (22) abiertos
- Brute force: prueba una lista de credenciales por defecto (usuario:password)
- Report: cuando encuentra credenciales válidas, envía la IP + credenciales al Report Server
- Loader: un componente separado (loader) se conecta al dispositivo con las credenciales reportadas
- Descarga: el loader descarga el binario Mirai compilado para la arquitectura del dispositivo (ARM, MIPS, x86, etc.)
- Ejecución: el binario se ejecuta, se conecta al C2 y comienza a escanear por nuevas víctimas
- Persistencia: Mirai NO persiste al reinicio. Si el dispositivo se reinicia, la infección desaparece. Pero la re-infección es casi inmediata porque las credenciales siguen siendo las mismas
Lista de credenciales por defecto
El código fuente de Mirai incluye 62 pares usuario:password hardcodeados. Algunos ejemplos:
| Usuario | Password | Dispositivos |
|---|---|---|
| root | (vacío) | Routers varios |
| admin | admin | Genérico |
| root | root | Genérico |
| root | vizxv | Dahua DVR |
| root | xc3511 | Cámaras IP |
| admin | password | Genérico |
| root | 888888 | DVRs |
| root | default | Genérico |
| root | juantech | Cámaras IP |
| admin | smcadmin | SMC routers |
| root | hi3518 | HiSilicon cameras |
| admin | 7ujMko0admin | Cámaras IP |
Capacidades DDoS
Mirai incluye múltiples vectores de DDoS:
| Vector | Descripción | Efecto |
|---|---|---|
| UDP flood | Flood de paquetes UDP | Saturación de ancho de banda |
| TCP SYN flood | Flood de paquetes SYN | Agotamiento de tablas de conexiones |
| ACK flood | Flood de paquetes ACK | Bypass de protecciones anti-SYN |
| GRE flood | Flood de paquetes GRE | Saturación de túneles |
| HTTP flood | Requests HTTP legítimas | Agotamiento de recursos del servidor web |
| DNS water torture | Queries DNS a subdominios aleatorios | Agotamiento del DNS resolver |
| VSE query flood | Flood de queries a servidores Valve Source Engine | DDoS a servidores de juegos |
Evasión y auto-defensa
Mirai incluye mecanismos de auto-defensa:
// Matar procesos de otros botnets/miners competidores
// Mirai busca y mata procesos conocidos de Gafgyt, Qbot, etc.
killer_init(); // Thread que busca y mata competidores
// Deshabilitar watchdog para evitar reinicios automaticos
int wfd = open("/dev/watchdog", O_WRONLY);
if (wfd != -1) {
int flags = WDIOS_DISABLECARD;
ioctl(wfd, WDIOC_SETOPTIONS, &flags);
}
// Eliminar acceso telnet/SSH (para que otros botnets no puedan entrar)
// Bloqueando los puertos que uso para entrar
Multi-arquitectura
Mirai se compila para múltiples arquitecturas para maximizar la cobertura de dispositivos:
| Arquitectura | Dispositivos típicos |
|---|---|
| ARM (32-bit, little endian) | Cámaras IP, routers modernos |
| ARM (32-bit, big endian) | Routers legacy |
| MIPS (32-bit, big endian) | Routers (TP-Link, Huawei) |
| MIPSEL (32-bit, little endian) | Routers (Atheros) |
| x86 | DVRs, NAS, servidores |
| x86_64 | Servidores, NAS modernos |
| PowerPC | Routers legacy |
| SPARC | Equipos industriales |
| SH4 (SuperH) | Dispositivos legacy |
El loader detecta la arquitectura del dispositivo (uname -m) y descarga el binario correcto.
Variantes principales
Mozi (2019-2023)
| Aspecto | Detalle |
|---|---|
| Origen | China |
| C2 | DHT (Distributed Hash Table) P2P, no servidor centralizado |
| Propagación | Telnet brute force + exploits de routers (Netgear, D-Link, Huawei) |
| Diferenciador | DHT hace el C2 imposible de tumbar centralizadamente |
| Estado | Parcialmente desactivado en 2023 (kill switch activado, posiblemente por autoridades chinas) |
Gafgyt / BASHLITE
| Aspecto | Detalle |
|---|---|
| Predecesor de Mirai | Gafgyt existía antes de Mirai (2014) |
| Código fuente | Público (como Mirai) |
| Diferencia con Mirai | Escrito en C, propagación via shell scripts (bash) |
| Capacidades | DDoS, brute force, ejecución de comandos |
| Estado | Activo, cientos de variantes |
Hajime (2016-2018)
| Aspecto | Detalle |
|---|---|
| Tipo | Botnet P2P "gris" |
| Propagación | Mismos vectores que Mirai (telnet brute force) |
| Diferencia | NO tenía capacidades DDoS. Bloqueaba puertos vulnerables para "proteger" dispositivos de Mirai |
| Motivación | Aparentemente altruista (vigilante) |
| Técnica | Completamente P2P, sin C2 centralizado |
InfectedSlurs (2023-2024)
| Aspecto | Detalle |
|---|---|
| Descubierto por | Akamai SIRT |
| Vector | Exploits zero-day en routers y NVRs (0-day en FXC AE1021, 0-day en TVT NVRs) |
| Base | Fork de Mirai con exploits modernos añadidos |
| Diferenciador | Uso de zero-days en vez de solo credenciales por defecto |
Detección de botnets Mirai
En la red
| Indicador | Método |
|---|---|
| Escaneo masivo de puerto 23/22 desde un dispositivo IoT | Firewall logs, NetFlow |
| Tráfico a IPs de C2 conocidas | Threat intel feeds, DNS logs |
| Volumen de tráfico saliente anómalo desde IoT | NDR, NetFlow |
| DNS queries a dominios de C2 | DNS logging |
| Tráfico DDoS generado internamente | IDS/IPS, rate limiting |
En el dispositivo
# Si tienes acceso shell al dispositivo:
# Buscar procesos sospechosos
ps aux | grep -v grep | grep -E '(bot|scan|mirai|gafgyt)'
# Buscar conexiones de red anómalas
netstat -tnp # O ss -tnp
# Conexiones a IPs desconocidas en puertos no estándar
# Buscar binarios en /tmp, /dev/shm, /var/tmp
ls -la /tmp/ /dev/shm/ /var/tmp/ /var/run/
# Binarios con nombres aleatorios o nombres de herramientas del sistema
# Verificar si telnet/SSH fue bloqueado por el bot
# (Mirai bloquea los puertos para evitar re-infección por competidores)
Reglas Snort/Suricata
# Detectar escaneo masivo de telnet desde la red interna
alert tcp $HOME_NET any -> $EXTERNAL_NET 23 (msg:"BOTNET Possible Mirai Telnet Scan"; flow:to_server; threshold:type both, track by_src, count 100, seconds 60; sid:2026001; rev:1;)
# Detectar trafico Mirai C2 (patron de report)
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"BOTNET Possible Mirai Bot Report"; flow:to_server,established; content:"|00 00 00 01|"; depth:4; sid:2026002; rev:1;)
YARA rule para binarios Mirai
rule Mirai_Bot_Generic {
meta:
description = "Detects Mirai botnet variants"
author = "MalwareIntel Research"
strings:
$cred1 = "vizxv" ascii
$cred2 = "xc3511" ascii
$cred3 = "hi3518" ascii
$cred4 = "juantech" ascii
$cred5 = "7ujMko0admin" ascii
$cmd1 = "/bin/busybox" ascii
$cmd2 = "MIRAI" ascii nocase
$cmd3 = "/proc/self/exe" ascii
$cmd4 = "killer_init" ascii
$cmd5 = "scanner_init" ascii
$net1 = "/dev/watchdog" ascii
$net2 = "attack_" ascii
condition:
uint32(0) == 0x464C457F and // ELF magic
(3 of ($cred*) or (2 of ($cmd*) and 1 of ($net*)))
}
Prevención
Para operadores de red
| Medida | Descripción |
|---|---|
| Bloquear telnet (23) y SSH (22) desde IoT a Internet | Regla de firewall |
| Segmentar IoT en VLAN separada | Sin acceso a red corporativa |
| Monitorizar tráfico saliente de IoT | NDR, NetFlow, alertas en volumen |
| DNS sinkholing de C2 conocidos | Redirigir dominios de C2 a blackhole |
| Rate limiting de conexiones salientes | Limitar conexiones por IP |
Para fabricantes de IoT
| Medida | Descripción |
|---|---|
| Eliminar credenciales por defecto | Forzar cambio en primer uso |
| Deshabilitar telnet | Usar solo SSH con key-based auth |
| Actualizaciones automáticas | OTA updates firmadas |
| Secure boot | Verificar integridad del firmware |
| Minimal attack surface | No exponer servicios innecesarios |
Mapeo MITRE ATT&CK
| Técnica | ID | Contexto botnets |
|---|---|---|
| Exploit Public-Facing Application | T1190 | Exploits en dispositivos IoT |
| Brute Force: Default Credentials | T1110.001 | Telnet/SSH brute force |
| Command and Scripting: Unix Shell | T1059.004 | Shell scripts de infección |
| Network Denial of Service | T1498/T1499 | DDoS (el objetivo principal) |
| Resource Hijacking | T1496 | Uso de dispositivos para DDoS |
| Ingress Tool Transfer | T1105 | Descarga del bot binary |
| Automated Collection | T1119 | Escaneo automatizado de IPs |
Fuentes y referencias
- Antonakakis, M. et al. "Understanding the Mirai Botnet." USENIX Security, 2017.
- Krebs, B. "Who is Anna-Senpai, the Mirai Worm Author?" KrebsOnSecurity, 2017.
- U.S. DOJ. "Three Defendants Plead Guilty to Creating and Operating Mirai Botnet." December 2017.
- Akamai. "InfectedSlurs Botnet Analysis." Akamai SIRT, 2023.
- ESET. "Mozi Botnet Analysis." ESET Research, 2023.
- MITRE ATT&CK. "Network Denial of Service (T1498)." https://attack.mitre.org/techniques/T1498/
- Cloudflare. "DDoS Threat Report 2024." Cloudflare.
- NIST. "Guidelines for Securing IoT Devices." NISTIR 8259.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Malware en IoT Basado en Linux: ARM, MIPS y la Superficie de Ataque del Futuro
ELF 101: Formato de Ejecutables Linux para Analistas de Malware
Cryptominers en Linux: Detección, Respuesta y Cómo Eliminan a la Competencia
Cobertura ATT&CK: DeTT&CT, Gap Analysis y Priorización de Detecciones
Construir un Programa de Detection Engineering: De Cero a Producción
De IOC a Detección: Workflow Completo para Operacionalizar Inteligencia
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.