Kernel Stack Canary¶
Canary 是一種典型的檢測機制。在 Linux 內核中,Canary 的實現是與架構相關的,所以這裏我們分別從不同的架構來介紹。
x86¶
介紹¶
在 x86 架構中,同一個 task 中使用相同的 Canary。
發展歷史¶
TODO。
實現¶
TODO。
使用¶
開啓¶
在編譯內核時,我們可以設置 CONFIG_CC_STACKPROTECTOR 選項,來開啓該保護。
關閉¶
我們需要重新編譯內核,並關閉編譯選項纔可以關閉 Canary 保護。
狀態檢查¶
我們可以使用如下方式來檢查是否開啓了 Canary 保護
checksec
- 人工分析二進制文件,看函數中是否有保存和檢查 Canary 的代碼
特點¶
可以發現,x86 架構下 Canary 實現的特點是同一個 task 共享 Canary。
攻擊¶
根據 x86 架構下 Canary 實現的特點,我們只要泄漏了一次系統調用中的 Canary,同一 task 的其它系統調用中的 Canary 也就都被泄漏了。