CN111931185A - 一种Java反序列化漏洞检测方法及组件 - Google Patents

一种Java反序列化漏洞检测方法及组件 Download PDF

Info

Publication number
CN111931185A
CN111931185A CN202010801099.0A CN202010801099A CN111931185A CN 111931185 A CN111931185 A CN 111931185A CN 202010801099 A CN202010801099 A CN 202010801099A CN 111931185 A CN111931185 A CN 111931185A
Authority
CN
China
Prior art keywords
java
class
determining
name
vulnerability
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010801099.0A
Other languages
English (en)
Inventor
辛佳橼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sangfor Technologies Co Ltd
Original Assignee
Sangfor Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sangfor Technologies Co Ltd filed Critical Sangfor Technologies Co Ltd
Priority to CN202010801099.0A priority Critical patent/CN111931185A/zh
Publication of CN111931185A publication Critical patent/CN111931185A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种Java反序列化漏洞检测方法及组件。本申请公开的方法包括:获取服务器中的依赖资源,依赖资源包括服务器的Java中间件在根路径中引用的资源;将依赖资源反编译为Java文件;确定Java文件对应的方法信息;根据方法信息检测Java反序列化漏洞。本申请能够提高Java反序列化漏洞的检测准确率以及检测方案的检测能力。相应地,本申请提供的一种Java反序列化漏洞检测组件,也同样具有上述技术效果。

Description

