SOC Prime Bias: Moyen

25 Nov 2025 18:38

DarkGate Décrypté

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
DarkGate Décrypté
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

DarkGate est un chargeur basé sur Delphi vendu sous forme de Malware-as-a-Service sur les marchés criminels. Il inclut une fonctionnalité complète de RAT, une résolution d’API dynamique et des astuces d’évasion en couches telles que des jeux de caractères base64 personnalisés, style Union-API appel système chargement, et injection APC. L’outil, attribué au vendeur « RastaFarEye », a été adopté par des acteurs comme TA577 et Ducktail. Il communique avec le C2 sur HTTP avec des charges utiles obfusquées et peut déployer des utilitaires de bureau à distance, voler des jetons Discord et exécuter un shell inversé interactif.

Analyse de DarkGate Malware

La publication offre une explication détaillée par ingénierie inverse de l’exécutable de DarkGate, expliquant son brouillage de configuration sur mesure, sa génération de BotID pilotée par XOR, et son journalisation chiffrée. Elle catalogue les techniques de persistance du chargeur, les chemins d’escalade de privilèges, les flux de vol de jetons et l’abus de binaires légitimes tels que PsExec et Extexport pour le chargement de DLL. Le document décrit en outre les schémas de communication C2, les identifiants hVNC par défaut, et les ports HTTP typiques exploités (2351 et 9999).

Atténuation

Les équipes de sécurité doivent surveiller la création des fichiers référencés et des entrées de Registre Run, invalider ou bloquer immédiatement les identifiants hVNC par défaut, et détecter l’utilisation de PsExec et d’Extexport pour le chargement de DLL non approuvé. Les analyses comportementales doivent couvrir l’utilisation des appels système Union-API, l’injection APC via NtTestAlert, et le spoofing de PID parent. Les défenses réseau peuvent identifier des ports HTTP étranges et essayer de décoder les alphabets base64 personnalisés de DarkGate pour faire ressortir le trafic C2.

Réponse

Une fois l’activité de DarkGate confirmée, isolez le point d’extrémité affecté, récupérez les artefacts documentés, terminez les processus malveillants et nettoyez tous les points de persistance. Faites tourner tous les identifiants exposés et bloquez les domaines et plages IP connus du C2. Un examen médico-légal approfondi doit identifier toute charge utile secondaire et vérifier que toutes les DLL introduites via Extexport ou des chargeurs similaires ont été éradiquées.

mermaid graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef action fill:#d9ffd9 %% Nodes – Techniques step_initial_infection[« <b>Technique</b> – <b>T1055.001: Accès initial via script AutoIt</b><br />Un script AutoIt est utilisé pour livrer la charge utile furtive au système de la victime. »] class step_initial_infection technique step_dynamic_api[« <b>Technique</b> – <b>T1027.007: Fichiers obfusqués/enregistrés – Résolution d’API dynamique</b><br />Le code malveillant résout les API Windows nécessaires au moment de l’exécution pour éviter l’analyse statique. »] class step_dynamic_api technique step_union_syscall[« <b>Technique</b> – <b>T1106: API native</b><br />L’évasion des appels système Union API est effectuée pour cacher le comportement malveillant des outils de surveillance. »] class step_union_syscall technique step_process_injection[« <b>Technique</b> – <b>T1055.004: Injection de processus – APC</b><br />Une injection d’appel de procédure asynchrone est utilisée pour exécuter du code malveillant à l’intérieur d’un processus légitime. »] class step_process_injection technique step_token_manipulation[« <b>Technique</b> – <b>T1134: Manipulation de jeton d’accès</b><br />L’attaquant vole ou modifie les jetons d’accès pour obtenir des privilèges élevés. »] class step_token_manipulation technique step_priv_esc_psexec[« <b>Technique</b> – <b>T1548.002: Abus du mécanisme de contrôle d’élévation – PsExec</b><br />PsExec est utilisé pour exécuter des commandes en tant qu’utilisateur avec des privilèges élevés sur les systèmes distants. »] class step_priv_esc_psexec technique step_persistence[« <b>Technique</b> – <b>T1547.001: Scripts d’initialisation au démarrage ou à la connexion – LNK et Registre Run</b><br />Des fichiers de raccourci et des clés de registre Run sont créés pour garantir que le logiciel malveillant démarre au démarrage. »] class step_persistence technique step_keylogging[« <b>Technique</b> – <b>T1056.001: Capture d’entrée – Enregistreur de frappes</b><br />Les touches de l’utilisateur sont enregistrées pour capturer des identifiants et des données sensibles. »] class step_keylogging technique step_remote_vnc[« <b>Technique</b> – <b>T1021.005: Services à distance – VNC</b><br />Un serveur VNC caché offre à l’attaquant un accès au bureau à distance interactif. »] class step_remote_vnc technique step_command_execution[« <b>Technique</b> – <b>T1059.001: Interpréteur de commandes et scripts – PowerShell</b> et <b>T1059.003: Interpréteur de commandes et scripts – Shell de commandes Windows</b><br />PowerShell et cmd sont utilisés pour exécuter des commandes supplémentaires d’attaquant. »] class step_command_execution technique step_c2_communication[« <b>Technique</b> – <b>T1102.002/T1102.003: Protocole de couche application – Protocoles Web (HTTP/HTTPS)</b> et <b>T1132.002: Encodage des données – Encodage standard</b><br />Le trafic C2 est envoyé sur HTTP avec un encodage personnalisé pour se fondre dans le trafic web normal. »] class step_c2_communication technique step_environment_checks[« <b>Technique</b> – <b>T1497.001: Évasion de virtualisation/sandbox – Vérifications système</b> et <b>T1112: Modifier le registre</b><br />Le logiciel malveillant examine l’environnement et modifie les valeurs du registre pour cacher sa présence. »] class step_environment_checks technique %% Nodes – Tools tool_autoit[« <b>Outil</b> – <b>Nom</b> : AutoIt<br /><b>Description</b> : Langage de script utilisé pour créer le script de l’infection initiale. »] class tool_autoit tool tool_psexec[« <b>Outil</b> – <b>Nom</b> : PsExec<br /><b>Description</b> : Utilitaire d’exécution à distance qui exécute des processus avec des privilèges élevés. »] class tool_psexec tool tool_vnc[« <b>Outil</b> – <b>Nom</b> : Serveur VNC caché<br /><b>Description</b> : Offre une capacité de bureau à distance discrète à l’attaquant. »] class tool_vnc tool %% Connections – Attack Flow step_initial_infection u002du002d>|utilise| tool_autoit step_initial_infection u002du002d>|mène_à| step_dynamic_api step_dynamic_api u002du002d>|mène_à| step_union_syscall step_union_syscall u002du002d>|mène_à| step_process_injection step_process_injection u002du002d>|mène_à| step_token_manipulation step_token_manipulation u002du002d>|mène_à| step_priv_esc_psexec step_priv_esc_psexec u002du002d>|utilise| tool_psexec step_priv_esc_psexec u002du002d>|mène_à| step_persistence step_persistence u002du002d>|mène_à| step_keylogging step_keylogging u002du002d>|mène_à| step_remote_vnc step_remote_vnc u002du002d>|utilise| tool_vnc step_remote_vnc u002du002d>|mène_à| step_command_execution step_command_execution u002du002d>|mène_à| step_c2_communication step_c2_communication u002du002d>|mène_à| step_environment_checks

