Tomcat安全.docx
《Tomcat安全.docx》由会员分享,可在线阅读,更多相关《Tomcat安全.docx(20页珍藏版)》请在冰豆网上搜索。
![Tomcat安全.docx](https://file1.bdocx.com/fileroot1/2023-1/3/c532d6cf-492d-4d17-a8d2-20e22ecbb614/c532d6cf-492d-4d17-a8d2-20e22ecbb6141.gif)
Tomcat安全
1Tomcat安全
1.1背景介绍
Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。
由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。
尽管Tomcat的Web服务器功能较少,但是,Tomcat容易架设、容易移植、与其他服务器兼容性极好,相对于其它以C、C++所编写的Web服务器,Tomcat比较能忍受远程缓冲区溢出的攻击。
因为Tomcat的Java虚拟机是位于网络及操作系统之间,它可以防止几乎所有类型的缓冲区溢出攻击。
此外,Tomcat的运行速度也比较快,足以运行今日大多数的企业网站。
因此,Tomcat服务器的应用也是极为广泛的。
在使用Tomcat服务器时,我们要避免错误的配置引起的安全问题,同时,也使用更合理的配置或插件来加强Tomcat的安全防护。
eCity平台定制化的Tomcat是基于apache-tomcat-6.0.18进行修改,在”..\工具\05Tomcat安全”中提供,修改内容都有批注,其它产品可以借鉴。
1.2Tomcat安全配置规范
Tomcat安全配置规范包括以下几部分
1.2.1版本部署运行的策略
1.2.1.1及时更新补丁或升级系统,使用最新最稳定的安全版本
说明:
系统的最原始攻击来自其本身的漏洞,因此一定要做好其漏洞的防护。
搜索Tomcat最新最稳定的安全版本和安全补丁,下载并安装。
该规则主要针对发布版本,至于现网正在运行的版本,需要评估更新Tomcat版本对产品产生的影响,并酌情把握。
实施指导:
下载最新最稳定的版本(以下提供的均为官方网址)
1.在http:
//tomcat.apache.org/whichversion.html上,查看Servlet和JSP规范对应的Tomcat版本,以及各版本的详细说明,以方便选择最合适的版本。
2.在http:
//tomcat.apache.org/download-**.cgi上下载最新最稳定的安全版本。
目前仅推荐60和55系列的版本,即将网址中的**符号替换成60或者55。
其他系列的版本已经归档,并且不再能得到支持。
安装步骤(以下皆以Tomcat6.0.20为例)
1.Window安装:
#在http:
//tomcat.apache.org/download-60.cgi上下载apache-tomcat-6.0.20.exe程序
#执行./apache-tomcat-6.0.20.exe
#配置安装目录
#进入Configuration配置界面
#修改默认端口8080为其他不宜猜测的端口
#修改默认管理员用户名admin
#配置管理员密码为强口令
#配置Java虚拟机路径为可用jre路径(建议版本在1.5以上)
#进入安装等待状态
2.Unix安装
#在http:
//tomcat.apache.org/download-60.cgi上,下载“BinaryDistributions→Core”路径下的tar.gz
#gzip-dapache-tomcat-6.0.20.tar.gz
#tar-xvfapache-tomcat-6.0.20.tar
#cd./apache-tomcat-6.0.20/bin
#./startup.sh
如需配置管理员,可以在./conf/tomcat-user.xml文件中修改默认密码为强口令:
//修改XXXX为强口令
补丁
在安全报告http:
//tomcat.apache.org/security.html上,查找产品当前使用的版本所存在的安全漏洞,并根据安全报告中漏洞的威胁级别,以及产品本身的应用场景,选择下载补丁还是升级系统。
备注:
一般不建议直接打补丁,建议升级到当前系列已被评估过的最新最稳定的安全版本。
1.2.1.2用于运行Tomcat的用户必须是一个没有特权的用户:
既无权访问非必须的文件,又不能执行非必须的程序
说明:
缺省情况下,Java运行时根据运行它的用户授予安全权限。
当Tomcat以系统管理员身份或作为系统服务运行时,Java运行时取得了系统用户或系统管理员所具有的全部权限。
这样一来,Java运行时就取得了所有文件夹中所有文件的全部权限。
并且Servlets(JSP在运行过程中要转换成Servlets)取得了同样的权限。
所以Java代码可以调用JavaSDK中的文件API列出文件夹中的全部文件,删除任何文件,最大的危险在于以系统权限运行一个程序。
该安全配置项需要每个产品都要严格执行。
实施指导:
Window环境:
1.新建普通用户tomcatuser,确定新用户tomcatuser不属于管理员组。
2.设置权限:
为tomcatuser用户添加Tomcat安装目录的读、写、执行的权限;为tomcatuser用户添加应用程序(例如webapps)目录的只读权限;如果某些应用程序需要写权限,请单独为其配置tomcatuser的写权限。
3.打开“控制面板→管理工具→服务”,在本地服务中找到“ApacheTomcat”,打开其属性,在“登录”页签中配置帐户为tomcatuser。
4.以tomcatuser用户重新登录后启动Tomcat服务器,或者在DOS窗口以RUNAS命令启用tomcatuser帐号,打开Tomcat服务。
Linux环境:
1.专门为Tomcat建立一个单独的用户和用户组。
#groupaddtomcatgroup
#useradd–gtomcatgrouptomcatuser–ptomcatuser
2.设置权限:
为tomcatuser用户添加Tomcat安装目录的读、写、执行的权限;为tomcatuser用户添加应用程序(例如webapps)目录的只读权限;如果某些应用程序需要写权限,请单独为其配置tomcatuser的写权限。
3.以tomcatuser用户登录后启动Tomcat服务器。
1.2.1.3删除Tomcat默认管理控制台或管理员帐户
说明:
默认情况下,Tomcat存在管理控制台,其地址一般为http:
//[IP]:
[Port]/admin。
管理台的应用文件,在$tomcat\server\webapps下,有admin和manager两个应用。
其用户密码,在$tomcat\conf/tomcat-users.xml中定义。
在$tomcat\webapps下的admin.xml和manager.xml文件,定义了可以通过访问/admin和/manager进入控制台的通道。
默认情况下,可以轻易的登录tomcat管理台,造成严重安全问题。
该安全配置项需要每个产品都要严格执行。
实施指导:
方法一:
本方法适用于完全不需要使用默认控制台及相关功能的应用场景。
1.删除$tomcat\webapps下admin.xml和manager.xml文件;
2.删掉$tomcat\conf/tomcat-users.xml中的用户密码;
3.删除$tomcat\server\webapps下的admin和manager两个应用;
4.删除$tomcat\webapps下的admin和manager两个应用。
方法二:
本方法适用于需要保留默认控制台和相关程序的应用场景。
1.在$tomcat目录下新建一个myapps;
2.在myapps下新建一个ROOT目录;
3.修改配置文件$tomcat\conf\server.xml,将appBase的值修改为myapps:
1.2.1.4删除安装过程文件、缺省安装的管理帮助文件及用户测试类的非必需文件
说明:
默认的示例或测试应用容易被远程访问或执行,给系统带来相当的危害。
该安全配置项需要每个产品都要严格执行。
实施指导:
1.删除安装过程文件:
//安装后删除
apache-tomcat-6.0.20.*//以6.0.20版本为例
2.删除非必需的管理应用和帮助应用:
$tomcat\webapss\*
Tomcat6之前的版本的版本还需要删除以下目录:
$tomcat\server\webapps\*
3.删除系统示例程序和网页:
$tomcat\examples//安装时可以选择不安装这部分
4.删除用户测试类的非必需文件。
1.2.1.5禁用应用程序自动部署功能
说明:
默认情况下,tomcat启动时,会自动部署$appBase下面的所有应用。
例如,当$appBase的值为webapps时,那么任意一个应用,只要被放进webapps目录下,在tomcat启动时,都会被发布。
这有可能导致恶意或者未经测试的应用程序被自动部署在服务器上。
因此,这里必须禁用掉Tomcat的自动部署功能。
实施指导:
修改配置文件$tomcat/conf/server.xml如下:
autoDeploy="false"//自动部署
deployOnStartup="false"//在启动时自动部署
备注:
1.如果server.xml文件中不存在deployOnStartup参数,则必须手工添加,因为该参数的默认值是true。
格式位置如下:
2.关闭自动部署功能后,Tomcat不会自动发布$appBase目录下的web应用。
对需要发布的Web应用,需要手工部署。
手工部署的推荐方法,是在server.xml文件的Host标签内新建一个context,格式如下:
reloadable="false"//只在启动时加载该Web应用WEB-INF的lib和classes
docBase="D:
\myapp" //应用程序的路径
workDir="D:
\myapp\work"//该web应用的工作目录
/>
1.2.2基本配置的安全策略
1.2.2.1禁用不必要的http方法:
DELETE、PUT、TRACE等
说明:
Tomcat服务器提供默认http方法包括GET、HEAD、POST、PUT、DELETE、OPTIONS。
在这些方法中,PUT、DELETE方法很少被使用到,并且极易被利用来进行攻击。
在配置前,需要了解产品是否会使用到这些HTTP方法,如果用不到这些方法,则必须禁用。
开放这些方法会被APPSCAN等工具扫描出来,并被评为中级安全风险。
实施指导:
1.禁用DELETE和PUT的方法:
在$tomcat/conf/web.xml检查readonly参数的值是否为true:
readonly
true
备注:
如果不存在readonly参数,则不用配置,因为该参数的默认值为true;如果配置了该参数,则需要确保参数值为true。
2.禁用Trace的方法:
在$tomcat/conf/server.xml禁用trace方法,即配置allowTrace为false:
备注:
如果不存在aloowTrace参数,则不用配置,因为该参数的默认值为false;如果配置了该参数,需要确保参数值为false。
3.在$tomcat/conf/web.xml文件的节中增加以下内容:
/*
OPTIONS
PUT
DELETE
TRACE
1.2.2.2禁用webdav
说明:
WebDAV(Web-basedDistributedAuthoringandVersioning)是基于HTTP1.1的一个通信协议。
它为HTTP1.1添加了一些扩展(就是在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到WebServer上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。
这存在一定的安全问题。
Tomcat本身是支持WebDAV的,虽然需要进行配置才可以启用。
该安全配置项需要每个产品都要严格执行。
实施指导:
在配置文件$tomcat/conf/web.xml中,确保下面的配置节点不存在或者处于注释状态:
webdav
org.apache.catalina.servlets.WebdavServlet
...
1.2.2.3禁用Symboliclinks
说明:
Symboliclinks是用来解决不同的web应用程序之间共享文件的一种方式。
这会造成应用之间的相互影响,一个应用的安全漏洞,有可能影响到所有关联的应用,因此,这种方式在安全方面存在极大隐患。
该安全配置项需要每个产品都要严格执行。
实施指导:
1.在配置文件$tomcat/conf/server.xml中,确保每个context节点都没有allowLinking属性
2.在配置文件$tomcat/conf/context.xml中,确保每个context节点都没有allowLinking属性
3.在每个web应用的WEB-INF下检查是否存在context.xml文件,如果存在,请检查并确保每个context节点都没有allowLinking属性
1.2.2.4定制Tomcat出错信息
说明:
Tomcat在找不到网页时,会报404错误,错误页面上会附带当前服务器版本号。
黑客可以通过版本号,查询当前Tomcat服务器的默认配置信息,以及该版本的安全漏洞。
定制化的错误文件可以参考”..\工具\05Tomcat安全”目录中的error.htm文件。
实施指导:
在配置文件$tomcat/conf/web.xml的倒数第二行(即之前的那一行)添加如下内容:
400
/error.htm
401
/error.htm
402
/error.htm
403
/error.htm
404
/error.htm
405
/error.htm
406
/error.htm
407
/error.htm
413
/error.htm
414
/error.htm
500
/error.htm
501
/error.htm
备注:
可以在error.htm文件中自定义出错提示信息,error.htm的大小必须大于512个字节,否则IE会自动调用自己的友好提示界面。
特别提醒,禁止给响应吗302配置错误页面,否则所有重定向都将指向该错误页面。
的配置值是自定义错误页面相对于当前Web应用的根目录的路径,需要根据自定义错误页面的实际路径配置。
1.2.2.5关闭Tomcat的目录列表功能
说明:
缺省情况下,访问tomcat下的一个web应用,如果输入是一个目录名,而且该目录下没有一个可用的welcome文件,那么tomcat会将该目录下的所有文件列出来,这种敏感信息泄露是严格禁止的。
Tomcat5.0以后的版本出于安全考虑,默认的是关闭目录列表,但是为了程序调试方便,部分程序员也有可能开启这一功能。
因此,要确认该项配置是否正确。
实施指导:
在配置文件$tomcat/conf/web.xml中修改listing参数的值为false:
listings
false
1.2.2.6更改Tomcat服务器默认端口
说明:
Tomcat服务器提供一些默认端口,这些公开的端口很容易被黑客捕获利用,进而威胁到服务器和应用等。
需要注意产品的安装规划,安装规划中的端口规划不能为这些默认端口。
实施指导:
修改$home/conf/server.xml文件,更改默认端口为其他,例如:
1.//默认端口8005
2.connectionTimeout="20000"
redirectPort="6743"/>//默认端口8443
3.//默认端口8009
1.2.2.7限制http请求的消息主体的大小
说明:
此指令给了服务器管理员更大的可控性,以控制客户端不正常的请求行为。
在配置该属性前,需要了解业务是否有大数据量传输的可能性,如果有传输大数据的功能点,需要酌情提高消息主体的大小或者去掉该限制。
实施指导:
在配置文件$tomcat/conf/server.xml中的每个Connector的“maxPostSize”属性为10240:
connectionTimeout="20000"maxPostSize="10240"
redirectPort="8443"/>
备注:
推荐请求体大小限制为10240Byte,如果产品有特殊需求,可以进行相应调整。
1.2.2.8禁止配置Tomcat的网络连接超时时间为0或-1
说明:
connectionTimeout为网络连接超时时间毫秒数,当配置为0或-1时,表示永不超时,在受到DOS攻击时,很快就会导致最大连接数被完全占用,进而导致Tomcat服务器无法访问。
因此这里禁止配置connectionTimeout为0和-1,通常推荐的超时时间为20s和30s。
特殊情况下,请根据具体性能需求进行调优。
实施指导:
在配置文件$tomcat/conf/server.xml中的每个Connector的“connectionTimeout”属性为20000:
connectionTimeout="20000"maxPostSize="10240"
redirectPort="8443"/>
备注:
如果产品有特殊性能需求,可以进行相应调整。
1.2.2.9配置Tomcat的会话超时时间为10分钟
说明:
Tomcat服务器提供的默认超时时间为30分钟,这个时间过长,除了导致空闲连接消耗的处理资源损失外,受攻击的时间窗也相应变长。
在配置会话超时是时间时,也是充分考虑用户的易用性,当模块较多但超时时间较短的产品,会给用户造成频繁退出的现象,使用起来感受较差,如eCity平台各个模块的默认会话超时时间就不能设置过短。
实施指导:
修改$tomcat下所有的web.xml配置文件如下:
10//将30修改为10
1.2.2.10关闭会话回收功能
说明:
如果每个请求都建立一个自己的façade,那么该功能可以进行详细的列表录入,但是,该功能也有可能将这些请求的信息泄露给没有创建façade的其他请求。
实施指导:
在启动脚本$TOMCAT/bin/catalina.sh文件的启动分支语句中添加如下命令:
-Dorg.apache.catalina.connector.RECYCLE_FACADES=false
备注:
该参数仅出现在Tomcat6.0及其