实验要求:调研 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 论文)