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

函数调用的返回地址;

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

易受攻击的函数参数;

相关推荐
龙亘川6 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19916 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
LorryJovens6 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼6 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
山东科恩光电6 天前
提升安全性的关键技术:安全触边在工业自动化中的应用解析
安全
LONGZETECH6 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
Mikko76 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
赛博守夜人6 天前
反舞弊系列之十四:商业地产与零售招商中的“转租差价与免租期寻租”
安全
xiaoqiMikko6 天前
你升的是 jackson-databind,中招的是 jackson-core:一个超长 JSON key 就能吃掉 200MB 堆
java·安全