1. 簡介
本篇報告探討如何實作一個 Windows Kernel Minifilter driver,以進行即時的勒索軟體偵測。透過攔截與檔案重新命名及寫入操作相關的 I/O 請求封包,所提出的系統能夠識別惡意模式,例如高熵加密(High-entropy encryption)以及已知的勒索軟體副檔名。本研究亦分析了現代勒索軟體為癱瘓端點偵測與回應解決方案所採用的對抗策略,強調了核心層級可視性的必要性。
1. 簡介
勒索軟體仍是組織資料完整性所面臨的重大威脅之一。現代勒索軟體變種已從簡單的使用者模式加密工具,演進為複雜的、具核心意識的惡意負載(Kernel-aware payloads),會主動攻擊安全軟體 [2] 。為應對這些威脅,安全解決方案必須在等同於或深於攻擊者的層級上運作。Windows Filter Manager 提供了一個開發微過濾器驅動程式(Minifilter drivers)的框架,這些驅動程式位於 I/O 堆疊中,用以觀察和修改檔案系統事件 [1] 。本研究專注於利用微過濾器在勒索軟體攻擊的早期階段進行偵測,特別是在檔案重新命名和加密階段。
2. 微過濾器(Minifilter)偵測的架構概觀
此偵測引擎建構於 Windows 微過濾器架構之上。與傳統的篩選器驅動程式(legacy filter drivers)不同,微過濾器使用篩選管理器,它簡化了註冊程序,並為 I/O 操作提供了一個結構化的 Callback 機制。此偵測邏輯的核心位於
IRP_MJ_SET_INFORMATION
和
IRP_MJ_WRITE
的 Callback functions 中。
如上圖所示,微過濾器在請求到達底層檔案系統驅動程式之前就將其攔截。這種「扼要關卡」的可視性對於偵測未經授權的重新命名至關重要,而這正是勒索軟體活動的常見指標 [1] 。
3. 技術實作與程式碼分析
實作方式涉及註冊一個
FLT_REGISTRATION
結構,該結構定義了特定 I/O 操作的進入點。以下程式碼片段展示了如何註冊用於檔案建立和中繼資料(Metadata)修改的 callbacks。
- // Registration data for the Minifilter
- const FLT_REGISTRATION g_filter_registration = {
- sizeof(FLT_REGISTRATION), // Size of the structure
- FLT_REGISTRATION_VERSION, // Version
- 0, // Flags
- NULL, // Context registration
- g_callbacks, // Operation registration (IRP_MJ_CREATE, IRP_MJ_SET_INFORMATION)
- InstanceFilterUnloadCallback, // Unload callback
- InstanceSetupCallback, // Setup callback
- InstanceQueryTeardownCallback, // Teardown callback
- NULL, NULL, NULL, NULL, NULL // Reserved
- };
- // Callback array defining hooked operations
- CONST FLT_OPERATION_REGISTRATION g_callbacks[] = {
- { IRP_MJ_CREATE, 0, PreOperationCreate, PostOperationCreate },
- { IRP_MJ_SET_INFORMATION, 0, PreOperationSetInformation, PostOperationSetInformation },
- { IRP_MJ_OPERATION_END }
- };
3.1 偵測惡意重新命名
勒索軟體常在加密後將檔案重新命名為特定副檔名(例如 .lockbit, .HLJkNskOq)。透過監控
IRP_MJ_SET_INFORMATION
操作中,資訊類別為
FileRenameInformation
的請求,驅動程式可以擷取新的檔案名稱,並將其與已知的惡意副檔名列表進行比對
[1]
。
- // Handling Post-Operation for SetInformation
- FLT_POSTOP_CALLBACK_STATUS FLTAPI PostOperationSetInformation(
- PFLT_CALLBACK_DATA data,
- PCFLT_RELATED_OBJECTS flt_objects,
- PVOID completion_ctx,
- FLT_POST_OPERATION_FLAGS flags
- ) {
- // Extract the information class to check for renames
- FILE_INFORMATION_CLASS info_class = data->Iopb->Parameters.SetFileInformation.FileInformationClass;
- if (info_class == FileRenameInformation || info_class == FileRenameInformationEx) {
- PFLT_FILE_NAME_INFORMATION name_info = NULL;
- // Retrieve normalized file name information
- NTSTATUS status = FltGetFileNameInformation(
- data,
- FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT,
- &name_info
- );
- if (NT_SUCCESS(status)) {
- FltParseFileNameInformation(name_info);
- // Logic to compare name_info->Extension with known ransomware patterns
- // ...
- FltReleaseFileNameInformation(name_info);
- }
- }
- return FLT_POSTOP_FINISHED_PROCESSING;
- }
4. 對手戰術:EDR 癱瘓
儘管微過濾器提供了強大的偵測能力,但像 MEDUSA 這類進階勒索軟體變種會利用自訂驅動程式(例如 ABYSSWORKER)來主動停用安全解決方案 [2] 。這些「EDR-Killers」透過識別安全軟體的行程識別碼,並剝奪其存取權限或註銷其 Kernel callbacks 來運作 [2] 。
| 技術 | 行為者 | 機制 | 影響 |
|---|---|---|---|
| Minifilter Hooking | 防禦者 | 透過 FltMgr 攔截 IRP | 即時掌握 I/O 可視性 |
| Callback 移除 | 攻擊者 | 直接核心物件操弄 | 使 EDR/AV 解決方案失去作用 |
| 存取權限剝奪 | 攻擊者 | 暴力搜尋行程識別碼/存取權限 | 阻止安全程序互動 |
例如,ABYSSWORKER 驅動程式會對所有正在運行的行程執行暴力搜尋,以找到屬於安全用戶端的存取權限,並將其存取權限修改為
0x8bb
,從而有效地使其失效
[2]
。這凸顯了保護安全驅動程式本身免受未授權存取的重要性。
5. 進階偵測:熵值分析(Entropy Analysis)
僅靠靜態的副檔名比對無法應對多型勒索軟體。一種更先進的方法是監控
IRP_MJ_WRITE
操作,並計算資料緩衝區的 Shannon entropy。加密資料通常表現出高熵值。
透過關聯單一程序跨多個目錄的高熵值寫入操作,即使檔案副檔名保持不變,微過濾器也能識別加密活動 [1] 。
6. 結論
透過微過濾器驅動程式進行核心層級監控,是現代勒索軟體防禦的基礎組成部分。透過攔截檔案重新命名和分析寫入模式,防禦者可以實現高準確度的偵測。然而,能夠癱瘓 EDR 的驅動程式興起,要求我們必須增加額外的保護措施,例如驅動程式簽署強制執行以及為安全程序提供自我保護機制。未來的研究應專注於將機器學習模型直接整合到核心中,以實現更具韌性的行為分析。