漏洞之 shellshock (破壳漏洞)

1、简介

1.1 什么是Bash?

百度百科链接:http://baike.baidu.com/view/849.htm。

BashShell 全称是 Bourne Again Shell,是 GNU 计划的一部分,用来替代 Bourne shell。它用于基于 GNU 的系统如 Linux。大多数的 Linux(Red Hat,Slackware,Caldera)都以 bash 作为缺省的 shell,并且运行 sh 时,其实调用的是 bash。

用过 Linux 系统的童鞋都不会陌生,Mac 用户估计也会接触到。

1.2 什么是ShellShock?

ShellShock 是一个 BashShell 漏洞(据说不仅仅是 Bash,其他 shell 也可能有这个漏洞)。

按照一般情况来说,系统里面的 Shell 是有严格的权限控制的,如果没有相应的权限,是根本看不到某些命令的存在,更不要说执行这些命令。

但是,Bash 在运行的过程中会调用操作系统的环境变量,并且会执行一些设置命令。通过 ShellShock 漏洞,入侵者可以把某些 本来没有权限执行的语句或者命令 注入到环境变量里。当 bash 设置环境变量的时候,就会执行这些 被注入 命令。这样子便绕过用户权限的限制,把一些 没有权限执行的命令 变成 具有执行权限的命令,从而可以在系统内任意执行Bash命令语句,胡作非为(相当于获得root超级用户权限)。

2、ShellShock 漏洞的原理。

上面其实已经简单的描述了 ShellShock 的原理,下面详细说一下 ShellShock 漏洞的一些细节。

2.1 如何测试自己的系统有没有ShellShock漏洞。

假设是 Linux 系統的管理员,在 shell 中输入下面这条测试命令:

1
env x= '() { :;}; echo XXXXXX' bash -c "echo This is a test code"

可能会出现两种情况:

  • echo This is a test code 就是表示系统有漏洞,需要马上更新。
  • bash: warning: x: ignoring function definition attempt 表示不存在漏洞。

2.2 为什么说出现 echo This is a test code 就是有漏洞呢

先看看ShellShock漏洞的过程。

  1. Linux WEB Server 一般可以提供CGI(通用网关接口)接口,允许远程执行Bash命令;
  2. 对于HTTP头部,CGI脚本解析器会将其当作环境变量,调用bash的env相关函数设置到临时环境变量中;
  3. HTTP协议允许发送任意客户端自定义的HTTP头部;
  4. 这样就产生了一个完整的可供Bash命令注入的场景,客户端故意发送构造好的带攻击命令的HTTP头部到服务端,服务端调用设置环境变量的函数,直接执行了客户端指定的头部里面的命令。并且还会将结果一并返回给客户端。

再回到刚才那个漏洞测试语句看一下:

env x='() { :;}; echo XXXXXX 这一整句是一条设置环境系统的语句,按理来说,它的功能只是执行系统环境变量的功能。

echo This is a test code 这是一条 shell 打印语句,理论上不应该出现在环境变量设置里面,就算出现了也不应该执行的。如果被执行了,就意味着有漏洞。入侵者可以把 echo This is a test code 这句命令,换成其他的 shell 命令,从而做一些不被允许的事情。

有了bash不等于有一切,要看是什么权限运行的bash。cgi服务器进程一般不会是root权限。如果是的话,那个网站的网(yun)管(wei)就可以开了又开了。所以拿到的很大几率是一个像”www_data”这样的用户权限拿到www_data可以做什么呢?可以看网站的配置文件,里面可能有数据库密码,然后就可以进数据库了。”

做一个形象一点的比喻

  • Bash–>手机的主人
  • web访客–>借手机打电话的人
  • 设置环境变量–>借手机打电话
  • 权限管理–>手机主人监督借手机的人(只允许打电话,不允许他干其他事情包括发短息或者上QQ之类的)
  • shellshock漏洞–>手机主人没有好好的监督借手机的人(手机被他偷偷拿去看苍老师的教学视频了)

串起来讲就是,有一个人A问另外一个人B借手机来打一个电话,作为手机的主人B很爽快的答应了。但是,手机除了打电话之外呢,还可以做好多的事情,包括偷看手机主人B和其它姑娘勾搭的信息。因此,手机主人B必须在A使用电话的时候监督好他,保证他只能拿手机来打电话。但是,突然间手机主人B看到一个美女所以分神了,没有好好的盯住A,然后A就趁机拿B的手机去看苍老师教学视频(免费流量啊,不看白不看)。

不知道这样子理解起来是否会简单一点呢?

3、ShellShock 漏洞的危害。

关键词:蠕虫、DDOS

对攻击者而言,夺取了 shell 一般来说就已经很成功了,因为控制了它,就相当于控制了目标环境。你可以访问内部数据,重新配置环境,将他们的恶意代码发布上去,等等。它无所不能,而且是自动化的(自动传播自身拷贝的病毒一般称之为“蠕虫”)。(以上引自《ShellShock漏洞那些事儿》)

“蠕虫”大规模传播带来危害主要有:

  • 由于拥有了特殊的权限,大量的互联网服务器上面的保密数据被窃取。
  • 由于蠕虫的自身复制以及存在这个漏洞的主机数量庞大,病毒可以控制大量的主机,发起DDOS攻击,造成网络瘫痪等。(具体什么叫DDOS请上维基)

4、如何修复 ShellShock 漏洞

回到刚才的比喻,如果由于手机主人B的监督不严,导致手机被A拿去胡作非为了。要解决这个问题,办法就只有两个:

  • 禁止A再借用他的手机
  • 提高手机的权限管理,譬如说借手机之前先在手机上加一个软件锁,保证A只能打电话,而无法使用其他手机的功能。

这两个办法对应到我们的web服务和Bash上面,就是:

  • 禁用CGI(但是可能会导致web服务功能出问题)
  • 完善权限管理机制,在设置环境变量的之前先做好检测,确保环境变量设置语句里面不会有一些越权的行为。

漏洞之 shellshock (破壳漏洞)
https://flepeng.github.io/081-security-漏洞-漏洞之-shellshock-破壳漏洞/
作者
Lepeng
发布于
2021年3月8日
许可协议