Заразлива бесіда: відстеження вектора інфекції через завдання 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.
graph TB %% Class Definitions classDef technique fill:#ffcc99 classDef action fill:#c2f0c2 %% Nodes – Techniques node_initial_access[“<b>Техніка</b> – <b>T1195.001 Компрометація ланцюга постачання</b><br><b>Опис</b>: Зловмисники компрометують програмний ланцюг постачання для розповсюдження шкідливого NPM-пакета \”jsonwebauth\”.”] class node_initial_access technique node_ide_abuse[“<b>Техніка</b> – <b>T1176.002 Зловживання розширеннями IDE: VS Code Tasks</b><br><b>Опис</b>: Шкідливе розширення VS Code використовує tasks.json для виконання дій під час відкриття папки.”] class node_ide_abuse technique node_execution[“<b>Техніка</b> – <b>T1202 Непряме виконання команд</b><br><b>Опис</b>: Команди виконуються непрямо через задачі VS Code, що запускаються подією folderOpen.”] class node_execution technique node_command_exec[“<b>Техніка</b> – <b>T1059.004 Unix Shell / T1059.003 Windows Command Shell</b><br><b>Опис</b>: Використовує конвеєри curl або wget в Unix або Windows оболонках для отримання додаткового коду.”] class node_command_exec technique node_obfuscation[“<b>Техніка</b> – <b>T1027.009 Обфусковані payload-и, вбудовані у шрифти/зображення</b><br><b>Опис</b>: Шкідливі payload-и приховуються всередині файлів шрифтів або зображень для уникнення виявлення.”] class node_obfuscation technique node_masquerading[“<b>Техніка</b> – <b>T1036.008 Маскування типів файлів</b><br><b>Опис</b>: Файли маскуються під легітимні типи, щоб виглядати як звичайний контент.”] class node_masquerading technique %% Nodes – Actions node_download[“<b>Дія</b> – Завантаження payload-ів<br><b>Деталі</b>: Отримує шкідливі payload-и з Vercel або JSON-сховищ.”] class node_download action node_persistence[“<b>Дія</b> – Подальше виконання / Закріплення</b><br><b>Деталі</b>: Виконує та закріплює шкідливий код у скомпрометованій системі.”] class node_persistence action %% Connections node_initial_access –>|призводить_до| node_ide_abuse node_ide_abuse –>|дозволяє| node_execution node_execution –>|виконує| node_command_exec node_command_exec –>|завантажує| node_download node_download –>|містить| node_obfuscation node_obfuscation –>|використовує| node_masquerading node_masquerading –>|призводить_до| node_persistence
Потік атаки
Детекції
Створення або модифікація файлу завдань 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