RSS Feed
更好更安全的互联网

破壳漏洞(ShellShock)应急概要 最终版V4

2014-10-15

  本文PDF下载:破壳漏洞(ShellShock)应急概要 V4

 

密级 公开

 

 

 

破壳漏洞(ShellShock)应急概要v4

 [第四版 2014/10/14 晚]

 

 

logo

 

 

 

 

 

知道创宇安全研究团队

 

1. 更新情况

版本 时间 描述
第一版 2014/9/26 中午 第一版完成。
第二版 2014/9/26 下午 1. 新增:加速乐防御平台的攻击统计细节;
2. 完善:修复建议;
第三版 2014/9/27 下午 1. 破壳漏洞官网出现:shellshocker.net
2. 更新:漏洞概要;
3. 新增:补丁绕过后(CVE-2014-7169)的漏洞源码级分析;
4. 新增:ZoomEye第四组数据:QNAP NAS漏洞情况;
5. 新增:ZoomEye第五组数据:CheckPoint安全网关漏洞情况;
6. 完善:修复建议;
7. 新增:相关资源链接;
第四版 2014/10/14 晚 1. 更新:漏洞概要,添加更多漏洞说明;
2. 新增:ZoomEye第六组数据:Mirapoint邮件服务器漏洞情况;
3. 新增:ZoomEye第七组数据:AVAYA IP电话漏洞情况;
4. 更新:ZoomEye各组数据;
5. 完善:其他结论;

2. 漏洞概要

2014年9月24日,Bash惊爆严重安全漏洞,编号为CVE-2014-6271,该漏洞将导致远程攻击者在受影响的系统上执行任意代码。

GNU Bash是一个为GNU计划编写的Unix Shell,广泛使用在Linux系统内,最初的功能仅是一个简单的基于终端的命令解释器。

2.1. 漏洞描述

GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash Shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在Shell被调用后会被立即执行。

以下几点值得特别注意:

  • 这个漏洞的英文是:ShellShock,中文名被XCERT命名为:破壳漏洞。
  • 来自CVSS的评分:破壳漏洞的严重性被定义为10级(最高),今年4月爆发的OpenSSL“心脏出血”漏洞才5级!
  • 破壳漏洞存在有25年,和Bash年龄一样。

2.2. 漏洞影响

GNU Bash <= 4.3,此漏洞可能会影响到:

注:以下几点参考自:

https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x07_DNFWAH_shellshock_bash_story_cve-2014-6271.txt,且结论经过我们验证有效。

  • 在SSHD配置中使用了ForceCommand用以限制远程用户执行命令,这个漏洞可以绕过限制去执行任何命令。一些Git和Subversion部署环境的限制Shell也会出现类似情况,OpenSSH通常用法没有问题。
  • Apache服务器使用mod_cgi或者mod_cgid,如果CGI脚本在BASH或者运行在子Shell里都会受影响。子Shell中使用C的system/popen,Python中使用os.system/os.popen,PHP中使用system/exec(CGI模式)和Perl中使用open/system的情况都会受此漏洞影响。
  • PHP脚本执行在mod_php不会受影响。
  • DHCP客户端调用Shell脚本接收远程恶意服务器的环境变量参数值的情况会被此漏洞利用。
  • 守护进程和SUID程序在环境变量设置的环境下执行Shell脚本也可能受到影响。
  • 任何其他程序执行Shell脚本时用Bash作为解释器都可能受影响。Shell脚本不导出的情况下不会受影响。

2.3. 漏洞验证

可以使用如下命令来检查系统是否存在此漏洞(在本机Bash环境下运行):

破壳1CVE-2014-6271,测试方法:


env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

如执行结果如下表明有漏洞:


vulnerable
this is a test

注:CVE-2014-6271的漏洞源码级分析请参考:

http://blog.knownsec.com/2014/09/bash_3-0-4-3-command-exec-analysis/

破壳1被修补后,又被绕过,出现了破壳2。

破壳2CVE-2014-7169,测试方法:

env -i  X='() { (a)=>\' bash -c 'echo date'; cat echo

如执行结果如下则仍然存在漏洞:

