研究人员发现了名为Graboid的新型加密劫持蠕虫,该蠕虫已传播到2,000多个不安全的Docker主机。
曾经发生过以蠕虫病毒形式传播加密劫持恶意软件的事件,但这是第一次看到使用Docker Engine中的容器传播的加密劫持蠕虫。由于大多数传统的保护软件都不检查容器内的数据和活动,因此这种恶意活动很难检测到。
攻击者通过不安全的Docker守护程序获得了最初攻击切入点。恶意软件是通过C2服务器下载,用于挖掘Monero并定期从C2查询新的易受攻击主机,随机选择下一个目标以将蠕虫进行传播。分析表明,平均每个矿工有63%的时间处于活动状态,每个采矿周期持续250秒。Docker团队目前已删除恶意映像。
Shodan搜索显示,有2,000多个Docker不安全地暴露于互联网。无需任何身份验证或授权,攻击者就可以完全控制Docker Engine(CE)和主机。攻击者利用此入口点来部署和传播蠕虫。
图1说明了恶意软件的分发和传播方式。攻击者入侵了一个不安全的docker守护进程,从Docker Hub中提取的恶意docker容器,从C2下载脚本和易受攻击的主机列表,并选择下一个目标来传播蠕虫。
该恶意软件“ Graboid”在容器内部进行蠕虫传播和加密劫持。它在每次迭代中随机选择三个目标,在第一个目标上安装蠕虫,在第二个目标上停止采矿,在第三个目标上启动采矿。如果我的主机受到威胁,则恶意容器不会立即启动,必须等到另一个受到感染的主机选择我并开始挖矿个工作。其他受到感染的主机也可以随机停止我的挖矿工作。本质上,每台受感染主机上的矿工均由所有其他受感染主机随机控制。
以下是更详细的分步操作:
1、攻击者选择了一个不安全的Docker主机作为目标,并发送远程命令来下载和部署恶意Docker映像pocosow / centos:7.6.1810。该映像包含用于与其他Docker主机进行通信的Docker客户端工具。
2、容器中的入口点脚本/ var / sbin / bash从C2下载4个shell脚本,并一一执行。下载的脚本是live.sh,worm.sh,cleanxmr.sh,xmr.sh。
3、live.sh将受感染主机上的可用CPU数量发送到C2。
4、worm.sh下载文件“ IP”,其中包含2000多个IP的列表。这些IP是不安全docker API的主机。 worm.sh随机选择一个IP作为目标,并使用docker客户端工具远程部署pocosow / centos容器。
5、cleanxmr.sh从IP文件中随机选择一个易受攻击的主机,然后停止目标上的cryptojacking容器。 cleanxmr.sh不仅会停止蠕虫部署的密码劫持容(gakeaws / nginx),而且还会停止其他基于xmrig正在运行的容器。
6、xmr.sh从IP文件中随机选择一个易受攻击的主机,然后在目标主机上部署gakeaws / nginx。 gakeaws / nginx包含被伪装为nginx的xmrig二进制文件。
在每个受感染的主机上定期重复执行步骤1至步骤6。已知的刷新间隔为100秒。启动pocosow / centos容器后,shell脚本和IP文件都会从C2下载。
如上图所示,Docker映像pocosow / centos已被下载超过10,000次,gakeaws / nginx已被下载超过6,500次。
只有下载并执行程序脚本后,才能知道pocosow / centos的恶意意图。但是,可以很容易地从其构建历史中发现gakeaws / nginx的恶意意图。如图3所示,它仅在构建时将xmrig二进制文件重命名为nginx(第7行)。在构建期间,付款地址被硬编码到环境变量中(第6行)。
图4显示了IP文件中列出的2,034台主机的位置,其中57.4%的IP源自中国,其次是美国的13%。在恶意软件使用的15台C2服务器中,有14台是列在IP文件中,一台主机中有50多个已知漏洞。攻击者攻击渗透了这些主机并将其用作C2服务器。
为了更好地了解蠕虫的有效性及其整体挖掘能力,我们创建了一个简单的Python程序来模拟蠕虫。
假设IP文件中有2,000台主机,其中30%的主机在运行期间发生故障,刷新间隔为100秒,并且每台受损的主机上都有一个CPU。实验模拟了一个为期30天的攻击活动来研究以下几个问题:
该蠕虫需要多长时间才能传播到所有易受攻击的Docker主机?
攻击者拥有多少采矿能力?
每个矿工在受感染主机上保持多长时间活动?
图5的左侧部分显示了蠕虫传播的速度。蠕虫病毒大约需要60分钟才能到达所有1400个易受攻击的主机(2,000多个主机中的70%)。
图5的右侧部分显示了受感染主机的总体挖掘能力。平均有900名活跃矿工,攻击者拥有一个1,400个节点的挖掘集群,该集群具有至少有900个CPU的挖掘能力。由于受感染主机上的矿工可以随机启动和停止,因此每个矿工仅在65%的时间内处于活动状态,每个采矿周期平均仅持续250秒。
此劫持蠕虫不涉及复杂的策略、技术、传播过程,但该蠕虫可以定期从C2中提取新脚本,因此它可以轻松地将其自身重新用于勒索软件或任何恶意软件。如果创建了更强大的蠕虫来采用类似的渗透方法,可能造成更大的破坏。
以下是相关防护策略:
1、如果没有身份验证机制,切勿将docker守护程序暴露在互联网。默认情况下,Docker Engine(CE)不会暴露于互联网。
2、使用Unix套接字在本地与Docker守护程序进行通信,或者使用SSH连接到远程Docker守护程序。
3、使用防火墙白名单限制进入流量。
4、切勿提取未知Docker镜像。
5、经常检查系统中是否有未知的容器或镜像。
pocosow/centos:7.6.1810:
Digest: sha256:6560ddfd4b9af2c87b48ad98d93c56fbf1d7c507763e99b3d25a4d998c3f77cf
gakeaws/nginx:8.9:
Digest: sha256:4827767b9383215053abe6688e82981b5fbeba5d9d40070876eb7948fb73dedb
gakeaws/mysql:
Digest: sha256:15319b6ca1840ec2aa69ea4f41d89cdf086029e3bcab15deaaf7a85854774881
Monero Address: 45TwKEr1LjoEPuxnbfuPhaXCf138AoQvtSJ3jdqg1gPxNjkSNbQpzZrGDaFHGLrVT7AzM7tU9QY8NVdr4H1C3r2d3XN9Cty
120.27.32[.]15
103.248.164[.]38
101.161.223[.]254
61.18.240[.]160
182.16.102[.]97
47.111.96[.]197
106.53.85[.]204
116.62.48[.]5
114.67.68[.]52
118.24.222[.]18
106.13.127[.]6
129.211.98[.]236
101.37.245[.]200
106.75.96[.]126
47.107.191[.]137
*参考来源:unit42,由Kriston编译,转载请注明来自FreeBuf.COM