漏洞自动化利用(AEG)研究进展(2)
CRAX主要是针对AEG中的一个缺陷做的改进。AEG收集运行时信息,并且只在漏洞触发的时候计算exp。产生的exp可能会由于漏洞点和触发exp点的传播距离而失效。比如下面的代码。漏洞点在第四行的strcpy,触发漏洞是在第六行函数返回的时候,而这个时候第五行修改了之前计算的exp,就会导致最后的exp失效。(下图来自于论文。)
CRAX的方法和angr文档里的simple AEG的思路很像。第一步是去找符号化的EIP,也就是看输入能否控制程序指针PC。第二步是找到符号化的内存,看看能否注入shellcode。当确定了shellcode的位置后,CRAX会在shellcode前面放很多的滑板指令NOP来扩充shellcode的入口。最后,所有的约束,包括shellcode,NOP sled,EIP寄存器的约束都会送到solver去求解,得到最终的exp。如果得不到解,就会去改变shellcode的位置,直到求出解或者没有可用的符号buffer了。(下图来自于论文。)
3.2 针对堆溢出的AEG
针对堆漏洞的自动化利用工作到2016年以后才陆续开始出现。这也是近几年来的研究热点。我认为有几个原因:
a. 相比栈漏洞,堆漏洞的利用更为复杂,更需要自动化利用工具来对其进行评估b. 先前的工作主要是针对栈上的漏洞,做堆漏洞的工作在2016年前没有c. 堆漏洞在这几年增加的要比栈漏洞快
由于堆利用复杂性,有些工作聚焦于堆布局的自动化。比如Usenix18 的SHRIKE[6]和CCS 19 的slake[7],分别是针对解释器和内核的堆漏洞的自动化操纵布局。
SHRIKE是第一个堆布局自动化操纵的研究,其方法是基于伪随机黑盒搜索。SLAKE使用动态和静态分析来分析内核对象和相应的系统调用。然后,对常用的利用方法进行建模,最后实现了一种slab布局调整的方法。
下面介绍的针对各类应用场景堆漏洞的AEG工作,比如浏览器、内核、解释器等。
REVERY[8]
现有的AEG方法通常是探索crashing path来找到可利用的状态,比如由PoC触发的漏洞的路径和生成的利用通常是在一条路径上。然而,1.可利用的状态不一定总在crashing path上。2.并且,现有的方法严重依赖符号执行,并且在路径扩展和利用生成的扩展性不好。
为了解决这两个问题,revery使用了三种技术:
0x1. layout-contributor digraph 来描述漏洞的内存布局和指令0x2. layout-oriented fuzzing去探索和crashing paths有相同内存布局的路径0x3. control-flow stitching 来连接crashing paths和diverging path,最后生成利用。
(下图来自于论文。)
HEAPG[9]
由于现有的方法都是通过破坏一个敏感指针然后实现一个内存读写或者间接调用,也就是说敏感指针是劫持控制流的关键。在这个例子里,一旦堆布局准备好,攻击者只要一次就可以构造利用原语。然后实际很多漏洞需要多个步骤才能实现利用。为了实现这点,HEAPG利用专家知识来指导利用生成。具体来说,HEAPG,以crashing input,二进制程序和专家知识作为输入,然后通过利用堆分配器内部的特性,能够对很难利用的漏洞生成利用。(下图来自于论文。)
PrimGen[10]
针对浏览器这类有广大用户人群,且极为复杂的软件,其漏洞利用过程通常是个耗时耗力,多步骤的过程。为了减轻安全人员的工作量,PrimGen自动化了部分浏览器漏洞的利用过程。对于给定的一个漏洞,PrimGen能够自动构造数据对象喂给浏览器导致执行恶意行为。
PrimGen主要分为两部分,第一部分预处理,基于二进制程序生成CFG和SSA,并且收集一些数据,比如函数的entry,寄存器的定义/使用,内存读写和控制流信息。更进一步,PrimGen利用动态分析来获取控制流和内存信息(利用debugger在控制点下断点来执行crashing input。)然后就可以提取动态踪迹和内存信息。
第二部分用datalog-based方法去找控制点后的可控数据。在确定了控制点的位置后,开启分析去找到可到达的sink。基于这些信息,构造了一个图来描述从一个基本块到另外一个基本块的控制流。有了这些图,再利用符号执行去执行到skin的路径,并过滤掉不可解的路径。在这个步骤中,会收集所有与控制数据相关的约束,并且用于构建内存映射表。基于映射表可以指导如何构造对象。基于前面动态分析获得的memory dump,PrimGen可以验证每条与内存映射绑定的路径是否满足利用条件。最后,给定一个VUT的堆喷射模板,PrimGen的模型可以生成喂给浏览器的脚本。(下图来自于论文。)
文章来源:《冶金自动化》 网址: http://www.yjzdhzz.cn/zonghexinwen/2021/0518/484.html