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 бінарії з системи. Підроблені облікові дані слід анулювати, ввести багатофакторну аутентифікацію і скинути збережені паролі браузера. Детективи також мають проводити аналіз мережі, щоб підтвердити відсутність додаткової комунікації командування та контролю, і застосувати кроки реабілітації для запобігання повторного зараження.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffdd99 classDef malware fill:#ff9999 %% Nodes initial_phishing["<b>Дія</b> – <b>T1566.001 Спеарфішингове вкладення</b><br/>Атакуючий надсилає фішинговий електронний лист з вкладеним архівом TXZ, що містить шкідливе навантаження."] class initial_phishing action malicious_archive["<b>Шкідливе ПЗ</b> – <b>Назва</b>: Шкідливий архів TXZ<br/><b>Опис</b>: Архів, використовуваний для доставки початкового завантажувача JavaScript."] class malicious_archive malware user_execution["<b>Дія</b> – <b>T1204.004 Виконання користувачем</b><br/>Жертва розпаковує архів, JavaScript запускає PowerShell у прихованому режимі і зчитує команди зі змінних середовища."] class user_execution action powershell_loader["<b>Процес</b> – <b>Назва</b>: Завантажувач PowerShell<br/><b>Опис</b>: Виконує розшифровану .NET-збірку через рефлексію без запису на диск."] class powershell_loader process defense_compile["<b>Дія</b> – <b>T1027.004 Компіляція після доставки</b><br/>Розшифрована .NET-збірка завантажується в пам’ять через рефлексію."] class defense_compile action defense_compress["<b>Дія</b> – <b>T1027.015 Стиснення</b><br/>Навантаження AESu2011розшифровується, потім стискається за допомогою Gzip."] class defense_compress action defense_stego["<b>Дія</b> – <b>T1027.003 Стеганографія</b><br/>Завантажувач завантажує зображення PNG і вилучає приховані зашифровані дані з фрагментів iTXt/IEND."] class defense_stego action masquerade_icon["<b>Дія</b> – <b>T1036.008 Маскування</b><br/>Бінарний файл використовує зображення кота як значок свого застосунку, щоб здаватися нешкідливим."] class masquerade_icon action c2_encrypted["<b>Дія</b> – <b>T1573 Шифрований канал</b><br/>Подальша комунікація C2 відбувається через HTTPS із AESu2011256 зашифрованими навантаженнями."] class c2_encrypted action credential_access["<b>Дія</b> – <b>T1555.003 Облікові дані з веб-переглядачів</b><br/>PureLogs вивчає браузери і вилучає збережені паролі, куки та криптоu2011гаманці."] class credential_access action purelogs_tool["<b>Інструмент</b> – <b>Назва</b>: PureLogs<br/><b>Опис</b>: Утиліта для скидання облікових даних, яка збирає дані браузера."] class purelogs_tool tool collection_archive["<b>Дія</b> – <b>T1560.003 Архивація зібраних даних</b><br/>Зібрані дані стискаються за допомогою Gzip і шифруються за допомогою AES перед ексфільтрацією."] class collection_archive action exfiltration_http["<b>Дія</b> – <b>T1048.003 Ексфільтрація через незашифрований неu2011C2 протокол</b><br/>Дані надсилаються через HTTP POST запити на декілька зовнішніх кінцевих точок."] class exfiltration_http action %% Connections initial_phishing –>|доставляє| malicious_archive malicious_archive –>|активує| user_execution user_execution –>|виконує| powershell_loader powershell_loader –>|виконує| defense_compile defense_compile –>|використовує| defense_compress defense_compress –>|використовує| defense_stego defense_stego –>|дозволяє| masquerade_icon masquerade_icon –>|встановлює| c2_encrypted c2_encrypted –>|дозволяє| credential_access credential_access –>|використовує| purelogs_tool credential_access –>|збирає| collection_archive collection_archive –>|ексфільтрує через| exfiltration_http %% Class Assignments class initial_phishing action class malicious_archive malware class user_execution action class powershell_loader process class defense_compile action class defense_compress action class defense_stego action class masquerade_icon action class c2_encrypted action class credential_access action class purelogs_tool tool class collection_archive action class exfiltration_http action "
Поточний потік атаки
Виявлення
Можливість виконання прихованих команд 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) покращить стійкість до простої обфускації.