了解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 编译器选项保护以下项:

函数调用的返回地址;

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

易受攻击的函数参数;

相关推荐
醒醒1112 小时前
从微信小程序到全端:一个安全扫描器的演进之路(v0.5.0 → v0.6.0)
前端·安全
萧瑟余晖2 小时前
Spring Security综合实战与安全加固详解
java·安全·spring
广东帝工2 小时前
如何保障智慧航道的安全
安全
其实防守也摸鱼2 小时前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全
狂师3 小时前
2026年安全测试工具大全,15款主流工具一次看懂
安全·测试
qq_443132413 小时前
运营商网络安全监测项目厂商选择要点与建设思路
安全·web安全
是真的小外套3 小时前
第18章:网络安全测评技术与标准
安全·web安全
weixin_446260853 小时前
LLM‑SafeOrbit:面向工具调用智能体的安全轨道约束防护框架
安全
一条泥憨鱼4 小时前
AI Agent 安全实践:从 MCP 工具调用到 Java 权限校验
java·人工智能·安全
流烟默5 小时前
A2A 与 MCP 双协议网关设计指南
安全·agent·mcp·a2a