M13 · CTF
漏洞分類與緩解配對——說出根因,指出哪道緩解卡住它
抽象記憶體模型給你一個合成情境:一個物件被釋放後,同槽位被換成另一型別再被當原型別使用。 你不需要、也不會寫任何利用——你的任務是 (1) 把這個情境歸到正確的根因類別(時間性記憶體破壞 / UAF 與 type confusion),(2) 從緩解清單裡選出真正卡住「跨型別重用」這一手的機制(kalloc_type 的 型別隔離 zone、zone sequestering),並說明它為何讓這條路走不通、攻擊者因此被迫轉向哪。 全程只談類別/根因/防禦,沒有 offset、沒有 payload、沒有可運行步驟。此為教學抽象,不等於真實可利用性。
抽象記憶體模型:UAF × PAC
⚠ 此為教學抽象,不等於真實可利用性。UAF 的「形狀」是:釋放後指標沒清(dangling)→ 同一塊被重新配置(重用)→ 透過舊指標操作到新物件。mitigation(PAC/PPL/SPTM-TXM/kalloc_type/zone sequestering)的意義是抬高成本、把攻擊者逼向其他面——不是「不可能」。本模型不含任何 offset/gadget/payload/PoC。
過關目標
- 讓 classification.rootCauseClass 達到 "temporal-memory-corruption"
- 讓 mitigation.selectedBlocksCrossTypeReuse 達到 true
- 用自己的話解釋:這個情境的根因屬哪一類(用類別名詞,不是案例)?為什麼「按型別隔離的 zone(kalloc_type)+ zone sequestering」能卡住「釋放後跨型別重用同一塊記憶體」這一手,而 kalloc.<size> 的按大小分桶反而是溫床?緩解卡住這條路後,攻擊者通常被迫轉向哪一類做法?(提示:往不改控制流的方向想。)
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
先分類再配對。問自己「這是空間性還是時間性記憶體破壞?」物件被釋放後重用屬時間性(UAF);把重用後的物件當另一型別解讀就疊上 type confusion。分對類別,緩解自然對上。
走錯方向時
KASLR 對付的是「不知道東西在哪」,PAC 對付的是「改控制流指標」——都不是這題的根因。這題的根因是「釋放後跨型別重用同一塊記憶體」,要選的是型別隔離的 zone(kalloc_type)與 zone sequestering。
想更深入
kalloc.<size> 按大小分桶(同大小不同型別混在一起,是溫床);kalloc_type 按型別隔離 zone;zone sequestering 連位址空間都不輕易跨型別重用。三者別混名詞。配對時選「型別隔離」那一檔。