Apache Tomcat 7.x安全加固指南

  • 时间:2018-06-19 22:29 作者:看雪学院 来源:看雪学院 阅读:134
  • 扫一扫,手机访问
摘要:版本:1.00日期:2014-1-11分类:公开作者:Matthias Luft、Florian Grunow、Hendrik Schmidt1 引言因为官方尚未发布Tomcat 7的强化指南,ERNW便总结了相关的设置,并制作出本文中列出的清单。虽然有大量的设置能被应使用,但本文旨在提供少量加固方

Apache Tomcat 7.x安全加固指南

版本:1.00

日期:2014-1-11

分类:公开

作者:Matthias Luft、Florian Grunow、Hendrik Schmidt

1 引言

因为官方尚未发布Tomcat 7的强化指南,ERNW便总结了相关的设置,并制作出本文中列出的清单。虽然有大量的设置能被应使用,但本文旨在提供少量加固方法的基础。可可以对操作系统功可以造成严重影响的并且需要进行进一步大量测试的设置并未列在该清单中,或者者被标记为可选。

我们使用“强制”或者“可选”标记了此清单中的每个推荐设置,使用以清楚的表达从我们的角度来看哪个设置是必需的(强制)或者者是应该的(可选)。“可选”也意味着我们推荐你应使用此设置,但这可可以会影响系统的必须功可以。

2 操作与系统安全

2.1 补丁与漏洞管理

强制:

必需及时安装与安全相关的Tomcat升级:

? 必需在10天内安装高危或者重要优先级的升级和补丁。

? 必需在发布后30天内安装中等优先级的升级和补丁。

? 必需在发布后90天内安装低优先级升级。

有关补丁的可使用性和严重性的信息,请参见http://tomcat.apache.org/lists.html#tomcat-announce。

升级可可以会影响功可以。关于核心/业务方面的Tomcat的升级可可以带来的反作用,请查看http://tomcat.apache.org/lists.html#tomcat-announce。

2.2 Tomcat服务的最小权限

强制:

在系统上以低权限运行Tomcat应使用程序。创立一个专门的 Tomcat服务使用户,该使用户只可以拥有一组最小权限(例如不允许远程登录)。必需检查以最小特权使用户身份用操作系统资源库安装程序的行为,以确保Tomcat不以root /管理员身份运行。必需在配置启动机制的操作系统层级上确保这一点(例如Microsoft Windows上的Windows服务或者Unix上的rc脚本):

Apache Tomcat 7.x安全加固指南

图一:Windows服务配置

关于安全的服务配置,请参考ERNW Windows加固指南

Apache Tomcat 7.x安全加固指南

图二:FreeBSD rc脚本

具体配置与Unix系统和Tomcat版本有关。例如FreeBSD上的Tomcat 7已经不支持配置rc.conf中的使用户帐户,因而使用户名被硬编码在启动脚本中—这是不推荐的。在FreeBSD上,web和应使用服务器应该是以www使用户身份运行,可参考http://www.freebsd.org/doc/en/books/porters-handbook/using-php.html#WEB-APPS。

以低权限使用户身份运行Tomcat可可以会影响Tomcat的某些功可以。例如,特权端口不可被设置为监听端口。为理解决该问题,能在系统上用本地HTTP代理商(例如用Apache的mod_jk板块)或者者定义包转发规则,使得进入流量被转发到Tomcat监听的非特权端口。

2.3 限制访问Tomcat文件夹

可选:

Tomcat文件夹只可以由tomcat使用户本身访问,尤其是对于目录${tomcat_home}/conf /和${tomcat_home}/webapps。

当不需要通过应使用程序服务器自动部署时,标准配置就是将所有Tomcat文件的所有者设置为root,并且所属群组设置为Tomcat。而后使用chmod 740仅允许root使用户编辑文件并允许Tomcat使用户读取文件。例外是,临时和工作目录的所有者应该是Tomcat使用户而不是root使用户。

该设置会影响自动部署。(参见第8.5小节)

3 管理界面

可选

Tomcat的主要管理界面被称为Manager应使用程序。虽然保护该应使用程序对于Tomcat服务器的安全至关重要,但是该应使用程序在许多环境中被发现是非常的暴露的(例如,没有部署网络级限制以及用弱/默认登录信息)。假如可可以的话,管理性质的任务应该是在操作系统级别执行(例如用RDP或者SSH),并且避免用Manager应使用程序(另见第8.3小节)。假如无法做到,下面小节形容的设置(或者许还要考虑跳板机)应该与安全认证机制(另请参见第4小节)和加密传输(参见第6.3小节)结合用。

