目前,Oracle Weblogic保持每个季度一个补丁包更新的速度,对于大规模使用weblogic中间件的系统来说,更新补丁包、重启应用服务器是一个非常繁琐重复的过程。(建议使用ansible类似工具批量打补丁)同时对于CVE-2018-2628等反渗透测试漏洞来说,psu20180417补丁要求升级JDK到最新的版本,更是要了维护人员的老命。(需要应用测试啊!!!)
本文以CVE-2018-2628为例,详细叙述官方解决方案以及临时解决方案(很多问题一劳永逸)。
Oracle官方已经在4月17日的关键补丁更新(CPU)中修复了该漏洞,所以标准的修复方式是安装最新的PSU:
WebLogic Server 12.2.1.3 WLS PSU 12.2.1.3.180417 Patch 27342434
WebLogic Server 12.2.1.2 WLS PSU 12.2.1.2.180417 Patch 27338939
WebLogic Server 12.1.3.0 WLS PSU 12.1.3.0.180417 Patch 27419391
WebLogic Server 10.3.6.0 WLS PSU 10.3.6.0.180417 Patch 27395085
但在更新上述补丁后,仍然后部分安全防护公司指出,安装最新的PSU后漏洞仍然存在,无法完全抵御反序列化漏洞的攻击。针对上述情况, Oracle安全部门最近发布的文档进行了说明:April 2018 Critical Patch Update: Additional Information about the Oracle WebLogic Server Vulnerability CVE-2018-2628 (Doc ID 2395745.1)。
Oracle has determined that the April 2018 Critical Patch Update provides effective mitigation against vulnerability CVE-2018-2628 when using a combination of supported versions of Oracle products.
These supported versions currently are:
Supported versions of WebLogic Server are: 10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3
Supported versions of Java SE are: JDK6u191, JDK7u181 and JDK8u172. o
Note: A valid Support license is needed to download either JDK6u191 or JDK7u181
简而意之,就是除了升级PSU180417补丁外,还需要升级JDK版本,包括了 JDK6u191, JDK7u181 and JDK8u172。
常规解决步骤:
1、下载PSU补丁pxxxxxxxx_1036_Generic.zip ,然后解压到对应的bsu下的cachedir目录
2、检查当前补丁版本
cd $WLS_HOME/utils/bsu
./bsu.sh -view -prod_dir=$WLS_HOME/wlserver_10.3 -status=applied -verbose
3、通过补丁号卸载原补丁
./bsu.sh -remove -prod_dir=$WLS_HOME/wlserver_10.3 -patchlist=XXXX -verbose
4、安装新的补丁程序
./bsu.sh -install -patch_download_dir=$WLS_HOME/utils/bsu/cachedir -prod_dir= $WLS_HOME/wlserver_10.3 -patchlist=XXXX -verbose
5、检查
./bsu.sh -view -prod_dir=$WLS_HOME/wlserver_10.3 -status=applied -verbose
注:在使用bsu安装时,建议将bsu.sh中的-Xmx增加到2048-2536M,避免出现OOM错误。
对反渗透测试漏洞等高危风险而言,均是通过使用weblogic的t3端口进行入侵,因此对于只是用http等协议的应用,可以通过临时解决方案对外屏蔽t3协议,达到一劳永逸的效果。
官方说明:
根据CVE-2018-2628相关描述,Java反序列化漏洞 在weblogic上是通过T3协议进行攻击的,T3协议是weblogic内部的通信协议,weblogic运行时必须使用此协议。在对T3协议实现的过程中用到了java序列化技术。所以只要科学合理的管理好T3协议的使用就可以防护住针对weblogic 产品的java反序列化漏洞攻击。
针对暂时无法安装最新PSU或者版本过低,没有对应PSU修复该漏洞的情况,可以考虑通过配置weblogic连接筛选器,屏蔽部分(主要是外部)T3访问的方式临时解决问题。
1、连接筛选器
配置weblogic连接筛选器时,可以选择自定义的连接筛选器,也可以使用weblogic产品提供的默认连接筛选器。一般我们都是使用weblogic默认提供的连接筛选器:'weblogic.security.net.ConnectionFilterImpl'
2、语法
连接筛选器语法规则
连接筛选器规则语法如下所示:
每行都只能写一条规则。
规则中的标记用空格分隔开。
井号 (#) 是注释字符。将忽略行中井号后面的所有内容。
将忽略规则前后的空格。
将跳过只包含空格或注释的行。
筛选器规则格式的不同取决于是使用筛选器文件输入筛选器规则,还是在管理控制台中输入筛选器规则。
如果在管理控制台中输入筛选器规则,则请按照下列格式输入:
targetAddress localAddress localPort action protocols
targetAddress指定要筛选的一个或多个系统。
localAddress 定义 WebLogic Server 实例的主机地址。(如果指定为星号 (*),则返回的匹配结果将是所有本地 IP 地址。)
localPort 定义 WebLogic Server 实例正在监听的端口。(如果指定为星号 (*),则匹配返回的结果将是服务器上所有可用的端口)。
action 指定要执行的操作。该值必须为 allow或 deny。
protocols 是要匹配的协议名列表。可能指定下列协议:http、https、t3、t3s、ldap、ldaps、iiop、iiops 和 com。(尽管仍然支持giop、giops 和 dcom 协议名称,但是不赞成在 9.0 及更高版本中使用;您应该使用等同的 iiop、iiops 和 com 协议名称。)
3、配置步骤
以该集群3个server为例,一个管理,两个被管:
然后在Weblogic Console 中选择Domain->安全->筛选器 配置如下:
连接筛选器: weblogic.security.net.ConnectionFilterImpl
网络过滤规则如下:
192.168.8.103 192.168.8.104 7001 allow t3
192.168.8.104 192.168.8.104 7001 allow t3
* 192.168.8.104 7001 deny t3
192.168.8.103 192.168.8.104 8001 allow t3
192.168.8.104 192.168.8.104 8001 allow t3
* 192.168.8.104 8001 deny t3
192.168.8.103 192.168.8.103 8002 allow t3
192.168.8.104 192.168.8.103 8002 allow t3
* 192.168.8.103 8002 deny t3
之后重启域内所有server。内部之间可以通过t3协议通信,外部ip无法访问。