
Fortinet の fortimon3_74.sys カーネルドライバ (FortiClient の「anti-exploit」ミニフィルタ) の脆弱性により、任意のローカル管理者が、未認証の通信ポートに 8 バイトのメッセージを送信するだけで、Windows Defender (MsMpEng.exe) や lsass.exe のような PPL (Protected Process Light) で保護されたプロセスを含む 任意の プロセスを終了させることができます。
バッファオーバーフローはありません。ヒープスプレーもありません。ROP チェーンもありません。わずか 8 バイトです。
| 項目 | 値 |
|---|---|
| ドライバ | fortimon3_74.sys (FortiClient Anti-Exploit Minifilter) |
| ポート | \Fortimon3FilterAntiExploitPort |
| 影響 | PPL バイパス、任意のプロセス終了 |
| アクセス | ローカル管理者 |
| 認証 | なし |
| BYOVD リスク | 高 - ドライバは Fortinet によって署名されている |
このドライバは、呼び出し元の認証を行わないミニフィルタ通信ポートを公開しています。これは単純な 8 バイトのメッセージを受け付けます:
struct {
DWORD magic; // 0x6C6C696B ("kill" in little-endian ASCII)
DWORD pid; // Target process ID
};
このメッセージを受信すると、ドライバはカーネルモードから PROCESS_ALL_ACCESS を指定して ZwOpenProcess を呼び出し (PPL チェックをバイパス)、その後 ZwTerminateProcess を呼び出します。呼び出し元や対象に対する検証は一切行われません。
ZwOpenProcess のハンドルは 呼び出し元のハンドルテーブル に作成され (OBJ_KERNEL_HANDLE フラグが欠落)、ユーザーモードの攻撃者が lsass.exe のような PPL で保護されたプロセスへの PROCESS_ALL_ACCESS ハンドルを複製できる短いウィンドウが生じます - これにより、プロセスを終了させることなく資格情報の窃取が可能になります。
PROCESS_TERMINATE ではなく PROCESS_ALL_ACCESS が使用されているOBJ_KERNEL_HANDLE フラグの欠落により、カーネルハンドルがユーザーモードに露出する
完全なデモを見る - 保護されたプロセスに対する PPL バイパスを実演しています。
| ファイル | 説明 |
|---|---|
poc.c | Proof of Concept - 脆弱なドライバを介して名前で任意のプロセスを終了させる |
fortimon3_74.sys | 脆弱なドライババイナリ (Fortinet 署名済み) |
cl.exe poc.c /Fe:poc_kill.exe
poc_kill.exe MsMpEng.exe
必要条件: ローカル管理者権限、fortimon3_74.sys がロードされていること。
me1n
poc.jpg |
| スクリーンショット - lsass.exe が終了し、システム再起動が発生 |
forti.mp4 | エクスプロイトのビデオデモ |