3.1 网络层限制

假如要用Manager应使用程序,应该只允许从受权的IP地址访问其管理界面。

这能通过在CATALINA_HOME/webapps/manager/META-INF/context.xml文件中的做以下设置来实现。以下设置只允许从本地主机和特定IP地址或者IP地址段访问管理界面:

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172\.16\.16\.\d{1,3}

"/>

也可用主机名:

className="org.apache.catalina.valves.RemoteHostValve"

allow=".*\.admins\.domain\.com" />

allow和deny都支持正则表达式(用java.util.regex)

3.2 最小准则受权

强制:

根据给定的任务,只可以赋予相应角色的权限给使用户。角色如下,并且要记得只赋予最小权限:

?

manager-gui:能访问web界面

?

manager-status:只能访问“Server Status”页面

?

manager-script: 能脚本文本界面和“Server Status”页面

?

manager-jmx:能访问JMX代理商界面和“Server

Status”页面

4 认证

以下设置一般适使用于基于Tomcat的身份验证。但是在大多数环境中,主要是针对Manager应使用程序,因而以它来做例子。假如部署的应使用程序用基于Tomcat的认证,那么该应使用程序也适使用这些设置。

4.1 安全认证

可选:

假如要用Manager应使用程序,则还应该附加额外的身份认证机制。认证机制优先级如下:

1 LDAPS或者用户端证书

2 本地(基于消息摘要)

另外,认证过程和与Manager应使用程序的通信必需用SSL来保护(见下文)。

强制:

对于本地和基于证书的身份验证,必需部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。为防止暴力破解,用的认证域必需放在做了如下配置的锁定域中:

编辑CATALINA_HOME/conf/server.xml文件,并增加配置如下的锁定域:

className="org.apache.catalina.realm.LockOutRealm"

failureCount="5"

lockOutTime="30">

AUTHENTICATION REALM -->

4.2 禁使用域

强制:

有几个域不适合使用作生产使用途,这些域必需被禁使用。

打开文件CATALINA_HOME/conf/server.xml,搜索MemoryRealm并禁使用之。JDBCRealm也必需被禁使用,改使用DataSourceRealm。用大规模安装时,请勿用UserDatabaseRealm并也将其禁使用。

5 会话解决

5.1 会话超时

强制 :

所有的web应使用程序的会话超时必需设置为20分钟。

可通过编辑CATALINA_HOME/conf/web.xml文件并做以下配置来实现:

20

5.2 HttpOnly标记

强制:

Tomcat 7对会话cookie自动启使用HttpOnly

cookie标记,查看配置以确保该选项为被禁使用。

要启使用HttpOnly,必需在CATALINA_BASE/conf/context.xml中做如下设置,使之全局应使用于所有应使用程序:

useHttpOnly='true' .../>

在需要通过JavaScript访问会话cookie的情况下,用HttpOnly可可以会影响应使用程序功可以。假如应使用程序需要通过JavaScript访问HttpOnly cookie,能在METAINF/context.xml中一个单独的Context中定义一个异常。

5.3 CSRF防护

强制:

为保护应使用程序,必需启使用Tomcat的跨站请求伪造防护。Tomcat 7提供了基本的CSRF防护。能在CATALINA_BASE/conf/web.xml中配置一个全局过滤器。该过滤器能被每个用WEB-INF/web.xml文件的应使用程序覆盖。

必需做以下设置:

CSRFPreventionFilter

