缓冲区溢出

来源:互联网 发布:mac迅雷下载速度0 编辑:程序博客网 时间:2024/05/29 16:33

 缓冲区溢出指在栈中分配某个字节组来保存一个字符串,但是字符串的长度超过了为它分配的空间

缓冲区溢出的危害:

  1. 破坏栈中保存的寄存器的值
  2. 破坏了栈中存储的返回地址,那么ret指令会使程序跳转到完全意想不到的地方
  3. 可能让程序执行它本来不愿意执行的函数(输入攻击代码
对抗缓冲区溢出攻击的方法:
  1. 栈随机化---过去的栈的位置是相当固定的,程序的栈地址非常容易预测到。如果攻击者可以确定一个常见的服务器所使用的栈空间,就可以设计一个在许多机器上都能实施的攻击。栈随机化就是使得栈的位置在程序每次运行的时候都有变化。即使许多机器运行同样的代码,它们的栈地址都是不同的。实现的方法:在程序开始时,在栈上随机分配0~n个字节的空间,这样程序执行的时候栈的位置就会发生变化
  2. 栈破坏检测--在栈中任何局部缓冲区与栈状态之间存储一个特殊的哨兵值,它由程序运行时随机产生,因此攻击者没有简单的方法知道它的值,在恢复寄存器状态和从函数返回之前,程序检测哨兵值有没有被破坏,如果是则终止程序
  3. 限制课执行代码区域--将栈中某些地方标记为不可执行

0 0
原创粉丝点击