Завантажувачі RenEngine та HijackLoader: Двоетапний ланцюжок атак, що підживлює кампанії викрадачів
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
З квітня 2025 року дослідники відстежують масштабну операцію щодо крадіжки даних, побудовану навколо двоетапного ланцюга завантажувача. Перша стадія, RenEngine Loader, вбудована в інакше легітимний запусковик гри Ren’Py і дешифрує наступний завантажувач, названий HijackLoader. HijackLoader зловживає боковим завантаженням DLL і подвійним відображенням процесів, використовуючи модульну структуру, яка може організувати понад 30 допоміжних модулів, перш ніж кінцево доставити корисне навантаження ACR stealer. Розповсюдження пов’язане з зламаними установлювачами ігор, які просуваються через піратські екосистеми, впливаючи на сотні тисяч жертв по всьому світу.
Розслідування
Команда Howler Cell відновила повний ланцюг виконання, реверс-інженерингуючи логіку Python RenEngine, вилучаючи артефакти конфігурації та виявляючи архів, зашифрований XOR, що використовується для інсценування. Їхній аналіз HijackLoader каталогізував 38 модулів, включаючи перевірки на віртуальні машини, обхід UAC, стійкість запланованих завдань і можливості реверс-шела. Аналіз інфраструктури зв’язав кампанію з однією загальнодоступною кінцевою точкою C2, 78.40.193.126, і доменом доставки dodi-repacks.site, який використовувався для розповсюдження початкових завантажувальних програм.
Пом’якшення наслідків
Моніторьте аномальні виконання запусковика Ren’Py, особливо в парі з боковим завантаженням DLL загальних імен файлів, таких як d3dx9_43.dll. Шукайте підозріле створення папок у %ProgramData% і %AppData%, особливо шляхів, названих broker_crypt_v4_i386. Додайте поведінкові виявлення для обходу пісочниці, подвійного відображення процесів і незвичайних шаблонів доступу до реєстру, пов’язаних з перевірками артефактів віртуальної машини. Блокуйте відомі домени розповсюдження піратства на веб-шлюзі та застосовуйте список дозволених додатків, щоб обмежити запусковики ігор та unsigned “installer” виконувальні файли від виконання в шляхах доступних для запису користувачем.
Відповідь
При виявленні ізолюйте кінцеву точку, збережіть докази (дампи пам’яті, зашифровані архіви та артефакти завантажувача), і перевірте середовище на наявність виявлених модулів та скинутих файлів. Негайно блокуйте 78.40.193.126 і dodi-repacks.site на периметральних контролях. Виконуйте тріаж стосується витоку облікових даних, зосереджуючись на паролях браузера, сесійних куках і криптовалютних гаманцях, потім замініть постраждалі облікові записи й токени. Видаліть стійкість зловмисника (особливо заплановані завдання) і видаліть зловмисні файли, потім продовжуйте моніторинг шляхів реінфекції, пов’язаних з встановленням піратського програмного забезпечення.
"graph TB %% Class definitions classDef action fill:#99ccff classDef file fill:#ffcc99 classDef process fill:#ff9966 classDef malware fill:#ff6666 classDef network fill:#ccccff %% Step 1 u2013 User Execution step1_user_exec["<b>Техніка</b> – <b>T1204.002 Виконання користувача: Зловмисний файл</b><br/><b>Опис</b>: Користувача обманюють виконати зловмисний файл, такий як зламаний установлювач гри.<br/><b>Артефакт</b>: Instaler.exe"] class step1_user_exec action file_installer["<b>Файл</b> – Instaler.exe<br/>Виглядає легітимним, але містить зловмисне навантаження"] class file_installer file step1_user_exec –>|виконує| file_installer %% Step 2 u2013 Python Interpreter step2_python["<b>Техніка</b> – <b>T1059.006 Інтерпретатор команд і сценаріїв: Python</b><br/><b>Опис</b>: Виконує вбудований зловмисний код Python з archive.rpa через запусковик Ren'Py."] class step2_python action file_archive["<b>Файл</b> – archive.rpa<br/>Містить зловмисний Python сценарій"] class file_archive file file_installer –>|запускає| step2_python step2_python –>|завантажує| file_archive %% Step 3 u2013 Obfuscated Payload step3_obfusc["<b>Техніка</b> – <b>T1027 Обфусковані файли чи інформація</b><br/><b>Опис</b>: Навантаження приховається за допомогою кодування Base64, XOR шифрування і стисненого в архіві."] class step3_obfusc action file_obf_payload["<b>Файл</b> – obfuscated_payload.bin<br/>Стиснене та зашифроване навантаження"] class file_obf_payload file file_archive –>|містить| file_obf_payload file_obf_payload –>|декодується і дешифрується| step3_obfusc %% Step 4 u2013 Sandbox Evasion step4_sandbox["<b>Техніка</b> – <b>T1497 Віртуалізація/уникнення пісочниці</b><br/><b>Під-технологія</b> – <b>T1497.002 Перевірки на основі активності користувача</b><br/><b>Опис</b>: Завантажувач виконує обширні перевірки на віртуальні машини та пісочниці (RAM, CPU, реєстр) і зупиняє процес, якщо виявлено середовище аналізу."] class step4_sandbox action step3_obfusc –>|надає код| step4_sandbox %% Step 5 u2013 Впорскування процесу step5_injection["<b>Техніка</b> – <b>T1055 Впорскування процесу</b><br/><b>Під-технологія</b> – <b>T1055.002 Впорскування портативного виконуваного файлу</b><br/><b>Опис</b>: HijackLoader вводить зловмисний код у легітимний системний DLL rasapi32.dll для виконання шелкоду."] class step5_injection action process_rasapi["<b>Процесс</b> – rasapi32.dll<br/>Ціль для впорскування PE"] class process_rasapi process step4_sandbox –>|завантажує| step5_injection step5_injection –>|впорскує в| process_rasapi %% Step 6 u2013 AppInit DLL Бокове завантаження step6_appinit["<b>Техніка</b> – <b>T1546.010 Виконання, запущене подією: AppInit DLLs</b><br/><b>Опис</b>: Зловмисні DLLs (d3dx9_43.dll, VSDebugScriptAgent170.dll) боково завантажуються через довірений виконувальний установлювач для стійкості."] class step6_appinit action file_d3dx9["<b>Файл</b> – d3dx9_43.dll<br/>Зловмисний боково завантажений DLL"] class file_d3dx9 file file_vsddebug["<b>Файл</b> – VSDebugScriptAgent170.dll<br/>Зловмисний боково завантажений DLL"] class file_vsddebug file process_rasapi –>|активує завантаження| file_d3dx9 process_rasapi –>|активує завантаження| file_vsddebug file_d3dx9 –>|використовується| step6_appinit file_vsddebug –>|використовується| step6_appinit %% Step 7 u2013 Обхід UAC step7_uac["<b>Техніка</b> – <b>T1548.002 Зловживання механізмом контролю підвищення: Обхід контролю облікових записів користувачів</b><br/><b>Опис</b>: Завантажувач намагається обійти UAC, щоб отримати вищі привілеї."] class step7_uac action step6_appinit –>|намагається підвищити через| step7_uac %% Step 8 u2013 Стійкість запланованого завдання step8_task["<b>Техніка</b> – <b>T1053 Заплановане завдання/робота</b><br/><b>Опис</b>: Створюється заплановане завдання для підтримки стійкості та повторного виконання навантаження."] class step8_task action step7_uac –>|створює| step8_task %% Step 9 u2013 Збір облікових даних step9_cred["<b>Техніки</b> – <b>T1555.003 Облікові дані з сховищ паролів: Облікові дані з веб-браузерів</b> та <b>T1550.004 Використання змінного матеріалу автентифікації: Веб-сесійна кука</b><br/><b>Опис</b>: Фінальний ACR stealer збирає паролі з браузера, куки, крипто-гаманці та інші дані облікових даних."] class step9_cred action step8_task –>|виконує| step9_cred %% Step 10 u2013 Витік даних step10_exfil["<b>Техніка</b> – <b>T1041 Витік даних через канал C2</b><br/><b>Опис</b>: Зібрані дані відправляються на C2 сервер атакуючого за адресою 78.40.193.126."] class step10_exfil action network_c2["<b>Мережа</b> – C2 Сервер 78.40.193.126"] class network_c2 network step9_cred –>|витікає дані до| network_c2 network_c2 –>|отримує дані від| step10_exfil "
Поток атаки
Виявлення
RenPy або Python Engine, що виконує бінарний файл з директрії доступної для користувача запису (за допомогою cmdline)
Перегляд
PowerShell, що запитує Кількість Логічних Процесорів для виявлення віртуальної машини або пісочниці (за допомогою cmdline)
Перегляд
Можливі перевірки уникнення (через powershell)
Перегляд
Виконання RenPy або Python, що здійснює команди виявлення віртуальної машини або пісочниці
Перегляд
Індикатори компрометації (DestinationIP) для виявлення: RenEngine Loader та HijackLoader: Двоетапний Ланцюг Атаки, що Підживлює Кампанії Зловмисників
Перегляд
Індикатори компрометації (Emails) для виявлення: RenEngine Loader та HijackLoader: Двоетапний Ланцюг Атаки, що Підживлює Кампанії Зловмисників
Перегляд
Індикатори компрометації (SourceIP) для виявлення: RenEngine Loader та HijackLoader: Двоетапний Ланцюг Атаки, що Підживлює Кампанії Зловмисників
Перегляд
Індикатори компрометації (HashSha256) для виявлення: RenEngine Loader та HijackLoader: Двоетапний Ланцюг Атаки, що Підживлює Кампанії Зловмисників
Перегляд
Виявлення використання HijackLoader API для завантаження зловмисного модуля [Windows Sysmon]
Перегляд
Виявлення Зловмисного Ланцюга Виконання за допомогою запусковика Ren’Py [Windows Process Creation]
Перегляд
Виконання симуляції
Передумова: Перевірка телеметрії та базового рівня повинна бути пройдена.
Обгрунтування: Цей розділ деталізує точне виконання техніки супротивника (TTP), призначеної для активації правила виявлення. Команди і нарація МАЮТЬ безпосередньо відображати ідентифіковані TTP і прагнути генерувати точну телеметрію, очікувану логікою виявлення.
-
Опис атаки та команди:
Атакувач отримує зловмисний установлювач гри Ren’Py (Installer.exe), що був перепакований для включення прихованого навантаження на Python. Коли жертва запускає установлювач, він створює вторинний завантажувач (W8CPbGQI.exe). Цей завантажувач розпаковує третій етап бінарного файлу (ZoneInd.exe), що виконує впорскування процесу, вилучення облікових даних та встановлює C2 канал через HTTP. Атакувач свідомо уникає надання назви будь-якому дочірньому процесуchime.exeщоб задовольнити виключаючу умову правила.Кроки, виконані на скомпрометованому хості:
- Запустіть скомпрометований установлювач Ren’Py.
Installer.exeвиконується як батьківський процес. - Запустіть перший зловмисний завантажувач.
Installer.exeстворюєW8CPbGQI.exe(Подія створення процесу – відповідаєTargetImage). - Запустіть навантаження другого етапу.
W8CPbGQI.exeзапускаєZoneInd.exe(інша подія створення процесу – також відповідаєTargetImage). - Виконайте зловмисні дії (впорскування процесу, вилучення облікових даних, C2).
Ці дії генерують точну телеметрію, яку моніторить правило Sigma: процес з
Image=*Installer.exeстворює дочірній процес зTargetImage=*W8CPbGQI.exeor*ZoneInd.exe, без виключення*chime.exe. - Запустіть скомпрометований установлювач Ren’Py.
-
Скрипт регресійного тесту:
Скрипт нижче створює фальшиві виконувальні файли (простий сценарій PowerShell, збережений як.exeviapowershell -c "..."для демонстрації) а потім оркеструє ланцюг. Запустіть його в підвищеній командному рядку PowerShell.# ------------------------------------------------- # Скрипт регресійного тесту – Моделювання Зловмисного Ланцюга # ------------------------------------------------- # 1. Створіть місце розташування виконуваних файлів-заступників (моделювання виконуваних файлів) $binPath = "$env:TEMPRenPyChain" New-Item -ItemType Directory -Path $binPath -Force | Out-Null # Помічник зі створення легкого exe, який просто спить (використовуючи .exe обгортку PowerShell) function New-StubExe($name) { $script = "Start-Sleep -Seconds 30" $ps1 = "$binPath$name.ps1" $exe = "$binPath$name.exe" Set-Content -Path $ps1 -Value $script -Encoding UTF8 # Використовуйте вбудовану PS2EXE PowerShell (або будь-яку exe оболонку) – тут ми імітуємо з PowerShell -File # Для простоти, ми просто створюємо заплановане завдання, яке запускає ps1; шлях .exe є місцем заміни. New-Item -ItemType File -Path $exe -Force | Out-Null } # Створіть исполняемые файлы-заглушки New-StubExe "Installer" New-StubExe "W8CPbGQI" New-StubExe "ZoneInd" # 2. Виконайте ланцюг Write-Host "`n[+] Запуск Installer.exe (батьківський)..." Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow # Невелика затримка для забезпечення появлення батьківського процесу у журналах Start-Sleep -Seconds 2 Write-Host "[+] Installer.exe створює W8CPbGQI.exe..." Start-Process -FilePath "$binPathW8CPbGQI.exe" -NoNewWindow Start-Sleep -Seconds 1 Write-Host "[+] W8CPbGQI.exe створює ZoneInd.exe..." Start-Process -FilePath "$binPathZoneInd.exe" -NoNewWindow Write-Host "`n[+] Ланцюг виконано. Перевірте виявлення у вашій SIEM." # ------------------------------------------------- -
Команди очищення:
Видаліть тимчасові файли та закінчіть усі лишившися процеси сну.# Очистіть исполняемые файлы-заглушки і директорії $binPath = "$env:TEMPRenPyChain" Write-Host "`n[+] Зупинка всіх залишкових процесів-заступників..." Get-Process -Name "Installer","W8CPbGQI","ZoneInd" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Видалення тимчасових файлів..." Remove-Item -Path $binPath -Recurse -Force Write-Host "[+] Очищення завершено."