WebLogic浅析
WebLogic安装
WebLogic简介
WebLogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JavaEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
WebLogic就是和我们常用的Tomcat差不多的部署Java Web程序的服务器。WebLogic Server凭借其出色的群集技术,拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。WebLogic Server既实现了网页群集,也实现了EJB组件 群集,而且不需要任何专门的硬件或操作系统支持。网页群集可以实现透明的复制、负载平衡以及表示内容容错 。无论是网页群集,还是组件群集,对于电子商务解决方案所要求的可扩展性和可用性都是至关重要的。共享的客户机/服务器和数据库连接以及数据缓存和EJB都增强了性能表现。这是其它Web应用系统所不具备的。所以,在扩展性方面WebLogic是远远超越了Tomcat。
中间件(Middleware)
中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它可以被描述为“软件胶水。通常,它支持复杂的分布式业务软件应用程序。
Oracle定义中间件的组成包括Web服务器、应用程序服务器、内容管理系统及支持应用程序开发和交付的类似工具,它通常基于可扩展标记语言(XML)、简单对象访问协议(SOAP)、Web服务、SOA、Web 2.0和轻量级目录访问协议(LDAP)等技术。
Oracle融合中间件(Oracle Fusion Middleware)
Oracle融合中间件是Oracle提出的概念,Oracle融合中间件为复杂的分布式业务软件应用程序提供解决方案和支持。Oracle融合中间件是一系列软件产品并包括一系列工具和服务, 如:符合Java Enterprise Edition 5(Java EE)的开发和运行环境、商业智能、协作和内容管理等。Oracle融合中间件为开发、部署和管理提供全面的支持。
Oracle融合中间件提供两种类型的组件:
- Java组件
Java组件用于部署一个或多个Java应用程序,Java组件作为域模板部署到Oracle WebLogic Server域中。这里提到的Oracle WebLogic Server域在后面会随着Oracle WebLogic Server详细解释。 - 系统组件
系统组件是被Oracle Process Manager and Notification (OPMN)管理的进程,其不作为Java应用程序部署。系统组件包括Oracle HTTP Server、Oracle Web Cache、Oracle Internet Directory、Oracle Virtual Directory、Oracle Forms Services、Oracle Reports、Oracle Business Intelligence Discoverer、Oracle Business Intelligence。
在前面Oracle融合中间件的介绍中,我们已经发现了其中贯穿着WebLogic的字眼,且Oracle融合中间件和WebLogic也是我在漏洞分析时经常混淆的。实际上WebLogic是组成Oracle融合中间件的核心。几乎所有的Oracle融合中间件产品都需要运行WebLogic Server。因此,本质上,WebLogic Server不是Oracle融合中间件,而是构建或运行Oracle融合中间件的基础,Oracle融合中间件和WebLogic密不可分却在概念上不相等。
Oracle WebLogic Server域
EJB (Enterprise Java Beans) 是基于分布式事务处理的企业级应用程序的组件。Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。
Oracle WebLogic Server域又是WebLogic的核心。Oracle WebLogic Server域是一组逻辑上相关的Oracle WebLogic Server资源组。域包括一个名为Administration Server的特殊Oracle WebLogic Server实例,它是配置和管理域中所有资源的中心点。也就是说无论是Web应用程序、EJB(Enterprise JavaBeans)、Web服务和其他资源的部署和管理都通过Administration Server完成。
Oracle WebLogic Server集群
WebLogic Server群集由多个同时运行的WebLogic Server服务器实例组成,它们协同工作以提供更高的可伸缩性和可靠性。因为WebLogic本身就是为分布式设计的中间件,所以集群功能也是WebLogic的重要功能之一。也就有了集群间通讯和同步,WebLogic的众多安全漏洞也是基于这个特性。
WebLogic漏洞分类
WebLogic爆出的漏洞以反序列化为主,通常反序列化漏洞也最为严重,官方漏洞评分通常达到9.8。WebLogic反序列化漏洞又可以分为XMLDecoder反序列化漏洞和T3反序列化漏洞。其他漏洞诸如任意文件上传、XXE等等也时有出现。因此后面的文章将以WebLogic反序列化漏洞为主讲解WebLogic安全问题。
反序列化漏洞
序列化 (Serialization) 是指将数据结构或对象状态转换成字节流 (例如存储成文件、内存缓冲,或经由网络传输) ,以留待后续在相同或另一台计算机环境中,能够恢复对象原来状态的过程。
序列化和反序列化详解参考链接
当服务端允许接收远端数据进行反序列化时,客户端可以提供任意一个服务端存在的目标类的对象 (包括依赖包中的类的对象) 的序列化二进制串,由服务端反序列化成相应对象。如果该对象是由攻击者『精心构造』的恶意对象,而它自定义的readObject()中存在着一些『不安全』的逻辑,那么在对它反序列化时就有可能出现安全问题。
XMLDecoder反序列化漏洞
XML是一种标记语言,在开发过程中,可以使用XML进行进行数据的传输或充当配置文件。XMLDecoder是用于将JavaBean或POJO对象序列化和反序列化的一套API,开发人员可以通过利用XMLDecoder的readject()方法将任意的XML反序列化,从而使得整个程序更加灵活。
T3反序列化漏洞
JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
RMI(Remote Method Invocation)即远程方法调用。能够让在某个Java虚拟机上的对象像调用本地对象一样调用另一个Java虚拟机中的对象上的方法。它支持序列化的Java类的直接传输和分布垃圾收集。Java RMI的默认基础通信协议为JRMP。
WebLogic RMI和T3反序列化漏洞有很大关系,因为T3就是WebLogic RMI所使用的协议。WebLogic RMI主要使用T3协议(还有基于CORBA的IIOP协议)进行客户端到服务端的数据传输。Java RMI即远程方法调用,默认使用JRMP协议通信。WebLogic RMI是WebLogic对Java RMI的实现,其使用T3或IIOP协议作为通信协议。无论是Java RMI还是WebLogic RMI,都需要使用JNDI去发现远端的RMI服务。