Заразлива бесіда: відстеження вектора інфекції через завдання VS Code
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.
Потік атаки
Детекції
Створення або модифікація файлу завдань VS Code (через file_event)
Переглянути
Виявлення зловмисного виконання Node.js у завданнях VS Code [Створення процесу Windows]
Переглянути
Виявлення зловмисного виконання завдань VS Code [Створення процесу у Linux]
Переглянути
Виконання симуляції
Передумова: Перевірка телеметрії та базових налаштувань повинна пройти.
Обґрунтування: Цей розділ описує точне виконання техніки противника (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.exeandnode.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