了解VS安全编译选项GS

缓冲区溢出攻击的基本原理就是溢出时覆盖了函数返回地址,之后就会去执行攻击者自己的函数;

针对缓冲区溢出时覆盖函数返回地址这一特征,微软在编译程序时使用了安全编译选项-GS;

目前版本的Visual Studio中默认启用了这个编译选项;

GS的工作机制是,

在所有函数调用发生时,向栈帧内压入一个额外的随机DWORD,称为Security Cookie;

Security Cookie位于EBP之前,系统还将在.data的内存区域中存放一个Security Cookie的副本;

当栈中发生溢出时,Security Cookie将被首先淹没,之后才是EBP和返回地址;

在函数返回之前,系统将执行一个额外的安全验证操作,被称做Security check;

这样如果Security Cookie被改变了,就证明受到了缓冲区溢出攻击;

此选项默认开启;VS2015,如下图;

只是了解一下;还不会反汇编跟踪查看到栈帧内的Security Cookie;

如果每个函数调用都进行Security check,对性能还是会有影响;

根据MS的说法,

如果值不同(Security Cookie),则指示可能已覆盖堆栈。 如果检测到不同的值,将终止进程。

如果命令行编译则是加 /GS 选项;

根据MS的说法,

/GS 编译器选项保护以下项:

函数调用的返回地址;

函数的异常处理程序地址;

易受攻击的函数参数;

相关推荐
天途小编1 小时前
引领产业合规化进程:北方天途航空无人机安全操作能力评估系统与民航局UOM平台完成全面技术对接
安全·无人机
微学AI5 小时前
Rust语言的深度剖析:内存安全与高性能的技术实现操作
java·安全·rust
xixixi777777 小时前
了解一下Sentry(一个开源的实时错误监控平台)
前端·安全·开源·安全威胁分析·监控·sentry
不爱学习的YY酱9 小时前
告别局域网束缚!Excalidraw结合cpolar随时随地画流程图
安全·流程图·cpolar
Andya_net13 小时前
网络安全 | 深入了解OAuth 2.0原理
安全·web安全·github
是Yu欸14 小时前
Rust 并发实战:从零构建一个内存安全的“番茄时钟”
开发语言·安全·rust
半个西瓜.14 小时前
车联网安全:调试接口安全测试.
网络·安全·web安全·网络安全·车载系统
1***y17814 小时前
前端构建工具环境变量安全,避免敏感信息
安全
一位搞嵌入式的 genius14 小时前
HTTP与HTTPS深度解析:从明文传输到安全通信
计算机网络·安全·http·https·网络通信
white-persist15 小时前
差异功能定位解析:C语言与C++(区别在哪里?)
java·c语言·开发语言·网络·c++·安全·信息可视化