HoneyMyteのバックドア「CoolClient」、署名付きカーネルルートキットドライバを新たに搭載

脅威グループHoneyMyte(別名Mustang Panda)は、自組織のバックドア「CoolClient」の更新版を、署名付きWindowsカーネルレベルドライバとともに展開し始めています。Kaspersky傘下のSecurelistチームがこのキャンペーンの詳細を文書化しており、このドライバが悪意あるプロセス、ファイル、レジストリキー、コマンドサーバー接続データを隠蔽するとともに、保護対象のコンポーネントを他のソフトウェアが削除・変更できないようにしていることを明らかにしました。感染が確認されたシステムはミャンマー、モンゴル、パキスタン、ロシアに及び、政府機関も含まれています。今回調査された攻撃では、PlugXによる初期侵害の後にCoolClientが起動されていました。

CoolClientの主要機能

CoolClientはキーストロークの記録、クリップボード内容のコピー、認証情報の窃取、ファイル管理、システム情報の収集が可能です。追加機能はプラグインを通じて動的にロードされます。新バージョンではさらに、Windowsカーネル内部で動作する専用ドライバという保護レイヤーが追加され、通常のユーザーレベルのプログラムでは到達できない仕組みへのアクセスが可能になっています。

ドライバインストールに必要な権限

このドライバは、十分な権限が確保されている場合にのみインストールされます。CoolClientはWindows Service Control Managerへのフルアクセスと、SeTcbPrivilege権限の保有を確認します。Windowsでは、SeTcbPrivilegeは機微なシステムレベルの権限に分類されており、これを保持するプロセスは事実上オペレーティングシステムの一部として振る舞うことができます。必要な権限がない場合、マルウェアはドライバのインストールを完全にスキップし、直接バックドアの最終段階コンポーネントの起動へと進みます。

初期感染チェーン: PlugXとDLLサイドローディング

ミャンマーの組織に対する攻撃事例の一つでは、攻撃者はまずPlugXを展開しました。これを通じて、偽のWindows Defenderディレクトリとリネームされた実行ファイルに対する除外設定がMicrosoft Defenderに追加されました。このディレクトリが準備された後、CoolClientのコンポーネントがそこにコピーされました。

実行には、defender.exeにリネームされた正規のSangforアプリケーションが利用されました。攻撃者はこれと並べてlibngs.dllという名前の悪意あるライブラリを配置しました。起動時、Sangforの実行ファイルは自身のディレクトリからこのライブラリを読み込み、その結果、正規コンポーネントの代わりに攻撃者のコードが実行される仕組みです。この手法はDLLサイドローディングとして知られています。

多段階ローダー: loadcert.iniとcert.ini

libngs.dllは次段階のコンポーネントであるloadcert.iniを復号し、実行を引き渡します。拡張子は.iniですが、このファイルには通常の設定情報ではなく実行可能な悪意あるコードが含まれています。loadcert.iniはCoolClientの永続化を確立し、レジストリを変更し、WindowsのUser Account Controlを回避し、他のプロセスにコードをインジェクションし、カーネルドライバをインストールし、最終段階のコンポーネントであるcert.iniを起動します。この最終コンポーネントがコマンド&コントロールサーバーとの通信を担当し、バックドアの中核機能を実行します。

スタートアップ時の自動実行のため、loadcert.iniはgoopdateという名前のレジストリ自動起動エントリを作成します。また、このマルウェアはmedia_updatenという名前でWindowsサービスを登録することも可能です。コードをインジェクションする前に、CoolClientは自身の権限昇格を試み、より有利なシステムコンテキストで再起動しようとします。

PPIDスプーフィングによる権限昇格

これを実現するため、CoolClientはリモートプロシージャコール(RPC)とParent Process ID(PPID)スプーフィングを組み合わせて利用します。Windowsはどのプロセスが別のプロセスを起動したかを記録していますが、CoolClientはこのデータを偽装し、新たに生成されたプロセスが別の正規プログラムの子プロセスであるかのように見せかけます。昇格した権限で動作するようになると、マルウェアはsynchost.exeプロセスに自身のコードをインジェクションします。

msagent.sysの展開: カーネルドライバ

システムが必要な権限を提供している場合、loadcert.iniはLZMAアルゴリズムで圧縮されたカーネルドライバを自身の本体から展開します。このファイルはmsagent.sysという名前で保存されます。その後、CoolClientはmsagentという名前のドライバサービスを作成し、これを起動します。

msagent.sysには、Nanjing Ranyi Technology Co., Ltd.に発行されたデジタル署名が付与されており、有効期限は2013年8月から2014年9月までとなっています。同じ証明書を持ち、2013年頃にコンパイルされた古い悪意あるドライバも複数確認されていますが、それらの過去のサンプルと今回のCoolClientキャンペーンとの直接的な関連性は確認されていません。

CoolClientとドライバの通信方法: IOCTLコマンド

ロードされると、このドライバはCoolClientのユーザーモードコンポーネントからのコマンドを、IOCTLリクエスト経由で受け付けます。これはWindowsにおいて通常のプログラムとドライバ間の通信に使われる標準的な仕組みです。今回調査されたサンプルでは、通常動作時にCoolClientは3種類のリクエストを発行していました。

リクエスト0x222120は、現在のCoolClientプロセスを信頼済みとして登録します。登録が完了すると、このドライバは他のすべてのアプリケーションからはアクセス不能となっているファイル、レジストリキー、その他のプロセスへのアクセスを、悪意あるプロセスに許可します。これにより、msagent.sysが自身のコンポーネントを他のあらゆるものから隠蔽・保護している状態でも、CoolClientは自身のコンポーネントへの完全なアクセスを保持できます。

