TETRIS: Automatic UAF Exploit Generation by Manipulating Layout based on Reactivated Paths

本文介绍了一种新的自动化系统TETRIS,专为用户空间应用设计,通过内存冲突策略生成UAF漏洞利用,无需深入了解堆分配器机制。TETRIS通过重新激活路径(RAP)概念和快速布局探索,有效解决现有AEG在UAF漏洞利用中的挑战。实验结果显示,TETRIS在19个CTF程序中表现出色,生成了15个程序的利用案例。
摘要由CSDN通过智能技术生成

摘要

针对使用后释放(Use-After-Free,UAF)漏洞的自动利用生成(Automatic Exploit Generation,AEG)是一项具有挑战性的工作。程序语义之间的复杂依赖关系和堆分配器的不可预测行为增加了困难。现有的UAF漏洞AEG解决方案依赖于模糊器在整个程序空间中搜索可利用状态,效率较低。本文提出了TETRIS,一个用于用户空间中自动生成UAF漏洞利用的系统。TETRIS采用内存冲突策略,自动推断利用漏洞触发后的目标内存布局。为了构建目标布局,我们提出了“重新激活路径”(Reactivated Path,RAP)的概念,用于表示布局操作的程序语义,并在此基础上构建了一种新颖的快速布局探索技术。我们的方法不需要任何关于堆分配器内部机制的知识,并且可以通过替换目标布局推断部分轻松部署到其他堆内存破坏漏洞上。我们在一组19个CTF(夺旗赛)程序上对TETRIS进行了基准测试。结果表明,TETRIS可以为其中的15个程序生成利用,同时也可以生成满足布局要求的输入。与其他最先进的AEG工具进行的评估表明,TETRIS可以更高效地生成UAF利用。

关键词—自动利用生成,使用后释放漏洞,堆布局操作。

引言

随着自动漏洞发现工具的成功部署,越来越多的使用后释放(Use-After-Free,UAF)漏洞被发现,包括内核和应用程序中的漏洞,例如Microsoft Office、浏览器、邮件服务器、虚拟化软件等等。就在几年前,UAF漏洞已经成为使用不安全语言(如C/C++)编写的软件中最常被利用的内存错误之一,许多零日攻击都是通过UAF漏洞发起的,对网络安全构成了严重威胁。

快速评估UAF漏洞的可利用性对于供应商和攻击者都很重要。为了实现这一目标,引入了自动利用生成(Automatic Exploit Generation,AEG)来评估漏洞的可利用性,并且研究人员在内核和解释器中对UAF漏洞的利用性评估取得了进展。然而,对于用户空间应用程序(而不是解释器),自动利用UAF漏洞仍然是一项困难的任务,原因在于漏洞本身和程序运行环境的复杂特性。经过对当前AEG方法的深入研究,我们意识到挑战主要来自以下几个方面:

对堆布局的要求:一般来说,对于栈溢出或堆溢出漏洞,研究人员可以直接更改概念验证(Proof of Concept,PoC)输入的上下文来促进漏洞的利用,而利用UAF漏洞则需要不断地操作堆布局。更具体地说,为了完全利用UAF漏洞,我们需要指导搜索引擎不断接近目标堆布局。布局指导的不足或偏离将导致程序处于不可利用状态,这意味着我们需要遵循一种稳定可靠的方法来安排布局。

程序接口的识别不足:程序通常将堆操作封装为API(应用程序编程接口)以与用户进行交互。针对内核或解释器的利用可以通过程序提供的接口显式触发特定的堆操作。然而,用户空间二进制程序的接口对于自动分析工具来说通常是模糊的,这给堆布局的构建带来了困惑。现有的AEG解决方案对接口实现的细节和输入与接口调用之间的关系了解不足,很难调用特定的堆操作来构建所需的布局。

堆分配器的复杂性:堆分配器的行为是不可预测和多样化的,这也对构建目标布局带来了挑战。以Linux系统下的ptmalloc(堆分配器)为例,ptmalloc中的一些堆管理函数来自内部机制,例如堆块合并、分区和扩展,这对于当前的AEG解决方案(如MAZE)来说很难预测这些行为。此外,链表和缓存机制的存在使得堆块的空间状态更加复杂,也增加了堆分配器的灵活性。由于上述原因,很难准确控制堆分配器的行为,这增加了当前AEG解决方案对堆布局操作的难度。

为了应对这些挑战,我们提出了一种新的解决方案TETRIS,用于在触发UAF漏洞后构建堆布局并生成用于劫持程序控制流的输入。如图1所示,与其他将固定API视为接口并在其上构建利用的解决方案不同,TETRIS使用提取的交互序列构建利用,这些序列不限于一个固定的API。首先,RAP提取模块从目标二进制中提取影响内存布局并可以被用户输入多次激活的交互序列。然后,当给定触发UAF漏洞的PoC时,内存布局推断模块通过改变恐慌上下文来自动搜索易受攻击的对象,并生成布局指导。在此之后,基于提取的RAP,快速布局探索模块搜索连接初始布局和目标布局的路径,并生成触发利用原语的输入。该阶段不依赖于对分配器内部机制的任何了解。最后,利用生成模块接受该输入,并在可能的情况下生成最终的利用。

