Ansteckendes Interview: Verfolgung des VS Code Tasks Infektionsvektors
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Der Bericht beschreibt eine Nordkorea zugeschriebene Kampagne, die Visual Studio Code-Aufgaben-Definitionen (tasks.json) ausnutzt, um anfängliche Codeausführung auf Entwicklerendpunkten zu erlangen. Bösartige Aufgabeneinträge führen Befehle aus, die zusätzliche Nutzlasten von Hosting-Plattformen wie Vercel, Render und ähnlichen Diensten abrufen, oder sie ziehen bösartige NPM-Abhängigkeiten. Diese Ausführungskette ermöglicht letztlich die Bereitstellung von Backdoors wie BeaverTail und InvisibleFerret.
Untersuchung
Forscher nutzten die GitHub-Code-Suche, um Repositories zu identifizieren, die tasks.json-Dateien mit eingebetteter curl- oder wget-Ausführung enthalten. Sie analysierten Nutzlast-Hosting-Domänen, dokumentierten Verschleierungsmethoden, die Skripte in Bild- und Schriftdateien verstecken, und deckten ein bösartiges NPM-Paket namens jsonwebauth auf. Die Studie korrelierte auch Commit-Autor-E-Mail-Adressen und erweiterte das Infrastruktur-Mapping über die auf Vercel basierende Bereitstellung hinaus.
Minderung
Deaktivieren Sie die automatische Aufgabenausführung in VS Code und überprüfen Sie den Inhalt von tasks.json, bevor Sie einem Arbeitsbereich vertrauen oder ihn öffnen. Nutzen Sie die github.dev-Umgebung im Browser, um Repositories zu inspizieren, ohne lokale Aufgaben auszuführen. Überwachen Sie auf verdächtige Kindprozesse von VS Code, unerwartete Netzwerk-Anfragen zu bekannten Nutzlast-Domänen und Node.js-Ausführungspfade, die versuchen, nicht-JavaScript-Dateien auszuführen.
Reaktion
Bei Identifizierung isolieren Sie den Endpunkt, beenden verdächtige durch VS Code gestartete Prozesse und blockieren ausgehenden Datenverkehr zu den verbundenen bösartigen Domänen. Sammeln und analysieren Sie heruntergeladene Nutzlasten und führen Sie eine forensische Validierung zur Persistenz und Backdoor-Aktivität von BeaverTail und InvisibleFerret durch.
Angriffsablauf
Erkennungen
Simulationsausführung
Voraussetzung: Der Telemetrie- und Basis-Vorabkontrolle-Check muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der Angreifer-Technik (TTP), die darauf ausgelegt ist, die Erkennungsregel auszulösen. Die Befehle und Erzählung MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennung erwarte wird. Abstrakte oder nicht zusammenhängende Beispiele führen zu Fehldiagnosen.
-
Angriffserzählung & Befehle:
Ein Angreifer, der bereits den Computer des Benutzers kompromittiert hat, nutzt den tasks.json Feature von VS Code aus, um eine bösartige Windows-Executable (payload.exe) über Node.js auszuführen. Der Angreifer erstellt eine Aufgabe, diecmd.exe /c node payload.exeaufruft und damit die Anforderungen der Regel mit drei Schlüsselwörtern erfüllt (tasks.json,node,cmd). Nach dem Speichern der bösartigen Aufgaben-Definition im.vscode-Ordner des Benutzers führt der Angreifer die Aufgabe über die Befehlspalette von VS Code aus, wascmd.exeandnode.exeProzesse im Windows-Sicherheitsprotokoll erscheinen lässt, deren Befehlszeile die drei erforderlichen Zeichenfolgen enthält. -
Regressionstest-Skript: (PowerShell – eigenständig)
# --------------------------------------------------------- # Bösartige VS Code Aufgabe Simulation – Löst Sigma-Regel aus # --------------------------------------------------------- # 1. Erstellen Sie eine Dummy-bösartige Nutzlast (nicht-JS-Executable) $payloadPath = "$env:USERPROFILEDesktoppayload.exe" # Erstellen Sie ein kleines ausführbares Programm mit PowerShells Add-Type (für Demo-Zwecke) Add-Type -TypeDefinition @" using System; public class Dummy { public static void Main() { System.Console.WriteLine("Nutzlast ausgeführt"); } } "@ -Language CSharp [Dummy]::Main() | Out-File -FilePath $payloadPath -Encoding ascii # 2. Erstellen Sie die VS Code tasks.json mit bösartigem Befehl $vscodeDir = "$env:USERPROFILE.vscode" if (-not (Test-Path $vscodeDir)) { New-Item -ItemType Directory -Path $vscodeDir | Out-Null } $tasksJson = @{ version = "2.0.0" tasks = @( @{ label = "Starte bösartige Nutzlast" 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. Lösen Sie die Aufgabe über die VS Code CLI aus # (Voraussetzung: `code` ist im PATH) Write-Host "Ausführen der bösartigen VS Code Aufgabe..." code --folder-uri "$env:USERPROFILE" --command "workbench.action.tasks.runTask" --args "Starte bösartige Nutzlast" # 4. Warten Sie einige Sekunden, bis die Prozesse im Protokoll erscheinen Start-Sleep -Seconds 5 # 5. OPTIONAL: Lokales Ereignisprotokoll abfragen, um zu verifizieren (zum Demonstrieren) Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=4688; Data='node.exe'; } | Where-Object {$_.Message -match 'tasks.json'} | ft TimeCreated, Message -AutoSize -
Bereinigungskommandos: (PowerShell)
# Entfernen Sie die bösartige Nutzlast und die VS Code Aufgaben-Definition Remove-Item -Path "$env:USERPROFILEDesktoppayload.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue # Optional: Starten Sie VS Code neu, um zwischengespeicherte Aufgaben zu löschen Get-Process -Name "Code" -ErrorAction SilentlyContinue | Stop-Process -Force