如何测试我的服务器是否容易受到ShellShock错误的影响?


80

更新后,如何确保Bash安装不再受到ShellShock错误的攻击?



请注意,bash中还有两个其他漏洞尚未修补(CVE-2014-7186和CVE-2014-7187)。
Deer Hunter

在Deer Hunter发表评论后不久,即可修复CVE-2014-7186和CVE-2014-7187的修补程序。如果您具有CVE-2014-7169发行版提供的修补程序,则您可能已经足够阻止7186/7187,请使用以下命令测试系统,然后查看。还要检查发行版的更多安全更新。
BeowulfNode42 2014年

Answers:


83

检查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

它应该说出日期一词,然后发出类似的信息来抱怨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任何地方,那肯定是失败的。


1
我们可以在其中添加常规测试foo='() { echo not patched; }' bash -c foo吗?在将函数导出放置在单独的命名空间中之前,我们不会停止从一个解析器错误运行到下一个解析器错误。
billyw 2014年

该测试有CVE吗?您是否有任何参考文献来描述此问题?同样,由于此Q与如何测试现有补丁的成功或失败有关,因此此类信息可能属于关于shellshock的其他问题之一。
BeowulfNode42 2014年

这来自Michal Zalewski在即将发布的Shellshock CVE上的博客文章(lcamt​​uf.blogspot.com/2014/09/…)。这是他针对CVE-2014-6278的建议测试,该测试仍未公开。但是,我似乎对测试的一般性是错误的。我已经遇到过Zalewski的测试通过但CVE-2014-7187测试失败的情况。
Billyw 2014年

以下是CVE-2014-6277和CVE-2014-6278的完整披露,以及检查它们的命令:seclists.org/fulldisclosure/2014/Oct/9
billyw 2014年

值得注意的一点:即使BASH版本易受攻击,如果没有使用它(即,守护程序使用的所有帐户,例如“ www”或“ cups”等),都将BASH配置为其默认外壳,并且没有您的代码调用了system()或类似的代码,具有漏洞版本的风险可能较小,但仍应尽快升级BASH。
DTK 2014年

32

导出特制的环境变量,该变量将由易受攻击的Bash版本自动评估:

$ export testbug='() { :;}; echo VULNERABLE'

现在执行一个简单的回显以查看Bash是否会评估$ testbug中的代码,即使您自己没有使用过该变量也是如此:

$ bash -c "echo Hello"
VULNERABLE
Hello

如果显示“ VULNERABLE”字符串,答案很明显。否则,您不必担心,您的Bash修补版本就可以了。

请注意,主要的Linux发行版已经发布了多个补丁,有时它们不能完全修复该漏洞。继续检查安全公告和CVE条目是否存在此错误。


5
除了CVE-2014-6271之外,来自Red Hat的不完整修复程序也有其自身的缺陷,值得关注:CVE-2014-7169
DocMax 2014年

3
即使“您使用备用登录外壳程序(可能不知道export)”,它也不会污染您的外壳环境并且碰巧可以运行的env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello"
单线

1
这里有一些特定于Ubuntu的详细信息askubuntu.com/questions/528101/…-我个人必须从Ubuntu 13.10升级到14.04才能解决此问题
dodgy_coder 2014年

2

ShellShock实际上是bash多个漏洞的结合,并且此刻还有恶意软件利用了此漏洞,因此ShellShock可能是一个尚待解决的问题,RedHat有一个线程对此问题进行了更新

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

2

我编写了一个名为ShellShocker的CLI实用程序,以测试您的Web服务器是否存在CGI脚本中的漏洞。要测试您的网站,请运行:

python shellshocker.py <your-server-address>/<cgi-script-path>

python shellshocker.py http://example.com/cgi-bin/possibly-vulnerable-script.cgi

编辑:此实用程序已被删除,抱歉:'(


您的链接已死
SSK

@SSK对不起;)类型错误。
利亚姆·马歇尔

您的链接仍然无效。
Mxx 2014年

是的,对不起,我记下了。它以我不喜欢的方式被利用。
利亚姆·马歇尔

1

您可以将CGI URL提交到此在线测试:

http://shellshock.iecra.org


4
提供拒绝理由是有礼貌的。
大卫

4
“我们记录所有扫描” ???爬行。我会下载python并自行运行。
布拉德

1
@brad至少他们在告诉你。我确定如果我提供的白帽安全服务提供了该服务,那么我很可能会保留一个日志(如果只有一个没有个人详细信息的柜台),记录有多少人盲目将其网站详细信息输入表示正在访问的网站尝试进行渗透测试,而又不十分了解提供该测试的网站的真实性……而且,他们希望得到谁进​​行测试的日志,以防有人使用其服务来查找属于他人的易受攻击的网站……
罗伯·摩尔

-1

输入env x ='(){:;}; echo易受攻击的bash -c“ echo this is a test”,如果此命令返回易受攻击的状态且这是测试,则表明您的OSX / Linux计算机受到了影响。补救措施是将bash更新到最新版本。


6
为什么以root身份?完全没有必要。
马太福音
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.