SOC Prime Bias: Crítico

27 Jan 2026 17:12

Entrevista Contagiosa: Seguindo o Vetor de Infecção das Tarefas do VS Code

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
Entrevista Contagiosa: Seguindo o Vetor de Infecção das Tarefas do VS Code
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

O relatório detalha uma campanha atribuída à Coreia do Norte que arma definições de tarefas do Visual Studio Code (tasks.json) para obter execução inicial de código em endpoints de desenvolvedores. Entradas de tarefas maliciosas executam comandos que buscam cargas adicionais em plataformas de hospedagem como Vercel, Render e serviços semelhantes, ou eles trazem dependências NPM maliciosas. Essa cadeia de execução possibilita, em última instância, o implante de backdoors, incluindo BeaverTail e InvisibleFerret.

Investigação

Pesquisadores utilizaram a busca de código no GitHub para identificar repositórios contendo arquivos tasks.json com execução incorporada de curl ou wget. Eles analisaram domínios de hospedagem de payloads, documentaram métodos de ofuscação que escondem scripts dentro de arquivos de imagem e fonte, e descobriram um pacote NPM malicioso chamado jsonwebauth. O estudo também correlacionou endereços de e-mail dos autores de commits e expandiu o mapeamento de infraestrutura além da entrega baseada em Vercel.

Mitigação

Desative a execução automática de tarefas no VS Code e revise o conteúdo do tasks.json antes de confiar ou abrir um espaço de trabalho. Use o ambiente github.dev no navegador para inspecionar repositórios sem executar tarefas locais. Monitore por processos filhos suspeitos do VS Code, solicitações de rede inesperadas para domínios de carga conhecidos, e caminhos de execução Node.js que tentam executar arquivos não-JavaScript.

Resposta

Se identificado, isole o endpoint, encerre processos suspeitos originados pelo VS Code e bloqueie o tráfego de saída para os domínios maliciosos associados. Colete e analise cargas baixadas e realize validação forense para persistência e atividades de backdoor ligadas ao BeaverTail e InvisibleFerret.

graph TB %% Class Definitions classDef technique fill:#ffcc99 classDef action fill:#c2f0c2 %% Nodes – Techniques node_initial_access[“<b>Técnica</b> – <b>T1195.001 Comprometimento da Cadeia de Suprimentos</b><br><b>Descrição</b>: Os adversários comprometem a cadeia de suprimentos de software para distribuir o pacote NPM malicioso \”jsonwebauth\”.”] class node_initial_access technique node_ide_abuse[“<b>Técnica</b> – <b>T1176.002 Abuso de Extensão de IDE: Tarefas do VS Code</b><br><b>Descrição</b>: Uma extensão maliciosa do VS Code utiliza tasks.json para executar ações quando uma pasta é aberta.”] class node_ide_abuse technique node_execution[“<b>Técnica</b> – <b>T1202 Execução Indireta de Comandos</b><br><b>Descrição</b>: Comandos são executados indiretamente por meio de tarefas do VS Code acionadas pelo evento folderOpen.”] class node_execution technique node_command_exec[“<b>Técnica</b> – <b>T1059.004 Shell Unix / T1059.003 Shell de Comandos do Windows</b><br><b>Descrição</b>: Utiliza pipelines curl ou wget em shells Unix ou Windows para obter código adicional.”] class node_command_exec technique node_obfuscation[“<b>Técnica</b> – <b>T1027.009 Payloads Ofuscados Incorporados em Fontes/Imagens</b><br><b>Descrição</b>: Payloads maliciosos são ocultados dentro de arquivos de fonte ou imagem para evitar detecção.”] class node_obfuscation technique node_masquerading[“<b>Técnica</b> – <b>T1036.008 Mascaramento de Tipos de Arquivo</b><br><b>Descrição</b>: Arquivos são disfarçados como tipos legítimos para se misturar com conteúdo normal.”] class node_masquerading technique %% Nodes – Actions node_download[“<b>Ação</b> – Download de Payloads<br><b>Detalhes</b>: Recupera payloads maliciosos de Vercel ou serviços de armazenamento JSON.”] class node_download action node_persistence[“<b>Ação</b> – Execução Adicional / Persistência<br><b>Detalhes</b>: Executa e mantém o código malicioso no sistema comprometido.”] class node_persistence action %% Connections node_initial_access –>|leva_a| node_ide_abuse node_ide_abuse –>|habilita| node_execution node_execution –>|executa| node_command_exec node_command_exec –>|baixa| node_download node_download –>|contém| node_obfuscation node_obfuscation –>|usa| node_masquerading node_masquerading –>|leva_a| node_persistence

Fluxo de Ataque

Execução da Simulação

Pré-requisito: O Check de Pré-voo de Telemetria e Base deve ter sido aprovado.

Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a diagnósticos errôneos.

  • Narrativa e Comandos de Ataque:
    Um atacante que já comprometeu a estação de trabalho do usuário aproveita o tasks.json do VS Code para executar um executável malicioso do Windows (payload.exe) via Node.js. O atacante cria uma tarefa que invoca cmd.exe /c node payload.exe, satisfazendo assim o requisito de três palavras-chave da regra (tasks.json, node, cmd). Após salvar a definição de tarefa maliciosa na pasta do usuário .vscode , o atacante executa a tarefa através do paleta de comandos do VS Code, fazendo com que cmd.exe and node.exe apareçam nos registros de segurança do Windows com uma linha de comando que contém as três strings necessárias.

  • Script de Teste de Regressão: (PowerShell – autônomo)

      # ---------------------------------------------------------
      # 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
  • Comandos de Limpeza: (PowerShell)

     # Remova carga maliciosa e definição de tarefa do VS Code
      Remove-Item -Path "$env:USERPROFILEDesktoppayload.exe" -Force -ErrorAction SilentlyContinue
      Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue
      # Opcional: reinicie o VS Code para limpar quaisquer tarefas em cache
      Get-Process -Name "Code" -ErrorAction SilentlyContinue | Stop-Process -Force