ITPub博客

首页 > Linux操作系统 > Linux操作系统 > “破壳”(Shellshock)漏洞修复

“破壳”(Shellshock)漏洞修复

Linux操作系统 作者:dbasdk 时间:2014-10-15 15:41:24 0 删除 编辑

“破壳” (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 函数传递给子相关进程。一般函数体内的代码不会被执行,但此漏洞会错误的将 “{}” 花括号外的命令进行执行。

 

  1. ###egg :

  2. [ root@web3 ~ ] # env x = \ '() { :;}; echo vulnerable\' bash - c \ "echo this is a test\"

  3. vulnerable

  4. this is a test

  5. [ root@web3 ~ ] #

  1. ###如上执行结果表明是存在Shellshock漏洞的。

修复案例:
Redhat EnterPrise 5 的 Shellshock 漏洞,详细步骤见如下:

  1. 1、查看操作系统和bash版本 :

  2. [ root@db01 ~ ] # lsb_release - d

  3. Description : Red Hat Enterprise Linux Server release 5 . 8 ( Tikanga )


  4. [ root@db01 ~ ] # bash - version

  5. GNU bash , version 3 . 2 . 25 ( 1 ) - release ( x86_64 - redhat - linux - gnu )

  6. Copyright ( C ) 2005 Free Software Foundation , Inc .


  7. 2、打开官网进入CVE - 2014 - 6271漏洞数据库页面,找到对应版本的补丁下载

  8. https : / / access . redhat . com/security/cve/CVE - 2014 - 6271


  9. 3、漏洞补丁下载下来之后是如下两个文件

  10. [ root@db01 ~ ] # ll bash - *

  11. - rw - r - - r - - 1 root root 1901644 Oct 10 18 : 10 bash - 3 . 2 - 33 . el5_10 . 4 . x86_64 . rpm

  12. - rw - r - - r - - 1 root root 1380099 Oct 10 18 : 10 bash - debuginfo - 3 . 2 - 33 . el5_11 . 4 . x86_64 . rpm


  13. 4、安装补丁

  14. [ root@db01 ~ ] # rpm - ivh bash - debuginfo - 3 . 2 - 33 . el5_11 . 4 . x86_64 . rpm

  15. warning : bash - debuginfo - 3 . 2 - 33 . el5_11 . 4 . x86_64 . rpm : Header V3 DSA signature : NOKEY , key ID 37017186

  16. Preparing . . . ########################################### [ 100% ]

  17.    1 : bash - debuginfo         ########################################### [ 100% ]

  18. [ root@db01 ~ ] # rpm - ivh bash - 3 . 2 - 33 . el5_10 . 4 . x86_64 . rpm - - force

  19. warning : bash - 3 . 2 - 33 . el5_10 . 4 . x86_64 . rpm : Header V3 DSA signature : NOKEY , key ID e8562897

  20. Preparing . . . ########################################### [ 100% ]

  21.    1 : bash                   ########################################### [ 100% ]
    [ root@db01 ~ ] #

至此该漏洞已经修复完成。


漏洞修复验证:

    修复完成之后执行如下命令验证,其结果说明漏洞已经修复:
  1. [ root@db01 ~ ] # env x = \ '() { :;}; echo vulnerable\' bash - c \ "echo this is a test\"

  2. this is a test

  3. [ root@db01 ~ ] #

  4. [ root@db01 ~ ] # env - i X = \ '() { (a)=>\\\' bash - c \ 'echo date\' ; cat echo

  5. date

  6. Fri Oct 10 18 : 28 : 34 CST 2014
    [ root@db01 ~ ] #


补丁附件 :

bash-3.2-33.el5_10.4.x86_64  -

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29734436/viewspace-1299632/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-07-02

  • 博文量
    490
  • 访问量
    1388136