摘要

端點偵測與回應(Endpoint Detection and Response, EDR) 解決方案已成為現代組織資安的基石,透過行為分析、API hooking 和即時監控來識別並防範惡意攻擊。然而,複雜的規避技術持續不斷地出現。本報告分析了一種繞過 EDR 控制的方法,透過使用合法或有漏洞的驅動程式來進行原始磁碟讀取,並直接解析 New Technology File System (NTFS),以在不觸發傳統資安機制的情況下存取敏感檔案。這項技術有效地規避了檔案鎖定、存取控制清單 (Access Control Lists, ACL) 和使用者空間 API 監控,對現有的偵測模型構成了重大挑戰。文中將詳細探討 NTFS 解析程序的技術複雜性、驅動程式互動的角色以及潛在的防禦對策。

防禦者的盲區:解析惡意驅動程式與底層磁碟讀取的新型攻擊路徑 | 資訊安全新聞

簡介

資安攻擊技術的演進持續挑戰著 EDR 等防禦性資安工具的能力。雖然 EDR 解決方案擅長監控使用者空間的 API 呼叫和行為模式,但它們通常缺乏對透過核心模式驅動程式直接執行的底層磁碟操作的能見度。本報告詳細介紹了一種利用原始磁碟存取(可透過預設的 Windows 驅動程式 ( disk.sys ) 或第三方有漏洞的驅動程式)的技術,直接從儲存裝置讀取區塊資料。攻擊者隨後解析原始 NTFS 資料結構,即可在不呼叫受 EDR 產品嚴密監控的標準檔案 I/O 常式的情況下,提取敏感檔案,例如 Security Account Manager (SAM) 資料庫、Local Security Authority (LSA) secrets 和 Active Directory 資料庫 (NTDS.dit)。這種方法突顯了許多主要關注使用者空間活動、並經常預設信任核心層級操作的資安解決方案在能見度上的關鍵缺口。

技術背景

EDR 偵測能力與限制

現代 EDR 平台採用多面向的偵測方法,包括基於簽章的掃描、靜態分析、啟發式和行為偵測、Import Address Table (IAT) 檢測、Antimalware Scan Interface (AMSI)、Event Tracing for Windows (ETW) 和 API hooking。API hooking,特別是針對 ntdll.dll kernel32.dll 中函式的 hooking,讓 EDRs 能夠攔截和審查與程序注入、記憶體配置和檔案存取相關的系統呼叫。然而,這些機制主要在使用者空間中有效。核心層級操作,特別是涉及透過合法驅動程式直接存取硬體的那些操作,通常超出常規 EDR 監控的範圍。這造成了一個可被在儲存子系統層級運作的技術所利用的盲點。

Windows 驅動程式簽署與核心存取

微軟要求核心模式驅動程式必須經過數位簽署才能在現代 Windows 系統上載入。這項政策旨在防止任意的惡意程式碼在核心中執行。然而,為了向後相容性,存在一些例外。在 2015 年 7 月 29 日之前簽發並連結至受支援的交叉簽署 Certificate Authority (CA) 的實體憑證所簽署的驅動程式,仍然允許在系統上載入。Threat actor 已經利用了這項規定,使用此一時期的已遭入侵、過期的憑證來簽署惡意驅動程式。此外,「攜帶你自己的漏洞驅動程式」(Bring Your Own Vulnerable Driver, BYOVD) 技術涉及利用現有、合法簽署驅動程式中的已知漏洞,以達到核心層級權限並執行惡意操作。本報告所分析的技術可以利用有漏洞的驅動程式,或者,值得注意的是,在攻擊者已擁有系統管理員權限的許多情況下,也能利用標準的 Windows disk.sys 驅動程式,從而無需單獨的有漏洞元件。

NTFS 結構簡介

