当前位置: 首页>>技术教程>>正文


什么是CVE-2014-6271 bash漏洞(Shellshock),我该如何解决?

, , ,

问题描述

最近,有关”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.44.2-2ubuntu2.54.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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/359.html,未经允许,请勿转载。