Коли шкідливе ПЗ завдає удар у відповідь
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.
Потік атаки
Виявлення
Можливе зловживання Telegram як каналом командування та управління (через dns_query)
Переглянути
Можливі точки збереження [ASEPs – Software/NTUSER Hive] (через registry_event)
Переглянути
Виклик підозрілих функцій Windows API з Powershell (через powershell)
Переглянути
Підозрілі рядки Powershell (через powershell)
Переглянути
Можливе використання Schtasks або AT для збереження (через cmdline)
Переглянути
Підозрілий маневр маніпуляції з Alternate Data Stream (ADS) Zone.Identifier (через process_creation)
Переглянути
Виконання Powershell файлу в підозрілій директорії з використанням політики обходу виконання (через cmdline)
Переглянути
IOCs (DestinationIP) для виявлення: Коли зловмисне ПЗ говорить у відповідь
Переглянути
IOCs (SourceIP) для виявлення: Коли зловмисне ПЗ говорить у відповідь
Переглянути
IOCs (HashMd5) для виявлення: Коли зловмисне ПЗ говорить у відповідь
Переглянути
IOCs (HashSha1) для виявлення: Коли зловмисне ПЗ говорить у відповідь
Переглянути
Збереження через ключ Run для виконання пакетного файлу [Подія реєстру Windows]
Переглянути
Виявлення ін’єкції пам’яті та виконання навантаження через PowerShell [Windows Powershell]
Переглянути
Виявлення виконання пакетних і PowerShell файлів для прихованого зловмисного збереження [Створення процесів Windows]
Переглянути
Виконання симуляції
Попередня умова: Повинен пройти огляд телеметрії та базових показників.
Мотив: Цей розділ деталізує точне виконання техніки супротивника (TTP), розроблене для виклику правила виявлення. Команди та наратив повинні безпосередньо відображати ідентифіковані TTP і спрямовані на генерацію точної телеметрії, яку очікує детекційна логіка. Абстрактні чи нерелевантні приклади призведуть до неправильного діагностування.
-
Атака: Нарратив і команди:
- Розвідка і отримання навантаження – Нападник використовує одиничку PowerShell для завантаження Base64-кодованого блоку shellcode з сервера C2 (симульованого через локальний файл).
- Завуальовування – Завантажене навантаження XOR-зашифроване з ключем
0xAA. Скрипт містить прямий рядок “XOR” для задоволення другої умови правила. - Декодування і де-завуалювання – Нападник декодує рядок Base64, застосовує операцію XOR в пам’яті і зберігає чистий shellcode в масив байтів.
- Ін’єкція в процес – Використовуючи Windows API
CreateRemoteThread, скрипт впроваджує shellcode в невинний цільовий процес (notepad.exe). Командний рядок явно включає текст “CreateRemoteThread”. - Виконання – Віддалений потік запускується, досягаючи виконання коду на хості.
-
Скрипт регресійного тесту:
# ------------------------------------------------------------ # Симульовані 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 "Очистка завершена."