New Technology File System (NTFS) 是一個複雜的日誌型檔案系統,它使用多個關鍵元件來組織磁碟上的資料。了解這些結構對於解析原始磁碟資料至關重要:

  • 主要開機記錄 (Master Boot Record, MBR) / GUID Partition Table (GPT): 位於實體磁碟的最開頭 (Logical Block Address - LBA 0),包含定義每個磁碟分割區起點和終點 LBA 的分割區表。
  • 磁碟區開機記錄 (Volume Boot Record, VBR): 位於每個 NTFS 磁碟分割區的開頭。它包含有關磁碟區的關鍵 metadata,包括每區段位元組數、每叢集區段數,以及 $MFT $MFTMirr 的起始叢集號碼。
  • 主要檔案表 (Master File Table, MFT): NTFS 的核心,作為一個資料庫,包含磁碟區上每個檔案和目錄的記錄。每筆記錄儲存 metadata(如 $STANDARD_INFORMATION $FILE_NAME 等屬性)以及指向檔案資料的指標。
  • Data Runs: 在 MFT 記錄的 $DATA 屬性中,Data runs 是壓縮過的陣列,指定了檔案資料儲存在磁碟上的邏輯叢集號碼 (Logical Cluster Numbers, LCN) 和叢集長度。解析這些 runs 是定位檔案內容的關鍵。
flowchart TD A[Access Raw Disk via driver.sys] --> B[Read LBA 0: MBR/GPT] B --> C[Parse Partition Table] C --> D[Find NTFS Partition LBA] D --> E[Read NTFS VBR] E --> F[Extract MFT Start Cluster, Sectors per Cluster] F --> G[Calculate MFT Start LBA] G --> H[Read & Parse MFT Records] H --> I[Locate Target File Record
e.g., SAM, SYSTEM, SECURITY] I --> J[Parse $DATA attribute & Data Runs] J --> K[Calculate Data LBAs from Cluster Runs] K --> L[Read Raw Data Clusters from Disk] L --> M[Reconstruct File Content]

圖 1:透過原始磁碟解析提取檔案的流程圖

繞過技術:深度剖析

階段 1:取得原始磁碟存取權

初始階段涉及獲得對實體磁碟的低階讀取存取權。這可以透過多種路徑實現:

  1. 透過 disk.sys 直接存取: 擁有系統管理員權限的攻擊者可以直接使用標準的 Windows disk.sys 驅動程式與 \.\PhysicalDriveX 物件互動。這需要以必要的權限 ( GENERIC_READ ) 來開啟實體磁碟的 handle。
  2. 利用有漏洞的驅動程式: 如果沒有系統管理員權限,攻擊者可以利用一個有漏洞的驅動程式,該驅動程式暴露出讀取或寫入任意實體記憶體或磁碟區塊的功能。例如, eudskacs.sys 驅動程式 (CVE-2025-50892) 被發現暴露出簡單的 IOCTL handlers,這些 handlers 將使用者模式請求轉換為對 disk.sys 或更低階驅動程式的呼叫,有效地繞過使用者空間的存取檢查。

特別是當涉及有漏洞的驅動程式時,請求流程可概述如下:

sequenceDiagram participant U as User-Mode Malicious App participant V as Vulnerable Driver
(e.g., eudskacs.sys) participant D as disk.sys participant P as Port/Miniport Driver
(e.g., storport.sys) participant H as Disk Hardware U->>V: IOCTL Request
(Read Sector at Offset X) V->>D: Forwarded Disk Request D->>P: SCSI Request Block (SRB) P->>H: ATA/SCSI Command H-->>P: Raw Sector Data P-->>D: Data D-->>V: Data V-->>U: Data

圖 2:使用有漏洞的驅動程式進行原始磁碟存取的操作順序

階段 2:從原始資料解析 NTFS

一旦建立了原始區塊讀取能力,攻擊者必須從原始位元組中重組檔案內容。這個程序涉及以程式化方式導覽 NTFS 結構:

