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

18 May 2026 18:43 UTC

PureLogs доставляються через стеґанографію PawsRunner

Author Photo
SOC Prime Team linkedin icon Стежити
PureLogs доставляються через стеґанографію PawsRunner
shield icon

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)

Команда SOC Prime
18 травня 2026

LOLBAS WScript / CScript (через створення процесу)

Команда SOC Prime
18 травня 2026

Виклик підозрілих методів .NET з Powershell (через powershell)

Команда SOC Prime
18 травня 2026

Можливі індикатори обфускації PowerShell (через powershell)

Команда SOC Prime
18 травня 2026

LOLBAS Conhost (через cmdline)

Команда SOC Prime
18 травня 2026

IOC-об’єкти (HashSha256) для виявлення: PureLogs: Доставка через PawsRunner стеганографію

Правила SOC Prime AI
18 травня 2026

IOC-об’єкти (SourceIP) для виявлення: PureLogs: Доставка через PawsRunner стеганографію

Правила SOC Prime AI
18 травня 2026

IOC-об’єкти (DestinationIP) для виявлення: PureLogs: Доставка через PawsRunner стеганографію

Правила SOC Prime AI
18 травня 2026

PowerShell AES розшифровка зі змінних середовища [Windows PowerShell]

Правила SOC Prime AI
18 травня 2026

Виявлення виконання шкідливого процесу через приховані Conhost і PowerShell [Windows Process Creation]

Правила SOC Prime AI
18 травня 2026

Запуск імітації

Передумова: Перевірка телеметрії та базовий попередній контроль повинні бути успішними.

  • Опис атаки та команди

    1. Етап 1 – Підготовка зашифрованого навантаження
      • Атакуючий створює невелике навчальне навантаження ("секрет"), зашифровує його з використанням AES‑256 за відомим ключем, кодує у Base64 шифровану текстову інформацію і зберігає її у змінній середовища ENC_PAYLOAD.
    2. Етап 2 – Виконання завантажувача PowerShell-розшифровки
      • Однорядковий скрипт зчитує ENC_PAYLOAD, декодує Base64 рядок, створює .NET AesCryptoServiceProvider, діє ключ/IV, розшифровує дані і, за бажанням, виконує звичайний текст.
    3. Етап 3 – Генерування телеметрії виявлення
      • Команда PowerShell містить буквально слово «AES» (наприклад, New-Object System.Security.Cryptography.AesCryptoServiceProvider) і логізується як EventID 4104, задовольняючи правило виявлення.
  • Скрипт регресійного тестування

    # -------------------------------------------------
    # Імітація розшифровки 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

Перевірка після імітації

  1. Запустити запит перевірки (приклад KQL вище), але фільтрувати для ScriptBlockText містить "AES" щоб підтвердити, що виявлення спрацювало.
  2. Перегляньте деталі сповіщення в SIEM; переконайтеся, що назва сповіщення збігається з правилом (якщо визначено) і що рівень критичності зазначений як Високий.

Заключні зауваження

  • Правило успішно виявляє простий сценарій використання «AES».
  • Противники можуть уникнути, розділивши слово (наприклад, "AE"+"S"), завантаживши клас .NET через рефлексію або виконуючи розшифровку у скомпільованих бінарних файлах.
  • Покращення правила за допомогою поведінкових індикаторів (використання змінних середовища для шифрованого тексту, рядки з високою ентропією, створення AesCryptoServiceProvider об’єктів та наступні виклики TransformFinalBlock ) покращить стійкість до простої обфускації.