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 %% Визначення класів classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffdd99 classDef malware fill:#ff9999 %% Вузли 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-збірку через reflection без запису на диск.”] class powershell_loader process defense_compile[“<b>Дія</b> – <b>T1027.004 Компіляція Після Доставки</b><br/>Розшифрована .NET-збірка завантажується в пам’ять через reflection.”] class defense_compile action defense_compress[“<b>Дія</b> – <b>T1027.015 Стиснення</b><br/>Навантаження розшифровується за допомогою AES, а потім розпаковується через 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 із навантаженнями, зашифрованими AES-256.”] class c2_encrypted action credential_access[“<b>Дія</b> – <b>T1555.003 Облікові Дані з Веббраузерів</b><br/>PureLogs перераховує браузери та витягує збережені паролі, cookie та файли криптогаманців.”] 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 Ексфільтрація Через Незашифрований Не-C2 Протокол</b><br/>Дані надсилаються через HTTP POST-запити до кількох зовнішніх кінцевих точок.”] class exfiltration_http action %% Зв’язки 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
Потік атаки
Виявлення
Можливість виконання прихованих команд 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) покращить стійкість до простої обфускації.