等保2.0 | Apache Tomcat中间件测评

这里就谈谈等保2.0要求,对应到Apache Tomcat中间件的一些条款要求。

安装步骤略过,我们直接看等保中涉及的一些参数。

首先,做测评的时候我们先要记录相应的软件版本:

查看版本,在tomcat目录下执行/bin/catalina.sh version,可查看对应的软件版本信息

这是前期的资产情况,记录在系统构成中。

然后,再根据等保的对应的每条条款,确认到中间件中应该如何查询。

一、身份鉴别

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换

首先针对身份鉴别这个控制点,如果Apache Tomcat开启了管理控制台,则此控制点需要进行测评,否则为不适用。

1.确认是否使用了tomcat管理后台

我们先找到配置文件:tomcat主目录下/conf/server.xml

可以查看到连接端口,默认为8080

然后查看manager-gui管理页面配置文件,是否设置了用户登录

配置文件:tomcat主目录下/conf/tomcat-users.xml

如果有类似的如上语句则代表存在用户

当前我们还要查看tomcat主目录下/webapps目录,观察是否存在manager这个文件

然后访问,默认界面为:

点击访问即可

2.访问Manager APP报错403错误解决方案

当第一次安装、配置环境的时候,可能会出现如下报错

网上许多网上找许多都是说没有配置账号和密码,需要在tomcat 的conf中的tomcat-user.xml中增加账户、密码、权限,但是这只是第一步。

重启tomcat以后可以在虚拟机内使用manager app,但是虚拟机外不行。这是因为tomcat进行了ip限制,还需要将限制取消掉。

将tomcat文件夹下的webapps/manager/META-INF/context.xml文件夹的以下内容注销掉

<Context antiResourceLocking="false" privileged="true" >
<!--<ValveclassName="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
</Context>

然后重启服务,再访问即可

3.修改默认欢迎界面

因为在客户实际环境中,很多情况下访问默认都不是tomcat默认界面,在这种情况下我们如何进入该控制台呢?

3.1 创建一个网站

类似于apache之于/var/www/html/,nginx之于/usr/share/nginx/html/,tomcat同样有自己对应的网页目录,一般就是根目录+webapps/,在本机上就是 /usr/local/tomcat/webapps/

我们创建一个叫test的项目,同时在test目录下建立WEB-INF/classes和WEB-INF/lib文件夹

mkdir -p /usr/local/tomcat/webapps/test/WEB-INF{classes,lib}

ok,可以在test目录下写下第一个Jsp网页了(注:和apache和nginx不同,tomcat默认支持Jsp,因此无需再安装Jsp)

vim /usr/local/tomcat/webapps/test/index.jsp

3.2 修改server.xml文件

找到下图中的字段:

在</Host>前插入:

path:代表虚拟目录的名字,如果你只要输入ip地址就显示主页,则该键值留为空;

docBase:它指定的是登录tomcat默认的主页所在的文件夹,这个量默认情况下指定的是 ROOT文件夹,新建一个test文件夹,把网页放到该文件夹内,需要有一个html或 者jsp文件,在Web.xml文件中有指定,会按照顺序去寻找对应的文件。

debug和reloadable:一般设置成0和true就行了,在项目编写和测试阶段reloadable设置为 true表示只要tomcat中的项目有改动tomcat就会自动重新加载编译,可以带给我们一些方便,但是在项目发布阶段一般设为false,可以提高tomcat的性能。

这样我们的默认界面就弄好了,直接访问将是你设置好的网页。

3.3 无默认界面情况下直接访问manager app

我们直接再后面加后缀/manager(或者/manager/html)即可

4. 等保查看点

当用户使用了tomcat管理控制台时,针对身份鉴别a)条款,检查tomcat目录下/conf/tomcat-user.xml文件

查看用户口令是否具有复杂度,查看password字段即可,一般要求由大写字母、小写字母、数字、特殊符号中的三种组成,长度8位以上,然后定期修改,这个好像没啥证据,只能询问管理人员。

然后针对用户的标识唯一性

这里我进行了测试,你在配置文件下直接写两个同名用户是,没有问题的,但是在登录的时候,他好像只会匹配最下面的那个用户。比如上图,我有两个账户均为tomcat,但是口令不一样,实际登录的时候,使用tomcat口令的那个账户无法登录,只能使用口令为123456的账户登录。

所以这个不太清楚,但是一般客户也不会设两个同名用户吧,关于用户标识唯一性,账户不同名就行了。

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施

关于这个测评项,就是要求一个登录失败处理功能和操作超时自动退出的功能。

1.登录失败处理功能

tomcat管理控制台默认拥有登录失败处理功能。

经过我自己的测试,默认情况下:登录失败5次,锁定10分钟。不过不清楚不同的版本是不是一样的。

然后他也有自己的配置文件:

