如何在“shellshock”之后修补 OSX 上的 Bash?

信息安全 苹果系统 炮击
2021-08-18 07:16:02

我的 Mac 很容易受到攻击,正如此测试所示:

x='() { :;}; echo VULNERABLE' bash -c :来源

我正在使用它附带的 bash 版本。我也使用自制软件。修补 Bash 的首选方法是什么?

3个回答

首先,除非您从 Mac 向公共 Internet 提供 Web 服务,否则您不需要这样做。如果不是,请等到 Apple 发布官方安全更新。

但是,如果您提供 Web 服务,则可能需要更新。

官方补丁

Apple 在此处发布了官方 Bash 安全更新

检查您是否易受攻击

要确认您使用的是过时的 bash: $ which bash /bin/bash $ /bin/bash --version GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc.

最新的 bash 是 4.3.25

非官方更新方法:使用 Homebrew 从源代码编译 Bash

如果您没有安装 Xcode,则需要 Xcode 命令行工具,可以通过以下方式安装 $ xcode-select --install

或者从开发者门户https://developer.apple.com/downloads/index.action?=command%20line%20tools下载command_line_tools_for_osx_10.9_september_2014.dmg

要安装 Brew ( http://brew.sh ): $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后做: $ brew doctor 如果有问题,请按照任何说明进行操作。许多常见问题在http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/#troubleshoot-homebrew

然后将 brew 更新到最新的软件包列表: $ brew update

要获取最新的 bash 4.3.25: $ brew install bash

这会将 bash 安装到 /usr/local/Cellar/bash/4.3.25/bin/bash

旧的bash并且sh仍然存在于/bin,因此在安装后您将旧的可执行文件重命名为新文件。 $ sudo mv /bin/bash /bin/bash_old $ sudo mv /bin/sh /bin/sh_old

如果你非常偏执,你可以删除执行权限 bash_old $ sudo chmod a-x /bin/bash_old /bin/sh_old

然后创建一个符号链接到 brew 安装的新 bash 4.3.25。 $ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash $ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

重启就完成了。

一个警告——这可能会破坏一些现有的 shell 脚本,这些脚本可能依赖于 bash 3.2 或 Macsh在 linux上的差异sh从https://apple.stackexchange.com/questions/146849/how-do-i-recompile-bash-to-avoid-the-remote-exploit-cve的来源替换 bash 和 sh 有一个更复杂的答案 -2014-6271-和-cve-2014-7

在大多数情况下,最好等待官方更新。

——克里斯托弗·艾伦

在执行以下步骤之前,请检查 brew 中的 bash 版本:

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

bash 版本目前已更新至 4.3.27。如果您仍将 4.3.25 链接到 /bin/bash,则您的 Mac 不应启动。如果你这样做了,你可以启动到恢复模式并将 /bin/bash_old 复制到 /bin/bash 并将 /bin/sh_old 复制到 /bin/sh。

我在 brew 中的 bash 版本是 4.3.27,所以这对我有用:

$ sudo ln -s /usr/local/Cellar/bash/4.3.27/bin/bash /bin/bash

$ sudo ln -s /usr/local/Cellar/bash/4.3.27/bin/bash /bin/sh

不好,还是很脆弱!

bash-4.3$ brew upgrade bash 错误:bash-4.3.25 已经安装

bash-4.3$ /usr/local/Cellar/bash/4.3.25/bin/bash bash-4.3$ env x='() { :;}; echo 易受攻击' bash -c "echo 这是一个测试"

易受伤害的

这是一个测验