WebLogic Java反序列化漏洞终极建议


title: WebLogic Java反序列化漏洞终极建议
author: rocklei123
tags:html

  • Java
  • WebLogic
    categories: Spring
    date: 2018-09-25 09:27:33

0. 概述:

本文针对这几年来WebLogic软件常常报出的java反序列化漏洞问题进行总结,其余中间件软件本文暂不讨论。内容主要涵盖客户最关心的一些问题、工程师打补丁时须要注意事项。java

1. 序列化与反序列化介绍

Java 序列化与反序列化git

  • Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法能够实现序列化。
  • Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。

在这里插入图片描述

序列化与反序列化是让 Java 对象脱离 Java 运行环境的一种手段,能够有效的实现多平台之间的通讯、对象持久化存储。主要应用在如下场景:github

** HTTP: ** 多平台之间的通讯,管理等web

** RMI:** 是 Java 的一组拥护开发分布式应用程序的 API,实现了不一样操做系统之间程序的方法调用。值得注意的是,RMI 的传输 100% 基于反序列化,Java RMI 的默认端口是 1099 端口。shell

** JMX:** JMX 是一套标准的代理和服务,用户能够在任何 Java 应用程序中使用这些代理和服务实现管理,中间件软件 WebLogic 的管理页面就是基于 JMX 开发的,而 JBoss 则整个系统都基于 JMX 构架。 ​数据库

2016年Spring RMI反序列化漏洞今年比较出名的:Jackson,FastJson
Java 十分受开发者喜好的一点是其拥有完善的第三方类库,和知足各类需求的框架;但正由于不少第三方类库引用普遍,若是其中某些组件出现安全问题,那么受影响范围将极为普遍。apache

2. Java反序列化漏洞与Weblogic反序列化漏洞介绍

2.1 Java反序列化漏洞历史

最为出名的大概应该是:15年的Apache Commons Collections 反序列化远程命令执行漏洞,其当初影响范围包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd等。json

Apache Commons Collections 3和4,Groovy,Spring,只要目标应用的Class Path中包含这些库,可以让readObject()实现任意命令执行。影响比较普遍的就是Apache Commons Collections这个库,中间件基本都会涉及使用此库。安全

2.2 Weblogic Java反序列化漏洞介绍

由于weblogic底层也使用Apache Commons Collections库,WebLogic 存在Java反序列化漏洞无疑的。不过在漏洞修复这方面,Oracle但是不走心啊。正所谓,新三年,旧三年,缝缝补补又三年,仍是未修完。如下是基于Weblogic t3协议引发远程代码执行的反序列化漏洞统计:

CVE-2015-4852

CVE-2016-0638

CVE-2016-3510

CVE-2017-3248

CVE-2018-2628

从2015年一直修到2018年,反复修,反复被绕过,基于t3协议的Java反序列化漏洞还在继续。

问:那么为何Java反序列化漏洞为何波及范围如此普遍?Weblogic 的java反序列化漏洞将来可能仍是会存在吗?

答: (1)由于Apache Commons Collections 这个库使用太普遍了,市面主流中间件、Spring、fastjson 等都使用这个库。

(2)Oracle的Weblogic补丁是采用黑名单的方式过滤危险的反序列化类 ,每次新出现一种漏洞就提供一个新的黑名单,这种方式极不安全的。 一旦黑客发现新的漏洞,绕过这个黑名单就能攻击。详细缘由请开大神分析

缘由就在下文连接中:

https://paper.seebug.org/333/

Weblogic 反序列化漏洞(CVE-2018-2628)漫谈

3.Weblogic Java 反序列化客户关心的几个问题?

3.1 客户关心的:t3协议是否默认开启?

问题 :大多数WebLogic反序列化漏洞主要是针对T3协议,咱们默认是否已经启用此协议?经过什么方法确认?

答 :t3协议默认都是开启的,t3协议是很是重要的WebLogic内部的通信协议。

3.2 客户关心的:关于配置t3协议过滤器相关问题

由于基本都是基于t3协议形成的Java反序列化问题,且Oracle提供的补丁集合没法彻底解决java反序列化问题,官方提供一种临时解决办法就是过滤T3协议,即WebLogicServer 提供了名为weblogic.security.net.ConnectionFilterImpl 的默认链接筛选器,在此链接筛选器上添加过滤规则过滤链接。若是参考 http://www.sohu.com/a/241934306_465935 ,是否起到防御做用,文中配置方式是否正确?

3.2.1 t3过滤器是否起到防御做用?

问题:临时方案是否必定程度的起到预防的做用

答:临时方案在必定程度的起到预防的做用。

3.2.1 可否禁用全部t3协议?

问题 :可否禁用全部t3协议?

** 下文配置方式是错误的配置方式 **

在这里插入图片描述

答:文中提到的方法是错误的方法。文中提到:筛选规则填取:* * 7001 deny t3 t3s ,此种规则至关于禁用了t3 协议。禁用后会影响到使用t3协议启动的受管节点,WLST监控脚本、中止脚本…等等。

