核心驅動程式架構
Xdows Security 的 R0 端由 Xdows-Security-Driver 倉庫交付。它包含兩個核心元件,隨同一驅動程式套件發布,並隨「驅動程式防護」一同啟停:
| 元件 | 類型 | 作用 |
|---|---|---|
Xdows-Security-Driver | 執行於 FltMgr 的 KMDF 迷你篩選器驅動程式 | 產生處理程序、檔案、控制代碼、行為、開機和登錄檔事件;在使用者模式做出決策前保留受保護操作 |
Xdows-Security-BootFilter | 獨立的 WDM 儲存體篩選驅動程式 | 保護系統磁碟的原始開機區域寫入 |
主驅動程式以檔案系統驅動程式身分註冊,於 FSFilter Activity Monitor 載入順序群組中設定 StartType = DEMAND_START,相依於 FltMgr,並使用高度值 370030。
職責邊界
驅動程式倉庫擁有 Public.h——協定常數、IOCTL、事件/決策/狀態/授權/處理程序/記錄結構——以及核心事件產生、待處理佇列與逾時行為、權杖雜湊、自我防護、注入防護和記錄緩衝。
主程式倉庫在 Protection\DriverProtocol.cs 中鏡像 Public.h,擁有 Protection\DriverBridgeClient.cs 中的橋接與 Protection\DriverProtection.cs 中的策略,並透過 DriverInstaller / DriverPackageInstaller 安裝套件。模型倉庫擁有 Xdows-Model-Native.dll 的 C ABI、ONNX Runtime 相依項目和 ONNX 模型檔案;驅動程式本身從不載入模型。
任何對 Public.h 的變更,只要改動了結構佈局、列舉值、IOCTL 代碼、字串緩衝長度、權杖長度或裝置路徑,就必須在同一次變更中一併更新 DriverProtocol.cs、IOCTL 行為有變時的 DriverBridgeClient.cs、事件或決策語意有變時的 DriverProtection.cs,以及使用說明文件。
協定版本
目前主驅動程式協定版本為 9。BootFilter 使用其獨立的協定 v1。兩者不能互換。
協定 7 加入了 Behavior 事件、共用的 BehaviorType 承載、各類型狀態計數器,以及 R0 行為模組和能力位。協定 9 加入了 SetBootProtection(0x80E)、SetRegistryProtection(0x80F)、RegistryWrite 事件(類型 11)、能力位 0x200 和模組位 0x40。
之後的每次新增都停留在協定 9 上,作為純粹的附加區塊,因此較舊的主程式組建仍能對較新的驅動程式運作,反之亦然。新的列舉值一律附加在後;既有值永遠不會被重新賦予新意義。
IOCTL 對應
| IOCTL | 功能 | 用途 |
|---|---|---|
IOCTL_XDOWS_SECURITY_REGISTER_CLIENT | 0x801 | 註冊主程式橋接並回傳一次性的提權授權權杖 |
IOCTL_XDOWS_SECURITY_HEARTBEAT | 0x802 | 維持橋接存活狀態 |
IOCTL_XDOWS_SECURITY_GET_NEXT_EVENT | 0x803 | 取出一個待處理的防護事件 |
IOCTL_XDOWS_SECURITY_SUBMIT_DECISION | 0x804 | 為某事件回傳 Allow、Block 或 Timeout |
IOCTL_XDOWS_SECURITY_GET_STATE | 0x805 | 查詢橋接和佇列狀態 |
IOCTL_XDOWS_SECURITY_DISCONNECT_CLIENT | 0x806 | 明確中斷橋接連線 |
IOCTL_XDOWS_SECURITY_REGISTER_PROTECTED_PROCESS | 0x807 | 為主程式處理程序註冊自我防護 |
IOCTL_XDOWS_SECURITY_SET_VOLUNTARY_EXIT | 0x808 | 告知驅動程式主程式即將刻意結束 |
IOCTL_XDOWS_SECURITY_AUTHORIZED_SHUTDOWN | 0x809 | 使用一次性關機權杖停止防護 |
IOCTL_XDOWS_SECURITY_GET_NEXT_LOG | 0x80A | 取出一筆緩衝的驅動程式記錄項目 |
IOCTL_XDOWS_SECURITY_SET_STARTUP_PROTECTION | 0x80B | 同步開機項目自我防護 |
IOCTL_XDOWS_SECURITY_QUERY_PROCESSES | 0x80C | 權杖授權的分頁式核心處理程序快照 |
IOCTL_XDOWS_SECURITY_OPERATE_PROCESS | 0x80D | 通過受保護用戶端和權杖驗證後,暫停、繼續或終止處理程序 |
IOCTL_XDOWS_SECURITY_SET_BOOT_PROTECTION | 0x80E | 設定 EFI 和 BCD 開機防護 |
IOCTL_XDOWS_SECURITY_SET_REGISTRY_PROTECTION | 0x80F | 設定 R0 登錄檔防護規則 |
IOCTL_XDOWS_SECURITY_GET_NEXT_EVENTS | 0x810 | 以一次非阻塞呼叫取出最多 16 個未交付事件 |
IOCTL_XDOWS_SECURITY_SET_BEHAVIOR_RULES | 0x811 | 取代宣告式行為規則集(能力位 0x1000) |
IOCTL_XDOWS_SECURITY_SET_INITIATOR_EXCLUSIONS | 0x812 | 取代發起者排除清單(能力位 0x2000) |
處理程序管理請求同時需要已註冊且自我防護的主處理程序身分,以及註冊時核發的授權權杖。驅動程式會拒絕 PID 0、PID 4、呼叫中的主處理程序、受保護處理程序和關鍵處理程序。
能力位與模組位
驅動程式會回報能力,讓主程式能優雅降級,而不是發出不受支援的下行呼叫:
| 能力 | 值 | 意義 |
|---|---|---|
CAP_PRIORITY_QUEUE | 0x1 | 優先順序事件佇列 |
CAP_DIRTY_WRITE_COALESCING | 0x2 | 合併重複的髒寫入 |
CAP_BUILD_ID | 0x4 | 驅動程式回報建置識別碼 |
CAP_STARTUP_SELF_PROTECT | 0x8 | 開機項目自我防護 |
CAP_USER_DECISION_HOLD | 0x10 | 保留操作以等待使用者決策 |
CAP_PROCESS_MANAGEMENT | 0x20 | 核心處理程序管理 |
CAP_ENHANCED_SELF_PROTECT | 0x40 | 增強自我防護 |
CAP_R0_BEHAVIOR_PROTECTION | 0x80 | R0 行為模組 |
CAP_R0_BOOT_PROTECTION | 0x100 | R0 開機防護 |
CAP_R0_REGISTRY_PROTECTION | 0x200 | R0 登錄檔防護 |
CAP_ASYNC_REVIEW | 0x400 | 非關鍵事件可非同步審查 |
CAP_EVENT_BATCH | 0x800 | 批次取出事件 |
CAP_RULE_INTERPRETER | 0x1000 | 宣告式行為規則解譯器 |
CAP_INITIATOR_EXCLUSION | 0x2000 | 發起者排除清單 |
模組位回報哪些防護模組處於作用中:TokenAuth 0x1、Process 0x2、File 0x4、Injection 0x8、SelfProtect 0x10、Behavior 0x20、Registry 0x40。
事件與行為類型
Behavior 事件一律攜帶 ThreatConfirmed 旗標,並在任何路徑解析或 UI 工作之前先進入使用者決策保留。行為類型值如下:
| 值 | 名稱 | 備註 |
|---|---|---|
| 0 | None | |
| 1 | VssDeletion | 陰影複製銷毀 |
| 2 | HiddenPowerShell | |
| 3 | EncodedCommand | |
| 4 | PolicyBypass | 基礎設施失敗時放行 |
| 5 | DownloadExecute | |
| 6 | LolbinAbuse | |
| 7 | ProcessInjection | 關聯危險的處理程序控制代碼請求 |
| 8 | ThreadInjection | 關聯危險的執行緒控制代碼請求 |
| 9 | ParentProcessChain | |
| 10 | AutorunInf | |
| 11 | ProtectedProcessTerminate | |
| 12 | SensitiveProcessHandle | |
| 13 | DestructiveDirectoryDelete | 基礎設施失敗時放行 |
| 14 | OwnershipEscalation | 基礎設施失敗時放行 |
| 15 | SystemControlCommand | 基礎設施失敗時放行 |
| 16 | EfiMount | mountvol + /s;拒絕優先 |
| 17 | OobeReset | sysprep + /oobe / /generalize / /audit;拒絕優先 |
| 18 | SystemDirectoryRansomware | 保留:純粹在核心中強制執行,永遠不會到達使用者模式 |
決策語意
Allow:繼續原有操作。Block:拒絕原有操作。Timeout:使用者模式決策逾時;已確認威脅對應為拒絕行為。
當橋接或模型在威脅被確認之前失敗時,使用者模式會放行並記錄該失敗。高可信度的命令規則保持其核心拒絕優先行為,原則略過維持放行優先,注入則維持其既有的放行優先基礎設施策略。當威脅已確認而使用者拒絕或逾時時,決策為 Block 或 Timeout。