SOC Prime Bias: Moyen

10 Fév 2026 17:20

RenEngine Loader et HijackLoader : Chaîne d’Attaque à Deux Étapes Alimentant les Campagnes de Voleurs

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
RenEngine Loader et HijackLoader : Chaîne d’Attaque à Deux Étapes Alimentant les Campagnes de Voleurs
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Depuis avril 2025, les chercheurs ont suivi une opération de vol à grande échelle construite autour d’une chaîne de chargeur à deux étapes. La première étape, RenEngine Loader, est intégrée dans un lanceur de jeu Ren’Py légitime et décrypte un chargeur de suivi appelé HijackLoader. HijackLoader abuse ensuite du chargement latéral de DLL et du doppelgänging de processus, en utilisant un cadre modulaire qui peut mettre en scène plus de 30 modules d’assistance avant de finalement livrer une charge utile de voleur ACR. La distribution est liée à des installateurs de jeux piratés promus à travers les écosystèmes de piratage, avec une activité touchant des centaines de milliers de victimes dans le monde entier.

Enquête

L’équipe de Howler Cell a reconstruit la chaîne d’exécution complète, ingénierie inverse de la logique Python de RenEngine, extraction des artefacts de configuration, et identification d’une archive chiffrée par XOR utilisée pour la mise en scène. Leur analyse de HijackLoader a catalogué 38 modules, y compris les vérifications anti-machine virtuelle, le contournement UAC, la persistance de tâches planifiées, et les capacités de shell inversé. L’analyse de l’infrastructure a lié la campagne à un seul point de terminaison C2 public, 78.40.193.126, et au domaine de livraison dodi-repacks.site, qui a été utilisé pour semer les téléchargements d’installateurs initiaux.

Atténuation

Surveiller les exécutions anormales de lanceurs Ren’Py, surtout lorsqu’elles sont associées au chargement latéral de DLL de noms de fichiers communs tels que d3dx9_43.dll. Chassez la création de répertoires suspects sous %ProgramData% et %AppData%, en particulier les chemins nommés broker_crypt_v4_i386. Ajoutez des détections comportementales pour les routines d’évasion de sandbox, le doppelgänging de processus et les schémas d’accès au registre inhabituels associés aux vérifications d’artefacts de machine virtuelle. Bloquez les domaines de distribution de piraterie connus à la passerelle Web, et appliquez une liste d’autorisation d’applications pour restreindre les lanceurs de jeux et les exécutables “installateurs” non signés de s’exécuter dans des emplacements modifiables par l’utilisateur.

Réponse

Lors de la détection, isolez le point de terminaison, préservez les preuves (dumps mémoire, archives chiffrées et artefacts de chargeur), et balayez l’environnement pour les modules identifiés et les fichiers abandonnés. Bloquez immédiatement 78.40.193.126 et dodi-repacks.site aux contrôles de périmètre. Effectuez une évaluation de l’exposition des identifiants axée sur les mots de passe des navigateurs, les cookies de session et les portefeuilles de cryptomonnaie, puis changez les comptes et les jetons affectés. Supprimez la persistance de l’attaquant (notamment les tâches planifiées) et purgez les fichiers malveillants, puis continuez à surveiller pour les chemins de réinfection liés aux installations de logiciels piratés.

