经过一些研究后,我没有找到任何描述这种方法的论文(甚至没有不可靠的论文)。似乎是SSP(StackSmashing Protection)/ Propolice
答案 0 :(得分:3)
Canary是一种非常好的安全措施,可以防止一些缓冲区溢出。多年来,各种Canary实施已被打破,然后变得更加安全。重要的是,尽管存在高级内存保护缓冲区溢出仍在Vista,Windows 7和Fedora 11上被利用......
一个非常重要的事情是,Canary只保护函数的调用框架(包括强大的EIP!)。缓冲区溢出可能发生在另一段内存中,例如堆,而金丝雀则没有影响。此外,应用程序可以使用缓冲区溢出进行攻击,而无需覆盖EIP。控制EIP是一种非常直接且简单的方法,可以将缓冲区溢出变为杀手级漏洞,这就是为什么它是最常用的利用方法。
Exploiting Software: How to break code中详细介绍了这些开发方法以及其他方法。
答案 1 :(得分:1)
我更熟悉微软的GS堆栈保护,但这两种方法seem similar。
以下来自Microsoft的博客文章显示了一个示例,即使正在使用堆栈cookie,攻击者仍然可以控制(第一个示例应该适用于非Windows系统):
这篇博客文章讨论了即将到来的堆栈保护改进:
答案 2 :(得分:0)
如果应用程序在堆栈上有一个数组/缓冲区,并且使用调用者控制的索引值而没有边界检查,则调用者将能够访问任意内存位置,并且堆栈保护将无法阻止或检测它