SOC Prime Bias: Médio

10 Fev 2026 17:20

RenEngine Loader e HijackLoader: Cadeia de Ataque em Dois Estágios Impulsionando Campanhas de Roubo

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
RenEngine Loader e HijackLoader: Cadeia de Ataque em Dois Estágios Impulsionando Campanhas de Roubo
shield icon

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

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 filho chime.exe para satisfazer a cláusula de exclusão da regra.

    Passos realizados no host comprometido:

    1. Iniciar o instalador Ren’Py comprometido.
      Installer.exe executa como o processo pai.
    2. Gerar o primeiro carregador malicioso.
      Installer.exe cria W8CPbGQI.exe (evento de Criação de Processo – coincidência com ImagemAlvo).
    3. Gerar a carga útil da segunda etapa.
      W8CPbGQI.exe lança ZoneInd.exe (outro evento de Criação de Processo – também coincide com ImagemAlvo).
    4. 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.exe criando um filho com ImagemAlvo=*W8CPbGQI.exe or *ZoneInd.exe, sem a exclusão *chime.exe.

  • Script de Teste de Regressão:
    O script abaixo cria arquivos executáveis fictícios (simples scripts PowerShell salvos como .exe via powershell -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."