介绍

Bash

bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。它也被移植到Microsoft Windows上的Cygwin与MinGW,或是可以在MS-DOS上使用的DJGPP项目。在Novell NetWare与Andriod在上也有移植。1990年后,Chet Ramey成为了主要的维护者。

Bash 漏洞

2014年9月25日Red Hat在Bash Shell中发现了一个名为Bash Bug(也有人称之为CVE-2014-7169意指Red Hat的漏洞编号)的安全漏洞,当用户正常访问时,该漏洞允许攻击者的代码像在Shell中一样执行,这样就为各种各样的攻击打开了方便之门。据悉,其严重性要超过之前的“心脏出血”漏洞。
CVE-2014-7169地址:https://access.redhat.com/security/cve/CVE-2014-7169

检测漏洞

看到这个文章时是不是想自己检测下自己的服务器或vps是否有该漏洞?

受影响系统

所有安装GNU bash 版本小于或者等于4.3的Linux操作系统。

漏洞概要

该漏洞源于你调用的bash shell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行。

如何检测

env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'

如果输出是:

vulnerable this is a test

则 你的系统存在该漏洞!
而你尝试修复成功后结果应该是:

bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x' this is a test

修复方法

CenterOS

SSH中执行以下代码:

yum -y update bash

Debian

6.0.x 32bit

wget http://mirrors.aliyun.com/debian/pool/main/b/bash/bash_4.1-3%2Bdeb6u1_i386.deb && dpkg -i bash_4.1-3+deb6u1_i386.deb

6.0.x 64bit

wget http://mirrors.aliyun.com/debian/pool/main/b/bash/bash_4.1-3%2Bdeb6u1_amd64.deb && dpkg -i bash_4.1-3+deb6u1_amd64.deb

7.5 64bit && 32bit

apt-get -y install --only-upgrade bash

Ubuntu

通用方法:

sudo apt-get update && sudo apt-get install bash


10.10 32bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.1-2ubuntu3.1_i386.deb && dpkg -i bash_4.1-2ubuntu3.1_i386.deb

10.10 64bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.1-2ubuntu3.1_amd64.deb && dpkg -i bash_4.1-2ubuntu3.1_amd64.deb

12.04 32bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.2-2ubuntu2.2_i386.deb && dpkg -i bash_4.2-2ubuntu2.2_i386.deb

12.04 64bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.2-2ubuntu2.2_amd64.deb && dpkg -i bash_4.2-2ubuntu2.2_amd64.deb

14.04 32bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.3-7ubuntu1.1_i386.deb && dpkg -i bash_4.3-7ubuntu1.1_i386.deb

14.04 64bit

wget http://mirrors.aliyun.com/fix_stuff/bash_4.3-7ubuntu1.1_amd64.deb && dpkg -i bash_4.3-7ubuntu1.1_amd64.deb

注意:修复时应该建立备份以防止各种误操作造成的备份,而各大云服务商都有快照和备份选项供大家使用不经常做备份的后果大家懂的特别是新手!
当大家使用以上命令后会得出
Complete!
再测试便会看到上面的修复成功后结果,但总有些倒霉的孩子碰到一些其他的问题。我已知的有三种可能更多但我没碰到过需要大家交流

  1. 修复成功
  2. 修复完成,但依旧提示

vulnerable this is a test

请重启下服务器后按以下方法操作:
重启服务器:

reboot

执行:

yum clean all #意思是清除Yum缓存#

再次执行上面对应的修复命令!
3.修复命令执行失败
碰到只能执行一半或几个就停止:

[root@SDK ~]# yum -y update bash Loaded plugins: security base | 3.7 kB 00:00 base/primary_db | 4.4 MB 00:00 extras | 3.4 kB 00:00 extras/primary_db | 19 kB 00:00 openlogic | 1.3 kB 00:00 openlogic/primary | 273 kB 00:00 openlogic 28/28 updates | 3.4 kB 00:00 updates/primary_db | 3.2 MB 00:00 Setting up Update Process No Packages marked for Update

[root@SDK ~]# yum -y update bash Loaded plugins: security Setting up Update Process No Packages marked for Update

这两种我都暂时没找到原因希望大神教我等小白解决吧(最后一种多见于连续执行两遍修复命令的结果)

事件后续

twitter上消息!
Bash 爆出严重的安全漏洞 CVE-2014-6271 影响非常大。更杯具的是目前的补丁还是不完全体,可以继续被利用。
比如

env -i X='() { (a)=>' bash -c 'echo curl -Is terry.im'; head echo

env X='() { (a)=>' bash -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && echo "still vulnerable"

结果展示:
第一种方法:
我测试有点问题不确定是正确结果
Bash01
第二种方法结果
Bash02
可以看到第二种仍然受影响:
still vulnerable

漏洞影响

漏洞影响Redhat、CentOS、Debian、Ubuntu等Linux发行版,影响的程序包括使用mod_cgi执行的Apache服务器,rsync及git服务器,调用如下函数的程序system/popen in C, by os.system/os.popen in Python, system/exec in PHP等。

漏洞原因分析

当bash执行fork的时候,会把函数定义存放在环境变量中,因此bash初始化时会解析每个环境变量的内容,如果以() {开头,则会当做函数处理,官方最新修复补丁已经被绕过。C、Python、PHP等语言中的函数受影响是因为这些函数会使用/bin/sh执行相应的内容,现在大部分Linux发行版/bin/sh只是一个到/bin/bash的符号链接。

相关

注:以上含有mirrors.aliyun.com都为阿里云服务商提供的修复文件地址!
注:本人主要测试服务器为Linode,Azure,腾讯云
注:个别测试方法为大型云服务论坛成员提出!
为了更好的让大家查找相关资料这里提供相关资料和测试或修复地址:
Linux Bash严重漏洞修复紧急通知————来自阿里云官方
Bash的漏洞事件依旧在继续————来自阿里云论坛成员 寒喵
bash漏洞最新补丁可被绕过————来自阿里云论坛成员 晨烟洛曦
linux系统出现bash漏洞,请大家赶紧修复!————来自博客 麦田一根葱的博客
手上有服务器的同学们,赶紧去修 Bash 的漏洞吧————来自V2ex easychen

至此我们希望Bash官方,各大云服务商以及大型Linux社区和我们这些众多的使用者一起解决这些问题让危害消减至无!