macOS 的 Option ROM 安全性
【注意】配備 Apple 晶片的 Mac 目前不支援 Option ROM。
配備 Apple T2 安全晶片的 Mac 之 Option ROM 安全性
Thunderbolt 和 PCIe 裝置都具有與裝置實體連接的「Option ROM」(OROM)。(這通常不是真正的 ROM,而是儲存著韌體的可寫入晶片。)在 UEFI 系統上,該韌體通常為 UEFI 驅動程式,會由 UEFI 韌體讀取然後執行。執行的程式碼應會初始化和設定其擷取來源硬體,以便讓該硬體可供韌體的其餘部分使用。此功能需要專門的第三方硬體可在早期開機階段載入和運作,例如從外部 RAID 陣列開機。
然而,由於 OROM 通常可重複寫入,如果攻擊者覆寫合法週邊設備的 OROM,攻擊者的程式碼便可在開機程序的早期階段執行,且可透過執行環境竄改,以及破壞後續載入的軟體完整性。同樣地,如果攻擊者將自己的惡意裝置引入系統中,他們也可以執行惡意程式碼。
在 macOS 10.12.3 中,2011 年後售出的 Mac 電腦行為已更改為預設不在 Mac 開機時執行 OROM,除非按下特殊按鍵組合。這種按鍵組合可防止意外將惡意 OROM 引入 macOS 開機流程中。「韌體密碼工具程式」的預設行為也有所更改,當使用者設定韌體密碼時,即使按下按鍵組合也無法執行 OROM。這可防止實體存在的攻擊者刻意引入惡意的 OROM。已設定韌體密碼的使用者如果仍需執行 OROM,可以使用 macOS 中的 firmwarepasswd
命令列工具來設定非預設選項。
OROM 沙盒安全性
在 macOS 10.15 中,UEFI 韌體已更新為包含對 OROM 執行沙盒和解除權限的機制。UEFI 韌體通常以最高 CPU 權限層級(稱為 ring 0)執行所有程式碼(包含 OROM 在內),且有一個共享虛擬記憶體空間供所有程式碼和資料使用。ring 0 是 macOS 核心執行所用的權限層級,而 App 執行所用的較低層級權限是 ring 3。OROM 沙盒藉由使用虛擬記憶體分隔(與核心一樣)來解除 OROM 的權限,然後讓 OROM 以 ring 3 執行。
沙盒進一步大幅限制 OROM 可呼叫的介面(這十分類似於核心中的系統呼叫過濾)和 OROM 可登記的裝置類型(十分類似於 App 核准)。此設計的優點為惡意 OROM 無法再直接寫入 ring 0 記憶體中的任一位置,而是會限制在範圍極窄且定義明確的沙盒介面中。這個受限制的介面大幅縮小了攻擊面積,並強迫攻擊者先逃離沙盒再提高權限。