M13 · CTF
軍備競賽終局——把緩解一道道打開,看攻擊者被逼向 data-only
延續 lvl1。抽象模型現在讓你逐一「開啟」緩解開關(KASLR → PAC → PPL/SPTM·TXM → kalloc_type/sequestering), 每開一道,觀察攻擊者「原本想走的那條路」如何被堵死、被迫轉向下一條更難的路,直到只剩 data-only。 你的任務不是繞過任何一道,而是說清楚每道緩解卡住的是哪一類能力、攻擊者被迫轉向什麼, 以及為什麼最終的 data-only(不改控制流、只改資料)對偵測特別棘手——這條結論直接交棒 M14。 此為教學抽象,不等於真實可利用性;模型把「需大量洩漏與工程才偶爾成立」的事簡化成開關。
抽象記憶體模型:UAF × PAC
⚠ 此為教學抽象,不等於真實可利用性。UAF 的「形狀」是:釋放後指標沒清(dangling)→ 同一塊被重新配置(重用)→ 透過舊指標操作到新物件。mitigation(PAC/PPL/SPTM-TXM/kalloc_type/zone sequestering)的意義是抬高成本、把攻擊者逼向其他面——不是「不可能」。本模型不含任何 offset/gadget/payload/PoC。
過關目標
- 讓 armsRace.eachMitigationForcedAPivot 達到 true
- 讓 armsRace.terminalStrategy 達到 "data-only"
- 用自己的話解釋:依序說明 KASLR、PAC、PPL/SPTM·TXM、kalloc_type/zone sequestering 各自卡住攻擊者哪一類能力、迫使他轉向什麼。為什麼這串緩解的終局常是 data-only?data-only 為何對偵測特別棘手(提示:控制流看起來正常)?請特別說清楚 (a) SPTM/TXM 與 PPL 的世代/OS 共存關係(不是某代硬切),(b) arm64 vs arm64e 的 PAC 覆蓋差異。最後重申一句:這套模型是教學抽象,為什麼通過此關不等於你具備真實可利用性?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
一道一道看,別跳。每道緩解配一句「它擋住哪類能力 → 攻擊者被迫做什麼更難的事」。KASLR→先得洩漏位址;PAC→難改控制流指標;PPL/SPTM·TXM→核心讀寫不再自動等於改頁表/繞簽章;kalloc_type/sequestering→跨型別重用被堵。
走錯方向時
注意 SPTM/TXM 不是某一代之後就全機種硬切。M1/M2 同 OS 仍是 PPL;A17 Pro/M3 起的較新 silicon 才用 SPTM/TXM,兩者在不同產品線共存。別答成「PPL 已淘汰」。也別把 PAC 當成保護所有程式——arm64e 才有 user-space PAC,多數第三方 arm64 app 沒有。
想更深入
終局是 data-only:不改控制流、不執行新碼、不碰頁表,只改程式本來就會讀寫的資料(如某個授權旗標),讓程式用自己合法的控制流做出對攻擊者有利的決策。它難偵測,正因為控制流看起來完全正常——這就是 M14 偵測要從「跑了什麼碼」轉向「狀態被悄悄改了嗎」的原因。