首页
社区
课程
招聘
[翻译]Apache Tomcat 7.x安全加固指南
发表于: 2017-9-10 12:47 4623

[翻译]Apache Tomcat 7.x安全加固指南

2017-9-10 12:47
4623

 

版本:1.00

日期:2014-1-11

分类:公开

作者:Matthias LuftFlorian GrunowHendrik Schmidt


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

 

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

 

必须及时安装与安全相关的Tomcat更新:

¬ 必须在10天内安装高危或重要优先级的更新和补丁

¬ 必须在发布后30天内安装中等优先级的更新和补丁

¬ 必须在发布后90天内安装低优先级更新

 

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

 

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





强制

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


图一:Windows服务配置

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

图二: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用户本身访问,尤其是对于目录${tomcat_home}/conf /${tomcat_home}/webapps

 

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

 

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





可选

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

 

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

 

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

 

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172\.16\.16\.\d{1,3} "/>

 

也可使用主机名:

<Valve className="org.apache.catalina.valves.RemoteHostValve" allow=".*\.admins\.domain\.com" />

 

allowdeny都支持正则表达式(使用java.util.regex







可选

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

¬ manager-gui:可以访问web界面

¬ manager-status:只可以访问“Server Status”页面

¬ manager-script: 可以脚本文本界面和“Server Status”页面

¬ manager-jmx:可以访问JMX代理界面和“Server Status”页面



强制


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

 

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

1 LDAPS或客户端证书

2 本地(基于消息摘要)



可选

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

 

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

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

failureCount="5" lockOutTime="30">

<!-- AUTHENTICATION REALM -->

</Realm>





强制

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

 

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



强制


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

 

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

<session-config>

<session-timeout>20</session-timeout>

</session-config>



强制

Tomcat 7对会话cookie自动启用HttpOnly cookie标记,查看配置以确保该选项为被禁用。

 

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

<Context useHttpOnly='true' .../>

 

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





强制

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

 

做以下置:

<filter-mapping>

<filter-name>CSRFPreventionFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

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

 

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








强制

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

 

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

<Connector port="TCP_PORT" address="LISTEN_IP_ADDRESS"…

 

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




强制

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

 

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



强制

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

 

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

 

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

<Connector 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加密方式:

<Connector 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标签关闭(</security-constraint>标签)之前包含以下内容:

<user-data-constraint>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

<user-data-constraint>














强制

可用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包)都应该根据每个应用程序进行单独配置,所以这会大大增加操作成本。另外,限制过于严格的策略文件会影响应用程序的功能。




可选

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

 

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//