百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

为什说破壳漏洞会带来一场全球服务器的浩劫

wptr33 2025-04-08 19:44 15 浏览

作者:极客公园

编者注:知道创宇,国内最早专 注于提供Web安全解决方案的自主创新型企业之一。作者余弦,知道创宇技术副总。

2014 年 9 月 24 日,Bash 惊爆严重安全漏洞,编号为 CVE-2014-6271,该漏洞将导致远程攻击者在受影响的系统上执行任意代码。GNU Bash 是一个为 GNU 计划编写的 Unix Shell,广泛使用在 Linux 系统内,最初的功能仅是一个简单的基于终端的命令解释器。这意味全球至少 150 万的主机将受到影响,此外 Linux/Unix 世界内的安卓和苹果都难幸免。

破壳漏洞(ShellShock)的严重性被定义为 10 级(最高),今年 4 月爆发的 OpenSSL「心脏出血」漏洞才 5 级!

漏洞描述:

GNU Bash 4.3 及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行 Shell 命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用 Bash Shell 之前可以用构造的值创建环境变量。这些变量可以包含代码,在 Shell 被调用后会被立即执行。

影响情况:

这个破壳漏洞确实是一个危害极大的漏洞,胜于今年 4 月 8 号爆发的「心脏出血」,但破壳漏洞的探测方式很复杂,不同的组件测试方式有所区别,很难评估一个影响面,但是可以肯定的是 Bash<=4.3 版本都受影响,而 Bash 在至少百亿级别数量的设备上使用,因为 Bash 是最流行的 Linux Shell。

来自知道创宇的 ZoomEye 团队通过几种方式的组合检测,得到了些影响结论。

第一组数据

经过 ZoomEye 的特殊探测,发现国内某厂家的互联网系统在全国范围内有 13254 台设备受到破壳漏洞影响,可被直接远程攻击。

第二组数据

经过 ZoomEye 的 Fuzzing 探测,全球大概存在 142000 主机受影响,需要注意的是由于 Fuzzing 规则不完备,得到的数量肯定会不完备,但这个数字至少可以看到可被直接远程攻击利用的面很大。

第三组数据

我们看到 masscan 的官方发布了消息:
http://blog.erratasec.com/2014/09/bash-shellshock-bug-is-wormable.html他们全球探测的结论是:至少 150 万受影响,而这验证规则很简单,仅对主机的 80 端口进行直接请求,这个结论我们也在验证。

可以从这几组数据看到,探测方式各不相同,如果继续扩展可以逐步描绘出越来越清晰的影响面(可直接远程攻击),知道创宇会继续。

破壳漏洞几个有趣点:

  1. 危害等级是 10(不能再高了),心脏出血那么厉害才 5;
  2. 破壳破的是 Bash,这个在 Linux/Unix 世界存活超过了 20 来年;
  3. 破壳蠕虫已经传播感染;
  4. 虽然这是 Linux/Unix 世界的问题,别忘了安卓、苹果都是(需要深入验证),当然 Windows 这次没事;
  5. 破壳漏洞的利用比心脏出血麻烦,怪不得带来的冲击力低了很多,很多媒体都没关注也可理解,但破壳的后劲绝对很大。

此漏洞可能会影响到的地方。

注:以下几点参考自:
https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x07_DNFWAH_shellshock_bash_story_cve-2014-6271.txt

且结论经过我们验证有效。

  1. 在 SSHD 配置中使用了 ForceCommand 用以限制远程用户执行命令,这个漏洞可以绕过限制去执行任何命令。一些 Git 和 Subversion 部署环境的限制 Shell 也会出现类似情况,OpenSSH 通常用法没有问题。
  2. Apache 服务器使用 mod_cgi 或者 mod_cgid,如果 CGI 脚本在 BASH 或者运行在子 Shell 里都会受影响。子 Shell 中使用 C 的 system/popen,Python 中使用 os.system/os.popen,PHP 中使用 system/exec(CGI 模式) 和 Perl 中使用 open/system 的情况都会受此漏洞影响。
  3. PHP 脚本执行在 mod_php 不会受影响。
  4. DHCP 客户端调用 Shell 脚本接收远程恶意服务器的环境变量参数值的情况会被此漏洞利用。
  5. 守护进程和 SUID 程序在环境变量设置的环境下执行 Shell 脚本也可能受到影响。
  6. 任何其他程序执行 Shell 脚本时用 Bash 作为解释器都可能受影响。Shell 脚本不导出的情况下不会受影响。

