はじめに
Elastic Security Labs は、Google Chrome や Microsoft Teams などの正規のソフトウェアを装ったトロイの木馬化された NSIS インストーラーを通じて、Dragon Breath APT (APT-Q-27) に起因する gh0st RAT の改変版を配布する最近のキャンペーンを特定しました。感染チェーンは、さまざまな回避技術を活用した多段階の配信メカニズムを採用しており、中国市場で普及しているエンドポイント セキュリティ製品を無力化することを目的とした多くの冗長性を備えています。これには、正当に署名されたドライバーの導入、カスタムWDACポリシーの展開、PPL の悪用による Microsoft Defender バイナリの改ざんなどが含まれます。
このキャンペーンは主に中国語圏のユーザーをターゲットにしており、2022年から2023年に記録された以前のDragonBreath関連のキャンペーンと比較して、適応性が明らかに進化していることを示しています。このレポートを通じて、このマルウェアが実装し始めている新しい手法についての認識を高め、RoningLoader と名付けた独自のローダーに光を当てたいと考えています。
重要なポイント
- このマルウェアは、Protected Process Light(PPL)を悪用してWindows Defenderを無効化します。
- 脅威アクターは有効な署名付きカーネルドライバを利用してプロセスを強制終了する
- カスタムの署名されていない WDAC ポリシーを適用して、 360 Total Security および Huorong 実行ファイルをブロックしました
- ウイルス対策プロセスのさらなる終了のためのスレッドプール経由のファントムDLLとペイロードインジェクション
- 最終ペイロードにはマイナーアップデートがあり、DragonBreathに関連付けられています。
ディスカバリ
2025 年 8 月、Protected Process Light (PPL) を悪用してエンドポイント セキュリティ ツールを無効にする方法を詳述した調査が公開されました。この情報開示を受けて、私たちは「ClipUp 実行による潜在的な回避」という動作ルールを作成し、テレメトリ データの脅威ハンティングを行った後、この手法を採用している実際のキャンペーンを特定しました。
RONINGLOADERコード分析
最初の感染ベクトルは、 Nullsoft Scriptable Install System (NSIS)を使用して作成されたトロイの木馬化されたインストーラーです。NSIS は Windows インストーラーを作成するための合法的なオープンソース ツールですが、 GULOADERに見られるように、脅威アクターによってマルウェアをパッケージ化して配信するために悪用されることがよくあります。このキャンペーンでは、Google Chrome、Microsoft Teams、その他の信頼できるアプリケーションなどの正規のソフトウェアを装い、ユーザーに実行させる悪意のあるインストーラーがさまざまなテーマで配布されていることを確認しました。
実行されると、プライマリ NSIS インストーラーはドロッパーとして機能し、2 つの追加の埋め込み NSIS インストーラーが含まれます。ネストされたインストーラーの 1 つは無害であり、正当なソフトウェアをインストールしますが、もう 1 つは悪意があり、攻撃チェーンを展開する役割を果たします。
攻撃チェーンは、ウイルス対策プロセスの終了にollama.sysという名前の署名されたドライバーを利用します。ドライバーの署名者名はKunming Wuqi E-commerce Co., Ltd.で、証明書の有効期間は 2 月3 、 2025から 2 月3 、 2026までです。VirusTotal でピボットすると、追加の署名済みバイナリが 71 見つかりました。これらの中には、中国のユーザーの間で人気のあるゲームに特化した VPN ソフトウェアである慕讯公益加速器 (MuXunAccelerator)を装った AgentTesla ドロッパーが含まれていました。サンプルの日付は 2025 年 4 月まで遡ります。特に、署名手法はサンプルごとに異なります。以前のサンプル( inject.sysなど)には、文字列JemmyLoveJennyを含むHookSignToolアーティファクトが含まれていますが、10 月の 2025 ollama.sysサンプルにはそのようなアーティファクトは表示されず、標準の署名手順が使用されていますが、両方とも同じ証明書の有効期間を共有しています。
ollama.sysの PDB 文字列アーティファクトD:\VS_Project\加解密\MyDriver1\x64\Release\MyDriver1.pdbを他のサンプルと比較すると、提出された他のサンプルとは異なるアーティファクトが見つかりました -
D:\cpp\origin\ConsoleApplication2\x64\Release\ConsoleApplication2.pdbD:\a_work\1\s\artifacts\obj\coreclr\windows.x86.Release\Corehost.Static\singlefilehost.pdbC:\Users\0\Desktop\EAMap\x64\Release\ttt.pdbh:\projects\netfilter3\bin\Release\Win32\nfregdrv.pdb
バイナリの多様性と提出量の多さから、証明書が漏洩した可能性があると思われますが、これは現時点では推測の域を出ません。
ステージ1
分析は、SHA256 ハッシュda2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50bで識別される最初のバイナリから始まりました。これを抽出すると、無害なインストーラーletsvpnlatest.exeと悪意のあるインストーラーSnieoatwtregoable.exeの 2 つの埋め込まれた実行可能ファイルが明らかになります。
悪意のあるインストーラーSnieoatwtregoable.exeは、 C:\Program Files\Snieoatwtregoable\に新しいディレクトリを作成します。このフォルダー内に、 Snieoatwtregoable.dllという名前の DLL と、暗号化されたファイルtp.pngの 2 つのファイルがドロップされます。
悪意のあるアクティビティの中核は、単一の関数DllRegisterServerをエクスポートするSnieoatwtregoable.dllにあります。この関数は呼び出されると、ディスクからtp.pngファイルの内容を読み取り、右回転 (ROR) と XOR 演算の両方を含む単純なアルゴリズムを使用してこのデータを復号化します。
復号化されたコンテンツは、PE ファイルをメモリに反射的にロードして実行するシェルコードです。マルウェアはまず、 NtAllocateVirtualMemory API を使用して自身のプロセス内に新しいメモリ領域を割り当て、次にNtCreateThreadExを呼び出してシェルコードを実行する新しいスレッドを作成します。
マルウェアは、新しいntdll.dllをロードし、API 名とGetProcAddressを使用してアドレスを解決することで、ユーザーランドフックを削除しようとします。
マルウェアは、ポート5555でローカルホストに接続しようとしますが、実際の目的は達成されません。結果は重要ではありません。推測すると、これはデッドコードまたは試作段階の残りのコードである可能性があります。
ステージ 2 - tp.png
RONINGLOADER はまず、 GetTokenInformation API を使用して管理者権限があるかどうかを確認します。そうでない場合は、元のプロセスを終了する前に、 runasコマンドを使用して新しい昇格されたインスタンスを起動し、権限の昇格を試みます。
興味深いことに、マルウェアはユーザーエージェント“Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko”を使用してハードコードされた URL http://www.baidu.com/と通信しようとしますが、これはデッドコードのように見えます。これは、削除された機能または将来のバージョン用のプレースホルダーコードによるものと考えられます。URL から HTTP 応答ヘッダーの日付を抽出して記録するように設計されています。
次に、マルウェアは実行中のプロセスのリストをスキャンして、特定のウイルス対策ソリューションを探します。ハードコードされたプロセス名のリストと照合し、見つかった場合は対応するブールフラグを「True」に設定します。
以下は、バイナリにハードコードされているプロセスと関連するセキュリティ製品の表です。
| プロセス名 | セキュリティ製品 |
|---|---|
MsMpEng.exe | Microsoft Defender ウイルス対策 |
kxemain.exe | キングソフトインターネットセキュリティ |
kxetray.exe | キングソフトインターネットセキュリティ |
kxecenter.exe | キングソフトインターネットセキュリティ |
QQPCTray.exe | テンセントPCマネージャー |
QQPCRTP.exe | テンセントPCマネージャー |
QMToolWidget.exe | テンセントPCマネージャー |
HipsTray.exe | Qihoo 360 トータルセキュリティ |
HipsDaemon.exe | Qihoo 360 トータルセキュリティ |
HipsMain.exe | Qihoo 360 トータルセキュリティ |
360tray.exe | Qihoo 360 トータルセキュリティ |
挿入されたリモートプロセスによる AV プロセスの終了
次に、マルウェアはそれらのプロセスを強制終了します。興味深いことに、Qihoo 360 Total Security 製品は他の製品とは異なるアプローチを採用しています。
まず、ファイアウォールを変更してすべてのネットワーク通信をブロックします。次に、ボリューム シャドウ コピー (VSS) サービスに関連付けられたプロセス ( vssvc.exe ) にシェルコードを挿入する関数を呼び出します。
まず、高い整合性のSeDebugPrivilegeトークンを自身に付与します。
次に、 VSS (ボリューム シャドウ コピー サービス) がまだ実行されていない場合はそれを開始し、関連付けられているプロセス (vssvc.exe) の PID を取得します。
次に、マルウェアはNtCreateSectionを使用して 2 つの個別のメモリ セクションを作成します。次に、これらのセクションのビューを vssvc.exe プロセスのメモリ スペースにマップします。最初のセクションには、デバイス名が\\.\Ollamaのドライバーである完全なポータブル実行可能 (PE) ファイルが含まれています。2 番目のセクションには実行を目的としたシェルコードが含まれています。
RONINGLOADER は、マルウェアの他の部分で使用される他のインジェクション方法と比較して、このプロセス インジェクションに対して異なるアプローチを採用しています。この手法では、スレッド プールを活用して、リモート プロセスのファイル書き込みトリガーを介してコードをリモートで実行します。この手法は、さまざまなバリエーションとともにSafeBreach によって 2023 に文書化されました。
シェルコードが実行されると、まず機能するために必要な Windows API のアドレスを動的に解決します。これは、RONINGLOADER の中で難読化を採用している唯一の部分であり、 Fowler–Noll–Vo ハッシュ(FNV) アルゴリズムを使用して、名前ではなくハッシュで関数を検索します。
まず、 CreateFileW 、 WriteFile 、 CloseHandleのアドレスを取得して、ドライバーをハードコードされたパスC:\windows\system32\drivers\1912763.tempにディスクに書き込みます。
次に、次の操作を実行します。
- ディスクにドロップされたドライバーをロードするための
xererre1という名前のサービスを作成します - Qihoo 360 ソフトウェアに関連付けられている次の各プロセス (
360Safe.exe、360Tray.exe、ZhuDongFangYu.exe) に対して、 2 個の関数を呼び出します。1 つは名前でプロセスの PID を検索する関数、もう 1 つは PID でプロセスを強制終了する関数です。 - その後、サービスを停止して削除します
xererre1
プロセスを強制終了するために、マルウェアはドライバーを使用します。ドライバーを分析すると、 1 機能のみが登録されていることがわかります。つまり、PID をパラメーターとして受け取り、最初にZwOpenProcessでプロセスを開いてからZwTerminateProcessカーネル API で終了する 1 つの IOCTL ID ( 0x222000 ) を処理します。
AVプロセスの終了
メイン実行フローに戻ると、マルウェアはループに入り、VSS サービスに挿入されたシェルコードによって処理される360tray.exeの終了を確認します。プロセスが実行されていないことを確認した後にのみ続行されます。この確認後すぐに、システムはファイアウォールの設定を復元します。このアクションは、ソフトウェアの通信チャネルを切断し、最終的なアクティビティ ログやセキュリティ警告がバックエンド サービスにアップロードされるのを防ぐことを目的とした防御策であると考えられます。
次に、メイン プロセスから他のセキュリティ プロセスを直接終了します。特に注目すべきは、これらのアクションを隠そうとせず、以前の API ハッシュ手法を放棄して、必要な関数を直接呼び出すことです。
RONINGLOADER は、一貫した繰り返し可能な手順に従って対象のプロセスを終了します。
- まず、悪意のあるドライバをディスクに書き込みます。今回は一時パスに書き込みます。
C:\Users\analysis\AppData\Local\Temp\ollama.sys. - 一時サービス (
ollama) が作成され、ollama.sysカーネルにロードされます - 次に、マルウェアはターゲット プロセスの PID を名前で取得し、PID を含む要求をドライバーに送信して終了を実行します。
- kill コマンドが送信されるとすぐに、サービスは削除されます。
Microsoft Defender に関しては、マルウェアは上記と同じ方法を使用してMsMpEng.exeプロセスを強制終了しようとします。作成者からのコード バグに気付きました: Microsoft Defender の場合、コードは Defender がすでに実行されているかどうかを確認せず、直接MsMpEng.exeプロセスの検索に進みます。つまり、プロセスが実行されていない場合、マルウェアは PID として 0 ドライバーに送信します。
マルウェアには、セキュリティ ソリューションのプロセスを停止するための冗長コードがさらに含まれています。また、svchost.exeに別のシェルコードを挿入し、vssvc.exeに挿入されたものと似ていますが、以下のスクリーンショットに示すように、プロセスのリストが異なります。
インジェクション手法でもスレッドプールが使用されますが、挿入されたコードはイベントによってトリガーされます。
プロセス終了後、マルウェアは 4 フォルダを作成します
C:\ProgramData\lnkC:\ProgramData\<current_date>C:\Users\Public\Downloads\<current_date>C:\ProgramData\Roning
埋め込みアーカイブ
次に、マルウェアは 3 つの.txtファイルをC:\Users\Public\Downloads\<current_date>に書き込みます。拡張子にもかかわらず、これらはテキスト ファイルではなく、別のコード ベースから適応された特定の形式で構築されたコンテナーです。
このカスタム ファイル構造は次のように構成されます。
- マジック バイト:ファイルは識別用の署名
4B 44 01 00で始まります。 - ファイル数:この直後に、コンテナー内にカプセル化されたファイルの数を示す値が続きます。
- ファイル メタデータ:ヘッダー セクションでは、保存されている各ファイルの情報が説明されます。
- 圧縮データ:最後に、埋め込まれた各ファイルは ZLIB 圧縮データ ブロックに保存されます。
以下は、 2 ファイル( 1.batとfhq.batを含むhjk.txt archiveのファイル形式の例です。
このアーカイブ形式は、現在のステージにある他の 2 の埋め込みファイルに適用されます:
agg.txt、これには 3 ファイル(Enpug.bin、goldendays.dll、trustinstaller.binが含まれますkill.txt、 1 ファイルが含まれています -1.dll
UAC と AV ネットワークをバイパスするバッチ スクリプト
1.bat は、 EnableLUAレジストリ値を 0 に設定してユーザー アカウント制御 (UAC) を無効にする単純なバッチ スクリプトです。
fhq.bat これは、 C:\ProgramData\lnk\123.txtで定義されたプログラムと Qihoo 360 セキュリティ ソフトウェア (360Safe.exe) を対象とする別のバッチ スクリプトです。受信および送信接続をブロックするファイアウォール ルールを作成します。また、すべてのプロファイルにわたってファイアウォール通知を無効にします。
Phantom DLL による AV プロセスの終了
デプロイされた DLL 1.dllは、 Wow64Log.dllデフォルトでは Windows マシンに存在しないファントム DLLであるため、WOW64 プロセスによってサイドロードされるようにC:\Windows\System32\Wow64\Wow64Log.dllにコピーされます。このタスクは冗長であり、基本的には標準の Windows API ( TerminateProcess ) を使用して一連のプロセスを強制終了しようとします。
ClipUp MS Defenderキラー
その後、マルウェアは、2025 年 8 月にZero Salariumによって文書化された PPL 悪用手法を使用しようとします。この記事の PoC は Microsoft Defender のみを対象としています。実行されるすべてのシステムコマンドは、 ShellExecuteW API を使用したcmd.exeを通じて実行されることに注意してください。
C:\ProgramData\Microsoft\Windows Defender\Platform\*下の Microsoft Defender のインストール フォルダを検索し、現在使用されているバージョンを示す最新の変更日を持つディレクトリのみを対象とします。- フォルダー
C:\ProgramData\romingと、次のコマンドで見つかったディレクトリを指すディレクトリ リンクをmklinkに作成します:cmd.exe /c mklink /D "C:\ProgramData\roming" “C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.25050.5-0” - 次に、次のパラメータを使用して
C:\Windows\System32\ClipUp.exe実行します:-ppl C:\ProgramData\roming\MsMpEng.exe。これにより、MsMpEng.exeジャンクデータで上書きされ、再起動後も EDR が無効になります。
作者は、 ClipUp.exeを開始するためにEDR-Freezeからコードをコピーしたようです。
CiPolicies
マルウェアは、ポリシー ファイルをパスC:\\Windows\\System32\\CodeIntegrity\\CiPolicies\\Active\\{31351756-3F24-4963-8380-4E7602335AAE}.cipに書き込むことで、Windows Defender Application Control (WDAC) を直接ターゲットにします。
悪意のあるポリシーは「拒否リスト」モードで動作し、ほとんどのアプリケーションの実行を許可しながら、次の 2 つの一般的な中国のウイルス対策ベンダーを明示的にブロックします。
- Qihoo 360 Total Security は
360rp.exeと360sd.exeをブロックします - Huorong Securityをブロックする
ARPProte.exe - 証明書 TBS ハッシュ
A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4を介して Huorong Security (北京火绒网络科技有限公司) によって署名されたすべての実行可能ファイル
重要なコンポーネントはEnabled:Unsigned System Integrity Policyルールであり、これにより有効なデジタル署名なしでポリシーを読み込むことができます。
Truncated...
<Rule>
<Option>Enabled:Inherit Default Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Unsigned System Integrity Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Advanced Boot Options Menu</Option>
</Rule>
<Rule>
<Option>Enabled:Update Policy No Reboot</Option>
</Rule>
</Rules>
<EKUs />
<FileRules>
<Allow ID="ID_ALLOW_A_019A298478CE7BF4902DE08CA2D17630" FileName="*" />
<Allow ID="ID_ALLOW_A_019A298478CE7AB089C369772F34B39B" FileName="*" />
<Deny ID="ID_DENY_A_019A298478CE7DBA9913BFC227DACD14" FileName="360rp.exe" InternalName="360rp.exe" FileDescription="360杀毒 实时监控" ProductName="360杀毒" />
<Deny ID="ID_DENY_A_019A298478CE763C85C9F42EC8669750" FileName="360sd.exe" InternalName="360sd.exe" FileDescription="360杀毒 主程序" ProductName="360杀毒" />
<FileAttrib ID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" FileName="ARPProte.exe" MinimumFileVersion="6.0.0.0" />
</FileRules>
<Signers>
<Signer ID="ID_SIGNER_A_019A298478CE7608908CAE58FD9C3D8E" Name="">
<CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
<CertPublisher Value="北京火绒网络科技有限公司" />
<FileAttribRef RuleID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" />
</Signer>
<Signer ID="ID_SIGNER_A_019A298478CE77F7B523D1581F518639" Name="">
<CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
<CertPublisher Value="北京火绒网络科技有限公司" />
</Signer>
</Signers>
...Truncated
ステージ 3 - goldendays.dll
前のステージでは、RONINGLOADER は次のコマンドを使用して次のステージの実行を実行するために、 MicrosoftSoftware2ShadowCop4yProviderという名前の新しいサービスを作成します: regsvr32.exe /S "C:\ProgramData\Roning\goldendays.dll 。
このコンポーネントの主な目的は、次のペイロードを正当な高権限システム プロセスに挿入して、そのアクティビティをカモフラージュすることです。
これを実現するために、RONINGLOADER はまず適切なターゲット プロセスを識別します。ハードコードされた 2 つのサービス名のリストがあり、順番に起動を試みます。
- 信頼できるインストーラー (
TrustedInstaller.exe) - MicrosoftEdgeElevationService (
elevation_service.exe)
マルウェアはこのリストを反復処理し、各サービスを起動しようとします。サービスが正常に開始されるか、すでに実行中であることが検出された場合、マルウェアは注入フェーズ用にそのプロセス ID (PID) を保存します。
次に、マルウェアは、 C:\Windows\ディレクトリ内にランダムな名前 (例: C:\Windows\KPeYvogsPm.bat ) を持つバッチ ファイルを作成して、永続性を確立します。このファイル内のスクリプトは、次のロジックで連続ループを実行します。
- 信頼できるサービスのキャプチャされたPID(例:
TrustedInstaller.exeのPID4016)がまだ実行されているかどうかを確認します。 - サービスが実行されていない場合、スクリプトは以前に作成された悪意のあるサービス(
MicrosoftSoftware2ShadowCop4yProvider)を再起動して、マルウェアのコンポーネントがアクティブなままであることを確認します。 - サービスプロセスが実行中の場合、スクリプトは再度チェックする前に 10 秒間スリープします。
最後に、マルウェアはC:\ProgramData\Roning\trustinstaller.binの内容を読み取ります。以前に取得した信頼できるサービスの PID を使用して、このペイロードをターゲット プロセス ( TrustedInstaller.exeまたはelevation_service.exe ) に挿入します。注入方法は簡単です。 VirtualAllocExを使用してリモート仮想割り当てを実行し、 WriteProcessMemoryを使用してそれに書き込み、次にCreateRemoteThreadを使用してそれを実行するリモート スレッドを作成します。
ステージ 3 - trustinstaller.bin
3 番目のステージはtrustinstaller.bin内に格納されており、最終的なペイロードを正当なプロセスに挿入する役割を担います。まず、実行中のプロセスを列挙し、ハードコードされた潜在的なプロセスのリストとプロセス名を照合してターゲットを検索します。
見つかった場合、最終的なペイロードであるシェルコードをC:\ProgramData\Roning\Enpug.binに挿入します。NtCreateSectionを使用してセクションを作成し、そのビューをリモート プロセスにNtMapViewOfSectionを使用してマップし、そこにペイロードを書き込みます。次に、 CreateRemoteThreadを使用してリモート スレッドを作成します。
ステージ 4 - 最終ペイロード
最終的なペイロードは、 2023 でのSophosによる DragonBreath キャンペーンの発見と、2022 年半ばのQianXin によるレポート以来、大きな変更はありません。これは依然としてオープンソースのgh0st RAT の修正バージョンです。
最近のキャンペーンでは、実行の最初に値Global\DHGGlobalMutexのミューテックスが作成されます。メインの C2 通信ループの外部では、 MyUniqueMutexNameという名前のミューテックスを作成し、その後すぐにそれを破棄するデッド コードが観察されています。
C2 ドメインとポートはハードコードされたままですが、XOR 暗号化されるようになりました。C2 チャネルは、生の TCP ソケットを介して動作し、両方向のメッセージが暗号化されます。
被害者ビーコンデータ
インプラントは C2 サーバーにチェックインし、 Sleep(<random_amount> * 1000)を通じて実装され、ランダムな間隔で C2 にビーコンを繰り返し送信します。以下は、ビーコン間隔中にインプラントが C2 サーバーに返すデータの構造です。
struct BeaconData {
// +0x000
uint32_t message_type; // Example Beacon ID - 0xC8 (200)
// +0x004
uint32_t local_ip; // inet_addr() of victim's IP
// +0x008
char hostname[50]; // Computer name or registry "Remark"
// +0x03A
char windows_version[?]; // OS version info
// +0x0D8
char cpu_name[64]; // Processor name
// +0x118
uint32_t entry_rdx;
// +0x11C
char time_value[64]; // Implant installed time or registry "Time" value
// +0x15C
char victim_tag[39]; // Command 6 buffer (Custom victim tag)
// +0x183
uint8_t is_wow64; // 1 if 32-bit on 64-bit Windows
// +0x184
char av_processes_found[128]; // Antivirus processes found
// +0x204
char uptime[12]; // System uptime
char padding[52];
// +0x244
char crypto_wallet_track[64]; // "狐狸系列" (MetaMask) or registry "ZU" (crypto related tracking)
// +0x284
uint8_t is_admin; // 1 if running with admin rights
// +0x285
char data[?];
// +0x305
uint8_t telegram_installed; // 1 if Telegram installed
// +0x306
uint8_t telegram_running; // 1 if Telegram.exe running
// +0x307
// (padding to 0x308 bytes)
};
C2コマンド
C2 サーバーからインプラントに送信される要求メッセージは、次の構造に従います。
struct C2_to_implant_msg {
uint32_t total_message_len;
uint32_t RC4_key;
char encrypted_command_id;
uint8_t encrypted_command_args;
};
インプラントは次の式を使用して C2 メッセージを復号化します。
RC4_decrypt(ASCII(decimal(RC4_key)), encrypted_command_id || command)
以下は、 2 年前とほとんど変わらない、使用可能なコマンドのリストです。
| コマンド ID | 説明 |
|---|---|
0 | ExitWindowsEx 提供された EXIT_WINDOWS_FLAGS |
1 | インプラントを正常に終了する |
2 | レジストリキーEnable False に設定すると、インプラントが永続的に終了して無効になります。 |
3 | カスタム被害者名変更用のレジストリ キーRemarkを設定します (既定値: ホスト名) |
4 | MetaMask / 暗号関連のタグ付けのレジストリキーZUを設定します |
5 | Windows イベント ログ (アプリケーション、セキュリティ、システム) をクリアします |
6 | クライアントビーコン時に追加のカスタムタグを設定する |
7 | 指定されたURLからファイルをダウンロードして実行する |
9 | ShellExecute (見えるウィンドウ) |
10 | ShellExecute (隠しウィンドウ) |
112 | クリップボードデータを取得する |
113 | クリップボードデータを設定する |
125 | ShellExecute cmd.exe コマンドパラメータ付き(非表示ウィンドウ) |
126 | ディスクにドロップしてペイロードを実行するか、リフレクションでロードしてPluginMeエクスポートを実行します |
128 | 最初のオプション - 指定された C2 ドメイン、ポート、およびビーコン間隔で新しいセッションを開きます。2 番目のオプション - レジストリ キーCopyCを設定して、C2 ドメインとポートを永続的に更新します。Base64Encode(XOR(C2_domain_and_port, 0x5))経由で暗号化されて保存されます。 |
241 | Telegramがインストールされているか、実行されているか確認する |
243 | クリップボードハイジャッカーの設定 |
101, 127, 236, [...] | WTS セッション トークンの偽装を使用してsvchost.exeにカスタム シェルコードを挿入し、 CreateRemoteThread経由でCREATE_SUSPENDEDプロセス挿入にフォールバックします。 |
アナリストメモ: 同じコマンドを指すコマンド ID が複数あります。これがいつ観察されたかを識別するために省略記号を使用しました。
システムロガー
C2 コマンドに加えて、インプラントはキーストローク、クリップボード、アクティブ ウィンドウのロガーを実装します。キャプチャされたデータは%ProgramData%\microsoft.dotnet.common.logに書き込まれ、 HKEY_CURRENT_USER\offlinekey\openのレジストリ キーを介して有効化または無効化できます (有効化する場合は1 、無効化する場合は0 )。ログ ファイルは自動ローテーションを実装しており、 50 MB を超えると過剰なディスク使用による検出を回避するために自動的に削除されます。
以下のコード スニペットは、ログのローテーションを実装し、イベント キャプチャ用のキーボード デバイスを取得するための DirectInput8 インターフェイスを構成し、その後にキーボード イベントの取得ロジックを実行する初期化ルーチンを示しています。
次に、マルウェアは監視ループに入り、3 つのカテゴリの情報を取得します。
- まず、
OpenClipboardとGetClipboardDataを使用してクリップボードを監視し、テキスト コンテンツの変更をプレフィックス[剪切板:]でログに記録します。 - 次に、
GetForegroundWindowを介してウィンドウのフォーカスの変更を追跡し、ユーザーがアプリケーションを切り替えるたびに、アクティブなウィンドウのタイトルとタイムスタンプをそれぞれプレフィックス[标题:]と[时间:]を付けて記録します。 - 3 番目に、
DirectInput8デバイスからバッファリングされたキーボード イベント (ポーリングごとに最大 60 イベント) を取得し、文字マッピング テーブルを使用して読み取り可能なテキストに変換し、結果の先頭にプレフィックス[内容:]を付加します。
クリップボードハイジャッカー
このマルウェアは、C2 コマンド ID 243 を通じてリモートから構成されるクリップボード ハイジャッカーも実装します。クリップボードの変更を監視し、キャプチャしたテキストに対して検索と置換の操作を実行し、攻撃者が定義した文字列を置換値に置き換えます。構成パラメータは、キーclipboard (有効化/無効化機能)、 charac (検索文字列)、 characLen (検索長)、およびnewcharac (置換文字列) とともに、 HKEY_CURRENT_USER\offlinekeyの下のレジストリに保存されます。
ClipboardListener_Class_Toggleという名前のウィンドウ クラスを登録し、クリップボードの変更通知を受信するためにClipboardMonitorというタイトルの非表示ウィンドウを作成します。ウィンドウ プロシージャは、 GetClipboardSequenceNumberを使用してクリップボードのシーケンス番号を検証し、実際の変更を検出して、 WM_CLIPBOARDUPDATE ( 0x31D ) メッセージを処理します。次に、 EmptyClipboardとSetClipboardDataを介してクリップボードの内容を交換するためのコア操作ルーチンを呼び出します。
マルウェアと MITRE ATT&CK
Elasticは、 MITRE ATT&CK フレームワークを使用して、企業ネットワークに対してAdvanced Persistent Threatが使用する一般的な戦術、手法、手順を文書化しています。
戦術(Tactics)
戦術は、テクニックまたはサブテクニックの理由を表します。 それは敵の戦術的な目標であり、行動を実行する理由です。
手法
手法は、敵対者がアクションを実行することによって戦術的な目標を達成する方法を表します。
- コマンドおよびスクリプト インタープリター: Windows コマンド シェル
- システムサービス: サービス実行
- システムプロセスの作成または変更:Windowsサービス
- 昇格制御メカニズムの悪用:ユーザーアカウント制御のバイパス
- Access Token Manipulation
- 防御の障害:ツールの無効化または変更
- 防御を弱める: システムファイアウォールを無効化または変更する
- インジケーターの削除: Windows イベント ログのクリア
- ハイジャック実行フロー:DLLサイドローディング
- プロセスインジェクション
- マスカレード: 正当な名前または場所を一致させる
- Modify Registry
- 信頼管理の破壊:コード署名ポリシーの変更
- 入力キャプチャ: キーロギング
- クリップボードデータ
- プロセスディスカバリー
- システム情報の検出
- System Owner/User Discovery
- ソフトウェア検出: セキュリティソフトウェア検出
- Non-Application Layer Protocol
- 暗号化チャネル:対称暗号化
対策
検知
- ClipUp実行による潜在的な回避
- 疑わしいリモート メモリ割り当て
- 潜在的なプロセス停止コードインジェクション
- 信頼できるターゲットプロセスへのリモートメモリ書き込み
- 低評価モジュールによるリモートプロセスメモリ書き込み
- 子プロセス以外のプロセスへのプロセスメモリ書き込み
- Unsigned ModuleからのUnbackedシェルコード
- WOW64 ロガー DLL サイドローディングによる UAC バイパスの試み
- バックアップされていないメモリからのネットワーク接続 API
- Rundll32 or Regsvr32 Loaded a DLL from Unbacked Memory
- ネットワークモジュールが疑わしいバックアップされていないメモリからロードされました
ヤラ
Elastic Security はこのアクティビティを識別するための YARA ルールを作成しました。以下は、RONINGLOADER と最終的なインプラントを識別するための YARA ルールです。
観測
この研究では、次の観測量について議論しました。
| すぐれた監視性 | タイプ | 名前 | 参考 |
|---|---|---|---|
da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b | SHA-256の | klklznuah.msi | 初期NSISインストーラー |
82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724 | SHA-256の | Snieoatwtregoable.exe | 初期インストーラーから解凍された悪意のあるインストーラー |
c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5 | SHA-256の | Snieoatwtregoable.dll | ステージ 1 - ステージ 2 のローダー |
2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5 | SHA-256の | ollama.sys | ステージ 2 - プロセス終了のドライバー |
1613a913d0384cbb958e9a8d6b00fffaf77c27d348ebc7886d6c563a6f22f2b7 | SHA-256の | tp.png | ステージ 2 - 暗号化されたコアペイロード |
395f835731d25803a791db984062dd5cfdcade6f95cc5d0f68d359af32f6258d | SHA-256の | 1.bat | ステージ 2 - UAC バイパス スクリプト |
1c1528b546aa29be6614707cbe408cb4b46e8ed05bf3fe6b388b9f22a4ee37e2 | SHA-256の | fhq.bat | ステージ 2 - AV プロセスのネットワークをブロックするスクリプト |
4d5beb8efd4ade583c8ff730609f142550e8ed14c251bae1097c35a756ed39e6 | SHA-256の | 1.dll | ステージ 2 - AV プロセスの終了 |
96f401b80d3319f8285fa2bb7f0d66ca9055d349c044b78c27e339bcfb07cdf0 | SHA-256の | {31351756-3F24-4963-8380-4E7602335AAE}.cip | ステージ 2 - WDAC ポリシー |
33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617c | SHA-256の | goldendays.dll | ステージ 3 - エントリポイント |
fc63f5dfc93f2358f4cba18cbdf99578fff5dac4cdd2de193a21f6041a0e01bc | SHA-256の | trustinstaller.bin | ステージ 3 - ローダー Enpug.bin |
fd4dd9904549c6655465331921a28330ad2b9ff1c99eb993edf2252001f1d107 | SHA-256の | Enpug.bin | ステージ 3 - 最終ペイロードのローダー |
3dd470e85fe77cd847ca59d1d08ec8ccebe9bd73fd2cf074c29d87ca2fd24e33 | SHA-256の | 6uf9i.exe | ステージ 4 - 最終ペイロード |
qaqkongtiao[.]com | ドメイン名 | ステージ 4 - 最終ペイロード C2 |
参照資料
上記の研究を通じて、以下のことが参照されました。
- https://nsis.sourceforge.io/メイン_ページ
- https://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
- https://github.com/Jemmy1228/HookSigntool
- https://www.safebreach.com/blog/process-injection-using-windows-thread-pools/
- https://hijacklibs.net/entries/microsoft/built-in/wow64log.html
- https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_ハッシュ関数
- https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html
- https://github.com/TwoSevenOneT/EDR-Freeze/blob/ceffd5ea7b813b356c77d469561dbb5ee45aeb24/PPLHelp.cpp#L43
- https://news.sophos.com/en-us/2023/05/03/doubled-dll-sideloading-dragon-breath/
- https://ti.qianxin.com/blog/articles/operation-dragon-breath-%28apt-q-27%29-dimensionality-reduction-blow-to-the-gambling-industry/
- https://github.com/sin5678/gh0st
