SOC Prime Bias: Середній

03 Feb 2026 20:06

Коли шкідливе ПЗ завдає удар у відповідь

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Коли шкідливе ПЗ завдає удар у відповідь
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Звіт описує багатостадійну атаку на Windows, що поєднує прихований пакетний скрипт, завантажувач на основі PowerShell і згенерований Donut shellcode для створення постійного, резидентного в пам’яті RAT з можливістю викрадення облікових даних. Завантажувач доставляє впроваджений модуль .NET, розроблений для скритності, включаючи сильний захист від аналізу, ін’єкцію в процеси та інтерактивні можливості віддаленого управління. Викрадені дані викладаються через вебхуки Discord і Telegram-боти, підкріплюючи модульний дизайн, зосереджений на виконанні в пам’яті та мінімальному вплигу на диск.

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

Аналіз виявив збереження через значення реєстру Run для кожного користувача, яке викликає пакетний файл, прихований у %APPDATA%. Пакетний скрипт містить вбудований Base64 блок, який він витягує та декодує в PowerShell-стадію. Цей завантажувач дешифрує Donut shellcode навантаження і вживає його в svchost.exe and explorer.exe, використовуючи Windows API, такі як CreateRemoteThread для виконання в пам’яті впровадження. Декодована стадія розпізнається як сильно обфускований .NET асемблі, що включає функціональні можливості Pulsar RAT та спеціальний модуль крадія. Дослідники спостерігали засоби захисту від віртуалізації та налагодження, запобіжні заходи, спрямовані на виявлення аналізу або моніторингу ін’єкцій, і обробники команд, що намагаються ослабити місцевий захист — наприклад, вимикаючи диспетчер завдань і маніпулюючи поведінкою, пов’язаною з UAC.

Міри захисту

Блокуйте створення прихованих пакетних файлів у шляхах AppData, доступних для запису користувачем, і розслідуйте невідомі записи, додані до ключів Run для кожного користувача. Моніторьте командні рядки PowerShell для шаблонів декодування Base64 і ознак активності віддаленої ін’єкції пам’яті. Використовуйте інструменти кінцевих точок, здатні розпізнавати особливості Donut shellcode, виявляти .NET асемблії в пам’яті та позначати трафік C2 до Discord і Telegram. Впроваджуйте обмеження на список дозволених додатків і застосовуйте контролі виходу, що обмежують вихідний доступ до кінцевих точок вебхуків і C2 на основі повідомлень.

Відповідь

Якщо виявлено, ізолюйте кінцеву точку, зупиніть ін’єкційні svchost.exe and explorer.exe екземпляри, пов’язані з створенням злочинних потоків, і видаліть як прихований пакетний файл, так і пов’язане з ним збереження в реєстрі Run. Зробіть знімки пам’яті, щоб зберегти артефакти в пам’яті, витягніть і проаналізуйте навантаження .NET, і проведіть полювання по навколишньому середовищу для відповідних поведінкових вказівок. Скиньте потенційно скомпрометовані облікові дані та анулюйте будь-які скомпрометовані вебхук-токени Discord/Telegram, щоб запобігти подальшому витоку.

Ключові слова: Windows malware, PowerShell loader, hidden batch file, AppData, Run key, Donut shellcode, CreateRemoteThread, process injection, in-memory .NET, Pulsar RAT, credential theft, Discord webhooks, Telegram bot, anti-VM, anti-debug.

