如何在无法升级的过时的Ubuntu系统上修补shellshock漏洞?


22

我有一个可以远程管理(距离2个时区)的系统,该系统运行Ubuntu 9.04 Jaunty。由于各种原因,主要是我对尝试从如此遥远的地方进行发行版升级确实持怀疑态度,因此我无法将其升级到最新版本。显然,它不再受支持,也没有任何官方补丁。是否提供有关如何修补代码并自己重新编译bash来消除shellshock漏洞的说明?


5
您对此主题做了什么研究?最简单的解决方案可能是自己重建和修补。 您可能只需要接受一次更新服务器的时间即可。
Ramhound

是的,这是我的后备选项。服务器即将淘汰,我只是想让它保持运转,直到有钱更换它。如果我在现场,我会硬着头皮做更新,但我很少遇到麻烦,并且无法动手,如果没有,我宁愿冒险至。
克劳斯

只要在页面上获得一些关键字,人们就可以找到它。根据在arstechnica.com/security/2014/09/…

1
如果不打补丁,“ lim步”将迅速改变。非常清楚,您正在使用五年前发行的发行版。支持在2010年10月结束。您还有更多的漏洞需要担心。
tedder42 2014年

Answers:


29

AskUbuntu那里窃取了此信息,有人从Hacker News那里窃取了它。为我在两台旧服务器上工作

mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 28); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 28);do patch -p0 < ../bash43-$i; done
#build and install
./configure --prefix=/ && make && make install
cd .. 
cd ..
rm -r src

更新:我只是注意到,如果您不添加--prefix=/到configure命令/usr/local/bin/bash,则最终将是最新的,并且/bin/bash仍然容易受到攻击。


脚本中有一个错误:“ 0 25”序列应为“ 1 26”。如果您正在阅读并能够编辑答案,请对其进行更新。谢谢!
joelparkerhenderson 2014年

尽管./configure --prefix=/ && make运行良好,但make install似乎需要sudo
Stewart

感谢您将它放在那里-一种在迁移时修补事物的公平方法。有些人有很多虚拟机,重建每个虚拟机是不现实的。将其用作即时修复程序,同时通过进行更新的安装来解决更长远的问题是关键。
Jas Panesar 2014年

@ rubo77现在必须是1 27(新的27补丁是最重要的)
joelparkerhenderson 2014年

1
添加了补丁28。这确实可以修复CVE-2014-7186 / 7187漏洞。
unkilbeeg 2014年

2

还有一种解决方案,将您的sources.list更新为最新版本,然后使用apt-get仅升级bash。这真的很快,我已经写了一篇有关它的文章。这基本上是您要做的:

升级到最新的Ubuntu'trusty'apt-get存储库(如果使用URL,可能还需要更改old-repositories.ubuntu.com URL,请查看链接文章):

sudo sed -i 's/YOUR_OS_CODENAME/trusty/g' /etc/apt/sources.list

升级bash /应用修复程序:

sudo apt-get update
sudo apt-get install --only-upgrade bash

并可能改回apt-get存储库。


完美地工作!
Peter Kruithof 2014年

-1

该命令应该是

sudo apt-get update && sudo apt-get install --only-upgrade bash

2
这无济于事;正如OP所说,它不再受支持,因此不会升级bash。
Andrew Ferrier 2014年

-3

一个简单的选择就是不使用bash。确保dash已安装,并且这/bin/sh是的符号链接dash,而不是bash。(这是Debian某些版本的默认设置,但是我不确定Ubuntu。)如果您具有使用强制命令进行ssh访问的用户帐户,则也需要更改其登录shell。您可能还需要使用bash显式检查任何脚本。grepping #!/bin/bash应该可以找到它们。


5
有点像说,“我们发现您可以在C ++中出现段错误,而只需使用Java即可...”
DevSolar 2014年

3
一个更接近的类比是告诉遇到GCC错误的人尝试使用clang。两者都实现相同的语言(具有不同但有时重叠的非标准扩展集),并且实际的需求不太可能是“ bash”,而是“ shell解释器”。
R.,

就像您说的那样,有些脚本可以显式使用bash。即使您对使用bash的现有文件进行grep操作,将来也可能有人向使用bash的系统中显式添加新脚本。使用busybox(/ bin / sh指向busybox)但也安装了bash的嵌入式系统也是如此。最好的办法是在易受攻击的系统中更新bash。
jcarballo 2014年

大多数Unix / Linux脚本需要bash或其他一些现代的shell,例如ksh或zsh。它们具有许多功能,人们会以任何语言来期望它们,但是这些功能并没有出现在“裸露的骨头”外壳中,例如(BusyBox)ash / Dash / sh(original)。这些较简单的外壳仅具有较大外壳的功能的20-30%,这使其变得更快。但是,它们需要对许多常见操作(例如高级字符串处理和模式匹配)广泛使用外部实用程序。Bash等可以运行ash等。脚本。但反之亦然。
DocSalvager 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.