Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-51324 — CVE-2024-51324(BYOVD)に関する修士論文研究。4つの動作モード(SCANNER, LOADER, KILLER, CLEANUP)を備えた高度なエクスプロイト、SHA-256ドライバ検証、完全な学術文書を含む。ポートフォリオ作品は、Windowsカーネルドライバセキュリティ、IOCTLリバースエンジニアリング、Bring Your Own Vulnerable Driverエクスプロイトをカバーする。 | Kitploit
ツール/GitHubGitHub/devianntsec/cve-2024-51324
防御ツール脆弱性分析エクスプロイトリバースエンジニアリングフォレンジックペネトレーションテスト論文と研究学習と教育レッドチーミングバイナリエクスプロイト
GitHubdevianntsec/cve-2024-51324

CVE-2024-51324

13ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2024-51324(BYOVD)に関する修士論文研究。4つの動作モード(SCANNER, LOADER, KILLER, CLEANUP)を備えた高度なエクスプロイト、SHA-256ドライバ検証、完全な学術文書を含む。ポートフォリオ作品は、Windowsカーネルドライバセキュリティ、IOCTLリバースエンジニアリング、Bring Your Own Vulnerable Driverエクスプロイトをカバーする。

リポジトリを見る

CVE-2024-51324 — BYOVD: BdApiUtil64.sys · 修士論文研究

Platform Language License: MIT Research CVSS

Bring Your Own Vulnerable Driver (BYOVD) — Baidu アンチウイルス BdApiUtil64.sys
3つの未ドキュメントのカーネルプリミティブ: プロセス終了、任意ファイル削除、SectionObjectPointer バイパスによる使用中ファイル削除
影響: Baidu アンチウイルス v5.2.3.116083 (BdApiUtil64.sys)


脆弱ドライバをカーネルにロード中(LOADER モード)

説明

このリポジトリには、Baidu アンチウイルスのカーネルドライバ BdApiUtil64.sys における Bring Your Own Vulnerable Driver (BYOVD) の脆弱性である CVE-2024-51324 に関する私の 修士論文研究 が含まれています。

NVD レコードは CVSS v3.1 ベーススコア 3.8 (低)、ベクタ AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N、CWE-269 (不適切な特権管理) を割り当てています。このスコアは本研究で文書化されたローカル攻撃の現実を反映していません。管理者がドライバをロードした後(ソーシャルエンジニアリングや任意のローカル特権昇格によって達成可能な1回限りのステップ)、サンドボックス化されたプロセスや標準ユーザープロセスを含む後続のプロセスは、追加の権限チェックなしで IOCTL を送信できます。研究者が評価した CVSS v3.1 スコア 7.8 (高)、ベクタ AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H は、ロード後の悪用の現実をより正確に捉えています。両方のスコアは技術文書で議論されています。

このドライバはデバイスオブジェクト \Device\BdApiUtil を SecurityDescriptor = NULL で作成するため、任意のプロセス(整合性レベルに関係なく)がハンドルを開いて IOCTL を送信できます。Ghidra 11.0.3 による静的解析の結果、内部メカニズムは以前文書化されたよりも重要であることが明らかになりました。ドライバは ZwOpenProcess ではなく PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) を使用しており、SeAccessCheck を完全にバイパスします。3つの IOCTL プリミティブが完全に特性評価され、そのうち2つは公開文書がありません。

私の貢献


リポジトリ構造

root@kitploit:~
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│   └── BdApiUtil64.sys              # ドライバ(配布なし)
│
├── exploit/
│   ├── exploit-explanation.md
│   └── byovd_killer.py              # メインエクスプロイト — 4つの動作モード
│
└── docs/
    ├── screenshots/
    │   ├── 01-byovd-scan.png
    │   ├── 02-byovd-scan-target.png
    │   ├── 03-byovd-load.png
    │   ├── 04-byovd-load-custom.png
    │   ├── 05-kill-name.gif
    │   ├── 06-kill-pid.gif
    │   ├── 07-kill-limit.gif
    │   ├── 08-dry-run.gif
    │   └── 09-byovd-cleanup.png
    │
    └── analysis/
        ├── 01-root-cause.md
        ├── 02-driver-analysis.md    # Ghidra RE 完全版、3つのプリミティブ、PPL テスト
        └── 03-timeline.md

クイックスタート