graph TB %% Class Definitions classDef action fill:#99ccff classDef file fill:#ccffcc classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef operator fill:#ff9900 %% Nodes – Files and Registry logon_script_file[“<b>Файл</b>: 0a1a98b5f9fc7c62.bat<br/><b>Розташування</b>: %APPDATA%\\Microsoft\\…”] class logon_script_file file run_key[“<b>Реєстр</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\bada287ebf”] class run_key file %% Nodes – Techniques (Actions) persistence_run[“<b>Техніка</b> – T1037.001 Скрипти ініціалізації під час завантаження або входу в систему<br/><b>Опис</b>: Прихований batch-файл розміщено в %APPDATA% та зареєстровано в ключі Run для забезпечення стійкості.”] class persistence_run action powershell_interpreter[“<b>Техніка</b> – T1059.001 Інтерпретатор команд і скриптів: PowerShell<br/><b>Опис</b>: Виконує декодований PowerShell-скрипт з обходом політики виконання.”] class powershell_interpreter action obfuscation[“<b>Техніка</b> – T1027 Обфусковані файли або інформація<br/><b>Опис</b>: Масив байтів, зашифрований XOR, та логіка компіляції після доставки.”] class obfuscation action deobfuscate[“<b>Техніка</b> – T1140 Деобфускація/Декодування файлів або інформації<br/><b>Опис</b>: Декодування Base64 та XOR для отримання shellcode.”] class deobfuscate action reflective_loading[“<b>Техніка</b> – T1620 Рефлексивне завантаження коду<br/><b>Опис</b>: Виділяє пам’ять у цільовому процесі та записує shellcode.”] class reflective_loading action process_injection[“<b>Техніка</b> – T1055.002 Ін’єкція процесу: ін’єкція портативного виконуваного файлу<br/><b>Опис</b>: Ін’єкція shellcode через CreateRemoteThread у svchost.exe та explorer.exe.”] class process_injection action sandbox_evasion[“<b>Техніка</b> – T1497 Ухилення від віртуалізації/пісочниці<br/><b>Опис</b>: Перевіряє наявність віртуальних машин і sandbox перед подальшим виконанням.”] class sandbox_evasion action indirect_cmd[“<b>Техніка</b> – T1202 Непряме виконання команд<br/><b>Опис</b>: Вмикає або вимикає Диспетчер завдань і Контроль облікових записів користувачів через C2.”] class indirect_cmd action uac_bypass[“<b>Техніка</b> – T1548.002 Зловживання механізмами контролю підвищення привілеїв: обхід Контролю облікових записів користувачів<br/><b>Опис</b>: Вимикає Контроль облікових записів користувачів та інтерфейс безпеки.”] class uac_bypass action scheduled_task[“<b>Техніка</b> – T1053 Заплановане завдання або робота<br/><b>Опис</b>: Створює завдання schtasks.exe для запуску корисного навантаження під час входу в систему.”] class scheduled_task action autostart[“<b>Техніка</b> – T1547 Автоматичний запуск під час завантаження або входу в систему<br/><b>Опис</b>: Подвійна стійкість через ключ Run і заплановане завдання.”] class autostart action cred_from_browser[“<b>Техніка</b> – T1555.003 Облікові дані з веббраузерів<br/><b>Опис</b>: Збирає збережені облікові дані.”] class cred_from_browser action alternate_auth[“<b>Техніка</b> – T1550.004 Використання альтернативних матеріалів автентифікації: cookie вебсеансу<br/><b>Опис</b>: Витягує cookie сеансів і токени.”] class alternate_auth action archive_data[“<b>Техніка</b> – T1560.002 Архівування зібраних даних: архівування через бібліотеку<br/><b>Опис</b>: Архівує зібрані облікові дані в ZIP у пам’яті.”] class archive_data action compression[“<b>Техніка</b> – T1027.015 Стиснення<br/><b>Опис</b>: Стискає дані у формат ZIP перед ексфільтрацією.”] class compression action exfil_webhook[“<b>Техніка</b> – T1567.004 Ексфільтрація через Webhook<br/><b>Опис</b>: Надсилає ZIP-архів до webhook Discord та Telegram-бота.”] class exfil_webhook action web_service[“<b>Техніка</b> – T1102.003 Вебсервіс: одностороння комунікація<br/><b>Опис</b>: Використовує HTTPS для ексфільтрації до Discord і Telegram.”] class web_service action compile_after_delivery[“<b>Техніка</b> – T1027.004 Компіляція після доставки<br/><b>Опис</b>: Компілює C#-код взаємодії під час виконання для ін’єкції.”] class compile_after_delivery action stripped_payload[“<b>Техніка</b> – T1027.008 Payload без метаданих<br/><b>Опис</b>: Фінальна .NET-збірка без метаданих.”] class stripped_payload action embedded_payload[“<b>Техніка</b> – T1027.009 Вбудовані payload<br/><b>Опис</b>: Donut shellcode вбудовує .NET payload.”] class embedded_payload action %% Nodes – Files Produced ps_script_file[“<b>Файл</b>: ps_7b948266.ps1<br/><b>Вміст</b>: Декодує Base64 payload і виконує його.”] class ps_script_file file donut_shellcode[“<b>Файл</b>: decoded.bin<br/><b>Тип</b>: Shellcode, згенерований Donut”] class donut_shellcode file %% Nodes – Processes svchost_process[“<b>Процес</b>: svchost.exe”] class svchost_process process explorer_process[“<b>Процес</b>: explorer.exe”] class explorer_process process %% Nodes – Malware credential_stealer[“<b>Шкідливе програмне забезпечення</b>: .NET-стілер<br/><b>Опис</b>: Витягує паролі, cookie та токени з браузерів.”] class credential_stealer malware %% Connections – Attack Flow logon_script_file –>|зареєстровано в| run_key run_key –>|забезпечує| persistence_run persistence_run –>|виконує| powershell_interpreter powershell_interpreter –>|запускає| ps_script_file ps_script_file –>|містить| obfuscation obfuscation –>|потребує| deobfuscate deobfuscate –>|створює| donut_shellcode donut_shellcode –>|завантажується через| reflective_loading reflective_loading –>|записує у| svchost_process svchost_process –>|ін’єктує через| process_injection process_injection –>|націлюється на| explorer_process process_injection –>|використовує| compile_after_delivery process_injection –>|використовує| embedded_payload explorer_process –>|виконує| credential_stealer credential_stealer –>|витягує| cred_from_browser credential_stealer –>|витягує| alternate_auth cred_from_browser –>|зібрані дані| archive_data archive_data –>|стискається через| compression compression –>|надсилається через| exfil_webhook exfil_webhook –>|використовує| web_service sandbox_evasion –>|перевіряє перед| powershell_interpreter indirect_cmd –>|керує| uac_bypass scheduled_task –>|резервна стійкість| autostart autostart –>|гарантує| persistence_run

