Tomcat是Apache软件基金会的一个免费的、开放源码的WEB应用服务器,可以运行在Linux和Windows等多个平台上,由于其性能稳定、扩展性好、免费等特点深受广大用户的喜爱。目前,互联网上绝大多数JAVA WEB应用都运行在Tomcat服务器上。 Tomcat作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以研究Tomcat的漏洞与安全性就非常有必要。本文通过实例详细的讲述了关于Tomcat攻防两个方面。笔者首先在攻击者的角度,以一个在渗透测试过程中经常利用的Tomcat漏洞作为实例,来详细描述攻击者是如何利用Tomcat服务器漏洞来入侵网站,并最终完全控制服务器的,然后又以网络安全管理人员的角度,针对Tomcat的特点,详细地介绍了如何对Tomcat进行安全加固。 利用Tomcat管理后台配置弱点渗透网站实例 Tomcat默认存在一个管理后台,默认的管理地址是http://IP或域名:端口号/manager/html。通过此后台,可以在不重启Tomcat服务的情况下方便地部署、启动、停止或卸载WEB应用。但是,如果配置不当的话就存在很大的安全隐患。攻击者利用这个弱点可以非常快速、轻松地入侵一台服务器,下面我们来看一个实例。 目标IP:192.168.30.128 目的:完全控制服务器,获取到管理员权限 渗透过程: 现在我们来访问http://192.168.30.128:8080/manager/html,服务器会提示输入账号和密码,如图1所示。
图1 那么我们如何获取到这个用户名和密码呢?目前共有三种方法可以选择: 一、如果采用的是运行在Windows平台上的Tomcat安装版,并且版本在Tomcat 5.5.0 to 5.5.28或Tomcat 6.0.0 to 6.0.20之间,我们可以利用CVE-2009-3548这个漏洞来登录后台。受该漏洞影响的Tomcat版本如果在安装时不更改,那么Tomcat默认会建立一个名为“admin”,密码为空的具有管理权限的账号。下图2是tomcat安装版5.5.27的默认tomcat-users.xml配置文件:
图2 注:Linux平台及Windows平台免安装版本不受该漏洞影响。 二、如果采用类似“tomcat”、“654321”等这种很容易让人猜到的字符作为密码的话,我们可以直接猜测出该后台的账号和密码。
三、如果前两种方法都没有效果的话,我们可以采用暴力破解的方法来破解账号和密码,成功率取决于字典是否强大。在Windows和Metasploit下都有这样的工具,下面我们来演示如何利用Metasploit下的工具暴力破解Tomcat后台账号、密码。
图3 设置好后,输入“run”命令开始执行脚本。因为密码比较简单,所以很快就破解成功了,如图4所示。
图4 现在我们获取到了Tomcat管理后台的账号和密码,可以直接登录后台,上传一个war格式的木马,这样我们就得到了一个webshell,如图5所示。
图5
图6 从图6我们可以看到,Tomcat是以system权限运行的,这是系统最高权限。因此,我们不需要提权就可以直接添加后门账号。
图7 从上图7我们看到成功添加了一个名为jspshell的管理员组账号,并且目标服务器开启了3389端口,我们可以通过远程桌面来登录,如图8所示。
图8 到此为此,这台服务器已经在我们的完全控制之下了。从上面的过程中我们可以看到这类漏洞的导致的后果非常严重,而且攻击难度较低。实际上,中国电信某业务系统就曾经出现过这样的漏洞,如图9所示。
图9 安全加固 Tomcat的安全加固我们主要从以下两点考虑:一是Tomcat Web Server本身是否安全,比如是否存在安全漏洞;二是Tomcat Web Server是否提供了可使用的安全功能,这部分主要是检查Tomcat的配置是否得当,在安全性、可用性、稳定性之间取得平衡。 Tomcat版本的选择与安装注意事项 检查目前使用的Tomcat版本是否存在安全漏洞,如果存在安全漏洞,则需要升级到新的安全版本。在选择Tomcat的版本时,我们一般选择最新的稳定版本。这样可以在安全性和稳定性之间取得一个很好的平衡。如果要从低版本升级到高版本,建议先在测试环境中测试通过后再进行升级,以避免由于兼容性带来的问题。关于Tomcat的安全漏洞可以关注官方发布的安全公告(http://tomcat.apache.org/security.html),也可以关注一些漏洞发布平台的最新Tomcat漏洞信息。 在安装时使用自定义的安装路径,并自定义WEB根目录。可以在Tomcat安装目录的conf目录下的server.xml中修改默认WEB根目录。打开server.xml,找到如下图10所示的内容:
图10 在</Host>之前加入类似以下内容: <Context path="" docBase="D:/javaweb" debug="0" reloadable="true" crossContext="true" /> 上面语句的作用是设置Tomcat虚拟路径,path代表虚拟目录,可自定义,也可以为空,docBase代表物理路径。如果按上面的设置,当访问http://192.168.30.128:8080时实际访问的是D:\javaweb目录下的文件。如果path的值不为空,如设置为path=”java”时,那么访问时应该这样:http://192.168.30.128:8080/java。在修改完成后,需要重启tomcat服务生效。 Tomcat安全配置 a. Tomcat降权 在Windows环境下,Tomcat默认以System权限运行(如图11),这样的后果是一旦成功入侵WEB应用,将直接得到一个高权限的Webshell,并且不需要提权操作就可以完全控制服务器。
图11 现在我们来对Tomcat进行降权操作。首先新建一个用户,设置复杂的密码,并且让它不属于任何用户组,如图12所示。
图12 接着打开“本地安全策略”--->“本地策略”--->“用户权限分配”,找到“作为服务登录”项,把刚刚新建的用户添加进去,如图13。
图13 然后打开“服务”组件,找到Tomcat的服务,右键“属性”--->“登录”,用刚新建的tomcat账号运行Tomcat服务,如图14。
图14 再找到Tomcat安装目录,只为“Administrators组”和“tomcat”账户分配完全控制权限,并将其他账户权限全部删除。如果不为tomcat账户分配权限,Tomcat服务将无法启动。然后需要以最小权限原则为Tomcat日志目录和WEB目录单独分配权限,日志目录只需要分配“读取”和“写入”权限即可。 注:WEB目录权限分配可依据以下原则:有写入权限,一定不要分配执行权限;有执行权限,一定不要分配写入权限。 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限,其他目录一般只分配“读取”权限即可。配置好后,需要重启Tomcat服务才能生效。
图15 b. Tomcat日志安全配置 不论在那种服务器上,日志都是一个非常重要的部分,我们需要对它严加保护,在Tomcat上也是如此,它的日志默认保存在Tomcat安装目录的logs目录下。要注意的是Tomcat默认并没有开启访问日志,所以我们需要手工开启它。打开server.xml,找到如下代码,去掉它们的注释,具体如下图16所示.
图16 然后修改日志的默认保存路径,并设置只允许系统管理员有日志保存目录的完全控制权限,tomcat账户有“读取”和“写入”权限即可,如图17所示。
图17 c. 删除默认文档和示例程序 如果没有自定义WEB目录,还需要将默认WEB根目录下的servlets-examples和tomcat-docs目录及其及下的所有文件都删除。以避免造成不必要的信息泄露或其他漏洞。servlets-examples和tomcat-docs目录下的一些样例都曾出现过安全漏洞,如CVE-2007-2449和CVE-2007-1355。 d. Tomcat默认管理后台安全配置 Tomcat默认存在一个管理后台,如果配置不当的话会引起非常严重的安全漏洞。在最开始的实例中我们就是利用该漏洞成功入侵目标服务器的。因此,我们非常有必要对它进行安全加固。一般情况下我们不需要该功能,所以建议删除该管理页面。方法是将%tocmat_home%/conf/Catalina/localhost目录下的manager.xml删除掉。 如果一定要使用的话,建议将该manager.xml的文件名修改为一个难猜测出来的文件名,并且找到Tomcat安装目录的conf目录下的tomcat-user.xml,设置一个复杂的管理员账号和密码。 (责任编辑:IT) |