演练

演练

即我可以在下一个最近的发行版中找到足够接近的软件包吗?还是说比较复杂,从源码编译比较好?或者我可以从 debian 获取它吗?

(这个问题至少是关于 Ubuntu 11.10 和 12.10 的;我敢打赌其他人也会遇到这个问题,所以如果建议根据具体哪个生命周期结束的 Ubuntu 而有所不同,那么说出如何做可能会有所帮助!)

PS“升级”不会被接受为答案;-)我知道,但有时退役/升级/更换服务器需要时间,我想先修补 bash。

答案1

既然您确实想继续使用官方不支持发布后,您唯一的选择就是自己支持它。

我建议获取 Ubuntu 上特定版本的源代码(无论是 11.0、12.0 还是 13.10),然后应用与官方软件包相同的补丁;作为参考,请参阅:

请注意,虽然 Bash 漏洞是媒体报道最多的漏洞,但几乎每天都有大量其他漏洞,您至少应该认真考虑订阅ubuntu-安全公告以便您始终了解它们。这对于您的情况尤其重要,因为您使用的是不受支持的版本。

答案2

Quantal(Ubuntu 12.10)的简短回答:下载并安装bash 包来自精确的存储库。

演练

对于量子(Ubuntu 12.10),我搜索 bash 包来自附近的版本。我下载了rarring和precise的软件包。

在开始之前,我对现有的 bash 软件包进行了备份,这样如果全新安装失败,我就有希望恢复我的系统。 (需要 dpkg-repack 软件包。)

$ dpkg-repack bash

尽管我可能应该将可执行文件复制/bin/bash/root/bash.vulnerable,因为这样在紧急情况下更容易恢复。

拉林

首先我尝试了来自 raring 的包裹:

$ dpkg -i bash_4.2-5ubuntu3_i386.deb

但测试结果为仍然脆弱

精确的

然后我尝试了精准包装:

$ dpkg -i bash_4.2-2ubuntu2.6_i386.deb

测试为安全的, 使用bashcheck 脚本

Testing /bin/bash ...
GNU bash, version 4.2.25(1)-release (i686-pc-linux-gnu)

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Not vulnerable to CVE-2014-6278 (lcamtuf bug #2)

但我真的希望我安装了 LTS 版本。等有时间我还是打算升级一下……

答案3

从源代码构建 bash 非常简单,您需要一个可行的 C 开发环境(gcc、binutils 等)以及termcap库和标头(默认,但您可以使用curses它)。

你应该至少在完成此操作之前,请先备份当前的bash二进制文件,最好是完整的备份或救援磁盘。根据您的操作系统,bash它可能是启动脚本的关键部分!新版本有时包含不向后兼容的行为更改。

相同的步骤顺序应该适用于 bash-2.05b 到 bash-4.3 的所有版本,只需根据需要替换“4.3”,这样您就可以在需要时坚持使用相同的版本。除非您运行的是相当古老的 bash-2.05b,它很容易受到攻击,但没有可用的官方补丁,AFAICT修复程序也已向后移植到 2.05b。

您应该仔细检查官方网站当前的补丁级别,以防万一您遇到了陈旧的镜像。

mkdir -p /usr/local/src/dist && cd /usr/local/src/dist
wget http://ftpmirror.gnu.org/bash/bash-4.3.tar.gz.sig
wget http://ftpmirror.gnu.org/bash/bash-4.3.tar.gz
wget http://tiswww.case.edu/php/chet/gpgkey.asc
gpg --import gpgkey.asc
gpg --verify bash-4.3.tar.gz.sig
cd ..
tar xzvf dist/bash-4.3.tar.gz
cd bash-4.3
mkdir patches && cd patches 
wget -r --no-parent --accept "bash43-*" -nH -nd  \
  ftp.heanet.ie/mirrors/gnu/bash/bash-4.3-patches/     # Use a local mirror
echo *sig | xargs -n 1 gpg --verify --quiet            # see note 2

cd ..
echo patches/bash43-0?? | xargs -n 1 patch -p0 -i      # see note 3 below

./configure --prefix=/usr  --bindir=/bin \             
        --docdir=/usr/share/doc/bash-4.3 \
        --without-bash-malloc            \
        --with-installed-readline

 make
 make test && make install   # see note 6

笔记:

  1. 使用本地镜像来获取补丁,ftpmirror.gnu.org 返回一个重定向,但这不适用于-r下载整个目录的选项
  2. (对于锡箔帽)gpg没有设置有用的错误代码,并且如果验证失败也不会大声抱怨,在(丰富的)输出中查找字符串“BAD”
  3. 目前有25 27 30 个针对 bash-4.3 的补丁,其中 25-30 个解决了 CVE-2014-6271 及后续相关问题。可能还会有更多补丁来解决这个问题!您可能会收到patch诸如“忽略潜在危险文件名../bash-4.3/patchlevel.h”之类的警告,这些应该是无害的,请检查是否包含 具有预期补丁级别的patchlevel.h行。#define PATCHLEVEL ...
  4. 选项configure更改了默认值/usr/local/,这意味着 make install 应该覆盖您当前的bash
  5. --without-bash-malloc选择 libc malloc,而不是更快(稍微浪费)的内部实现。这可能如果您使用可加载的 bash 模块,它会影响您,因为它可能会导致不兼容,但没有多少人使用此功能。这个包可能叫做bash 内置函数
  6. make test需要一些时间。您必须是 root 才能完成make install(通常认为以 root 身份编译软件是不好的做法)
  7. Ubuntu 是 Debian 的衍生版本,可能使用与 Debian 相同的额外补丁,请参阅这里例如。这些补丁可能包含您使用的功能。如果将补丁应用到 bash 源代码树,请参阅该debian/README文件以获取更多详细信息。
  8. 又一个陷阱,你可能还有一个 static-bash 二进制文件,你也应该重建它。为此,请从“ ./configure ...”步骤重新启动,添加--enable-static-link.

也可以看看,bashLinux From Scratch 中的构建。这开放源码软件列表是查看补丁和当前状态的好地方。

答案4

有人制作了一个 Perl 脚本来完成这个任务。

批处理脚本的 Github 存储库。

$ git clone https://github.com/sillymoose/bashfix.git
$ cd bashfix
$ chmod +x bashfix.pl
$ ./bashfix.pl
Bash version 4.2.13 detected
Created working directory /tmp/PIRKRioxmM
Downloading Bash
Downloading Patches
Bash patched to level 52
Bash fully patched!
Configuring Bash ...
Building and testing Bash ...
Success. New Bash binary built!
Making backup copy of /usr/bin/bash at /usr/bin/bash.bak
Making backup copy of /bin/bash at /bin/bash.bak
Bash version 4.2.52 is now installed

相关内容