Windows应急响应和系统加固(11)——Weblogic各类漏洞的日志分析和调查取证

Weblogic各类漏洞的日志分析和调查取证

一、WebLogic简介:

  1.WebLogic简介:

  WebLogic是著名的Oracle公司开发的Application Server,是第一个成功商业化的J2EE中间件、容器,用于开发、集成、部署、管理大型&分布式Web应用、网络应用和数据库应用等;

  WebLogic是基于标准化、模块化的组件,提供完整的服务,无需编程即可自动处理应用行为的很多细节;

  Weblogic使用独有的T3协议(T3协议:WebLogic最早由 WebLogic Inc. 开发,后并入BEA公司,最终BEA公司又并入Oracle公司,T3协议为BEA公司的内部协议);

  Weblogic的市场份额还算比较稳定,主要在大型商用系统使用,高并发,与Oracle的产品线联动配合,如图(2017年Java应用服务市场份额占比):

 

   2.WebLogic漏洞介绍:

  <1>.漏洞介绍:

    近年来,缝缝补补的Weblogic,深受Java反序列、SSRF、组件Getshell、弱口令等高危漏洞影响,如图(Weblogic反序列化漏洞历史):

漏洞影响:Weblogic 10.3.x、Weblogic 12.1.x、Weblogic 12.2.x等系列产品

    序列化与反序列化技术:

      序列化和反序列化,是Java引入的数据传输和存储接口技术;

      序列化:用于将对象(Object)转换成二进制串数据存储,对应着writeObject方法;

      反序列化:洽好相反,将二进制串数据转换成对象(Object),对应着readObject方法,

      序列化与反序列化,是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。

    反序列化使用场景:

      HTTP:多平台之间的通信、管理等;

      RMI:Java的一组拥护开发分布式应用程序的API,实现了不同OS之间程序的方法调用(注:RMI传输,100%基于反序列化。Java RMI的默认端口是1099端口;)。

      JMX:JMX是一套标准的代理和服务,用户可在任何Java应用程序中使用这些代理和服务实现管理(注:Weblogic管理页面是基于JMX开发的,JBoss整个系统都基于JMX构架。)。

 

 

   <2>.漏洞分析:

    CVE-2015-4852:

      Apache commons-collections组件的反序列化漏洞,基于T3;

      存在漏洞的Class:

        org.apache.commons.collections.functors* *;

        com.sun.org.apache.xalan.internal.xsltc.trax* *;

        javassist* *;

        org.codehaus.groovy.runtime.ConvertedClosure;

        org.codehaus.groovy.runtime.ConversionHandler;

        org.codehaus.groovy.runtime.MethodClosure;

    CVE-2016-0638:

      readExternal存在反序列化漏洞;

    CVE-2016-3510:

      反序列化对象,封装进weblogic.corba.utils.MarshalledObject,可顺利对MarshalledObject序列化;在反序列化时,MarshalledObject对象调用readObject,对 MarshalledObject封装的序列化对象再次反序列化,导致,逃过

黑名单的检查。

 

    CVE-2017-3506:

      由于使用了存在反序列化缺陷XMLDecoder导致的漏洞,基于http协议,挖矿主力军;

    CVE-2017-10271:

      是3506的绕过;

    CVE-2017-10352:

      XMLDecoder库存在缺陷导致任意代码执行,PoC被泄露,被用于黑产;

    CVE-2017-3248:

      RMI机制的缺陷,通过JRMP协议,达到执行任意反序列化Payload的目的;

      resolveClass和resolveProxyClass都存在漏洞,被用于黑产(挖门罗币等);

    CVE-2018-2628:

      CVE-2017-3248的绕过,基于StreamMessage封装,利用java.rmi.activation.Activator绕过补丁中对java.rmi.registry.Registry的限制。

    CVE-2018-2893:

      如下的类被绕过,导致反序列化:

        java.rmi.activation.*;

        sun.rmi.server.*;

        java.rmi.server.RemoteObjectInvocationHandler;

        java.rmi.server.UnicastRemoteObject;

    应急场景中常见的Weblogic漏洞,还有:

      Console弱口令(weblogic/weblogic);

      SSRF;

      WLS组件命令执行漏洞。

二、日志分析(使用E.L.K处理日志):

  Weblogic日志主要分为:Server日志、HTTP日志和DOMAIN日志;

  1.Server日志:

    主要功能:记录Weblogic Server启动至关闭过程中的运行信息和错误信息

    日志结构:时间戳、严重程度、子系统、计算机名、服务器名、线程 ID、用户 ID、事务 ID、诊断上下文 ID、原始时间值、消息 ID 和消息文本。

    例如:####<Mar 4, 2019 9:42:07 AM CST> <Warning> <RMI> <localhost.localdomain> <AdminServer> <[ACTIVE]ExecuteThread: "4" for queue: "weblogic.kernel.Default (self-tuning)"> <<WLS Kernel>> <> <> 080003>

<RuntimeException thrown by rmi server:<1551663727980> <BEA-weblogic.common.internal.RMIBootServiceImpl.authenticate(Lweblogic.security.acl.UserInfo;)

  2.DOMAIN日志:

    主要功能:记录一个DOMAIN下的各个Weblogic Server的启动至关闭过程中的运行信息和错误信息。

    日志结构:####<Oct 18, 2018 2:21:11 PM CST> <Notice> <Security> <WIN-L25PQAJM1K1> <AdminServer> <[ACTIVE]ExecuteThread: "9" for queue: "weblogic.kernel.Default (self-tuning)"> <<WLS Kernel>> <> <> <1539843671288> <BEA-090082> <Security initializing using security realm myrealm.>

    注:Domain日志中的日志记录不会按照其时间戳顺序写入;

      DOMAIN日志中记录的时间戳是发出消息的服务器的时间戳;

      有可能服务器在一段时间内无法与域服务器联系,此时,消息会被缓冲在本地并在重新连接服务器之后发送到管理服务器。

  3.HTTP日志:  

    默认情况下,HTTP日志记录处于启用状态;

    服务器会将 HTTP 请求保存到单独的日志文件中;

    服务器不会将 HTTP 请求存储在服务器日志文件或域日志文件中;

    默认按文件大小滚动和轮询,大小是5000KB;

    扩展日志记录格式字段:c-ip cs-username date cs-method cs-uri sc-status cs(User-Agent) s-sitename s-port time-taken sc-substatus cs-host cs-version

      字段解释:

        c-ip: 客户端访问服务端的IP;

        cs-username: 客户端访问服务端使用的用户名,匿名访问则使用占位符(-)代替;

        date : 访问的日期;

        time : 访问的时间;

        cs-method : 客户端请求的方法;

        cs-uri: 客户端请求服务器的URL;

        sc-status: 服务器响应的状态码;

        cs(User-Agent) : 浏览器的信息;

        s-sitename: 互联网请求的名称,通常是一个占位符;

        s-port: 服务的端口号;

        time-taken: 完成整个访问请求所花费的时间(秒);

        sc-substatus: 子状态吗,通常是一个占位符;

        cs-host: 服务器的header头部;

        cs-version: 协议的版本号