Gollum:解释器堆溢出的模块化灰盒漏洞利用生成
在即将举行的ACM计算机与通信安全会议(CCS)上,我将发表一篇关于自动漏洞利用生成(AEG)的论文,标题与本博客文章相同。论文可在[此处]获取。
系统概述
论文中讨论的系统专门用于在解释器中自动发现原语并构建堆溢出漏洞利用。该方法与大多数其他AEG解决方案的不同之处在于它完全采用灰盒方法,依赖轻量级插桩和各种类似模糊测试的输入生成技术。
![工作流程图展示了Gollum生成漏洞利用和原语的过程]
评估结果
我使用PHP和Python解释器中的10个漏洞作为测试用例,将其作为Gollum的输入以搜索原语并构建漏洞利用。
![漏洞利用生成和原语搜索结果]
三大核心发现
1. 多阶段AEG流程
通过将问题分解为不同阶段,可以使用轻量级插桩和相对简单的输入生成的模糊测试组合来攻击多个阶段。传统AEG系统主要使用符号执行,虽然有其优势,但也遇到了符号执行预期的所有可扩展性问题。
在USENIX Security的论文中,我展示了如何通过轻量级插桩,使用应用程序的现有测试结合模糊器来发现可用于执行堆布局操作的语言片段,以及分配有趣对象进行破坏。在CCS论文中,我展示了如何使用类似方法发现漏洞利用原语,并在某些情况下甚至构建漏洞利用。
2. 延迟解析方法
在自动构建堆溢出漏洞利用时,需要实现所需堆布局的解决方案和构建漏洞利用其余部分的解决方案。我引入了漏洞利用生成中任务延迟解析的概念, essentially,这是一种以相反顺序解决堆布局操作和漏洞利用生成其余部分问题的方法。
这种延迟解析方法允许:
- 在假设困难问题可解决的情况下检查生成漏洞利用的可行性
- 仅在确认能实现漏洞利用时才解决困难问题
- 支持手动和自动组件的混合使用
3. 遗传算法优化
在去年的USENIX Security论文中,我讨论了一种用于堆布局操作的随机搜索算法。正如所料,遗传算法在优化两个要相邻放置的块之间的距离方面表现更好,尽管代价是实现更复杂和耗时。
![随机搜索与遗传算法解决堆布局基准测试的百分比对比]
技术意义
这项研究展示了模糊测试驱动的漏洞利用生成可能成为未来几年的主流方法,而符号执行将在需要其位精确推理且状态空间爆炸可受限的场景中发挥作用。