Mac 電腦的直接記憶體存取保護
為了達成高速度介面(例如 PCIe、FireWire、Thunderbolt 和 USB)的高輸送量,電腦必須支援周邊設備的直接記憶體存取(DMA)。也就是説,周邊設備必須能讀取和寫入 RAM,而無需 CPU 持續參與。自 2012 年起 Mac 電腦已實施多種技術以保護 DMA,因此具備了個人電腦上最優異、最完善的一套 DMA 保護機制。
配備 Apple 晶片的 Mac 的直接記憶體存取保護
Apple 系統單晶片針對系統中的每個 DMA 代理程式都包含一個「輸入/輸出記憶體管理單元」(IOMMU),包含 PCIe 和 Thunderbolt 連接埠。因為每個 IOMMU 都有專屬的一組地址轉譯表,用於轉譯 DMA 要求,因此透過 PCIe 或 Thunderbolt 連接的周邊設備,只能存取已明確對映供其使用的記憶體。周邊設備無法存取屬於系統其他部份的記憶體(例如核心或韌體),或指派給其他周邊設備的記憶體。如果 IOMMU 偵測到有周邊設備嘗試存取並非對映供該周邊設備使用的記憶體,則會觸發核心異常。
以 Intel 為基礎的 Mac 上的直接記憶體存取保護
以 Intel 為基礎、並配備適用於導向式 I/O 的 Intel 虛擬化技術 I/O (VT-d) 的 Mac 電腦會初始化 IOMMU,啟用 DMA 對映並在開機程序的極早期中斷重新對映,藉此減輕各種保安漏洞類別的威脅。Apple IOMMU 硬件是依據預設拒絕規則開始作業,因此在系統啟動的當下,就會自動開始阻擋來自周邊設備的 DMA 要求。軟件初始化 IOMMU 後,IOMMU 會開始允許來自周邊設備的 DMA 要求傳至已明確對映供其使用的記憶體區域。
附註:在配備 Apple 晶片的 Mac 上,中斷 PCIe 的重新對映並非必要程序,因為每個 IOMMU 都會針對其自己的周邊設備處理 MSI。
從 macOS 11 開始,所有配備 Apple T2 安全晶片的 Mac 電腦都執行 UEFI 驅動程式,當這些驅動程式與外部裝置配對時,它們可以在受限的 ring 3 環境中推行 DMA。此屬性有助於緩解在開機期間,惡意裝置以非預期的方式與 UEFI 驅動程式進行互動時,可能發生的安全漏洞。尤其是,此屬性降低了在處理 DMA 緩衝區的驅動程式中發生漏洞的影響。