使用CryptoSink技术的新挖矿活动

 

最近,F5 Networks威胁研究人员发现了一起利用2014年爆出的漏洞来传播集成XMR挖矿模块的恶意软件,从而对Elasticsearch系统进行攻击的新威胁活动。

  • 1.此活动使用了一个具有五年历史的Elasticsearch系统(该系统可在Windows、Linux双平台部署)漏洞(CVE-2014-3120)来挖掘XMR加密货币。
  • 2.在Linux系统中,它使用了一些防病毒软件(AV)无法检测的新恶意软件(下载器及木马)。
  • 3.攻击者通过使用sinkhole技术将感染主机上其他挖矿程序的矿池地址指向127.0.0.1,从而避免资源竞争。
  • 4.为了长久驻存,它将Linux rm命令替换为随机时间后重新安装恶意软件的代码,使得分析人员难以找到主机重复感染的原因。
  • 5.攻击者通过将SSH密钥添加进感染主机的方式来留下后门。
  • 6.此活动使用了多个控制命令及C&C服务器, 目前的C&C服务器位于中国。

我们将此活动命名为CryptoSink,在分析中,我们发现了一种以前从未见过的攻击手法,攻击者使用这种方法来杀死感染主机上的竞争对手,并通过修改Linux remove(rm)命令的方式更隐蔽驻留在服务器上。

 

初始感染途径

该攻击起始于一些运行在Windows或Linux上的Elasticsearch发出的恶意HTTP请求。

Windows Payload

在下载Windows payload时,调用了系统自带的certutil命令从攻击者服务器下载恶意可执行文件,用于对SSL证书进行操作。这种操作在威胁活动中很普遍。

图1:含有Windows payload的HTTP请求

下载的名为nvidia.exe 的文件是一个XMR挖矿程序。

图2:VirusTotal中,53款杀软监测出了nvidia.exe

Linux Payload

与Windows相比,Linux payload涉及多个步骤。首先,和其他威胁活动一样,调用Linux中现有的curl或wget命令下载并执行名为ctos.sh的bash脚本。

图3:含有Linux payload的HTTP请求

然后,bash脚本将检查主机是否已经是僵尸网络的一部分,如果没有,则下载名为initdz2的二进制恶意软件。

图4:initdz2是一个ELF 64位可执行文件

 

定制化Linux Dropper

由C++编写的initdz2为dropper文件,用来下载并部署其他恶意软件。

图5:Linux系统下恶意文件执行流程

除了下载其他二进制文件外,该dropper还包含其他很多功能。幸运的是,通过攻击者在二进制文件中留下的特征,有效的降低了研究人员进行逆向分析的难度。

图6:initdz2恶意软件的主要功能

Dropper 检测率

不可思议的是,在VirusTotal中,该文件并未被标记为恶意文件。(截止目前为止)

图7:防病毒引擎并未检测出该Dropper

在VirusTotal中检索域名w.3ei.xyz相关的威胁情报信息时,可以看到正是从这里下载了初始恶意脚本及dropper文件。除此之外,还看到了一个名为initdz的文件,看起来应该是先前版本的dropper文件。

图8:VirusTotal列出了w.3ei.xyz域名下的文件

再检查一下VirusTotal,可以发现通过链接检索和直接上传文件,将产生不同的分析结果。通过链接检索,一些防病毒软件会将其判定为恶意,而直接上传样本,则并未被标记(如上文图7所示)。

图9:通过链接提交文件,VirusTotal检测结果更准确

 

随机C&C

为了能在域名被标记后继续存活,该dropper中硬编码了3个域名,会对其逐个解析,直到找到可用的域名为止。

域名:

  • w.3ei.xyz
  • w.21-3n.xyz
  • w.21-2n.com

截至目前,只有域名“w.3ei.xyz”可用。

图10:dropper逐个解析硬编码的三个域名

可以查到该域名解析地址为中国。

图11:C&C服务器位于中国

 

消除竞争

在如今的僵尸网络挖矿大战中,感染主机的CPU资源是最关键的因素。目前,一般攻击者会通过扫描进程名或者检测CPU利用率最高的进程的方式来找到其他挖矿进程,从而杀死该进程,消灭竞争者。

而在此案例中,攻击者使用了一种很巧妙的策略使得竞争者们陷入瘫痪。我们将这种手法称为“CryptoSink” ,因为它会通过修改”etc/hosts”文件,将指外部矿池地址的通信解析到localhost(127.0.0.1)。这样一来,其他挖矿进程连接不到矿池,不能启动,自然会释放出占用的系统资源。

图12:将竞争者矿池指向127.0.0.1

图13:被修改的/etc/host文件

需要注意的是,pastebin.com,thyrsi.com以及zer0day.ru,似乎并非常见的矿池地址。

