Shellshock,又称Bashdoor,是一个安全漏洞,于2014年9月12日被发现,直到9月24日被赋予了CVE编号CVE-2014-6271才得以控制。该漏洞与Bash有关,Bash是一种广泛使用的Unix shell。此漏洞影响所有Linux发行版,并允许使用环境变量远程执行命令。
除了CVE-2014-6271之外,打了Shellshock补丁后的几天内又发现了许多其他相关漏洞。本指南将告诉你如何安全地升级Linux发行版并保护Linode免受Bash漏洞攻击。
检查漏洞
首先必须检查你的Linode是否易受攻击。由于存在多个漏洞,你需要检查每个漏洞的漏洞状态。
CVE-2014-6271
要检查你的Linode是否容易受到攻击,在Bash中运行以下命令:
代码语言:javascript复制env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
如果你的Linode易受攻击,你会看到:
代码语言:javascript复制vulnerable
this is a test
如果你的Linode不易受攻击,你会看到:
代码语言:javascript复制bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
在某些发行版中,例如Ubuntu 12.04,你可能看不到bash警告报错。只要你在输出中看不到vulnerable
,正在运行的则是针对CVE-2014-6271的升级版本。
CVE-2014-7169
在检查CVE-2014-6271时,发现了一个新的漏洞,其CVE编号为CVE-2014-7169。
要检查该漏洞,在Bash中运行以下命令:
代码语言:javascript复制env X='() { (a)=>' sh -c "echo date"; cat echo
如果你的Linode易受攻击,你会看到:
代码语言:javascript复制bash: X: line 1: syntax error near unexpected token `='
bash: X: line 1: `'
bash: error importing function for `X'
Sun Sep 08:17:32 EST 2014
如果你的Linode不易受攻击,你会看到:
代码语言:javascript复制date
cat: echo: No such file or directory
CVE-2014-7186
除了以上两个漏洞,还发现了另一个与之前在Bash中发现的代码问题相关的漏洞。新漏洞被赋予CVE编号CVE-2014-7186。
该漏洞通过使用固定大小的redir_stack允许越界内存访问,从而能够执行本来无法运行的代码。
要测试该漏洞,在Bash中运行以下命令:
代码语言:javascript复制bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"
如果你的Linode不易受攻击,你会看到:
代码语言:javascript复制bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
CVE-2014-7187和CVE-2014-6277
这两个CVE都是由于CVE-2014-6271和CVE-2014-7169修复不完整而导致的。幸运的是,大多数发行版修补了这两个CVE,完成了Shellshock漏洞修补。
如果你仍在使用Debian Squeeze且尚未升级,则需要按照他们的说明使用Debian Squeeze LTS并相应地更改你的sources.list
文件以获得升级。
安装升级
以下是升级Bash并确保你的Linode不再容易受到此漏洞攻击的相关信息。每个部分都是为不同的发行版而设计的。以下的说明基于你具有root权限或sudo权限。如果你没有这些权限,将无法运行这些命令。
Ubuntu和Debian
要在Ubuntu和Debian上升级Bash,运行以下命令来更新和升级Bash包。如果你没有以root用户身份运行,请在每个命令前添加sudo
:
apt-get update
apt-get install --only-upgrade bash
重新运行本文档“检查漏洞”部分中的命令,确保已升级。
CentOS
要在CentOS上升级Bash,运行此命令以更新和升级Bash包。如果你没有以root用户身份运行,请在每个命令前添加sudo
:
yum update bash
重新运行本文档“检查漏洞”部分中的命令,确保已升级。
Fedora
要在Fedora上升级Bash,运行此命令以更新和升级Bash包。如果你没有以root用户身份运行,请在每个命令前添加sudo
:
yum -y install bash
重新运行本文档“检查漏洞”部分中的命令,确保已升级。
Arch Linux
要在Arch Linux上升级Bash,运行此命令以更新和升级Bash包。如果你没有以root用户身份运行,请在每个命令前添加sudo
:
pacman -Syu
重新运行本文档“检查漏洞”部分中的命令,确保已升级。
Gentoo
Gentoo根据你当前使用的Bash版本提供了特定的修补说明。要查找你的版本,运行:
代码语言:javascript复制bash --version
Bash 3.1
要在Gentoo上修补Bash 3.1中的漏洞,运行:
代码语言:javascript复制emerge --sync
emerge --ask --oneshot --verbose ">=app-shells/bash-3.1_p18-r1"
重新运行本文档“检查漏洞”部分中的命令,确保已修补。
Bash 3.2
要在Gentoo上修补Bash 3.2中的漏洞,运行:
代码语言:javascript复制emerge --sync
emerge --ask --oneshot --verbose ">=app-shells/bash-3.2_p52-r1"
重新运行本文档“检查漏洞”部分中的命令,确保已修补。
Bash 4.0
要在Gentoo上修补Bash 4.0中的漏洞,运行:
代码语言:javascript复制emerge --sync
emerge --ask --oneshot --verbose ">=app-shells/bash-4.0_p39-r1"
重新运行本文档“检查漏洞”部分中的命令,确保已修补。
Bash 4.1
要在Gentoo上修补Bash 4.1中的漏洞,运行:
代码语言:javascript复制emerge --sync
emerge --ask --oneshot --verbose ">=app-shells/bash-4.1_p12-r1"
重新运行本文档“检查漏洞”部分中的命令,确保已修补。
Bash 4.2
要在Gentoo上修补Bash 4.2中的漏洞,运行:
代码语言:javascript复制emerge --sync
emerge --ask --oneshot --verbose ">=app-shells/bash-4.2_p48-r1"
重新运行本文档“检查漏洞”部分中的命令,确保已修补。
OpenSUSE
要针对OpenSUSE上的漏洞升级Bash,运行:
代码语言:javascript复制zypper patch --cve=CVE-2014-7187
重新运行本文档“检查漏洞”部分中的命令,确保已升级。
Slackware
要针对Slackware上的漏洞升级bash,必须使用slackpkg
升级Bash包:
slackpkg update
slackpkg upgrade bash
完成后,请重新运行本文档“检查漏洞”部分中的命令,确保已升级。
bashshell安全漏洞bashshell安全漏洞