TOMCAT安全加固手册
TOMCAT系统安全
基线规范
1.概述
1.1 适用范围
本配置标准的使用者包括:各事业部服务器负责人。
各事业部服务器负责人按规范要求进行认证、日志、协议、补丁升级、文件系统管理等方面的安全配置要求。对系统的安全配置审计、加固操作起到指导性作用。
1.2 文档内容
本文档内容是Tomcat的安全加固操作项的详细操作指导,并明确在加固实施操作过程中可能出现的风险和所遵循的标准。
1.3 加固前的准备
1.3.1 确认root用户的shell环境
加固前,需要确认需要加固的目标系统的操作SHELL路径,使用的是哪种类型的SHELL,操作系统类型等
1.3.2 需要重启服务
需要重新启动以确定Tomcat的完整性、业务系统的正常性。
1.3.3 加固操作注意事项
需要手工确认系统是否需要加固,同时验证加固效果,系统可以正常运行,加固操作前需要备份重要的配置文件
1.3.4 软件包相关
操作系统中多余的软件或者加固需要安装的软件,需要与被加固系统负责人进行确认。
2.操作指导
2.1 通信协议
2.1.1 修改默认端口
名称 |
修改默认端口 |
说明 |
修改Tomcat默认端口 |
实施目的 |
通过修改端口,防止非法访问 |
问题影响 |
恶意访问 |
实施步骤 |
修改tomcat/conf/server.xml配置文件,更改默认端口8080到其他端口 <Connector port="8989" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改完毕后重启tomcat |
回退方案 |
恢复配置文件 |
确认方法 |
浏览器访问http://localhost:8989是否访问成功 |
实施风险 |
高 |
适用说明 |
Tomcat 6.0以上 |
2.1.2 使用https登录tomcat
名称 |
使用https登录tomcat |
说明 |
使用https登录tomcat |
实施目的 |
防止传输数据被攻击者截获导致信息泄露 |
问题影响 |
信息泄露 |
实施步骤 |
a) 使用jdk自带的工具keytool生成https证书 keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "/path/to/my/keystore" b) 修改tomcat/conf/server.xml配置文件,更改为使用https方式,增加如下行: <connector< span=""></connector<> protocol="org.apache.coyote.http11.Http11NioProtocol" port="443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="path/to/my/keystore/devui.jks" keystorePass="PASSWORD" clientAuth="false" sslProtocol="TLSv1.2" /> 其中keystorePass为生成KEY时输入的密码 c)重启tomcat服务 |
回退方案 |
恢复配置文件 |
确认方法 |
使用https登录管理页面成功 |
实施风险 |
高 |
适用说明 |
2.1.3 限制ip访问
名称 |
限制ip访问 |
说明 |
通过配置,限定访问的IP来源 |
实施目的 |
仅运行指定的ip访问tomcat |
问题影响 |
恶意攻击 |
实施步骤 |
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30,192.168.2." deny=""/> <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,.test.com" deny=""/> |
回退方案 |
恢复配置文件 |
确认方法 |
使用非允许ip 无法访问 |
实施风险 |
高 |
适用说明 |
2.2 日志安全
2.2.1 开启服务器日志
名称 |
开启服务器日志 |
说明 |
对日志信息进行设置 |
实施目的 |
对于运行错误,用户访问等行为进行日志记录,保证信息可跟踪 |
问题影响 |
在服务异常时,第一时间了解异常信息 |
实施步骤 |
编辑tomcat/conf/server.xml配置文件,在标签中增加记录日志的功能 将以下内容的注释标记()取消 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhostaccesslog" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resloveHosts="false" /> 以上参数中 directory为日志输出位置、prefix为日志文件名前缀、suffix是后缀名、pattern为日志内容输出格式、 resloveHosts 表示以域名的形式还是主机的形式表示主机 |
回退方案 |
恢复配置文件 |
确认方法 |
查看设置好的日志目录中文件是否记录完整 |
实施风险 |
中 |
适用说明 |
2.2.2 限制日志文件大小
名称 |
限制日志文件大小 |
说明 |
限制服务器记录的日志大小 |
实施目的 |
防止攻击者通过恶意访问使日志文件膨胀,攻击服务器的硬盘空间 |
问题影响 |
恶意攻击 |
实施步骤 |
编辑tomcat/conf/logging.properties文件找到以下内容修改 java.util.logging.FileHandler.limit = 1000 |
回退方案 |
恢复配置文件 |
确认方法 |
日志大小将控制在某个数值不变 |
实施风险 |
中 |
适用说明 |
2.3 文件目录权限
2.3.1 禁用目录访问
名称 |
禁用目录访问 |
说明 |
关闭tomcat中的目录访问功能 |
实施目的 |
防止攻击者得知服务器目录结构进行攻击 |
问题影响 |
非法访问 |
实施步骤 |
编辑tomcat/conf/web.xml文件
|
回退方案 |
恢复配置文件 |
确认方法 |
在浏览器中无法访问目录 |
实施风险 |
低 |
适用说明 |
tomcat 6.0以上 |
2.3.2 限制目录访问权限
名称 |
限制目录访问权限 |
说明 |
限制tomcat的关键目录的访问权限 |
实施目的 |
防止越权攻击 |
问题影响 |
非法访问 |
实施步骤 |
新建tomcat专用账户 jqsoft,tomcat项目用户jqsofapp 对tomcat目录进行权限设置 chwon jqsoft.jqsoft $TOMCATHOME -R chmod g-w,o-rwx $TOMCATHOME -R |
回退方案 |
恢复文件权限 |
确认方法 |
非权限用户无法进行操作访问 |
实施风险 |
低 |
适用说明 |
2.3.3 针对文件上传漏洞修复
名称 |
针对文件上传漏洞修复 |
说明 |
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件,JSP 件中的代码将能被服务器执行。 |
实施目的 |
防止上传文件被执行 |
问题影响 |
tomcat服务器被攻击 |
实施步骤 |
在tomcat/conf/web.xm中,编辑
之后重启tomcat服务 或者升级tomcat到最新版本 |
回退方案 |
修改该值为false |
确认方法 |
上传文件为只读 |
实施风险 |
未升级的版本将会禁用http put方法,如过升级最新版本后则无影响 |
适用说明 |
Apache Tomcat 7.0.0 - 7.0.81 |
2.3.4 分离上传目录与项目目录
名称 |
分离上传目录与项目目录 |
说明 |
如果tomcat有上传文件功能,项目目录与上传目录进行分离 |
实施目的 |
防止上传文件过大导致更新问题 |
问题影响 |
目录过大导致项目运行缓慢 |
实施步骤 |
a)新建项目上传文件虚拟目录/download b)配置tomcat/conf/server.xml 在hosts标签添加虚拟目录/download如下 <Context path="/download" docBase="/download" debug="0" reloadbale="false"/> 重启tomcat即可 |
回退方案 |
恢复配置文件 |
确认方法 |
上传文件在单独目录中 |
实施风险 |
中 |
适用说明 |
2.4 用户账户
2.4.1 账户分配
名称 |
账户分配 |
说明 |
为管理员分配不同的账户 |
实施目的 |
避免账户混迹,出现越权行为 |
问题影响 |
用户越权,管理混乱 |
实施步骤 |
修改tomcat/conf/tomcat-users.xml配置文件,修改或者添加账户 |
回退方案 |
恢复配置文件 |
确认方法 |
管理员登录正常,服务器不受影响 |
实施风险 |
低 |
适用说明 |
2.4.2 密码复杂度
名称 |
密码复杂度 |
说明 |
对管理员密码进行强制强口令限制 |
实施目的 |
避免弱口令被攻击者保利破解 |
问题影响 |
系统安全性差 |
实施步骤 |
修改tomcat/conf/tomcat-user.xml配置文件,将password 进行强口令设置 |
回退方案 |
恢复配置文件 |
确认方法 |
管理员登录正常,服务器不受影响 |
实施风险 |
低 |
适用说明 |
2.4.3 禁用管理控制台
名称 |
禁用管理控制台 |
说明 |
禁用tomcat管理控制台 |
实施目的 |
防止控制台被恶意使用 |
问题影响 |
系统安全性差 |
实施步骤 |
删除tomcat/conf/Catalina/localhost目录下的admin.xml和manager.xml |
回退方案 |
恢复删除的文件 |
确认方法 |
浏览器输入http://localhost:8989无页面显示 |
实施风险 |
低 |
适用说明 |
2.5 其他安全配置
2.5.1 错误页面处理
名称 |
错误页面处理 |
说明 |
对页面产生错误时跳转的页面进行处理 |
实施目的 |
防止服务器目录泄露 |
问题影响 |
恶意攻击 |
实施步骤 |
**
新建文件error.jsp,输入以下内容 <%@ page="" language="java" contenttype="text/html;charset=utf-8"> <%@ page="" iserrorpage="true"> <%>
程序发生异常,我们将尽快修正,请多多包涵!
|
回退方案 |
恢复配置文件 |
确认方法 |
以404为例,在浏览器中访问tomcat,输入一个不存在的页面看能否进行跳转 |
实施风险 |
高 |
适用说明 |
2.5.2 删除不必要的文件
名称 |
删除不必要的文件 |
说明 |
删除tomcat中自带的web文件 |
实施目的 |
防止通过访问示例导致服务器信息泄露 |
问题影响 |
系统安全性差 |
实施步骤 |
删除$TOMCAT_HOME/webapps下的自带文件 |
回退方案 |
恢复删除的文件 |
确认方法 |
浏览器无页面展示 |
实施风险 |
中 |
适用说明 |
2.5.3 禁用特定的HTTP头
名称 |
禁用特定的HTTP头 |
说明 |
禁用X-Powered-By 的http头 |
实施目的 |
防止通过页面导致服务器版本泄露 |
问题影响 |
攻击者可以通过了解服务器版本进行有针对性的攻击 |
实施步骤 |
找到tomcat/conf/server.xml 在其中每个标签中添加xpoweredBy项,并设置为false 在每个标签中的server变量后面随意写入一串字符,避免为空 |
回退方案 |
恢复配置文件 |
确认方法 |
访问tomcat页面,查看http返回头 |
实施风险 |
中 |
适用说明 |
2.5.4 禁用trace
名称 |
禁用trace |
说明 |
禁用trace,关闭服务器发送诊断和调试信息 |
实施目的 |
防止通过trace导致敏感信息导泄露 |
问题影响 |
攻击者可以通过了解服务器版本进行有针对性的攻击 |
实施步骤 |
找到tomcat/conf/server.xml 在其中每个标签中的allowTrace变量设置为false |
回退方案 |
恢复配置文件 |
确认方法 |
查看配置文件 |
实施风险 |
低 |
适用说明 |
默认版本已关闭该功能 |
2.5.5 用户自动登出
名称 |
用户自动登出 |
说明 |
非活动账户自动登出服务器 |
实施目的 |
防止非活动账户被攻击者恶意利用 |
问题影响 |
恶意攻击 |
实施步骤 |
找到tomcat/conf/server.xml 在其中每个标签中的connectionTimeout变量设置为3000 重启tomcat |
回退方案 |
恢复配置文件 |
确认方法 |
非活动账户3000秒会自动登出 |
实施风险 |
低 |
适用说明 |
2.5.6 服务降权
名称 |
服务降权 |
说明 |
不要使用root账户启动tomcat 使用普通账户启动,集群内统一账户及uid |
实施目的 |
使用非root账户jqsoft启动tomcat |
问题影响 |
恶意攻击 |
实施步骤 |
新建用户jqsoft 用户 uid gid 500 groupadd -g 500 jqsoft useradd -g 500 -u 500 jqsoft |
回退方案 |
删除jqsoft用户 |
确认方法 |
ps -ef |grep tomcat 查看tomcat进程是否是jqsoft用户启动 |
实施风险 |
中 |
适用说明 |
2.5.7 隐藏tomcat版本信息
名称 |
隐藏tomcat版本信息 |
说明 |
隐藏tomcat版本信息,避免攻击者通过特定版本漏洞攻击 |
实施目的 |
隐藏tomcat版本信息 |
问题影响 |
恶意攻击 |
实施步骤 |
找到$TOMCAT_HOME/lib/catalina.jar文件,先进行备份,.然后通过jar xf解压该jar包, 修改org/apache/catalina/util/ServerInfo.properties 中的server.info/server.number/server.built的值 然后通过 jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties 压缩回去 重启tomcat |
回退方案 |
还原备份的jar包 |
确认方法 |
查看版本信息为修改后的版本 |
实施风险 |
中 |
适用说明 |
2.5.8 关闭war包自动部署
名称 |
关闭war包自动部署 |
说明 |
默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署 |
实施目的 |
关闭war包自动部署 |
问题影响 |
恶意攻击 |
实施步骤 |
修改tomcat/conf/server.xml 如下 <Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false"> 将unpackWARs autoDeploy 配置为flase后,重启tomcat |
回退方案 |
还原配置文件 |
确认方法 |
上传war包不自动部署 |
实施风险 |
中 |
适用说明 |