问题描述
最近,有关”CVE-2014-6271″(见USN-2362-1)的消息传出,这是Bash中的一个漏洞。我怎么知道我是否受到这种影响,我该如何解决这个问题,为什么我应该在意?
由于其范围和严重性,这被设计为针对此漏洞的规范答案。
最佳解决思路
什么是Bash?
Bash是Ubuntu中的默认交互式shell。当你与终端连接时(通过终端仿真器,通过tty或ssh),你通常会输入bash
将读取和执行的命令。即使你根本不使用终端,你仍然有Bash。
在Ubuntu上,/bin/sh
不是bash(它是破折号)。只有bash受此漏洞影响。
漏洞利用如何影响我?
Bash和操作系统跟踪描述当前logged-on用户的环境变量集合,以及在硬盘上查找程序的位置以及其他此类功能。通过制作具有特定结构的环境变量,攻击者可能能够在Bash下次开始时执行代码。
攻击者可以通过多种方式设置该环境变量:
-
通过ssh等特定设置远程连接到SSH等服务。正如Mitre警告的那样,使用sshd
ForceCommand
选项是一个攻击媒介。其shell不是bash的帐户不受影响。 -
诱骗你设置环境变量。
-
导致另一个程序设置一个环境变量以获得该制作的值。例如,您可能有一个Web服务器和脚本,需要为特定的用户内容设置一个环境变量。即使该脚本创建了自己的脚本,也不会触及其他环境变量,这就足够了。具有任何名称和精心设计的值的单个环境变量足以让攻击成功。
-
其他方式我没有在这里提到。
一旦他们设置了这个变量,下次bash
因任何原因打开时,攻击者的代码就会运行。这对于sudo -s
尤其可怕,因为它产生了super-user(一种可完全控制计算机数据和程序的管理用户规则)的bash。即使您只是以标准用户身份启动bash,也可以删除该用户的文件。
需要注意的是,即使你自己不使用bash,许多程序也会自行产生bash作为其操作的一部分。即使在这种情况下,你也很脆弱。但是,Ubuntu的/bin/sh
不是bash,因此只有显式调用bash而不是默认脚本shell的程序才会受到影响。
根据Mitre:
vectors involving the ForceCommand feature in OpenSSH sshd, the mod_cgi and mod_cgid modules in the Apache HTTP Server, scripts executed by unspecified DHCP clients, and other situations in which setting the environment occurs across a privilege boundary from Bash execution.
我很脆弱吗?
使用dpkg检查您的安装包版本:
dpkg -s bash | grep Version
这将在bash
包中查找信息,并过滤输出以仅显示版本。固定版本是4.3-7ubuntu1.4
,4.2-2ubuntu2.5
和4.1-2ubuntu3.4
。
例如,我看到:
wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4
并可以确定我并不脆弱。
我如何更新?
标准更新管理器将为您提供此更新。无论您使用什么操作系统或well-maintained如何安全更新都是重要的,这是一个很好的例子。
USN Bulletin表示,Ubuntu 14.04 Trusty Tahr,12.04精确穿山甲和10.04 Lucid Lynx发布了新版本。如果您不在其中一个LTS版本上,但是位于reasonably-recent版本上,则很可能会找到修补程序包。
首先,检查你是否
如果你很脆弱,你应该首先获取最新的软件包列表:
sudo apt-get update && sudo apt-get install bash
第一个命令确保你拥有包含固定版本的最新软件包列表,第二个命令安装最新(固定)版本的bash。
虽然这个错误似乎只在bash产生时才起作用,但如果可行的话,立即重新启动仍然是一个好主意。
次佳解决思路
偷走cft over at Hacker News。如果你像我这样的回购站有问题(Odroid-XU),那么如果你想从源代码补丁/构建,这应该很好地工作。
TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do
wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
if [[ $? -ne "0" ]]; then
MAX=$(expr $i - 1)
break;
fi
done
tar zxf bash-4.3.tar.gz
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
echo apply patch bash43-$i
patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR
然后运行:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
如果你得到:
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
那你们都很棒!
警告:make install会在/usr/local/bin
中安装bash,所以/bin/bash
没有被修改,并且可以从 curl 中调用!
第三种解决思路
注意:CVE-2014-7169的安全修补程序已作为标准安全更新发布。没有必要添加额外的ppa来接收这个补丁。只需要以下内容。
sudo apt-get update
sudo apt-get upgrade
为确保您已正确修补bash,请运行以下命令
dpkg -s bash | grep Version
如果您使用14.04 LTS,则应该看到以下输出:
Version: 4.3-7ubuntu1.4
如果你在12.04 LTS上,你的输出应该是:
Version: 4.2-2ubuntu2.5