tomcat目录/conf/server.xml下配置

查看对应的failureCount(次),lockOutTime(秒)值,可自行编辑

如上图,代表失败3次,锁定300秒。

2.操作超时值

这个的要求应该是多少时间不操作了,他能自动登录,重新进行身份鉴别,类似屏幕保护功能

网上查了很多相关资料,都是说查看connectionTimeout值

这个我测试了一下,挂着不操作好像不会自动退出,所以不清楚这个功能怎么实现,有清楚的可以留言教我一下。

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听

这条我觉得直接观察tomcat后台的访问方式即可,是使用http还是https的。

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现

这条我不知道实现方式是啥,不过一般不会有人去做吧。。。

直接现场观察验证即可。

二、访问控制

首先这里的访问控制要求,就是针对tomcat管理控制台中的用户权限,即Tomcat Manager,它是Tomcat自带的,用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。

Tomcat Manager以授予用户相应角色的方式,进行访问控制,授权其使用相应的功能。

查看的文件为tomcat目录下/conf/tomcat-user.xml

如上图,roles字段就是配置角色的地方,一个用户可以具备多种权限,多个rolename之间可以用英文逗号隔开。

查阅一些网上资料,大致权限如下:

  • role1:具有读权限;

  • tomcat:具有读和运行权限;

  • admin:具有读、运行和写权限;

  • manager:具有远程管理权限。

Tomcat 6.0.18版本只有admin和manager两种用户角色,且admin用户具有manager管理权限。

Tomcat 4.1.37和5.5.27版本及以后发行的版本默认除admin用户外其他用户都不具有manager管理权限。

