2.中间件安全基础(二)
0x00 前言
这是这个系列的第二篇,主要讲解Weblogic、WebSphere和Jboss这三款Java中间件的安全配置和日志格式。首先说一些Java中间件的定义:在Java web开发的演进与进化中,对于消息系统,数据库,服务化接口的抽象;涉及数据分离的过程中及分离后系统间,数据库间的交互和通信,中间件不属于任何一个开发项目,让我们对应用系统间或者数据库间数据流通无感知。
0x01 Apache
WebLogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于 JAVAEE 架构的中间件,WebLogic 是用于开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。将 Java 的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
Weblogic安全设置
Weblogic有一个Web端的管理控制台,关于Weblogic的操作、Web服务的配置及程序管理等都可以通过这个控制台进行操作。
权限配置
Weblogic的权限可以分成两个部分,一个是服务器给予Weblogic的权限,另一个是Weblogic内部的权限管理。Weblogic的启动权限就是服务器默认给予的权限,也就是当前登录账户的权限,比如如果Web程序获取一个shell其可执行的操作与cmd终端是一致的。所以启动Weblogic的时候要以一个权限较低的账户启动。使其不具备危险操作的能力。
Weblogic内部的权限管理也是通过角色和用户组来实现的,主要分为以下几个用户组
1、Administrators
Administrators这个用户组是创建域时,系统用户默认属于此组,管理权限最大。可以浏览、配置、修改服务器配置及停止、启动服务器,部署和取消应用程序。
2、Deployers
Deployers这个用户组可以部署和取消应用程序(包括创建连接池数据源)。可以浏览但不能修改服务器配置(主要是指myserver中各选项参数等)。如果用户属于此组时,在控制台看不见安全性选项即Security。
3、Monitors
Monitors这个用户组只能浏览服务器配置,监视服务器性能,不能修改任何东西。如果用户属于此组时,在控制台看不见安全性选项即Security。
4、Operators
Operators这个用户组可以启动和关闭服务器,并可以浏览服务器配置。不能部署取消应用程序(包括创建连接池河数据源)。如果用户属于此组时,在控制台看不见安全性选项即Security。
用户和用户组
下面以创建一个Monitors用户组的账户为例,演示创建的流程。首先点击左边的“安全领域”,可以看到右面的界面,再点击“myrealm”。(Weblogic内部账户的创建与操作系统账户权限无关,但是至少系统账户具有启动和访问Weblogic的权限。)
然后进入下面的界面,先点击“用户和组”,再点击“新建”。
然后在下面的输入框内输入新建用户的信息
创建用户后再将用户添加到相应的用户组,可以根据需要赋予其一个或者多个用户组的权限。
然后就可以用这个用户进行操作,但是其只具有览服务器配置,监视服务器性能等较低的权限,将其分配给相应的人员使用能够较好的保证安全性。
全局角色
全局角色主要就是用来实现:同一个用户组的不同用户不同的访问权限(比如:访问时间)。之前已经建立了一个temp账户,再使用相同的方法在Monitors用户组中再建立一个test账户,然后用这两个账户模拟在访问时间上的权限设置。首先在管理控制台的首页依次点击“安全领域”、“myrealm”进入如下界面
然后点击“角色和策略”,在下面的表格中展开其全局角色,点击“查看角色条件”
然后点击:“添加条件”
选择“用户”
在“用户参数名”中写入用户名,依次添加temp和test
然后再次添加时间控制的条件条件
设置一个时间段
然后按如下条件组合
那么在20:45:35--20:45:40这个时间段之外temp用户则无法登陆
而test用户是可以的
端口配置
Weblogic的端口配置有两种方式,一是通过Web端的管理控制台进行,在控制台首页点击左侧的“服务器”,然后点击右侧想要修改的服务器的链接。
然后即可修改。
二是通过修改配置文件,通过配置文件可以设置多个服务器的端口信息(也可以设置监听地址、日志文件缓冲区大小等信息),每个服务器信息包含在一个server标签中,配置文件位置在\user_projects\domains\base_domain\config\config.xml
禁用web目录列表
Weblogic的默认配置是不会列出目录的,想要对某个Web程序进行此项的配置也是有修改管理控制台参数和修改配置文件两种方法。修改管理控制台参数依次点击“部署”、“webapp”、“配置”然后会进入到如下界面,勾选“启用索引目录”。
修改配置文件要首先在相应的Web项目下添加weblogic.xml文件,路径与项目自带的web.xml文件相同,一般为webdemo\webapp\WEB-INF
然后在weblogic.xml中写入如下配置
如果箭头所指的位置设置为true,那么访问Web路径就会将文件和目录列表显示出来
如果为false则不显示
Weblogic 日志格式
先来看一下Weblogic的日志文件结构,包含一个“diagnostic_images”文件夹和三个日志文件。
“diagnostic_images”文件夹用于存放WebLogic诊断服务(WebLogic Diagnostic Service)的Server镜像捕获器(Server Image Capture)组件创建的信息,类似于Windows出错时的镜像捕获;Access.log文件在WebLogic中用于在HTTP,HTTPS协议访问的服务器上进行日志记录;AdminServer.log用于记录Weblogic server在运行时的信息,其内容与在命令行下启动Weblogic时一致;base_domain.log为域日志,记录domain的运行情况。Weblogic的日志配置也是在控制台进行,这里可以进行日志格式、位置、生成规则等参数的配置,以http日志为例。
下面的高级部分有一个日志文件缓冲区,其作用是日志达到充满缓冲区大小后再写入日志文件,想要实时写入需要将其设置为0(此处的设置需要重启Weblogic才能生效)。
Weblogic的http日志记录如下图所示
其字段含义分别为(以第一条为例):
访问者IP :1270.0.01
远端登录名(不存在则为-):-
远程用户名(不存在则为-):-
访问时间:[05/十月/2017:14:38:38 +0800]
访问方法:GET
访问路径:/webapp/demo/hello.jsp
访问协议:HTTP/1.1
返回状态码:200
返回字节大小:34
0X02 WebSphere
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。 WebSphere提供了可靠、灵活和健壮的软件。 一般在大型企业如电商、银行或保险等相关的核心系统中使用。尤其是对于电子商务网站来说WebSphere 是最主要的软件平台,可用于企业开发、部署和整合新一代的电子商务应用,如B2B,并支持从简单的网页内容发布到企业级事务处理的商业应用。
在介绍WebSphere相关的安全内容之前,这里先说一个概要文件的概念。在WebSphere Application Server V6 版本引进了概要文件,目的是将产品二进制文件(binaries)与用户数据物理分离,并使用户能定义多组用户数据。在第六版之前,产品安装程序常将产品二进制文件和 WebSphere 缺省配置置于安装目录下,用户通过产品提供的各种系统管理工具,自定义配置并部署应用程序。换句话说,之前的产品二进制文件和用户数据混在一起,并只有一组用户数据可以通过特定的 WebSphere 安装来定义(对于不同用户来说难以个性化的使用WebSphere)。而概要文件可以获取磁盘上的一组用户数据和相关的运行时执行环境,WebSphere Application Server V6 概要文件由该文件集组成,该文件集由最终用户所有,并且最终用户可以对文件集进行写操作,且该流程以最终用户的身份执行。一个形象的类比就是Linux中的不同用户的管理,一个Linux用户对应Home中的一个用户目录,每个用户可以独立的使用操作系统,有着相对独立的系统环境。所以可以认为 WebSphere 概要文件是"用户数据分区",等同于 UNIX/Linux 操作系统环境中用户的主目录。
一个概要文件就相当于Web程序及其所需的运行环境,WebSphere有专门的概要文件管理工具,可以在这里进行创建、删除等操作。
WebSphere 安全设置
WebSphere也拥有一个Web端的管理控制台,在这里可以进行服务器的大部分配置和管理操作,我们重点说几个与安全相关的配置操作。
用户管理
WebSphere中设置了用、组和角色的概念,一个用户可以属于一个或多个组,一个用户或组也可以有多个角色,角色对应着相应的权限。以添加一个test账户为例,首先创建用户
然后可以将其添加到相应的用户组
也可以点击左侧的“管理用户角色”为其添加相应的角色,在添加界面首先选中相应的角色,然后将test用户映射至角色,最后点击确定即可。
然后就可以看到test用户被赋予了管理员角色,用户组的角色添加也是同样的操作。将合适的角色和用户组赋予合适的用户将有助于安全性的提高。
全局安全性
点击左侧全局安全性按钮,可以在左侧看到安全性的配置,选中“管理安全性”、“应用程序安全性”和“Java2安全性”,默认只选中了第一个。启用全局安全性,应用程序可以将 WebSphere的安全特性发挥到最大,Java 2 安全性在 J2EE 基于角色的授权之上提供访问控制保护的额外级别。它特别处理系统资源和 API 的保护,不启用 Java2 安全性会极大减弱应用的安全强度。
禁止 file serving 服务和Web目录列表
如果启用 file serving 服务,用户可能非法浏览应用服务器目录和文件,另外,应用服务器提供静态文件服务,性能会有较大的损失。根据路径找到文件
$WAS_HOME/<profilepath>/config/cells/<hostname>/applications/<yourapplication>.ear/<yourapplication>.war/WEB-INF/ibm-web-ext.xml
然后设置 fileServingEnabled=”false”,同时设置directoryBrowsingEnabled=”false”,避免出现目录遍历漏洞。
WebSphere 日志格式
一个WebSphere的Web程序或概要文件的日志文件夹中包含多个日志文件]
常用的日志为SystemOut.log和SystemErr.log,SystemOut 日志用于监视正在运行的应用程序服务器的运行状况,SystemErr 日志包含用于执行问题分析的异常堆栈跟踪信息。这两份日志默认大小为1M,历史文件数为1份,通过管理控制台可以进行日志的配置和查看等操作,从首页依次点击“服务器”、“服务器类型”、“WebSphere Application Server”,然后点击右侧界面出现的资源名称。
再找到“记录和跟踪”
然后点击JVM日志(其他链接对应着在日志文件夹中看到的不同的日志)
在这个界面可以对日志进行配置和查看
SystemOut.log和SystemErr.log分别如下图所示
它们的格式是一样的,以SystemOut.log的第一行日志为例,字段含义分别为:
时间戳:[17-10-5 19:11:25:092 CST]
发出消息的线程的散列值:00000000
发出消息的线程名称:ManagerAdmin
消息类型:I
消息内容:TRAS0017I: 启动跟踪状态是 *=info
HTTP访问日志默认没有开启,按图中的按钮依次点击并选中“在服务器启动时启用记录服务”,然后重启服务器才可启用http访问日志。
日志内容大致为
其字段含义分别为(以第一条为例):
访问者IP :10.108.42.161
远端登录名(不存在则为-):-
远程用户名(不存在则为-):-
访问时间:[05/Oct/2017:21:41:05 +0800]
访问方法:GET
访问路径:/
访问协议:HTTP/1.1
返回状态码:200
返回字节大小:667
0x03 jboss
Jboss是一个基于 J2EE 的开放源代码的应用服务器。JBoss代码遵循 LGPL 许可,可以在任何商业应用中免费使用,而不用支付费用。JBoss 是一个管理 EJB 的容器和服务器,支持 EJB1.1、EJB2.0和EJB3的规范。但JBoss 核心服务不包括支持 servlet/JSP 的 WEB 容器,一般与 Tomcat 或 Jetty 绑定使用。 Jboss本身基于Tomcat内核,在Tomcat的基础上,对其进行本地化,将Tomcat 以内嵌的方式集成到 JBoss 中,克服Tomcat的缺陷,使其成为一个性能更为优越的Web应用服务器。
Jboss安全设置
设置 jmx-console/web-console 密码
Jmx-console和web-console是Jboss的两个管理控制台
默认情况访问 http://localhost:8080/jmx-console就可以浏览Jmx-console,其中包含jboss的部署管理的一些信息,不需要输入用户名和密码,使用起来具有安全隐患。
要对其进行一定的配置启用密码登录,首先,根据目录找到文件
/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml
将security-domain标签一行的注释去掉
然后修改同目录下的web.xml文件,将security-constraint标签的注释去掉
在如下的配置文件以键值对的方式定义了用户名和密码,直接修改即可。
\server\default\conf\props\jmx-console-users.propertie
再次访问需要密码
然后是web-console的密码配置,首先通过以下路径找到jboss-web.xml文件
server\default\deploy\management\console-mgr.sar\web-console.war\WEB-INF
将security-domain的注释去掉
然后找到同目录下的web.xml文件,去掉security-contraint的注释
然后在下列路径中找到web-console-users.properties文件,修改用户名密码。
server\default\deploy\management\console-mgr.sar\web-console.war\WEB-INF\classes
然后即可实现密码登录
修改 Web 的访问端口
修改端口号也是需要修改配置文件,不同版本的Jboss配置文件可能略有偏差,下面是Jboss-6。1.0.Final版本的配置文件位置
server\jbossweb-standalone\conf\bindingservice.beans\META-INF
之后打开bindings-jboss-beans.xml,可以看到修改位置。
Jboss日志格式
Jboss默认没有开启http访问日志,只有boot.log和server.log两个记录服务器状态的日志,开启http访问日志需要修改配置文件位于下列路径的server.xml文件
server\default\deploy\jboss-web.deployer
去掉如图所示的注释部分,然后重启服务器就会启用http访问日志。
其日志格式与之前所说的Weblogic和WebSphere的默认日志格式基本一致
其字段含义分别为(以第一条为例):
访问者IP :127.0.0.1
远端登录名(不存在则为-):-
远程用户名(不存在则为-):-
访问时间:[06/Oct/2017:22:02:30 +0800]
访问方法:GET
访问路径:/favicon.ico
访问协议:HTTP/1.1
返回状态码:200
返回字节大小:1406