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

函数调用的返回地址;

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

易受攻击的函数参数;

相关推荐
半个西瓜.3 小时前
车联网NFC测试:NFC信号嗅探测试.
网络·安全·网络安全·车载系统
t***D2644 小时前
MySQL安全
数据库·mysql·安全
EasyDSS7 小时前
革新传统勘探:视频推流平台EasyDSS无人机推流如何赋能高效安全的地质考察?
安全·音视频·无人机
n***29328 小时前
PHP安全编程实践
开发语言·安全·php
翼龙云_cloud9 小时前
亚马逊云渠道商:aws安全组没有加ip用ip访问会有什么问题?
运维·tcp/ip·安全·云计算·aws
学网安的肆伍11 小时前
【033-安全开发篇】JavaEE应用&SQL预编译&Filter过滤器&Listener监听器&访问控制
安全·java-ee
tianyuanwo11 小时前
深入浅出:解读AD域认证与UAC,构建系统安全的两道防线
安全·系统安全·uac·ad域认证
-大头.12 小时前
Web安全攻防深度解析:从理论到实践的全方位防御指南
安全·web安全
BenSmith12 小时前
一道JS引擎题目复现babyjs
安全
学网安的肆伍16 小时前
【032-安全开发篇】JavaEE应用&Servlet路由技术&JDBC&Mybatis数据库&生命周期
安全·servlet·java-ee