La furtivité en couches : Dévoiler le chargeur utilisé dans les campagnes d’email ciblées
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Un chargeur largement disponible est réutilisé par plusieurs acteurs malveillants pour livrer différents RATs et voleurs d’informations via des e-mails de phishing contenant des pièces jointes JavaScript, PowerShell, LNK et ZIP. Le chargeur combine la stéganographie, le chargement réflexif, le creusement de processus et une méthode émergente de contournement UAC pour permettre une exécution sans fichier et élever les privilèges. Une activité a été observée ciblant des entités manufacturières et gouvernementales à travers l’Europe et le Moyen-Orient, avec pour objectif apparent de voler des données industrielles et des identifiants.
Enquête
Cyble Research and Intelligence Labs a analysé la chaîne de livraison et a décrit un workflow d’évasion en quatre étapes. Cela commence par un stager JavaScript obfusqué, pivote vers un chargeur stéganographique PowerShell, abuse d’une bibliothèque TaskScheduler trojanisée, et aboutit à une injection de charge utile dans RegAsm.exe. Le malware final est PureLog Stealer, qui collecte les identifiants de navigateurs, les données de portefeuilles de cryptomonnaies et les informations sur l’hôte/le système pour l’exfiltration.
Atténuation
Utilisez des protections avancées pour les e-mails avec détonation en bac à sable, bloquez l’exécution de scripts à partir de contenus transmis par e-mail, appliquez le mode langage restreint PowerShell, et surveillez le creusement de binaires Windows légitimes. Ajoutez la détection de la stéganographie dans les fichiers image et ajustez les règles EDR pour révéler le chargement réflexif d’assemblages .NET et les modèles de contournement de l’UAC associés à cette chaîne de chargeur.
Réponse
Si des indicateurs apparaissent, isolez le terminal, arrêtez les activités suspectes PowerShell et WMI, capturez des images mémoire, et recherchez les artefacts .NET réflexifs et les processus RegAsm.exe injectés. Réinitialisez les identifiants potentiellement exposés et bloquez les domaines et adresses IP malveillants associés pour prévenir la réinfection et l’activité latérale.
« graph TB %% Class definitions classDef action fill:#99ccff %% Node definitions act_phishing[« <b>Action</b> – <b>T1566.001 Pièce jointe de phishing</b><br /><b>Description</b> : Envoyez une pièce jointe d’e-mail malveillante qui exploite une vulnérabilité Office. »] class act_phishing action act_exploit[« <b>Action</b> – <b>T1203 Exploitation pour l’exécution par le client</b> (CVEu20112017u201111882)<br /><b>Description</b>: Déclencher une vulnérabilité dans Microsoft Office pour exécuter du code. »] class act_exploit action act_obfuscate[« <b>Action</b> – <b>T1027 Fichiers ou informations obfusqués</b><br /><b>Description</b>: Charger JavaScript ou PowerShell obfusqué pour masquer l’intention malveillante. »] class act_obfuscate action act_stego[« <b>Action</b> – <b>T1027.003 Stéganographie</b><br /><b>Description</b>: Intégrer la charge utile dans une image PNG pour échapper à la détection. »] class act_stego action act_reflective_load[« <b>Action</b> – <b>T1620 Chargement réflexif de code</b><br /><b>Description</b>: Charger un assemblage .NET en mémoire sans toucher au disque. »] class act_reflective_load action act_regasm[« <b>Action</b> – <b>T1218.009 Exécution par proxy de RegAsm</b><br /><b>Description</b>: Abuser de RegAsm pour exécuter du code .NET arbitraire. »] class act_regasm action act_process_hollow[« <b>Action</b> – <b>T1055.012 Creusement de processus</b><br /><b>Description</b>: Remplacer la mémoire d’un processus légitime par du code malveillant. »] class act_process_hollow action act_uac_bypass[« <b>Action</b> – <b>T1548.002 Contournement du contrôle de compte d’utilisateur</b><br /><b>Description</b>: Élever les privilèges sans inviter l’utilisateur. »] class act_uac_bypass action act_cred_steal[« <b>Action</b> – <b>T1555.003 Identifiants des navigateurs Web</b><br /><b>Description</b>: Extraire les identifiants enregistrés dans le navigateur. »] class act_cred_steal action act_data_collect[« <b>Action</b> – <b>T1119 Collecte automatisée</b><br /><b>Description</b>: Rassembler des fichiers et des informations système. »] class act_data_collect action act_exfil[« <b>Action</b> – <b>T1102 Exfiltration via service web</b> / <b>T1041 Exfiltration via canal C2</b><br /><b>Description</b>: Envoyer des données collectées à un serveur distant via un service web. »] class act_exfil action %% Connections act_phishing u002du002d>|leads_to| act_exploit act_exploit u002du002d>|leads_to| act_obfuscate act_obfuscate u002du002d>|leads_to| act_stego act_stego u002du002d>|leads_to| act_reflective_load act_reflective_load u002du002d>|leads_to| act_regasm act_regasm u002du002d>|leads_to| act_process_hollow act_process_hollow u002du002d>|leads_to| act_uac_bypass act_uac_bypass u002du002d>|leads_to| act_cred_steal act_cred_steal u002du002d>|leads_to| act_data_collect act_data_collect u002du002d>|leads_to| act_exfil «
Flux d’attaque
Détections
LOLBAS WScript / CScript (via process_creation)
Voir
Fichier image créé par un processus suspect (via file_event)
Voir
Chaînes PowerShell suspectes (via powershell)
Voir
Archive Internet potentielle résolue par un processus peu commun (via dns_query)
Voir
Appeler des méthodes .NET suspectes depuis PowerShell (via powershell)
Voir
Téléchargement de fichier suspect directement via IP (via proxy)
Voir
IOCs (SourceIP) pour détecter : La dissimulation en couches : Dévoiler le chargeur utilisé dans les campagnes d’e-mail ciblées
Voir
IOCs (DestinationIP) pour détecter : La dissimulation en couches : Dévoiler le chargeur utilisé dans les campagnes d’e-mail ciblées
Voir
IOCs (HashSha256) pour détecter : La dissimulation en couches : Dévoiler le chargeur utilisé dans les campagnes d’e-mail ciblées
Voir
Détection de script PowerShell caché et décodé en Base64 [Windows Powershell]
Voir
Création d’objets WMI et détection du creusement de processus [Création de processus Windows]
Voir
Exécution de simulation
Condition préalable : La Vérification préalable de télémétrie et de référence 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 visent à générer la télémétrie exacte attendue par la logique de détection.
-
Narratif et commandes d’attaque :
Un adversaire envoie un e-mail de spear-phishing contenant une pièce jointe JPEG avec une charge utile PowerShell cachée intégrée de manière stéganographique. Après que la victime a ouvert la pièce jointe, le script de première étape de l’attaquant extrait les données cachées, les décode en Base64, et lance un chargeur PowerShell de seconde étape dans une fenêtre cachée. Le chargeur contacte ensuite un serveur C2 pour télécharger des outils supplémentaires. La ligne de commande exacte générée sur l’hôte de la victime est :powershell -WindowStyle Hidden -EncodedCommand <Base64String>Comme l’attaquant inclut explicitement le mot « Base64 » dans le script (par exemple, en utilisant le
-EncodedCommandencryptage qui affiche « Base64 » dans les commentaires), la règle de détectionselection_base64_decoded_scriptLa condition est satisfaite, et le drapeau de fenêtre cachée satisfaitselection_hidden_powershell. -
Script de test de régression :
# Simulation de chargeur PowerShell caché en Base64 # ------------------------------------------------- # Étape 1 : Créer un script PowerShell factice $script = 'Write-Host "Hôte compromis : $env:COMPUTERNAME"; Start-Sleep -Seconds 30' # Étape 2 : Encoder en Base64 (Unicode) $bytes = [System.Text.Encoding]::Unicode.GetBytes($script) $b64 = [Convert]::ToBase64String($bytes) # Étape 3 : Lancer PowerShell caché avec la charge utile encodée Start-Process -FilePath "powershell.exe" ` -ArgumentList "-WindowStyle Hidden -EncodedCommand $b64" ` -WindowStyle Hidden ` -NoNewWindow # La présence de la chaîne "Base64" dans le commentaire satisfait la règle. -
Commandes de nettoyage :
# Terminer les instances PowerShell cachées restantes lancées par le test Get-Process -Name "powershell" | Where-Object { $_.StartInfo.Arguments -match "-WindowStyle Hidden" } | Stop-Process -Force # Optionnel : Supprimer tout fichier temporaire (aucun créé dans ce script)