根据历史记录,可以查到zer0day.ru曾拥有2个子域名,其中pool.zer0day.com看起来是矿池。并且使用了pastebin.com作为C&C通道,从而隐蔽了矿工与真正C&C的通信。而根据我们今年1月29 日发现的扫描结果显示,thyrsi.com是曾托管Windows木马的恶意域名。

图14:zer0day.ru在VirusTotal上的检测结果

图15:JoeSandbox对托管在thyrsi.com的恶意软件进行分析

 

安装后门

为了保证随时可以访问受害者主机,CryptoSink dropper采取了2种策略来完成持久化。第一种是攻击者的SSH密钥添加到受害者主机的authorized_keys 文件中。这种情况下攻击者可以通过SSH直接连接进入受害者主机。

图16:将SSH密钥添加到受害者主机

然后dropper会下载另外2个二进制文件,第一个是migrations,用来监视第二个文件httpdz是否执行。

图17:监视程序用来执行后门

httpdz是另一个用C++编写的,具有后门功能的木马。和dropper一样,他使用TCP套接字对3个硬编码的C&C域名进行轮询。它的功能实现非常简单,会通过预先定义不同ASCII代码来执行以下操作:

  • 使用Linux popen执行CMD命令
  • 收集硬件信息(CPU,内存等)
  • 获取耗费主机CPU资源最多的5个进程
  • 下载链接并执行
  • 连接其他C&C服务器
  • 使用fork和execvp系统调用生成一个新的“进程”来执行命令
  • 休眠
  • 中止

有趣的是,这个后门VirusTotal也未能识别。

图18:截至目前VirusTotal未识别这个二进制后门

 

持久驻存

CryptoSink使用了不同的技术来实现在感染主机的长久驻存。它创建了一个定时任务,每隔很短一段时间,便下载并运行2个很小的恶意bash脚本(init.sh及crontab.sh)。名为init.sh的脚本与前文提到的ctos.sh功能类似,而截至目前,crontab.sh的内容为空。

图19:下载和执行bash脚本的定时任务

第二个实现持久性的方法是创建一个服务,该服务会在不同的事件(例如系统重启)后运行dropper文件。

图20:CryptoSink恶意软件添加了新服务

图21:服务正在运行dropper

 

狸猫换太子

为了防止恶意软件被清理,CryptoSink采用了更为隐蔽的持久性方法。它将原始的rm二进制文件(即Linux“remove”命令)重命名为rmm,而将其替换为从其C&C服务器下载的名为rm的恶意文件。

图22:dropper中用于替换rm命令的代码

现在,用户每次执行rm命令时,首先,伪造的rm文件会随机的决定是否执行恶意代码,然后才会调用真正的rm命令(即被更名为rmm的文件)。rm二进制文件中恶意代码会检查定时任务cronjob是否存在,若不存在,将再次添加。

图23:负责调用真正“rm”命令的代码

有趣的是,即使受感染主机的管理员检测到了其他恶意文件,在用rm命令将其删除时,恶意软件又被重新安装了回来。并且rm命令是随机执行恶意代码,这会让管理员在查找机器重新感染的原因时非常抓狂。

图24:恶意rm代码实现随机化执行

 

Linux 挖矿

最后,dropper会部署XMRig 挖矿代理,并对钱包地址等硬编码信息进行配置。

图25:XMRig硬编码配置

XMRig挖矿代理使用的是公开矿池,我们可以通过钱包地址来查看此挖矿节点的数量及收入。

图26:钱包地址

钱包地址:4DSQMNzzq46N1z2pZWAVdeA6JvUL9TCB2bnBiA3ZzoqEdYJnMydt5akCa3vtmapeDsbVKGPFdNkzqTcJS8M8oyK7WGijzKrMTGkC671HT6

图27:截至目前该钱包的挖矿收入

在攻击者的文件服务器中,我们发现了他在早期挖矿代理中使用的另一个钱包地址。

钱包地址:

448aZSQhyDBCZokwmVd5HG5Gp7UrAeLVuVmZbKcs4rTZTx1UXGECxbePXha3qncffYYhJjG5FRGxM1scV9dbN62VCGiPdtQ

图28:另一个钱包的挖矿收入

由于攻击活动开始不久,所以利润不是非常大,大约在4500美元左右。

 

总结

加密僵尸网络的兴起与加密货币价值的下降使得竞争更加激烈。攻击者采用了更加创新的策略来干掉竞争者,获得更多的CPU资源,并保持在感染服务器的长期驻存。然而,这个攻击者所使用的sinkholing技术,也为安全人员带来了新的防御思路。但是,为了避免最初的感染,不论是代码层面还是Web应用防火墙层面,都应该制定更加有效的修补过程。

(完)