科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道安全管理栈溢出攻击基本原理及防御方法培训教程

栈溢出攻击基本原理及防御方法培训教程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于管理员来说,了解栈溢出攻击的原理可以明白采取什么样的操作才能更好的保护操作系统,并给软件开发者提供学习的机会,知道采用什么样的代码才能让他们的程序避免遭遇来自堆栈缓冲区溢出漏洞的攻击。

作者:ZDNet安全频道 来源:ZDNet安全频道【原创】 2010年3月5日

关键字: 安全 防御 攻击 栈溢出

  • 评论
  • 分享微博
  • 分享邮件

ZDNet安全频道原创翻译 转载请注明作者以及出处

  对于管理员来说,了解栈溢出攻击的原理可以明白采取什么样的操作才能更好的保护操作系统,并给软件开发者提供学习的机会,知道采用什么样的代码才能让他们的程序避免遭遇来自堆栈缓冲区溢出漏洞的攻击。

------------------------------------------------------------------

  在很多编程语言中,内存结构都被用来存储变量状态参数,通常情况下,它被称为“堆栈”。在以堆栈为重要功能的编程语言中,最著名的可能就是C和C++了。Forth也是一种因重视堆栈功能而出名的计算机编程语言。程序控制流也是由堆栈进行管理的。

  对堆栈中的内存进行管理的时间需要非常小心,以保证存储在其中的数据将不会超过堆栈空间已分配变量的数量。如果数量超过了已分配的数量,更多的数据可以覆盖堆栈空间中的已有数据,从而导致其它变量和程序控制流出现错误。

  如果一名恶意黑客能够故意分配给堆栈空间一个超过实际大小的变量,他或她就可以利用恶意数据对程序控制流产生实际上的影响。这种攻击行为就是我们经常说的“栈溢出攻击”,取决于软件被攻击漏洞的情况以及实际的运行环境,它甚至有可能造成操作系统崩溃的后果。

  对于栈内存管理中的漏洞来说,栈溢出攻击是非常危险的。栈溢出攻击实际上属于缓冲区溢出攻击的一种,有些时间它还会被叫作堆栈缓冲区溢出攻击。软件中的很多漏洞实际上只能影响特定的部分,但内存管理漏洞常常可以“超过”对软件的限制,影响到系统的其他部分,将软件中一个小小的缺陷转变为对整个系统环境的巨大威胁。

  很多软件解决方案都可以防止或检测出可能被利用的栈溢出漏洞。为了避免系统遭受栈溢出攻击,我们必须了解有两种类型的保护方式:不可执行堆栈和堆栈关键字(canaries)。每大类下面都包括若干子类。

  Ø 不可执行堆栈:采用不可执行堆栈保护模式的解决方案有基于软件和硬件两钟。它们可以通过分类为可执行堆栈和不可执行堆栈的方法,来保证将不应该被运行的数据保存在不可执行堆栈中。这样的话,如果一名恶意黑客(或者程序中的一个缺陷)重写变量尾部的话,操作系统至少不会尝试执行恶意的数据。很多操作系统的变量管理都采用了不可执行堆栈模式,它们包括了FreeBSD的PG_NX、微软Windows数据执行保护(和“软件数据执行保护”不是一回事)、OpenBSD的W^X以及红帽Linux的Exec盾牌。

  Ø 堆栈关键字(canaries):堆栈关键字包含了随机关键字、随机异或(XOR)关键字和终止关键字等子类。实际上,关键字的用途是对存储的数据进行验证。这样的话,当出现恶意数据时,它和正确数据之间的差别将会被识别出来,对漏洞的攻击就会被阻止。理论上来看,尽管在实现方式上可能会有不同的途径,但这都需要一名潜在攻击者直接访问堆栈以避免重写“关键字”。

  关于这个话题,详细介绍的话可以写一本书。如果你愿意的话,也可以对它进行深入的研究。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章