Intervista Contagiosa: Tracciamento del Vettore di Infezione di VS Code Tasks
Detection stack
- AIDR
- Alert
- ETL
- Query
Sintesi
Il rapporto dettaglia una campagna attribuita alla Corea del Nord che utilizza le definizioni delle attivitĂ di Visual Studio Code (tasks.json) per ottenere l’esecuzione iniziale del codice sui punti terminali degli sviluppatori. Le voci di attivitĂ dannose eseguono comandi che recuperano payload aggiuntivi da piattaforme di hosting come Vercel, Render e servizi simili, o integrano dipendenze NPM maligne. Questa catena di esecuzione consente infine la distribuzione di backdoor, inclusi BeaverTail e InvisibleFerret.
Indagine
I ricercatori hanno sfruttato la ricerca di codice GitHub per identificare repository contenenti file tasks.json con esecuzioni incorporate di curl o wget. Hanno analizzato i domini di hosting dei payload, documentato i metodi di offuscamento che nascondono script all’interno di file di immagini e font, e scoperto un pacchetto NPM malevolo chiamato jsonwebauth. Lo studio ha anche correlato indirizzi email degli autori dei commit ed espanso la mappatura dell’infrastruttura oltre la distribuzione basata su Vercel.
Mitigazione
Disabilita l’esecuzione automatica delle attivitĂ in VS Code e rivedi i contenuti dei tasks.json prima di fidarti o aprire un’area di lavoro. Usa l’ambiente in-browser github.dev per ispezionare i repository senza eseguire attivitĂ locali. Monitora i processi figlio sospetti di VS Code, richieste di rete inaspettate verso noti domini di payload, e percorsi di esecuzione di Node.js che tentano di eseguire file non-JavaScript.
Risposta
Se identificato, isola il punto terminale, termina i processi sospetti generati da VS Code e blocca il traffico in uscita verso i domini malevoli associati. Raccogli e analizza i payload scaricati e esegui la validazione forense per l’attivitĂ di persistenza e backdoor collegata a BeaverTail e InvisibleFerret.
graph TB %% Class Definitions classDef technique fill:#ffcc99 classDef action fill:#c2f0c2 %% Nodes – Techniques node_initial_access[“<b>Tecnica</b> – <b>T1195.001 Compromissione della Supply Chain</b><br><b>Descrizione</b>: Gli avversari compromettono la supply chain software per distribuire il pacchetto NPM malevolo \”jsonwebauth\”.”] class node_initial_access technique node_ide_abuse[“<b>Tecnica</b> – <b>T1176.002 Abuso di Estensioni IDE: Task di VS Code</b><br><b>Descrizione</b>: Un’estensione malevola di VS Code sfrutta tasks.json per eseguire azioni all’apertura di una cartella.”] class node_ide_abuse technique node_execution[“<b>Tecnica</b> – <b>T1202 Esecuzione Indiretta di Comandi</b><br><b>Descrizione</b>: I comandi vengono eseguiti indirettamente tramite task di VS Code attivati dall’evento folderOpen.”] class node_execution technique node_command_exec[“<b>Tecnica</b> – <b>T1059.004 Shell Unix / T1059.003 Shell dei Comandi Windows</b><br><b>Descrizione</b>: Utilizza pipeline curl o wget in shell Unix o Windows per recuperare codice aggiuntivo.”] class node_command_exec technique node_obfuscation[“<b>Tecnica</b> – <b>T1027.009 Payload offuscati incorporati in font/immagini</b><br><b>Descrizione</b>: I payload malevoli sono nascosti all’interno di file di font o immagini per eludere il rilevamento.”] class node_obfuscation technique node_masquerading[“<b>Tecnica</b> – <b>T1036.008 Mascheramento dei tipi di file</b><br><b>Descrizione</b>: I file sono camuffati come tipi legittimi per confondersi con il contenuto normale.”] class node_masquerading technique %% Nodes – Actions node_download[“<b>Azione</b> – Download dei payload<br><b>Dettagli</b>: Recupera payload malevoli da Vercel o servizi di storage JSON.”] class node_download action node_persistence[“<b>Azione</b> – Esecuzione ulteriore / Persistenza<br><b>Dettagli</b>: Esegue e mantiene il codice malevolo sul sistema compromesso.”] class node_persistence action %% Connections node_initial_access –>|porta_a| node_ide_abuse node_ide_abuse –>|abilita| node_execution node_execution –>|esegue| node_command_exec node_command_exec –>|scarica| node_download node_download –>|contiene| node_obfuscation node_obfuscation –>|usa| node_masquerading node_masquerading –>|porta_a| node_persistence
Flusso di Attacco
Rilevamenti
Creazione o Modifica del File di AttivitĂ di VS Code (via file_event)
Visualizza
Rilevamento di Esecuzione Maligna di Node.js in AttivitĂ VS Code [Creazione Processo Windows]
Visualizza
Rilevamento di Esecuzione di AttivitĂ Maligne di VS Code [Creazione Processo Linux]
Visualizza
Esecuzione della Simulazione
Prerequisito: Il controllo preliminare Telemetria e Baseline deve essere superato.
Motivo: Questa sezione dettaglia l’esatta esecuzione della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente le TTPs identificate e mirare a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrativa e Comandi di Attacco:
Un attaccante che ha giĂ compromesso la workstation dell’utente sfrutta la feature di tasks.json di VS Code per eseguire un Windows eseguibile maligno (payload.exe) tramite Node.js. L’attaccante crea un’attivitĂ che invocacmd.exe /c node payload.exe, soddisfacendo così il requisito di tre parole chiave della regola (feature di tasks.json,node,cmd). Dopo aver salvato la definizione dell’attivitĂ malevola sotto lacartella .vscodedell’utente, l’attaccante esegue l’attivitĂ tramite il comando palette di VS Code, causandol'apparizione di processi cmd.exeandnode.exenei log di sicurezza di Windows con una linea di comando che contiene le tre stringhe richieste. -
Script di Test di Regressione: (PowerShell – autonomo)
# --------------------------------------------------------- # Malicious VS Code Task Simulation – Triggers Sigma Rule # --------------------------------------------------------- # 1. Prepare a dummy malicious payload (non‑JS executable) $payloadPath = "$env:USERPROFILEDesktoppayload.exe" # Create a tiny executable using PowerShell’s Add-Type (for demo) Add-Type -TypeDefinition @" using System; public class Dummy { public static void Main() { System.Console.WriteLine("Payload executed"); } } "@ -Language CSharp [Dummy]::Main() | Out-File -FilePath $payloadPath -Encoding ascii # 2. Build the VS Code tasks.json with malicious command $vscodeDir = "$env:USERPROFILE.vscode" if (-not (Test-Path $vscodeDir)) { New-Item -ItemType Directory -Path $vscodeDir | Out-Null } $tasksJson = @{ version = "2.0.0" tasks = @( @{ label = "Run Malicious Payload" type = "shell" command = "cmd.exe" args = @("/c", "node", "`"$payloadPath`"") } ) } | ConvertTo-Json -Depth 5 $tasksFile = Join-Path $vscodeDir "tasks.json" $tasksJson | Set-Content -Path $tasksFile -Encoding UTF8 # 3. Trigger the task via VS Code CLI # (Assumes `code` is in PATH) Write-Host "Executing malicious VS Code task..." code --folder-uri "$env:USERPROFILE" --command "workbench.action.tasks.runTask" --args "Run Malicious Payload" # 4. Wait a few seconds for the processes to appear in the log Start-Sleep -Seconds 5 # 5. OPTIONAL: Query local event log to verify (for demonstration) Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4688; Data='node.exe'; } | Where-Object {$_.Message -match 'tasks.json'} | ft TimeCreated, Message -AutoSize -
Comandi di Pulizia: (PowerShell)
# Rimuovi payload malevolo e definizione dell'attivitĂ di VS Code Remove-Item -Path "$env:USERPROFILEDesktoppayload.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue # Opzionale: riavvia VS Code per cancellare eventuali attivitĂ nella cache Get-Process -Name "Code" -ErrorAction SilentlyContinue | Stop-Process -Force