一种Java反序列化漏洞检测方法及组件
技术领域
本申请涉及计算机安全技术领域,特别涉及一种Java反序列化漏洞检测方法及组件。
背景技术
目前,一般以应用版本信息或公开POC(Proof of Concept)的0day漏洞来检测Java反序列化漏洞。其中,POC能够针对具体应用进行验证性测试,通常可以理解为对服务器进行无害化漏洞验证的数据请求。0day漏洞指已经被发现或未公开,但还没有相关修复补丁的一类漏洞。
以应用版本信息检测Java反序列化漏洞的具体方案包括:探测服务器上运行的web应用的当前版本信息,若当前版本信息与应用官方发布的含有Java反序列化漏洞的待修复版本信息一致,则确定该web应用中存在Java反序列化漏洞。然而在实际应用中,技术人员常利用修复补丁来修复Java反序列化漏洞,所以已修复了漏洞的应用版本信息可能和待修复版本信息一致,因此仅对比应用版本信来检测Java反序列化漏洞会存在误判,导致检测准确率较低。
以公开POC的0day漏洞检测Java反序列化漏洞的具体方案包括:基于0day漏洞确定Java反序列化漏洞利用的相关特征,并构造POC对服务器进行原理性探测,若服务器返回相关漏洞特征,则确定服务器中存在Java反序列化漏洞。该方案对于未知漏洞无法构造POC,所以该方案对未知漏洞不具有检测能力。
因此,如何提高Java反序列化漏洞的检测准确率,以及检测方案的检测能力,是本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种Java反序列化漏洞检测方法及组件,以提高Java反序列化漏洞的检测准确率,以及检测方案的检测能力。其具体方案如下:
第一方面,本申请提供了一种Java反序列化漏洞检测方法,包括:
获取服务器中的依赖资源,所述依赖资源包括所述服务器的Java中间件在根路径中引用的资源;
将所述依赖资源反编译为Java文件;
确定所述Java文件对应的方法信息;
根据所述方法信息检测Java反序列化漏洞。
优选地,所述确定所述Java文件对应的方法信息,包括:
利用Java反射机制确定所述Java文件包括的任一个类中的方法名及相应参数,所述方法信息包括:方法名及相应参数。
优选地,所述确定所述Java文件对应的方法信息,包括:
遍历所述Java文件,以获取所述Java文件中所有类的类名称;
根据名单存储路径从所述服务器中获取已修复类名单;
分别判断所述Java文件包括的各个类的类名称是否记录于所述已修复类名单中;
将未记录于所述已修复类名单中的类标记为待检测类,并将所述待检测类中的方法名及相应参数确定为所述方法信息。
优选地,将记录于所述已修复类名单中的类标记为已修复类,并确定所述已修复类中不存在Java反序列化漏洞。
优选地,所述根据所述方法信息检测Java反序列化漏洞,包括:
判断所述方法信息中的方法名是否记录于危险方法表中;
若是,则确定所述方法名对应的方法为危险方法,若所述方法名对应方法的相应参数为赋值参数,则确定所述方法名对应的方法中存在所述Java反序列化漏洞。
优选地,还包括:
若所述方法名对应的方法不是危险方法和/或所述方法名对应方法的相应参数不是赋值参数,则确定所述方法名对应的方法中不存在Java反序列化漏洞。
第二方面,本申请提供了一种Java反序列化漏洞检测装置,包括:
获取模块,用于获取服务器中的依赖资源,所述依赖资源包括所述服务器的Java中间件在根路径中引用的资源;
反编译模块,用于将所述依赖资源反编译为Java文件;
确定模块,用于确定所述Java文件对应的方法信息;
检测模块,用于根据所述方法信息检测Java反序列化漏洞。
第三方面,本申请提供了一种Java反序列化漏洞检测设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的Java反序列化漏洞检测方法。
第四方面,本申请提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的Java反序列化漏洞检测方法。
通过以上方案可知,本申请提供了一种Java反序列化漏洞检测方法,包括:获取服务器中的依赖资源,所述依赖资源包括所述服务器的Java中间件在根路径中引用的资源;将所述依赖资源反编译为Java文件;确定所述Java文件对应的方法信息;根据所述方法信息检测Java反序列化漏洞。
可见,本申请基于服务器中的依赖资源进行Java反序列化漏洞的检测。首先将依赖资源反编译为Java文件,然后确定Java文件对应的方法信息;根据方法信息检测Java反序列化漏洞。其中,Java反序列化漏洞一般表现为程序被恶意利用,因此根据方法信息可检测Java文件是否会被恶意利用,从而检测当前服务器中是否存在Java反序列化漏洞。本申请基于服务器中的依赖资源进行Java反序列化漏洞的检测,且能够深入检测依赖资源对应的Java文件的方法信息,因此不会存在误判,检测准确率得到了提升;同时,无论是否已知漏洞特征,都可以得到相应检测结果,因此本申请对未知漏洞和已知漏洞都具有检测能力。可见本申请提高了Java反序列化漏洞的检测准确率,可以对服务器中的任何依赖资源进行检测,且无关是否已知漏洞特征,从而扩大了检测范围以及检测能力。
相应地,本申请提供的一种Java反序列化漏洞检测组件(组件即:装置、设备及可读存储介质),也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种Java反序列化漏洞检测方法流程图;
图2为本申请公开的另一种Java反序列化漏洞检测方法流程图;
图3为本申请公开的一种Java反序列化漏洞检测装置示意图;
图4为本申请公开的一种Java反序列化漏洞检测设备示意图;
图5为本申请公开的另一种Java反序列化漏洞检测设备示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,检测Java反序列化漏洞的方案的检测准确率较低,对于未知漏洞不具有检测能力。为此,本申请提供了一种Java反序列化漏洞检测方案,能够提高Java反序列化漏洞的检测准确率,以及检测方案的检测能力。
参见图1所示,本申请实施例公开了一种Java反序列化漏洞检测方法,包括:
S101、获取服务器中的依赖资源,依赖资源包括服务器的Java中间件在根路径中引用的资源。
需要说明的是,服务器中的依赖资源具体包括被引用到Java中间件上的jar文件包,jar文件包中包括各个功能的class文件。其中,jar文件包存储在Java中间件的根路径下,服务器中的Java中间件可以加载依赖资源,从而运行其中的各个功能。当然,也可以在jar文件包中进行新功能的扩展。
由于jar文件包存储在Java中间件的根路径下,因此可以遍历服务器中的Java中间件的根路径,然后根据根路径获取依赖资源,即在Java中间件的根路径下读取相关jar文件包。
S102、将依赖资源反编译为Java文件。
由于依赖资源中包括各个功能的class文件,因此将依赖资源反编译为Java文件,实质上是:将各个功能的class文件反编译为Java文件,如此可获得多个Java文件。
class文件由Java代码编译生成,但由于class文件不具有可读性,因此对class文件进行反编译,可获得相应的可读Java文件,这样可便于确定其中的方法信息。class文件为任意jar文件包中的任一个class文件。class文件与Java文件一一对应。
S103、确定Java文件对应的方法信息。
Java文件对应的方法信息即包括:该Java文件包括的任一个类中的任一个方法的方法名,以及该方法所传递的参数。一个Java文件可以包括多个类。一个类中可能包括多个方法。一个方法所传递的参数也可以是多个。方法所传递的参数即为:方法执行时的传入参数。
在一种具体实施方式中,确定Java文件对应的方法信息,包括:利用Java反射机制确定Java文件包括的任一个类中的方法名及相应参数,方法信息包括:方法名及相应参数,该相应参数即为该方法名对应的方法所传递的参数,也就是方法名对应的方法执行时处理的参数。其中,Java反射机制能够获知任意一个类中的所有参数和方法,因此可利用Java反射机制确定Java文件包括的类中的方法,以及该方法所传递的参数。
需要说明的是,为了提高检测效率,可以先利用已修复类名单对某个Java文件中的所有类进行筛选。已修复类名单中记录着存在漏洞但已经完成修复的类的类名称,该名单一般由Java中间件的厂商提供。因此若类名称记录于已修复类名单中,则表明该类名称对应的类已经完成修复,其不存在漏洞威胁,故确定该类名称对应的类中不存在Java反序列化漏洞。若类名称没有记录于已修复类名单中,则表明该类名称对应的类可能存在漏洞威胁,因此对没有记录在已修复类名单中的类进行进一步检测,即:根据方法信息检测Java反序列化漏洞。
在一种具体实施方式中,确定Java文件对应的方法信息,包括:遍历Java文件,以获取Java文件中所有类的类名称;根据名单存储路径从服务器中获取已修复类名单;分别判断Java文件包括的各个类的类名称是否记录于已修复类名单中;将未记录于已修复类名单中的类标记为待检测类,并将待检测类中的方法名及相应参数确定为方法信息。将记录于已修复类名单中的类标记为已修复类,并确定已修复类中不存在Java反序列化漏洞。
S104、根据方法信息检测Java反序列化漏洞。
Java反序列化漏洞的原理为:Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、对象的类型信息和存储在对象中的数据的类型。Java反序列化则是从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。Java反序列化漏洞的成因是:攻击者通过序列化函数将自己精心构造的恶意对象序列化,将序列化数据发送到服务器的反序列化接口,若服务器没有对序列化数据进行有效的安全验证,就直接对序列化数据进行反序列化处理,然后服务器就会执行恶意对象中的代码,从而造成攻击。因此当方法的参数可赋值时,攻击者就可能给该参数赋值恶意对象,然后让服务器处理该恶意对象,从而造成攻击。
在一种具体实施方式中,根据方法信息检测Java反序列化漏洞,包括:判断方法信息中的方法名是否记录于危险方法表中;若是,则确定方法名对应的方法为危险方法,若方法名对应方法的相应参数为赋值参数,则确定方法名对应的方法中存在Java反序列化漏洞。若方法名对应的方法不是危险方法和/或方法名对应方法的相应参数不是赋值参数,则确定方法名对应的方法中不存在Java反序列化漏洞。
其中,若参数为赋值参数,则表明该参数可以被人为改变和控制,因此其该参数存在被恶意控制的风险,故当方法属于危险方法,且参数为赋值参数,则可以确定存在Java反序列化漏洞利用链,也即:存在Java反序列化漏洞。为此,可以预先将具有危险的方法记录在危险方法表,将赋值参数记录在参数表中,以便判断基于方法和参数是否可构造Java反序列化漏洞利用链,该危险方法表和参数表可以由技术人员人工更新和修改。其中,若方法为危险方法,且参数为赋值参数,则表明基于方法和其参数可构造Java反序列化漏洞利用链。
若方法不是危险方法,则表明该方法没有危险,因此可直接确定不存在Java反序列化漏洞利用链,即:不存在Java反序列化漏洞。在方法不是危险方法的情况下,可以不再对其传递的参数进行检查(当然,也可以进一步检测其传递的参数),因为就算其传递的参数可赋值,该方法也不会给服务器带来实质威胁。若方法是危险方法,但其参数不是赋值参数,则表明该方法虽然具有危险性,但由于其参数不能被赋值,也就是参数不能被恶意利用,因此该具有危险性的方法无法对服务器产生实质威胁,因此也可以确定不存在Java反序列化漏洞利用链,即不存在Java反序列化漏洞。
可见,本实施例基于服务器中的依赖资源进行Java反序列化漏洞的检测,且能够深入检测依赖资源对应的Java文件的方法信息,因此不会存在误判,检测准确率得到了提升;同时,无论是否已知漏洞特征,都可以得到相应检测结果,因此本申请对未知漏洞和已知漏洞都具有检测能力。可见本实施例提高了Java反序列化漏洞的检测准确率,可以对服务器中的任何依赖资源进行检测,且无关是否已知漏洞特征,从而扩大了检测范围以及检测能力。
参见图2所示,本申请实施例公开了另一种Java反序列化漏洞检测方法,包括:
1、获取目标服务器本地依赖资源。
目标服务器本地依赖资源是指存放在服务器上,被引用到Java中间件中的jar文件包。Java中间件可以加载依赖资源。通过遍历目标服务器的Java中间件的根路径,可以将相应根路径下的依赖资源拷贝出来。
2、反编译成Java文件。
jar文件中存放着由Java代码编译生成的class文件。由于class文件不具有可读性,所以需要将class文件反编译成可读性较好的Java文件,以便于对代码进行解析与检测,然后将其中所有Java类的类名称添加到Java类名表中。
3、寻找黑名单类。
Java中间件的厂商通常会使用黑名单的方式修复Java反序列化漏洞,一般在其代码中会存放一个黑名单列表(即已修复类名单),该黑名单列表中记录的是:存在漏洞但已经完成修复的类的类名称。因此根据名单存储路径寻找到黑名单列表后,如果Java类名表中的某个类在黑名单列表中,则说明已经修复了该类所涉及的漏洞,故不用再对该类进行漏洞检测,可将该类从Java类名表中移除,从而减少需要检测的类的数量。如果Java类名表中的某个类不在黑名单列表中,则对该类的方法和属性(即方法传递的参数)进行进一步检测。
其中,黑名单列表的名单存储路径可能是Java中间件的厂商设置的默认路径,也可能是用户自主设置的存储路径,因此为了方便获取黑名单列表,可提前确定名单存储路径,如:用户手动添加黑名单列表的名单存储路径(当名单存储路径为厂商设置的默认路径时,可以省略此过程),以便在正确的目录下寻找黑名单列表,保证黑名单的发现,优化漏洞检测系统的性能。
4、解析Java文件。
从Java类名表中获取Java文件名,再找到相应的Java文件,然后通过Java反射机制获取Java文件中所有的方法和属性,并记录在Java方法属性记录库中。
5、判断是否存在Java反序列化漏洞利用链。
判断Java方法属性记录库中记录的某个方法是否记录在危险方法表中,若是,则表明该方法为危险方法,此时提取此危险方法的传入参数(即属性),判断传入参数是否可赋值,如果可以赋值,则表明该传入参数存在被恶意利用的危险,即确定漏洞利用链存在,从而确定目标服务器中存在Java反序列化漏洞。据此,本实施例可对目标服务器中的每个Java类进行检测,可扩大检测范围。
可见,本实施例可基于Java类中的方法和判断Java类中是否存在漏洞利用链,从而判断目标服务器上是否存在Java反序列化漏洞,因此不会存在误判,检测准确率得到了提升;同时,无论是否已知漏洞特征,以类的执行方法和参数进行检测都可以得到相应检测结果,因此本实施例对未知漏洞和已知漏洞都具有检测能力,从而扩大了检测范围以及检测能力。
下面对本申请实施例提供的一种Java反序列化漏洞检测装置进行介绍,下文描述的一种Java反序列化漏洞检测装置与上文描述的一种Java反序列化漏洞检测方法可以相互参照。
参见图3所示,本申请实施例公开了一种Java反序列化漏洞检测装置,包括:
获取模块301,用于获取服务器中的依赖资源,依赖资源包括服务器的Java中间件在根路径中引用的资源;
反编译模块302,用于将依赖资源反编译为Java文件;
确定模块303,用于确定Java文件对应的方法信息;
检测模块304,用于根据方法信息检测Java反序列化漏洞。
在一种具体实施方式中,确定模块具体用于:
利用Java反射机制确定Java文件包括的任一个类中的方法名及相应参数,方法信息包括:方法名及相应参数。
在一种具体实施方式中,确定模块包括:
遍历单元,用于遍历Java文件,以获取Java文件中所有类的类名称;
获取单元,用于根据名单存储路径从服务器中获取已修复类名单;
判断单元,用于分别判断Java文件包括的各个类的类名称是否记录于已修复类名单中;
第一确定单元,用于将未记录于已修复类名单中的类标记为待检测类,并将待检测类中的方法名及相应参数确定为方法信息。
第二确定单元,用于将记录于已修复类名单中的类标记为已修复类,并确定已修复类中不存在Java反序列化漏洞。
在一种具体实施方式中,检测模块具体用于:
判断方法信息中的方法名是否记录于危险方法表中;若是,则确定方法名对应的方法为危险方法,若方法名对应方法的相应参数为赋值参数,则确定方法名对应的方法中存在Java反序列化漏洞。
在一种具体实施方式中,检测模块具体用于:
若方法名对应的方法不是危险方法和/或方法名对应方法的相应参数不是赋值参数,则确定方法名对应的方法中不存在Java反序列化漏洞。
其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
可见,本实施例提供了一种Java反序列化漏洞检测装置,该装置以类的执行方法和属性检测Java反序列化漏洞,可以检测准确率,且对未知漏洞和已知漏洞都具有检测能力,从而扩大了检测范围以及检测能力。
下面对本申请实施例提供的一种Java反序列化漏洞检测设备进行介绍,下文描述的一种Java反序列化漏洞检测设备与上文描述的一种Java反序列化漏洞检测方法及装置可以相互参照。
参见图4所示,本申请实施例公开了一种Java反序列化漏洞检测设备,包括:
存储器401,用于保存计算机程序;
处理器402,用于执行所述计算机程序,以实现上述任意实施例公开的方法。
请参考图5,图5为本实施例提供的另一种Java反序列化漏洞检测设备示意图,该Java反序列化漏洞检测设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在Java反序列化漏洞检测设备301上执行存储介质330中的一系列指令操作。
Java反序列化漏洞检测设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等。
在图5中,应用程序342可以是执行Java反序列化漏洞检测方法的程序,数据344可以是执行Java反序列化漏洞检测方法所需的或产生的数据。
上文所描述的Java反序列化漏洞检测方法中的步骤可以由Java反序列化漏洞检测设备的结构实现。
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种Java反序列化漏洞检测方法、装置及设备可以相互参照。
一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的Java反序列化漏洞检测方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (9)