リクエスト0x2221Eは、コマンドサーバーのIPv4アドレスをドライバに渡します。msagent.sysはこのアドレスを利用して、本来Windowsがユーザーレベルのアプリケーションに表示するはずのネットワーク情報をフィルタリングします。

リクエスト0x2220F0は、保護が必要なファイルパスとレジストリキーを伝達します。今回調査された構成では、CoolClientは自身のインストールディレクトリと、マルウェアのサービスに関連付けられたレジストリキーを渡していました。これらのパスが登録されると、他のプログラムは該当するオブジェクトの表示・変更・削除ができなくなる可能性があります。

レジストリベースの設定とカーネルレベルでの隠蔽

msagent.sysは、隠蔽設定を\REGISTRY\MACHINE\SYSTEM\RNGというレジストリブランチに保存しています。ディレクトリ、ファイル、レジストリキー・値、プロセスそれぞれに個別のパラメータが存在し、どのオブジェクトを隠蔽するか、どれを保護するか、どれを処理対象から完全に除外するかが設定で指定されます。

システムの制御を維持するため、このドライバはファイルシステム、レジストリ、プロセス、カーネルオブジェクト、実行可能イメージのロードに対するハンドラを登録します。Windowsが保護リストに含まれるオブジェクトに対して操作を行うたびに、msagent.sysはその結果を改変したり、操作自体をブロックしたりすることができます。

プロセスを保護する際、このドライバは保護対象プロセスへのハンドルを取得した他のプログラムが得る権限を制限します。このハンドルは、あるアプリケーションが別のプロセスに対して操作を行うために必要なものです。msagent.sysがこれらの権限を剥奪すると、たとえば保護対象プロセスを終了させたり、そこに自身のコードをインジェクションしたりすることができなくなります。今回調査された感染事例では、このドライバは、CoolClientが先にコードをインジェクションしていたsynchost.exeプロセスを保護していました。

msagent.sysは、Windowsが内部で保持しているアクティブなプロセスの一覧から特定のエントリを削除することで、プロセスを完全に隠蔽することも可能です。その裏で実際のコードは通常どおり動作し続けますが、標準のシステム構造を通じてプロセス一覧を取得しようとするプログラムは、隠蔽されたエントリをまったく検知できない場合があります。

ファイル、レジストリ、ネットワークの隠蔽メカニズム

ファイルとディレクトリは、Windowsのファイルシステムミニフィルタによって保護されます。このミニフィルタは、保護対象オブジェクトへのアクセス要求を横取りし、必要に応じてアクセス拒否の結果を返します。ユーザーやプログラムが悪意あるファイルの正確なパスを知っていたとしても、読み取り・変更・削除の試みはいずれも失敗します。

レジストリについても同様の仕組みが適用されます。このドライバは、保護対象のキーや値に向けられた要求に介入するハンドラを登録します。レジストリキーの内容が列挙される際、msagent.sysは結果から該当エントリを取り除くため、システムユーティリティやセキュリティ製品は不完全な一覧しか取得できません。保護対象の値を変更・削除しようとする試みは、別の仕組みによってブロックされます。

コマンドサーバーへの接続を隠蔽するため、このルートキットはWindowsのNsiproxyドライバに干渉します。ユーザーレベルのアプリケーションは通常、このドライバを通じてネットワーク接続データの一部を取得します。msagent.sysは、返される結果からコマンドサーバーのIPv4アドレスを除外するため、一部のネットワーク監視ツールは該当する接続エントリをまったく見逃してしまう可能性があります。

33種類のIOCTLハンドラ――実際に使われているのは3種類のみ

msagent.sys内には、合計33種類のIOCTLハンドラが確認されています。このドライバには、プロセスやカーネルモジュールの隠蔽、レジストリ値の変更、Windowsカーネルの通知システムとの連携といった機能が含まれています。しかし、今回調査されたサンプルの通常動作では、CoolClientは信頼済みプロセスの登録、コマンドサーバーのIPv4アドレスの送信、保護対象パスの設定という3種類のコマンドしか利用していませんでした。残りのハンドラの使用は、今回分析された攻撃では確認されていません。

侵害の痕跡(Indicators of Compromise)

検知作業を支援するため、侵害の痕跡(IOC)が公開されています。確認された2種類のmsagent.sysサンプルのハッシュ値は、2d7c8780e97409770a9d4f31c66c9d63と9460E150E1981D5C165043520c5c12feです。libngs.dllについては、9717f005c5fb98e08d2ad983d88f94eeとF518D8E5FE70D9090F6280C68A95998Fというハッシュ値が確認されています。IOCの完全なセットには、悪意あるファイルパスとコマンドサーバーのドメインも含まれています。

カーネルレベルルートキット展開のパターン

HoneyMyteはこれまでにもカーネルレベルのルートキットを使用してきました。2026年1月には、パキスタンとミャンマーの標的に対して展開された別のCoolClientの亜種が、これまで確認されていなかったドライバを起動する事例が研究者により文書化されています。2025年12月にも、同グループはバックドア「ToneShell」を展開するために、別のカーネルレベルのルートキットを使用していました。

今回のCoolClientドライバは、以前ToneShellとともに使用されたコンポーネントと構造的な類似性を持っています。しかし、msagent.sysはバックドアのユーザーモードコンポーネントと直接通信するための、独自のIOCTLコマンド群を備えています。CoolClient自身が、どのプロセスを信頼済みとして扱うか、どのファイルとレジストリエントリを不正アクセスから保護するか、そしてWindowsのネットワーク情報からどのコマンドサーバーアドレスを除外するかをドライバに指示しているのです。

翻訳元: https://meterpreter.org/honeymyte-coolclient-kernel-rootkit-driver/

本記事は meterpreter.org の記事を翻訳・要約したものです。