如何保护 Apache 免受 Bash Shellshock 漏洞的影响?

信息安全 阿帕奇 炮击 重击
2021-09-05 17:09:19

我有一个 Apache 网络服务器正在运行,并且最近有关于针对 bash 的 Shellsock 漏洞利用的消息,我想知道我的网络服务器是否易受攻击。我不这么认为,但我想确保我没有弄错。

我没有故意在服务器上使用任何 bash CGI,它使用 mod_php 和 Python WSGI 站点运行一些 PHP 东西。但我想确保在服务器上运行的所有软件都没有使用 CGI,而我并不期待它。

如何确保我的网络服务器不受攻击?

4个回答

除了 CGI 之外,一个被忽视的用法sh是在exec()调用中,或者通过使用system()and popen(),在大多数 Linux 系统上,这意味着bash. exec()调用系列通常与“ /bin/sh -c一起使用,以在调用进程时提供各种功能,如 shell 重定向、管道甚至只是参数扩展。

当您使用管道日志时, Apache 正是使用这个(通过 APR,请参阅SHELL_PATH in的使用apr/threadproc/unix/proc.c),以及在其他情况下,例如外部输出过滤器(通过ExtFilterDefine),以及#exec cmdSSI 的处理包括。这种行为几乎肯定也适用于许多第三方模块。

保护您的网络服务器的最佳步骤:

  • 修补或升级您的 bash 包(如果您自己执行此操作,请确保没有杂散sh实例,也请检查sh任何手动设置的 chroot)
  • /bin/sh在 chroot 中运行 Apache,当且仅当需要时才使用最少:

    • 在 Apache httpd 2.2 从管道日志|中使用“ ”切换到“ ” ,这消除了对(自 Apache 2.2.12 起可用)的需要||/bin/sh
    • 在 Apache httpd 2.4 中确保您没有|$管道日志中使用“” ,这将恢复为 httpd.2.2 行为。2.4 支持|and ||,不使用/bin/sh
  • 确保默认的 CGI 脚本被禁用,从顶层仔细检查Options(例如<Directory />向下ExecCGI

  • 考虑mod_security您是否还没有使用它。Red Hat 在知识库文章 1212303中提供了一些可用于记录和清理环境的规则

您也可以考虑#!/bin/sh -p在脚本中使用“”,这会强制 bash 进入特权模式,这会阻止从环境中导入函数(以及其他更改)。如果系统上有易受攻击的 CGI 脚本,但没有补丁和编译器,这可能会有所帮助。可能不适用于 Debian 和派生系统,因此请仔细检查。

(另外,如果/bin/shbash,不要盲目地用别的东西代替,它可能会影响你的启动脚本。)

通过 CGI(bash 脚本除外)或在 Apache 模块(在您的情况下为 Python 和 PHP)下运行的任何应用程序代码也可能在其中发挥作用。如果任何变量都可以被攻击者充分控制(URI 编码可能是一个挑战),并且如果应用程序/bin/sh在调用进程时使用,并且如果在这样做时保留了这些变量,那么您可能会遇到问题。

如果您正在运行现代 Linux 系统,但尚未为 apache 设置 chroot 或其他容器,那么您应该能够在启动 Apache(或任何其他服务)时使用unshare和绑定挂载来替换。/bin/sh

unshare -m -- sh -c "mount --bind /usr/local/bin/bash /bin/sh && 
    /usr/local/apache2/bin/apachectl start"

这样做的好处是

  • 破坏东西的风险更小,因为您可以有选择地更换 bash
  • sh您可以更轻松地记录和审核调用尝试

(你不能轻易做到的是编写一个 bash 脚本作为包装器来检查和记录可疑变量,当然你需要使用其他东西......)

如果您在 Linux 上运行,您可以通过添加一些规则并重新加载auditd来轻松查看使用情况/bin/shaudit.rules

-w /bin/sh                -p x
-w /bin/bash              -p x

(我两者都需要,因为sh它是 的符号链接bash

Red Hat 发布了另一种方法,一个运行时“修复”,您可以使用它LD_PRELOAD,您可以在咨询中找到它。如果需要,这也可以适用于记录可疑变量。鉴于目前对补丁的完整性存在疑问,这个解决方案至少对 Apache 来说可能是一个很好的短期修复。

您还可以在此处找到更一般的 Apache 强化技巧:Apache 服务器强化

根据 Redhat 的建议:

mod_php、mod_perl 和 mod_python 不使用环境变量,我们相信它们不会受到影响。

阅读更多关于它的信息:https ://access.redhat.com/node/1200223

保护 bash 并且您已经保护了盒子。大多数发行版中都有可用的补丁,或者如果您运行尚未打补丁的发行版,您可以自己编译和打补丁。

如果您不确定是否可以禁用 cgi 模块sudo a2dismod mod_cgi删除LoadModule. httpd.conf正如shaomoon提到的 mod_php,mod_perl 和 mod_python 不受影响。

无论如何,您应该简单地安装补丁如果您的 bash 不易受攻击,您的 apache 也将受到保护,免受这种攻击。