1.一种Java反序列化漏洞检测方法,其特征在于,包括:
获取服务器中的依赖资源,所述依赖资源包括所述服务器的Java中间件在根路径中引用的资源;
将所述依赖资源反编译为Java文件;
确定所述Java文件对应的方法信息;
根据所述方法信息检测Java反序列化漏洞。
2.根据权利要求1所述的Java反序列化漏洞检测方法,其特征在于,所述确定所述Java文件对应的方法信息,包括:
利用Java反射机制确定所述Java文件包括的任一个类中的方法名及相应参数,所述方法信息包括:方法名及相应参数。
3.根据权利要求1所述的Java反序列化漏洞检测方法,其特征在于,所述确定所述Java文件对应的方法信息,包括:
遍历所述Java文件,以获取所述Java文件中所有类的类名称;
根据名单存储路径从所述服务器中获取已修复类名单;
分别判断所述Java文件包括的各个类的类名称是否记录于所述已修复类名单中;
将未记录于所述已修复类名单中的类标记为待检测类,并将所述待检测类中的方法名及相应参数确定为所述方法信息。
4.根据权利要求3所述的Java反序列化漏洞检测方法,其特征在于,将记录于所述已修复类名单中的类标记为已修复类,并确定所述已修复类中不存在Java反序列化漏洞。
5.根据权利要求1所述的Java反序列化漏洞检测方法,其特征在于,所述根据所述方法信息检测Java反序列化漏洞,包括:
判断所述方法信息中的方法名是否记录于危险方法表中;
若是,则确定所述方法名对应的方法为危险方法,若所述方法名对应方法的相应参数为赋值参数,则确定所述方法名对应的方法中存在所述Java反序列化漏洞。
6.根据权利要求5所述的Java反序列化漏洞检测方法,其特征在于,还包括:
若所述方法名对应的方法不是危险方法和/或所述方法名对应方法的相应参数不是赋值参数,则确定所述方法名对应的方法中不存在Java反序列化漏洞。
7.一种Java反序列化漏洞检测装置,其特征在于,包括:
获取模块,用于获取服务器中的依赖资源,所述依赖资源包括所述服务器的Java中间件在根路径中引用的资源;
反编译模块,用于将所述依赖资源反编译为Java文件;
确定模块,用于确定所述Java文件对应的方法信息;
检测模块,用于根据所述方法信息检测Java反序列化漏洞。
8.一种Java反序列化漏洞检测设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至6任一项所述的Java反序列化漏洞检测方法。
9.一种可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的Java反序列化漏洞检测方法。
CN202010801099.0A 2020-08-11 2020-08-11 一种Java反序列化漏洞检测方法及组件 Pending CN111931185A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010801099.0A CN111931185A (zh) 2020-08-11 2020-08-11 一种Java反序列化漏洞检测方法及组件

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010801099.0A CN111931185A (zh) 2020-08-11 2020-08-11 一种Java反序列化漏洞检测方法及组件

