今天给大家推荐的是来自中国科学院软件研究所可信计算与信息保障实验室苏璞睿研究组投稿的,发表在NDSS 2022的一篇论文Cooper: Testing the Binding Code of Scripting Languages with Cooperative Mutation,该工作是与奇安信技术研究院、宾州州立大学胡宏研究组联合完成的。
近年来,像JavaScript这样的脚本语言正在被集成到商业软件中,以提供统一的接口。例如,Adobe Acrobat接受JavaScript来动态操作PDF文件, Microsoft Office接受VBA来操作Word文件等。为了弥合高级脚本和实现软件的低级语言(如C/C++)之间的距离,需要一个绑定层来进行数据的传输和转化。但是,由于双方的复杂性,绑定代码容易出现语义不一致和实现错误,从而导致严重的漏洞。现有的测试绑定代码的工作仅仅集中在脚本端,因此不能有效挖掘需要特殊内容对象输入才能触发的漏洞。
本文针对该问题,提出了基于内容对象和脚本之间关系的关联性变异方法Cooper,通过同时修改内容对象和脚本代码,来触发脚本解释器中绑定代码中的漏洞。许多软件中的漏洞都是由于程序初始状态和动态操作之间的相互作用的不一致性造成的,而这种不一致性只能通过关联性突变来触发。作者提出了3个方法来实现脚本语言与内容对象的关联性变异。
Object Clustering: 为了方便后期进行关系推断和关联变异,首先需要对内容对象进行语义相似性聚类,来减少内容对象的搜索空间。由于内容对象的属性名称通常携带语义信息,Cooper首先根据对象内的属性名称将对象进行分类;然而这种分类方法过于粗糙,其随后根据对象类中的高频属性集合的Dice相识度来对对象类进行进一步的合并和拆分,从而得到更加细粒度的对象类集合。
Relationship Inference:在获得对象类集合后,我们需要推断对象类与脚本API之间的相关关系。Cooper通过对大量原始样本测试执行,按照API接口执行成功或者失败将所有脚本分为成功集和失败集合,统计两个集合中对象类的出现的比例,从而通过统计学习的方法推测出脚本代码API与对象类之间的关联关系。
Relationship-Guided Mutation:利用第一步获得的对象类集合和第二步获得的关联关系,采用关联变异的方式对内容对象和脚本API进行变异,从而提高变异的有效性。首先随机选择脚本API,并在原始样本中选出与该API相关联的内容对象,关联关系越强的对象具有更加高的优先级被选中进行变异(如下公式4所示);然后采用模板对生成测试脚本,并对选中的内容对象进行变异,作者设计了三种变异方式:Attribute Mutation、Whole-objet Mutation、Universal Mutation;最后将生成的脚本和变异后的内容对象进行组合,形成一个完整的测试样本。
本文实现了原型系统Cooper并对其进行评估,将Cooper生成的对象类和关联关系与相关文档格式手册进行对比,证明其聚类和关系推测结果符合文档的格式和语义关系;
此外,作者设置五组实验测试了Cooper的代码路径发现方面和漏洞挖掘方面的能力,证明关联变异有助于代码路径发现和漏洞挖掘。
作者将原型系统Cooper应用于三个应用广泛地集成了内嵌脚本语言的商业软件中,包括Adobe Acrobat, Foxit Reader和Microsoft Word。成功发现了134个未知漏洞,作者已经将全部漏洞报告给了相关软件产商和国内外漏洞信息发布平台,其中,56个漏洞已经被修复,33个漏洞已被分配了CVE编号。
论文下载:https://www.ndss-symposium.org/wp-content/uploads/2022-353-paper.pdf
论文工具已开源:https://github.com/TCA-ISCAS/Cooper