首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

缓冲区溢出攻击的分析(下)

在缓冲区溢出攻击的分析(上)一文中,我们为大家分享了缓冲区溢出漏洞的概念及攻击方式,对该类型攻击有了更多的认知;本文我们将会为大家介绍缓冲区溢出漏洞攻击的分析技术及安全防御措施,帮助大家可以更好的解决此类威胁攻击。

四、缓冲区溢出漏洞分析技术

当出现了缓冲区溢出漏洞之后,我们应该掌握的就是漏洞分析技术,以便进行区分和应对。实际上,缓冲区溢出漏洞分析技术旨在防止软件内部的缓冲区溢出漏洞被外部攻击者利用。因此,缓冲区溢出漏洞分析技术可以按照应用场景分为漏洞自动检测技术、漏洞自动修复技术和漏洞运行时防护技术。

漏洞自动检测技术:通过静态检测、动态测试的方式,在软件发布前,及时地发现软件中的缓冲区溢出漏洞,以便于对源代码进行人工修改。

漏洞自动修复技术:在检测出软件中的缓冲区溢出漏洞后,通过先进的分析手段,自动修改源代码或二进制代码,将软件中的缓冲区溢出漏洞剔除掉,对其进行修复。

漏洞运行时防护技术:在软件发布后,不再对源代码进行更改,站在防止攻击者利用的立场,对某些关键对象/性质进行完整性/机密性/可用性保护(如对RETADDR进行完整性保护)。相当于把可能存在缓冲区溢出漏洞的软件放在一个安全的保护罩里去运行。

如下,对三种分析技术简单解析:

1)漏洞自动检测技术

对于内存组织方式,一旦发生堆缓冲区溢出或栈缓冲区溢出,将会使数据越过相应的内存块,覆盖堆或栈的其他字节,甚至写到函数返回地址及数据区,从而带来严重后果。因此,很多研究关注自动化地发现软件漏洞,通过检测缓冲区访问索引与缓冲区大小之间的关系来判定缓冲区溢出的发生。具体分为静态检测和动态测试两种方法。

(1)静态检测是指在不运行软件前提下进行的检测过程。静态检测的对象一般是程序源代码,也可以是目标码。

静态检测技术采用的分析技术是静态分析技术。静态分析按照对模型节点的遍历方法可以分为正向分析、逆向分析、无向分析。正向分析是指从可能发生缓冲区溢出漏洞的源节点出发,正向遍历模型中的节点,在遍历的过程中生成相应约束或提取部分属性进行分析的分析方法;逆向分析是指从可能发生缓冲区溢出漏洞的槽(sink)节点出发,逆向遍历模型中的节点,在遍历的过程中生成相应约束或提取部分属性进行分析的分析方法;无向分析是指在分析过程中不考虑节点的前驱节点、后继节点和到达节点的条件等语义信息,只考虑节点自身的语法信息进行分析的方法。

缓冲区溢出漏洞静态检测技术可以按照主要采用的技术种类、采用技术的深度及静态分析的侧重点分为:

基于抽象解释的缓冲区溢出漏洞静态检测技术;

基于符号执行的缓冲区溢出漏洞静态检测技术;

基于污染传播的缓冲区溢出漏洞静态检测技术;

基于特征分类的缓冲区溢出漏洞静态检测技术。

(2)动态测试技术是指从通常无限大的执行域中恰当地选取一组有限的测试用例来运行程序,从而检验程序的实际运行结果是否符合预期结果的分析手段。安芯网盾认为基于动态测试的缓冲区溢出检测工具需要在检测对象编译生成的目标码中置入动态检测代码或断言的基础上运行测试用例,观察待测程序。该方法能够在一定程度上检测出缓冲区溢出漏洞,但是生成及运行测试用例时性能开销较大。并且由于无法做到测试用例完全覆盖程序中所有可执行路径,有漏报率较高的缺点。动态测试技术的核心在于如何生成覆盖率高的测试用例,或者生成虽然覆盖率不高,但是能够命中要害、触发缓冲区溢出漏洞的发生的测试用例。如何高效地产生能够到达并触发应用程序漏洞部分的测试用例,是该技术的最大挑战。

