在配備 Apple 晶片的 Mac 上進行開機程序
當配備 Apple 晶片的 Mac 開啟時,會執行與 iPhone 和 iPad 非常類似的開機程序。
晶片會在信任鏈的第一個步驟執行開機 ROM 中的程式碼。在配備 Apple 晶片的 Mac 上,macOS 安全開機不只會驗證作業系統程式碼本身,也會驗證經授權使用者設定的安全性規則甚至是 kext(提供支援,但不建議使用)。
當 LLB(其代表「低階 Bootloader」)啟動時,隨即會驗證簽章並為 SoC 內部核心(例如儲存體、顯示器、系統管理和 Thunderbolt 控制器)載入與系統配對的韌體。LLB 也負責載入 LocalPolicy(以「安全隔離區處理器」簽署的檔案)。LocalPolicy 檔案描述使用者針對系統開機和執行階段安全性規則選擇的設定。LocalPolicy 的資料結構格式與其他所有開機物件相同,不過會在本機由一個專用密鑰(只能在特定電腦的「安全隔離區」內存取)簽署,而非由中央 Apple 伺服器(例如軟體更新)簽署。
為了協助防止先前的 LocalPolicy 重放,LLB 必須從連接「安全隔離區」的「安全儲存元件」查詢反重放值。若要這麼做,其會使用「安全隔離區 ROM」,並確保 LocalPolicy 中的反重放值與「安全儲存元件」中的反重放值相符。這有助於防止進行安全性升級後舊版 LocalPolicy(設定的安全性可能較低)重新套用至系統。因此,配備 Apple 晶片的 Mac 上的安全開機不僅能防止作業系統版本回復,也能防止安全性規則降級。
LocalPolicy 檔案會記錄作業系統是設為「完整安全性」、「較低安全性」還是「寬鬆安全性」。
完整安全性:系統的行為就跟 iOS 和 iPadOS 相同,且只允許安裝時已知最新版的開機軟體。
較低安全性:系統會指示 LLB 信任與作業系統綁定的「全域」簽章。這會允許系統執行舊版的 macOS。因為舊版 macOS 不可避免地具有未修補的漏洞,此安全性模型便被稱為「較低安全性」。這也是支援開機核心延伸功能(kext)所必須採用的規則層級。
寬鬆安全性:系統的行為類似「較低安全性」,也使用 iBoot 的全域簽章驗證,不過也會告知 iBoot 應接受某些以「安全隔離區」簽署的開機物件,這些物件的密鑰與用來簽署 LocalPolicy 的密鑰相同。這個規則層級支援使用者建立、簽署和啟動自己的自訂 XNU 核心。
如果 LocalPolicy 向 LLB 指出選取的作業系統正在以「完整安全性」執行,則 LLB 會評估 iBoot 的個人化簽章。如果它以「較低安全性」或「寬鬆安全性」執行,則會評估全域簽章。任何簽章驗證錯誤都會導致系統開機至 RecoveryOS 以提供修復選項。
LLB 接力給 iBoot 之後,會載入與 macOS 配對的韌體,例如「安全神經引擎」、Always On Processor 等的韌體。iBoot 也會查看從 LLB 傳遞給自己的 LocalPolicy 相關資訊。如果 LocalPolicy 指出應有一個輔助核心集合(AuxKC),iBoot 便會在檔案系統上查詢 AuxKC,驗證它是使用與 LocalPolicy 相同的密鑰以「安全隔離區」簽署,並驗證其雜湊與 LocalPolicy 中儲存的雜湊相符。如果 AuxKC 通過驗證,iBoot 會透過「開機核心集合」將它放入記憶體,然後再鎖定整個記憶體區域,這個區域涵蓋開機核心集合和具有系統副處理器完整保護(SCIP)的 AuxKC。如果規則指出應存在一個 AuxKC 但卻找不到,系統便會繼續在沒有 AuxKC 的狀態下開機進入 macOS。iBoot 也負責驗證簽署系統卷宗(SSV)的開機雜湊,以確認核心將掛載的檔案系統完全通過完整性驗證。