Publications (1)

Publication Number Publication Date
CN111931185A true CN111931185A (zh) 2020-11-13

Family

ID=73311531

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010801099.0A Pending CN111931185A (zh) 2020-08-11 2020-08-11 一种Java反序列化漏洞检测方法及组件

Country Status (1)

Country Link
CN (1) CN111931185A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112329024A (zh) * 2020-11-17 2021-02-05 国网北京市电力公司 漏洞的检测方法及装置
CN112580059A (zh) * 2020-12-23 2021-03-30 北京宝兰德软件股份有限公司 一种反序列化漏洞修复方法及装置
CN113010899A (zh) * 2021-04-16 2021-06-22 上海交通大学 一种php反序列化漏洞利用链检测方法
CN113760443A (zh) * 2020-11-19 2021-12-07 北京沃东天骏信息技术有限公司 数据处理方法、装置、电子设备、系统和存储介质
CN114626068A (zh) * 2022-02-24 2022-06-14 南开大学 基于java函数调用序列的高精度第三方库漏洞模块检测方法
US20220215094A1 (en) * 2020-12-31 2022-07-07 Virsec Systems, Inc. Protecting Against Memory Deserialization Attacks

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102147734A (zh) * 2010-02-10 2011-08-10 甲骨文国际公司 运行时类提取的方法和系统
US20180107463A1 (en) * 2016-10-13 2018-04-19 Sap Se Safe loading of dynamic user-defined code
CN108279940A (zh) * 2016-12-30 2018-07-13 华为软件技术有限公司 一种web容器中的模块加载方法和装置
CN109992970A (zh) * 2018-01-03 2019-07-09 北京京东尚科信息技术有限公司 Java反序列化漏洞检测系统和方法
CN110609703A (zh) * 2019-09-18 2019-12-24 腾讯科技(深圳)有限公司 性能检测工具实现方法、装置、可读存储介质及终端设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102147734A (zh) * 2010-02-10 2011-08-10 甲骨文国际公司 运行时类提取的方法和系统
US20180107463A1 (en) * 2016-10-13 2018-04-19 Sap Se Safe loading of dynamic user-defined code
CN108279940A (zh) * 2016-12-30 2018-07-13 华为软件技术有限公司 一种web容器中的模块加载方法和装置
CN109992970A (zh) * 2018-01-03 2019-07-09 北京京东尚科信息技术有限公司 Java反序列化漏洞检测系统和方法
CN110609703A (zh) * 2019-09-18 2019-12-24 腾讯科技(深圳)有限公司 性能检测工具实现方法、装置、可读存储介质及终端设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ROBERT C. SEACORD: "Combating Java Deserialization Vulnerabilities with Look-Ahead Object Input Streams (LAOIS)", 《TECHNICAL REPORT》 *
徐江;王捷;蔡攸敏;刘畅;: "Java反序列化漏洞探析及其修复方法研究", 湖北电力 *
杜笑宇: "基于字节码搜索的 Java 反序列化漏洞调用链挖掘方法", 《技术研究》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112329024A (zh) * 2020-11-17 2021-02-05 国网北京市电力公司 漏洞的检测方法及装置
CN113760443A (zh) * 2020-11-19 2021-12-07 北京沃东天骏信息技术有限公司 数据处理方法、装置、电子设备、系统和存储介质
CN112580059A (zh) * 2020-12-23 2021-03-30 北京宝兰德软件股份有限公司 一种反序列化漏洞修复方法及装置
US20220215094A1 (en) * 2020-12-31 2022-07-07 Virsec Systems, Inc. Protecting Against Memory Deserialization Attacks
CN113010899A (zh) * 2021-04-16 2021-06-22 上海交通大学 一种php反序列化漏洞利用链检测方法
CN113010899B (zh) * 2021-04-16 2022-06-07 上海交通大学 一种php反序列化漏洞利用链检测方法
CN114626068A (zh) * 2022-02-24 2022-06-14 南开大学 基于java函数调用序列的高精度第三方库漏洞模块检测方法
CN114626068B (zh) * 2022-02-24 2024-06-07 南开大学 基于java函数调用序列的高精度第三方库漏洞模块检测方法

