Suzu macOS Playground

M05 · CTF

root 為什麼寫不進 /System

在實驗室選 /System 路徑、uid 0(root)、write、第三方簽署者,找出 DAC 通過卻仍被拒的那道閘, 並說出回傳的是 EPERM 還是 EACCES、為什麼。

← 先讀 M05 章節

SIP / rootless 實驗室

① csr-active-config 位元

csr = 0x0

System Integrity Protection status: enabled.

② 檔案存取(DAC → SIP,deny-overrides)

/System 帶 SF_RESTRICTED → SIP MAC 保護。

結果拒絕 (EPERM)
  1. DAC (POSIX)uid 0(root)滿足擁有者寫入權 → DAC 通過。注意:root 仍須經過 DAC,只是通常會過。
  2. SIP (MAC)對 restricted 路徑寫入、非授權的 rootless 二進位 → EPERM。連 root 都擋。

重點:DAC 過了(你是 root),但 SIP 這道獨立 MAC 閘擋下 → EPERM。「root 寫不進 /System」就是這個原因,不是 DAC。

③ SSV:開機期 seal vs 執行期 MAC(兩層獨立)

開機期 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。

過關目標

解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。

提示

卡住時

兩閘 deny-overrides:DAC(POSIX)→ SIP(MAC)。root 過得了 DAC,被 SIP 擋。

走錯方向時

SIP 擋下回 EPERM(operation not permitted);DAC 權限不足才回 EACCES。

想更深入

把路徑換成 /Applications(sunlnk,非 restricted)→ SIP 不介入,root 可寫。這就是 restricted 與 sunlnk 的差別。

相關指令

csrutills
← 回 CTF 場