关键词:
静态分析
字节码插桩
模糊测试
摘要:
Java作为当下最流行的编程语言之一,在软件、游戏、大数据、物联网、云等领域都有着非常广泛的应用。因此,Java反序列化漏洞成为了近年来Java应用安全的常见威胁。并且,随着Java应用程序及其依赖库的更新与扩展,Java反序列化漏洞的潜在范围也日益扩大。再加上,由于Java应用程序及其依赖库本身的代码空间非常大,人工进行反序列化漏洞挖掘不仅非常消耗时间,而且还高度依赖分析人员的经验知识。为了快速有效地找到应用程序中反序列化漏洞利用链进而挖掘Java反序列化漏洞,已有的一些静态分析工具虽然能够辅助分析人员挖掘利用链,但是其分析结果仍然需要人工进行有效性验证。基于此,本文展开基于静态分析与动态验证的Java反序列化漏洞检测技术研究与设计,并搭建结合静态分析与动态验证的Java反序列化漏洞检测系统,将对应用程序的反序列化漏洞利用链挖掘与检验利用链的有效性两个步骤都实现了自动化,有效提高了挖掘和验证Java反序列化漏洞利用链的效率。本文的主要工作和创新点如下:(1)提出基于静态分析的方法调用序列挖掘技术,包括对现有的Java反序列化漏洞进行分析,构建Java反序列化漏洞利用链知识库,作为实现本系统的基础;然后对待分析的目标Java应用程序及其所需Java运行时进行扫描和分析,根据方法调用关系与重写关系构建方法关系图;最后在方法关系图上进行可达路径分析,得到初步的利用链挖掘结果。(2)设计基于字节码插桩与模糊测试的动态漏洞验证技术,包括基于字符串比较的反序列化漏洞利用链匹配,根据知识库检测已知的Java反序列化漏洞;针对反序列化漏洞利用链的字节码插桩技术,用于对目标Java应用程序进行字节码插桩;基于模糊测试的动态漏洞验证技术,用于自动构造利用链对应的方法调用序列,并执行判断是否触发插桩代码,根据统计得到最终的分析结果。(3)搭建Java反序列化漏洞检测系统,并选取已知的Java反序列化漏洞对系统进行有效性测试。与现有的检测工具GadgetInspector、Zero Gadget等进行比对,测试对反序列化漏洞利用链的挖掘效率和覆盖率,测试结果表明,该系统能够更快地挖掘到Java反序列化漏洞利用链,并且对利用链的覆盖率更高。