当地时间4月17日,北京时间4月18日凌晨,Oracle官方发布了4月份的关键补丁更新CPU(Critical Patch Update)其中包含一个高危的Weblogic反序列化漏洞(CVE-2018-2628),通过该漏洞,攻击者可以在未授权的情况下远程执行任意代码。
参考链接:
http://www.oracle.com/technetwork/security-advisory/cpuapr2018-3678067.html
漏洞影响范围
l Weblogic 10.3.6.0
l Weblogic 12.1.3.0
l Weblogic 12.2.1.2
l Weblogic 12.2.1.3
根据NTI(绿盟态势感知平台)反馈的结果,在全球范围内对互联网开放weblogic服务的资产数量多达19229,其中归属中国地区的受影响资产为1787。
对应中国归属各省市的的分布情况如下图所示,北京地区开放的资产数量较多。
技术防护方案
用户自查
使用如下命令检查Weblogic版本是否在受影响范围内:
$ cd /lopt/bea92sp2/weblogic92/server/lib
$java -cp weblogic.jar weblogic.version
同时检查是否对外开放了7001端口(Weblogic默认端口)。
官方修复方案
官方已经在本日发布的关键补丁更新中修复了该漏洞,请用户及时下载更新进行防护。
参考链接:
http://www.oracle.com/technetwork/security-advisory/cpuapr2018-3678067.html
注:Oracle官方补丁需要用户持有正版软件的许可账号,使用该账号登陆https://support.oracle.com后,可以下载最新补丁。
临时解决方案
CVE-2018-2628漏洞利用的第一步是与Weblogic服务器开放在服务端口上的T3服务建立socket连接,可通过控制T3协议的访问来临时阻断攻击行为。WebLogic Server 提供了名为weblogic.security.net.ConnectionFilterImpl 的默认连接筛选器。此连接筛选器接受所有传入连接,可通过此连接筛选器配置规则,对t3及t3s协议进行访问控制。。
1. 进入Weblogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。
2. 在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:* * 7001 deny t3 t3s
3. 保存后规则即可生效,无需重新启动。
连接筛选器规则格式如:target localAddress localPort action protocols,其中:
l target 指定一个或多个要筛选的服务器。
l localAddress 可定义服务器的主机地址。(如果指定为一个星号 (*),则返回的匹配结果将是所有本地 IP 地址。)
l localPort 定义服务器正在监听的端口。(如果指定了星号,则匹配返回的结果将是服务器上所有可用的端口)。
l action 指定要执行的操作。(值必须为“allow”或“deny”。)
l protocols 是要进行匹配的协议名列表。(必须指定下列其中一个协议:http、https、t3、t3s、giop、giops、dcom 或 ftp。) 如果未定义协议,则所有协议都将与一个规则匹配。 |
绿盟科技防护建议
绿盟科技检测类产品与服务
1、公网资产可使用绿盟云 紧急漏洞在线检测,检测地址如下:
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12
2、内网资产可以使用绿盟科技的入侵检测系统(IDS),远程安全评估系统(RSAS V6)和Web应用漏洞扫描系统(WVSS) 进行检测。
http://update.nsfocus.com/update/listIds
http://update.nsfocus.com/update/listRsasDetail/v/vulweb
通过上述链接,升级至最新版本即可进行检测
使用绿盟科技防护类产品(IPS/NF)进行防护:
http://update.nsfocus.com/update/listIps
http://update.nsfocus.com/update/listNf
通过上述链接,升级至最新版本即可进行防护!
TRG安全平台提供应急响应手册
1. TSA(绿盟态势感知平台)
1.1 添加“weblogic漏洞攻击尝试”事件规则:
进入BSA态势感知主页,进入规则引擎APP,如图1.1.
图1.1进入规则引擎APP
1.2 新建规则
图 1.2 新建规则
1.3 再新建页面
规则模式:专家模式
规则分类:网络入侵规则
规则sql:
select sip dip sum(last_times) as atk_count sip dip min(timestamp) as start_time max(timestamp) as end_time concat_agg(related_id_list) as related_id_list
from internal_app_bsaips.ipslog
where rule_id in (2417424022236142307421757217582145629116303122368563299232676262760689663446163666197661896619560862)
group by sip dip
图1.3 新建规则-专家模式填写
1.4 点击下一步,出现规则属性设置页面
名称:weblogic漏洞攻击尝试
安全等级:中
事件阶段:侦查
超时时间:1800(默认值)
持续时间:3600(默认值)
归并属性:sip,dip
事件类型:系统入侵事件- 漏洞攻击
规则描述:该事件是攻击者对weblogic服务器漏洞做攻击尝试。
规则建议:如果攻击发起者为我方资产,则说明该资产已失陷。否则,如被攻击系统为我方资产,并且部署有weblogic服务,请确认是该资产是否存在事件详情中的漏洞。
图1.4 新建规则-规则属性设置
点击完成,完成该规则配置。
1.5 在规则列表中使之生效
图1.5 使规则生效
2. ESP(绿盟企业安全平台)
2.1 添加“weblogic漏洞攻击尝试”事件规则
打开ESP绿盟企业安全平台,进入 量化分析-> 事件分析-> 事件规则,点击“创建规则”,如图2.1所示,弹出如图2.2所示的创建规则窗口。
图2.1 选择创建规则
2.2 在[创建规则->基本设置]中填入以下信息
规则名称:weblogic漏洞攻击尝试
日志类型:入侵防护日志
窗口设置:空白(默认)
规则描述:该事件是攻击者对weblogic服务器漏洞做攻击尝试。如果攻击发起者为我方资产,则说明该资产已失陷。否则,如被攻击系统为我方资产,并且部署有weblogic服务,请确认是该资产是否存在事件详情中的漏洞。
图2.2 创建规则-基本设置
2.3 点击下一步,在[创建规则->创建规则]中填入以下信息
选中[过滤条件(where)]
[告警事件规则]属性in(2417424022236142307421757217582145629116303122368563299232676262760689663446163666197661896619560862)
图2.3 创建规则-规则设置
2.4 点击下一步,在[创建规则->事件设置]中填入以下信息
事件类型:攻击入侵(只利用该设备告警不能确认攻击是否成功,只能判断是针对系统中可能存在的weblogic服务漏洞的攻击尝试)
风险等级:3
图2.4 创建规则-事件设置
2.5 点击创建,完成规则创建
图2.5 规则创建完成后效果
3. TAM新版本(绿盟全流量分析平台)
添加“weblogic漏洞攻击尝试”事件规则
3.1 进入全流量事件规则配置文件文件目录(/home/bsauser/BSA/apps/bsa_tam2/conf),备份mergeconf.xml文件,然后利用vi打开mergeconf.xml文件
图3.1打开全流量事件规则配置文件
3.2 用utf-8编码格式的编辑器打开“全流量平台规则_weblogic漏洞攻击尝试事件.xml”,复制其中的内容插入到rules节点中,并保持退出,新规则自动生效。
图3.2插入新规则到rules节点
互联网资产影响排查
绿盟科技威胁情报中心提供对互联网开放网络资产信息查看的功能,企业用户可通过在NTI上检索自有资产信息端口开放情况,查看企业资产是否受此漏洞影响。
绿盟科技威胁情报中心为企业客户提供互联网资产核查服务,使得企业客户能够及时掌握自身资产的安全态势以及资产变动情况,服务详情可咨询:NTI@nsfocus.com,或者咨询对应的客户经理。
技术分析
漏洞简析
该服务会解包Object结构,通过一步步的readObject去第二步服务器上的1099端口请求恶意封装的代码。
然后在本地弹出计算器。
Weblogic已经将互联网暴露的PoC都已经加入了黑名单,如果要绕过他的黑名单的限制就只能自己动手构造。来看看InboundMsgAbbrev中resolveProxyClass的实现,resolveProxyClass是处理rmi接口类型的,只判断了java.rmi.registry.Registry,其实随便找一个rmi接口即可绕过。
protected Class resolveProxyClass(String[] interfaces) throws IOException ClassNotFoundException {
String[] arr$ = interfaces;
int len$ = interfaces.length;
for(int i$ = 0; i$ < len$; ++i$) {
String intf = arr$[i$];
if(intf.equals("java.rmi.registry.Registry")) {
throw new InvalidObjectException("Unauthorized proxy deserialization");
}
}
return super.resolveProxyClass(interfaces);
}
|
声 明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。