"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 Exécution par l’utilisateur : Fichier malveillant</b><br/><b>Description</b> : L’utilisateur est trompé pour exécuter un fichier malveillant tel qu’un installateur de jeu piraté.<br/><b>Artefact</b> : Installer.exe"] class step1_user_exec action file_installer["<b>Fichier</b> – Installer.exe<br/>Semble légitime mais contient une charge utile malveillante"] class file_installer file step1_user_exec –>|exécute| file_installer %% Step 2 u2013 Python Interpreter step2_python["<b>Technique</b> – <b>T1059.006 Interpréteur de commandes et de scripts : Python</b><br/><b>Description</b> : Exécute du code Python malveillant intégré depuis archive.rpa via le lanceur Ren'Py."] class step2_python action file_archive["<b>Fichier</b> – archive.rpa<br/>Contient un script Python malveillant"] class file_archive file file_installer –>|lance| step2_python step2_python –>|charge| file_archive %% Step 3 u2013 Obfuscated Payload step3_obfusc["<b>Technique</b> – <b>T1027 Fichiers ou informations obfusquées</b><br/><b>Description</b> : La charge utile est cachée en utilisant un encodage Base64, un chiffrement XOR et compressée dans une archive."] class step3_obfusc action file_obf_payload["<b>Fichier</b> – obfuscated_payload.bin<br/>Charge utile compressée et chiffrée"] class file_obf_payload file file_archive –>|contient| file_obf_payload file_obf_payload –>|décodée et déchiffrée par| step3_obfusc %% Step 4 u2013 Sandbox Evasion step4_sandbox["<b>Technique</b> – <b>T1497 Évasion de virtualisation/sandbox</b><br/><b>Sous-technique</b> – <b>T1497.002 Vérifications basées sur l’activité utilisateur</b><br/><b>Description</b> : Le chargeur effectue des vérifications VM et sandbox étendues (RAM, CPU, registre) et abandonne si un environnement d’analyse est détecté."] class step4_sandbox action step3_obfusc –>|fournit du code à| step4_sandbox %% Step 5 u2013 Process Injection step5_injection["<b>Technique</b> – <b>T1055 Injection de processus</b><br/><b>Sous-technique</b> – <b>T1055.002 Injection de fichier exécutable portable</b><br/><b>Description</b> : HijackLoader injecte du code malveillant dans la DLL système légitime rasapi32.dll pour exécuter du shellcode."] class step5_injection action process_rasapi["<b>Processus</b> – rasapi32.dll<br/>Cible pour injection PE"] class process_rasapi process step4_sandbox –>|charge| step5_injection step5_injection –>|injecte dans| process_rasapi %% Step 6 u2013 AppInit DLL Side-Loading step6_appinit["<b>Technique</b> – <b>T1546.010 Exécution déclenchée par événement : AppInit DLLs</b><br/><b>Description</b> : Des DLL malveillantes (d3dx9_43.dll, VSDebugScriptAgent170.dll) sont chargées en contournement via l’exécutable d’installation de confiance pour la persistance."] class step6_appinit action file_d3dx9["<b>Fichier</b> – d3dx9_43.dll<br/>DLL malveillante chargée en contournement"] class file_d3dx9 file file_vsddebug["<b>Fichier</b> – VSDebugScriptAgent170.dll<br/>DLL malveillante chargée en contournement"] class file_vsddebug file process_rasapi –>|déclenche le chargement de| file_d3dx9 process_rasapi –>|déclenche le chargement de| file_vsddebug file_d3dx9 –>|utilisé par| step6_appinit file_vsddebug –>|utilisé par| step6_appinit %% Step 7 u2013 UAC Bypass step7_uac["<b>Technique</b> – <b>T1548.002 Abuser du mécanisme de contrôle d’élévation : Contourner le contrôle de compte d’utilisateur</b><br/><b>Description</b> : Le chargeur tente de contourner l’UAC pour obtenir des privilèges plus élevés."] class step7_uac action step6_appinit –>|tente l’élévation via| step7_uac %% Step 8 u2013 Scheduled Task Persistence step8_task["<b>Technique</b> – <b>T1053 Tâche planifiée/Emploi</b><br/><b>Description</b> : Une tâche planifiée est créée pour maintenir la persistance et réexécuter la charge utile."] class step8_task action step7_uac –>|crée| step8_task %% Step 9 u2013 Credential Harvesting step9_cred["<b>Techniques</b> – <b>T1555.003 Informations d’identification des magasins de mots de passe : Informations d’identification des navigateurs Web</b> et <b>T1550.004 Utiliser du matériel d’authentification alternatif : Cookie de session Web</b><br/><b>Description</b> : Le voleur ACR final collecte les mots de passe des navigateurs, les cookies, les portefeuilles crypto et d’autres données d’identification."] class step9_cred action step8_task –>|exécute| step9_cred %% Step 10 u2013 Exfiltration step10_exfil["<b>Technique</b> – <b>T1041 Exfiltration sur le canal C2</b><br/><b>Description</b> : Les données collectées sont envoyées au serveur C2 de l’attaquant à 78.40.193.126."] class step10_exfil action network_c2["<b>Réseau</b> – Serveur C2 78.40.193.126"] class network_c2 network step9_cred –>|exfiltre les données vers| network_c2 network_c2 –>|reçoit des données de| step10_exfil "

Flux d’attaque

Détections

RenPy ou Python Engine exécutant un binaire depuis un répertoire modifiable par l’utilisateur (via cmdline)

Équipe SOC Prime
10 févr. 2026

Query PowerShelling NumberOfLogicalProcessors pour la détection de VM ou de sandbox (via cmdline)

Équipe SOC Prime
10 févr. 2026

Possibles vérifications d’évasion (via powershell)

Équipe SOC Prime
10 févr. 2026

RenPy ou Python effectuant des commandes de découverte de VM ou de sandbox

Équipe SOC Prime
10 févr. 2026

IOCs (DestinationIP) pour détecter : RenEngine Loader et HijackLoader : Chaîne d’attaque à double étape alimentant des campagnes de voleurs

Règles AI SOC Prime
10 févr. 2026

IOCs (Emails) pour détecter : RenEngine Loader et HijackLoader : Chaîne d’attaque à double étape alimentant des campagnes de voleurs

Règles AI SOC Prime
10 févr. 2026

IOCs (SourceIP) pour détecter : RenEngine Loader et HijackLoader : Chaîne d’attaque à double étape alimentant des campagnes de voleurs

