关键词:
Java漏洞检测
程序完整性度量
程序动态分析
摘要:
在安全领域Java程序是攻击者最感兴趣的目标之一。近年来,诸如反序列化漏洞、远程代码执行RCE漏洞、对象注入等针对Java程序的攻击日益严重。
在Java的反序列化漏洞的检测与防护方面,学术界提出包括指向性分析、函数调用图分析等方案,然而这些方案存在难以解析反射调用、多态调用等问题,漏报率较高。工业界的解决方案包括代码审计以及黑白名单机制,然而代码审计技术无法对闭源软件和第三方库进行漏洞检测,黑白名单机制无法检测未知漏洞,存在漏报的问题,同时黑白名单机制由于禁止某些类反序列化导致对目标程序的功能造成一定影响。
在Java的RCE漏洞方面,研究者提出包括特征检测、黑白名单机制、数据流分析等解决方案。然而,由于RCE漏洞产生原因多种多样,利用方式复杂多变,因此,现有的RCE检测与防护方案往往只能针对特定漏洞进行检测与防护,缺乏通用的漏洞检测与防护手段。
为了保护目标程序的安全性,研究者提出了TEM、RIM4J、JMF等Java程序完整性度量方案。目前Java类加载时进行完整性度量的方案无法实现对Java程序运行时的完整性度量;对Java程序进行运行时完整性度量的方案,无法检测动态生成的类。
为了缓解现有方案存在的缺陷,我们分别提出了一种基于污点分析和上下文分析相结合的反序列化漏洞检测技术,一种基于控制流分析和上下文分析相结合的RCE漏洞检测技术,一种基于内存扫描和动态类溯源的Java程序完整性度量方案。
本文的主要贡献如下:
(1)针对现有方案难以检测未知漏洞、影响目标程序功能实现等问题,提出一种基于污点分析和上下文分析相结合的反序列化漏洞检测方案,该方案不仅可以检测到未知的反序列化漏洞,还可以在目标程序运行时动态区分系统的敏感API调用的合法性。实验证明,该方案有效地解决了现有方案难以检测未知反序列化漏洞且漏报率较高等问题。
(2)针对目前Java漏洞检测方案中缺少针对Java RCE漏洞通用检测方法的问题,提出一种基于控制流分析和上下文分析相结合的RCE漏洞检测方案,该方案通过检测异常控制流来发现目标程序中存在的RCE漏洞,同时利用上下文分析,能够对基于敏感API的RCE攻击进行精准识别,实现了通用RCE漏洞检测。实验证明,该方案能够有效解决现有方案无法实现通用远程代码执行漏洞检测的问题。
(3)针对现有Java完整性度量方案无法检测动态生成类的问题,提出一种运行时Java程序完整性度量方案,本方案通过识别动态类中特定签名的方式来识别生成动态类的方法,通过对生成动态类的方法进行完整性度量来判断该方法是否被攻击者篡改,进而判断动态生成的类是否合法,实现了Java程序运行时度量和动态类度量。实现表明,该方案能够有效度量和验证运行时Java程序的完整性。