“破壳”(Shellshock)漏洞修复
“破壳”(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
###如上运行结果表明是存在Shellshock漏洞的。
修复案例:
在这里将演示离线环境修复Redhat EnterPrise 5的Shellshock漏洞,具体步骤见例如以下:
<span style="font-family:Georgia, Bitstream Charter, serif;">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%] </span> [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 ~]#
补丁附件:
bash-3.2-33.el5_10.4.x86_64 -