“破壳” (Shellshock) 漏洞修复
背景:
距离“破壳” (Shellshock) 漏洞漏洞爆发一句过去两周有余了 (2014 年 9 月 24 日公布 ) 。相信很多人都已经听说过了这个危害等级为十的漏洞,编号为 CVE-2014-6271 ,该漏洞将导致远程攻击者在受影响的系统上执行任意代码;相比之下,与上一个著名的漏洞“心脏出血”只有五,不过奇怪的是,“破壳”漏洞目前的反响并不高。“破壳”漏洞实际上早在 1989 年实际上就已经存在了,修复也是极为麻烦的。且目前为止也没有哪个 bash 补丁能够保证 100% 修复,强烈建议及时更新最新的 bash 相关系统补丁,以做到系统的尽可能安全。
漏洞影响范围 :
安天 CERT 目前已经验证在 Redhat 、 CentOS 、 Ubuntu 、 Fedor 、 Amazon Linux 、 MacOS 10.10 均拥有存在 CVE-2014-6271 漏洞的 Bash 版本,同时由于 Bash 在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用 Bash 的 Unix 、 Linux 、 MacOS ;而针对这些操作系统管理下的数据均存在高危威胁。漏洞的利用方式会通过与 Bash 交互的多种应用展开,包括 HTTP 、 DNS 、 OpenSSH 、 DHCP 等。
漏洞原理:
目前的 Bash 使用的环境变量是通过函数名称来调用的,导致漏洞出问题的是以 ”(){” 开头定义的环境变量在命令 ENV 中解析成函数后, Bash 执行未退出,而是继续解析并执行 shell 命令,而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
在补丁中主要进行了参数的合法性过滤,补丁程序在 /bulitins/evalstring.c 的 parse_and_execute 函数中进行了输入的 command 进行了合法性的边界检测,将代码注入的可能性排除。在排除中主要用到了 flags 的两次判断和 command 的一次类型匹配,为了能够 flags 判断准确,在补丁中预先定义了 SEVAL_FUNCDEF 、 SEVAL_ONECMD 两个标识作为判断依据。此漏洞的进行补丁更新有三处,主要进行输入的 command 进行过滤作用。
从阐述的漏洞原理可知,漏洞的根本原因存在于
Bash
的
ENV
命令实现上,因此漏洞本身是不能够直接导致远程代码执行的。如果达到远程代码执行的目的,必须要借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须满足众多条件才可以充当此媒介的角色。漏洞名称
Shellshock
代码为
CVE-2014-6271
的漏洞原理图见如下
:
漏洞验证方法 :
目前的 Bash 脚本是以通过导出环境变量的方式支持自定义函数,也可将自定义的 Bash 函数传递给子相关进程。一般函数体内的代码不会被执行,但此漏洞会错误的将 “{}” 花括号外的命令进行执行。
###egg
:
[
root@web3 ~
]
#
env x
=
\
'() { :;}; echo vulnerable\'
bash
-
c \
"echo this is a test\"
vulnerable
this
is a
test
[ root@web3 ~ ] #
###如上执行结果表明是存在Shellshock漏洞的。
1、查看操作系统和bash版本
:
[
root@db01 ~
]
#
lsb_release
-
d
Description
:
Red Hat Enterprise Linux Server release 5
.
8
(
Tikanga
)
[
root@db01 ~
]
#
bash
-
version
GNU bash
,
version 3
.
2
.
25
(
1
)
-
release
(
x86_64
-
redhat
-
linux
-
gnu
)
Copyright
(
C
)
2005 Free Software Foundation
,
Inc
.
2、打开官网进入CVE
-
2014
-
6271漏洞数据库页面,找到对应版本的补丁下载
https
:
/
/
access
.
redhat
.
com/security/cve/CVE
-
2014
-
6271
3、漏洞补丁下载下来之后是如下两个文件
[
root@db01 ~
]
#
ll bash
-
*
-
rw
-
r
-
-
r
-
-
1 root root 1901644 Oct 10 18
:
10 bash
-
3
.
2
-
33
.
el5_10
.
4
.
x86_64
.
rpm
-
rw
-
r
-
-
r
-
-
1 root root 1380099 Oct 10 18
:
10 bash
-
debuginfo
-
3
.
2
-
33
.
el5_11
.
4
.
x86_64
.
rpm
4、安装补丁
[
root@db01 ~
]
#
rpm
-
ivh bash
-
debuginfo
-
3
.
2
-
33
.
el5_11
.
4
.
x86_64
.
rpm
warning
:
bash
-
debuginfo
-
3
.
2
-
33
.
el5_11
.
4
.
x86_64
.
rpm
:
Header V3 DSA signature
:
NOKEY
,
key ID 37017186
Preparing
.
.
.
###########################################
[
100%
]
1
:
bash
-
debuginfo ###########################################
[
100%
]
[
root@db01 ~
]
#
rpm
-
ivh bash
-
3
.
2
-
33
.
el5_10
.
4
.
x86_64
.
rpm
-
-
force
warning
:
bash
-
3
.
2
-
33
.
el5_10
.
4
.
x86_64
.
rpm
:
Header V3 DSA signature
:
NOKEY
,
key ID e8562897
Preparing
.
.
.
###########################################
[
100%
]
1
:
bash ###########################################
[
100%
]
[
root@db01 ~
]
#
[
root@db01 ~
]
#
env x
=
\
'() { :;}; echo vulnerable\'
bash
-
c \
"echo this is a test\"
this
is a
test
[
root@db01 ~
]
#
[
root@db01 ~
]
#
env
-
i X
=
\
'() { (a)=>\\\'
bash
-
c \
'echo date\'
;
cat
echo
date
Fri Oct 10 18
:
28
:
34 CST 2014
补丁附件
:
漏洞修复验证:
修复完成之后执行如下命令验证,其结果说明漏洞已经修复:
[
root@db01 ~
]
#
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29734436/viewspace-1299632/ ,如需转载,请注明出处,否则将追究法律责任。