实验要求:调研 VC .net 或 GCC 4.*中的 Canary 技术实现, 弄懂原理并设计相应的实验例程进行测试,编制相应 报告。
实验环境:
Windows 10, 编译器配置为 TDM-GCC 4.8.1 64-BIT Debug
实验主题:
调研 GCC 4.*中的 Canary 技术:
原理:
1、 在所有函数调用发生时,向栈帧内压入一个额外的随机 DWORD,这个随机数被称作
“canary”,用 IDA 反汇编时,又被称作“Security Cookie”。
2、 canary 位于 EBP 之前,系统还会在.data 的内存区域中存放一个 canary 的副本。
3、 当栈中发生溢出时,canary 将被首先淹没,之后才是 EBP 和返回地址。
4、 在函数返回之前,系统将执行一个额外的安全验证操作,称作 Security Check。 5、在 Security Check 过程中,系统将比较栈帧中原先存放的 canary 和.data 中副本的值,若两者不同,则说明栈中发生了溢出,系统将进入异常处理流程,函数不会正常返回。
如图所示,(图自 Dynamic Canary Randomization for Improved Software Security 论文)

GCC 4. 中的堆栈保护实现:*
Stack Guard 是第一个使用 Canaries 探测的堆栈保护实现,它于 1997 年作为 GCC 的一个扩展发布。最初版本的 Stack Guard 使用 0x00000000 作为 canary word。尽管很多人建议把 Stack Guard 纳入 GCC,作为 GCC 的一部分来提供

该博客探讨了GCC 4.*中的Canary技术,用于防止栈溢出攻击。Canary是在函数调用时插入栈中的随机DWORD,如果栈溢出,安全检查会对比栈中的Canary与.data区域的副本,不同则触发异常。GCC 4.1引入了Stack-smashing Protection (SSP),增强了Stack Guard的保护能力。然而,Canary机制并不能防止所有类型的缓冲区溢出,且可能因不同机器栈地址增长机制而影响保护效果。实验展示了开启和关闭Canary保护的运行结果。
最低0.47元/天 解锁文章
1746

被折叠的 条评论
为什么被折叠?