前提条件

  • Windows 10/11 (任意のビルド)
  • Python 3.6+
  • BdApiUtil64.sys (SHA-256: 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)
  • 管理者アカウント(LOADER モードと CLEANUP モードのみ)
  • 標準ユーザーアカウントでドライバロード後は KILLER モードが使用可能

ステップ1 — システムのスキャン

root@kitploit:~
python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe

ステップ2 — ドライバのロード(管理者権限が必要)

root@kitploit:~
python exploit/byovd_killer.py --load
python exploit/byovd_killer.py --load --driver C:\path\to\BdApiUtil64.sys
python exploit/byovd_killer.py --load --service-name MyService

ステップ3 — プロセスの強制終了(管理者権限不要)

root@kitploit:~
python exploit/byovd_killer.py --kill notepad.exe
python exploit/byovd_killer.py --pid 1234
python exploit/byovd_killer.py --kill notepad.exe --max-instances 2
python exploit/byovd_killer.py --kill notepad.exe --dry-run

ステップ4 — クリーンアップ(管理者権限が必要)

root@kitploit:~
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService

動作モード


デモ

SCANNER モード — システム情報

SCANNER モード

SCANNER モード — ターゲットプロセスの検索

SCANNER ターゲット

LOADER モード — ドライバのロード

LOADER モード

LOADER モード — カスタムパスとサービス名

LOADER カスタム

KILLER モード — プロセス名による強制終了

名前による強制終了

KILLER モード — PID による強制終了

PID による強制終了

KILLER モード — インスタンス数の制限

インスタンス制限

KILLER モード — ドライラン(シミュレーション)

ドライラン

CLEANUP モード — ドライバのアンロード

CLEANUP モード


技術概要

IOCTL 攻撃面 — 3つのプリミティブ

Ghidra 11.0.3 による BdApiUtil64.sys のリバースエンジニアリングにより、従来の公開情報よりも広い攻撃面が特定されました。

プリミティブ1 — プロセス終了 (0x800024B4)

ディスパッチチェーンは3つのレベルで構成されます。

root@kitploit:~
IOCTL 0x800024B4
  └─ FUN_00028630  (IRP_MJ_DEVICE_CONTROL ディスパッチャ)
       └─ FUN_00015230  (ラッパー: IOCTL コードとバッファサイズ = 4 バイトを検証)
            └─ FUN_000152b0  (強制終了ハンドラ — 脆弱性の所在)

再構築されたハンドラ (Ghidra):

root@kitploit:~
if ((param_1 != 0) && (param_1 != 4)) {
    PsLookupProcessByProcessId(param_1, &local_res10);
    ObOpenObjectByPointer(
        local_res10,
        0x200,      // OBJ_KERNEL_HANDLE
        0,          // PassedAccessState: NULL
        0x1fffff,   // PROCESS_ALL_ACCESS
        0,          // ObjectType: NULL
        0,          // AccessMode: KernelMode  ← SeAccessCheck をバイパス
        local_res18
    );
    ZwTerminateProcess(local_res18[0], 0);
}

なぜ KernelMode が SeAccessCheck をバイパスするのか:

root@kitploit:~
ZwOpenProcess のパス:
  NtOpenProcess → ObOpenObjectByName → SeAccessCheck
                                        (DACL、呼び出し元トークン、整合性レベルをチェック)
                                        STATUS_ACCESS_DENIED を返す可能性あり

ObOpenObjectByPointer(KernelMode) のパス:
  SeAccessCheck  ← 呼び出されない
  → PROCESS_ALL_ACCESS ハンドルが無条件に付与される

ZwOpenProcess は ドライバのインポートテーブルに存在しません。以前の情報源に基づく ZwOpenProcess を使用した説明は技術的に誤りです。

プリミティブ2 — 任意ファイル削除 (0x80002648)

ハンドラ FUN_00013bb0 は Unicode パスを受け取り、InputBufferLength ≥ 0x208 を検証して FUN_00013c10 に委譲します。サブハンドラはカーネルモードでファイルを開き(呼び出し元トークンに対する SeAccessCheck なし)、FileInformationClass = 0xD (FileDispositionInformation) の IRP_MJ_SET_INFORMATION IRP をディスパッチしてファイルを削除対象としてマークします。カーネルがアクセス可能な任意のファイルを、NTFS アクセス許可に関係なく削除できます。

プリミティブ3 — 使用中ファイル削除 (0x8000264C)

ハンドラ FUN_000139d0 は FileObject->SectionObjectPointer(FILE_OBJECT のオフセット 0x28)にアクセスし、削除 IRP をディスパッチする前に2つのフィールドを一時的に NULL に設定します。

