摘要

Java反序列化漏洞已经成为当下Java应用安全的常见威胁,其中能够找到反序列化利用链是该类型漏洞能否利用的关键。由于Java应用及依赖库的代码空间大和Java本身多态的问题,人工分析Java反序列化利用链,需消耗大量的时间和精力,且高度依赖分析人员的经验知识。因此,研究如何高效且准确地自动化挖掘反序列化利用链至关重要。提出了基于混合分析的Java反序列化利用链挖掘方法。根据变量声明类型构造调用图,通过调用图分析筛选可能到达危险函数的反序列化入口函数。将筛选出的入口函数作为混合信息流分析的入口,开展同时面向指针和污点变量的混合信息流分析,对隐式创建的对象标记污点,在传播指针信息的同时传播污点信息,构建混合信息流图。基于混合信息流图判断外部污点数据传播到危险函数的可达性。根据污点传播路径构造相应的反序列化利用链。混合分析兼顾了调用图分析的速度和混合信息流分析的精度。基于提出的混合分析方法,实现相应的静态分析工具——GadgetSearch。GadgetSearch在Ysoserial、Marshalsec、Jackson历史CVE、XStream历史CVE4个数据集上的误报率和漏报率比现有的工具Gadget Inspector低,并且发现多条未公开利用链。实验结果证明,所提方法能够在多个实际Java应用中高效且准确地挖掘Java反序列化利用链。