簽署系統卷宗安全性
Apple 在 macOS 10.15 中首次採用唯讀系統卷宗,這是供系統內容專用的隔離卷宗。macOS 11 或更新版本則為簽署系統卷宗(SSV)的系統內容加入了高強度的加密編譯保護。SSV 具備核心機制,可在執行時驗證系統內容的完整性,以及拒絕沒有 Apple 有效加密編譯簽章的任何資料(程式碼與非程式碼)。從 iOS 15 和 iPadOS 15 開始,iPhone 或 iPad 上的系統卷宗也取得簽署系統卷宗的加密保護。
SSV 有助於防止竄改屬於作業系統一部分的任何 Apple 軟體,也可讓 macOS 軟體更新更可靠且更安全。且因為 SSV 使用「Apple 檔案系統」(APFS)快照,如果更新無法執行,可還原舊版系統而不需要重新安裝。
引入此功能後,APFS 在內置儲存裝置上使用非加密編譯總和檢查碼,因此提供了檔案系統後設資料完整性。SSV 加入加密編譯雜湊並加以延伸,包含檔案資料的所有位元組,因而加強了完整性機制。內置儲存裝置(檔案系統後設資料)中的資料在讀取路徑中以加密編譯方式進行雜湊處理,而雜湊之後會與檔案系統後設資料中的預期值做比較。若發生不一致,系統會假設資料已遭到竄改,且不會傳回給提出要求的軟體。
每個 SSV SHA256 雜湊都儲存在主檔案系統後設資料樹狀結構中,而這個樹狀結構本身就經過雜湊處理。樹狀結構的每個節點都經過遞迴式驗證,驗證其子項目雜湊的完整性,類似二位元雜湊(Merkle)樹狀結構;因此根節點的雜湊值(稱為印章)會包含 SSV 中資料的所有位元組,這表示加密編譯簽章涵蓋整個系統卷宗。
安裝和更新 macOS 期間,印章會從裝置上的檔案系統進行重新運算,並根據 Apple 簽署的測量驗證其測量。在配備 Apple 晶片的 Mac 上,將控制權傳送給核心之前,Bootloader 會驗證印章。在採用 Intel 架構並配備 Apple T2 安全晶片的 Mac 上,Bootloader 會將測量值和簽章轉送至核心,然後核心會直接在掛載根檔案系統之前驗證印章。在這兩種情況下,如果驗證失敗,開機程序都會停止,且系統會提示使用者重新安裝 macOS。此程序會在每次開機時重複執行,除非使用者選擇進入較低的安全性模式,且已分別選擇停用簽署系統卷宗。
在 iOS 和 iPadOS 軟體更新期間,系統卷宗會以類似的方式準備和重新計算。在允許裝置設備啟動核心之前,iOS 和 iPadOS Bootloader 會驗證封存是否完好無損並且符合 Apple 簽署值。開機時若不相符,則會提示使用者更新裝置上的系統軟體。使用者無法在 iOS 和 iPadOS 上停用已簽署之系統卷宗的保護機制。
SSV 和程式碼簽章
程式碼簽章仍存在並由核心強制執行。從內置儲存裝置讀取任何位元組時,簽署系統卷宗可提供保護。相對地,當 Mach 物件記憶體對應到可執行檔時,程式碼簽章可提供保護。SSV 和程式碼簽章都能保護所有讀取和執行路徑上的可執行程式碼。
SSV 和檔案保險箱
在 macOS 11 或以上版本中,SSV 為系統內容提供了等效的靜態保護,因此系統卷宗不再需要加密。對靜態檔案系統進行的任何修改,都會在讀取檔案系統時偵測到。如果使用者已開啟「檔案保險箱」,資料卷宗上的使用者內容仍會以使用者提供的密碼加密。
如果使用者選擇停用 SSV,靜態時的系統將變得容易遭到竄改,且此處的竄改可能讓攻擊者得以在系統下次啟動時擷取加密的使用者資料。因此,如果已開啟「檔案保險箱」,系統將不會允許使用者停用 SSV。兩種卷宗的靜態保護功能啟用或停用狀態必須一致。
在 macOS 10.15 或較早版本中,「檔案保險箱」使用密鑰(受到使用者提供的密碼保護)加密使用者和系統內容,藉此保護靜態作業系統軟體。此功能會保護裝置,以防可實際取用裝置的攻擊者存取或有效地修改包含系統軟體的檔案系統。
SSV 和配備 Apple T2 安全晶片的 Mac
在配備 Apple T2 安全晶片的 Mac 上,只有 macOS 本身受到 SSV 保護。在 T2 晶片上執行和驗證 macOS 的軟體受到安全開機保護。