关于对抗缓冲区溢出攻击的几种方式

8800阅读 0评论2020-06-05 stolennnxb
分类:IT业界

1. 栈随机化:在栈的起始位置,空置随机大小的空间,程序不使用这段空间(0~n字节),但是它会导致程序每次执行时,后续栈帧的位置发生变化。n必须足够大,来防止被破解,但又必须足够小,不至于浪费空间

2. 栈破坏检测:在栈帧中任何局部缓冲区与栈状态之间存储一个特殊的值,是在程序每次运行时随机产生的。在恢复寄存器状态和从函数返回之前,程序检查这个值是否被更改,如果更改,则异常终止

3. 限制可执行代码区域:限制哪些内存区域能够存放可执行代码。比如三种典型的控制访问形式:读、写、和执行


可变长栈帧的管理:当需要在栈上动态分配存储空间的时候,就要用到rbp了,这样的函数汇编之后的结果常常为:

点击(此处)折叠或打开

  1. pushq %rbp/*保存rbp原来的值*/
  2. mov %rsp, %rbp /*保存当前函数的栈的基地址*/
  3. ...
  4. leave /*等同于
  5. mov %rbp, %rsp
  6. pop %rbp*/
  7. ret

上一篇:寄存器以及寻址简介
下一篇:电脑从按下电源键,到BIOS发生了啥?