Полювання на загрози від Zscaler викриває та реконструює кампанію води Gamayun APT
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 і активувати процедури реагування на інциденти.
Потік атаки
Виявлення
Зловмисне виконання MMC та PowerShell групою Water Gamayun APT [Створення процесу Windows]
Переглянути
Виявлення обфускаційних шаблонів PowerShell від Water Gamayun [Powershell Windows]
Переглянути
IOC (DestinationIP) для виявлення: Zscaler Threat Hunting виявляє та реконструює складну атаку APT-групи Water Gamayun
Переглянути
IOC (SourceIP) для виявлення: Zscaler Threat Hunting виявляє та реконструює складну атаку APT-групи Water Gamayun
Переглянути
IOC (HashMd5) для виявлення: Zscaler Threat Hunting виявляє та реконструює складну атаку APT-групи Water Gamayun
Переглянути
Виконання симуляції
Передумова: Телеметрія та перевірка базового рівня повинні бути успішно пройдені.
Обґрунтування: Цей розділ детально викладає точне виконання техніки противника (TTP), призначеної для активації правила виявлення. Команди та оповідь повинні точно відображати ідентифіковані TTP та прагнути до точного генерування очікуваної телеметрії логікою виявлення. Абстрактні або непов’язані приклади призведуть до неправильного діагнозу.
-
Опис атаки та команди:
Зловмисник, використовуючи методологію Water Gamayun, готує зловмисне навантаження PowerShell, яке створює нового локального адміністратора та додає його до групи адміністраторів. Щоб приховати навантаження, зловмисник:- Записує скрипт PowerShell у відкритому тексті.
- Кодує його в UTF‑16LE Base64.
- Вставляє підкреслення (
_) після кожних 4 символів для підвищення ентропії. - Ланцюже дію
|Replace('_','')так, що виконання PowerShell видаляє підкреслення перед декодуванням, що відповідає сигнатурі виявлення.
Остаточна команда виконання:
powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')Ця точна командна лінія відповідає двом умовам правила Sigma (
-EncodedCommandand|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." }