M05 · CTF
csr bitmask 與 SSV 兩層
用 csr 位元面板找出哪個位元會讓 root 能寫 restricted 路徑;再說明為何「關 SIP」不等於「關 SSV」, 兩層(執行期 MAC、開機期 seal)如何各自獨立。
SIP / rootless 實驗室
csr = 0x0
System Integrity Protection status: enabled.
/System 帶 SF_RESTRICTED → SIP MAC 保護。
- DAC (POSIX)uid 0(root)滿足擁有者寫入權 → DAC 通過。注意:root 仍須經過 DAC,只是通常會過。
- SIP (MAC)對 restricted 路徑寫入、非授權的 rootless 二進位 → EPERM。連 root 都擋。
重點:DAC 過了(你是 root),但 SIP 這道獨立 MAC 閘擋下 → EPERM。「root 寫不進 /System」就是這個原因,不是 DAC。
開機期 seal(authenticated-root / SSV)
開機時以 Merkle tree 的 root hash 驗整個系統卷快照的封印(seal)。磁碟上改一個 byte → 算出的 root hash 不符 → 無法開機(除非關掉 authenticated-root)。
與執行期 SIP 無關:可以 SIP 關、但 seal 仍開。
執行期 MAC(SIP / rootless)
系統執行中,MACF policy 擋對 SF_RESTRICTED 路徑的修改,連 uid 0 都擋。
與開機 seal 兩層獨立:本機實測即 SIP disabled 但 Authenticated Root enabled。
本機實測:SIP disabled 但 Authenticated Root enabled、Snapshot Sealed: Yes — 正是兩層獨立的活證據。
模型邊界:兩閘 deny-overrides 是 M09 六閘的預習教學模型,非核心 MACF 逐位元評估順序。csr 位元、restricted 旗標、SSV 雙層皆為實測(見章末真機卡);驗證於 macOS 26.3.1。
過關目標
- 讓 csr.bit.ALLOW_UNRESTRICTED_FS 達到 "0x2"
- 讓 ssv.independentFromSip 達到 true
- 用自己的話解釋:為什麼可以 SIP disabled 但 Authenticated Root 仍 enabled?這對「改開機系統卷」代表什麼?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
csr 0x2 = ALLOW_UNRESTRICTED_FS,設了之後 SIP 的 FS 保護就不介入,restricted 路徑可寫。
走錯方向時
SIP(執行期 MAC)與 authenticated-root(開機期 seal)是兩個獨立開關。本機實測 SIP off 但 seal on。
想更深入
開機系統卷的封印由 ALLOW_UNAUTHENTICATED_ROOT(0x800) 與 csrutil authenticated-root 管,跟 FS 保護(0x2)不同位。