C0XMO: Una Nueva Variante de Gafgyt con Propagación Multiplataforma
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
FortiGuard Labs identificó una nueva variante del botnet Gafgyt llamado C0XMO que se propaga explotando una vulnerabilidad de desbordamiento de búfer en enrutadores DD-WRT identificada como CVE-2021-27137. El malware utiliza un escáner separado basado en Python para ampliar las infecciones a través de diferentes arquitecturas de CPU, al mismo tiempo que confía en ataques de credenciales débiles, varias capacidades de DDoS y rutinas para eliminar malware competitivo. Después de la infección, establece persistencia mediante archivos ocultos, trabajos cron y cambios en el perfil del shell antes de comunicarse con su servidor de comando y control. El informe también incluye indicadores y orientación defensiva para organizaciones que operan con dispositivos IoT expuestos.
Investigación
El análisis muestra que C0XMO abusa de CVE-2021-27137 en el servicio UPnP de DD-WRT para obtener acceso inicial, luego recupera un escáner de Python desde 217.160.125.125:15527. Ese escáner lleva a cabo intentos de fuerza bruta de Telnet y SSH, lanza múltiples solicitudes de explotación basadas en HTTP y despliega binarios específicos de arquitectura dependiendo del entorno del objetivo. Se mantiene la persistencia a través de archivos ocultos colocados en ubicaciones como /tmp, /var/tmp, /dev/shm, y directorios de inicio de usuario, junto con entradas de trabajos cron y ediciones de perfil de shell. Luego, el malware se comunica con su infraestructura de C2 en 85.215.131.70 utilizando una secuencia de saludo personalizada.
Mitigación
Las organizaciones deben actualizar el firmware de DD-WRT a una versión posterior al cambio 45723 y aplicar correcciones para todas las CVE relacionadas. Los servicios remotos innecesarios, como UPnP, Telnet y SSH, deben deshabilitarse en dispositivos expuestos a Internet siempre que sea posible. Se deben imponer credenciales fuertes y únicas en todos los dispositivos perimetrales, y los servicios expuestos deben revisarse con regularidad. También deben implementarse detecciones basadas en red para las direcciones IP, puertos y patrones de comandos maliciosos asociados con la campaña.
Respuesta
Los defensores deben monitorear el tráfico saliente en busca de conexiones a la conocida infraestructura de C2 y el puerto de descarga del escáner. Se deben configurar alertas para archivos ocultos nombrados .sys, cambios en cron que se ejecutan cada 15 minutos y ejecución del script del escáner. Las IPs y dominios maliciosos identificados deben ser bloqueados en el firewall, y cualquier dispositivo comprometido debe ser aislado para revisión forense y limpieza completa.
graph TB %% Definiciones de clases classDef technique fill:#ffcc99 classDef action fill:#99ff99 classDef malware fill:#ff9999 classDef tool fill:#ccccff classDef process fill:#ffdd66 %% Nodos tech_scanning[«<b>Técnica</b> – <b>T1595.002 Escaneo Activo</b><br/><b>Descripción</b>: Escanea rangos de IP en busca de puertos abiertos y servicios vulnerables.»] class tech_scanning technique tech_exploit_upnp[«<b>Técnica</b> – <b>T1546.017 Ejecución Activada por Eventos: Reglas Udev</b><br/><b>Descripción</b>: Activa la ejecución de código mediante mensajes UDP M-SEARCH manipulados que explotan CVE-2021-27137 en UPnP.»] class tech_exploit_upnp technique tech_exploit_other[«<b>Técnica</b> – <b>T1210 Explotación de Servicios Remotos</b><br/><b>Descripción</b>: Explota vulnerabilidades adicionales de HTTP/UPnP como CVE-2015-2051 y CVE-2022-35914.»] class tech_exploit_other technique tech_hijack_exec[«<b>Técnica</b> – <b>T1574.005 Secuestro del Flujo de Ejecución: Debilidad en los Permisos de Archivos Instaladores Ejecutables</b><br/><b>Descripción</b>: Coloca binarios ELF maliciosos en ubicaciones ocultas con permisos de ejecución.»] class tech_hijack_exec technique tech_persistence_cron[«<b>Técnica</b> – <b>T1053.003 Tarea/Trabajo Programado: Cron</b><br/><b>Descripción</b>: Crea una tarea cron para ejecutar la carga útil cada 15 minutos.»] class tech_persistence_cron technique tech_shell_mod[«<b>Técnica</b> – <b>T1546.004 Ejecución Activada por Eventos: Modificación de la Configuración del Shell Unix</b><br/><b>Descripción</b>: Añade comandos a ~/.bashrc, ~/.profile y ~/.bash_profile.»] class tech_shell_mod technique tech_compromise_binary[«<b>Técnica</b> – <b>T1554 Compromiso del Binario de Software del Host</b><br/><b>Descripción</b>: Instala o reemplaza binarios en ubicaciones ocultas para mantener el control.»] class tech_compromise_binary technique tech_bruteforce[«<b>Técnica</b> – <b>T1110 Fuerza Bruta</b><br/><b>Descripción</b>: Realiza ataques de adivinación de credenciales contra Telnet y SSH.»] class tech_bruteforce technique tech_forced_auth[«<b>Técnica</b> – <b>T1187 Autenticación Forzada</b><br/><b>Descripción</b>: Aprovecha credenciales predeterminadas o débiles para obtener acceso.»] class tech_forced_auth technique tech_remote_ssh[«<b>Técnica</b> – <b>T1021.004 Servicios Remotos: SSH</b><br/><b>Descripción</b>: Utiliza credenciales robadas para iniciar sesión en dispositivos adicionales mediante SSH/Telnet.»] class tech_remote_ssh technique tech_indicator_removal[«<b>Técnica</b> – <b>T1070.009 Eliminación de Indicadores: Borrar Persistencia</b><br/><b>Descripción</b>: Finaliza y elimina binarios de malware competidores y mecanismos de persistencia.»] class tech_indicator_removal technique tech_exclusive_control[«<b>Técnica</b> – <b>T1668 Control Exclusivo</b><br/><b>Descripción</b>: Elimina archivos y tareas cron de botnets rivales para mantener el control exclusivo.»] class tech_exclusive_control technique tech_nonstandard_port[«<b>Técnica</b> – <b>T1571 Puerto No Estándar</b><br/><b>Descripción</b>: Se comunica con el C2 a través del puerto TCP 15527 utilizando un protocolo personalizado.»] class tech_nonstandard_port technique malware_c0xmo[«<b>Malware</b> – C0XMO<br/><b>Rol</b>: Carga útil de botnet que realiza escaneo, explotación y persistencia.»] class malware_c0xmo malware process_upnp_exploit[«<b>Proceso</b> – Envío de mensaje UDP M-SEARCH manipulado»] class process_upnp_exploit process process_elf_deploy[«<b>Proceso</b> – Despliegue de binarios ELF en /tmp/.sys, /var/tmp/.sys, /dev/shm/.sys»] class process_elf_deploy process process_cron_setup[«<b>Proceso</b> – Escritura de una entrada cron cada 15 minutos»] class process_cron_setup process process_shell_mod[«<b>Proceso</b> – Añadir llamada de carga útil a archivos rc del shell»] class process_shell_mod process process_brute[«<b>Proceso</b> – Escaneo de IP y fuerza bruta contra Telnet/SSH»] class process_brute process process_c2[«<b>Proceso</b> – Mantener canal C2 en el puerto 15527»] class process_c2 process %% Conexiones tech_scanning –>|conduce_a| tech_exploit_upnp tech_scanning –>|también_activa| tech_exploit_other tech_exploit_upnp –>|ejecuta| process_upnp_exploit process_upnp_exploit –>|implanta| malware_c0xmo malware_c0xmo –>|coloca| tech_hijack_exec tech_hijack_exec –>|resulta_en| process_elf_deploy process_elf_deploy –>|habilita| tech_compromise_binary tech_compromise_binary –>|apoya| tech_persistence_cron tech_compromise_binary –>|apoya| tech_shell_mod tech_persistence_cron –>|crea| process_cron_setup tech_shell_mod –>|crea| process_shell_mod malware_c0xmo –>|realiza| tech_bruteforce malware_c0xmo –>|realiza| tech_forced_auth tech_bruteforce –>|habilita| process_brute tech_forced_auth –>|habilita| process_brute process_brute –>|obtiene_credenciales_para| tech_remote_ssh tech_remote_ssh –>|se_propaga_a_otros_hosts| malware_c0xmo malware_c0xmo –>|elimina_competencia_mediante| tech_indicator_removal malware_c0xmo –>|mantiene_control_exclusivo_mediante| tech_exclusive_control malware_c0xmo –>|se_comunica_con_C2_mediante| tech_nonstandard_port tech_nonstandard_port –>|utiliza| process_c2
Flujo de Ataque
Detecciones
Posible Uso de Crontab para Ejecución Directa (a través de cmdline)
Ver
Subida/Bajada Remota de Archivos vía Herramientas Estándar (a través de cmdline)
Ver
Se Creó un Archivo Oculto en Host Linux (a través de file_event)
Ver
IOCs (HashSha256) para detectar: Dentro de la Propagación Multiplataforma de una Nueva Variante de Gafgyt C0XMO
Ver
IOCs (IP de origen) para detectar: Dentro de la Propagación Multiplataforma de una Nueva Variante de Gafgyt C0XMO
Ver
IOCs (IP de destino) para detectar: Dentro de la Propagación Multiplataforma de una Nueva Variante de Gafgyt C0XMO
Ver
Detección de Comunicación C2 del Botnet C0XMO [Cortafuegos]
Ver
Detección de Descarga de Payload de la Variante Gafgyt C0XMO [Creación de Procesos en Linux]
Ver
Detección de Operaciones de Archivos de Malware C0XMO [Evento de Archivo en Linux]
Ver
Comprobación de Escaneo y Persistencia de Proceso C0XMO [Creación de Procesos en Linux]
Ver
Ejecución de Simulación
Prerrequisito: La Verificación de Prevuelo de la Telemetría y la Línea Base debe haber pasado.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa y Comandos del Ataque:
El bot del adversario, ya instalado en el host comprometido a través de la ejecución de servicios (T1546.007), inicia un saludo de C2 con el servidor codificado 217.160.125.125 en el puerto 15527. La conexión utiliza un socket TCP simple para extraer comandos, cumpliendo exactamente con los criterios de la regla. Esta actividad es típica del comportamiento de “phone-home” del botnet C0XMO. -
Script de Prueba de Regresión:
# Simulación de comunicación C2 de C0XMO – activa la regla Sigma $c2Ip = "217.160.125.125" $c2Port = 15527 # Abre una conexión TCP, envía una carga útil mínima, luego cierra $client = New-Object System.Net.Sockets.TcpClient $client.Connect($c2Ip, $c2Port) $stream = $client.GetStream() $payload = [System.Text.Encoding]::ASCII.GetBytes("PING`n") $stream.Write($payload, 0, $payload.Length) # Espera brevemente para imitar la latencia realista Start-Sleep -Seconds 2 $stream.Close() $client.Close() -
Comandos de Limpieza:
# No se realizaron cambios persistentes; solo asegúrese de que los sockets abiertos estén cerrados # (El script ya cierra el socket; esto es una red de seguridad.) Get-Process -Name "powershell" | Where-Object { $_.MainWindowTitle -eq "" } | Stop-Process -Force