SOC Prime Bias: Критичний

27 Jan 2026 14:12 UTC

Заразлива бесіда: відстеження вектора інфекції через завдання VS Code

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Стежити
Заразлива бесіда: відстеження вектора інфекції через завдання VS Code
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Звіт описує кампанію, що приписується Північній Кореї, яка використовує визначення завдань Visual Studio Code (tasks.json) для отримання початкового виконання коду на кінцевих точках розробників. Записи зловмисних завдань виконують команди, які отримують додаткові завантаження з платформ розміщення, таких як Vercel, Render та подібні сервіси, або завантажують зловмисні залежності NPM. Цей ланцюг виконання в кінцевому підсумку дозволяє розгортання бекдорів, включаючи BeaverTail та InvisibleFerret.

Розслідування

Дослідники використовували пошук коду GitHub для виявлення репозиторіїв, що містять файли tasks.json з вбудованими виконаннями curl або wget. Вони проаналізували домени розміщення завантажень, задокументували методи обфускації, які приховують скрипти в зображеннях і шрифтах, та виявили зловмисний пакет NPM під назвою jsonwebauth. Дослідження також зіставило електронні адреси авторів комітів та розширило карту інфраструктури за межі доставки на базі Vercel.

Пом’якшення

Вимкніть автоматичне виконання завдань у VS Code та перегляньте вміст tasks.json перед тим, як довіряти чи відкривати робочу область. Використовуйте середовище github.dev у браузері для перевірки репозиторіїв без локального запуску завдань. Слідкуйте за підозрілими дочірніми процесами VS Code, неочікуваними запитами в мережу до відомих доменів завантаження та шляхами виконання Node.js, які намагаються виконати не-JavaScript файли.

Реагування

Якщо виявлено, ізолюйте кінцеву точку, завершіть підозрілі процеси, породжені VS Code, та блокуйте вихідний трафік до асоційованих зловмисних доменів. Зберіть і проаналізуйте завантажені дані, виконайте судово-медичну перевірку на предмет сталості та активності бекдорів, пов’язаних з BeaverTail і InvisibleFerret.

Потік атаки

Виконання симуляції

Передумова: Перевірка телеметрії та базових налаштувань повинна пройти.

Обґрунтування: Цей розділ описує точне виконання техніки противника (TTP), призначеної для спрацьовування правила детекції. Команди та наратив МУСТ відображати ідентифіковані TTP та мають мету генерувати точну телеметрію, очікувану логікою детекції. Абстрактні чи нерелевантні приклади призведуть до неправильної діагностики.

  • Опис атаки та команди:
    Зловмисник, який вже скомпрометував робочу станцію користувача, використовує можливості VS Code tasks.json для запуску зловмисного виконуваного файлу Windows (payload.exe) за допомогою Node.js. Зловмисник створює завдання, яке викликає cmd.exe /c node payload.exe, задовольняючи тим самим вимогу правила з трьома ключовими словами (tasks.json, node, cmd). Після збереження визначення зловмисного завдання у .vscode папці користувача, зловмисник виконує завдання через командну палетку VS Code, спричинюючи cmd.exe and node.exe процеси, що з’являються в журналі безпеки Windows з командним рядком, що містить три необхідні рядки.

  • Скрипт регресійного тестування: (PowerShell – самостійний)

     # ---------------------------------------------------------
      # Зловмисна симуляція завдання VS Code – Тригер правил Sigma
      # ---------------------------------------------------------
    
      # 1. Підготуйте підроблене зловмисне завантаження (не-JS виконуване)
      $payloadPath = "$env:USERPROFILEDesktoppayload.exe"
      # Створіть маленький виконуваний файл за допомогою Add-Type у PowerShell (для демонстрації)
      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. Створіть tasks.json для VS Code з зловмисною командою
      $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. Запустіть завдання через CLI VS Code
      # (Передбачається, що `code` є в PATH)
      Write-Host "Виконання зловмисного завдання VS Code..."
      code --folder-uri "$env:USERPROFILE" --command "workbench.action.tasks.runTask" --args "Run Malicious Payload"
    
      # 4. Зачекайте кілька секунд, щоб процеси з'явилися у журналі
      Start-Sleep -Seconds 5
    
      # 5. OPTIONAL: Запит до локального журналу подій для перевірки (для демонстрації)
      Get-WinEvent -FilterHashtable @{
          LogName='Security';
          Id=4688;
          Data='node.exe';
      } | Where-Object {$_.Message -match 'tasks.json'} | ft TimeCreated, Message -AutoSize
  • Команди очищення: (PowerShell)

     # Видалити зловмисне завантаження та визначення завдання VS Code
      Remove-Item -Path "$env:USERPROFILEDesktoppayload.exe" -Force -ErrorAction SilentlyContinue
      Remove-Item -Path "$env:USERPROFILE.vscodetasks.json" -Force -ErrorAction SilentlyContinue
      # Додатково: перезапустіть VS Code, щоб очистити будь-які кешовані завдання
      Get-Process -Name "Code" -ErrorAction SilentlyContinue | Stop-Process -Force