Suzu macOS Playground

M01 · 階梯 1 · L1

macOS 整體架構與啟動鏈

XNU 混合核心、開機信任鏈(BootROM→iBoot→kernelcache→sepOS)、Secure Boot 三級、LocalPolicy 與 SEP 導論。

●● bputil · csrutil · kmutil · diskutil

為什麼從「啟動鏈」開始

整套教材的信任根在這裡。後面所有章節——程式碼簽章、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。

下面的模擬器讓你親手「竄改」任一級,觀察信任鏈如何中斷:

啟動鏈驗證模擬器

  1. 1BootROM

    以晶片內建信任根驗證 iBoot 的 Image4 manifest

  2. 2iBoot

    驗證 kernelcache 的量測雜湊與 manifest

  3. 3kernelcache

    載入並驗證 SEP firmware (sepOS)

  4. 4sepOS (SEP)

    安全啟動完成,移交控制權

✓ 信任鏈完整:四級全部驗證通過,安全啟動完成。

模型邊界:此為「每級驗下級」的概念演示,不偽造真實 Image4/CMS 簽章驗證。 真機驗證請見章末「真機操作卡」。

試試看:先竄改 kernelcache,看鏈在哪裡斷、哪些級「未到達」。再想:為什麼竄改最後一級 sepOS 仍會被擋下?(提示:它的上一級 kernelcache 在載入 SEP firmware 前會先驗。)

三個重點概念

  1. Secure Boot 三級:Full(預設,只跑 Apple 簽章)、Reduced、Permissive。降級會放寬此鏈的強度——這是 bputil 改 LocalPolicy 的後果,屬 🟡 受控操作。
  2. LocalPolicy ≠ iOS APTicket:Apple Silicon Mac 的開機個人化用 boot manifest / LocalPolicy 簽署,與 iOS 的 APTicket 流程類似但不等同。
  3. 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 載入器 — 看懂被這條鏈驗證的「映像」到底長什麼樣。