M04 · CTF
誰附了 quarantine?
用實驗室切換下載通道,找出哪些通道會附 com.apple.quarantine、哪些不會, 並解碼一條 quarantine 字串的四個欄位,說明為何「沒有旗標」就不觸發 Gatekeeper。
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(見章末真機卡)。
過關目標
- 讓 channel.curl.quarantine 達到 false
- 讓 channel.browser.quarantine 達到 true
- 用自己的話解釋:為什麼用 curl 下載的執行檔,首次執行不會跳「未識別的開發者」?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
瀏覽器/Mail/AirDrop(sharingd) 會附旗標;curl/wget/git 不會。
走錯方向時
com.apple.quarantine 四欄是 flags;時戳(hex);agent;UUID。UUID 是 QuarantineEventsV2 的鍵。
想更深入
沒有 quarantine 旗標 → 首次執行不觸發 Gatekeeper 評估。這是常見繞過的起點,也是偵測訊號。
相關指令
xattrspctl