GammaSteel : À l’intérieur de la chaîne de logiciels malveillants de Gamaredon
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Le rapport décrit GammaSteel, une nouvelle chaîne d’intrusion Gamaredon (UAC-0010) construite autour d’un voleur PowerShell sans fichier. Le logiciel malveillant stocke 71 fonctions chiffrées dans la clé de registre HKCUPrinters et les protège avec Windows DPAPI. Il collecte les documents des disques locaux, des médias USB et des fichiers en cours d'édition active, puis déduplique les données avec MD5 avant de les exfiltrer vers le service légitime compatible S3 Tebi.io Tebi.io, en cas d’échec vers des domaines russes codés en dur. L’infrastructure plus large s’appuie également sur des résolveurs de dépôt mort hébergés sur des plateformes publiques telles que Telegram, Telegra.ph, Write.as, Rentry.co et Mastodon, ainsi que sur des services DNS dynamiques. La campagne continue de cibler les environnements gouvernementaux et d’infrastructures critiques ukrainiens.
Enquête
Sekoia.io a analysé plus de 70 artefacts, reconstruit le dropper complet PowerShell et identifié la persistance basée sur le registre, un mutex, une exécution PowerShell planifiée cachée et un schéma d’exfiltration multi-couches. Les chercheurs ont cartographié l’infrastructure du résolveur de dépôt mort, catalogué 115 adresses IP, quatre domaines et plusieurs jeux d’identifiants S3, et ont observé des mises à jour automatisées faites via des publications Mastodon. Ils ont également noté des similitudes avec l’activité InvisiMole de 2020, en particulier l’utilisation de charges utiles chiffrées DPAPI stockées dans le registre.
Atténuation
Les organisations devraient surveiller les écritures inhabituelles dans clé de registre HKCUPrinters et les protège avec Windows DPAPI. Il collecte les documents des disques locaux, des médias USB et des fichiers en cours d'édition active, puis déduplique les données avec MD5 avant de les exfiltrer vers le service légitime compatible S3, la création de processus PowerShell cachés, et l’utilisation du mutex Globalassembly307. Le trafic sortant vers le point d'accès S3 identifié s3.tebi.io s3.tebi.io et l’infrastructure de secours telle que justsstop.ru and 165.22.170.129 doit être bloqué. Les défenseurs devraient également déployer des détections pour la chaîne d’agent utilisateur de style iPhone spécifique et pour les entrées Run du registre qui invoquent des scripts PowerShell.
Réponse
Si une activité GammaSteel est détectée, isolez l’hôte affecté, collectez la clé de registre HKCUPrinters et les protège avec Windows DPAPI. Il collecte les documents des disques locaux, des médias USB et des fichiers en cours d'édition active, puis déduplique les données avec MD5 avant de les exfiltrer vers le service légitime compatible S3 ruche de registre, extrayez les charges utiles protégées par DPAPI, et déchiffrez-les en utilisant la clé principale de la victime si possible. Cherchez dans l’environnement des artefacts connexes, bloquez les URL et domaines de commande et contrôle identifiés, réinitialisez les identifiants compromis, et effectuez un examen médico-légal complet pour identifier des modules malveillants supplémentaires.
"graph TB %% Class definitions classDef technique fill:#e6f7ff classDef process fill:#ffebcc classDef action fill:#c2f0c2 classDef tool fill:#dddddd classDef storage fill:#ffe6e6 classDef network fill:#d9d9ff classDef data fill:#f0e68c %% Nodes u2013 techniques tech_T1027_009["<b>Techniques</b> – <b>T1027.009 Charges utiles intégrées</b><br/>Obscurcit la charge utile dans un autre fichier"] class tech_T1027_009 technique tech_T1027_007["<b>Technique</b> – <b>T1027.007 Résolution API dynamique</b><br/>Résout les APIs à l’exécution pour éviter l’analyse statique"] class tech_T1027_007 technique tech_T1027_002["<b>Technique</b> – <b>T1027.002 Compression logicielle</b><br/>Emballer le code malveillant pour masquer sa véritable nature"] class tech_T1027_002 technique tech_T1027_013["<b>Technique</b> – <b>T1027.013 Fichier chiffré/codé</b><br/>Chiffre les données avec DPAPI avant le stockage"] class tech_T1027_013 technique tech_T1547_001["<b>Technique</b> – <b>T1547.001 Clés Run du registre / Dossier de démarrage</b><br/>Ajoute une clé Run pour obtenir la persistance"] class tech_T1547_001 technique tech_T1037_005["<b>Technique</b> – <b>T1037.005 Éléments de démarrage</b><br/>Utilise les éléments de démarrage pour la persistance"] class tech_T1037_005 technique tech_T1680["<b>Technique</b> – <b>T1680 Découverte des stockages locaux</b><br/>Découvre les disques locaux et les profils utilisateur"] class tech_T1680 technique tech_T1135["<b>Technique</b> – <b>T1135 Découverte de partage réseau</b><br/>Trouve les emplacements de partage réseau"] class tech_T1135 technique tech_T1006["<b>Technique</b> – <b>T1006 Accès direct au volume</b><br/>Accède directement aux médias amovibles"] class tech_T1006 technique tech_T1025["<b>Technique</b> – <b>T1025 Données des médias amovibles</b><br/>Collecte des données des appareils USB"] class tech_T1025 technique tech_T1564_005["<b>Technique</b> – <b>T1564.005 Système de fichiers caché</b><br/>Stocke les fichiers dans des emplacements cachés"] class tech_T1564_005 technique tech_T1005["<b>Technique</b> – <b>T1005 Données du système local</b><br/>Collecte des fichiers de la machine locale"] class tech_T1005 technique tech_T1537["<b>Technique</b> – <b>T1537 Transfert des données vers un compte cloud</b><br/>Télécharge les données volées dans un stockage cloud"] class tech_T1537 technique tech_T1538["<b>Technique</b> – <b>T1538 Tableau de bord de service cloud</b><br/>Utilise les interfaces de service cloud pour l’exfiltration des données"] class tech_T1538 technique tech_T1102_001["<b>Technique</b> – <b>T1102.001 Service Web: Résolveur de dépôt mort</b><br/>Récupère les commandes et la configuration à partir de services web publics"] class tech_T1102_001 technique tech_T1620["<b>Technique</b> – <b>T1620 Chargement de code réflexif</b><br/>Charge et exécute le code reçu au moment de l’exécution"] class tech_T1620 technique %% Nodes u2013 actions and components malware_dropper["<b>Logiciel malveillant</b> – <b>Nom</b>: Déposeur initial<br/><b>Description</b>: Exécute le script PowerShell obfusqué"] class malware_dropper process process_powershell["<b>Processus</b> – <b>Nom</b>: PowerShell<br/><b>Rôle</b>: Exécute un script encodé"] class process_powershell process storage_dpapi["<b>Stockage</b> – <b>Emplacement</b>: HKCUPrinters<br/><b>Contenu</b>: 71 fonctions chiffrées avec DPAPI"] class storage_dpapi storage persistence_runkey["<b>Action</b> – <b>Persistance</b>: Clé Run du registre<br/><b>Clé</b>: HKCUSoftwareMicrosoftWindowsCurrentVersionRun"] class persistence_runkey action process_hidden_ps["<b>Processus</b> – <b>Nom</b>: PowerShell caché<br/><b>Objectif</b>: Lit l’orchestrateur à partir du registre"] class process_hidden_ps process orchestrator["<b>Action</b> – <b>Orchestrateur</b>: Énumère les ressources et coordonne la collecte"] class orchestrator action enumeration["<b>Action</b> – <b>Énumération</b>: Lecteurs, profils, partages réseau"] class enumeration action collection["<b>Action</b> – <b>Collecte</b>: Recueille des fichiers à partir des emplacements locaux et réseau"] class collection action monitor_usb["<b>Action</b> – <b>Surveillance USB</b>: Abonnement d’événement WMI pour les médias amovibles"] class monitor_usb action staging_folder["<b>Stockage</b> – <b>Dossier caché</b>: Zone de préparation pour les fichiers copiés"] class staging_folder storage fs_watcher["<b>Processus</b> – <b>Nom</b>: FileSystemWatcher<br/><b>Fonction</b>: Surveille les disques non‑USB pour les changements"] class fs_watcher process deduplication["<b>Action</b> – <b>Déduplication</b>: Supprime les fichiers en double avant l’exfiltration"] class deduplication action upload_s3["<b>Action</b> – <b>Téléchargement</b>: Envoie des données vers un bucket compatible S3 (tebi.io)"] class upload_s3 network fallback_post["<b>Action</b> – <b>Exfiltration de secours</b>: POST vers des domaines C2 imitant un agent utilisateur iPhone"] class fallback_post network dead_drop["<b>Action</b> – <b>Résolveur de dépôt mort</b>: Récupère la config de Telegram, Telegra.ph, Write.as, Rentry.co, Mastodon"] class dead_drop action vbscript_backdoor["<b>Action</b> – <b>Porte dérobée secondaire</b>: Exécute du VBScript arbitraire à partir de la réponse HTTP"] class vbscript_backdoor action %% Connections u2013 flow malware_dropper –>|utilise| tech_T1027_009 malware_dropper –>|utilise| tech_T1027_007 malware_dropper –>|utilise| tech_T1027_002 malware_dropper –>|stocke des données chiffrées| tech_T1027_013 malware_dropper –>|lance| process_powershell process_powershell –>|écrit des fonctions chiffrées dans| storage_dpapi storage_dpapi –>|active| persistence_runkey persistence_runkey –>|crée| tech_T1547_001 persistence_runkey –>|crée| tech_T1037_005 persistence_runkey –>|démarre| process_hidden_ps process_hidden_ps –>|charge l’orchestrateur à partir du registre| orchestrator orchestrator –>|effectue| enumeration enumeration –>|couvre| tech_T1680 enumeration –>|couvre| tech_T1135 orchestrator –>|collecte des données en utilisant| collection collection –>|utilise| tech_T1005 collection –>|inclut les médias amovibles via| tech_T1025 collection –>|inclut l’accès au volume direct via| tech_T1006 collection –>|déclenche| monitor_usb monitor_usb –>|copie des fichiers vers| staging_folder staging_folder –>|est caché par| tech_T1564_005 staging_folder –>|surveillé par| fs_watcher fs_watcher –>|détecte les changements et déclenche| deduplication deduplication –>|télécharge vers le cloud via| upload_s3 upload_s3 –>|dépend de| tech_T1537 upload_s3 –>|secours vers| fallback_post fallback_post –>|dépend de| tech_T1538 orchestrator –>|obtient des mises à jour de| dead_drop dead_drop –>|utilise| tech_T1102_001 dead_drop –>|livre| vbscript_backdoor vbscript_backdoor –>|exploite| tech_T1620 %% Assignations de style class malware_dropper,process_powershell,process_hidden_ps,fs_watcher,orchestrator,monitor_usb,vbscript_backdoor built-in class storage_dpapi,staging_folder built-in class persistence_runkey,enumeration,collection,deduplication,upload_s3,fallback_post,dead_drop action class tech_T1027_009,tech_T1027_007,tech_T1027_002,tech_T1027_013,tech_T1547_001,tech_T1037_005,tech_T1680,tech_T1135,tech_T1006,tech_T1025,tech_T1564_005,tech_T1005,tech_T1537,tech_T1538,tech_T1102_001,tech_T1620 technique "
Flux d’attaque
Détections
Points de persistance possible [ASEPs – Hive Software/NTUSER] (via registry_event)
Voir
Possibilité d’exécution via des lignes de commande PowerShell cachées (via cmdline)
Voir
LOLBAS WScript / CScript (via process_creation)
Voir
Possible découverte d’informations système utilisant le module WMI PowerShell (via powershell)
Voir
Requête DNS de processus suspect utilisant des services web connus pour abus (via network_connection)
Voir
Possible abus du domaine de développement Cloudflare (via dns)
Voir
IOCs (SourceIP) pour détecter : Matryoshka #3/3 du FSB — Les cadeaux de Gamaredon qui continuent de se déballer — GammaSteel
Voir
IOCs (DestinationIP) pour détecter : Matryoshka #3/3 du FSB — Les cadeaux de Gamaredon qui continuent de se déballer — GammaSteel
Voir
Détection de l’exécution PowerShell cachée pour les opérations Gamaredon [Windows Powershell]
Voir
Détection de la technique de mise en scène du registre PowerShell de Gamaredon [Événement du registre Windows]
Voir
Exécution de Simulation
Prérequis : Le contrôle préalable de télémétrie et de base doit avoir réussi.
Raisonnement : 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 TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.
-
Narratif d’attaque & Commandes :
L’attaquant, ayant compromis un compte utilisateur à faible privilège, souhaite mettre en scène une charge utile PowerShell chiffrée sans toucher le système de fichiers. Il écrit la charge utile encodée en Base64 dans laRunclé afin qu’elle s’exécute à la prochaine connexion. Pour éviter la seule exclusion de la règle, ils utilisent délibérément une sous-clé sousHKCUPrintersqui est not la valeur exclue, imitant le motif de “mise en scène de l’imprimante” observé dans les échantillons de Gamaredon. -
Script de test de régression :
# -------------------------------------------------------------- # Simuler la mise en scène du registre PowerShell Gamaredon (TC-20260608-A1B2C) # -------------------------------------------------------------- # 1. Définir une commande PowerShell inoffensive encodée en Base64 (par ex., écrire un fichier) $payload = 'Write-Host "Simulation Gamaredon exécutée"' $b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload)) # 2. Persister la charge utile via la clé Run (persistance) $runKey = 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' New-ItemProperty -Path $runKey -Name 'GamaredonStager' -Value "powershell -enc $b64" -PropertyType String -Force # 3. Mettre en scène la même charge utile dans une clé “imprimante” (mise en scène sans fichier) $printerKey = 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' # Remarque : suffixe différent pour éviter l'exclusion New-Item -Path $printerKey -Force | Out-Null Set-ItemProperty -Path $printerKey -Name 'EncryptedPS' -Value $b64 -Force Write-Host "Simulation complète – entrées de registre créées." -
Commandes de nettoyage :
# Supprimer l'entrée de la clé Run Remove-ItemProperty -Path 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' -Name 'GamaredonStager' -ErrorAction SilentlyContinue # Supprimer la clé de mise en scène de l'imprimante Remove-Item -Path 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' -Recurse -Force -ErrorAction SilentlyContinue Write-Host "Nettoyage terminé – artefacts du registre supprimés."