PureLogs доставляються через стеґанографію PawsRunner
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Кампанія покладається на фішинговий електронний лист з вкладенням TXZ, яке доставляє завантажувач JavaScript, що встановлює змінні середовища та запускає conhost.exe у безголовому режимі. Завантажувач потім розшифровує збірку .NET, відому як PawsRunner, яка отримує зображення PNG, що мають прихований зашифрований вміст за допомогою стеганографічних технік. З цих зображень шкідливе ПО вилучає остаточне навантаження: інфостілер PureLogs .NET. Коли PureLogs активний, він підключається до віддаленого сервера командування та контролю через HTTPS і ексфільтрує облікові дані браузера разом із інформацією про систему.
Розслідування
Аналіз показав, що завантажувач JavaScript отримує команди зі змінних середовища процесу, запускає PowerShell з прапорцем прихованого вікна і розшифровує AES-зашифроване навантаження, яке виконується через .NET-рефлексію. PawsRunner обертається між трьома API мережі і трьома різними рядками користувача агента, під час отримання PNG файлів, потім парсить iTXt and IEND фрагменти, щоб знайти приховані дані, і розшифровує наступний етап за допомогою RC4. PureLogs, у свою чергу, використовує TripleDES та Gzip для завантаження бібліотеки DLL, робить захищені TLS запити HTTP до певних кінцевих точок і збирає широкий набір даних, пов’язаних зі браузером, з системи жертви.
Запобігання
Організації повинні блокувати вкладення TXZ на шлюзі електронної пошти, моніторити з conhost.exe випадки запуску без видимого вікна і виявляти запуск PowerShell із -w hidden прапорцем. Команди безпеки також повинні розгорнути сигнатури для обох: PawsRunner та PureLogs, обмежити вихідний трафік на визначений домен та IP-адресу командування та контролю, а також обмежити виконання непідписаних .NET-збірок. Де можливо, слід застосувати виявлення стеганографії до підозрілих вхідних файлів зображень.
Відповідь
Якщо ця діяльність виявлена, ізолюйте уражений кінцевий пристрій, завершіть підозрілі conhost.exe та процеси PowerShell, і видаліть будь-які скинуті .NET бінарії з системи. Підроблені облікові дані слід анулювати, ввести багатофакторну аутентифікацію і скинути збережені паролі браузера. Детективи також мають проводити аналіз мережі, щоб підтвердити відсутність додаткової комунікації командування та контролю, і застосувати кроки реабілітації для запобігання повторного зараження.
Потік атаки
Виявлення
Можливість виконання прихованих команд PowerShell (через cmdline)
Переглянути
LOLBAS WScript / CScript (через створення процесу)
Переглянути
Виклик підозрілих методів .NET з Powershell (через powershell)
Переглянути
Можливі індикатори обфускації PowerShell (через powershell)
Переглянути
LOLBAS Conhost (через cmdline)
Переглянути
IOC-об’єкти (HashSha256) для виявлення: PureLogs: Доставка через PawsRunner стеганографію
Переглянути
IOC-об’єкти (SourceIP) для виявлення: PureLogs: Доставка через PawsRunner стеганографію
Переглянути
IOC-об’єкти (DestinationIP) для виявлення: PureLogs: Доставка через PawsRunner стеганографію
Переглянути
PowerShell AES розшифровка зі змінних середовища [Windows PowerShell]
Переглянути
Виявлення виконання шкідливого процесу через приховані Conhost і PowerShell [Windows Process Creation]
Переглянути
Запуск імітації
Передумова: Перевірка телеметрії та базовий попередній контроль повинні бути успішними.
-
Опис атаки та команди
- Етап 1 – Підготовка зашифрованого навантаження
- Атакуючий створює невелике навчальне навантаження (
"секрет"), зашифровує його з використанням AES‑256 за відомим ключем, кодує у Base64 шифровану текстову інформацію і зберігає її у змінній середовищаENC_PAYLOAD.
- Атакуючий створює невелике навчальне навантаження (
- Етап 2 – Виконання завантажувача PowerShell-розшифровки
- Однорядковий скрипт зчитує
ENC_PAYLOAD, декодує Base64 рядок, створює .NETAesCryptoServiceProvider, діє ключ/IV, розшифровує дані і, за бажанням, виконує звичайний текст.
- Однорядковий скрипт зчитує
- Етап 3 – Генерування телеметрії виявлення
- Команда PowerShell містить буквально слово «AES» (наприклад,
New-Object System.Security.Cryptography.AesCryptoServiceProvider) і логізується як EventID 4104, задовольняючи правило виявлення.
- Команда PowerShell містить буквально слово «AES» (наприклад,
- Етап 1 – Підготовка зашифрованого навантаження
-
Скрипт регресійного тестування
# ------------------------------------------------- # Імітація розшифровки AES в PowerShell (Спрацьовує виявлення) # ------------------------------------------------- # 1. Визначте статичний 256‑бітний ключ і IV (для демонстраційних цілей) $key = [byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10, 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20) $iv = [byte[]](0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0) # 2. Навантаження в звичайному тексті (приклад) $plain = [System.Text.Encoding]::UTF8.GetBytes("секретні дані") # 3. Зашифруйте навантаження за допомогою AES (CBC, PKCS7) $aes = [System.Security.Cryptography.AesCryptoServiceProvider]::new() $aes.Key = $key $aes.IV = $iv $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7 $encryptor = $aes.CreateEncryptor() $cipherBytes = $encryptor.TransformFinalBlock($plain,0,$plain.Length) $cipherB64 = [Convert]::ToBase64String($cipherBytes) # 4. Зберегти зашифрований текст у змінну середовища # 5. Завантажувач розшифровки – точний рядок, який буде зареєстровано (містить "AES") $loader = @" `$enc = [System.Environment]::GetEnvironmentVariable('ENC_PAYLOAD') `$bytes = [Convert]::FromBase64String(`$enc) `$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider `$aes.Key = $($key -join ',') `$aes.IV = $($iv -join ',') `$decryptor = `$aes.CreateDecryptor() `$plain = `$decryptor.TransformFinalBlock(`$bytes,0,`$bytes.Length) `$result = [System.Text.Encoding]::UTF8.GetString(`$plain) Write-Output `"Розшифровано: `$result`" "@ # Виконайте завантажувач (буде зафіксовано як EventID 4104) Invoke-Expression $loader -
Команди очищення
# Вилучіть змінну середовища # Очистити будь-які тимчасові змінні з сесії Remove-Variable -Name key,iv,plain,cipherBytes,cipherB64,loader -ErrorAction SilentlyContinue
Перевірка після імітації
- Запустити запит перевірки (приклад KQL вище), але фільтрувати для
ScriptBlockText містить "AES"щоб підтвердити, що виявлення спрацювало. - Перегляньте деталі сповіщення в SIEM; переконайтеся, що назва сповіщення збігається з правилом (якщо визначено) і що рівень критичності зазначений як Високий.
Заключні зауваження
- Правило успішно виявляє простий сценарій використання «AES».
- Противники можуть уникнути, розділивши слово (наприклад,
"AE"+"S"), завантаживши клас .NET через рефлексію або виконуючи розшифровку у скомпільованих бінарних файлах. - Покращення правила за допомогою поведінкових індикаторів (використання змінних середовища для шифрованого тексту, рядки з високою ентропією, створення
AesCryptoServiceProviderоб’єктів та наступнівиклики TransformFinalBlock) покращить стійкість до простої обфускації.