Web服务器安全,考虑的是应用布置时的运行环境安全。这个运行环境包括Web Server、脚本语言解释器、中间件等软件,这些软件所提供的一些配置参数,也可以起到安全保护的作用。
Apache安全
Web Server的安全我们关注两点:
- Web Server本身是否安全;
- Web Server是否提供了可使用的安全功能。
在Apache的漏洞史上出现过许多次高危漏洞,但这些高危漏洞,大部分是由Apache的Module造成的。Apache的核心几乎没有漏洞,Apache有许多官方非官方Module,默认启动的Module出现的漏洞非常少,大多数的高危漏洞集中在默认没有安装或enable的Module上。
因此检查Apache安全的第一件事情,就是检查Apache的Module安装情况,根据“最小权限原则”,应该尽可能地减少不必要的Module,对于要使用的Module则检查其对应版本是否存在已知的安全漏洞。
指定Apache进程以什么用户身份运行,应满足“最小权限原则”,Apache以root身份或者admin身份(高权限身份)运行是一件非常危险的事。它会带来两个后果:
1.当黑客入侵Web成功时,将直接获得一个高权限(比如root或admin)的shell;
2.应用程序本身将具备较高权限,当出现bug时,可能会带来较高风险,比如删除本地重要文件、杀死进程等不可预知的结果。
正确配置参数,保护好Apache Log(日志文件)。
Nginx安全
Nginx的高性能和高并发的处理能力使得用户在Web Server的选择上有了更多的空间。但是从安全的角度来看,Nginx近年来出现的影响默认安装版本的高危漏洞却比Apache更多。在Nginx
检查Apache安全时,更多的要关注Module的安全,而Nginx则需要注意软件本身的安全,及时升级软件版本。与Apache一样,Nginx也应该已单独的身份运行,这是所有Web Server、容器软件应该共通遵守的原则。
jBoss远程命令执行
jBoss是J2EE环境中一种流行的web容器,但是jBoss在默认安装时提供的一些功能却不太安全,如果配置不得当,则可能直接造成远程命令执行。
由于jBoss在默认安装时会有一个管理后台,叫做JMX-Console,它提供给管理员一些强大的功能,其中包括配置MBeans,这同样也会为黑客们大开方便之门。通过8080端口(默认安装时会监听8080端口)访问/jmx-console能够进入到这个管理页面,默认安装时访问JMX-Console是没有任何认证的。
在JMX-Console中,有多种可以远程执行命令的方法,再简单的方式,是通过DeploymentScanner远程加载一个war包。
Tomcat远程命令执行
Apache Tomcat与jBoss一样,默认也会运行在8080端口。它提供的Tomcat Manager的作用与JMX-Console类似,管理员也可在Tomcat Manager中部署war包。但是Tomcat Manager部署war包需要有manager权限,而这一权限是在配置文件中定义的,需要管理员权限才能配置。
HTTP Parameter Pollution(HPP攻击)
HPP攻击,简单的来说就是通过GET或POST向服务器发起请求时,提交两个相同的参数,那么服务器将如何选择呢?比如提交:
/?a=test&a=test1
在某些服务端环境中,会只取第一个参数;而在另一些环境中,比如.net环境中,则会变成:
a=test,test1
这种特性在绕过一些服务器端的逻辑判断时,会非常有用。
这种HPP攻击,和web服务器环境、服务器端使用的脚本语言有关。HPP本身可以看作服务器端软件的一种功能,参数选择的顺序是由服务器端软件决定的,当程序员不熟悉软件的这种功能时,就可能造成误用,或者程序涵盖范围不够全面,从而形成漏洞。
从防范上来看,由于HPP是服务器软件的一种功能,所以只需在具体的环境中注意服务器环境的参数的取值顺序即可。
小结
Web Server、web容器是Web应用的载体,是基础,他们的安全与否将直接影响到应用的安全性。在搭建服务器端环境时,需要注意最小权限规则,应该以独立的低权限身份运行Web进程,同时Web Server的一些参数能够优化性能,有助于缓解DDOS攻击,Web Server本身的漏洞也需要时刻关注。