RenEngineローダーとHijackLoader:スティーラーキャンペーンを加速する二段階攻撃チェーン
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
研究者たちは、2025年4月以降、大規模なスティーラー作戦を追跡しており、これは2段階のローダチェーンを中心に構築されています。最初の段階であるRenEngine Loaderは、一見合法的なRen’Pyゲームランチャーの中に埋め込まれており、その後続のローダであるHijackLoaderを復号化します。HijackLoaderはDLLサイドローディングとプロセスドッペルゲンガーを悪用し、最終的にACRスティーラーペイロードを提供する前に30以上のヘルパーモジュールを段階的に展開できるモジュラーフレームワークを使用します。配布は海賊版ゲームインストーラーを通じて行われており、この活動は世界中の数十万人の被害者に影響を及ぼしています。
調査
Howler Cellチームは、完全な実行チェーンを再構築し、RenEngineのPythonロジックをリバースエンジニアリングし、構成アーティファクトを抽出し、ステージングに使用されるXOR暗号化されたアーカイブを特定しました。彼らのHijackLoaderの分析では、38のモジュールがカタログ化され、アンチVMチェック、UACバイパス、スケジュールタスク永続性、リバースシェル能力を含んでいます。インフラストラクチャ分析により、このキャンペーンが単一の公開C2エンドポイント、78.40.193.126、および初期インストーラーダウンロードの種まきに使用された配信ドメインdodi-repacks.siteにリンクされました。
緩和策
特にd3dx9_43.dllといった一般的なファイル名のDLLサイドローディングと組み合わされた場合、異常なRen’Pyランチャーの実行を監視します。%ProgramData%および%AppData%の下に特にbroker_crypt_v4_i386と名付けられたディレクトリの作成を検索し、サンドボックス回避ルーチン、プロセスドッペルゲンガー、仮想マシンアーティファクトチェックに関連する異常なレジストリアクセスパターンの行動検出を追加します。ウェブゲートウェイで既知の海賊版配布ドメインをブロックし、ゲームランチャーや署名されていない「インストーラー」の実行可能ファイルの実行をユーザー書き込み可能な場所で制限するためにアプリケーション許可リストを適用します。
対応
検出時にはエンドポイントを隔離し、証拠(メモリダンプ、暗号化されたアーカイブ、ローダーアーティファクト)を保存し、特定されたモジュールとドロップファイルの環境をスキャンします。すぐに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>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 "
攻撃フロー
検出
RenPyまたはPythonエンジンがユーザー書き込み可能なディレクトリからバイナリを実行する(cmdline経由)
表示
PowerShellがNumberOfLogicalProcessorsをクエリしてVMまたはサンドボックスの検出を行う(cmdline経由)
表示
エバージョンチェックの可能性(powershell経由)
表示
RenPyまたはPythonがVMまたはサンドボックス探索コマンドを実行する
表示
検出するためのIOC(DestinationIP):RenEngine LoaderとHijackLoader:スティーラーキャンペーンを動かす二段階攻撃チェーン
表示
検出するためのIOC(Emails):RenEngine LoaderとHijackLoader:スティーラーキャンペーンを動かす二段階攻撃チェーン
表示
検出するためのIOC(SourceIP):RenEngine LoaderとHijackLoader:スティーラーキャンペーンを動かす二段階攻撃チェーン
表示
検出するためのIOC(HashSha256):RenEngine LoaderとHijackLoader:スティーラーキャンペーンを動かす二段階攻撃チェーン
表示
悪意のあるモジュール読み込み用HijackLoader API使用の検出[Windows Sysmon]
表示
Ren’Pyランチャーを使用した悪意のある実行チェーンの検出[Windowsプロセス作成]
表示
シミュレーション実行
前提条件:テレメトリー&ベースラインプリフライトチェックが合格していること。
合理性:このセクションでは、検出ルールを引き起こすために設計された敵の技術の正確な実行を詳述します。コマンドおよびナラティブは、識別されたTTPを直接反映し、検出ロジックによる正確なテレメトリーを生成することを目的としています。
-
攻撃のナラティブとコマンド:
攻撃者は、隠れたPythonペイロードを含むように再パッケージされた悪意のあるRen’Pyゲームインストーラー(Installer.exe)を取得します。被害者がインストーラーを実行すると、二次ローダー(W8CPbGQI.exe)が生成されます。そのローダーは三次段階のバイナリ(ZoneInd.exe)を展開し、プロセスインジェクション、資格情報のダンプ、およびHTTP経由でC2チャネルを確立します。攻撃者は意図的に任意の子プロセスをchime.exeという名前にすることを避けて、ルールの除外条項を満たします。侵害されたホストで実行される手順:
- 侵害されたRen’Pyインストーラーを起動します。
Installer.exe親プロセスとして実行されます。 - 最初の悪意のあるローダーを生成します。
Installer.exeを作成しますW8CPbGQI.exe(プロセス作成イベント – に一致)TargetImage). - 二次段階のペイロードを生成します。
W8CPbGQI.exeを起動しZoneInd.exe(もう一つのプロセス作成イベント – に一致)TargetImage). - 悪意のある操作を実行します (プロセスインジェクション、資格情報ダンプ、C2)。
これらの操作は、Sigmaルールによって監視される正確なテレメトリーを生成します:
イメージ=*Installer.exe画像=*W8CPbGQI.exeTargetImage=*ZoneInd.exeortargetImage=*ZoneInd.exe, 除外ではなく例外=*chime.exe. - 侵害されたRen’Pyインストーラーを起動します。
-
リグレッションテストスクリプト:
以下のスクリプトはダミー実行ファイル(デモ用に保存された簡単なPowerShellスクリプト.exeviapowershell -c "...")を作成し、チェーンを編成します。昇格したPowerShellプロンプトで実行してください。# ------------------------------------------------- # リグレッションテストスクリプト – 悪意のあるチェーンをシミュレート # ------------------------------------------------- # 1. プレースホルダーバイナリを作成(シミュレートされた実行ファイル) $binPath = "$env:TEMPRenPyChain" New-Item -ItemType Directory -Path $binPath -Force | Out-Null # 補助として、単にスリープする軽量exeを作成(PowerShellの.exeシムを使用) 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 # PowerShellの組込み機能PS2EXE(または任意の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[+] インストーラー.exe(親)を起動中..." Start-Process -FilePath "$binPathInstaller.exe" -NoNewWindow # ログに親プロセスを表示させるために少し遅延 Start-Sleep -Seconds 2 Write-Host "[+] インストーラー.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 "[+] クリーンアップ完了。"