步驟 1:定位 NTFS 分割區。 攻擊者讀取 LBA 0(第一個區塊)以取得 MBR。MBR 包含分割區表,該表識別每個分割區的起始 LBA 和大小。對於 GPT 磁碟,資料結構更為複雜但作用相似。

步驟 2:解析 VBR。 攻擊者尋找到目標 NTFS 分割區的起始 LBA 並讀取 VBR(通常是前 512 個位元組)。從 VBR 中,可以提取關鍵參數:

  • BytesPerSector (例如 512)
  • SectorsPerCluster (例如 8)
  • $MftStartLcn (MFT 開始的邏輯叢集號碼)
  • $MftMirrStartLcn (MFT mirror 開始的邏輯叢集號碼)
MFT 的起始 LBA 計算方式為: MFT_Starting_LBA = Partition_Start_LBA + ($MftStartLcn * SectorsPerCluster)

步驟 3:解析主要檔案表 (Master File Table, MFT)。 MFT 是一個連續的檔案,儘管它可能會變得分散。攻擊者從 MFT_Starting_LBA 開始讀取區塊。每個 MFT 記錄都有固定的位元組大小(通常為 1024 或 4096 位元組,可從 VBR 中識別)。攻擊者必須遍歷 MFT 記錄,直到找到目標檔案的記錄(例如 C:\Windows\System32\config\SAM )。這涉及解析每筆記錄中的 $FILE_NAME 屬性並與期望的更新進行比較。

步驟 4:提取 Data Runs。 一旦定位到正確的 MFT 記錄,攻擊者檢查其 $DATA 屬性。對於小型檔案,資料可能就位於 MFT 記錄本身內。對於像登錄檔配置單元這樣的大型檔案,資料是非常駐的(non-resident),而 $DATA 屬性包含 data runs。Data runs 是編碼過的陣列,其中每個元素代表一個 (LCN, RunLength) 配對。攻擊者解碼這些 data runs 以取得檔案資料所佔用的叢集清單。

步驟 5:讀取檔案內容。 利用 data runs 中的叢集清單,攻擊者計算出對應的 LBAs: LBA = Partition_Start_LBA + (Cluster_Number * SectorsPerCluster) 。然後他們讀取每個連續 data run 的區塊。從這些區塊中讀取的原始資料構成了檔案的內容,可以重組並儲存在本地以進行後續處理(例如,使用 Secretsdump 等工具提取密碼 hashes)。

相較於傳統方法的優勢

這項技術提供了幾項規避優勢:

  • 繞過檔案鎖定: Windows Kernel 獨佔地鎖定 SAM 和 SYSTEM 配置單元等檔案。標準的使用者模式 API ( CreateFile ReadFile ) 無法獲得這些檔案的讀取 handle。原始磁碟讀取在此鎖定機制之下運作。
  • 避免使用者空間 API hooking: 由於檔案不是透過 CreateFile ReadFile 存取,因此 EDR 在這些函式上設置的 hook 無關緊要。讀取操作是透過對驅動程式的 DeviceIoControl 呼叫來執行的。
  • 規避 ACL 檢查: 檔案權限是由 Windows 物件管理員在 API 呼叫的更新中強制執行的。直接磁碟存取不會經過此更新,因此敏感檔案上的 ACL 被繞過。
  • 最少的記錄: 用於 dump 配置單元的 RegSaveKey 等操作會產生記錄(例如,事件 ID 4656 - 請求了物件的 handle)。在預設的設定下,原始磁碟讀取可能不會產生類似的資安記錄,提供更高的隱匿性。
  • 擊敗部分基於虛擬化的資安 (Virtualization-Based Security, VBS): 雖然 Credential Guard 保護 LSASS 記憶體,但 SAM 和 SECURITY 配置單元仍然在磁碟上。即使 Credential Guard 啟用,原始磁碟存取仍有可能提取這些檔案,因為它在隔離機制的範圍之外運作。

偵測與緩解策略

偵測此類攻擊需要將重點從單純監控使用者空間 API 轉移到納入核心層級活動和異常的讀取模式。

