一种反序列化漏洞修复方法及装置制造方法及图纸

技术编号:27878627 阅读:15 留言:0更新日期:2021-03-31 01:05
本发明专利技术提供一种反序列化漏洞修复方法及装置,该方法包括:获取预置的黑名单配置文件,所述黑名单配置文件中存储有若干第一对象的类型,所述第一对象为携带有恶意代码的对象;将待进行反序列化操作的目标对象的类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中存在与所述目标对象的类型相同的所述第一对象的类型,则终止所述目标对象的反序列化操作。本发明专利技术可以在官方尚未发布修复反序列化漏洞的补丁时,及时阻止相关类的反序列化过程,不需要修改代码重新打包程序和重启正在运行的Java程序,即可完成阻止漏洞相关的类的反序列化流程。

【技术实现步骤摘要】
一种反序列化漏洞修复方法及装置
本专利技术涉及计算机
,尤其涉及一种反序列化漏洞修复方法及装置。
技术介绍
Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程。将Java对象持久化到文件/数据库中和将Java对象通过网络进行传输时,需要通过Java序列化技术把Java对象转换为字节序列;将文件/数据库和网络中的字节序列恢复为Java对象时,需要使用到Java反序列化技术。Java反序列化存在一些已知的安全漏洞,例如CVE-2013-4810、CVE-2015-4852、CVE-2015-7501、CVE-2017-7504和CVE-2017-12149等,这些漏洞的特点为使用Java反序列化特定类时,触发对精心构造的恶意代码的执行,达到攻击或者控制计算机的目的。其流程如下:1、构建一个携带执行恶意代码的对象A;2、构建一个包含readObject方法的对象B,其成员变量为对象A,对象B的类readObject方法中会调用成员变量(对象A)的方法;3、通过Java序列化将第2步中构建的对象B进行序列化,并保存序列化后的字节序列;4、将第3步中的字节序列包装到JMX请求/RMI请求的报文中,通过网络发送到Java服务端程序的JMX/RMI监听端口;5、Java服务端程序的JMX/RMI监听端口接收到报文后,对其中包含的字节序列进行反序列化;6、反序列化对象B的过程中,会调对象B的readObject方法,对象B的readObject方法会调用成员变量(对象A)的方法,触发对恶意代码的执行。对于上述漏洞CVE-2015-4852和CVE-2015-7501,其均是利用Apache的CommonsCollections库(版本为从3.0到3.21之间的版本和4.0版本,需要说明的是,3.2.2和4.1版本修复了上述漏洞)的InvokerTransformer的反序列化来达到攻击目的:CommonsCollections库中有一个特殊的Transformer接口,其中有一个实现该接口的类InvokerTransformer可以通过调用Java的反射机制来调用Java对象的任意方法。当Java应用程序暴露了RMI/JMX端口,并且Java应用程序的类路径中存在较早版本的CommonsCollections库的jar包,攻击者可以利用CommonsCollections的InvokerTransformer类和ChainedTransformer类的特点构造特定的字节序列的攻击报文,当RMI/JMX监听端口在接收到这些报文的字节序列并对其进行反序列化时,触发对ChainedTransformer.transform()方法的调用,即可控制目标机器执行任意命令达到攻击目的。为了实现对上述漏洞的修复,现有技术中通常采用如下两种方式:方式1,升级第三方库为修复漏洞的版本的方式,即升级第三方库,使升级后的第三方库中不允许携带恶意代码的类序列化。例如,Apache的CommonsCollections库的3.2.2版本,默认不允许InvokerTransfomer类的序列化,杜绝了使用InvokerTransfomer携带恶意代码的可能;Apache的CommonsCollections库的4.0版本,InvokerTransfomer不再实现java.io.Serializeable接口。方式2,使用ObjectInputStream的子类的方式,即,实现一个继承了java.io.ObjectInputStream的子类,子类重现实现ObjectInputStream的readObject方法,增加对携带恶意代码的类的检测,当反序列化的类为可以携带恶意代码的类时,直接抛出异常不进行反序列化。但是,上述两种修复方式存在如下缺陷:对于方式1,当第三方库出现漏洞时,官方给出正式的修复漏洞的版本通常需要一段时间,在官方给出修复版本时,服务需要下线或者自行修复。服务下线将会给客户带来较大损失,自行修复对于普通的开发人员存在一定难度也需要一段时间才能完成。对于方式2,当出现漏洞时,开发人员可以及时修改ObjectInputStream的子类,反序列化时增加对携带恶意代码的类的屏蔽。但是,因为一些使用反序列化的代码并不在用户实现的逻辑里,可能在JDK的类库或者第三方类库中,当位于JDK的类库中时,开发人员并不能直接修改其代码使用ObjectInputStream的子类进行反序列化,当位于第三方类库中时,开发人员需要有第三方类库的源代码才可以修改其实现。故该方式的适用场景较为受限。因此,现在亟需一种反序列化漏洞修复方法及装置来解决上述问题。
技术实现思路
针对现有技术存在的问题,本专利技术提供一种反序列化漏洞修复方法及装置。本专利技术提供一种反序列化漏洞修复方法,包括:获取预置的黑名单配置文件,所述黑名单配置文件中存储有若干第一对象的类型,所述第一对象为携带有恶意代码的对象;将待进行反序列化操作的目标对象的类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中存在与所述目标对象的类型相同的所述第一对象的类型,则终止所述目标对象的反序列化操作。根据本专利技术提供的一种反序列化漏洞修复方法,所述方法还包括:若所述黑名单配置文件中不存在与所述目标对象的类型相同的所述第一对象的类型,则继续所述目标对象的反序列化操作。根据本专利技术提供的一种反序列化漏洞修复方法,所述方法还包括:若所述黑名单配置文件中不存在与所述目标对象的类型相同的所述第一对象的类型,则获取预置的白名单配置文件,所述白名单配置文件中存储有若干第二对象的类型,所述第二对象为不携带恶意代码的对象;将所述目标对象的类型与所述白名单配置文件进行比对;若所述白名单配置文件中存在与所述目标对象的类型相同的所述第二对象的类型,则继续所述目标对象的反序列化操作;若所述白名单配置文件中不存在与所述目标对象的类型相同的所述第二对象的类型,则终止所述目标对象的反序列化操作。根据本专利技术提供的一种反序列化漏洞修复方法,所述方法还包括:获取反序列化漏洞中携带恶意代码的对象的类型,将所述携带恶意代码的对象的类型作为第一待存储类型;将所述第一待存储类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中不存在与所述第一待存储类型相同的所述第一对象的类型,则将所述第一待存储类型存储至所述黑名单配置文件中,以对所述黑名单配置文件进行更新。根据本专利技术提供的一种反序列化漏洞修复方法,在所述对所述黑名单配置文件进行更新之后,所述方法还包括:记录所述黑名单配置文件每次更新完成的时间和文件长度;相应地,获取预置的黑名单配置文件,包括:获取上一次反序列化操作时所获取的所述黑名单配置文件的时间戳和文件长度;若所述时间戳等于所述黑名单配置文件最后一次更新完本文档来自技高网
...

