Black Hat Europe 2025 | Unveiling System Management Mode Memory Corruption Vulnerability Via Fuzzing
三句話摘要
研究人員提出 SMMFuzz 工具,對 x86 最高權限層(Ring -2 / System Management Mode)的 SMI Handler 進行 Fuzzing,自動發現 BIOS 韌體中的記憶體損壞漏洞。 SMMFuzz 透過「相容層插入 + Fuzz 驅動初始化 + Handler 自動分群 + 野指標攔截重導向」的組合設計,將 Ring -2 SMM 韌體的 Fuzzing 效率提升至 4 倍,並在真實商業 BIOS 中找到可被利用的記憶體損壞漏洞,證明針對最高特權固件層的自動化漏洞挖掘是可行且高效的。 Ring -2 是整個系統的信任根:SMM 運行於 SMRAM,連 Ring-0(OS kernel)都無法存取,一旦取得 Ring -2 控制權,攻擊者可讀取 SMRAM 私有資料或任意寫入,繞過所有 OS 層防護。
重點整理
重點- 1
Ring -2 是整個系統的信任根:SMM 運行於 SMRAM,連 Ring-0(OS kernel)都無法存取,一旦取得 Ring -2 控制權,攻擊者可讀取 SMRAM 私有資料或任意寫入,繞過所有 OS 層防護。
- 2
再宿主(Rehosting)是核心難題:廠商 SMM 模組為閉源二進位,依賴專有 DXE Protocol 與特定 HOB 資料,且模組之間透過全域變數和 Protocol 互相干擾,必須同時解決硬體模擬、初始化相依性與多 Handler 語義推斷三大問題。
- 3
智能分組策略提升 Fuzzing 效率:SMMFuzz 依「共享全域變數」和「共享 Protocol」兩項約束,將 SMI Handler 自動分群,以群為單位 Fuzzing,避免隨機排列組合浪費效能,同時覆蓋 Handler 間的交互觸發路徑。
- 4
野指標攔截解決巢狀結構推斷:面對 void pointer 層層巢狀的輸入結構,SMMFuzz 不做符號執行或靜態分析,而是攔截所有 SMRAM 外的記憶體存取,將其重導向至預先填充 Fuzz 資料的位址,自動實現指標語義推斷。
實用技巧與重點
乾貨- 架構資訊
- x86 特權層:Ring 3(用戶空間)→ Ring 0(OS Kernel)→ Ring -2(SMM)
- 觸發 SMI 的 IO Port:B2h、B3h(可由軟體寫入手動觸發)
- 威脅模型假設
- 攻擊者已控制 Ring 0 + Ring 3
- 可隨時觸發 SMI(透過寫 IO Port 或插入惡意外設)
- 目標:任意讀/寫 SMRAM,或直接提權至 Ring -2
- SMMFuzz 三階段流程
- Composing Phase:從廠商韌體提取 SMM 模組,嵌入自製基礎設施韌體形成 Composite Firmware
- Initialization Phase:以 Fuzzing 驅動模組初始化函數,對 IO access、HOB data、專有 DXE Protocol 三類資料提供 Fuzz 輸入
- Fuzzing Phase:按分群選取 Handler,填充輸入緩衝區,觸發 SMI,攔截記憶體存取,監控崩潰
- Bug Oracle — 可偵測 5 類漏洞
- SMM Callout(從 SMM 直接跳到 SMM 外部)
- Unchecked Input
- Double Fetch
- Out-of-Bound Memory Access
- Division by Zero
- 評估數據
- 代碼覆蓋率:比 state-of-the-art(2022/2023)高 4 倍
- 真陽性率:高於 EFI Explorer(IDA Pro 靜態分析工具),誤報率大幅低於對比 Fuzzer
- 模組載入率:約 50% 的廠商 SMM 模組與 Handler 被成功載入並註冊(不啟用 Fuzzing 初始化則更低)
- Fuzzing 執行速度:超過 300 executions/sec,測試中發現 6 個 crash
- 測試韌體廠商:Alienware、ASUS、HP 等多家筆電品牌
- 真實案例:ASUS BIOS Double Fetch 漏洞
- V0 從非 SMRAM 區域讀取(可被攻擊者控制)
- V0 先被用作指標解引用,數值檢查後再次讀取作為函式指標陣列索引
- 兩次讀取之間無鎖保護 → 典型 Double Fetch,可導致任意程式碼執行
- 工具形式:Docker 映像(演講後公開),指令列操作:`compose` → `fuzz`,需指定 OVMF code/vars 檔案及 timeout
- 研究單位:MPI Security and Privacy(德國)+ 上海交大 GoSSIP Lab
結論
結論“SMMFuzz 透過「相容層插入 + Fuzz 驅動初始化 + Handler 自動分群 + 野指標攔截重導向」的組合設計,將 Ring -2 SMM 韌體的 Fuzzing 效率提升至 4 倍,並在真實商業 BIOS 中找到可被利用的記憶體損壞漏洞,證明針對最高特權固件層的自動化漏洞挖掘是可行且高效的。”
完整解析
詳細現代 x86 系統除了大家熟知的 Ring 3(用戶態)與 Ring 0(核心態)之外,還存在一個更底層、被稱為 Ring -2 的 System Management Mode(SMM)。SMM 運行於一塊名為 SMRAM 的物理記憶體區域,處理器強制執行存取控管,即便擁有 Ring 0 權限的 OS kernel 也完全無法讀寫 SMRAM 的內容。進入 SMM 的唯一途徑是透過 System Management Interrupt(SMI),可由硬體週期性觸發,或由軟體寫入特定 IO Port(如 B2h)手動觸發。由於 SMM 已被整合進 UEFI 標準,廠商以模組化方式開發 SMM 應用:SMM Core 負責載入並呼叫各 SMM Module 的初始化函數,各模組再向 Core 註冊 SMI Handler,形成「初始化」與「SMI 處理」兩個生命週期。
正是因為 SMM 擁有系統最高權限,它成為高價值攻擊目標。研究者設定的威脅模型假設攻擊者已完全控制 Ring 0 和 Ring 3,可隨時透過寫 IO Port 或操控外設觸發 SMI,攻擊目標是利用 SMI Handler 中的記憶體損壞漏洞,實現對 SMRAM 的任意讀寫或直接提權至 Ring -2。然而,要對 SMI Handler 進行有效 Fuzzing 面臨三大挑戰:其一,廠商 SMM 模組為閉源二進位,難以完整模擬與再宿主;其二,SMM 模組依賴大量私有 DXE Protocol 與特定格式的 HOB 資料,若依賴未被滿足則初始化失敗;其三,Handler 的巢狀 void pointer 輸入結構難以推斷,且多個 Handler 可能透過全域變數或共享 Protocol 互相干擾控制流。
SMMFuzz 以三階段架構回應上述挑戰。Composing Phase 的核心思路是在廠商閉源 SMM 模組與模擬硬體之間插入一層自製的基礎設施韌體(infrastructure firmware),使其同時相容於兩側,實現部分再宿主。此基礎設施提供事件通知、資訊記錄(如 SMRAM 元資料、Handler 與 Protocol 的註冊情況)以及 SMI Handler 的 Fuzzing harness。Initialization Phase 以 Fuzzing 驅動模組初始化函數,對三類可能導致初始化失敗的資料(IO 存取回傳值、HOB 資料、專有 DXE Protocol 回傳值)提供 Fuzz 輸入,成功讓約 50% 的廠商模組與 Handler 被載入並註冊。Fuzzing Phase 則根據「共享全域變數」和「共享 Protocol」兩項依賴約束自動將 Handler 分群,以群為單位進行 Fuzzing;對於巢狀指標問題,SMMFuzz 攔截所有 SMRAM 外的記憶體存取,將其重導向至預填 Fuzz 資料的位址,隱式地完成指標語義推斷,無需符號執行或靜態分析。Bug Oracle 偵測除零、非法記憶體存取與 SMM Callout 三類直接崩潰事件,進而辨識 SMM Callout、Unchecked Input、Double Fetch、越界記憶體存取與除零五類漏洞。
評估結果顯示,SMMFuzz 在 Alienware、ASUS、HP 等多家品牌韌體上的代碼覆蓋率比 2022/2023 年最新對比工具高出 4 倍,真陽性率優於 EFI Explorer 靜態分析工具,且大幅降低誤報率,執行速度達每秒超過 300 次。研究者在 ASUS BIOS 中發現一個真實的 Double Fetch 漏洞:Handler 對來自非 SMRAM 的 V0 值先做邊界檢查,但隨後再次讀取同一位址作為函式指標陣列索引,兩次讀取之間缺乏同步保護,攻擊者可利用競態條件繞過檢查,實現任意程式碼執行。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

