SOC Prime Bias: Medio

10 Feb 2026 17:20

RenEngine Loader e HijackLoader: Catena di attacco a due fasi alimenta campagne di stealer

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
RenEngine Loader e HijackLoader: Catena di attacco a due fasi alimenta campagne di stealer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

Dall’aprile 2025, i ricercatori hanno monitorato un’operazione di furto su larga scala costruita attorno a una catena di caricamento a due stadi. Il primo stadio, RenEngine Loader, è incorporato all’interno di un launcher di giochi Ren’Py legittimo e decripta un loader successivo chiamato HijackLoader. HijackLoader quindi sfrutta il side-loading di DLL e il doppelgänging di processo, utilizzando un framework modulare che può allestire oltre 30 moduli helper prima di consegnare infine un payload di furto ACR. La distribuzione è legata a installatori di giochi crackati promossi attraverso ecosistemi di pirateria, con l’attività che impatta centinaia di migliaia di vittime a livello globale.

Indagine

Il team Howler Cell ha ricostruito l’intera catena di esecuzione, analizzando al contrario la logica Python di RenEngine, estraendo artefatti di configurazione e identificando un archivio crittografato con XOR utilizzato per l’allestimento. La loro analisi di HijackLoader ha catalogato 38 moduli, inclusi controlli anti-VM, bypass di UAC, persistenza di task schedulati e capacità di reverse-shell. L’analisi dell’infrastruttura ha collegato la campagna a un unico endpoint C2 pubblico, 78.40.193.126, e al dominio di consegna dodi-repacks.site, che è stato utilizzato per seminare i download iniziali degli installatori.

Mitigazione

Monitora esecuzioni anomale del launcher Ren’Py, specialmente quando abbinate a side-loading di DLL di nomi di file comuni come d3dx9_43.dll. Caccia per la creazione sospetta di directory sotto %ProgramData% e %AppData%, in particolare percorsi denominati broker_crypt_v4_i386. Aggiungi rilevamenti comportamentali per routine di evasione sandbox, doppelgänging di processi e modelli di accesso al registro insoliti associati a controlli di artefatti di macchina virtuale. Blocca i noti domini di distribuzione pirata presso il gateway web e applica una lista di permessi delle applicazioni per limitare i launcher di giochi e gli eseguibili “installatore” non firmati dall’esecuzione in posizioni scrivibili dagli utenti.

Risposta

Al rilevamento, isola l’endpoint, conserva le evidenze (dump della memoria, gli archivi crittografati e gli artefatti del loader), e scandaglia l’ambiente alla ricerca dei moduli identificati e dei file scaricati. Blocca immediatamente 78.40.193.126 e dodi-repacks.site ai controlli di perimetro. Esegui una valutazione dell’esposizione delle credenziali focalizzata su password dei browser, cookie di sessione e portafogli di criptovalute, quindi ruota gli account e i token impattati. Rimuovi la persistenza degli attaccanti (in particolare i task schedulati) e purga i file dannosi, quindi continua a monitorare i percorsi di reinfezione legati alle installazioni di software pirata.

"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 "

Flusso di Attacco

Esecuzione della Simulazione

Prerequisito: Il Telemetry & Baseline Pre-flight Check deve essere superato.

Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente i TTP identificati e mirare a generare esattamente la telemetria attesa dalla logica di rilevamento.

  • Narrativa & Comandi dell’Attacco:
    Un attaccante ottiene un installatore di giochi Ren’Py maligno (Installer.exe) che è stato ripacchettato per includere un payload Python nascosto. Quando la vittima esegue l’installatore, esso genera un loader secondario (W8CPbGQI.exe). Quel loader disimballa un binario di terzo stadio (ZoneInd.exe) che esegue iniezioni di processo, dump delle credenziali e stabilisce un C2 channel via HTTP. L’attaccante evita deliberatamente di nominare qualsiasi processo figlio chime.exe per soddisfare la clausola di esclusione della regola.

    Passi eseguiti sull’host compromesso:

    1. Avvia l’installatore Ren’Py compromesso.
      Installer.exe eseguito come processo padre.
    2. Genera il primo loader maligno.
      Installer.exe crea W8CPbGQI.exe (Evento di Creazione del Processo – corrisponde a TargetImage).
    3. Genera il payload di secondo stadio.
      W8CPbGQI.exe lancia ZoneInd.exe (un altro Evento di Creazione del Processo – corrisponde anche a TargetImage).
    4. Esegui azioni maligne (iniezioni di processo, dump delle credenziali, C2).

    Queste azioni generano la esatta telemetria che la regola Sigma monitora: un processo con Image=*Installer.exe creando un figlio con TargetImage=*W8CPbGQI.exe or *ZoneInd.exe, senza l’esclusione *chime.exe.

  • Script di Test di Regressione:
    Lo script qui sotto crea file eseguibili fittizi (semplici script PowerShell salvati come .exe via powershell -c "..." per dimostrazione) e quindi orchestra la catena. Eseguilo in un prompt PowerShell elevato.

    # -------------------------------------------------
    # Regression Test Script – Simula Catena Maligna
    # -------------------------------------------------
    
    # 1. Crea binari fittizi (eseguibili simulati)
    $binPath = "$env:TEMPRenPyChain"
    New-Item -ItemType Directory -Path $binPath -Force | Out-Null
    
    # Helper per creare un exe leggero che semplicemente dorme (usando lo shim .exe di 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
        # Usa il PS2EXE integrato di PowerShell (o qualsiasi wrapper exe) – qui simuliamo con PowerShell -File
        # Per semplicità, creiamo solo un task pianificato che esegue il ps1; il percorso .exe è un segnaposto.
        New-Item -ItemType File -Path $exe -Force | Out-Null
    }
    
    # Crea eseguibili fittizi
    New-StubExe "Installer"
    New-StubExe "W8CPbGQI"
    New-StubExe "ZoneInd"
    
    # 2. Esegui la catena
    Write-Host "`n[+] Lancio di Installer.exe (padre)..."
    Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow
    
    # Piccolo ritardo per garantire che il processo padre appaia nei log
    Start-Sleep -Seconds 2
    
    Write-Host "[+] Installer.exe genera W8CPbGQI.exe..."
    Start-Process -FilePath "$binPathW8CPbGQI.exe" -NoNewWindow
    
    Start-Sleep -Seconds 1
    
    Write-Host "[+] W8CPbGQI.exe genera ZoneInd.exe..."
    Start-Process -FilePath "$binPathZoneInd.exe" -NoNewWindow
    
    Write-Host "`n[+] Catena eseguita. Verifica il rilevamento nel tuo SIEM."
    # -------------------------------------------------
  • Comandi di Pulizia:
    Rimuovi i file temporanei e termina eventuali processi in sospeso.

    # Pulisci gli eseguibili fittizi e la directory
    $binPath = "$env:TEMPRenPyChain"
    Write-Host "`n[+] Arresto di eventuali processi fittizi in sospeso..."
    Get-Process -Name "Installer","W8CPbGQI","ZoneInd" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    Write-Host "[+] Rimozione dei file temporanei..."
    Remove-Item -Path $binPath -Recurse -Force
    
    Write-Host "[+] Pulizia completata."