Règles AI SOC Prime
10 févr. 2026

IOCs (HashSha256) pour détecter : RenEngine Loader et HijackLoader : Chaîne d’attaque à double étape alimentant des campagnes de voleurs

Règles AI SOC Prime
10 févr. 2026

Détection de l’utilisation des API de HijackLoader pour le chargement de modules malveillants [Windows Sysmon]

Règles AI SOC Prime
10 févr. 2026

Détection de la chaîne d’exécution malveillante utilisant le lanceur Ren’Py [Création de processus Windows]

Règles AI SOC Prime
10 févr. 2026

Exécution de la simulation

Prérequis : Vérification préliminaire de la télémétrie et de la base de référence doit avoir réussi.

Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et visent à générer la télémétrie exacte attendue par la logique de détection.

  • Narratif de l’attaque & Commandes :
    Un attaquant obtient un installateur de jeu Ren’Py malveillant (Installer.exe) qui a été remballé pour inclure une charge utile Python cachée. Lorsque la victime exécute l’installateur, il engendre un chargeur secondaire (W8CPbGQI.exe). Ce chargeur décompresse un binaire de troisième étape (ZoneInd.exe) qui effectue une injection de processus, une vidange d’identifiants, et établit un canal C2 via HTTP. L’attaquant évite délibérément de nommer tout processus enfant chime.exe pour satisfaire la clause d’exclusion de la règle.

    Étapes exécutées sur l’hôte compromis :

    1. Lancer l’installateur Ren’Py compromis.
      Installer.exe s’exécute en tant que processus parent.
    2. Engendrer le premier chargeur malveillant.
      Installer.exe crée W8CPbGQI.exe (Événement de création de processus – correspond à TargetImage).
    3. Engendrer la charge utile de seconde étape.
      W8CPbGQI.exe lance ZoneInd.exe (un autre événement de création de processus – correspond également à TargetImage).
    4. Effectuer des actions malveillantes (injection de processus, vidange d’identifiants, C2).

    Ces actions génèrent la télémétrie exacte que la règle Sigma surveille : un processus avec Image=*Installer.exe créant un enfant avec TargetImage=*W8CPbGQI.exe or *ZoneInd.exe, sans l’exclusion *chime.exe.

  • Script de test de régression :
    Le script ci-dessous crée des fichiers exécutables factices (scripts PowerShell simples enregistrés sous forme de .exe via powershell -c "..." pour la démonstration) et orchestre ensuite la chaîne. Exécutez-le dans une invite PowerShell élevée.

    # -------------------------------------------------
    # Script de test de régression – Simuler une chaîne malveillante
    # -------------------------------------------------
    
    # 1. Créer des binaires de remplacement (exécutables simulés)
    $binPath = "$env:TEMPRenPyChain"
    New-Item -ItemType Directory -Path $binPath -Force | Out-Null
    
    # Assistant pour créer un exe léger qui dort simplement (utiliser l'exe-shim de 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
        # Utiliser le PS2EXE intégré de PowerShell (ou tout autre wrapper exe) – ici on mime avec PowerShell -File
        # Pour simplifier, nous créons juste une tâche planifiée qui exécute le ps1 ; le chemin de l'exe est une substitution.
        New-Item -ItemType File -Path $exe -Force | Out-Null
    }
    
    # Créer des exécutables de remplacement
    New-StubExe "Installer"
    New-StubExe "W8CPbGQI"
    New-StubExe "ZoneInd"
    
    # 2. Exécuter la chaîne
    Write-Host "`n[+] Lancement de Installer.exe (parent)..."
    Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow
    
    # Petit délai pour s'assurer que le processus parent apparaisse dans les journaux
    Start-Sleep -Seconds 2
    
    Write-Host "[+] Installer.exe générant W8CPbGQI.exe..."
    Start-Process -FilePath "$binPathW8CPbGQI.exe" -NoNewWindow
    
    Start-Sleep -Seconds 1
    
    Write-Host "[+] W8CPbGQI.exe générant ZoneInd.exe..."
    Start-Process -FilePath "$binPathZoneInd.exe" -NoNewWindow
    
    Write-Host "`n[+] Chaîne exécutée. Vérifiez la détection dans votre SIEM."
    # -------------------------------------------------
  • Commandes de nettoyage :
    Supprimer les fichiers temporaires et terminer tous les processus de sommeil persistants.

    # Nettoyer les exécutables factices et le répertoire
    $binPath = "$env:TEMPRenPyChain"
    Write-Host "`n[+] Arrêt de tous les processus factices persistants..."
    Get-Process -Name "Installer","W8CPbGQI","ZoneInd" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    Write-Host "[+] Suppression des fichiers temporaires..."
    Remove-Item -Path $binPath -Recurse -Force
    
    Write-Host "[+] Nettoyage terminé."