然后针对于manager又有细分的四种rolename:

  • manager-gui:允许访问html接口(即URL路径为/manager/html/*)

  • manager-script:允许访问纯文本接口(即URL路径为/manager/text/*)

  • manager-jmx:允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)

  • manager-status:允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)

a)应对登录的用户分配账户和权限

查看有哪些用户,分别为什么角色

在tomcat目录下/conf/tomcat-user.xml

b)应重命名或删除默认账户,修改默认账户的默认口令

查看tomcat目录下/conf/tomcat-user.xml

是否存在 admin、manager、tomcat、role1、both等默认账户,口令是否为默认口令等

c)应及时删除或停用多余的、过期的账户,避免共享账户的存在

查看tomcat目录下/conf/tomcat-user.xml文件,确认现有账户有哪些,并询问管理人员每个账户的用途事什么,确认是否存在多余账户

d)应授予管理用户所需的最小权限,实现管理用户的权限分离

三权分立原则

按最小授权原则分配,管理用户的权限分离,对于中间件来说应该实现不了

e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则

查看tomcat目录下/conf/tomcat-user.xml,确认管理员对各用户的访问控制规则,即设置的对应角色

各用户的角色权限:

1) tomcat角色

role1:具有读权限;

tomcat:具有读和运行权限;

admin:具有读、运行和写权限;

manager:具有远程管理权限。

Tomcat 6.0.18版本只有admin和manager两种用户角色,且admin用户具有manager管理权限。

2)另外版本

Tomcat 4.1.37和5.5.27版本及以后发行的版本默认除admin用户外其他用户都不具有manager管理权限。

补充:

Manager目录为缺省管理目录,若系统上线后不需要通过web页面管理,可删除(移除)此目录,这样相对更为安全。

f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级

这个条款对于服务器、数据库之类的测评对象比较好理解,对于中间件个人是不太理解的,

难道是主体为用户级,客体为web控制台对应功能模块??

因为网络安全等级保护要求中测评对象有包括,也有是判不适用的,因人而异吧。

g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问

同理这条国标中测评对象也涉及了中间件,也有判不适用的。

不知道怎么实现,默认是给不符合的。

三、安全审计

这里首先是要了解tomcat的日志

首先看一下tomcat的位置,它的日志并不在/var/log目录下,一般在tomcat安装路径下的logs文件夹

以下为参考内容,原文链接

日志种类说明

名称 说明

  1. catalina.date.log Catalina引擎的日志文件

  2. catalina.out Catalina控制台输出,包括标准输出和错误输出

  3. host-manager.date.log 主机管理日志

  4. localhost.date.log Tomcat下内部代码丢出日志

  5. locahost_access_log.date.txt 网页访问日志

  6. manager.date.log 应用管理日志

首先关于以上日志的配置文件

1.2.3.4.6 均在tomcat根目录/conf/logging.properties下

5在tomcat根目录/conf/server.xml下

1. logging.properties

一般日志文件定义是3行

1)首行决定什么级别以上的信息输出

每类日志的级别分为如下7种:

SEVERE(highest value)> WARNING > INFO > CONFIG > FINE >FINER >FINEST(lowest value)

OFF为禁用输出;ALL为全部输出

2)第二行决定输出日志文件的路径

3)第三行决定日志文件的前缀

catalina.out 由于是输出控制台(console)信息,该信息源于Linux输出的重定向,因此与其它日志不同。

ps:manager和host-manager分别对应tomcat后台页面的Manager App和Host Manager,想要生成这两类日志,需要在tomcat-users.xml里分别配置manager-gui和admin-gui角色的帐号密码,并访问相应页面,否则这两个日志都会是空的。

1-5 类的日志可归纳为运行日志,一般用于排查服务端console、catalina、tomcat、web应用管理遇到的错误。

2. server.xml

访问日志,即访问网页的记录。

规则:

className 开启访问日志必用类

  1. directory 日志存放目录

  2. prefix 日志名前缀

  3. suffix 日志文件后缀

  4. pattern 日志记录的格式

除了第一个className不允许修改外,其他字段值可以根据实际需要修改,最重要的就是pattern,我们结合实际日志进行对比:

与之前的pattern进行比对, pattern="%h %l %u %t &quot;%r&quot;%s %b"

%h 为远程主机名 对应 192.168.21.237

%l 为远程登录名,除非IdentityCheck设为'On',否则将得到一个"-"

%u 为远程用户名(根据验证信息而来),若不存在得到一个"-"

%t 为时间,用普通日志格式(标准英语格式),对应[29/Jun/2020:17:04:30 +0800]

&quot; 为双引号"的实体编码

%r 为请求头第一行(包括HTTP方法和请求的RUI),对应GET /test/ HTTP/1.1

%s 为HTTP响应状态码,对应200

%b 为发送信息的字节数,不包括HTTP头,如果字节数为0的话,显示为-,对应88

关于这个的字段的详细配置说明,查阅官方英文文档最为准确:

http://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Access_Log_Valve

a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计

对于等保来说,我们要确认tomcat是否开启了相应的日志,及相应的日志记录级别

① 查看tomcat目录/conf/logging.properties

catalina------Catalina引擎的日志文件

localhost------Tomcat下内部代码丢出日志

manager------应用管理日志

host-manager------主机管理日志

java------Catalina控制台输出,包括标准出书和错误输出

确认图中框起字段不为OFF为开启审计

且审计级别不低于"FINE"

② 查看tomcat目录/conf/server.xml,Access网页访问日志

有如下字段,取消注释

确认pattern参数信息,记录了哪些值

b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息

1. 确认系统当前时间

这个的时间是和服务器系统时间相同,我们只需要查看服务器时间是否为北京时间即可(或与NTP时间服务器同步)

2. 查看日志

在tomcat路径下的logs目录下

查看一条日志信息,观察是否满足等保要求

c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等

1. 查看日志文件权限

查看本地日志文件权限,应不高于640,并且观察所属用户、用户组是否合理

2. 询问管理人员是否定期备份该中间件的日志信息

若是实时传输的,个人认为对记录的保护可以直接观察到传输设备上的相关权限,比如传输到日志服务器,仅审计管理员具有记录查看权限等。

总之,这个得询问管理人员如何做的,是否做了定期备份。

3. 查看日志文件的保存周期

根据网络安全法的要求,重要设备的日志留存时间要达到6个月以上

个人认为,这条针对中间件来说最重要的还是网页访问日志,当然最主要的目的还是溯源,万一真的发生安全事件了,要能提供相应的记录性证据,所以对日志留存的时间有了一个要求。

d)应对审计进程进行保护,防止未经授权的中断

审计进程与中间件主进程关联,无法单独中断审计进程,只要配置文件中开启了相应日志即可。

要这么说的话,应该就是查看配置文件的管理权限和服务进程的关闭权限了。

相关推荐
尢词10 小时前
SpringMVC
java·spring·java-ee·tomcat·maven
清风百草10 小时前
【04】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上
tomcat·maven项目热部署
千年死缓15 小时前
gin中间件
中间件·gin
蒋桐城1 天前
Tomcat 启动卡住,日志显示 At least one JAR was scanned for TLDs yet contained no TLDs.
java·tomcat
qiaosaifei1 天前
SpringBoot项目中替换指定版本的tomcat
spring boot·后端·tomcat
雷神乐乐1 天前
IDEA构建JavaWeb项目,并通过Tomcat成功运行
服务器·tomcat·javaweb
陈大爷(有低保)1 天前
数据库连接池JNDI
数据库·mysql·tomcat
FserSuN1 天前
Apache Calcite - 查询优化之自定义优化规则
apache·calcite
黑风风2 天前
Ubuntu 22 安装 Apache Doris 3.0.3 笔记
笔记·ubuntu·apache
General_G2 天前
FastDDS服务发现之PDP和EDP的收发
数据库·中间件·服务发现·fast dds·rtps