SOC Prime Bias: Kritisch

27 Jan. 2026 17:12

Ansteckendes Interview: Verfolgung des VS Code Tasks Infektionsvektors

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Folgen
Ansteckendes Interview: Verfolgung des VS Code Tasks Infektionsvektors
shield icon

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.

graph TB %% Class Definitions classDef technique fill:#ffcc99 classDef action fill:#c2f0c2 %% Nodes – Techniques node_initial_access[„<b>Technik</b> – <b>T1195.001 Kompromittierung der Lieferkette</b><br><b>Beschreibung</b>: Angreifer kompromittieren die Software-Lieferkette, um das bösartige NPM-Paket \“jsonwebauth\“ zu verteilen.“] class node_initial_access technique node_ide_abuse[„<b>Technik</b> – <b>T1176.002 Missbrauch von IDE-Erweiterungen: VS Code Tasks</b><br><b>Beschreibung</b>: Eine bösartige VS-Code-Erweiterung nutzt tasks.json, um Aktionen beim Öffnen eines Ordners auszuführen.“] class node_ide_abuse technique node_execution[„<b>Technik</b> – <b>T1202 Indirekte Befehlsausführung</b><br><b>Beschreibung</b>: Befehle werden indirekt über VS-Code-Tasks ausgeführt, die durch das folderOpen-Ereignis ausgelöst werden.“] class node_execution technique node_command_exec[„<b>Technik</b> – <b>T1059.004 Unix-Shell / T1059.003 Windows-Befehlsinterpreter</b><br><b>Beschreibung</b>: Verwendet curl- oder wget-Pipelines in Unix- oder Windows-Shells zum Abrufen zusätzlichen Codes.“] class node_command_exec technique node_obfuscation[„<b>Technik</b> – <b>T1027.009 Verschleierte Payloads in Schriftarten/Bildern</b><br><b>Beschreibung</b>: Bösartige Payloads werden in Schrift- oder Bilddateien versteckt, um Erkennung zu vermeiden.“] class node_obfuscation technique node_masquerading[„<b>Technik</b> – <b>T1036.008 Tarnung von Dateitypen</b><br><b>Beschreibung</b>: Dateien werden als legitime Typen getarnt, um sich unauffällig einzufügen.“] class node_masquerading technique %% Nodes – Actions node_download[„<b>Aktion</b> – Payloads herunterladen<br><b>Details</b>: Ruft bösartige Payloads von Vercel oder JSON-Speicherdiensten ab.“] class node_download action node_persistence[„<b>Aktion</b> – Weitere Ausführung / Persistenz<br><b>Details</b>: Führt den bösartigen Code aus und sorgt für Persistenz auf dem kompromittierten System.“] class node_persistence action %% Connections node_initial_access –>|führt_zu| node_ide_abuse node_ide_abuse –>|ermöglicht| node_execution node_execution –>|führt_aus| node_command_exec node_command_exec –>|lädt_herunter| node_download node_download –>|enthält| node_obfuscation node_obfuscation –>|nutzt| node_masquerading node_masquerading –>|führt_zu| node_persistence

Angriffsablauf

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, die cmd.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, was cmd.exe and node.exe Prozesse 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