![](https://help.apple.com/assets/6537FB06A074DBB5E802EA07/6537FB31280588A5490B6E1D/zh_HK/52d714626638d3391623c853be0c593b.png)
信任快取
安全啟動鏈包含的其中一個物件為靜態信任快取,這是由簽署系統卷宗主控的所有 Mach-O 二進位檔的受信任記錄。每個 Mach-O 都以一個程式碼目錄雜湊值代表。為進行有效率的搜尋,這些雜湊值會先經過排序再插入信任快取中。程式碼目錄是 codesign(1)
執行的簽署作業所產生的結果。為了強制執行信任快取,SIP 需要保持啟用狀態。如要在配備 Apple 晶片的 Mac 上停用信任快取強制執行,安全啟動必須設為「寬鬆保安」。
當二進位檔執行時(無論是繁衍新程序還是將可執行程式碼對映至現有程序的過程),系統都會截取其程式碼目錄並進行雜湊值處理。如果產生的雜湊值出現在信任快取中,為該二進位檔建立的可執行對映就會獲得平台權限,也就是説,該檔案可能擁有任何授權,且不需要進一步驗證簽署的真實性就能執行。以 Intel 為基礎的 Mac 情況則形成對比,簽署該二進位檔的 Apple 憑證會將平台權限傳達至作業系統內容。(這個憑證不會限制二進位檔可擁有的授權。)
非平台二進位檔(例如通過公證的第三方程式碼)必須具備有效的憑證鏈才能執行,而且其可擁有的授權受限於 Apple 開發者計劃核發給開發者的簽署描述檔。
在 macOS 內遞送的所有二進位檔都是透過平台識別碼簽署。在配備 Apple 晶片的 Mac 上,這個識別碼用於指出,即使二進位檔已由 Apple 簽署,其程式碼目錄雜湊值仍必須存在於信任快取中才能執行。在以 Intel 為基礎的 Mac 上,平台識別碼用於對舊版 macOS 中的二進位檔執行針對性撤銷,此針對性撤銷有助於防止這些二進位檔在新版本上執行。
靜態信任快取會將一組二進位檔完全鎖定至指定的 macOS 版本。此行為可協助防止舊版作業系統中 Apple 合法簽署的二進位檔引入新的版本中,讓攻擊者有機可乘。
在作業系統之外遞送的平台程式碼
Apple 提供一些非透過平台識別碼簽署的二進位檔,例如 Xcode 和開發工具疊放。即使如此,在配備 Apple 晶片和配備 T2 晶片的 Mac 上,系統仍允許這類二進位檔以平台權限執行。由於這個平台軟件是獨立於 macOS 進行遞送,因此不受限於靜態信任快取所施加的撤銷行為。
可載入的信任快取
Apple 透過可載入的信任快取遞送某些軟件套件。這些快取的資料結構與靜態信任快取相同。但是儘管只有一個靜態信任快取,且核心早期初始化完成後其內容總是保證鎖定在唯讀範圍中,可載入的信任快取仍會在執行時加入系統中。
認證這些信任快取的機制,與認證開機韌體(使用 Apple 信任的簽署服務作個人化)或全域簽署物件(其簽署不會將其與特定裝置綁定)的機制相同。
個人化信任快取的一個範例是,會隨着配備 Apple 晶片的 Mac 上用於執行診斷的磁碟映像一起提供的快取。這個信任快取經過個人化處理並隨着磁碟映像提供,且會在開機進入診斷模式時載入目標 Mac 電腦的核心中。信任快取可讓磁碟映像內的軟件以平台權限執行。
一個全域簽署信任快取的範例會隨着 macOS 軟件更新一起提供。這個信任快取允許軟件更新中的一個程式碼區塊(更新核心)以平台權限執行。主機系統缺乏在不同版本間以相同方式執行的能力,因此交由更新核心執行軟件更新所需的所有工作。