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 бінарії з системи. Підроблені облікові дані слід анулювати, ввести багатофакторну аутентифікацію і скинути збережені паролі браузера. Детективи також мають проводити аналіз мережі, щоб підтвердити відсутність додаткової комунікації командування та контролю, і застосувати кроки реабілітації для запобігання повторного зараження.

Потік атаки

Виявлення

Можливість виконання прихованих команд 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 ) покращить стійкість до простої обфускації.