漏洞自动化利用(AEG)研究进展(3)
Gollum[11]
gollum是第一个针对解释器堆溢出漏洞的AEG研究。文章提到大多数的AEG系统针对的是命令行的程序或者类似文件解析器的系统。而解释器和这些程序不一样,并且打破了现有AEG系统的假设。一个假设是利用符号执行可以推断输入文件和目标行为的关系。而解释器的状态空间很大,并且输入程序的值和程序状态有很多非直接的关系。解释器有很多漏洞,但这里针对堆溢出漏洞有2个原因,一是堆漏洞比较常见,二是现有AEG系统做的还不够完善。
文章关于堆布局的自动操作是基于作者之前工作SHRIKE的基础上。另外文章的亮点还在于用了遗传算法来代替之前的伪随机搜索算法。感兴趣的可以去看论文。(下图来自于论文。)
FUZE[12]
FUZE针对的是内核的UAF漏洞。这是篇将符号执行与模糊测试结合的AEG文章。具体来说,从漏洞触发点开始用模糊测试探索路径。然后在指针解引用的地方用符号执行再去探索路径。(下图来自于论文。)
KOOBE[13]
KOOBE针对是内核的Out-of-Bound(OOB)漏洞。针对现有的方法无法完全挖掘漏洞的能力,KOOBE定义了OOB漏洞的能力为三点:能写多远、能写多少、能写什么。并利用OOB漏洞的能力来指导模糊测试。(下图来自于论文。)
3.3 针对其他漏洞的AEG
这篇文章[14]提出了一个完整的自动化目标栈喷射方法来自动化利用内核的未初始化漏洞。目标栈喷射技术包含两点:
a. 确定的栈喷射技术,结合定制的符号执行和模糊测试来识别内核输入,这个内核输入指的是攻击者利用用户程序在确定地执行内核代码路径,从而在内核栈上留下攻击者控制的数据。b. 内存喷射技术,使用内存占用和污染来可靠地控制内核栈上的一大块空间。
所以,这两个技术概括来说,一个是精准定位,一个是大面积覆盖。并且作者利用这个技术和未初始化漏洞可以实现提权。此外,作者还提供了一种基于编译器的防御机制,来初始化可能不安全的指针类型,并且没有太多的额外性能。文章的结果显示,未初始化使用是一个很严重的攻击,所以未来的防御系统需要考虑这种漏洞,并且系统软件不应该使用未初始化内存来作为随机源。(下图来自于论文。)
4. 评估方法
目前的评估数据集主要有三类:
a. CVE漏洞
b. syzbot平台上的漏洞(谷歌用fuzzer找到的内核漏洞)
c. CTF比赛程序
CVE漏洞的优点在于其是真实存在的漏洞。用CVE来做测试集,工具的实际意义比较大。
大部分的工作用的都是实际的CVE来做评估测试。一些内核漏洞的工作会用到syzbot平台。因为syzbot平台上的漏洞还没经过评估成为CVE,有比较大的评估价值。
Revery[8]和KEPLER[15]用到了一些CTF比赛的数据集。这类数据集的优点前期测试工具比较方便,网上也有相应的exploit。但存在问题是这类程序的规模一般不大,可能无法评估工具能否实用。
5. 未来可能研究方向
如何对漏洞进行建模是这个领域的一个难点。建模时需要考虑漏洞的类型,漏洞程序的类型(浏览器,内核),漏洞的能力(能写多远,能写多少字节,能写什么值)。因为现有的漏洞自动化利用的实现主要是基于符号执行和模糊测试,而这两种技术都存在搜索空间很大的弊病。因此,充分利用漏洞的信息能够在一定程度上降低搜索空间。比如KOOBE这篇文章就是将漏洞能力融入到模糊测试中去,进而提高了模糊测试的效率。
未来的研究可能会针对更多更难利用的漏洞去实现AEG,比如竞争?或者针对更广的应用场景,比如嵌入式设备、固件?此外漏洞自动利用还有个难以解决的问题,就是如何确定漏洞的可利用性的边界。现有的工作对这个问题的回答还不是很好。因为目前的工具不能生成一个漏洞的利用,并不代表这个漏洞是否不可利用,有可能是工具自身的问题。当然这也是个很困难的问题。
文章来源:《冶金自动化》 网址: http://www.yjzdhzz.cn/zonghexinwen/2021/0518/484.html