![](https://help.apple.com/assets/6537FB06A074DBB5E802EA07/6537FB31280588A5490B6E1D/zh_TW/52d714626638d3391623c853be0c593b.png)
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 架構並配備 Intel 虛擬化技術的 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 緩衝區的驅動程式中發生漏洞的影響。