4 Weblogic Java 反序列化问题最终建议

4.1 针对10.3.6 及以上版本建议

  • (1)Oracle每一个季度都会更新补丁集合,这个补丁集合不只包含软件的安全漏洞修复并且包含软件的功能漏洞修复。因此无论怎样,即便没有彻底解决反序列化漏洞,打补丁仍是颇有必要的。至于修复了哪些漏洞建议查bugsfixed 列表

  • (2)推荐Configure Weblogic Connection Filters
    思路:须要禁用t3协议,可是不能禁死,对于受管节点或有需求的特定节点,须要放开限制。见4.3 、4.4

参考官方doc连接(这两篇文档须要买了Oracle服务才能够下载):
Steps to Configure Weblogic Connection Filters ( Doc ID 1508748.1 )

Connection-filter Rules To Allow Few Ips To Access One Port And To Allow All Ips To Access Another Port ( Doc ID 1494692.1 )

参考官方Doc连接:
http://download.oracle.com/docs/cd/E12839_01/web.1111/e13711/con_filtr.htm#i1029357

  • (3)针对bsu升级工具的weblogic版本,建议先升级补丁工具,不然检查冲突时间过程
    WLS BSU (Smart Update) Takes Very Long Time to Apply Patches - Especially When Checking for Patch Conflicts (文档 ID 2271366.1)
    下载补丁集合p25153061_1036_Generic.zip
补丁工具升级
#cd /home/cfmmc/Oracle/Middleware/utils/bsu/
#unzip p25153061_1036_Generic.zip  
# . ./bsu_fix.sh install
回滚
# . ./bsu_fix.sh rollback
  • (4)调整bsu.sh 或bsu.cmd 内存,防止内容溢出
    WL_HOME/utils/bsu 目录,vi bsu.sh
"$JAVA_HOME/bin/java" -Xms2048m -Xmx2048m -jar patch-client.jar $*
  • (5)注意事项

注意事项:临时方案存在必定风险,须要在测试环境严格实测,一旦禁用规则配置错误,可能会致使生产系统启动或调用失败。故内网环境酌情考虑,外网环境系统建议配置。

4.2 针对weblogic 1036如下版本解决建议

按照oracle官网所说8和九、10版本没有反序列漏洞,可是实际中,若是在应用中含’commons.collections’的jar包,仍是会在安全软件中扫描出反序列化漏洞。

** 非官方 ** 的修复方式有以下两种方法:

** 题外话:不过运维人员仍是不要背这颗雷吧,生产环境复杂,真出了事故咱们付不起责任,更况且国企的企业政治复杂,就别把本身置于水火之中了。咱们只提供建议,让甲方人员决定吧! **

4.3 Connection Filters规则示例及解读

通常写法示例(第2、第三个域用*号代替,意在简化配置,用户可根据本身的须要进行精准的控制,必须填写端口信息):

127.0.0.1 * * allow

10.1.34.205 * * allow

10.156.0.57/255.255.255.0 * * allow 或 10.156.0.57/24 * * allow

0.0.0.0/0 * * deny t3 t3s

解读
第一条(127.0.0.1 * * allow)表示容许本机回环地址全部协议的链接
第二条(10.10.5.68 * * allow)表示容许来自10.10.5.68地址任何协议的访问请求
第三条(10.10.3.0/255.255.255.0 * * allow)表示容许10.10.3.0网段全部协议的链接,
最后一条(0.0.0.0/0 * * denyt3 t3s)表示禁止除上面三条规则之外全部IP地址或网段t三、t3s协议的链接。

4.4 Connection Filters规则示例2

** 目标 **

The Admin server is running on port 8001 and the application is deployed on Managed
server, on port 7001
The purpose is that only 4 IPs should be able to access the console and no one else
should be allowed to access the console but all the IPs, internal or external, should have
access on the application

** 错误配置 **

10.1.34.205 * 8001 allow
10.156.0.57 * 8001 allow
10.156.0.58 * 8001 allow
0.0.0.0/0 * 7001 allow
0.0.0.0/0 * * deny

** 正确配置 **

10.1.34.205 * 8001 allow
10.156.0.57 * 8001 allow
10.156.0.58 * 8001 allow
* * 8001 deny

Make use of * instead of 0 (0.0.0.0/0)

"The default connection filter implementation interprets a target address of 0 (0.0.0.0/0)
as meaning "the rule should apply to all IP addresses."By design, the default filter does
not evaluate the port or the local address, just the action. To clearly specify restrictions
when using the default filter, modify the rules.
Another option is to implement a custom connection filter.

5 参考

田东云 -【无效的安全补丁】说说WebLogic那修不完的Java反序列化漏洞

王德富 -Weblogic之反序列化高危漏洞

6.其余博文

CVE-2015-4852 java 反序列化漏洞–weblogic补丁

7.欢迎关注米宝窝,持续更新中,谢谢!

米宝窝 https://rocklei123.github.io/