当初は一見よくあるCobalt Strike Beaconに見えたものが、実際にはさらに危険な代物であることが判明しました。研究者たちは今回、SakDriverと呼ばれるマルウェアを分析しています。これはWindowsのカーネルレベルで完全に機能するルートキットで、プロセスやネットワーク接続を隠蔽し、イベントテレメトリを抑制したうえで、OSが許す最高権限でコマンドを実行できます。
Ring 0アクセスとETW改ざん
core-jmpが公開したSakDriverカーネルドライバの詳細なリバースエンジニアリング記事によると、このマルウェアはドライバとしてロードされ、即座にRing 0――Windowsアーキテクチャにおいて最も高い権限を持つ実行レイヤー――へのアクセスを獲得します。
この位置から、SakDriverはEvent Tracing for Windows(ETW)に直接干渉します。このテレメトリパイプラインを破壊することで、ルートキットはセキュリティソリューションが正確なシステム活動記録を収集するのを妨げます。防御側は、実際に何が起きているかを観測する前に、いわば目を塞がれてしまうのです。
プロセスとネットワークの隠蔽
実行中のプロセスを隠すために、SakDriverはDirect Kernel Object Manipulation(DKOM)と呼ばれる手法を使用します。この手法はメモリ上のカーネルデータ構造を直接改変し、OSやセキュリティツールが実行中のプロセスを列挙する際に参照するリストから対象プロセスを切り離します。
ネットワークの隠蔽は異なるアプローチを取ります。SakDriverはNetwork Store Interfaceドライバを乗っ取り、特定のリスニングポートを不可視化します。隠蔽対象のポートには6891、6543、7543、9199、および12341~12343の範囲の複数ポートが含まれます。
レジストリを用いたコマンドチャネル
SakDriverの最も特徴的な設計上の選択の一つが、そのコマンド&コントロール(C2)機構です。エンドポイント検知ツールが容易に検知できるネットワーク経由の直接的な命令受信ではなく、このルートキットはカーネルコールバックを登録し、特定のWindowsレジストリ値を監視します。
連携する別プロセスがこのレジストリエントリにエンコードされたコマンドデータを書き込みます。ルートキットが登録したハンドラは書き込み操作を検知し、データに埋め込まれた特殊なバイト列を検証したうえで、その指示をドライバに中継します。この仕組みにより、振る舞い検知エンジンが観測しうる不審なネットワーク通信やシステムコールの量が大幅に減少します。
20種類以上のコマンドを備えたディスパッチテーブル
任意プロセスのメモリの読み取りと改変、物理メモリへの直接アクセス、実行中プロセスへのライブラリおよび実行可能シェルコードの注入、保護されたファイルの削除、メモリページのアクセス権限の変更、ファイルシステムに触れることなくメモリから直接PEファイルをロードする機能、キーボード・マウス入力のシミュレーション、そしてディスクシリアル番号、NVIDIA製GPUの識別子、SMBIOSデータを含むハードウェア識別子の偽装です。
永続化:Microsoftサービスへの偽装
永続化のために、この悪性ドライバはWindows\System32\driversディレクトリに、sak_XXX.sysというパターンに一致するファイル名で自身を書き込みます。続いてSakDriverはmsXXXXという名前のサービスを作成し、「Microsoft Player Service」を装います。
さらに、このルートキットはファイルシステムミニフィルタドライバとして登録されます。この登録により、ディレクトリ列挙要求を横取りし、アンチウイルスによるスキャンから自身のファイルが表示されないよう抑制できます。これは、多くのセキュリティツールが利用するファイルシステムAPIレベルよりも下層で機能する自己隠蔽の仕組みです。
レジストリとネットワークの保護
SakDriverは自身の設定を積極的に防御します。自身のサービスエントリに関連するレジストリキーへの変更試行をブロックします。さらに、このルートキットはWindows Filtering Platformを利用して、セキュリティ製品が攻撃者側のインフラへ接続することを妨害します。これにより、防御ツールは自らのアップデートおよびテレメトリのエンドポイントから事実上遮断されてしまいます。
解析回避とサンドボックス検知
動的・静的解析を困難にするため、SakDriverはいくつかの回避技術を組み込んでいます。ハイパーバイザーのタイミング特性を調べることでサンドボックス環境を検知します。また、静的解析時に目的をすぐに露呈してしまう標準的なインポートテーブル経由でカーネル関数アドレスを取得するのではなく、このルートキットはntoskrnl.exeのエクスポートテーブルを直接解析することで、必要なアドレスを実行時にすべて解決します。
その結果、明確なインポートの痕跡を持たないドライババイナリが生成され、自動分類による検知を大きく妨げます。
残された痕跡
高度な設計にもかかわらず、開発者はいくつかの復元可能なフォレンジック痕跡を残していました。検体にはCrackerDrv.pdbを参照するデバッグ用PDBパスが残っています。また、特定の段階でインストールに失敗した場合、サービスは偽装名ではなく平文のSakDriverという名前で登録されることがあります。
研究者たちは、検体のハッシュ値、ネットワークの侵害指標(IoC)、そしてエンドポイントテレメトリやメモリイメージ全体からこの悪性ドライバを探索するのに適したYARAルールを公開しています。
カーネルレベルのマルウェアが特に危険な理由
SakDriverの分析は、カーネルレベルのマルウェアが生み出す深刻な非対称性を浮き彫りにしています。このルートキットは単一のプロセスを隠すだけではありません。ロギングサブシステム、ファイルシステム層、ネットワークスタック、そしてメモリ管理を同時に乗っ取るのです。
OS自体から得られるテレメトリのみに依存するセキュリティソリューションでは、侵害されたホスト上で実際に起きている活動のごく一部しか観測できない可能性があります。この権限レベルの脅威を効果的に検知するには、カーネルを意識したツール、ドライバロードの整合性検証、そしてルートキットがすでに侵害しているOSのテレメトリパイプラインから独立して動作する監視手法が必要です。
翻訳元: https://meterpreter.org/sakdriver-windows-kernel-rootkit/