【技术保护点】
1.一种反序列化漏洞修复方法,其特征在于,包括:/n获取预置的黑名单配置文件,所述黑名单配置文件中存储有若干第一对象的类型,所述第一对象为携带有恶意代码的对象;/n将待进行反序列化操作的目标对象的类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中存在与所述目标对象的类型相同的所述第一对象的类型,则终止所述目标对象的反序列化操作。/n

【技术特征摘要】
1.一种反序列化漏洞修复方法,其特征在于,包括:
获取预置的黑名单配置文件,所述黑名单配置文件中存储有若干第一对象的类型,所述第一对象为携带有恶意代码的对象;
将待进行反序列化操作的目标对象的类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中存在与所述目标对象的类型相同的所述第一对象的类型,则终止所述目标对象的反序列化操作。


2.根据权利要求1所述的反序列化漏洞修复方法,其特征在于,所述方法还包括:
若所述黑名单配置文件中不存在与所述目标对象的类型相同的所述第一对象的类型,则继续所述目标对象的反序列化操作。


3.根据权利要求1所述的反序列化漏洞修复方法,其特征在于,所述方法还包括:
若所述黑名单配置文件中不存在与所述目标对象的类型相同的所述第一对象的类型,则获取预置的白名单配置文件,所述白名单配置文件中存储有若干第二对象的类型,所述第二对象为不携带恶意代码的对象;
将所述目标对象的类型与所述白名单配置文件进行比对;
若所述白名单配置文件中存在与所述目标对象的类型相同的所述第二对象的类型,则继续所述目标对象的反序列化操作;
若所述白名单配置文件中不存在与所述目标对象的类型相同的所述第二对象的类型,则终止所述目标对象的反序列化操作。


4.根据权利要求1所述的反序列化漏洞修复方法,其特征在于,所述方法还包括:
获取反序列化漏洞中携带恶意代码的对象的类型,将所述携带恶意代码的对象的类型作为第一待存储类型;
将所述第一待存储类型与所述黑名单配置文件进行比对,若所述黑名单配置文件中不存在与所述第一待存储类型相同的所述第一对象的类型,则将所述第一待存储类型存储至所述黑名单配置文件中,以对所述黑名单配置文件进行更新。


5.根据权利要求4所述的反序列化漏洞修复方法,其特征在于,在所述对所述黑名单配置文件进行更新之后,所述方法还包括:
记录所述黑名单配置文件每次更新完成的时间和文件长度;
相应地,获取预置的黑名单配置文件,包括:
获取上一次反序列化操作时所获取的所述黑名单配置文件的时间戳和文件长度;
若所述时间戳等于所述黑名单配置文件最后一次更新完成的时间,且上一次反序列化操作时所获取的所述黑名单配置文件的文件长度等于所述黑名单配置文件最后一次更新完成的文件长度,则将上一次获取的所述黑名单配置...

【专利技术属性】
技术研发人员:易存道
申请(专利权)人:北京宝兰德软件股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1