题 如何测试我的服务器是否容易受到ShellShock漏洞的攻击?


如何确保我的Bash安装不易受到攻击 弹震 更新后的错误?


77
2017-09-25 14:25




看到 是否有一个简短的命令来测试我的服务器是否可以抵御shellshock bash错误? - Martin Schröder
请注意,bash中还有两个其他漏洞仍未修补(CVE-2014-7186和CVE-2014-7187)。 - Deer Hunter
在Deer Hunter发表评论后不久,修补CVE-2014-7186和CVE-2014-7187的补丁即可用。如果您有CVE-2014-7169的发行版提供补丁,您可能已经足够阻止7186/7187,请使用以下命令测试您的系统并查看。还要检查发行版的更多安全更新。 - BeowulfNode42


答案:


检查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。同样,我不是百分之百确定这个测试,因为我不再有任何未修补的系统。

env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"

此测试的通过是它应该只回显文本 testing CVE-2014-6278。如果你的回声 hi mom 任何绝对失败的地方。


83
2017-09-26 07:49



我们可以添加一般测试吗? foo='() { echo not patched; }' bash -c foo 这个?在将函数导出放在单独的命名空间中之前,我们不会停止从一个解析器错误运行到下一个。 - billyw
该测试是否有CVE?你有任何参考来描述这个问题吗?此类信息也可能属于关于shellshock的其他问题之一,因为此问题是关于如何测试现有补丁的成功或失败。 - BeowulfNode42
这是来自Michal Zalewski关于一些即将推出的Shellshock CVE的博客文章(lcamt​​uf.blogspot.com/2014/09/...)。这是他对CVE-2014-6278的建议测试,该测试仍然是非公开的。但是,考试的普遍性似乎我错了;我已经遇到过Zalewski测试通过但CVE-2014-7187测试失败的情况。 - billyw
以下是CVE-2014-6277和CVE-2014-6278的完整信息,以及检查它们的命令: seclists.org/fulldisclosure/2014/Oct/9 - billyw
需要注意的一点是:即使BASH的版本容易受到攻击,如果没有使用它(即守护进程使用的所有帐户,例如“www”或“cups”或其他等)都配置了BASH作为其默认shell,并且没有您的代码调用system()等,具有易受攻击的版本可能风险较小,但仍然尽快升级BASH。 - DTK


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

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

现在执行一个简单的echo来查看Bash是否会评估$ testbug中的代码,即使你自己没有使用过该变量:

$ bash -c "echo Hello"
VULNERABLE
Hello

如果它显示“VULNERABLE”字符串,答案显而易见。否则,你不必担心,你的修补版本的Bash是可以的。

请注意主要Linux发行版已发布多个修补程序,有时它们无法完全修复此漏洞。继续检查安全建议和 CVE条目 对于这个bug。


32
2017-09-25 14:25



除了CVE-2014-6271之外,Red Hat的不完整修复程序还有其自身值得关注的内容: CVE-2014-7169。 - DocMax
即使您使用备用登录shell(可能不知道),也不会污染您的shell env的单线程 export): env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello" - Lloeki
这里有一些Ubuntu的具体细节 askubuntu.com/questions/528101/...  - 我个人不得不从Ubuntu 13.10升级到14.04以解决问题 - dodgy_coder


ShellShock实际上是 bash多个漏洞的结合,和 此时还有利用此漏洞的malaware所以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
2017-09-29 14:43





我写了一个名为CLI的实用工具 ShellShocker 测试您的Web服务器上的CGI脚本漏洞。 要测试您的网站,您需要运行:

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

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

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


2
2017-09-26 17:24



你的链接已经死了 - SSK
@SSK对不起;)Mistype。 - Liam Marshall
你的链接还没死。 - Mxx
是的,抱歉,我把它拿下来了。它以我不喜欢的方式被剥削。 - Liam Marshall


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

http://shellshock.iecra.org


1
2017-09-25 20:46



提供downvotes的理由是礼貌的。 - David
“我们记录所有扫描”???爬行。我下载了python并自己运行它。 - Brad
@brad至少他们告诉你了。我敢肯定,如果我提供提供此服务的白帽安全服务,我可能会保留一个日志(如果只是一个没有个别详细信息的计数器),有多少人盲目地将他们的网站详细信息输入到一个网站,说它要去试图进行渗透测试,而不太了解提供测试的网站的真实性......他们想要一个测试人员的日志,以防万一有人使用他们的服务找到属于他人的易受攻击的网站...... - Rob Moir


type env x ='(){:;};回应易受攻击的'bash -c“回声这是一个测试”,如果这会导致易受攻击,这是一个测试,这意味着你的OSX / Linux机器会受到影响。 补救措施是更新到最新版本的bash。


-1
2017-09-27 11:33



为什么以root身份?完全没必要。 - Mat