Comment un fichier VHDX livre Remcos RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une campagne de malware en plusieurs étapes utilise une archive ZIP armée contenant une image disque VHDX pour échapper aux contrôles de sécurité courants. Après le montage du VHDX, un fichier JavaScript obfusqué s’exécute et lance une série d’étapes PowerShell via WMI. La charge finale est Remcos RAT, qui est injecté dans un processus Windows légitime pour dissimuler son exécution.
Enquête
Le chercheur a examiné une archive ZIP malveillante et le conteneur VHDX intégré pour reconstituer le flux d’attaque complet. L’analyse a révélé une chaîne d’exécution complexe utilisant la création de processus basée sur WMI pour déguiser les relations parent-enfant, ainsi que l’obfuscation de chaînes XOR et Base64 et un chargeur .NET réflexif. Le chemin d’infection a été retracé avec succès depuis l’exécution initiale de JavaScript jusqu’au déploiement de la charge finale Remcos.
Atténuation
Les organisations devraient appliquer des contrôles stricts pour empêcher le montage d’images disque VHDX à partir de sources non fiables. Les outils de sécurité devraient également surveiller les Win32_Process.Create activités suspectes déclenchées par des moteurs de script comme JavaScript ou PowerShell. Bloquer les domaines malveillants connus et surveiller les persistances inhabituelles de clés Run dans le registre peuvent encore réduire les risques.
Réponse
Si cette activité est détectée, isolez immédiatement le point d’extrémité affecté pour stopper la communication de commande et de contrôle. Acquérez un vidage de mémoire pour capturer la charge injectée Remcos et le chargeur .NET réflexif. Un examen médico-légal complet devrait ensuite chercher des entrées de clé Run malveillantes, des fichiers VHDX supplémentaires et des activités PowerShell suspectes ailleurs dans l’environnement.
Flux d’attaque
Détections
Points de persistance possibles [ASEPs – Hive Software/NTUSER] (via event_register)
Voir
Points de persistance possibles [ASEPs – Hive Software/NTUSER] (via ligne de commande)
Voir
LOLBAS WScript / CScript (via création de processus)
Voir
Fichier de disque dur virtuel créé (via event_fichier)
Voir
Service DNS dynamique possible contacté (via dns)
Voir
Détection de chargeur .Net réflexif PowerShell et d’injection de processus [Création de processus Windows]
Voir
Exécution de script PowerShell via WMI pour évasion EDR [Windows Powershell]
Voir
## Exécution de simulation
Prérequis : Le contrôle pré-vol de télémétrie et de ligne de base doit avoir passé.
Rationale : Cette section détaille l’exécution précise de la technique d’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT directement refléter les TTP identifiés et viser à générer exactement la télémétrie attendue par la logique de détection. Les exemples abstraits ou non liés conduiront à un mauvais diagnostic.
-
Récit d’attaque et commandes : L’adversaire vise à exécuter une charge utile malveillante en mémoire pour éviter la détection par l’AV traditionnel. Ils utilisent un script PowerShell qui exploite
[System.Reflection.Assembly]::Load()pour extraire une DLL .NET compilée directement à partir d’un tableau d’octets dans le processus actuel. Pour maintenir la persistance et échapper à un examen minutieux, ils tentent de générer ou d’interagir avecbackgroundTaskHost.exe, un processus Windows légitime, pour masquer leur fil d’exécution dans une tâche de fond système standard. -
Script de test de régression :
# Script de simulation : Charge reflexive .NET & Interaction de processus # Ce script imite la logique capturée par la règle de détection. # 1. Crée un tableau d'octets fictif représentant un assemblage .NET (très simplifié pour la simulation) $assemblyBytes = [byte[]](0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00) # mime l'en-tête MZ Write-Host "[+] Tentative de chargement d'assemblage réflexif .NET..." -ForegroundColor Cyan try { # Cette chaîne spécifique est une cible pour la règle de détection $assembly = [System.Reflection.Assembly]::Load($assemblyBytes) Write-Host "[!] Succès : Assemblage chargé en mémoire (Simulation uniquement)." -ForegroundColor Green } catch { Write-Host "[-] Échec du chargement de l'assemblage (attendu en raison d'octets de test invalides), mais la commande a été envoyée." -ForegroundColor Yellow } Write-Host "[+] Tentative d'invocation de backgroundTaskHost.exe pour déclencher la détection..." -ForegroundColor Cyan # Cette chaîne spécifique est une cible pour la règle de détection Start-Process "C:WindowsSystem32backgroundTaskHost.exe" -ArgumentList "/test-detection" -
Commandes de nettoyage :
# Nettoyage : Terminer le processus backgroundTaskHost généré Stop-Process -Name "backgroundTaskHost" -ErrorAction SilentlyContinue Write-Host "[+] Nettoyage terminé. BackgroundTaskHost terminé." -ForegroundColor Green