白帽子讲Web安全(第 15 章 Web Server 配置安全)

第 15 章 Web Server 配置安全

Web 服务器是 Web 应用的载体,如果这个载体出现安全问题,那么运行在其中的 Web 应用程序的安全也无法得到保障。因此 Web 服务器的安全不容忽视。

Web 服务器安全,考虑的是应用部署时的运行环境安全。这个运行环境包括 Web Server 、脚本语言解释器、中间件等软件,这些软件所提供的一些配置参数,也可以起到安全保护的作用。

15.1 Apache 安全

尽管近年来 Nginx 、 LightHttpd 等 Web Server 的市场份额增长得很快,但 Apache 仍然是这个领域中独一无二得巨头,互联网上大多数得 Web 应用依然跑在 Apache Httpd 上。

Web Server 的安全我们关注两点:

  1. Web Server 本身是否安全;
  2. Web Server 是否提供了可使用的安全功能。

纵观 Apache 的漏洞史,它曾经出现过许多次高危漏洞。但这些高危漏洞,大部分是由 Apache 的 Module 造成的,Apache 核心的高危漏洞几乎没有。Apache 有很多官方与非官方的 Module ,默认启动的 Module 出现过的高危漏洞非常少,大多数的高危漏洞集中在默认没有安全或 enable 的 Module 上。

因此,检查 Apache 安全的第一件事情,就是检查 Apache 的 Module 安装情况,根据“最小权限原则”,应该尽可能地减少不必要的 Module ,对于要使用的 Module ,则检查其对应版本是否存在已知的安全漏洞。

定制好了 Apache 的安装包后,接下来需要做的,就是指定 Apache 进程以单独的用户身份运行,这通常需要为 Apache 单独建立一个 user/group 。

需要注意的是,Apache 以 root 身份或者 admin 身份运行是一个非常糟糕的决定。 这里是 admin 身份是指服务器管理员在管理机器时使用的身份。这个身份的权限也是比较高的,因为管理员有操作管理脚本、访问配置文件、读/写日志等需求。

使用高权限身份运行 Apache 的结果可能时灾难性的,它会带来两个可怕的后果:

  1. 当黑客入侵 Web 成功时,将直接获得一个高权限(比如 root 或 admin )的 shell 。
  2. 应用程序本身将具备较高权限,当出现 bug 时,可能会带来较高风险,比如删除本地重要文件、杀死进程等不可预知的结果。

比较好的做法是使用专门的用户身份运行 Apache ,这个用户身份不应该具备 shell ,它唯一的作用就是用来运行 Web 应用。

Apache 还提供了一些配置参数,可以用来优化服务器的性能,提高对抗 DDOS 攻击的能力。

  • TimeOut
  • KeepAlive
  • LimitRequestBody
  • LimitRequestFields
  • LimitRequestFieldSize
  • LimitRequestLine
  • LimitXMLRequestBody
  • AcceptFilter
  • MaxRequestWorkers

15.2 Nginx 安全

近年来 Nginx 发展很快,它的高性能和高并发的处理能力使得用户在 Web Server 的选择上有了更多的空间。

就软件安全本身来看,Nginx 与 Apache 最大的区别在于,检查 Apache 安全时更多的要关注 Module 的安全,而 Nginx 则需要注意软件本身的安全,及时升级如那件版本。

15.3 jBoss 远程命令执行

jBoss 是 J2EE 环境中一个流行的 Web 容器,但是 jBoss 在默认安全时提供的一些功能却不太安全,如果配置不得当,则可能直接造成远程命令执行。

由于 jBoss 在默认安装时会有一个管理后台,叫做 JMX-Console ,默认安装时访问 JMX-Console 是没有任何认证的。

在 JMX-Console 中,有多种可以远程执行命令的方法。最简单的方式,是 通过 DeploymentScanner 远程加载一个 war 包。

因此出于安全防御的目的,在加固时,需要删除 JMX-Console 后台,事实上,jBoss 的使用完全可以不依赖于它。要移除 JMX-Console,只需要删除 jmx-console.war 和 web-console。war即可,它们分别位于 $JBOSS_HOME/server/all/deploy$JBOSS_HOME/server/default/deploy 目录下。

如果出于 约我需要不得不使用 JMX-Console ,则应该使用一个强壮的密码,并且运行 JMX-Console 的端口不应该面向整个 Internet 开放。

15.4 Tomcat 远程命令执行

Apache Tomcat 与 jBoss 一样,默认也会运行在 8080 端口。它提供的 Tomcat Manager 的作用与 JMX-Console 类似,管理员也可以在 Tomcat Manager 中部署 war 包。

虽然 Tomcat 后台有密码认证,但笔者仍然强烈建议删除这一后台,因为攻击者可以通过暴力破解等方式获取后台的访问权限,从安全的角度看,这增加了系统的攻击面,得不偿失。

15.5 HTTP Parameter Pollution

在 2009 年的 OWASP 大会上,Luca 、Carettoni 等人演示了这种被称为 HPP 的攻击。简单来说,就是通过 GET 或 POST 向服务器发起请求时,提交两个相同的参数,那么服务器会如何选择呢?

比如提交:

/?a=test&a=test1

在某些服务端环境中,会只取第一个参数;而在另外一些环境中,比如 .net 环境中,则会变成:

a=test,test1

这种特性在绕过一些服务器端的逻辑判断时,会非常有用。

这种 HPP 攻击,与 Web 服务器环境、服务器端使用的脚本语言有关。HPP 本身可以看做服务器端软件的一种功能,参数选择的顺序是由服务器端软件所决定的。

HPP 这一问题再次提醒我们,设计安全方案必须要熟悉 Web 技术方方面面的细节,才不至于有所疏漏。从防范上来看,由于 HPP 是服务器软件的一种功能,所以只需在具体的环境中注意服务器环境的参数取值顺序即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值