潛在的偵測途徑

  • 驅動程式載入監控: 嚴密監控驅動程式的載入,特別是那些在 2015 年 7 月之前簽署的憑證或不屬於標準基準線的驅動程式。審查那些暴露出通用 IOCTL 磁碟或記憶體存取功能的驅動程式。
  • 核心層級 EDR 元件: 部署具有強大核心模式驅動程式的 EDR 解決方案,該方案可以監控可疑的直接磁碟存取模式,即使它們源自看似合法的驅動程式如 disk.sys
  • ETW 提供者監控: 嚴密分析來自 Microsoft-Windows-Threat-Intelligence ETW 提供者的事件。雖然此提供者記錄了一些核心層級的操作(例如 NtReadVirtualMemory ),但其對原始磁碟操作的涵蓋範圍可能有限。增強 ETW 追蹤以捕捉更多與磁碟相關的事件可以產生有價值的遙測資料。
  • 異常的程序行為: 偵測具有系統管理員權限的程序,這些程序對實體磁碟裝置 ( \.\PhysicalDriveX ) 執行大量讀取操作,而沒有相應的合法理由(例如,不是備份或磁碟公用程式應用程式)。
  • SCSI 指令記錄: 在進階監控平台上,記錄和分析發給儲存裝置的 SCSI 指令有助於識別針對特定區塊、存放關鍵檔案的異常讀取請求模式。

緩解建議

  • 特權存取管理 (Privileged Access Management, PAM): 嚴格遵守最小權限原則。限制系統管理員權限,以最大限度地減少可以載入驅動程式或直接與硬體裝置互動的使用者和帳戶數量。
  • 驅動程式白名單: 實施政策,只允許已知的、必要的驅動程式載入到關鍵系統上。微軟的 Vulnerable Driver Blocklist 是一個起點,但組織應維護自己的精選清單。
  • 安全開機和程式碼完整性: 在強制模式下強制執行 Secure Boot 和 Windows Defender Application Control (WDAC) 或類似的程式碼完整性政策。這可以防止未經簽署或未經組織政策明確批准的驅動程式載入,從而有效地阻止 BYOVD 攻擊。
  • 網路區段劃分與監控: 由於這項技術通常需要預先獲得系統管理員存取權,它通常發生在攻擊的後期階段。強大的網路資安監控可以偵測到在成功 dump 認證後可能發生的橫向移動和異常的資料傳輸。
  • 多層防禦: 承認沒有單一控制是萬無一失的。將 EDR 與網路偵測與回應 (Network Detection and Response, NDR) 解決方案相結合,後者分析網路流量中是否存在認證竊取和橫向移動的跡象,即使端點已遭入侵,也能提供能見度。

結論

利用原始磁碟讀取來提取檔案的技術,代表了一種規避 EDR 資安控制的重要且複雜的方法。透過在儲存堆疊中的低層級運作並避開受監控的使用者空間 API 路徑,這種方法有效地規避了依賴 hooking 的檔案鎖定、ACL 和行為偵測。該技術的核心不僅在於獲得原始磁碟存取權(這可透過管理員權限或驅動程式漏洞來實現),還在於對 NTFS 檔案系統結構進行複雜的離線解析,以直接從其在磁碟上的叢集位置定位和重組目標檔案。

這種方法凸顯了資安領域的一個關鍵挑戰:防禦與攻擊之間的不對稱性。防禦者必須保護無數潛在的攻擊向量和層級,而攻擊者只需要找到並利用一個弱點。此類技術的持續存在,凸顯了防禦深度策略的必要性,這些策略應超越使用者空間監控。未來的防禦工作必須將核心層級操作、驅動程式攻擊和低階系統事件的更高能見度納入考量,以偵測表明合法系統功能被濫用的異常行為。此外,持續研究如何強化儲存子系統和開發更精密的行為分析,專注於資產關鍵資料存取模式,對於應對這些進階規避技術至關重要。