La Boîte à Outils en Évolution de Gamaredon : GammaPhish et GammaWorm
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Gamaredon, un groupe APT soutenu par l’État russe, continue de mener des opérations d’espionnage à long terme contre les institutions gouvernementales ukrainiennes, les corps militaires et les infrastructures critiques. Sa chaîne d’infection modulaire commence par un document de spearphishing, exploite une faille de parcours de répertoires dans WinRAR et utilise ensuite VBScript, des flux de données alternatifs et des résolveurs dead-drop pour se propager, persister et récupérer des charges utiles supplémentaires. La campagne utilise également des services légitimes tels que Telegram, Cloudflare et Supabase pour des activités de commande et de contrôle. La détection reste difficile car les attaquants abusent fortement des fonctionnalités intégrées de Windows et des méthodes d’exécution sans fichier.
Enquête
Sekoia TDR a reconstruit la chaîne d’intrusion de janvier 2026 en examinant plus de 70 artefacts collectés à partir de systèmes compromis. Leur analyse a identifié le composant de phishing initial, GammaPhish, suivi du chargeur VBScript GammaLoad, du worm auto-propagateur GammaWorm, et du voleur PowerShell GammaSteel, qui stocke des modules dans le registre. Les chercheurs ont également documenté l’utilisation par GammaWorm de flux de données alternatifs et de tâches planifiées pour la persistance, ainsi que des requêtes réseau répétées vers plusieurs domaines de résolveurs dead-drop. L’enquête a cartographié comment chaque composant soutenait la chaîne d’infection plus large et le maintien à long terme.
Atténuation
Étant donné que le malware peut continuellement récupérer de nouvelles charges utiles via des résolveurs dead-drop, l’approche de remédiation la plus sûre est souvent une reconstruction complète du système. Les efforts défensifs devraient se concentrer sur la détection de la création suspecte de flux de données alternatifs, les modifications du registre RunOnce, les tâches planifiées aux noms inhabituels, et le trafic sortant de processus non-navigateurs vers des domaines de résolveurs connus. Bloquer l’infrastructure de commande et de contrôle identifiée et appliquer des contrôles de numérisation stricts aux pièces jointes d’e-mail peuvent également réduire la probabilité d’une compromission initiale.
Réponse
Si cette activité est détectée, isolez immédiatement l’hôte affecté, collectez les preuves volatiles et effectuez une acquisition légale complète. Supprimez les fichiers cachés dans des flux de données alternatifs, supprimez l’entrée de registre malveillante RunOnce, et désactivez toutes les tâches planifiées associées. Les domaines et adresses IP des résolveurs connus doivent être bloqués au niveau de la périphérie réseau, et les détections en points de terminaison doivent être mises à jour pour identifier les lignes de commande observées et les modèles d’exécution sans fichier.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ddffdd classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes attack_phishing[« <b>Action</b> – <b>T1566.001 Hameçonnage avec pièce jointe</b><br/>L’attaquant envoie un fichier ZIP malveillant par e-mail aux victimes. »] class attack_phishing action file_zip[« <b>Fichier</b> – malicious.zip<br/>Contient un raccourci .lnk et un dropper .exe compilé en Rust. »] class file_zip file action_user_exec[« <b>Action</b> – <b>T1204.001 Exécution utilisateur</b><br/>La victime ouvre le .lnk ou exécute le .exe, déclenchant la chaîne d’exécution. »] class action_user_exec action file_lnk[« <b>Fichier</b> – payload.pdf.lnk<br/>Raccourci avec double extension et icône Edge pour paraître légitime. »] class file_lnk file tool_wscript[« <b>Outil</b> – wscript.exe<br/>Exécute la charge utile VBScript. »] class tool_wscript tool file_vbs[« <b>Fichier</b> – empty.vbs<br/>VBScript minimal lançant PowerShell. »] class file_vbs file action_vbscript[« <b>Action</b> – <b>T1059.005 Visual Basic</b><br/>VBScript exécuté via wscript pour lancer PowerShell. »] class action_vbscript action action_powershell[« <b>Action</b> – <b>T1059.001 PowerShell</b><br/>ExecutionPolicy bypass et déchiffrement de l’étape suivante. »] class action_powershell action file_dat[« <b>Fichier</b> – 1.dat<br/>Conteneur chiffré XOR contenant RuntimeBroker_update.exe. »] class file_dat file process_runtime[« <b>Processus</b> – RuntimeBroker_update.exe<br/>Déchiffré depuis 1.dat ; charge une DLL via DLL side-loading. »] class process_runtime process file_dll[« <b>Fichier</b> – UnityPlayer.dll<br/>DLL malveillante placée dans le même répertoire. »] class file_dll file action_dll_sideload[« <b>Action</b> – <b>T1546.009 AppCert DLL</b><br/>Le DLL side-loading permet l’exécution de code. »] class action_dll_sideload action tool_rustloader[« <b>Outil</b> – Rust loader (RUSTCLOAK)<br/>Alloue de la mémoire, écrit le PE AZUREVEIL déchiffré et l’exécute via Windows fibers. »] class tool_rustloader tool action_process_injection[« <b>Action</b> – <b>T1055.002 Injection de processus</b><br/>Injection PE via Windows fibers. »] class action_process_injection action file_azureveil[« <b>Fichier</b> – AZUREVEIL.exe<br/>Charge utile déchiffrée exécutée après injection. »] class file_azureveil file action_discovery[« <b>Action</b> – <b>T1083 Découverte de fichiers</b><br/>Le loader énumère les fichiers et les déplace vers %TEMP%. »] class action_discovery action action_network_discovery[« <b>Action</b> – <b>T1016 Découverte réseau</b><br/>Collecte des informations MAC et IP. »] class action_network_discovery action action_c2[« <b>Action</b> – <b>T1102 Service web</b><br/>Communication avec Azure Blob Storage via HTTPS. »] class action_c2 action action_dead_drop[« <b>Action</b> – <b>T1102.003 Communication unidirectionnelle</b><br/>Upload de beacon et récupération de commandes dans le même conteneur. »] class action_dead_drop action action_encrypted_channel[« <b>Action</b> – <b>T1573.001 Canal chiffré</b><br/>Communication chiffrée RC4 et SM4-CBC. »] class action_encrypted_channel action action_exfil[« <b>Action</b> – <b>T1567.002 Exfiltration via service web</b><br/>Envoi de données chiffrées vers Azure Blob. »] class action_exfil action action_persistence[« <b>Action</b> – <b>T1547.009 Persistance via raccourci</b><br/>Ajout d’un raccourci dans le dossier de démarrage. »] class action_persistence action %% Connections attack_phishing –>|livre| file_zip file_zip –>|active| action_user_exec action_user_exec –>|ouvre| file_lnk file_lnk –>|exécute| tool_wscript tool_wscript –>|exécute| file_vbs file_vbs –>|lance| action_vbscript action_vbscript –>|démarre| action_powershell action_powershell –>|déchiffre| file_dat file_dat –>|génère| process_runtime process_runtime –>|charge| file_dll file_dll –>|utilisé par| action_dll_sideload process_runtime –>|injecte| action_process_injection action_process_injection –>|utilise| tool_rustloader tool_rustloader –>|charge| file_azureveil file_azureveil –>|exécute| action_discovery action_discovery –>|aussi| action_network_discovery action_network_discovery –>|envoie vers| action_c2 action_c2 –>|utilise| action_dead_drop action_dead_drop –>|dépend de| action_encrypted_channel action_encrypted_channel –>|active| action_exfil action_exfil –>|peut activer| action_persistence file_lnk –>|persistance| action_persistence
Flux d’attaque
Détections
Points de persistance possibles [ASEPs – Ruche Logiciel/NTUSER] (via événement_registre)
Voir
LOLBAS WScript / CScript (via création_de_processus)
Voir
Comportement d’évasion de défense LOLBAS MSHTA suspect détecté par détection de commandes associées (via création_de_processus)
Voir
Utilisation suspecte de CURL (via cmdline)
Voir
Binaire/script suspect dans l’emplacement de démarrage automatique (via événement_fichier)
Voir
Abus potentiel de Telegram comme canal de commande et de contrôle (via dns_query)
Voir
Infiltration / exfiltration de données possible / C2 via services / outils tiers (via dns_query)
Voir
Tentative d’exploitation possible de CVE-2025-8088 / CVE-2025-6218 (vulnérabilité WinRAR) (via événement_fichier)
Voir
Communication suspecte de domaine Trycloudflare (via dns)
Voir
Abus potentiel de domaine de développement Cloudflare (via dns)
Voir
IOC (HashMd5) pour détecter : Matryoshka #1/3 du FSB – Cadeaux de Gamaredon qui continuent de se déployer – GammaPhish et GammaWorm
Voir
IOC (SourceIP) pour détecter : Matryoshka #1/3 du FSB – Cadeaux de Gamaredon qui continuent de se déployer – GammaPhish et GammaWorm
Voir
IOC (DestinationIP) pour détecter : Matryoshka #1/3 du FSB – Cadeaux de Gamaredon qui continuent de se déployer – GammaPhish et GammaWorm
Voir
Détection de l’utilisation de NTFS ADS par GammaWorm pour la persistance et la propagation [Événement de fichier Windows]
Voir
Exécution de Simulation
Prérequis : La vérification du pré‑vol de télémétrie & baseline doit avoir réussi.
Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (T1564.007) conçue pour déclencher la règle de détection. Les commandes et le narratif produisent directement la télémétrie attendue par la logique de détection.
-
Narratif de l’attaque & Commandes :
Un opérateur a obtenu la charge utile GammaWorm (un PE compilé) et souhaite réaliser une persistance tout en restant caché des listes de fichiers traditionnelles. L’attaquant écrit la charge utile dans un flux de données alternatif NTFS nommé GTR à l’intérieur du répertoire de profil de l’utilisateur. Windows traitera le flux de données alternatif comme partie du fichier normal (%USERPROFILE%gamma.exe:GTR). Étant donné que le nom ADS correspond à la liste codée en dur de la règle, tout événement de création de fichier incluant « :GTR » sous%USERPROFILE%déclenchera la détection.# Étape 1 – Préparez un binaire malveillant de substitution (par exemple, un one‑liner PowerShell codé en base64) $malicious = [System.Convert]::FromBase64String( "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAwAAAAA4AAAAA") $payloadPath = "$env:USERPROFILEgamma.exe" # Étape 2 – Écrivez le binaire dans le fichier principal (en option ; le ADS peut exister sans fichier principal) [IO.File]::WriteAllBytes($payloadPath, $malicious) # Étape 3 – Écrivez le même binaire (ou une charge utile différente) dans le ADS nommé GTR $adsPath = "$payloadPath:GTR" Set-Content -Path $adsPath -Value $malicious -Encoding Byte -
Script de test de régression : (auto‑contenu ; peut être exécuté sur tout hôte Windows avec PowerShell 5+)
Simulation de persistance du flux de données alternatif de GammaWorm – déclenche la règle de détection try { # Créez un fichier hôte de remplacement $hostFile = "$env:USERPROFILEgamma.exe" $dummyBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # En-tête PE minimal [IO.File]::WriteAllBytes($hostFile, $dummyBytes) # Écrivez la charge utile malveillante dans le ADS nommé « GTR » $ads = "$hostFile:GTR" Set-Content -Path $ads -Value $dummyBytes -Encoding Byte Write-Host "ADS 'GTR' créé avec succès à $ads" } catch { Write-Error "Échec de la simulation : $_" -
Commandes de nettoyage :
# Supprimez le flux de données alternatif et le fichier hôte de substitution $hostFile = "$env:USERPROFILEgamma.exe" $ads = "$hostFile:GTR" # Supprimez le flux de données alternatif (nécessite Sysinternals Streams.exe ou PowerShell 5+) if (Test-Path $ads) { Remove-Item -Path $ads -Force Write-Host "Flux de données alternatif GTR supprimé." } # Supprimer le fichier principal if (Test-Path $hostFile) { Remove-Item -Path $hostFile -Force Write-Host "Fichier hôte gamma.exe supprimé."