Flux d’attaque

Exécution de Simulation

Prérequis : le contrôle préalable de télémétrie et de base doit avoir été réussi.

  • Narrative d’attaque et commandes :
    L’adversaire simulé a déjà infiltré le point d’extrémité et cherche à établir un accès RDP persistant. D’abord, ils récoltent les identifiants en les stockant avec cmdkey, puis utilisent psexec.exe pour se déplacer latéralement et enfin lancer une charge utile PowerShell qui dépose un enregistreur de frappe. Chaque étape est conçue pour générer les événements de création de processus exacts que la règle de détection surveille.

    1. Collecte d’identifiants (T1552.001) – Stocker une entrée d’identifiant conçue qui correspond au sélection_cmdkey de la règle.
    2. Mouvement latéral (T1219) – Exécuter psexec.exe contre un hôte distant, invoquant une commande qui engendre une nouvelle session PowerShell.
    3. Exécution PowerShell (T1059.001) – Lancer une commande PowerShell qui charge un script malveillant (simulé ici par une commande inoffensive encodée en base64).
    4. Déploiement de l’enregistreur de frappe (T1056.001) – Compiler et exécuter un petit binaire C qui appelle GetAsyncKeyState, générant la correspondance de champ API.
  • Script de test de régression :

    # Script de simulation DarkGate – PowerShell
    # --------------------------------------------------
    # 1. Entrée d'identifiant cmdkey (correspond au modèle de détection)
    $generic = '""'                         # générique vide comme utilisé par DarkGate
    $user    = 'SafeMode'                   # nom d'utilisateur attendu par la règle
    $pass    = 'darkgatepassword0'          # mot de passe attendu par la règle
    cmd.exe /c cmdkey /generic:$generic /user:$user /pass:$pass
    
    # 2. Mouvement latéral PsExec (le binaire doit exister dans le PATH ou spécifier le chemin complet)
    $remoteHost = '10.0.0.5'
    $psexecPath = "$env:SystemRootSystem32psexec.exe"
    if (Test-Path $psexecPath) {
        & $psexecPath \$remoteHost -accepteula cmd /c "whoami"
    } else {
        Write-Host "PsExec non trouvé à $psexecPath – étape sautée."
    }
    
    # 3. Exécution PowerShell (commande inoffensive encodée en base64)
    $psCommand = 'Write-Output "Charge utile PowerShell exécutée"'
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($psCommand))
    powershell.exe -EncodedCommand $encoded
    
    # 4. Compilation et exécution du stub de keylogger
    $cSource = @"
    #include <windows.h>
    int main() {
        // Simple appel à GetAsyncKeyState pour satisfaire la correspondance API
        GetAsyncKeyState(VK_RETURN);
        return 0;
    }
    "@
    $srcPath = "$env:TEMPkeylog_stub.c"
    $exePath = "$env:TEMPkeylog_stub.exe"
    $cSource | Set-Content -Path $srcPath -Encoding ASCII
    # Compiler avec Visual C++ (cl.exe doit être dans le PATH)
    cl.exe /nologo /O2 /Fe:$exePath $srcPath
    if (Test-Path $exePath) {
        & $exePath
    }
  • Commandes de nettoyage :

    # Supprimer l'entrée d'identifiant
    cmd.exe /c cmdkey /delete:$generic
    
    # Supprimer les fichiers temporaires
    Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.c"
    Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.exe"
    
    # Optionnel : terminer tous les processus psexec ou powershell lancés par le script
    Get-Process -Name psexec, powershell -ErrorAction SilentlyContinue | Stop-Process -Force