root@kitploit:~
plVar1 = FileObject->SectionObjectPointer;
plVar1[2] = 0;  // DataSectionObject  → NULL
plVar1[0] = 0;  // ImageSectionObject → NULL

IofCallDriver(device, irp);
KeWaitForSingleObject(...);

// 完了後に復元
plVar1[2] = DataSectionObject_backup;
plVar1[0] = ImageSectionObject_backup;

IopDeleteFile は FileDispositionInformation を実行する前にこれらのポインタをチェックします。これらを NULL 化することで、ファイルがマッピングされていないように見せかけ、使用中保護をバイパスします。このプリミティブは、実行中の EDR エージェントのバイナリを、プロセスを終了せずにディスクから削除できます。

完全な EDR 排除チェーン:

root@kitploit:~
1. EDR プロセスを終了     (IOCTL 0x800024B4)
2. ディスク上の EDR バイナリを削除 (IOCTL 0x8000264C) ← メモリマップされていても動作
3. 再起動を防止           ← 実行可能ファイルがディスク上に存在しなくなる

実証テスト

PPL 耐性(プロセスカテゴリごとに10回試行)

PPL (Protected Process Light) は、このドライバからの ObOpenObjectByPointer(KernelMode) ベースの終了に抵抗する 唯一のランタイム緩和策 です。

インポートテーブル分析


ポストエクスプロイトシナリオ


フォレンジック成果物

--cleanup 後も残るもの

Event ID 7045 は、クリーンアップを含む完全な攻撃サイクルを生き残る 唯一の成果物 です。サービス名、ImagePath(完全なバイナリパス)、サービスタイプ、作成タイムスタンプが含まれます。

ログクリアは自己告訴的

wevtutil cl System を実行して Event ID 7045 を削除すると、Security チャネルに Event ID 1102 が生成され、誰がいつログをクリアしたかが記録されます。これにより、元の成果物が破壊されてもログ改ざんが検出可能になります。

攻撃者の行動結果として生じる成果物チャネル永続性
wevtutil cl SystemEvent ID 7045 削除System—

検出ルール

Sigma ルール

root@kitploit:~
title: BYOVD Attack via BdApiUtil64.sys (CVE-2024-51324)
id: a3f7c2e1-8b4d-4f9a-b6e3-2d1c9f8a7b5e
status: experimental
logsource:
  product: windows
  service: system
detection:
  selection_eventid:
    EventID: 7045
  selection_driver:
    - ServiceName|contains: 'BdApi'
    - ImagePath|contains: 'BdApiUtil64.sys'
  condition: selection_eventid and selection_driver
level: high
tags:
  - attack.defense_evasion
  - attack.t1562.001
  - attack.privilege_escalation
  - attack.t1068

完全な Sigma ルールと Sysmon 設定(SHA-256 ハッシュによる Event ID 6 + レジストリキーによる Event ID 13)は docs/detection/ で入手できます。


技術文書

文書説明
根本原因分析IRP_MJ_DEVICE_CONTROL ハンドラにおけるアクセス制御の欠落

学術的背景

本研究は、私の サイバーセキュリティ修士論文(UCAM — Campus Internacional de Ciberseguridad)の一部であり、複数の環境における N-Day 脆弱性を分析しています。

この CVE は、論文内の Windows カーネルドライバ / BYOVD ベクトルを表しており、以下を実証しています。

  • 完全な IOCTL 列挙によるカーネルドライバの攻撃面分析
  • 従来の公開記述の技術的訂正(ZwOpenProcess は存在せず、実際のメカニズムは ObOpenObjectByPointer(KernelMode))
  • これまで文書化されていなかった2つのプリミティブの発見(ファイル削除 IOCTL)
  • PPL 耐性の実験的特徴付け
  • 完全なクリーンアップサイクル後のフォレンジック成果物分析
  • CVSS スコアリング批判:公式 NVD スコアとローカル悪用の深刻度との間に文書化されたギャップ

キーワード: BYOVD · Kernel Driver · IOCTL · Ghidra · Process Termination · File Deletion · SectionObjectPointer · ObOpenObjectByPointer · Defense Evasion · CVE-2024-51324


著者

Annais Molina (devianntsec) — サイバーセキュリティ修士課程学生

GitHub LinkedIn Email


