Canary栈保护机制

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

实验要求:调研 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 论文)
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值