/*

有关详细说明和其余选项,请参阅Tomcat手册:http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CSRF_Prevention_Filter。

用CSRF防护可可以会影响程序功可以,必需要牢记这一点,尤其是在应使用程序大量用异步请求的情况下。

6 网络安全

6.1 限制监听网络接口

强制:

不要让连接器(connector)监听服务器上所有可使用的网络接口和IP地址,而要让连接器监听指定的网络接口和IP地址。

编辑CATALINA_HOME/conf/server.xml,查看每个Connector并指定正确的IP地址:

address="LISTEN_IP_ADDRESS"…

这样能防止应使用程序意外地运行在某个开放的网络接口上。

6.2 限制允许的网络连接

强制:

只开放必需要的Tomcat端口。默认TCP端口是8080和8443。确保在Tomcat和可安装在系统上的现有的包过滤器中正确配置这些端口。

打开CATALINA_HOME/conf/server.xml文件,查看每个Connector的端口配置。移除不需要的端和Connector。

6.3 加密网络连接

强制:

为了保护敏感的应使用程序(比方Manager应使用程序),必需用并配置SSL(对于解决敏感数据或者提供登录功可以的应使用程序也是必须的)。第一步是创立可信的证书,以避免证书警告,并向终端使用户提供一种验证可信连接的方法。

第二步是创立一个证书密钥库(keystore),其中包含CA、服务器证书和相应的私钥。密钥库的密码应按照之前的“保障密码安全”小节中建议来创立。

要启使用SSL支持,能用以下配置(实际配置取决于给定的平台和要求),并且必需放在CATALINA_HOME/conf/server.xml中:

protocol="org.apache.coyote.http11.Http11Protocol"

port="8443" scheme="https" secure="true"

SSLEnabled="true" sslProtocol="TLS"

keystoreFile="path to keystore file" keystorePass="keystore

password"/>

通过增加以下密码套件(cipher suite)至SSL Connector来指定可使用的SSL加密方式:

ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,

TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,

SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,

SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" …

为了使托管在Tomcat上的所有web应使用程序强制用HTTPS,必需在每个CATALINA_HOME/webapps/$WEBAPP/WEB-INF/web.xml文件里每个security-constraint标签关闭(标签)之前包含以下内容:

CONFIDENTIAL

7 Java Runtime

7.1 Java SecurityManager

可选:

可使用Java SecurityManager限制单个应使用程序的功可以。$CATALINA_HOME/conf/catalina.policy文件包含了Java SecurityManager用的安全策略的配置。一旦配置了catalina.policy文件,便能用SecurityManager和--security选项启动Tomcat。想理解全面的配置详情,请参阅官方的Tomcat SecurityManager教程:http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html

由于基本上所有的权限类型(比方访问单个文件和目录或者Java包)都应该根据每个应使用程序进行单独配置,所以这会大大添加操作成本。另外,限制过于严格的策略文件会影响应使用程序的功可以。

7.2 访问Java包

可选:

Tomcat可限制对某些Java包的访问。假如检测到受限制的包被访问,将抛出安全异常。

对Java包做访问限制,打开$CATALINA_BASE/conf/catalina.properties文件并增加不允许访问的包至package.access列表。

分析Java import能列出哪些应使用程序需要哪些包。在Unix系统上,能用以下例子来实现:

grep –R import ${tomcat_home}/webapps/WEBAPP

8 通使用设置

8.1 确保默认设置的安全

强制:

检查几个默认值以防出现潜在的漏洞。参考第9小节列出的不可以更改的默认配置。

8.2 确保关闭(shutdown)端口的安全

强制 :

假如必需要开启用本地Tomcat系统上的网络端口关闭Tomcat的功可以,必需用难以被猜解出的强密码。

编辑CATALINA_HOME/conf/server.xml文件并设置关闭密码:

shutdown="NonDeterministicWordSoShutdownPWisNotEasyToGuess">

假如不需要该功可以,必需要将其停使用,设置如下:

port="-1" shutdown="SHUTDOWN">

本地管理脚本可将服务器关闭,即便在关闭端口被禁使用的情况下。

8.3 移除默认应使用程序

强制 :

Tomcat可可以自带少量默认的web应使用程序。假如不是肯定需要,必需将它们移除。

移除${tomcat_home}/webapps中所有的默认的web应使用程序。必需要移除的应使用程序有:ROOT、Documentation、Examples、Host Manager和Manager。

Manager应使用程序提供管理性质的功可以,比方部署应使用程序和检索日志信息。这些功可以应该用本地服务器上的命令行来运行。但是,假如这个应使用程序是绝对需要的,那它必需使用SSL保护起来。

8.4 自己设置错误页面

可选 :

因为默认的错误页面会泄露少量内部信息(比方版本号和堆栈轨迹),所以应该使用包含一般错误信息(比方解决您的请求时出错了)的自己设置错误页面取而代之。

每个web应使用程序的web.xml文件里应包含以下配置,该文件位于CATALINA_HOME/webapps/$WEB_APP/WEB-INF:

500

/errorpages/error.html

java.lang.Throwable

/errorpages/error.html

此外,假如Manager应使用程序没被移除,必需手动将位于CATALINA_HOME/webapps/manager/WEB-INF/jsp/的错误页面里的“Tomcat 7“版本信息移除。

8.5 禁使用自动部署

强制:

Tomcat允许在Tomcat运行时自动部署应使用程序。这个功可以必需被禁使用,由于它可可以允许部署恶意或者未经测试的应使用程序。

自动部署由autoDeploy和deployOnStartup属性控制。假如两者是false,只有在server.xml中定义的Context将被部署,并且任何更改都需要重启Tomcat。要禁使用自动部署,请在$CATALINA_HOME/conf/server.xml文件中做以下配置:

autoDeploy=”false”

deployOnStartup=”false”

在托管环境中Web应使用程序可可以不受信任,也能设置deployXML属性为false来忽略context.xml,以防给该web应使用程序提高权限。

9 附录:默认设置

以下列出了不可以更改的默认设置,默认情况下这些设置被认为是安全的:

server.xml中每个Connector的allowTrace的值要么为空或者要么被设为false。

在所有的context.xml文件中,将privileged属性设置为false,除非像Manager应使用程序那样需要权限:

?

确保crossContext值为空或者被设为false。crossContext值为true可可以会导致允许恶意应使用程序向受限应使用程序发送请求。

?

确保allowLinking值为空或者被设为false。allowLinking值为true可可以会导致目录遍历和源代码泄露漏洞的产生。

?

禁止对默认的servlet的写入。

? 在web.xml文件中设置DefaultServlet的read-only为true。假如该值是false,将会允许用户端删除或者修改服务器上的静态资源并上传新的资源。一般在没有认证的情况下不应该修改该值。

禁使用显示列表

? 设置DefaultServlet的listings为false。这不仅仅是由于允许显示目录列表被认为是不安全的,而且还由于生成具备数千个文件的目录列表会耗费大量的CPU资源,相当于被DDoS攻击。

当RECYCLE_FACADES选项设置为true时,Tomcat会回收请求间会话外观(session facade)。这将导致请求间的信息泄漏。默认情况下,此参数未被设置。确保用的启动脚本不包含以下内容:

? -Dorg.apache.catalina.connector.RECYCLE_FACADES = false

允许在Tomcat上指定不同的路径分隔符,可可以会允许攻击者访问应使用程序,该行为本该被代理商程序(比方mod_proxy)阻止。默认情况下,此参数未被设置。

? 确保正在用的启动脚本不包含以下内容:

? -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = FALSE

? -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = FALSE

允许指定自己设置header状态消息,使攻击者也可以够插入header。这可可以会导致XSS漏洞的产生。默认情况下,此参数未被设置。

? 确保用的启动脚本不包含以下内容:

? -Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = false

? -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH

= FALSE

允许自己设置header状态消息,使攻击者也可以够插header。这可可以会导致XSS漏洞的产生。默认情况下,此参数未被设置。

? 确保用的启动脚本不包含以下内容:

?

-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = false

本文由看雪翻译小组 SpearMint 编译,来源payatu@Rashid Feroze 转载请注明来自看雪社区

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】什么是Web?零基础能不能学Web前端开发?(2019-07-19 07:04)
【网页前端|HTML】为什么学Web前端?选择Web前端理由(2019-07-17 20:28)
【网页前端|JS】Java面经-百度新入职老哥整理近半年学习经验,面试刷题路线!(2019-07-16 22:16)
【网页前端|HTML】最全面的前端开发指南(2019-07-15 12:57)
【系统环境|数据库】零基础如何快速学好大数据?(2019-06-29 12:27)
【系统环境|Linux】零基础如何学好大数据?必备需要学习知识(2019-06-18 11:54)
【系统环境|】Hadoop环境中管理大数据存储八大技巧(2019-06-15 11:01)
【系统环境|服务器应用】现在国内IT行业是不是程序员过多了?(2019-06-11 06:34)
【系统环境|服务器应用】新贵 Flutter(2) 自己设置 Widget(2019-06-11 06:34)
【系统环境|服务器应用】Android完整知识体系路线(菜鸟-资深-大牛必进之路)(2019-06-11 06:34)
手机二维码手机访问领取大礼包
返回顶部