謝辞

  • NVD / NIST — CVE レコードとスコアリング
  • loldrivers.io — コミュニティ管理の脆弱ドライバインデックス
  • BlackSnufkin — 元の PoC リファレンス
  • Cisco Talos — DeadLock ランサムウェア BYOVD 分析(2025年12月)

ライセンス

MIT ライセンス — LICENSE を参照


法的免責事項

このリポジトリは、学術的な修士論文の一部として 教育およびセキュリティ研究目的のみ で提供されます。すべてのテストは、ネットワークに公開されていない隔離された仮想マシン上で実行されました。脆弱ドライバ (BdApiUtil64.sys) はこのリポジトリでは配布されていません。独立して入手する必要があります。自分が所有するシステム、または明示的な書面によるテスト許可を得たシステムでのみ使用してください。システムに対する許可のない使用は違法であり、刑事訴追される可能性があります。

© 2026 Annais Molina · サイバーセキュリティ修士論文
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
ツールをダウンロード
側面説明
技術的訂正ZwOpenProcess はインポートテーブルに存在せず、実際のメカニズムは PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) であり、無条件に SeAccessCheck をバイパスします
3つの文書化されたプリミティブプロセス終了 (0x800024B4)、任意ファイル削除 (0x80002648)、SectionObjectPointer バイパスによる使用中ファイル削除 (0x8000264C) — 最後の2つは公開文書なし
4つの動作モードLOADER、KILLER、SCANNER、CLEANUP — 完全なライフサイクル管理
SHA-256 検証ロード試行前にドライバハッシュを検証
PPL 実証テストプロセスカテゴリごとに10回試行し、PPL が唯一のランタイム緩和策であることを確認
フォレンジック分析クリーンアップ後の永続的な Event ID 7045、自己告訴的なログクリア成果物としての Event ID 1102
検出ルールSigma ルールと Sysmon 設定(ハッシュによる Event ID 6 + レジストリキーによる Event ID 13)
CVSS 再評価公式 NVD スコア (3.8 低) と研究者評価によるローカル悪用の深刻度 (7.8 高) との差異を文書化
モードコマンド権限説明
SCANNER--scan任意のユーザーシステムおよびドライバのステータス情報
LOADER--load管理者カーネルサービス作成によるドライバのロード
KILLER--kill / --pid任意のユーザーIOCTL によるプロセス終了
CLEANUP--cleanup管理者ドライバサービスの停止と削除
IOCTLハンドラプリミティブ事前の文書
0x800024B4FUN_000152b0プロセス終了部分あり(メカニズムが不正確)
0x80002648FUN_00013bb0任意ファイル削除なし
0x8000264CFUN_00013850使用中ファイル削除(SectionObjectPointer バイパス)なし
プロセスPPL アクティブ終了可能原因
notepad.exeいいえ✅ 10/10保護なし
regedit.exeいいえ✅ 10/10保護なし
spoolsv.exeいいえ✅ 9/10SCM が1件で再起動
MsMpEng.exeいいえ(テスト環境では PPL なし)✅ 8/10わずかなタイミングのばらつき
lsass.exeいいえ(RunAsPPL なし)✅ 6/10状態のばらつき
csrss.exeはい(無条件 PPL)❌ 0/10STATUS_ACCESS_DENIED
存在する存在しない
PsLookupProcessByProcessIdZwOpenProcess
ObOpenObjectByPointerSeAccessCheck
ZwTerminateProcessSePrivilegeCheck
PsGetCurrentProcess
IoGetRequestorProcess
シナリオターゲット影響
EDR/AV の終了MsMpEng.exe、SentinelAgent.exe防御回避
EDR バイナリの削除(使用中)ディスク上の EDR 実行可能ファイル終了後の再起動を防止
監査ログの破壊EventLog サービスフォレンジックの改ざん
保護されたプロセスのバイパスlsass.exe(RunAsPPL なし)資格情報アクセスの促進
ランサムウェアの事前暗号化準備セキュリティエージェント完全な防御回避チェーン
成果物クリーンアップ後の状態
SCM 内のサービス削除済み
driverquery 内のドライバ削除済み
デバイスオブジェクトアクセス不可
レジストリキー削除済み
Event ID 7045永続 — sc delete では削除不可
wevtutil cl SystemEvent ID 1102 生成Security永続
ドライバ分析Ghidra RE 完全版、3つの IOCTL プリミティブ、PPL テスト、インポートテーブル分析
CVE タイムライン発見、開示、パッチの時系列