M01 · 階梯 1 · L1
macOS 整體架構與啟動鏈
XNU 混合核心、開機信任鏈(BootROM→iBoot→kernelcache→sepOS)、Secure Boot 三級、LocalPolicy 與 SEP 導論。
為什麼從「啟動鏈」開始
整套教材的信任根在這裡。後面所有章節——程式碼簽章、SIP、SSV、entitlement gating——的「可信」二字,都回溯到開機時建立的這條信任鏈(chain of trust)。先看懂它,後面才站得住。
macOS 核心是 XNU:Mach(IPC、排程、VM)+ BSD(POSIX、檔案系統、網路)的混合核心。但在核心跑起來之前,Apple Silicon 已經走完一條逐級驗證的開機鏈。
信任鏈:每一級驗下一級
BootROM ──驗──► iBoot ──驗──► kernelcache ──驗──► sepOS (SEP)
(晶片內,不可改) (開機載入器) (XNU + kexts) (安全隔離處理器)
核心原則:上一級用自己持有的信任根,驗證下一級映像的 Image4 manifest(量測雜湊比對)。任何一級被竄改或降級,上一級就會偵測到量測雜湊不符,拒絕放行、整鏈中止、落入 DFU/recovery。
下面的模擬器讓你親手「竄改」任一級,觀察信任鏈如何中斷:
啟動鏈驗證模擬器
- 1BootROM
以晶片內建信任根驗證 iBoot 的 Image4 manifest
- 2iBoot
驗證 kernelcache 的量測雜湊與 manifest
- 3kernelcache
載入並驗證 SEP firmware (sepOS)
- 4sepOS (SEP)
安全啟動完成,移交控制權
✓ 信任鏈完整:四級全部驗證通過,安全啟動完成。
模型邊界:此為「每級驗下級」的概念演示,不偽造真實 Image4/CMS 簽章驗證。 真機驗證請見章末「真機操作卡」。
試試看:先竄改
kernelcache,看鏈在哪裡斷、哪些級「未到達」。再想:為什麼竄改最後一級sepOS仍會被擋下?(提示:它的上一級kernelcache在載入 SEP firmware 前會先驗。)
三個重點概念
- Secure Boot 三級:Full(預設,只跑 Apple 簽章)、Reduced、Permissive。降級會放寬此鏈的強度——這是
bputil改 LocalPolicy 的後果,屬 🟡 受控操作。 - LocalPolicy ≠ iOS APTicket:Apple Silicon Mac 的開機個人化用 boot manifest / LocalPolicy 簽署,與 iOS 的 APTicket 流程類似但不等同。
- SEP(Secure Enclave):獨立處理器,管金鑰、生物特徵、FileVault 的 VEK。後續 M11/M15 會深入。
🟡 真機操作卡(在你自己的 Mac 上觀察)
csrutil status # 看 SIP 狀態(唯讀,安全)
bputil -d # 顯示 LocalPolicy(需 owner 認證;只讀不改)
diskutil apfs list | grep Sealed # 看系統卷是否 Sealed: Yes(SSV)
⚠
bputil改寫 LocalPolicy、降 Secure Boot 等級會降低整機安全,且需 recoveryOS/1TR + owner 認證。本章只示範唯讀觀察;任何降級操作見 DESIGN.md §10 風險警示。
下一步:M02 Mach-O 格式與 dyld 載入器 — 看懂被這條鏈驗證的「映像」到底長什麼樣。