C0XMO : une nouvelle variante de Gafgyt avec propagation multiplateforme
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
FortiGuard Labs a identifié une nouvelle souche de botnet Gafgyt nommée C0XMO qui se propage en exploitant une faille de débordement de tampon dans les routeurs DD-WRT suivie comme CVE-2021-27137. Le malware utilise un scanner séparé basé sur Python pour élargir les infections à travers différentes architectures CPU, tout en s’appuyant également sur des attaques par identifiants faibles, plusieurs capacités DDoS et des routines pour éliminer les malwares concurrents. Après l’infection, il établit la persistance via des fichiers cachés, des tâches cron et des modifications de profil de shell avant de se connecter à son serveur de commande et de contrôle. Le rapport inclut également des indicateurs et des conseils de défense pour les organisations opérant des dispositifs IoT exposés.
Enquête
L’analyse montre que C0XMO abuse de CVE-2021-27137 dans le service UPNP des DD-WRT pour obtenir un accès initial, puis récupère un scanner Python depuis 217.160.125.125:15527. Ce scanner effectue des tentatives de force brute Telnet et SSH, lance plusieurs requêtes d’exploitation basées sur HTTP et déploie des binaires spécifiques à l’architecture selon l’environnement cible. La persistance est maintenue grâce à des fichiers cachés placés dans des emplacements tels que /tmp, /var/tmp, /dev/shm, et les répertoires personnels des utilisateurs, ainsi que des entrées de tâches cron et des modifications de profil de shell. Le malware communique ensuite avec son infrastructure C2 à 85.215.131.70 en utilisant une séquence de poignée de main personnalisée.
Atténuation
Les organisations devraient mettre à niveau le firmware DD-WRT vers une version plus récente que le changement 45723 et appliquer les correctifs pour toutes les CVE connexes. Les services à distance inutiles tels que UPnP, Telnet et SSH doivent être désactivés sur les appareils exposés à Internet chaque fois que possible. Des identifiants forts et uniques doivent être imposés sur tous les dispositifs périphériques, et les services exposés doivent être passés en revue régulièrement. Des détections basées sur le réseau doivent également être déployées pour les adresses IP, les ports et les modèles de commande malveillants identifiés associés à la campagne.
Réponse
Les défenseurs devraient surveiller le trafic sortant pour les connexions à l’infrastructure C2 connue et au port de téléchargement du scanner. Des alertes devraient être configurées pour les fichiers cachés nommés .sys, les modifications de cron qui s’exécutent toutes les 15 minutes et l’exécution du script du scanner. Les IPs et les domaines malveillants identifiés doivent être bloqués au niveau du pare-feu, et tout appareil compromis doit être isolé pour une analyse post-mortem et un nettoyage complet.
graph TB %% Class definitions classDef technique fill:#ffcc99 classDef action fill:#99ff99 classDef malware fill:#ff9999 classDef tool fill:#ccccff classDef process fill:#ffdd66 %% Nodes tech_scanning[« <b>Technique</b> – <b>T1595.002 Analyse Active</b><br/><b>Description</b> : Analyse des plages d’adresses IP à la recherche de ports ouverts et de services vulnérables. »] class tech_scanning technique tech_exploit_upnp[« <b>Technique</b> – <b>T1546.017 Exécution Déclenchée par Événement : Règles Udev</b><br/><b>Description</b> : Déclenche l’exécution de code via des requêtes UDP M-SEARCH spécialement conçues exploitant la CVE-2021-27137 dans UPnP. »] class tech_exploit_upnp technique tech_exploit_other[« <b>Technique</b> – <b>T1210 Exploitation de Services Distants</b><br/><b>Description</b> : Exploite d’autres vulnérabilités HTTP/UPnP telles que CVE-2015-2051 et CVE-2022-35914. »] class tech_exploit_other technique tech_hijack_exec[« <b>Technique</b> – <b>T1574.005 Détournement du Flux d’Exécution : Faiblesse des Permissions des Fichiers d’Installation Exécutables</b><br/><b>Description</b> : Place des binaires ELF malveillants dans des emplacements cachés avec des autorisations d’exécution. »] class tech_hijack_exec technique tech_persistence_cron[« <b>Technique</b> – <b>T1053.003 Tâche/Travail Planifié : Cron</b><br/><b>Description</b> : Crée une tâche cron pour exécuter la charge utile toutes les 15 minutes. »] class tech_persistence_cron technique tech_shell_mod[« <b>Technique</b> – <b>T1546.004 Exécution Déclenchée par Événement : Modification de la Configuration du Shell Unix</b><br/><b>Description</b> : Ajoute des commandes à ~/.bashrc, ~/.profile et ~/.bash_profile. »] class tech_shell_mod technique tech_compromise_binary[« <b>Technique</b> – <b>T1554 Compromission d’un Binaire Logiciel de l’Hôte</b><br/><b>Description</b> : Installe ou remplace des binaires dans des emplacements cachés afin de maintenir le contrôle. »] class tech_compromise_binary technique tech_bruteforce[« <b>Technique</b> – <b>T1110 Force Brute</b><br/><b>Description</b> : Effectue des attaques de devinette d’identifiants contre Telnet et SSH. »] class tech_bruteforce technique tech_forced_auth[« <b>Technique</b> – <b>T1187 Authentification Forcée</b><br/><b>Description</b> : Exploite des identifiants par défaut ou faibles pour obtenir un accès. »] class tech_forced_auth technique tech_remote_ssh[« <b>Technique</b> – <b>T1021.004 Services Distants : SSH</b><br/><b>Description</b> : Utilise des identifiants volés pour se connecter à d’autres appareils via SSH/Telnet. »] class tech_remote_ssh technique tech_indicator_removal[« <b>Technique</b> – <b>T1070.009 Suppression des Indicateurs : Effacement de la Persistance</b><br/><b>Description</b> : Termine et supprime les binaires de logiciels malveillants concurrents ainsi que leurs mécanismes de persistance. »] class tech_indicator_removal technique tech_exclusive_control[« <b>Technique</b> – <b>T1668 Contrôle Exclusif</b><br/><b>Description</b> : Supprime les fichiers et tâches cron des botnets rivaux afin de conserver un contrôle exclusif. »] class tech_exclusive_control technique tech_nonstandard_port[« <b>Technique</b> – <b>T1571 Port Non Standard</b><br/><b>Description</b> : Communique avec le C2 via le port TCP 15527 en utilisant un protocole personnalisé. »] class tech_nonstandard_port technique malware_c0xmo[« <b>Logiciel malveillant</b> – C0XMO<br/><b>Rôle</b> : Charge utile de botnet réalisant des analyses, des exploitations et la persistance. »] class malware_c0xmo malware process_upnp_exploit[« <b>Processus</b> – Envoi d’une requête UDP M-SEARCH spécialement conçue »] class process_upnp_exploit process process_elf_deploy[« <b>Processus</b> – Déploiement de binaires ELF dans /tmp/.sys, /var/tmp/.sys, /dev/shm/.sys »] class process_elf_deploy process process_cron_setup[« <b>Processus</b> – Écriture d’une entrée cron toutes les 15 minutes »] class process_cron_setup process process_shell_mod[« <b>Processus</b> – Ajout de l’appel à la charge utile dans les fichiers rc du shell »] class process_shell_mod process process_brute[« <b>Processus</b> – Analyse d’IP et attaques par force brute contre Telnet/SSH »] class process_brute process process_c2[« <b>Processus</b> – Maintien du canal C2 sur le port 15527 »] class process_c2 process %% Connections tech_scanning –>|mène_à| tech_exploit_upnp tech_scanning –>|déclenche_aussi| tech_exploit_other tech_exploit_upnp –>|exécute| process_upnp_exploit process_upnp_exploit –>|déploie| malware_c0xmo malware_c0xmo –>|place| tech_hijack_exec tech_hijack_exec –>|aboutit_à| process_elf_deploy process_elf_deploy –>|active| tech_compromise_binary tech_compromise_binary –>|soutient| tech_persistence_cron tech_compromise_binary –>|soutient| tech_shell_mod tech_persistence_cron –>|crée| process_cron_setup tech_shell_mod –>|crée| process_shell_mod malware_c0xmo –>|effectue| tech_bruteforce malware_c0xmo –>|effectue| tech_forced_auth tech_bruteforce –>|active| process_brute tech_forced_auth –>|active| process_brute process_brute –>|obtient_des_identifiants_pour| tech_remote_ssh tech_remote_ssh –>|se_propage_à_d_autres_hôtes| malware_c0xmo malware_c0xmo –>|élimine_la_concurrence_via| tech_indicator_removal malware_c0xmo –>|maintient_un_contrôle_exclusif_via| tech_exclusive_control malware_c0xmo –>|communique_avec_le_C2_via| tech_nonstandard_port tech_nonstandard_port –>|utilise| process_c2
Flux d’attaque
Détections
Utilisation possible de Crontab pour exécution directe (via cmdline)
Voir
Téléchargement / Téléversement de fichiers à distance via des outils standards (via cmdline)
Voir
Un fichier caché a été créé sur l’hôte Linux (via file_event)
Voir
IOCs (HashSha256) pour détecter : Dans la propagation multiplateforme d’une nouvelle variante Gafgyt C0XMO
Voir
IOCs (SourceIP) pour détecter : Dans la propagation multiplateforme d’une nouvelle variante Gafgyt C0XMO
Voir
IOCs (DestinationIP) pour détecter : Dans la propagation multiplateforme d’une nouvelle variante Gafgyt C0XMO
Voir
Détection de la communication C2 du Botnet C0XMO [Pare-feu]
Voir
Détection du téléchargement de charge utile de la variante Gafgyt C0XMO [Création de processus Linux]
Voir
Détection des opérations de fichiers malveillants C0XMO [Événement de fichier Linux]
Voir
Analyse et vérification de la persistance du processus C0XMO [Création de processus Linux]
Voir
Exécution de la simulation
Prérequis : La vérification préliminaire de Télémétrie & Ligne de base doit avoir réussi.
Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.
-
Narrative & Commandes d’Attaque :
Le bot de l’adversaire, déjà installé sur l’hôte compromis via l’exécution de service (T1546.007), initie une poignée de main C2 avec le serveur codé en dur 217.160.125.125 sur le port 15527. La connexion utilise un socket TCP simple pour extraire les commandes, correspondant exactement aux critères de la règle. Cette activité est typique du comportement « appel à domicile » du botnet C0XMO. -
Script de Test de Régression :
# Simulation de communication C2 de C0XMO – déclenche la règle Sigma $c2Ip = "217.160.125.125" $c2Port = 15527 # Ouvre une connexion TCP, envoie une charge utile minimale, puis ferme $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) # Attendre brièvement pour simuler une latence réaliste Start-Sleep -Seconds 2 $stream.Close() $client.Close() -
Commandes de Nettoyage :
# Aucun changement persistant n'a été effectué ; assurez-vous simplement que toutes les sockets ouvertes sont fermées # (Le script ferme déjà le socket ; c'est un filet de sécurité.) Get-Process -Name "powershell" | Where-Object { $_.MainWindowTitle -eq "" } | Stop-Process -Force