Аналіз Phantom Stealer: всередині двошарового ланцюжка атак
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Phantom Stealer – це двоетапний інфостілер для Windows, який починається з шкідливого pdh.dll завантажувача і закінчується .NET-навантженням, впорскнутим у jsc.exe. Завантажувач використовує вразливість DLL hijacking, hollowing процесів і нативну AOT-компіляцію, щоб зменшити ймовірність виявлення. Як тільки він активується, другий етап payload краде облікові дані, дані браузера, інформацію про криптовалютні гаманці, вміст буфера обміну та інші конфіденційні дані, а також може замінювати скопійовані адреси гаманців на значення, контрольовані атакуючим. Шкідливе ПЗ рекламується як комерційний кримінальний продукт і наразі використовується в активних атаках.
Розслідування
Дослідники виявили, що завантажувач копіює себе в %APPDATA%MicrosoftRasManagementMpDlpService.exe і створює Run ключ для збереження стійкості. Потім він розшифровує двічі зашифроване RC4-шифрування завантаження, впорскує його в призупинений jsc.exe процес і виконує декілька антианалітичних перевірок перед початком викрадення даних. Внутрішній .NET-стіллер здатний обійти шифрування Chrome 127+ app-bound і ексфільтрує викрадену інформацію через SMTP, використовуючи підроблений домен. Окремі потоки обробляють криптопідрізання та функції кейлогінгу.
Пом’якшення
Захисники повинні стежити за несподіваними pdh.dll завантаженнями з не системних шляхів і впроваджувати засоби, що знижують ризик DLL hijacking. Команди безпеки також повинні виявляти незнайомі виконувані файли, розміщені в %APPDATA%MicrosoftRasManagement і спостерігати за Run ключем RasManSvc. Базовані на поведінці детекції повинні бути сконцентровані на hollowing процесів з Run key. Behavior-based detections should focus on process hollowing involving jsc.exe, в той час як моніторинг мережі повинен позначати підозрілі з’єднання з виявленими командно-контрольними доменами. Додаткове посилення зберігання облікових даних і жорстка контроль над доступом до буфера обміну для недовірених додатків можуть ще більше знизити ризик.
Відповідь
Настороження на створення MpDlpService.exe в каталозі RasManagement і на зміни до відповідних ключів в реєстрі Run. Розслідуйте будь-які jsc.exe процеси, що демонструють ознаки впорскнутого коду, і негайно зупиніть шкідливу діяльність. Зберіть відповідні індикатори компромісу, карантинуйте пов’язані файли та проведіть судову експертизу, щоб визначити, які облікові дані та дані гаманців могли бути піддані ризику. Скиньте уражені акаунти та за необхідності повідомте постраждалих користувачів.
Потік атаки
Детекції
Можливі точки збереження (ASEPs – Бджолині вулики програмного забезпечення/NTUSER) (через registry_event)
Перегляд
Незвичайна зміна виконання кодової сторінки (за допомогою cmdline)
Перегляд
Можливе виявлення паролів WiFi (за допомогою cmdline)
Перегляд
IOCs (HashSha256) для виявлення: Аналіз Phantom Stealer: Внутрішній дворівневий ланцюг атак, прихований за Windows DLL
Перегляд
IOCs (HashMd5) для виявлення: Аналіз Phantom Stealer: Внутрішній дворівневий ланцюг атак, прихований за Windows DLL
Перегляд
Реєстраційняя стійкість через ключ запуску RasManSvc [Подія реєстру Windows]
Перегляд
Захоплення процесу у jsc.exe та стійкість через MpDlpService.exe [Створення процесу Windows]
Перегляд
Виконання симуляції
Передумова: Попередня перевірка телеметрії та базової лінії повинна бути успішно виконана.
Підстава: Цей розділ детально описує точне виконання техніки противника (TTP), призначеної для запуску правила виявлення. Команди та описи безпосередньо відображають виявлені TTP і призначені для генерації точної телеметрії, очікуваної логікою виявлення.
-
Опис атаки та команди:
Спочатку нападник краде шкідливе завантаження (наприклад, DLL зворотного тунелю) і зберігає його в каталозі користувача%APPDATA%. Використовуючиjsc.exeяк хост для hollowing, нападник створює новий процес, впорскує завантаження і відновлює виконання — виконуючи T1055.012 and T1055.003.
Щоб забезпечити стійкість, нападник копіює шкідливий DLL у%APPDATA%MicrosoftRasManagementMpDlpService.exeі реєструє його як службу, яка запускається при вході в систему, зловживаючи легітимним ім’ям служби (T1620). -
Сценарій регресійних тестів:
# --------------------------------------------------------- # Симуляція сценарію атаки – Процес Hollowing + Стійкість # --------------------------------------------------------- # Змінні $appData = "$env:APPDATAMicrosoftRasManagement" $loaderPath = Join-Path $appData "MpDlpService.exe" $maliciousDll = "$env:TMPmalicious.dll" # місце для payload # 1. Підготовка стійкого каталогу New-Item -Path $appData -ItemType Directory -Force | Out-Null # 2. Скидання фальшивого шкідливого DLL (симуляція payload) # У реальному нападі це було б скомпільоване завантаження; тут ми створюємо файл нульової довжини. New-Item -Path $maliciousDll -ItemType File -Force | Out-Null # 3. Копіювання DLL до місця підробленої служби Copy-Item -Path $maliciousDll -Destination $loaderPath -Force # 4. Реєстрація тимчасової служби, яка вказує на скопійований файл (вимагає адміністраторських прав) $svcName = "MpDlpService" sc.exe create $svcName binPath= "`"$loaderPath`"" DisplayName= "Microsoft Ras Management Service" start= auto | Out-Null # 5. Запуск служби (ініціює виконання MpDlpService.exe) sc.exe start $svcName | Out-Null # 6. Виконання hollowing, використовуючи jsc.exe як хост # Ми запустимо jsc.exe в призупиненому стані, замінимо його пам'ять на фальшивий payload, # потім відновимо. Це використовує функцію Invoke-ProcessHollowing з PowerSploit. function Invoke-ProcessHollowing { param( [string]$HostPath, [string]$PayloadPath ) # Завантаження .NET API Add-Type @" using System; using System.Diagnostics; using System.Runtime.InteropServices; public class Hollow { [DllImport("kernel32.dll")] public static extern bool CreateProcess(string appName, string cmdLine, IntPtr procSec, IntPtr threadSec, bool inherit, uint flags, IntPtr env, string cwd, ref STARTUPINFO si, out PROCESS_INFORMATION pi); [StructLayout(LayoutKind.Sequential)] public struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public uint dwX; public uint dwY; public uint dwXSize; public uint dwYSize; public uint dwXCountChars; public uint dwYCountChars; public uint dwFillAttribute; public uint dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } "@ # Створення призупиненого процесу $si = New-Object Hollow+STARTUPINFO $pi = New-Object Hollow+PROCESS_INFORMATION $si.cb = [Runtime.InteropServices.Marshal]::SizeOf($si) $CREATE_SUSPENDED = 0x00000004 $ok = [Hollow]::CreateProcess($null, "`"$HostPath`"", [IntPtr]::Zero, [IntPtr]::Zero, $false, $CREATE_SUSPENDED, [IntPtr]::Zero, $null, [ref]$si, [ref]$pi) if (-not $ok) { Write-Error "Не вдається створити призупинений процес" ; return } # (Кроки ін'єкції payload пропущені – місце для справжньої техніки) # Відновлення потоку $RESUME_THREAD = 0x00000001 [System.Runtime.InteropServices.Marshal]::WriteInt32($pi.hThread, 0, $RESUME_THREAD) | Out-Null } # Виконати hollowing (використовуючи реальний jsc.exe як хост) $jscPath = "$env:SystemRootSystem32jsc.exe" Invoke-ProcessHollowing -HostPath $jscPath -PayloadPath $maliciousDll # --------------------------------------------------------- # Кінець симуляції # --------------------------------------------------------- -
Команди очищення:
# Зупинка та видалення тимчасової служби sc.exe stop MpDlpService | Out-Null sc.exe delete MpDlpService | Out-Null # Видалення завантажувача і фальшивого payload Remove-Item -Path "$env:APPDATAMicrosoftRasManagementMpDlpService.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TMPmalicious.dll" -Force -ErrorAction SilentlyContinue # Опціонально: знищити будь-які залишкові процеси jsc.exe, запущені тестом Get-Process -Name jsc -ErrorAction SilentlyContinue | Stop-Process -Force