title: WebLogic Java反序列化漏洞终极建议
author: rocklei123
tags:html
本文针对这几年来WebLogic软件常常报出的java反序列化漏洞问题进行总结,其余中间件软件本文暂不讨论。内容主要涵盖客户最关心的一些问题、工程师打补丁时须要注意事项。java
Java 序列化与反序列化git
序列化与反序列化是让 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
最为出名的大概应该是:15年的Apache Commons Collections 反序列化远程命令执行漏洞,其当初影响范围包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd等。json
Apache Commons Collections 3和4,Groovy,Spring,只要目标应用的Class Path中包含这些库,可以让readObject()实现任意命令执行。影响比较普遍的就是Apache Commons Collections这个库,中间件基本都会涉及使用此库。安全
由于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补丁是采用黑名单的方式过滤危险的反序列化类 ,每次新出现一种漏洞就提供一个新的黑名单,这种方式极不安全的。 一旦黑客发现新的漏洞,绕过这个黑名单就能攻击。详细缘由请开大神分析
缘由就在下文连接中:
Weblogic 反序列化漏洞(CVE-2018-2628)漫谈
问题 :大多数WebLogic反序列化漏洞主要是针对T3协议,咱们默认是否已经启用此协议?经过什么方法确认?
答 :t3协议默认都是开启的,t3协议是很是重要的WebLogic内部的通信协议。
由于基本都是基于t3协议形成的Java反序列化问题,且Oracle提供的补丁集合没法彻底解决java反序列化问题,官方提供一种临时解决办法就是过滤T3协议,即WebLogicServer 提供了名为weblogic.security.net.ConnectionFilterImpl 的默认链接筛选器,在此链接筛选器上添加过滤规则过滤链接。若是参考 http://www.sohu.com/a/241934306_465935 ,是否起到防御做用,文中配置方式是否正确?
问题:临时方案是否必定程度的起到预防的做用
答:临时方案在必定程度的起到预防的做用。
问题 :可否禁用全部t3协议?
** 下文配置方式是错误的配置方式 **
答:文中提到的方法是错误的方法。文中提到:筛选规则填取:* * 7001 deny t3 t3s ,此种规则至关于禁用了t3 协议。禁用后会影响到使用t3协议启动的受管节点,WLST监控脚本、中止脚本…等等。
(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
补丁工具升级 #cd /home/cfmmc/Oracle/Middleware/utils/bsu/ #unzip p25153061_1036_Generic.zip # . ./bsu_fix.sh install 回滚 # . ./bsu_fix.sh rollback
"$JAVA_HOME/bin/java" -Xms2048m -Xmx2048m -jar patch-client.jar $*
注意事项:临时方案存在必定风险,须要在测试环境严格实测,一旦禁用规则配置错误,可能会致使生产系统启动或调用失败。故内网环境酌情考虑,外网环境系统建议配置。
按照oracle官网所说8和九、10版本没有反序列漏洞,可是实际中,若是在应用中含’commons.collections’的jar包,仍是会在安全软件中扫描出反序列化漏洞。
** 非官方 ** 的修复方式有以下两种方法:
(1)下载Apache官方最新的commons-collections包,替换有漏洞的commons-collections组件
地址:http://commons.apache.org/proper/commons-collections/download_collections.cgi
(2)调整应用程序,使用SerialKiller类包替换进行反序列化操做的ObjectInputStream类。
下载jar包和实施步骤请参考连接:https://github.com/ikkisoft/SerialKiller
** 题外话:不过运维人员仍是不要背这颗雷吧,生产环境复杂,真出了事故咱们付不起责任,更况且国企的企业政治复杂,就别把本身置于水火之中了。咱们只提供建议,让甲方人员决定吧! **
通常写法示例(第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协议的链接。
** 目标 **
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.
田东云 -【无效的安全补丁】说说WebLogic那修不完的Java反序列化漏洞
CVE-2015-4852 java 反序列化漏洞–weblogic补丁