M04 · CTF
評估流程與 App Translocation
在評估流程中切換簽章/公證/stapling/位置,找出一支「已簽章、未公證」的 App 會怎樣, 以及被 quarantine 的 App 從 Downloads 直接執行時為何會被 translocate。
Gatekeeper 評估實驗室
① 下載通道
瀏覽器啟用 LSFileQuarantineEnabled,下載即附 com.apple.quarantine。
② com.apple.quarantine 解碼
- flags
- 0x0081 · 未評估
- 時間
- 2020-04-05T17:58:24.000Z
- agent
- Safari
- UUID
- A1B2C3D4-0000-4000-8000-000000000001
- 旗標位
- 0x0001 LaunchServices 內部旗標(下載來源/類型相關)。0x0080 LaunchServices 內部旗標(常見於瀏覽器下載)。
UUID 是 LaunchServices QuarantineEventsV2 資料庫的鍵,存原始下載 URL/來源。
③ 情境(首次執行)
quarantine:有(由①通道決定)
判定擋下
- quarantine有 com.apple.quarantine 且為首次執行 → 觸發 Gatekeeper 評估。
- code signing簽章有效。
- notarization未經 Apple 公證(notarize)→「Apple 無法驗證其不含惡意軟體」。
被 Gatekeeper 擋下。
XProtect(簽章式惡意程式掃描,yara)在執行時比對;XProtect Remediator 週期掃描。 模型邊界:本流程為教學決策模型,非真實 syspolicyd 逐位元;quarantine flags 部分位元為 LaunchServices 內部、標為推測。驗證於 macOS 26.3.1(見章末真機卡)。
過關目標
- 讓 scenario.signedValidNotNotarized.verdict 達到 "block"
- 讓 scenario.quarantinedNonstandard.translocate 達到 true
- 用自己的話解釋:為什麼 Sequoia 之後 spctl 無法再一鍵全域關閉 Gatekeeper(指令還在、但操作不再受支援)?要改全域得走哪條路?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
簽章有效但未公證 → 「Apple 無法驗證其不含惡意軟體」,被擋。
走錯方向時
stapled 票根可離線驗;只有 online 票根時,離線就驗不了。
想更深入
被 quarantine 的 App 從非標準位置執行且未搬移 → 從唯讀隨機路徑 translocate,瓦解相對路徑 dylib 載入。
相關指令
spctlstaplercodesign