Кампанія TerminalFix дозволяє мережеве переміщення через скомпрометовані хости
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
TerminalFix — це варіант техніки ClickFix, в якому зловмисники використовують фальшиві підказки перевірки Cloudflare, щоб змусити користувачів виконувати шкідливі PowerShell команди. Атака поєднує в собі завантаження DLL з підставними бібліотеками, доставку навантаження за допомогою стеганографії та зворотній тунель на основі WebSocket. Це дозволяє скомпрометованій робочій станції функціонувати як мережевий вузол для додаткових досліджень і можливого розповсюдження програм-вимагачів.
Розслідування
Розслідування вивчало життєвий цикл атаки від початкової веб-пастки до постексплуатаційної активності. Аналітики виявили, що LockScreenContentServer.exe використовувався для завантаження DLL з підставними файлами, а PNG-файли — для доставки стеганографічного навантаження. Кампанія також пов’язана з Vice Spider на основі німецьких медіа-репортажів та консультативних звітів, опублікованих BSI.
Пом’якшення
Захисники повинні контролювати підозрілі фрейми на базі браузера із подальшим виконанням PowerShell або Windows Terminal. Організаціям слід виявляти незвичайну поведінку завантаження DLL, особливо легітимні файли, що завантажують DLL з несподіваних місць, таких як C:ProgramData. Обмеження політик виконання PowerShell і моніторинг несанкціонованих запланованих завдань і змін ключів реєстру Run можуть ще більше знизити ступінь небезпеки.
Реакція
Коли виявлено активність TerminalFix, ізолюйте уражену робочу станцію, щоб запобігти її роботі як мережевого вузла. Аналізуйте мережевий трафік на предмет зовнішніх з’єднань WebSocket з невідомими доменами та внутрішньої розвідувальної діяльності, такий як запити LDAP. Перевірте телеметрію кінцевих точок на предмет несанкціонованого виконання Python-скриптів і використання інструментів, включаючи Impacket і Certipy.
Схема атаки
Ми ще оновлюємо цю частину.
Виявлення
Підозрілі операції на ключі реєстру NoWarningNoElevationOnInstall (через registry_event)
Можливі точки стійкості [ASEPs – Програмне забезпечення/NTUSER Hive] (через registry_event)
Можливі шаблони командного рядка Impacket (через cmdline)
Можливе віддалене виконання коду з використанням Impacket (через cmdline)
Виконання Python з підозрілих папок (через cmdline)
Можливе перерахування адміністративних облікових записів або груп (через cmdline)
Підозрілі виявлення довірених доменів (через cmdline)
Можливий бічний рух через PsExec або подібне (через system)
Можливий бічний рух через PsExec або подібне (через audit)
Можливе використання PsExec (через audit)
IOC (SourceIP) для виявлення: TerminalFix: коли робоча станція стає мережевим вузлом
IOC (DestinationIP) для виявлення: TerminalFix: коли робоча станція стає мережевим вузлом
Виявлення мережевого вузла TerminalFix [Windows мережеве з’єднання]
Виявлення шкідливого виконання TerminalFix [Windows створення процесу]
Виявлення шкідливих команд PowerShell для отримання ZIP та PNG [Windows PowerShell]
Виконання симуляції
-
Оповідання про атаку та команди: Противник отримав початковий доступ і намагається встановити постійний C2 канал, щоб перейти через робочу станцію. Щоб змішатися зі стандартним веб-трафіком, він використовує протокол WebSocket. Зловмисник виконує скрипт PowerShell, що ініціює з’єднання з
gitnow.dev. Це імітує поведінку TerminalFix, де робоча станція діє як ретранслятор. Мета полягає в тому, щоб активувативибір_доменуandвибір_зв'язкукритерії правила виявлення. -
Скрипт регресійного тесту:
# Симуляція з'єднання TerminalFix C2 WebSocket # Цільовий домен: gitnow.dev $targetDomain = "gitnow.dev" $uri = "wss://$targetDomain/path/to/c2" Write-Host "Симуляція з'єднання TerminalFix C2 до $targetDomain..." $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationTokenSource try { # Спроба з'єднання для генерації телеметрії мережевого з'єднання $connectTask = $ws.ConnectAsync($uri, $ct.Token) # Використовуємо timeout, оскільки домен ймовірно не існує/не відповідає if ($connectTask.Wait(10000)) { Write-Host "Успішно з'єднано з $targetDomain" $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Закриття", $ct.Token).Wait() } } catch { Write-Host "Спроба з'єднання. Телеметрія має бути згенерована в логах Sysmon/EDR." Write-Host "Детальний опис помилки: $($_.Exception.Message)" } finally { $ws.Dispose() } -
Команди очистки:
# Ця симуляція не створювала стійкості або файлів. # Якщо були використані тимчасові файли, їх слід видалити тут. Write-Host "Очищення симуляції завершено. Цей скрипт не залишив артефактів."