指向,一个网址,网址是,http://www.exploit-db.com/exploits/34765/。
表3-2部分主要漏洞影响平台及版本
操作系统
版本
解决方案
Red Hat Enterprise Linux
4 (ELS)
Red Hat企业版Linux 4,扩展生命周期支持,bash - 3.0为版本号,27为版本内编号,el4.2为相关标识。
红帽企业版Linux 5,-,bash减3点2减33点el5点1。
红帽企业版Linux 5.6长期支持版本 - 提供bash-3.2,版本为24.el5_6.1,有此版本号,是该系统特定版本的标识。
红帽企业版Linux 6,-,bash-4.1.2-15.el6_5.1。
Red Hat企业版操作系统Linux 6.2的高级更新支持,- 名为bash - 4.1.2 - 9.el6_2.1的程序。
红帽企业版 Linux 6.4,进行扩展更新支持,涉及 bash-4.1.2-15.el6_4.1。
红色帽子企业版Linux 7,破折号,bash减4点2点45减去5点el7_0点2。
CentOS
bash-3.2-33.el5.1
bash-4.1.2-15.el6_5.1
bash-4.2.45-5.el7_0.2
Ubuntu
10.04
bash 4.1-2ubuntu3.1
12.04
bash 4.2-2ubuntu2.2
14.04
bash 4.3-7ubuntu1.1
Fedora
19
bash-4.2.47-2.fc19
20
bash-4.2.47-4.fc20
21
bash-4.3.22-3.fc21
Debian
4.1-3
4.1-3+deb6u1
4.2+dfsg-0.1
4.2+dfsg-0.1+deb7u1
4.3-9
4.3-9.1
Amazon Linux AMI
bash-4.1.2-15.19
Mac OS X
10.10
注3:也可到
可前往,http://ftp.gnu.org/pub/gnu/bash/这个网址,去开展下载的操作。
4.漏洞的影响范围
安天CERT目前已验证,在Red Hat中,有存在CVE - 2014 - 6271漏洞的Bash版本,在CentOS中,也有存在该漏洞的Bash版本,在Ubuntu中同样如此,在Fedora中,也拥有存在此漏洞的Bash版本,在Amazon Linux中,也存在存在该漏洞的Bash版本,在OS X 10.10中,也拥有存在此漏洞的Bash版本。同时,因为Bash在各主流操作系统广泛应用,所以此漏洞影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,并且针对这些操作系统管理下的数据,均存在高危威胁。针对漏洞的利用途径,会借助和Bash交互的诸多应用来进行开展,这些内容涵盖了HTTP,还包括OpenSSH,另外也有DHCP等。
安天CERT现今进行抽样予以验证,眼下出厂预装的Android操作系统,暂时不能够支持ENV命令,由此能够推测出,针对Android操作系统而言,受到此漏洞影响的可能性是比较小的。
5.漏洞原理
当前所使用的Bash,其借助函数名称来调用环境变量,这会致使漏洞出现问题,即当以“{”开头定义的环境变量,在命令ENV里解析成函数后,Bash执行时并未呈现退出状态,而是接着执行解析以及执行shell命令的后续操作。并且,其核心缘由在于,于输入的过滤环节,既没有对边界进行严格的限定,又没有开展合法化的参数判断。
其中,在补丁里面,主要针对参数展开了合法性过滤的操作,补丁程序于/builtins/evalstring.c的parse_and_execute函数那儿,针对输入的command做了合法性的边界检测,以此把代码注入可能存在的那样一种情况给排除,能排除掉是因为在排除这个行为里,主要运用了flags的两次判断以及command的一次类型匹配,为了让flags判断得精确无误,在补丁当中预先定义了SEVAL_FUNCDEF、SEVAL_ONECMD这两个标识,把它们当做判断的依据。針對此漏洞所做的三處補丁更新,主要是給輸入的command起到過濾效果 ,作用是有的 ,效果是存在的。
/builtins/common.h
定义一个名为SEVAL_FUNCDEF的宏,其值为0x080,该宏的作用是仅允许函数定义。
#define SEVAL_ONECMD,0x100,此为仅允许单个命令的定义。
/builtins/evalstring.c
要是(标志与SEVAL_FUNCDEF相按位与)并且命令的类型不是厘米函数定义, 则。

对于“%s: ignoring function definition attempt”,发出内部警告,此警告涉及来自文件from_file的情况。
should_jump_to_top_level = 0;
上一次的结果 等于 `last_command_exit_value`,而 `last_command_exit_value` 却又等于 `EX_BADUSAGE`。
break;
/builtins/evalstring.c
if (flags & SEVAL_ONECMD)
break;
从上文所阐述的那个漏洞原理能够知晓,漏洞的根本原因是在Bash的ENV命令实现那里存在着,所以漏洞自身是没办法直接致使远程代码执行的。要是想要达成远程代码执行这个目的,那就必须借助第三方服务程序当成媒介才能够达成,第三方服务程序也得要满足好多条件才可以充当此媒介的角色。比如说,安天CERT已经验证第三方服务程序apache2是可以充当此媒介的,其CGI组件具备对远程的访问并且调用Bash的ENV命令用来访问数据解析的功能。实现的具体方式是什么呢,可参照图5-1:展示CVE-2014-6271漏洞怎样达成远程代码执行的原理示意的图呢。
图5 - 1,关于CVE - 2014 - 6271漏洞,其实现远程代码执行的原理示意图。
6.漏洞验证方法
目前的Bash脚本,是以导出环境变量的这个方式,来支持自定义函数的,同时,也能够把自定义的Bash函数传给子相关进程。通常情况下,函数体内的代码是不会被执行的,然而,此漏洞却会错误地去执行“{}”花括号外的命令。安天CERT针对“破壳”漏洞做了细致的验证,其中涵盖本地验证、远程模拟验证以及远程真实验证。远程验证是通过提供开启CGI的httpd服务器来进行测试的。当执行CGI的时候,会调用Bash,把Referer、host、UserAgent、header等当作环境变量来处理。另外安天CERT还开展了DHCP等借助“破壳”漏洞攻击的模拟以及攻击方法的验证。
6.1 本地验证方法
在shell中执行下面命令:
执行命令之后,要是显示VulnerableCVE - 2014 - 6271,那就表明系统有着漏洞,能够将echo VulnerableCVE - 2014 - 6271改变成任意命令去展开执行。
a.Linux Debian操作系统漏洞验证如下:
b.苹果操作系统(OS X 10.10)漏洞验证如下:
6.2远程验证方法
a.模拟验证方法:此方法适合进行原理验证。
1) Ubuntu下安装及配置apache服务器
l 安装apache2服务器
#sudo apt-get install apache2
配置文件位于
位于 /etc 目录下的 apache2 文件夹中的 sites - enabled 子文件夹里的 000 - default 文件。
对 /etc/apache2/sites-enabled/000-default 实行权限设置,设置为 #sudovi 所对应的权限状况。表示语句结束。
DocumentRoot /var/www/html
将ScriptAlias设置为,把/cgi-bin/ ,对应到 /var/www/html/cgi-bin/。
2) 编写WEB服务端测试文件
给 /var/www/html/cgi-bin/test.sh 设置权限名为 #sudovi。
#!/bin/bash
说出,“内容类型:纯文本超文本标记语言”。
echo ""
#使用超级用户权限,进入到/etc/init.d/目录下,对名为apache2的服务执行重启操作。
3) 远程测试
可以将命令里可改变的部分,也就是 `a=`/bin/cat /etc/passwd`;echo $a`,变为任意命令,然后去进行执行。
其b,属于真实验证的方法,这种相应手段,是适合于那般行使互联网管理职能工作的部门,去开展互联网普查之类相关工作的。
对于可能存在漏洞的网站,借助搜索引擎来开展检索工作,接下来在检索这方面举例而言是采用google进行检索。
以特定方式查找,查找的内容是网址里面出现/cgi-bin/ 这个部分 ,并且文件类型是sh的相关内容。
2) 对检索所得到的url予以提取,接着替换下方所说的“替换URL”。
采用curl工具,添加一个名为x的头部信息,其内容为冒号分号的组合,接着定义字符串a使其等于执行通过/bin/cat读取/etc/passwd文件内容的操作结果,然后输出a的值,最后对替换URL进行使用-I参数发起请求的操作。
若存在漏洞情况,那么就能够复现模拟验证方法所产生的结果,依靠此来判定漏洞的范围以及危害程度等内容 ;要是不使用搜索引擎,同样能够以构造路径的方式,像 IP/cgi-bin/update.sh 、 IP/cgi-bin/admin.sh 这类进行连接尝试,不过这种方法会消耗大量资源去做无用的连接尝试。
7.漏洞检测方法
您能够运用本地及远程的漏洞验证办法,来开展脚本、程序或者 snort 规则等内容的编写以及配置工作,如此一来,便可实施批量的操作系统平台检测。在进行 HTTP 检测期间,能够针对 Referer、host、UserAgent、header 等的头信息字符串“ {”或者对应的十六进制“x28x29x20x7b”,检测当下已经出现的部分攻击。
我们还在进一步进行攻击的捕获和特征的提取。
注4:在此之前版本里所拥有的检测规则是存在问题的,此刻这个版本乃是经过网友@TeLeMan进行指正以后才得到完善的,可参见到鸣谢部分。
8. 漏洞所具备的、有可能引发的那种种影响,9. 针对这一特定漏洞而给出的、相应的那些建议,10. 放置在最后的、冗长又絮叨的话语。
这是安天CERT于今年之内所进行的第二次作出A级响应的情况,并且在此之前的一次是Heart Bleed(心脏出血)这一事件。当我们朝着安天A级响应的案宗进行回顾的时候,我们目睹到了众多熟知的名称,这些名称包含:口令蠕虫、震荡波、冲击波等等……
在“心脏出血”出现前的几年里,那是威胁高度定向演进的时期,安天CERT的工作重点转向剖析更精巧、持久的APT攻击,多年未曾启动A级响应。所以,“心脏出血”出现时,我们那般慌张。我们已不习惯凌晨被从睡梦中唤醒,我们忽然发觉基础环境要重新构建。在那时咱们怀揣的感受是,就恰似那一群于犯罪现场小心翼翼地去进行取证,还费神地捉摸并且深入研究的侦探,忽然间察觉到整座城市都陷入火海般的状况了,于是乎任务瞬间就转变成为全体都得去投身参与救火的行动了……然而针对于安全分析工程师来讲,只要再次进入那如同烈火般危险的一线,便能够唤醒处于沉睡状态的敏锐特质以及那份血性了。
安全永远不会停下来,这是由于威胁从来不会停止。安天的分析团队当中负责的人李柏松,在前往访问McAfee的时候,曾被“Safe Never Sleep”这样的标语给触动了,然而他讲,更让人触动的是在深夜的时候从Avtar酒店的楼下,看到McAfee一直亮着的灯火。针对“破壳”漏洞,我们所做的工作依旧显得很浅显,不过相较于“心脏出血”时的那种慌张,显然我们已经再次变得从容淡定了。尤其是当我们又一次在凌晨被叫醒的时候,我们已经从咬着牙从睡梦中爬起来,变成了条件反射般地起身。
安全的很难卡位,也是源于威胁的无法预期。从2004年起,DEP、ALSR等技术相继被引入主流系统,基于远程一招制敌的威胁开始明显变少,而那些没公开出来的0day估计也以秘密武器被审慎使用。大规模蠕虫开始变少,不再有更多恶意代码名称被公众知晓,这给公众一种安全的假象,也带来安全愿景的虚幻。对于坚信“可信+主防”就能打造安全永动机的那些人而论,常常都忘掉了脚本这个让安全管理者又爱又恨的存在。
安全没法做到完美无缺,更是缘于时间并非向着防御者那一方。不管是攻击包给予致命一击的闪电战,还是威胁进行长期潜伏的情况,皆是这样。HeartBleed漏洞在代码里潜伏了长达3年的时间,而“破壳”漏洞或许已经存在了10年的时长。在这一潜伏时间段内,它到底是幸运地一直处于沉睡状态,或者早就变成了进入室内的锐利武器,尚且没办法知晓。相关漏洞是开发者出于无心的失误,还是一场精心谋划的代码污染,目前都很难去推测了。能够想象得出的是,所有没办法进行完整复盘的情况之下的信息安全方面的灾难,都肯定会成为阴谋论的创作蓝本。
安全进步迟缓,还在于人们存在过于繁多的想当然情况。“心脏出血”和“破壳”那样的漏洞皆源自开源系统。众多心地善良的人们理所当然地认定,开源的安全靠无数代码维护者、审计者以及用户予以保障。不管是出现“心脏出血”的Open SSL,还是出现“破壳”的Bash,即便在众多开发者、编译者的系统里像白驹过隙一样快速编译通过,然而相应漏洞却如同白驹过隙,瞬间闪过。可对于攻击者而言,相关代码却有可能经过了长时间的研究与挖掘呢。进行泛泛的开源与闭源相比两者谁到底更具安全性这样的比较是毫无意义的,我们只是想要再次着重强调一点,开源并不一定会必然致使安全方面出现相应情况。
安全改善存在困难,这更在于威胁持续泛化以及继承,在PC时代,易用性、方便性飞速发展步伐紧,随后移动时代来临,发展进步势头仍未停,穿戴设备时代到来,进步态势依旧迅猛,智能家居时代跟进,进步脚步未曾缓,新设备开始有更高主频,还有更为复杂的操作系统。然而,既有的安全经验与方法没能得到有效传递与继承。并且,代码复用等致使类似“心脏出血”和“破壳”这样的漏洞引入更多领域纵深,进而带来更复杂困难的处置长尾。未来,更多异构设备之间会有功能协同,会存在交叉访问,会实现数据共享,这就让安全的形势变得更加复杂,让安全处置变得更加困难,让安全问题更难进行定性。
当威胁接连不断地到来之际,当我们因应接不暇而感到心力交瘁之时,身为职业安全工作者,我们就得提醒自己,别丢失对安全的信心与信念,并且也别失去对信息技术发展的期待。安全并非信息技术的全部,我们要生活在一个快速发展、便利快乐的世界里,并为之给予保障。