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