漏洞验证,可以使用如下命令来检查系统是否存在此漏洞:

CVE-2014-6271 测试方式: env x=' { :;}; echo vulnerable' bash -c "echo this is a test" 注:CVE-2014-6271 的漏洞源码级分析请参考:
http://blog.knownsec.com/2014/09/bash_3-0-4-3-command-exec-analysis/

修补后,又被绕过,CVE-2014-7169 最新测试方法: $ env -i X=' { (a)=>\' bash -c 'echo date'; cat echo

如执行结果如下则仍然存在漏洞: bash: X: line 1: syntax error near unexpected token `='

bash: X: line 1: `'

bash: error importing function definition for `X'

Wed Sep 24 14:12:49 PDT 2014

暂时还没最靠谱的通用修复方案,关注 Bash 的下一次升级。

相关推荐

每天一个编程技巧!掌握这7个神技,代码效率飙升200%

“同事6点下班,你却为改BUG加班到凌晨?不是你不努力,而是没掌握‘偷懒’的艺术!本文揭秘谷歌工程师私藏的7个编程神技,每天1分钟,让你的代码从‘能用’变‘逆天’。文末附《Python高效代码模板》,...

Git重置到某个历史节点(Sourcetree工具)

前言Sourcetree回滚提交和重置当前分支到此次提交的区别?回滚提交是指将改动的代码提交到本地仓库,但未推送到远端仓库的时候。...

git工作区、暂存区、本地仓库、远程仓库的区别和联系

很多程序员天天写代码,提交代码,拉取代码,对git操作非常熟练,但是对git的原理并不甚了解,借助豆包AI,写个文章总结一下。Git的四个核心区域(工作区、暂存区、本地仓库、远程仓库)是版本控制的核...

解锁人生新剧本的密钥:学会让往事退场

开篇:敦煌莫高窟的千年启示在莫高窟321窟的《降魔变》壁画前,讲解员指着斑驳色彩说:"画师刻意保留了历代修补痕迹,因为真正的传承不是定格,而是流动。"就像我们的人生剧本,精彩章节永远...

Reset local repository branch to be just like remote repository HEAD

技术背景在使用Git进行版本控制时,有时会遇到本地分支与远程分支不一致的情况。可能是因为误操作、多人协作时远程分支被更新等原因。这时就需要将本地分支重置为与远程分支的...

Git恢复至之前版本(git恢复到pull之前的版本)

让程序回到提交前的样子:两种解决方法:回退(reset)、反做(revert)方法一:gitreset...

如何将文件重置或回退到特定版本(怎么让文件回到初始状态)

技术背景在使用Git进行版本控制时,经常会遇到需要将文件回退到特定版本的情况。可能是因为当前版本出现了错误,或者想要恢复到之前某个稳定的版本。Git提供了多种方式来实现这一需求。...

git如何正确回滚代码(git命令回滚代码)

方法一,删除远程分支再提交①首先两步保证当前工作区是干净的,并且和远程分支代码一致$gitcocurrentBranch$gitpullorigincurrentBranch$gi...

[git]撤销的相关命令:reset、revert、checkout

基本概念如果不清晰上面的四个概念,请查看廖老师的git教程这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我的修改存起来。后来用多了,也就明白了为什么。gi...

利用shell脚本将Mysql错误日志保存到数据库中

说明:利用shell脚本将MYSQL的错误日志提取并保存到数据库中步骤:1)创建数据库,创建表CreatedatabaseMysqlCenter;UseMysqlCenter;CREATET...

MySQL 9.3 引入增强的JavaScript支持

MySQL,这一广泛采用的开源关系型数据库管理系统(RDBMS),发布了其9.x系列的第三个更新版本——9.3版,带来了多项新功能。...

python 连接 mysql 数据库(python连接MySQL数据库案例)

用PyMySQL包来连接Python和MySQL。在使用前需要先通过pip来安装PyMySQL包:在windows系统中打开cmd,输入pipinstallPyMySQL ...

mysql导入导出命令(mysql 导入命令)

mysql导入导出命令mysqldump命令的输入是在bin目录下.1.导出整个数据库  mysqldump-u用户名-p数据库名>导出的文件名  mysqldump-uw...

MySQL-SQL介绍(mysql sqlyog)

介绍结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同...

MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南

在MySQL的世界里,二进制日志(Binlog)就是我们的"时光机"。它默默记录着数据库的每一个重要变更,就像一位忠实的史官,为我们在数据灾难中提供最后的救命稻草。本文将带您深入掌握如...