Потік атаки

Виявлення

Можливе зловживання Telegram як каналом командування та управління (через dns_query)

Команда SOC Prime
02 лютого 2026

Можливі точки збереження [ASEPs – Software/NTUSER Hive] (через registry_event)

Команда SOC Prime
02 лютого 2026

Виклик підозрілих функцій Windows API з Powershell (через powershell)

Команда SOC Prime
02 лютого 2026

Підозрілі рядки Powershell (через powershell)

Команда SOC Prime
02 лютого 2026

Можливе використання Schtasks або AT для збереження (через cmdline)

Команда SOC Prime
02 лютого 2026

Підозрілий маневр маніпуляції з Alternate Data Stream (ADS) Zone.Identifier (через process_creation)

Команда SOC Prime
02 лютого 2026

Виконання Powershell файлу в підозрілій директорії з використанням політики обходу виконання (через cmdline)

Команда SOC Prime
02 лютого 2026

IOCs (DestinationIP) для виявлення: Коли зловмисне ПЗ говорить у відповідь

Соціі Альфи AI Правила
02 лютого 2026

IOCs (SourceIP) для виявлення: Коли зловмисне ПЗ говорить у відповідь

Соціі Альфи AI Правила
02 лютого 2026

IOCs (HashMd5) для виявлення: Коли зловмисне ПЗ говорить у відповідь

Соціі Альфи AI Правила
02 лютого 2026

IOCs (HashSha1) для виявлення: Коли зловмисне ПЗ говорить у відповідь

Соціі Альфи AI Правила
02 лютого 2026

Збереження через ключ Run для виконання пакетного файлу [Подія реєстру Windows]

Соціі Альфи AI Правила
02 лютого 2026

Виявлення ін’єкції пам’яті та виконання навантаження через PowerShell [Windows Powershell]

Соціі Альфи AI Правила
02 лютого 2026

Виявлення виконання пакетних і PowerShell файлів для прихованого зловмисного збереження [Створення процесів Windows]

Соціі Альфи AI Правила
02 лютого 2026

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

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

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

  • Атака: Нарратив і команди:

    1. Розвідка і отримання навантаження – Нападник використовує одиничку PowerShell для завантаження Base64-кодованого блоку shellcode з сервера C2 (симульованого через локальний файл).
    2. Завуальовування – Завантажене навантаження XOR-зашифроване з ключем 0xAA. Скрипт містить прямий рядок “XOR” для задоволення другої умови правила.
    3. Декодування і де-завуалювання – Нападник декодує рядок Base64, застосовує операцію XOR в пам’яті і зберігає чистий shellcode в масив байтів.
    4. Ін’єкція в процес – Використовуючи Windows API CreateRemoteThread, скрипт впроваджує shellcode в невинний цільовий процес (notepad.exe). Командний рядок явно включає текст “CreateRemoteThread”.
    5. Виконання – Віддалений потік запускується, досягаючи виконання коду на хості.
  • Скрипт регресійного тесту:

    # ------------------------------------------------------------
    # Симульовані PowerShell кампанії з ін'єкцією в пам'ять
    # ------------------------------------------------------------
    # 1. Підготувати фіктивне навантаження (shellcode) – для демонстраційних цілей ми
    #    просто використовуватимемо невеликий масив байтів, що виводить "Injected".
    $shellcode = [Byte[]] (0x90,0x90,0x90,0x90)   # Заповнювач NOP sled
    
    # 2. XOR зашифрувати навантаження з ключем 0xAA
    $key = 0xAA
    $xorPayload = $shellcode | ForEach-Object { $_ -bxor $key }
    
    # 3. Закодувати XORоване навантаження в Base64
    $b64 = [Convert]::ToBase64String($xorPayload)
    
    # 4. Сформувати команду PowerShell, яка виконає ін'єкцію
    $injectCmd = @"
    `$bytes = [Convert]::FromBase64String('$b64')
    # де-завуалювання XOR (присутній речення 'XOR' для виявлення)
    `$decoded = `$bytes | ForEach-Object { `$_ -bxor $key }
    # Запустити notepad як ціль інт'єкції
    `$proc = Start-Process notepad -PassThru
    # Виділити пам'ять у віддаленому процесі
    `$addr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(`$decoded.Length)
    # Створення віддаленого потоку (прямий рядок для виявлення)
    `$thread = [System.Threading.Thread]::Start( { 
    } )
    "@
    
    # 5. Закодувати всю команду ін'єкції (включаючи вказівку ::6bbd64163c24f552::)
    $marker = '::6bbd64163c24f552::'
    $fullCmd = $marker + $injectCmd
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCmd))
    
    # 6. Виконати зловмисну PowerShell через -EncodedCommand
    powershell.exe -EncodedCommand $encoded
  • Команди очищення:

    # Заверши всі запущені екземпляри notepad під час тестування
    Get-Process notepad -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Видалити всі тимчасові файли / модулі (якщо створені) (навіть якщо їх немає в цій демонстрації)
    Write-Host "Очистка завершена."