最近,有关于“ CVE-2014-6271”(请参阅USN-2362-1)的新闻,这是Bash中的漏洞。我怎么知道我是否受此影响,如何解决它,为什么我要关心?
由于其范围和严重性,它被设计为此漏洞的规范答案。
最近,有关于“ CVE-2014-6271”(请参阅USN-2362-1)的新闻,这是Bash中的漏洞。我怎么知道我是否受此影响,如何解决它,为什么我要关心?
由于其范围和严重性,它被设计为此漏洞的规范答案。
Answers:
Bash是Ubuntu中默认的交互式shell。当您与终端连接时(通过终端仿真器,通过tty或ssh),通常是键入bash
将读取并执行的命令。即使您根本不使用终端,您仍然可以使用Bash。
在Ubuntu上,/bin/sh
不是bash(是破折号)。仅bash受此漏洞影响。
Bash和OS会跟踪一组环境变量,这些变量描述了当前登录的用户,在硬盘上寻找程序的位置以及其他此类功能。通过制作具有特定结构的环境变量,攻击者可能能够在Bash下次启动时执行代码。
攻击者可以通过多种方式设置该环境变量:
ForceCommand
选项是一种攻击手段。外壳不是bash的帐户不受影响。一旦他们设置了该变量,下一次bash
由于任何原因将打开,攻击者的代码将运行。使用时,这尤其令人恐惧sudo -s
,因为它以超级用户身份(完全控制计算机数据和程序的管理用户规则)生成bash 。即使您仅以标准用户身份启动bash,也可以删除该用户的文件。
重要的是要注意,即使您自己不使用bash,许多程序也会在操作过程中自行生成bash。即使在这种情况下,您也很脆弱。但是,Ubuntu /bin/sh
不是bash,因此仅显式调用bash的程序不受默认脚本外壳的影响。
根据Mitre:
涉及OpenSSH sshd中的ForceCommand功能的矢量,Apache HTTP Server中的mod_cgi和mod_cgid模块,由未指定的DHCP客户端执行的脚本以及其他设置环境跨越Bash执行权限的边界的情况。
使用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
并可以确定我不脆弱。
标准更新管理器将为您提供此更新。这是一个重要示例,说明无论您使用什么操作系统或维护程度如何,安全更新的重要性。
该USN公告指出,新的版本已经发布的Ubuntu 14.04忠实的塔尔羊,12.04精确穿山甲和10.04清醒山猫。如果您不是使用这些LTS版本之一,而是使用相当近期的版本,则您很可能能够找到已打补丁的软件包。
首先,检查您是否
如果您容易受到攻击,则应首先获取最新的软件包列表:
sudo apt-get update && sudo apt-get install bash
第一个命令确保您具有包含固定版本的最新软件包列表,第二个命令安装bash的最新(固定)版本。
虽然该错误仅在生成bash时才起作用,但在可行的情况下立即重新启动仍然是一个好主意。
在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将在bash中安装bash /usr/local/bin
,因此/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
如果您使用的是11.04:请使用以下步骤(对我有用)
cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
如果未下载所需补丁,则安装ftp软件包
apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install
要查看是否已应用补丁:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
我正在使用Natty 11.04,这是EOL(并且我已经将/etc/apt/sources.list更新为使用old-releases.ubuntu.com),所以我必须从源代码进行构建。我想构建一个.deb,因此至少软件包管理是“意识到”的,bash版本不是默认版本。我不是100%成功的-但是,该软件包被注册为“较新的”,并且bash
二进制文件最终被修复,所以这是我所做的:
apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/
现在,在(子)目录bash-4.2/
中有:一个文件bash-4.2.tar.xz
,需要解压缩才能获取bash
源文件;还有一个名为的子目录debian
。
我进行了以下更改以避免依赖texlive
于bash-4.2/debian/control
:
Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript
...并在bash-4.2/debian/rules
:
binary-doc: bash-install #bash-doc-build
dh_testdir
dh_testroot
mkdir -p $(d_doc)/usr/share/doc/$(p)
dh_installdocs -p$(p_doc)
ifeq ($(with_gfdl),yes)
#cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
rm -f $(d_doc)/usr/share/doc-base/bashref
endif
rm -f $(d_doc)/usr/share/info/dir*
#cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
# $(d_doc)/usr/share/doc/$(p)/
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
# /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
...
要更改版本,请在此bash-4.2/
目录中执行以下操作:
bash-4.2$ dch --local patchCVE
...,并在询问时填写变更日志中的注释。这将确保调用.deb(及相关元数据)(在我的情况下)bash_4.2-0ubuntu3patchCVE1_i386.deb
。
然后,您可以尝试使用dpkg-buildpackage -us -uc
或debuild
命令进行构建。注意-这些都将重新从zip中解压缩源-因此将覆盖您可能拥有的所有补丁!不过,请运行其中之一,以便解压缩并构建源代码(debuild
由于texlive,最后可能仍会失败,但是它应该解压缩并构建源代码)。
然后,应用补丁;注意,您应该-p1
在这里使用,因为当前您在bash-4.2/
目录中:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
然后通过运行以下命令重建修补的版本:
bash-4.2$ fakeroot debian/rules build
这将重建可执行文件。测试一下:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
要生成.deb文件,请运行:
bash-4.2$ fakeroot debian/rules binary
这会将.deb文件保存在父目录中。列出他们的内容:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
要安装.deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
但是,由于某种原因,此.deb包含未修补的二进制文件(?!),因此我不得不另外执行以下操作:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
...然后,测试对我而言已正确通过:
$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test