Canary 是一种典型的检测机制。在 Linux 内核中,Canary 的实现是与架构相关的,所以这里我们分别从不同的架构来介绍。
在 x86 架构中,同一个 task 中使用相同的 Canary。
TODO。
TODO。
在编译内核时,我们可以设置 CONFIG_CC_STACKPROTECTOR 选项,来开启该保护。
我们需要重新编译内核,并关闭编译选项才可以关闭 Canary 保护。
我们可以使用如下方式来检查是否开启了 Canary 保护
checksec
- 人工分析二进制文件,看函数中是否有保存和检查 Canary 的代码
可以发现,x86 架构下 Canary 实现的特点是同一个 task 共享 Canary。
根据 x86 架构下 Canary 实现的特点,我们只要泄漏了一次系统调用中的 Canary,同一 task 的其它系统调用中的 Canary 也就都被泄漏了。