介绍
2014 年 9 月 24 日,一个被称为 Shellshock 或“Bash Bug”的 GNU Bash 漏洞被披露。 简而言之,该漏洞允许远程攻击者在特定条件下执行任意代码,方法是在分配环境变量后传递代码字符串。 由于 Bash 在 Linux、BSD 和 Mac OS X 发行版中无处不在,许多计算机容易受到 Shellshock 的攻击; 1.14 到 4.3 之间的所有未打补丁的 Bash 版本(即 到现在为止的所有版本)都存在风险。
Shellshock 漏洞可以在运行服务或应用程序的系统上被利用,这些服务或应用程序允许未经授权的远程用户分配 Bash 环境变量。 可利用系统的示例包括:
- 使用以 Bash 编写或启动到 Bash 子shell 的 CGI 脚本(通过
mod_cgi
和mod_cgid
)的 Apache HTTP 服务器 - 某些 DHCP 客户端
- 使用
ForceCommand
功能的 OpenSSH 服务器 - 各种使用 Bash 的网络公开服务
可以在 CVE-2014-6271、CVE-2014-7169、CVE-2014-7186 和 中找到该错误的详细描述CVE-2014-7187。
由于 Shellshock 漏洞非常普遍(甚至比 OpenSSL Heartbleed 漏洞更严重)并且特别容易被利用,因此强烈建议对受影响的系统进行适当更新以尽快修复或缓解漏洞。 我们将向您展示如何测试您的机器是否易受攻击,如果是,如何更新 Bash 以消除该漏洞。
检查系统漏洞
在每个运行 Bash 的系统上,您可以通过在 bash 提示符下运行以下命令来检查 Shellshock 漏洞:
env 'VAR=() { :;}; echo Bash is vulnerable!' 'FUNCTION()=() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"
命令中突出显示的 echo Bash is vulnerable!
部分表示远程攻击者可以注入恶意代码的位置; 环境变量赋值中函数定义后的任意代码。 因此,如果您看到以下输出,则您的 Bash 版本存在漏洞,应更新 :
Bash is vulnerable! Bash Test
如果您的输出不包括模拟攻击者的有效载荷,即 “Bash 易受攻击”不会打印为输出,您至少可以抵御第一个漏洞(CVE-2014-6271),但您可能容易受到后来发现的其他 CVE 的攻击。 如果输出中有任何 bash
警告或错误,您应该将 Bash 更新到最新版本; 这个过程将在下一节中描述。
如果 test 命令的唯一输出是以下内容,则您的 Bash 不会受到 Shellshock 的影响:
Bash Test
测试远程站点
如果您只是想测试网站或特定 CGI 脚本是否易受攻击,请使用此链接:'ShellShock' Bash Vulnerability CVE-2014-6271 Test Tool。
只需在适当的表格中输入您要测试的网站或 CGI 脚本的 URL 并提交。
修复漏洞:更新 Bash
修复漏洞最简单的方法是使用默认的包管理器来更新 Bash 的版本。 以下小节介绍了在各种 Linux 发行版上更新 Bash,包括 Ubuntu、Debian、CentOS、Red Hat 和 Fedora。
APT-GET:Ubuntu / Debian
对于当前支持的 Ubuntu 或 Debian 版本,通过 apt-get
将 Bash 更新到可用的最新版本:
sudo apt-get update && sudo apt-get install --only-upgrade bash
现在通过运行上一节中的命令(Check System Vulnerability)再次检查您的系统漏洞。
生命周期结束的 Ubuntu / Debian 版本
如果您正在运行被视为 生命终结 状态的 Ubuntu / Debian 版本,则必须升级到受支持的版本才能使用包管理器来更新 Bash。 以下命令可用于升级到新版本(建议您先备份服务器和重要数据,以防遇到任何问题):
sudo do-release-upgrade
升级完成后,确保更新 Bash。
百胜:CentOS / 红帽 / Fedora
通过 yum
将 Bash 更新到最新版本:
sudo yum update bash
现在通过运行上一节中的命令(Check System Vulnerability)再次检查您的系统漏洞。
生命周期结束的 CentOS / Red Hat / Fedora 版本
如果您运行的 CentOS / Red Hat / Fedora 版本被视为 生命终结 状态,则必须升级到受支持的版本才能使用包管理器来更新 Bash。 以下命令可用于升级到新版本(建议您先备份服务器和重要数据,以防遇到任何问题):
sudo yum update
升级完成后,确保更新 Bash。
结论
确保将所有受影响的服务器更新到最新版本的 Bash! 此外,请务必使用最新的安全更新使您的服务器保持最新状态!