Bash漏洞
2014年9月25日,继“心脏滴血”之后,这个从澳大利亚远渡重洋而来的bash远程执行漏洞再次让互联网震惊。如果说心脏滴血只能借助窃取用户电脑信息,而bash漏洞允许黑客远程控制电脑,从而拿到系统的最高权限!
漏洞详情页面:http://seclists.org/oss-sec/2014/q3/650
Bash漏洞的原理:
BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!当前版本的bash通过以函数名作为环境变量名,以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变量。
此次爆出的漏洞在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。
简单地说就是,Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令。
如何知道你的bash是否有漏洞呢?使用如下命令进行测试
[[email protected] ~]# env x=‘() { :;}; echo vulnerable‘ bash -c "echo this is a test"
Vulnerable
this is a test
[[email protected] ~]#bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[[email protected] ~]#
如果测试返回值为上述结果:请务必尽快升级。
目前官方提供的升级包需要运行:yum -y update bash
升级如下操作:
当然了上述操作适用于redhat centos fedora的系统,其它系统升级请看官方给出的修补方案
升级之后再次测试
当然了这个不是最终的方式,但一定是目前为止最佳的方式
官方后期会发布更加稳固的修复方案
其实我更加感兴趣的是这个测试的代码
env x=‘() { :;}; echo vulnerable‘ bash -c "echo this is a test"
从执行结果来看“echo vulnerable”和“echo this is a test”都被执行了。
Bash –c当然是正常的执行string-command,主要是echo vulnerable为何会执行呢?其实就是一个env的赋值操作
变量x=() { :;}; echo vulnerable,() { :;};定义了一个function而这个function没有任何操作而后面的echo vulnerable被解析后得到了执行权。简单点说呢:如果我把echo vulnerable换成其它的code(具有破快性的code)后果会怎样呢?
其实像这种的env操作就是简单的渗入式攻击
详细参考如下网址
http://seclists.org/oss-sec/2014/q3/650
http://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/
http://www.reddit.com/r/programming/comments/2hc1w3/cve20146271_remote_code_execution_through_bash/
其实你自己完全可以在本地的server上(apache/nginx)测试
此处略去。。。