Weblogic WLS组件漏洞技术分析与防护方案

近日,绿盟科技应急响应团队也陆续接到来自金融、运营商及互联网等多个行业的客户的安全事件的反馈,发现Weblogic主机被攻击者植入恶意程序,经分析,攻击者利用Weblogic WLS 组件漏洞(CVE-2017-10271),构造payload下载并执行虚拟币挖矿程序,对Weblogic中间件主机进行攻击。

受影响的版本

  • Weblogic Server 10.3.6.0.0,
  • Weblogic Server 12.1.3.0.0,
  • Weblogic Server 12.2.1.1.0,
  • Weblogic Server 12.2.1.2.0

以上均为Weblogic官方还在支持的版本

不受影响的版本

  • Weblogic Server 12.2.1.3

技术防护方案

用户自查

由于此次攻击主要目的为下载执行挖矿程序,从主机层面可通过监控主机系统资源或进程分析方式进行检测,从网络层面可对C&C地址及矿池相关域名/IP进行监控,以发现其他受感染主机。

针对linux主机,首先查看/tmp目录中是否存在属主为WebLogic运行账户的相关可疑文件,如:watch-smartd、Carbon、default。

同时通过进程及系统资源分析,是否存在启动用户为WebLogic运行账户的相关可疑进程。

同时在网络层,通过防火墙或相关的入侵防御设备,对C&C地址及矿池相关域名/IP进行监测,涉及域名及IP包括:

minergate.com

minexmr.com

78.46.91.134

104.25.208.15

104.25.209.15

136.243.102.167

136.243.102.154

94.130.143.162

88.99.142.163

72.11.140.178

 

官方修复方案

Oracle官方对于Weblogic WLS 组件漏洞(CVE-2017-10271)在10月份的更新补丁中已经进行了修复,建议用户及时下载更新包,升级至最新版本进行防护。

下载链接:

http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html

临时防护方案

根据攻击者利用POC分析发现所利用的为wls-wsat组件的CoordinatorPortType接口,若Weblogic服务器集群中未应用此组件,建议临时备份后将此组件删除。

  1. 根据实际环境路径,删除WebLogic wls-wsat组件:
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war

rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war

rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat

  1. 重启Weblogic域控制器服务。
DOMAIN_NAME/bin/stopWeblogic.sh    #停止服务

DOMAIN_NAME/bin/startManagedWebLogic.sh    #启动服务

关于重启Weblogic服务的详细信息,可参考如下官方文档:

https://docs.oracle.com/cd/E13222_01/wls/docs90/server_start/overview.html

绿盟科技防护建议

绿盟科技检测类产品与服务

  • 公网资产可使用绿盟云 紧急漏洞在线检测,检测地址如下:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12

  • 内网资产可以使用绿盟科技的远程安全评估系统(RSAS V6/V5 )或 Web应用漏洞扫描系统(WVSS) 进行检测:
    • 远程安全评估系统(RSAS V6)

http://update.nsfocus.com/update/listRsasDetail/v/vulweb

  • 远程安全评估系统(RSAS V5)

http://update.nsfocus.com/update/listAurora/v/5

  • Web应用漏洞扫描系统(WVSS)

http://update.nsfocus.com/update/listWvssDetail/v/6/t/plg

  • 内网资产可以使用绿盟科技的入侵检测系统(IDS) 进行检测。

入侵检测系统(IDS)

http://update.nsfocus.com/update/listIds

通过上述链接,升级至最新版本即可进行检测

使用绿盟科技防护类产品(IPS/NF/WAF)进行防护:

  • 入侵防护系统(IPS)

http://update.nsfocus.com/update/listIps

  • 下一代防火墙系统(NF)

http://update.nsfocus.com/update/listNf

  • Web应用防护系统(WAF)

http://update.nsfocus.com/update/wafIndex

通过上述链接,升级至最新版本即可进行防护!

技术分析

首先来看下weblogic的历史补丁,四月份补丁通告:

http://www.oracle.com/technetwork/security-advisory/cpuapr2017-3236618.html

10月份补丁通告:

https://www.oracle.com/technetwork/topics/security/cpuoct2017-3236626.html

“remote user can exploit a flaw in the Oracle WebLogic Server WLS Security component to gain elevated privileges [CVE-2017-10271]”

这是CVE-2017-10271的描述信息。

通过PoC测试,结果如下:

跟踪到底这还是XMLDecoder的漏洞,下面来分析补丁代码:首先来看3506的补丁的分析,在文件

weblogic/wsee/workarea/WorkContextXmlInputAdapter.java中,添加了validate方法,方法的实现如下:

private void validate(InputStream is) {

      WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();



      try {

         SAXParser parser = factory.newSAXParser();

         parser.parse(is, new DefaultHandler() {

            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

               if(qName.equalsIgnoreCase("object")) {

                  throw new IllegalStateException("Invalid context type: object");

               }

            }

         });

      } catch (ParserConfigurationException var5) {

         throw new IllegalStateException("Parser Exception", var5);

      } catch (SAXException var6) {

         throw new IllegalStateException("Parser Exception", var6);

      } catch (IOException var7) {

         throw new IllegalStateException("Parser Exception", var7);

      }

   }

简单来说就是在解析xml的过程中,如果Element字段值为Object就抛出异常,这修复显得有些业余,所以马上就有了CVE-2017-10271。前段时间分析Oracle Weblogic十月份的补丁的时候看到WorkContextXmlInputAdapter 相关代码时只关注了这块dos的漏洞,没看到10271添加的对new,method,void的去除。因为可以通过其他方式绕过,比如典型的就是将object改为void,这是挖矿的人采用的PoC,当然也还可以通过new关键字来创建反序列化执行的PoC。

至于为什么XMLDecoder在解析的过程中能执行代码呢,下面我们来动态分析。以如下poc示例:

根据如上PoC,首先生成JdbcRowSetImpl的实例,接着调用该实例的set方法来初始化该实例的属性,当调用完setAutoCommit接口的时候就会根据dataSourceName的值去远程加载一个类初始化。下图为调用栈的结果:

针对上面的PoC,官方放出了10271的补丁,补丁如下:

private void validate(InputStream is) {
   WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();

   try {
      SAXParser parser = factory.newSAXParser();
      parser.parse(is, new DefaultHandler() {
         private int overallarraylength = 0;

         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if(qName.equalsIgnoreCase("object")) {
               throw new IllegalStateException("Invalid element qName:object");
            } else if(qName.equalsIgnoreCase("new")) {
               throw new IllegalStateException("Invalid element qName:new");
            } else if(qName.equalsIgnoreCase("method")) {
               throw new IllegalStateException("Invalid element qName:method");
            } else {
               if(qName.equalsIgnoreCase("void")) {
                  for(int attClass = 0; attClass < attributes.getLength(); ++attClass) {
                     if(!"index".equalsIgnoreCase(attributes.getQName(attClass))) {
                        throw new IllegalStateException("Invalid attribute for element void:" + attributes.getQName(attClass));
                     }
                  }
               }

               if(qName.equalsIgnoreCase("array")) {
                  String var9 = attributes.getValue("class");
                  if(var9 != null && !var9.equalsIgnoreCase("byte")) {
                     throw new IllegalStateException("The value of class attribute is not valid for array element.");
                  }

该补丁较为完整,通过限定object,new,method,void,array等字段来防止攻击者绕过。

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

Spread the word. Share this post!

Meet The Author

Leave Comment