Les chercheurs d’ESET : l’arsenal de FishMonger amélioré avec SprySOCKS pour Windows
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Les chercheurs d’ESET ont découvert deux nouvelles variantes Windows du cheval de Troie SprySOCKS, nommées WIN_DRV et WIN_PLUS, qui sont liées au groupe de menaces FishMonger. La version WIN_DRV utilise un pilote noyau pour obtenir une furtivité accrue, incluant la capacité de dissimuler des connexions réseau, des processus et des fichiers. Les deux variantes prennent en charge plusieurs protocoles de communication et fournissent un large ensemble de commandes pour le contrôle du système et le vol de données.
Enquête
L’enquête s’est appuyée sur des échantillons de logiciels malveillants découverts via VirusTotal et la télémétrie ESET, révélant une activité s’étendant de 2023 à 2024. Les chercheurs ont analysé les chaînes d’exécution complètes, y compris le chargement latéral de DLL, le chargement de pilotes noyaux via DriverLoader et RawWNPF, et l’injection de processus utilisant des techniques de doppelgänging. L’étude a également révélé des schémas de communication commandement et contrôle et des clés de chiffrement codées en dur partagées entre plusieurs composants.
Atténuation
Les organisations devraient donner la priorité à la correction des applications exposées à Internet pour réduire le risque de compromission initiale via des vulnérabilités N-day. Un renforcement strict de la signature des pilotes et la surveillance de l’installation non autorisée de pilotes noyaux sont essentiels. Les défenseurs doivent également surveiller les tâches planifiées suspectes, les modifications du registre sous Options d’Exécution de Fichier d’Image, et les enregistrements inhabituels de processeurs d’impression.
Réponse
Si ces menaces sont détectées, les systèmes affectés doivent être isolés immédiatement pour empêcher tout mouvement latéral ou vol de données ultérieurs. Les enquêteurs doivent effectuer un examen médico-légal détaillé pour déterminer le vecteur d’intrusion original et l’étendue complète de la compromission, en accordant une attention particulière à la persistance au niveau du noyau. Les journaux réseau doivent également être vérifiés pour la communication avec une infrastructure commandement et contrôle connue, tandis que les modifications système telles que les nouveaux services ou les clés de registre altérées doivent être auditées.
Flux d’Attaque
Détections
Usage possible de Schtasks ou AT pour la persistance (via cmdline)
Voir
Usage possible de PING pour exécution différée (via cmdline)
Voir
Modifications suspectes du pare-feu via CLI (via cmdline)
Voir
Activité Réseau du Cheval de Troie SprySOCKS par FishMonger [Connexion Réseau Windows]
Voir
Détection de Svchost.exe suspect et Activités associées [Création de Processus Windows]
Voir
## Exécution de la Simulation
Prérequis: La vérification initiale de la télémétrie et de la base de référence doit réussir.
Rationnel: 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 exactement la télémétrie attendue par la logique de détection. Des exemples abstraits ou non liés mèneront à un mauvais diagnostic.
-
Narration d’Attaque & Commandes : L’adversaire a déployé avec succès le cheval de Troie SprySOCKS sur un hôte Windows compromis. Pour établir un canal de commandement et contrôle, le malware ouvre un socket d’écoute sur le port 53781. Pour garantir que la communication soit reconnue par leur serveur C2 personnalisé, le malware injecte la valeur hexadécimale magique
0xACACBCBCdans les paquets de main levée initiaux. Cela imite le comportement du protocole spécifique du groupe FishMonger pour faciliter une communication fiable via un trafic intercepté ou détourné. -
Script de Test de Régression :
# Script de Simulation : Génération d'Artéfacts Réseau SprySOCKS # Ce script imite le comportement réseau du cheval de Troie SprySOCKS. $TargetPort = 53781 $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC) $Listener = [System.Net.Sockets.TcpListener]$TargetPort try { Write-Host "[+] Démarrage de l'écouteur sur le port $TargetPort..." -ForegroundColor Cyan $Listener.Start() $Client = $Listener.AcceptTcpClient() $Stream = $Client.GetStream() Write-Host "[+] Connexion établie. Envoi de la valeur magique $MagicValue..." -ForegroundColor Yellow # Injection de la valeur magique dans le flux pour déclencher la logique 'selection1' $Stream.Write($MagicValue, 0, $MagicValue.Length) Start-Sleep -Seconds 5 } catch { Write-Error "[-] Échec de la simulation : $($_.Exception.Message)" } finally { Write-Host "[+] Nettoyage des connexions..." -ForegroundColor Cyan $Stream.Close() $Client.Close() $Listener.Stop() } -
Commandes de Nettoyage :
# S'assurer qu'aucun écouteur malveillant ne reste actif Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection Write-Host "[+] Nettoyage terminé." -ForegroundColor Green