BamExtensionTableHook:Windowsカーネル拡張テーブルフックのPoCドライバー
概要
BamExtensionTableHookは、Windowsカーネルにおけるプロセス作成・終了通知の仕組みを標的にしたProof-of-concept(PoC)ドライバーです。Windowsでは、PsSetCreateProcessNotifyRoutine
やその拡張版APIを通じてカーネルモードドライバーがプロセスのライフサイクルイベントを受け取れますが、攻撃者はこれらの通知を無効化することで監視回避を図ることがあります。本リポジトリのドライバーは、Windowsの「拡張テーブル」をフックし、この標準的な通知無効化を回避しつつプロセス通知コールバックを保持する手法を示しており、セキュリティ研究や防御技術の開発に役立つ技術的価値を持っています。
リポジトリの統計情報
- スター数: 12
- フォーク数: 1
- ウォッチャー数: 12
- コミット数: 2
- ファイル数: 2
- メインの言語: C
主な特徴
- Windowsカーネルのプロセス通知拡張テーブルをフックするPoCドライバー
- 標準のプロセス通知コールバック無効化を回避可能
- シンプルかつ理解しやすいC言語実装
- セキュリティ研究やカーネル監視機構の理解に有用
技術的なポイント
Windowsカーネルでは、カーネルモードドライバーがPsSetCreateProcessNotifyRoutine
やその拡張API(PsSetCreateProcessNotifyRoutineEx
など)を利用してプロセスの生成や終了イベントを監視できます。これらのAPIはプロセス通知コールバックを登録・解除する標準的な方法ですが、攻撃者がこのコールバックを無効化すると監視が困難になるという問題があります。
本リポジトリのBamExtensionTableHookドライバーは、この問題に対しWindowsの「拡張テーブル(Extension Table)」に着目しています。拡張テーブルはカーネル内で管理されている構造体で、標準の通知コールバックとは別にプロセス通知用の関数ポインタテーブルを保持していることが知られています。この構造体にフックを仕掛けることで、標準の通知コールバックが無効化されても拡張テーブル経由でプロセスイベントの検知が可能となります。
具体的には、ドライバーは拡張テーブルの対象関数ポインタを書き換え、独自のコールバック関数を割り当てます。これにより、標準のAPIが無効化されていても拡張テーブルを通じてプロセス作成・終了の通知を受け取り続けられます。この技術は、マルウェアの監視回避対策やカーネルレベルのセキュリティ監査に応用できる貴重な知見を提供します。
実装はC言語で行われており、ドライバーのエントリポイントやアンロード処理、拡張テーブルの探索とフック設定が中心です。コードはシンプルかつ明快で、Windowsカーネルのプロセス通知機構の内部動作理解に役立ちます。また、拡張テーブルの概念やWindowsカーネルフックの基本を学ぶ教材としても有用です。
ただし、本リポジトリはあくまでPoCであり、実運用環境での安全性や互換性は保証されていません。カーネルドライバー開発の高度な知識を要し、誤用するとシステムの不安定化やクラッシュを招く恐れがあります。セキュリティ研究や教育目的での利用を推奨します。
プロジェクトの構成
主要なファイルとディレクトリ:
- README.md: プロジェクトの概要と使い方、技術的背景の説明
- driver.c: カーネルドライバーのメイン実装。拡張テーブルのフック処理やコールバック登録を含む
まとめ
Windowsカーネルのプロセス通知を拡張テーブル経由でフック可能にする興味深いPoCドライバー。
リポジトリ情報:
- 名前: BamExtensionTableHook
- 説明: Proof-of-concept kernel driver that hijacks the Windows kernel extension table mechanism to preserve process notify callbacks even when attackers disable standard process notify callbacks.
- スター数: 12
- 言語: C
- URL: https://github.com/Dor00tkit/BamExtensionTableHook
- オーナー: Dor00tkit
- アバター: https://avatars.githubusercontent.com/u/47893732?v=4