我有一个 Apache 网络服务器正在运行,并且最近有关于针对 bash 的 Shellsock 漏洞利用的消息,我想知道我的网络服务器是否易受攻击。我不这么认为,但我想确保我没有弄错。
我没有故意在服务器上使用任何 bash CGI,它使用 mod_php 和 Python WSGI 站点运行一些 PHP 东西。但我想确保在服务器上运行的所有软件都没有使用 CGI,而我并不期待它。
如何确保我的网络服务器不受攻击?
我有一个 Apache 网络服务器正在运行,并且最近有关于针对 bash 的 Shellsock 漏洞利用的消息,我想知道我的网络服务器是否易受攻击。我不这么认为,但我想确保我没有弄错。
我没有故意在服务器上使用任何 bash CGI,它使用 mod_php 和 Python WSGI 站点运行一些 PHP 东西。但我想确保在服务器上运行的所有软件都没有使用 CGI,而我并不期待它。
如何确保我的网络服务器不受攻击?
除了 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 cmd
SSI 的处理包括。这种行为几乎肯定也适用于许多第三方模块。
保护您的网络服务器的最佳步骤:
sh
实例,也请检查sh
任何手动设置的 chroot)/bin/sh
在 chroot 中运行 Apache,当且仅当需要时才使用最少:
确保默认的 CGI 脚本被禁用,从顶层仔细检查Options
(例如<Directory />
向下ExecCGI
考虑mod_security
您是否还没有使用它。Red Hat 在知识库文章 1212303中提供了一些可用于记录和清理环境的规则。
您也可以考虑#!/bin/sh -p
在脚本中使用“”,这会强制 bash 进入特权模式,这会阻止从环境中导入函数(以及其他更改)。如果系统上有易受攻击的 CGI 脚本,但没有补丁和编译器,这可能会有所帮助。这可能不适用于 Debian 和派生系统,因此请仔细检查。
(另外,如果/bin/sh
是bash
,不要盲目地用别的东西代替,它可能会影响你的启动脚本。)
通过 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/sh
audit.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 也将受到保护,免受这种攻击。