最近,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应用防火墙层面,都应该制定更加有效的修补过程。