二进制漏洞的挖掘与利用始终是网络安全的核心内容之一。目前,漏洞挖掘的自动化程度已经较高,各类并行 Fuzz 平台已能够高效产出大量 Crash。面对 Crash,如何快速判定其可利用性,并编写利用程序是亟待解决的问题。Crash 的可利用性判定属于另一个研究方向,相关内容本文并不涉及。针对 Exploit 的自动生成问题,学术界有一个专有名词:Automatic Exploit Generation。AEG 是安全研究领域首次将“利用自动生成”作为一个研究课题,也代表着漏洞利用自动化的研究逐步拉开序幕。下文将针对 AEG 的研究历程进行简要介绍。

1、 APEG
APEG 是 D.Brumley 等人在 2008 年的 IEEE S&P 会议上首次提出的基于二进制补丁比较的漏洞利用自动生成方法。该方法利用二进制差异比较查找补丁位置,通过分析补丁代码,生成能够触发漏洞的输入数据,结合污点分析技术生成可利用程序。虽然 APEG 的核心思想较为简单,但由于具备较强的可操作性而得到普遍认可。相关论文《Automatic Patch-Based Exploit Generation is Possible: Techniques and Implications》

2、 AEG
为了克服 APEG 对于补丁的依赖以及无法构造控制流劫持的缺陷, T.Avgerinos 等人在 2011 年的 NDSS 会议上提出了 AEG,一种基于源码的劫持控制流的自动利用方案。AEG 采用了前向符号执行与动态指令插桩技术,能够生成具备控制流劫持能力的利用样本,是第一个真正意义上的面向控制流劫持的自动化构建方案。相关论文《AEG: Automatic Exploit Generation》

3、 Mayhem
由于 AEG 依赖程序源代码并受限于编译器等环境因素。S.K.Cha 等人在 2012 年的 IEEE S&P 会议上提出了基于二进制的自动利用方案 Mayhem。该方案采用在线式符号执行与离线式符号执行技术,通过内存建模实现较为实用的自动利用方案。相关论文《Unleashing MAYHEM on Binary Code》

4、 PolyAEG
实现漏洞自动利用方案的重要性不言而喻,对于漏洞危害评估来说,生成高质量、多样性的漏洞利用样本同样意义重大。因此,M.HWang 等人在 2013 年 SecureComm 会议上提出了多样性利用样本自动生成方法 PolyAEG。该方案通过对 8 个漏洞样本进行试验,针对单个控制流劫持漏洞最多生成 4724 个利用样本,为漏洞危害评估提供了有效支持。相关论文《Automatic Polymorphic Exploit Generation for Software Vulnerabilities》

5、 FlowStitch
2015 年 H.Hu 等人在 USENIX Security 会议上首次提出了面向数据流利用的自动化利用方案 FlowStitch。通过在 8 个真实漏洞样本上进行试验,FlowStitch 自动构建的 19 个利用样本不仅可以绕过数据执行以及细粒度控制流完整性等防护手段,并且其中 10 个利用样本还可以在开启地址随机化的环境下成功执行。相关论文《Automatic Generation of Data-Oriented Exploits》

6、Angr
2016 年 Shoshitaishvili 等人在 IEEE S&P 会议上提出了 Offensive Binary Analysis 技术,并开源了二进制分析平台 Angr。 作者所在团队所设计的 Cyber Reasoning System(CRS)Mechaphish 于 2016 年 DARPA 举办的 CGC 竞赛中荣获第三名。Mechaphish 系统中负责漏洞自动化利用的模块 Rex 正是基于 Angr 而实现。相关论文《(State of) The Art of War: Offensive Techniques in Binary Analysis》

7、 Q
为了应对漏洞缓解技术,特别是数据执行保护与地址随机化,E.J.Schwartz 等人在 2011 年的 USENIX Security 会议上提出了一套面向高可靠性漏洞利用的 ROP 代码自动生成方法 Q。严格来讲,ROP 代码生成方案应当属于 Exploit Hardening 而非 Exploit Generation。但面对当前越来越严格的漏洞利用缓解技术,ROP 为利用样本的稳定执行提供了有效的支撑。相关论文《 Q: Exploit hardening made easy》

自首次提出基于二进制补丁比对的漏洞自动化利用方案至今的十年间,针对 AEG 的研究已取得了明显的进展,但相较于漏洞利用的复杂性、安全防御技术的不断演进,要想使得 AEG 在复杂多变的网络对抗中产生实际应用尚有很多问题等待解决。

本人属于刚接触二进制安全的菜鸟,文中内容主要参考中科院软件所苏璞睿老师的《软件漏洞自动利用研究进展》,所涉及论文正在逐步阅读中,力争在后续的学习过程中再产出一些阶段性的总结。

参考文献:
《自动化漏洞利用的重大挑战回顾》
《软件漏洞自动利用研究进展》
《Automatic Exploit Generation:漏洞利用自动化》