GNU Bash 远程代码执行漏洞

漏洞描述

    GNU BASH是一种Unix Shell。1989年发布第一个正式版本,能运行于大多数类Unix操作系统之上,包括Linux与Mac OS X v10.4等都将它作为默认Shell。

    Shell是Linux下一个特殊应用,为了方便调用内核,Linux将内核功能接口制作成系统调用,Linux有200多个这样的系统调用,但系统调用提供的功能非常基础,用起来很麻烦,一个简单的给变量分配内存空间的操作,就需要多个系统调用,所以Linux定义一些库函数来将系统调用组合成某些常用的功能。Shell跟库函数位于同一等级,是一个特殊的应用,可以通过系统调用指挥内核。

    GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,此漏洞源于在调用Bash Shell之前可以创建环境变量。这些变量可以包含代码,在Shell被调用后会被立即执行。验证代码为:env x='() { :;}; echo vulnerable' bash -c "echo this is a test ",这表示向环境变量中注入了一段代码 echo Bash is vulnerable,存在该漏洞的系统会把“Bash is vulnerable”打印出来。

    由于Bash是大多数Linux系统(以及OSX)上默认的shell,因此,攻击者可以利用该漏洞把有害数据编入环境变量,发送到服务器端,触发服务器运行Bash脚本,执行任意命令。

    由于Apache服务器中使用mod_cgi(不包括mod_php或mod_python)运行脚本的时候,数据是通过环境变量来传递的,所以可能存在该漏洞。 除了CGI之外,其它调用bash的应用程序也会受到该漏洞影响,如DHCP、SSH、FTP、邮件、SUID、SIP协议、调用shell的守护进程。

检测方案

检测工具:shellshock_test.sh

检测说明:在linux, unix或macOS下运行上述工具

检测方法:在linux/unix/macOS下运行如下命令: [test@localhost]$ bash shellshock_test.sh

解决方案

1、GNU已经针对该漏洞发布了新版本,请将系统Bash版本更新到4.3以上的版本。

    以一般Linux系统源代码方式更新为例,步骤如下:

    1)检查系统的bash是否存在漏洞,检测方法参见本页面的检测方案

    2)下载Bash的新版本,官方下载页面( http://ftp.gnu.org/gnu/bash/

    3)解压缩,并安装新版本:

    root@localhost# tar xvfz bash-4.3.30.tar.gz 

    root@localhost# cd bash-4.3.30/ 

    root@localhost# ./configure 

    root@localhost# make && make install 

    4)再次检查系统新Bash是否存在漏洞,检测方法同步骤1)

2、如果购买了深信服下一代防火墙,请升级IPS特征库到201409025及其以后的版本