缓冲区溢出漏洞动态测试技术可按照静态分析技术的参与程度分为3种。

(a)不利用静态分析:在整个测试过程中都没有利用静态分析技术分析程序源代码,例如黑盒测试等。

(b)静态分析辅助输入:在测试过程中,静态分析辅助动态测试产生触发溢出漏洞的测试用例,但静态分析本身并不作为独立的检测部分去生成漏洞结果。

(c)静态分析协同检测:在测试过程中,有独立的静态检测部分产生部分溢出漏洞结果,与动态检测组合起来,综合二者优点进行溢出漏洞检测,以求覆盖率更高、更全面地发现程序中的漏洞。

2)漏洞自动修复技术

软件漏洞的自动修复技术是近年来新崛起的研究领域,不但能发现程序中的软件漏洞,还能自动地修复,使软件能够更安全、可靠地运行。自动修复技术的修复发生时间分为软件发布前和软件发布后。漏洞修复技术可按照修复策略的复杂程度分为3种。

(a)采用简单修复策略的缓冲区溢出漏洞修复技术:在进行溢出漏洞修复时,只采取简单常规修复策略的漏洞自动修复技术。例如,对所有要修复的对象都在访问缓冲区前加入条件判断语句,以确保访问位置在缓冲区分配大小内。

(b)采用复合修复策略的缓冲区溢出漏洞修复技术:在进行溢出漏洞修复时,采取多条常规修复策略的漏洞自动修复技术。例如,在修复过程中,依据不同情况采用扩充缓冲区分配大小、访问缓冲区前增加条件判断、替换可能会发生缓冲区溢出漏洞的不安全函数操作等不同策略进行修复。

(c)采用其他修复策略的缓冲区溢出漏洞修复技术:采用对软件进行遗传变异或者其他非常规的方法对溢出漏洞进行自动修复。

3)漏洞运行时防护技术

该技术相当于把可能存在缓冲区溢出漏洞的软件放在一个安全的保护罩里去运行。如果保护罩足够安全,那么,即使外部有攻击,也不会攻击成功,而是终止程序或者根本不影响程序的运行。

本文依据运行时防护策略与信息安全三要素(机密性、完整性和可用性)的保障关系,将缓冲区漏洞运行防护技术分为两大类。

(a)被动防护:旨在保障内存中某些关键对象或性质完整性的防护技术。在程序运行过程中,时刻验证监控某些性质是否得到满足或者某些状态值(如栈中的返回地址或者EBP)是否没被修改。因为时刻在验证关键对象或性质的完整性,当攻击出现时,该技术可以被动地检测到有人尝试在修改某些关键对象或者性质,并在攻击的触发下做相应的防护处理,因此称其为被动防护。

(b)主动防护:旨在保障内存中某些关键对象/性质的机密性/可用性的防护技术。攻击者要想实现攻击,必须对程序运行时的内存某些关键部分(如EBP的内存具体位置)布局情况了解,而如果通过某些技术手段保障了这些关键部分的机密性,让攻击者无法顺利地得到其内存位置信息,那么攻击者就很难攻击成功。

五、基于内存保护的解决方案

对于开发人员来讲,一般可以通过代码中的安全措施或使用提供内置保护的语言来防止缓冲区溢出漏洞。但是,代码和操作系统保护方面的安全措施还不够。而基于内存保护防御缓冲区溢出,可以第一时间发现并防御这类缓冲区溢出漏洞攻击。

缓冲区溢出是较复杂的注入攻击之一,因为它们可以利用开发人员滥用内存的优势。像命令注入一样,成功的缓冲区溢出攻击使攻击者可以完全控制远程计算机。在了解了缓冲区溢出攻击的工作原理之后,组织可以更好地掌握如何防止其渗透到系统中并控制其应用程序。本文为大家介绍了缓冲区溢出攻击的相关内容和解决方案,如何安全防御,答案已经揭晓。

参考资料

http://www.Jos.org.cn/html/2018/5/5504.htm#outline_anchor_18

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210310A02E2200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券