Similar Documents

Publication Publication Date Title
CN111931185A (zh) 一种Java反序列化漏洞检测方法及组件
KR101246623B1 (ko) 악성 애플리케이션 진단 장치 및 방법
EP2955658B1 (en) System and methods for detecting harmful files of different formats
US10152594B2 (en) Method and device for identifying virus APK
US10055585B2 (en) Hardware and software execution profiling
CN102708320B (zh) 一种病毒apk的识别方法及装置
US9552285B2 (en) Micro-execution for software testing
CN109189496B (zh) 应用程序的动态库信息获取方法及装置
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
EP3451221B1 (en) Binary suppression and modification for software upgrades
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN113342673A (zh) 漏洞检测方法、设备及可读存储介质
CN112417461A (zh) 设备固件的模糊测试方法及系统
CN103778373A (zh) 病毒检测方法及装置
CN106709336A (zh) 识别恶意软件的方法和装置
CN109388946B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN108959936B (zh) 一种基于路径分析的缓冲区溢出漏洞自动利用方法
CN114386032A (zh) 电力物联网设备的固件检测系统及方法
GB2510701A (en) Detecting malware code injection by determining whether return address on stack thread points to suspicious memory area
CN113391874A (zh) 一种虚拟机检测对抗方法、装置、电子设备及存储介质
US20190243976A1 (en) System and method for categorization of .net applications
CN116324773A (zh) 用于保护智能合约免受攻击的方法和装置
CN114297630A (zh) 恶意数据的检测方法、装置、存储介质及处理器
Dam et al. Learning android malware
CN112887328A (zh) 一种样本检测方法、装置、设备及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination