RenEngine Loader e HijackLoader: Cadeia de Ataque em Dois Estágios Impulsionando Campanhas de Roubo
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Desde abril de 2025, pesquisadores têm monitorado uma operação de stealer em larga escala construída em torno de uma cadeia de carregador em duas etapas. A primeira etapa, RenEngine Loader, está embutida dentro de um launcher de jogo Ren’Py, caso contrário legítimo, e descriptografa um carregador subsequente chamado HijackLoader. O HijackLoader então abusa do side-loading de DLL e do doppelgänging de processo, usando uma estrutura modular que pode armazenar mais de 30 módulos auxiliares antes de, finalmente, entregar uma carga útil do ACR stealer. A distribuição está ligada a instaladores de jogos pirateados promovidos através de ecossistemas de pirataria, com a atividade impactando centenas de milhares de vítimas globalmente.
Investigação
A equipe Howler Cell reconstruiu toda a cadeia de execução, realizando engenharia reversa da lógica Python do RenEngine, extraindo artefatos de configuração e identificando um arquivo criptografado com XOR usado para o armazenamento. Sua análise do HijackLoader catalogou 38 módulos, incluindo verificações anti-VM, desvio de UAC, persistência de tarefa agendada e capacidades de shell reverso. A análise da infraestrutura vinculou a campanha a um único endpoint público de C2, 78.40.193.126, e ao domínio de entrega dodi-repacks.site, que foi utilizado para semear os downloads do instalador inicial.
Mitigação
Monitore execuções anômalas do launcher Ren’Py, especialmente quando combinadas com o side-loading de DLL de nomes de arquivo comuns, como d3dx9_43.dll. Procure por criações suspeitas de diretórios em %ProgramData% e %AppData%, particularmente caminhos nomeados broker_crypt_v4_i386. Adicione detecções comportamentais para rotinas de evasão de sandbox, doppelgänging de processo e padrões de acesso anormais ao registro associados a verificações de artefatos de máquina virtual. Bloqueie domínios conhecidos de distribuição de pirataria no gateway web e aplique whitelisting de aplicativos para restringir execução de launchers de jogos e executáveis de “instalador” não assinados em locais graváveis pelo usuário.
Resposta
Ao detectar, isole o endpoint, preserve evidências (dump de memória, arquivos criptografados e artefatos de carregador) e varra o ambiente em busca dos módulos identificados e arquivos descartados. Bloqueie imediatamente 78.40.193.126 e dodi-repacks.site nos controles de perímetro. Realize triagem de exposição de credenciais focada em senhas de navegador, cookies de sessão e carteiras de criptomoedas, depois gire as contas e tokens impactados. Remova a persistência do atacante (notadamente tarefas agendadas) e purgue arquivos maliciosos, depois continue monitorando por caminhos de reinfecção ligados a instalações de software pirateado.
"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>Technique</b> – <b>T1204.002 User Execution: Malicious File</b><br/><b>Description</b>: User is tricked into executing a malicious file such as a cracked game installer.<br/><b>Artifact</b>: Instaler.exe"] class step1_user_exec action file_installer["<b>File</b> – Instaler.exe<br/>Appears legitimate but contains malicious payload"] class file_installer file step1_user_exec –>|executes| file_installer %% Step 2 u2013 Python Interpreter step2_python["<b>Technique</b> – <b>T1059.006 Command and Scripting Interpreter: Python</b><br/><b>Description</b>: Executes embedded malicious Python code from archive.rpa via the Ren'Py launcher."] class step2_python action file_archive["<b>File</b> – archive.rpa<br/>Contains malicious Python script"] class file_archive file file_installer –>|launches| step2_python step2_python –>|loads| file_archive %% Step 3 u2013 Obfuscated Payload step3_obfusc["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b><br/><b>Description</b>: Payload is hidden using Base64 encoding, XOR encryption and compressed into an archive."] class step3_obfusc action file_obf_payload["<b>File</b> – obfuscated_payload.bin<br/>Compressed and encrypted payload"] class file_obf_payload file file_archive –>|contains| file_obf_payload file_obf_payload –>|decoded and decrypted by| step3_obfusc %% Step 4 u2013 Sandbox Evasion step4_sandbox["<b>Technique</b> – <b>T1497 Virtualization/Sandbox Evasion</b><br/><b>Subu2011technique</b> – <b>T1497.002 User Activity Based Checks</b><br/><b>Description</b>: Loader performs extensive VM and sandbox checks (RAM, CPU, registry) and aborts if analysis environment is detected."] class step4_sandbox action step3_obfusc –>|provides code to| step4_sandbox %% Step 5 u2013 Process Injection step5_injection["<b>Technique</b> – <b>T1055 Process Injection</b><br/><b>Subu2011technique</b> – <b>T1055.002 Portable Executable Injection</b><br/><b>Description</b>: HijackLoader injects malicious code into legitimate system DLL rasapi32.dll to execute shellcode."] class step5_injection action process_rasapi["<b>Process</b> – rasapi32.dll<br/>Target for PE injection"] class process_rasapi process step4_sandbox –>|loads| step5_injection step5_injection –>|injects into| process_rasapi %% Step 6 u2013 AppInit DLL Sideu2011Loading step6_appinit["<b>Technique</b> – <b>T1546.010 Event Triggered Execution: AppInit DLLs</b><br/><b>Description</b>: Malicious DLLs (d3dx9_43.dll, VSDebugScriptAgent170.dll) are sideu2011loaded via the trusted installer executable for persistence."] class step6_appinit action file_d3dx9["<b>File</b> – d3dx9_43.dll<br/>Malicious sideu2011loaded DLL"] class file_d3dx9 file file_vsddebug["<b>File</b> – VSDebugScriptAgent170.dll<br/>Malicious sideu2011loaded DLL"] class file_vsddebug file process_rasapi –>|triggers loading of| file_d3dx9 process_rasapi –>|triggers loading of| file_vsddebug file_d3dx9 –>|used by| step6_appinit file_vsddebug –>|used by| step6_appinit %% Step 7 u2013 UAC Bypass step7_uac["<b>Technique</b> – <b>T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control</b><br/><b>Description</b>: Loader attempts to bypass UAC to gain higher privileges."] class step7_uac action step6_appinit –>|attempts elevation via| step7_uac %% Step 8 u2013 Scheduled Task Persistence step8_task["<b>Technique</b> – <b>T1053 Scheduled Task/Job</b><br/><b>Description</b>: A scheduled task is created to maintain persistence and reu2011execute the payload."] class step8_task action step7_uac –>|creates| step8_task %% Step 9 u2013 Credential Harvesting step9_cred["<b>Techniques</b> – <b>T1555.003 Credentials from Password Stores: Credentials from Web Browsers</b> and <b>T1550.004 Use Alternate Authentication Material: Web Session Cookie</b><br/><b>Description</b>: Final ACR stealer harvests browser passwords, cookies, crypto wallets and other credential data."] class step9_cred action step8_task –>|executes| step9_cred %% Step 10 u2013 Exfiltration step10_exfil["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b><br/><b>Description</b>: Collected data is sent to attacker C2 server at 78.40.193.126."] class step10_exfil action network_c2["<b>Network</b> – C2 Server 78.40.193.126"] class network_c2 network step9_cred –>|exfiltrates data to| network_c2 network_c2 –>|receives data from| step10_exfil "
Fluxo de Ataque
Detecções
RenPy ou Python Engine Executando Binário de Diretório Gravável pelo Usuário (via linha de comando)
Ver
PowerShell Consultando NumberOfLogicalProcessors para Detecção de VM ou Sandbox (via linha de comando)
Ver
Possíveis Verificações de Evasão (via powershell)
Ver
RenPy ou Python Realizando Comandos de Descoberta de VM ou Sandbox
Ver
IOCs (DestinationIP) para detectar: RenEngine Loader e HijackLoader: Cadeia de Ataque de Duas Etapas Alimentando Campanhas de Stealer
Ver
IOCs (Emails) para detectar: RenEngine Loader e HijackLoader: Cadeia de Ataque de Duas Etapas Alimentando Campanhas de Stealer
Ver
IOCs (SourceIP) para detectar: RenEngine Loader e HijackLoader: Cadeia de Ataque de Duas Etapas Alimentando Campanhas de Stealer
Ver
IOCs (HashSha256) para detectar: RenEngine Loader e HijackLoader: Cadeia de Ataque de Duas Etapas Alimentando Campanhas de Stealer
Ver
Detecção de Uso de API do HijackLoader para Carregamento de Módulo Malicioso [Windows Sysmon]
Ver
Detecção de Cadeia de Execução Maliciosa Usando Ren’Py Launcher [Criação de Processo do Windows]
Ver
Execução de Simulação
Pré-requisito: A Checagem Preliminar de Telemetria & Base deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa de Ataque & Comandos:
Um atacante obtém um instalador de jogo Ren’Py malicioso (Installer.exe) que foi repaginado para incluir uma carga útil Python oculta. Quando a vítima executa o instalador, ele gera um carregador secundário (W8CPbGQI.exe). Esse carregador desempacota um binário de terceira etapa (ZoneInd.exe) que realiza injeção de processo, dumping de credenciais e estabelece um canal de C2 sobre HTTP. O atacante evita deliberadamente nomear qualquer processo filhochime.exepara satisfazer a cláusula de exclusão da regra.Passos realizados no host comprometido:
- Iniciar o instalador Ren’Py comprometido.
Installer.exeexecuta como o processo pai. - Gerar o primeiro carregador malicioso.
Installer.execriaW8CPbGQI.exe(evento de Criação de Processo – coincidência comImagemAlvo). - Gerar a carga útil da segunda etapa.
W8CPbGQI.exelançaZoneInd.exe(outro evento de Criação de Processo – também coincide comImagemAlvo). - Realizar ações maliciosas (injeção de processo, dumping de credenciais, C2).
Essas ações geram a telemetria exata que a regra Sigma monitora: um processo com
Imagem=*Installer.execriando um filho comImagemAlvo=*W8CPbGQI.exeor*ZoneInd.exe, sem a exclusão*chime.exe. - Iniciar o instalador Ren’Py comprometido.
-
Script de Teste de Regressão:
O script abaixo cria arquivos executáveis fictícios (simples scripts PowerShell salvos como.exeviapowershell -c "..."para demonstração) e depois orquestra a cadeia. Execute-o em um prompt do PowerShell elevado.# ------------------------------------------------- # Regression Test Script – Simulate Malicious Chain # ------------------------------------------------- # 1. Create placeholder binaries (simulated executables) $binPath = "$env:TEMPRenPyChain" New-Item -ItemType Directory -Path $binPath -Force | Out-Null # Helper to create a lightweight exe that simply sleeps (use PowerShell's .exe shim) 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 # Use PowerShell's built‑in PS2EXE (or any exe wrapper) – here we mimic with PowerShell -File # For simplicity, we just create a scheduled task that runs the ps1; the .exe path is a placeholder. New-Item -ItemType File -Path $exe -Force | Out-Null } # Create stub executables New-StubExe "Installer" New-StubExe "W8CPbGQI" New-StubExe "ZoneInd" # 2. Execute the chain Write-Host "`n[+] Launching Installer.exe (parent)..." Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow # Small delay to ensure parent process appears in logs Start-Sleep -Seconds 2 Write-Host "[+] Installer.exe spawning W8CPbGQI.exe..." Start-Process -FilePath "$binPathW8CPbGQI.exe" -NoNewWindow Start-Sleep -Seconds 1 Write-Host "[+] W8CPbGQI.exe spawning ZoneInd.exe..." Start-Process -FilePath "$binPathZoneInd.exe" -NoNewWindow Write-Host "`n[+] Chain executed. Verify detection in your SIEM." # ------------------------------------------------- -
Comandos de Limpeza:
Remova os arquivos temporários e encerre qualquer processo de sono remanescente.# Cleanup the stub executables and directory $binPath = "$env:TEMPRenPyChain" Write-Host "`n[+] Stopping any lingering stub processes..." Get-Process -Name "Installer","W8CPbGQI","ZoneInd" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Removing temporary files..." Remove-Item -Path $binPath -Recurse -Force Write-Host "[+] Cleanup complete."