bash: X: line 1: syntax error near unexpected token ='bash: X: line 1: 'bash: error importing function definition for `X'Wed Sep 24 14:12:49 PDT 2014

注:CVE-2014-7169的漏洞源码级分析请参考:

http://blog.knownsec.com/2014/09/bash_3-0-4-3-command-exec-patch-bypass-analysis/

 

除了这两个最受关注的破壳CVE外,在shellshocket.net上还看到了其他几个,相比之下影响会小很多,这里也简单说明下:

破壳3CVE未知,测试方法:

env X=' () { }; echo vulnerable' bash -c 'date'

如果上面命令输出“vulnerable”,就意味着有漏洞。

这个和破壳1很像,没CVE,不做评价。

破壳4CVE-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”,就意味着有漏洞。

破壳5CVE-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”,就意味着有漏洞。

破壳6CVE-2014-6278,测试方法:

shellshocker='() { echo vulnerable; }' bash -c shellshocker

如果上面命令输出“vulnerable”,就意味着有漏洞,否则会提示shellshocker未找到命令。

这个更像bash特性,居然当成了漏洞。

破壳7CVE-2014-6277,测试方法:

bash -c "f() { x() { _;}; x() { _;} <<a; }" 2>/dev/null || echo vulnerable

如果上面命令输出“vulnerable”,就意味着有漏洞。

前两个破壳漏洞(尤其是第一个:CVE-2014-6271),影响面很直接很广,备受关注。之后的破壳漏洞在实际的测试过程中,发现比较鸡肋,但这说明一个很严重的问题:存在25年的Bash,并未经历真正的安全考验,这些全球流行的开源组件,恐怕都会存在这类安全问题。

3. ZoomEye应急概要

这个破壳漏洞确实是一个危害极大的漏洞,胜于今年4月8号爆发的“心脏出血”,但破壳漏洞的探测方式很复杂,不同的组件测试方式有所区别,很难评估一个影响面,但是可以肯定的是Bash<=4.3版本都受影响,而Bash在至少百亿级别数量的设备上使用,因为Bash是最流行的Linux Shell。

来自知道创宇的ZoomEye团队(钟馗之眼网络空间探知系统)通过几种方式的组合检测,得到了些影响结论。

注意:以下这些影响都是可被直接远程攻击的,属于高危级别!

3.1. 第一组数据

2014/9/26

我们发现深信服的应用交付管理系统存在破壳漏洞,经过ZoomEye的特殊探测,大陆地区范围内有13254台设备受到破壳漏洞影响,可被直接远程攻击。

利用破壳漏洞,可以直接拿到服务器root权限:

图片1

2014/10/6

再次对这13254台漏洞设备进行验证,发现还有908台未修补,修补率是93.1%

2014/10/14

第三次进行验证,发现还是908台未修补,看来这些设备被遗忘了?

3.2. 第二组数据

2014/9/26

经过ZoomEye的Fuzzing探测,Fuzzing列表如下:


/cgi-bin/load.cgi
/cgi-bin/gsweb.cgi
/cgi-bin/redirector.cgi
/cgi-bin/test.cgi
/cgi-bin/index.cgi
/cgi-bin/help.cgi
/cgi-bin/about.cgi
/cgi-bin/vidredirect.cgi
/cgi-bin/click.cgi
/cgi-bin/details.cgi
/cgi-bin/log.cgi
/cgi-bin/viewcontent.cgi
/cgi-bin/content.cgi
/cgi-bin/admin.cgi
/cgi-bin/webmail.cgi

全球大概存在142000主机受影响,需要注意的是由于Fuzzing规则不完备,得到的数量肯定会不完备,但这个数字至少可以看到可被直接远程攻击利用的面很大。

3.3. 第三组数据

2014/9/26

我们看到masscan的官方发布了消息:

http://blog.erratasec.com/2014/09/bash-shellshock-bug-is-wormable.html

他们全球探测的结论是:至少150受影响,而这验证规则很简单,仅对主机的80端口进行直接请求,这个结论我们也在验证。

3.4. 第四组数据

2014/9/26

2014/10/6

我们发现QNAP公司的NAS存储设备存在破壳漏洞,ZoomEye针对QNAP  NAS的8080端口进行大规模探测,目前的进度如下:

国家/地区 9/26 受影响数量(台) 10/6 受影响数量(台) 修复率
大陆 1010 421 58.3%
台湾 4579 2020 55.9%
美国 4633 2363 49.0%
香港 2492 1284 48.5%
日本 5158 2708 47.5%
韩国 2130 1463 31.3%

利用破壳漏洞,可以拿下QNAP NAS的admin权限(最高):

图片2

从上面图表的修复率可以看到,相比第一组通报过的数据,QNAP NAS的修复率平均不到49%。这反应慢了很多。

3.5. 第五组数据

2014/9/27

我们发现CheckPoint安全网关等产品存在破壳漏洞,ZoomEye针对CheckPoint相关设备的80端口进行大规模探测,在大陆地区发现71受影响设备。

利用破壳漏洞,可以拿下CheckPoint相关设备root权限:

图片3

2014/10/14

再次验证后发现还有52台受影响。

3.6. 第六组数据

2014/9/27

我们发现Mirapoint邮件服务器(Message Server)存在破壳漏洞,ZoomEye针对Mirapoint邮件服务器的443端口进行大规模探测,在大陆地区发现36台受影响设备。乌云网站针对该设备漏洞也进行报道,并发布了漏洞预警。

利用破壳漏洞,可以直接拿下Mirapoint邮件服务器权限,并能轻易提权为root。

2014/10/14

再次验证后发现还有5台受影响。

3.7. 第七组数据

2014/10/6

通过XCERT内部的反馈,我们验证了AVAYA IP电话存在破壳漏洞的事实,ZoomEye针对AVAYA IP电话的443端口进行大规模探测,在大陆地区发现4台受影响设备。

利用破壳漏洞,可以直接拿下AVAYA IP电话服务器权限。

2014/10/14

再次验证后发现这4台还未修补。

 

可以从这几组数据看到,探测方式各不相同,如果继续扩展可以逐步描绘出越来越清晰的影响面(可直接远程攻击),更多成果还在继续。

通过这几组数据还可以得出一个结论:一些没曝光/通报的设备,修补效率很低;一些已经曝光/通报的设备,也没法做到100%修补。

4. 加速乐云防御平台应急概要

截止时间2014/9/26 12:00的统计如下:

来自知道创宇加速乐团队的应急情况,拦截了1759次破壳漏洞攻击!

下图为2014/9/25破壳漏洞按小时活跃趋势图:

QQ图片20141015161422

从图中可见,加速乐云防御平台在漏洞爆发之前就已经添加规则。

2014/9/25拦截情况如下:

  • 总共拦截数:1,759次
  • 受攻击站点数:214个
  • 攻击成功站点数:0个
  • 发起攻击IP数:6个

从加速乐云防御平台可以侧面看出,这种漏洞的疯狂情况。

5. 其他结论

通过我们连夜分析,还有一些可靠结论可以作为参考:

5.1. 破壳漏洞的蠕虫已经开始全球蔓延,应该是利用masscan来进行大规模植入的。

蠕虫代码在这:

https://gist.github.com/anonymous/929d622f3b36b00c0be1

更多关于破壳蠕虫信息,可以参考安天的分析:

《“破壳”漏洞相关恶意代码样本分析报告——“破壳”相关分析之二》

http://www.antiy.com/response/Analysis_Report_on_Sample_Set_of_Bash_Shellshock.html

5.2. DHCP服务受影响,这个意味着这个破壳漏洞绝不仅Linux服务器的事!

POC细节在这:

https://www.trustedsec.com/september-2014/shellshock-dhcp-rce-proof-concept/

http://d.uijn.nl/?p=32

5.3. 基于SIP协议的破壳漏洞扫描也开始了!

https://github.com/zaf/sipshock

5.4. 在特定的配置下,OpenVPN也存在破壳漏洞。

http://www.darknet.org.uk/2014/10/openvpn-vulnerable-to-shellshock-exploit/

5.5. 全球范围内关于破壳漏洞利用已公布的细节可以在这看到:

https://github.com/mubix/shellshocker-pocs

一些邮件服务如:Exim、Qmail、Procmail、Postfix等。

一些大厂商:Cisco、Juniper、cPanel等。

6. 修复建议

现在可以按照下面方式进行Bash的升级修复:

操作系统 升级方式
Ubuntu/Debian apt-get update
apt-get install bash
RedHat/CentOS/Fedora yum update -y bash
Arch Linux pacman -Syu
OS X brew update
brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash
MacPorts sudo port self update
sudo port upgrade bash

 

建议升级后按上面的方法诊断是否补丁完全。

7. 相关资源链接

2条评论

  1. veryarm说道:

    嗯,不错,www.veryarm.com 支持活动

  2. Jazz说道:

    根据知道创宇对破壳7,CVE-2014-6277的测试方法描述,只要结果中输出“vulnerable”,就意味着有漏洞,因此我在本地测试后输出以下信息:
    Segmentation fault (core dumped)
    vulnerable
    但是在使用curl https://shellshocker.net/shellshock_test.sh | bash来测试的时候,系统输出:
    CVE-2014-6277 (segfault): not vulnerable
    那么问题来了,请问为什么两者检测的结果不一样呢,顺便问一下,挖掘技术哪家强?

发表评论