第15章 Web Server配置安全
Web服务器安全,考虑的是应用部署时的运行环境安全。这个运行环境包括Web Server、脚本语言解释器、中间件等软件,这些软件所提供的一些配置参数,也可以起到安全保护的作用。
本章主要介绍Web服务器有哪些常见的运行时安全问题。
15.1 Apache安全
- Apache目前仍然是Web Server领域中独一无二的巨头,最具代表性。本章中,Apache均指Apache Httpd。
- Web Server的安全我们关注两点:
- 一是Web Server本身是否安全
- 二是Web Server是否提供了可用的安全功能。
- Apache核心的高危漏洞几乎没有,大部分是由Apache的Module造成的。Apache有许多官方与非官方的Module,默认启动的Module出现过高危漏洞非常少,大多数的高危漏洞集中在默认没有安装或enable的Module上。
- 检查Apache安全:
- 检查Apache的Module安装情况。
- 根据“最小权限原则”,应该尽可能地减少不必要的Module,对于要使用的Module,则检查其对应版本是否存在已知的安全漏洞。
- 指定Apache进程以单独的用户身份运行,这通常需要为Apache单独建立一个user/group。
- Apache以root身份或者admin身份运行是一个非常糟糕的决定。
- admin身份是指服务器管理员在管理机器时使用的身份,这个身份的权限也是比较高的。
- 使用高权限身份运行Apache的结果可能是灾难性的,它会带来两个可怕的后果:
-
- 当黑客入侵Web成功时,将直接获得一个高权限(如root或admin)的shell;
-
- 应用程序本身将具备较高权限,当出现bug时,可能会带来较高风险,比如删除本地重要文件、杀死进程等不可预知的后果。
-
- 比较好的做法是使用专门的用户身份运行Apache,这个用户身份不应该具备shell,它唯一的作用就是用来运行Web应用。
- 以什么身份启动进程,在使用其他Web容器时也需要注意这个问题。
- Apache以root身份或者admin身份运行是一个非常糟糕的决定。
- Apache还提供了一些配置参数,可以用来优化服务器的性能,提高对抗DDOS攻击的能力。
- 要保护好Apache Log。
- 一般来说,攻击者入侵成功后,要做的第一件事就是清除入侵痕迹,修改、删除日志文件。因此access log应当妥善保管,比如实时地发送到远程的syslog服务器上。
- 检查Apache的Module安装情况。
15.2 Nginx安全
- Nginx的高性能和高并发的处理能力使得用户在Web Server的选择上有了更多空间。但从安全的角度来看,Nginx近年来出现的影响默认安装版本的高危漏洞却比Apache要多。
- 多关注Nginx的漏洞信息,并及时将软件升级到安全的版本,是非常有必要的一件事。
- 就软件安全本身来看,Nginx与Apache最大的区别在于,检查Apache安全时更多的要关注Module的安全,而Nginx则需要注意软件本身的安全,及时升级软件版本。
- Nginx也应该以单独的身份运行,这是所有Web Server、容器软件应该共同遵守的原则。
- 首先,Nginx的配置非常灵活,在对抗DDOS和CC攻击方面也能起到一定的缓解作用。其次,在Nginx配置中还可以做一些简单的条件判断,比如User-Agent有什么特征,或者来自某个特定refer、IP等条件,响应动作可以是返回错误号,或进行重定向。
- 仍需强调的是,Web Server对于DDOS攻击的防御作用是有限的。对于大规模的拒绝服务攻击,需要使用更加专业的保护方案。
15.3 jBoss远程命令执行
- jBoss是J2EE环境中一个流行的Web容器,但是jBoss在默认安装时提供的一些功能却不太安全,如果配置不当,则可能直接造成远程命令执行。
- jBoss在默认安装时会有一个管理后台,叫做JMX-Console。默认安装时JMX-Console是没有任何认证的。
- 在JMX-Console中中,有多种可以远程执行命令的方法。
- 最简单的方式,是通过DeploymentScanner远程加载一个war包。
- 通过JMX-Console提供的BSH(Bean Shell)Deploy方法,同样也能部署war包。
- BSH能够执行一次性的脚本,或者创建服务,这对于黑客来说非常有用。
- JMX-Console为黑客大开方便之门,通过简单的“Google hacking”,可以在互联网上找到很多开放了JMX-Console的网站,其中大多数是存在漏洞的。
- 因此出于安全防御的目的,在加固时,需要删除JMX-Console后台,事实上,jBoss的使用完全可以不依赖于它。
- 如果出于业务需要不得不使用JMX-Console,则应该使用一个强壮的密码,并且运行JMXConsole的端口不应该面向整个Internet开放。
15.4 Tomcat远程命令执行
- Apache Tomcat与jBoss一样,默认也会运行在8080端口。它提供的Tomcat Manager的作用与JMX-Console类似,管理员也可以在Tomcat Manager中部署war包。
- 值得庆幸的是,Tomcat Manager部署war包需要有manager权限,而这一权限是在配置文件中定义的。
- 在Tomcat后台可以直接上传war包。
- 虽然Tomcat后台有密码认证,但笔者仍然强烈建议删除这一后台,因为攻击者可以通过暴力破解等方式获取后台的访问权限,从安全的角度看,这增加了系统的攻击面,得不偿失。
15.5 HTTP Parameter Pollution(HPP)
- 通过GET或POST向服务器发起请求时,提交两个相同的参数,那么服务器会如何选择呢?
- 比如提交:
/?a=test&a=test1
- 在某些服务端环境中,会只取第一个参数;而在另外一些环境中,比如.net环境中,则会变成:
a=test,test1
- 这种特性在绕过一些服务器端的逻辑判断时,会非常有用。
- 这种HPP攻击,与Web服务器环境、服务端使用的脚本语言有关。
- HPP本身可以被看做是服务器端软件的一种功能,参数选择的顺序是由服务器端软件所决定的。当程序员不熟悉软件的这种功能时,就有可能造成误用,或者程序逻辑涵盖范围不够全面,从而形成漏洞。
- HPP这一问题再次提醒我们,设计安全方案必须要熟悉Web技术方方面面的细节,才不至于有所疏漏。
- 从防范上来看,由于HPP是服务器软件的一种功能,所以只需要在具体的环境中注意服务器环境的参数取值顺序即可。
15.6 小结
- Web Server、Web容器是Web应用的载体,是基础,它们的安全与否将直接影响到应用的安全性。
- 在搭建服务端环境时,需要注意最小权限原则,应该以独立的低权限身份运行Web进程。同时Web Server的一些参数能够优化性能,有助于缓解DDOS攻击,在实际应用时可以酌情使用。
- Web Server本身的漏洞也需要时刻关注,而有些Web容器的默认配置甚至可能还会称为弱点,一个合格的安全工程师应该熟知这些问题。