首页 > 技术笔记 > Linux > Bash安全漏洞技术简析及解决方法
2014
09-27

Bash安全漏洞技术简析及解决方法

漏洞起源:

漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令: 如果在一个含有版本号小于bash 4.3的linux或者unix系统上执行以上命令,可能会得到以下输出: 其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。

已确认被成功利用的软件及系统:

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

漏洞原理及分析:

其中env为一个系统命令,该命令让系统创建一个环境变量x='() { :;}; echo vulnerable’并且带着这个环境变量的值执行bash-c “echo this is a test”。第一行输出的”vulnerable”暴露了漏洞的存在,因为函数定义’() { :;};’之后的’echo vulnerable’指令本不该被执行却被执行。对bash详细分析后得知bash在处理含有函数定义诸如”() { :;};”的环境变量赋值的代码上存在设计缺陷,错误地将函数定义后面的字符串作为命令执行。 所以真正的利用与env命令无关,只要设法让系统接受一个含有”[函数定义]+[任意命令]”的环境变量赋值则可触发”[任意命令]”部分所表示的代码执行。

漏洞存在条件:

任何已知程序,只要满足以下两个条件就可以被用来通过bash漏洞导致任意命令执行:
  1. 程序在某一时刻使用bash作为脚本解释器处理环境变量赋值;
  2. 环境变量赋值字符串的提交取决于用户输入。

漏洞利用演示:

以下给出一个可能出现的应用案例,该案例通过进攻一个基于bash的cgi应用页面获取目标计算机的远程shell。 首先有一个基于bash的cgi网页应用存在于Apache服务器的cgi-bin目录下,cgi脚本内容为: bash1 使用正常浏览器访问结果为一个普通页面: bash2 但是我们可以通过curl等模拟http请求的工具构造一个不同寻常的http请求,命令如下: bash3 该命令生成一个含有自定义字段”A_Custom_Header”的请求发给远程的基于Apache的cgi服务器,该字段的值被设置为一个可以触发该bash漏洞的字符串,其中的”/bin/bash……0>&1”是被执行在远程主机上的命令,作用是反弹一个远程bash shell(也可以是其它shell)到黑客主机的8080端口。被请求的cgi页面为http://10.20.230.63/cgi-bin/vul_cgi。而在黑客主机上使用netcat监听8080端口等待被黑服务器的远程连接: bash4 执行上面的curl命令后发生了以下几件事情:
  1. 远程主机使用bash解释器创建一个名为”A_Custom_Header”的环境变量并赋值为”() { :;};/bin/bash……0>&1”;
  2. 由于存在漏洞,bash“顺便”将’/bin/bash……0>&1’作为命令执行;
  3. 用户提交的恶意命令创建一个/bin/bash进程并创建socket将bash的IO链接至黑客机器10.20.230.63:8080(该测试案例中黑客机器和服务器为同一台机器,当然可以不同);
  4. 黑客主机的netcat收到来自被攻击服务器的socket链接,并获取远程shell的IO如下图:
bash5 获得了一个daemon用户的远程shell;黑客可以使用该用户身份执行其它命令,实现了远程攻击。

漏洞修补方法:

请您根据Linux版本选择您需要修复的命令, 为了防止意外情况发生,建议您执行命令前先对Linux服务器系统盘打个快照。

Centos:

 ubuntu:

 Debian 7.5 64bit && 32bit :

 Debian 6.0.x 64bit :

 Debian 6.0.x 32bit :

 Aliyun linux 5.x 64bit :

 Aliyun linux 5.x 32bit :

 opensuse 13.1 64bit :(官方还没有给出最终解决方案)

 opensuse 13.1 32bit :(官方还没有给出最终解决方案)

 
最后编辑:
作者:射雕天龙
转载请注明:转载自射雕天龙的博客(http://blog.wangjunfeng.com)
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。