总结起来,本论文的贡献如下:

我们提出了一种自动化解决方案TETRIS,这是一个基于快速布局操作方法的UAF漏洞利用框架,可以将概念验证输入转化为利用输入。它能够探索原语、促进可利用状态的迁移,并在某些情况下直接生成可工作的利用。
我们提出了"Reactivated Path"(RAP)的概念,以布局操作的视角来表示程序的语义。
我们构建了一种新颖的快速布局探索方法,该方法基于RAP,在模拟执行和引导模糊测试的基础上,快速构建目标布局。
我们已经实现了TETRIS的原型,并展示了它在CTF程序中的有效性。

II. RAP EXTRACTION

为了分析从二进制可执行文件中可以多次触发的路径,我们利用模糊测试来探索路径,然后基于滑动窗口方法提取RAP。

A. RAP定义

RAP可以形式化地定义为R = 〈s, dC, dD〉,其中s = 〈o1, o2, ··· , oN〉,oi ∈ O:{A, F, E}表示操作序列(A、F、E分别表示分配、释放和重新分配操作),dC和dD表示与其他RAP的控制流和数据流依赖关系。dC和dD的详细说明将在下文中解释。

控制流依赖dC。

不同RAP之间存在控制流依赖关系,主要体现在RAP之间的触发顺序上。以图2中的代码为例,delete函数中的r2.s:FFF只能在add函数中的r1.s:MMM执行后被调用,我们说r2对r1有控制流依赖,并表示该依赖关系为r2.dC = {r1}。

数据流依赖dD。

RAP之间以及一个RAP内部也存在数据流依赖关系,主要体现在堆操作的参数上。例如,在图2中,delete函数中第20行的free操作(属于RAP r2)的参数必须指向在add函数中第15行分配的缓冲区(属于RAP r1),我们说r2对r1有数据流依赖。RAP的数据流依赖dD是指该RAP内每个操作的参数的集合,定义如下:

o.a = ⎧⎪⎨ ⎪⎩ f(A) o ∈ A {ptr(m,n)} o ∈ F 〈f(A), {ptr(m,n)}〉 o ∈ E

对于分配操作,dD可以表示为A的函数,其中A是影响o的分配大小的一组操作参数。对于释放操作,dD可以表示为一组ptr(m,n),它表示在RAP rm中分配/重新分配时返回的指针。对于重新分配操作,dD可以表示为相应分配和释放操作的dD的组合。

B. 路径探索和提取

探索。

为了在二进制软件中探索更多的路径,可以使用符号执行或模糊测试。然而,由于符号执行的代价高且不可扩展,我们利用最先进的基于覆盖率的模糊测试来探索目标程序中的路径。为了避免循环引起的覆盖率噪声,典型的基于覆盖率的模糊测试将不同的循环次数视为重复,并忽略它们。例如,AFL [10]将不同的循环次数分解成桶,并且只有跨不同桶的新行为被视为新的覆盖。这个特性有助于促使模糊测试工具探索更多的路径。然而,它会降低RAP提取的性能,因为我们的方法需要重复的路径来隔离可重复的路径。为了解决这个问题,我们禁用了这个特性,并在收集到每个循环次数的固定数量的测试用例后重新启用它。

第七部分:相关工作

为了搜索由破坏的分配器元数据引起的利用原语,Repel等人[12]首次展示了堆溢出的AEG方法。为了解决堆利用的衍生问题,Wang等人[13]提出了一种名为Revery的解决方案,它采用面向布局的模糊测试和控制流拼接技术,可以在分叉路径而不是崩溃路径中搜索可利用的状态。为了便于利用内核漏洞,Chen等人[20]构建了SLAKE,通过静态和动态分析技术识别内核对象和对利用有用的相应系统调用。为了将已识别的可利用状态与触发代码重用负载的执行连接起来,Wu等人[21]提出了Kepler,它接受控制流劫持原语作为输入,并利用普遍的内核编码风格和相应的gadget符号地拼接利用链,以启动任何内核ROP负载。为了自动生成解释器中的堆溢出漏洞的利用,Heelan等人[7][22]利用回归测试获取了如何执行堆布局操作的知识,并提出了名为Gollum的系统,用于使用基于堆的溢出自动生成利用。Gollum包含了许多新颖的想法,包括挖掘提供原语的代码片段的测试,延迟解析堆布局,用于堆布局操作的遗传算法,以及完全基于灰盒的自动生成利用方法。

第八部分:结论与未来工作

为了解决现有AEG解决方案在UAF漏洞方面能力不足的问题,我们提出了一种名为TETRIS的自动化解决方案,通过布局操作来促进利用生成,它采用了一种新颖的程序语义识别方法和快速布局探索技术。实验证明,我们的方法可以构建目标布局并为易受攻击的程序生成利用,相比其他最先进的AEG工具,它的工作效率更高。更重要的是,TETRIS在不需要了解堆分配器内部机制的情况下工作,并且可以通过替换目标布局推断部分轻松部署到其他堆内存破坏漏洞中。然而,仍然存在一些缺陷,例如缺乏利用方法和可利用对象的限制。在未来的工作中,我们将努力改进这些方面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值