IntermedioLinuxbotnetsMiraiIoTDDoSpropagación

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.

MalwareIntel Research··9 min lectura
Serie: Malware en Linux — Parte 7

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

  1. Escaneo: el bot escanea rangos de IPs aleatorios buscando puertos telnet (23) y SSH (22) abiertos
  2. Brute force: prueba una lista de credenciales por defecto (usuario:password)
  3. Report: cuando encuentra credenciales válidas, envía la IP + credenciales al Report Server
  4. Loader: un componente separado (loader) se conecta al dispositivo con las credenciales reportadas
  5. Descarga: el loader descarga el binario Mirai compilado para la arquitectura del dispositivo (ARM, MIPS, x86, etc.)
  6. Ejecución: el binario se ejecuta, se conecta al C2 y comienza a escanear por nuevas víctimas
  7. 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:

UsuarioPasswordDispositivos
root(vacío)Routers varios
adminadminGenérico
rootrootGenérico
rootvizxvDahua DVR
rootxc3511Cámaras IP
adminpasswordGenérico
root888888DVRs
rootdefaultGenérico
rootjuantechCámaras IP
adminsmcadminSMC routers
roothi3518HiSilicon cameras
admin7ujMko0adminCámaras IP

Capacidades DDoS

Mirai incluye múltiples vectores de DDoS:

VectorDescripciónEfecto
UDP floodFlood de paquetes UDPSaturación de ancho de banda
TCP SYN floodFlood de paquetes SYNAgotamiento de tablas de conexiones
ACK floodFlood de paquetes ACKBypass de protecciones anti-SYN
GRE floodFlood de paquetes GRESaturación de túneles
HTTP floodRequests HTTP legítimasAgotamiento de recursos del servidor web
DNS water tortureQueries DNS a subdominios aleatoriosAgotamiento del DNS resolver
VSE query floodFlood de queries a servidores Valve Source EngineDDoS 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:

ArquitecturaDispositivos 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)
x86DVRs, NAS, servidores
x86_64Servidores, NAS modernos
PowerPCRouters legacy
SPARCEquipos industriales
SH4 (SuperH)Dispositivos legacy

El loader detecta la arquitectura del dispositivo (uname -m) y descarga el binario correcto.

Variantes principales

Mozi (2019-2023)

AspectoDetalle
OrigenChina
C2DHT (Distributed Hash Table) P2P, no servidor centralizado
PropagaciónTelnet brute force + exploits de routers (Netgear, D-Link, Huawei)
DiferenciadorDHT hace el C2 imposible de tumbar centralizadamente
EstadoParcialmente desactivado en 2023 (kill switch activado, posiblemente por autoridades chinas)

Gafgyt / BASHLITE

AspectoDetalle
Predecesor de MiraiGafgyt existía antes de Mirai (2014)
Código fuentePúblico (como Mirai)
Diferencia con MiraiEscrito en C, propagación via shell scripts (bash)
CapacidadesDDoS, brute force, ejecución de comandos
EstadoActivo, cientos de variantes

Hajime (2016-2018)

AspectoDetalle
TipoBotnet P2P "gris"
PropagaciónMismos vectores que Mirai (telnet brute force)
DiferenciaNO tenía capacidades DDoS. Bloqueaba puertos vulnerables para "proteger" dispositivos de Mirai
MotivaciónAparentemente altruista (vigilante)
TécnicaCompletamente P2P, sin C2 centralizado

InfectedSlurs (2023-2024)

AspectoDetalle
Descubierto porAkamai SIRT
VectorExploits zero-day en routers y NVRs (0-day en FXC AE1021, 0-day en TVT NVRs)
BaseFork de Mirai con exploits modernos añadidos
DiferenciadorUso de zero-days en vez de solo credenciales por defecto

Detección de botnets Mirai

En la red

IndicadorMétodo
Escaneo masivo de puerto 23/22 desde un dispositivo IoTFirewall logs, NetFlow
Tráfico a IPs de C2 conocidasThreat intel feeds, DNS logs
Volumen de tráfico saliente anómalo desde IoTNDR, NetFlow
DNS queries a dominios de C2DNS logging
Tráfico DDoS generado internamenteIDS/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

MedidaDescripción
Bloquear telnet (23) y SSH (22) desde IoT a InternetRegla de firewall
Segmentar IoT en VLAN separadaSin acceso a red corporativa
Monitorizar tráfico saliente de IoTNDR, NetFlow, alertas en volumen
DNS sinkholing de C2 conocidosRedirigir dominios de C2 a blackhole
Rate limiting de conexiones salientesLimitar conexiones por IP

Para fabricantes de IoT

MedidaDescripción
Eliminar credenciales por defectoForzar cambio en primer uso
Deshabilitar telnetUsar solo SSH con key-based auth
Actualizaciones automáticasOTA updates firmadas
Secure bootVerificar integridad del firmware
Minimal attack surfaceNo exponer servicios innecesarios

Mapeo MITRE ATT&CK

TécnicaIDContexto botnets
Exploit Public-Facing ApplicationT1190Exploits en dispositivos IoT
Brute Force: Default CredentialsT1110.001Telnet/SSH brute force
Command and Scripting: Unix ShellT1059.004Shell scripts de infección
Network Denial of ServiceT1498/T1499DDoS (el objetivo principal)
Resource HijackingT1496Uso de dispositivos para DDoS
Ingress Tool TransferT1105Descarga del bot binary
Automated CollectionT1119Escaneo 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

Artículos relacionados

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.