SOC Prime Bias: Critique

05 Jun 2026 15:40 UTC

C0XMO : une nouvelle variante de Gafgyt avec propagation multiplateforme

Author Photo
SOC Prime Team linkedin icon Suivre
C0XMO : une nouvelle variante de Gafgyt avec propagation multiplateforme
shield icon

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.

Flux d’attaque

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