了解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. vs code go环境安装调试

    2024-06-05 23:10:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-05 23:10:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-05 23:10:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-05 23:10:02       87 阅读
  4. Python语言-面向对象

    2024-06-05 23:10:02       96 阅读

热门阅读

  1. 6.13 CO-RE(Compile Once – Run Everywhere)简介

    2024-06-05 23:10:02       32 阅读
  2. Github 2024-05-29 开源项目日报Top10

    2024-06-05 23:10:02       28 阅读
  3. Mysql常见日志作用

    2024-06-05 23:10:02       23 阅读
  4. 致远V8.0集成帆软10版本部署教程

    2024-06-05 23:10:02       75 阅读
  5. 分布式缓存

    2024-06-05 23:10:02       32 阅读
  6. 认识 DECIMAL 类型

    2024-06-05 23:10:02       26 阅读
  7. 记一次linux获取截取pid截取不全的问题

    2024-06-05 23:10:02       38 阅读
  8. rust显示类型转换-语言规则设计思考

    2024-06-05 23:10:02       38 阅读
  9. OpenSSL自签名证书

    2024-06-05 23:10:02       38 阅读