缓冲区溢出和栈溢出

一.缓冲区溢出
         (1)缓冲区溢出是指计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法的数据上,理想的情况是程序检查数据长度并不允许输入的数据超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为“堆栈”,在各个操作进程之间,指令会被临时存储在“堆栈”当中,“堆栈”也会出现缓冲区溢出。
(2)相信大家都听过1988年利用fingerd漏洞的蠕虫,这就是最著名的一个利用缓冲区溢出进行安全攻击的。在当前的网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出。而缓冲区溢出中,最危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回函数的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另一中是跳转,并且执行一段恶意程序,比如shell程序来为所欲为。
  缓冲区溢出攻击的目的在于扰乱具有某些特权运行程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具备了足够的权限,那么整个主机都被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的代码来获的root权限的shell。但是为了达到这个目的,攻击者必须达到如下两个目标:
a.在程序的地址空间里安排适当的代码
b.通过适当的的初始化寄存器和内存,让程序跳转到入侵安排的地址空间执行。
当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”,而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户的shell,再通过shell执行其他命令。如果该程序有root或者suid执行权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。
      缓冲区溢出攻击之所以成为一种常见的安全手段其原因在于缓冲区溢出漏洞态普遍了,并且易于实现。而且缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区漏洞给予了攻击者他所想要的一切,植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。
(3)目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响
a.完整性检查
          在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但是它能阻止绝大多数的缓冲区溢出攻击。
b.非执行的缓冲区
          通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。在早期unix系统设计中,只允许程序代码在代码段中执行。但是由于要实现更好的性能和功能,往往在数据段中动态地放入可执行代码,这也是缓冲区溢出的根源。为了保持程序的兼容性,不可能使得所有程序的数据段不可执行。但是可以设定堆栈数据段不可执行,这样就可以保证程序的兼容性问题。
c.信号传递
          linux通过向进程堆栈释放代码然后引发中断来执行在堆栈中的代码来实现向进程发送unix信号。非执行缓冲区的补丁在发送信号的时候是允许缓冲区可执行的。
d.GCC的在线重用
          研究发现Gcc在堆栈区放置了可执行代码作为在线重用之用。然而,关闭这个功能并比产生任何问题,只有部分功能不可用。
        非执行堆栈的保护可以有效的对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果。通过引用一个驻留的程序指针,就可以跳过这种保护措施。其他的攻击可以采用把代码植入堆或者静态数据段中来跳过保护。
二.栈溢出
      栈溢出就是缓冲区溢出的一种。由于缓冲区溢出而使用得很有用的存储单元被改写,往往会引发不可预料的后果。程序在执行的过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入的数据超过其本身长度的数据,以至于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,缓冲区的长度一般与用户自己定义的缓冲变量的类型有关。
      栈溢出就是缓冲区溢出的一种。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值