Les Laboratoires de Sécurité Elastic révèlent BRUSHWORM et BRUSHLOGGER
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Elastic Security Labs a découvert deux familles de logiciels malveillants personnalisés, BRUSHWORM et BRUSHLOGGER, utilisés contre une institution financière en Asie du Sud. BRUSHWORM est une porte dérobée modulaire qui maintient la persistance via une tâche planifiée, se propage via des supports amovibles et vole des fichiers couvrant un large éventail d’extensions. BRUSHLOGGER est un keylogger DLL chargée latéralement qui capture les frappes en conjonction avec le contexte de la fenêtre active et enregistre les journaux sous forme cryptée par XOR. Les deux échantillons de logiciels malveillants semblent relativement peu sophistiqués et montrent des signes de développement en cours par essais et erreurs.
Enquête
Au cours de l’enquête, les analystes ont récupéré l’exécutable de la porte dérobée paint.exe et la DLL keylogger chargée latéralement libcurl.dll, puis ont examiné leurs méthodes de persistance, la logique de configuration, le comportement de propagation USB et les répertoires de mise en scène des données. Des versions de développement antérieures telles que V1.exe, V2.exe et V4.exe ont également été trouvées sur VirusTotal, où elles étaient liées à une infrastructure DNS dynamique gratuite pour le commandement et le contrôle. Le rapport a également documenté les tâches planifiées des logiciels malveillants, les mutex et les conventions de chemin de fichier.
Atténuation
Les défenseurs doivent empêcher l’exécution de binaires inconnus depuis les chemins ProgramData et Public, surveiller la création de tâches planifiées nommées MSGraphics ou MSRecorder, et détecter le mutex Windows-Updates-KB852654856. Les organisations devraient également désactiver ou restreindre l’exécution automatique depuis les supports amovibles et inspecter les noms de fichiers suspects. La journalisation et l’inspection du trafic WinHTTP vers le domaine C2 identifié doivent être appliquées.
Réponse
Si une activité de BRUSHWORM ou de BRUSHLOGGER est détectée, isolez le point d’extrémité, préservez les échantillons paint.exe et libcurl.dll, capturez les preuves des tâches planifiées, et supprimez les fichiers malveillants de tous les répertoires utilisateurs et publics. Les enquêteurs doivent également scanner les lecteurs amovibles à la recherche de binaires leurres, supprimer le dossier de collecte d’exfiltration, réinitialiser les identifiants affectés, et surveiller tout chargement de charge utile supplémentaire depuis le serveur C2.
"graph TB %% Section des définitions de classes classDef technique fill:#cfe2f3 %% Définitions des nœuds exec_check["<b>Technique</b> – T1497.002 Évasion de Virtualisation/Sandbox:<br/>Vérifie l’activité utilisateur, la résolution de l’écran, le nom d’utilisateur, le nom de l’ordinateur, les chaînes CPUID de l’hyperviseur et les mouvements de la souris pour abandonner dans les environnements d’analyse."] class exec_check technique persistence_task["<b>Technique</b> – T1053 Tâche/Emploi Planifiée:<br/>Crée une tâche planifiée Windows nommée MSGraphics qui exécute la porte dérobée à chaque connexion utilisateur."] class persistence_task technique c2_contact["<b>Technique</b> – T1071 Protocole de Couches d’Application:<br/>La porte dérobée contacte son serveur C2 via HTTPS en utilisant WinHTTP."] class c2_contact technique encrypted_channel["<b>Technique</b> – T1573 Canal Chiffré:<br/>Établit un canal chiffré pour télécharger des modules supplémentaires."] class encrypted_channel technique shared_module["<b>Technique</b> – T1129 Modules Partagés:<br/>Télécharge une charge utile DLL (Recorder.dll) depuis le serveur C2."] class shared_module technique second_task["<b>Technique</b> – T1053 Tâche/Emploi Planifiée:<br/>Crée une deuxième tâche planifiée qui lance Recorder.dll via rundll32.exe."] class second_task technique dll_side["<b>Technique</b> – T1574.001 Chargement Latéral de DLL:<br/>Libcurl.dll malveillant est chargé latéralement pour détourner le flux d’exécution."] class dll_side technique keylogging["<b>Technique</b> – T1056.001 Keylogging:<br/>DllMain installe un accrocheur de clavier de bas niveau pour capturer les frappes, les titres de fenêtre et les horodatages."] class keylogging technique obfuscation["<b>Technique</b> – T1027 Fichiers ou Informations Obscurcis:<br/>Les fichiers journaux sont chiffrés par XOR ; les données de configuration sont écrites en clair puis supprimées."] class obfuscation technique local_staging["<b>Technique</b> – T1074.001 Mise en Scène des Données Locales:<br/>Les fichiers collectés sont copiés dans C:UsersPublicSysteminfo et un journal de hachage est conservé pour éviter l’exfiltration en double."] class local_staging technique usb_propagation["<b>Technique</b> – T1092 Communication Via Médias Amovibles:<br/>Lorsque l’Internet est accessible, le malware se copie sur les lecteurs USB attachés en utilisant des noms de fichiers leurres."] class usb_propagation technique usb_data_exfil["<b>Technique</b> – T1025 Données depuis Médias Amovibles:<br/>Poursuit le vol de fichiers depuis les lecteurs USB."] class usb_data_exfil technique physical_exfil["<b>Technique</b> – T1052.001 Exfiltration Sur Support Physique:<br/>En cas d’absence d’Internet, les fichiers volés sont copiés sur un média amovible pour être exfiltrés physiquement."] class physical_exfil technique %% Connexions montrant le flux exec_check –>|déclenche| persistence_task persistence_task –>|exécute| c2_contact c2_contact –>|établit| encrypted_channel c2_contact –>|télécharge| shared_module shared_module –>|crée| second_task second_task –>|lance| dll_side dll_side –>|charge| keylogging keylogging –>|produit| obfuscation obfuscation –>|stocke| local_staging local_staging –>|copie à| usb_propagation usb_propagation –>|exfiltre de| usb_data_exfil local_staging –>|utilise pour| physical_exfil "
Flux d’attaque
Détections
Tâche planifiée suspecte (via audit)
Voir
Exécution suspecte depuis le profil utilisateur public (via création_processeur)
Voir
Dll déposée à un emplacement peu commun (via l’événement_fichier)
Voir
Fichiers suspects dans le profil utilisateur public (via l’événement_fichier)
Voir
IOC (HashSha256) à détecter : Elastic Security Labs découvre BRUSHWORM et BRUSHLOGGER
Voir
Détection de communication C2 Backdoor BRUSHWORM [Connexion réseau Windows]
Voir
Détection de l’exécution de Paint.exe et Rundll32.exe [Création de processus Windows]
Voir
Exécution de simulation
Prérequis : La vérification pré-vol du télémétrie & référence doit avoir réussi.
Rationale: Cette section détaille l’exécution précise de la technique adverse (TTP) conçue pour déclencher la règle de détection. Les commandes et le narratif 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.
-
Narrative d’attaque & commandes :
Un attaquant a obtenu une DLL malveillante (evil.dll) qui, lorsqu’elle est exécutée viarundll32.exe, déploie une charge utile de ransomware et écrit des données cryptées sur un lecteur USB. Pour éviter la suspicion, l’attaquant utilise d’abordpaint.exepour créer une image d’apparence bénigne sur le support amovible, puis utiliserundll32.exepour charger la DLL malveillante cachée dans le même répertoire. Les deux actions génèrent des événements de création de processus qui correspondent à la règle Sigma. -
Script de test de régression :
# ------------------------------ # Simulation de Paint + abus de Rundll32 # ------------------------------ # 1. Créez un répertoire de travail temporaire $workDir = "$env:TEMPPaintRundllSim" New-Item -ItemType Directory -Path $workDir -Force | Out-Null # 2. Copiez une image légitime sur l'USB (simulé par $workDir) $imagePath = Join-Path $workDir "innocent.png" Invoke-WebRequest -Uri "https://via.placeholder.com/150" -OutFile $imagePath # 3. Lancez Paint pour ouvrir l'image (usage bénin – correspond toujours à la règle) Start-Process -FilePath "$env:WINDIRsystem32mspaint.exe" -ArgumentList "`"$imagePath`"" -PassThru | Out-Null # 4. Déposez une DLL malveillante (simulée ; la véritable charge utile serait dissimulée) $dllPath = Join-Path $workDir "evil.dll" $dllBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # En-tête PE minimal [IO.File]::WriteAllBytes($dllPath, $dllBytes) # 5. Exécutez la DLL via Rundll32 (c'est l'étape malveillante) Start-Process -FilePath "$env:WINDIRsystem32rundll32.exe" ` -ArgumentList "`"$dllPath`,EntryPoint`"" -PassThru | Out-Null # 6. Pause pour permettre l'ingestion par SIEM Write-Host "Simulation exécutée. Attendez ~30s pour que les journaux apparaissent dans le SIEM." -
Commandes de nettoyage :
# Supprimez les fichiers et processus temporaires Stop-Process -Name mspaint -ErrorAction SilentlyContinue Stop-Process -Name rundll32 -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPPaintRundllSim" -Recurse -Force Write-Host "Nettoyage terminé."