GhostMiner:无文件挖矿的新姿势

 

一.写在前面的话

近年来,越来越多的犯罪分子正在利用恶意软件来谋求暴利。比如2017年底爆发的WaterMiner恶意挖矿软件,到了2018年,犯罪分子更是升级了技术并使用一些更加先进的工具包来逃避各种检测。虽然安全厂商对此很快做出反应,然而,网络犯罪分子仍然领先于防御者。比如这一次攻击者使用了一项无文件技术来逃避检测,本文将介绍Minerva团队如何剖析这次GhostMiner攻击,并深入研究了恶意挖矿软件是如何利用先进的无文件技术来挖掘Monero币并在全球范围内悄悄地传播,而且还意外发现这些恶意软件之间些不为人知的秘密,研究人员还通过分析恶意软件的脚本来删除其他恶意软件。是不是很有意思?我们来看看怎么做到的吧!

 

二.解剖GhostMiner

1.无文件框架的使用

GhostMiner组件以一个恶意Windows可执行文件为核心。为了防止被杀软发现,可执行文件嵌套于PowerShell框架——Out-CompressedDllInvoke-ReflectivePEInjection之中。并采用无文件技术来隐藏恶意程序。


其中每个组件都是从不同的PowerShell脚本启动的:
ps1:负责传染新的受害者,
ps1(或x64机器上的WMI64.ps1):挖掘Monero币

这种方法可以非常有效的绕过安全工具的检测,我们使用杀软引擎扫描,发现许多安全软件并没有报毒,下面是扫描报告


测试结果可以和这个可执行文件做对比,他们是同一个程序,但是没有使用无文件技术,扫描结果显而易见———41个安全扫描器都检测到恶意代码

2.传播GhostMiner

GhostMiner的传播是通过Neutrino.ps1部分来实现,它会不断寻找并攻击运行以下应用程序的服务器:
1.Oracle的WebLogic服务器(使用CVE-2017-10271漏洞,FireEye 已报告类似案例)
2.MSSQL
3.phpMyAdmin

虽然GhostMiner可以针对多个潜在的应用程序,但进过分析我们发现它只攻击WebLogic服务器。我们还发现恶意软件通过随机扫描IP并与IP创建大量TCP连接的方式,找到可攻击的目标。


恶意软件为了避免被网络安全工具检测到,在攻击部分还通过Base64编码的HTTP请求来与其C2服务器通信。其中通信使用了一个简单的握手协议,然后客户端向C2请求执行各种任务,如感染其他服务器或截屏。一旦任务完成,客户端将向C2报告并请求另一项任务:

我们可以看看下面的例子,出于保密原因,原始编码的消息我们经过一些特殊处。但不影响我们分析,其中这个请求(红色部分)包含了被感染服务器的标识符和新任务请求,响应(蓝色部分)命令恶意软件随机寻找可利用的WebLogic服务器:

HTTP请求和响应示例,演示如何蔓延的威胁,例如,扫描任务、利用WebLogic服务器
请特别注意请求头Referer是硬编码的:其中qq.com是最受欢迎的中文网站。这与我们发现的其他指标一样,表明攻击者费尽心思构造恶意的HTTP请求来隐藏数据。

 

三.如何利用GhostMiner挖矿

上面说过,挖矿组件本身利用框架直接从内存中启动。它是基于开源XMRig项目的微小定制版本,你可以在抓包的流量中发现这一点。


有趣的是,我们在分析这个软件时发现这个程序已经悄悄运行了大约三周时间:


截至本文发布,这个XMR钱包已经累计1.03XMR,相当于200美元。可惜的是,由于Monero的匿名功能,所以我们无法检测到钱包地址的所有者。

 

四.‘矿工’之间的明争暗斗

在恶意软件行业,恶意挖矿软件之间的竞争远比我们想像的激烈,毕竟只有消灭对手才能更好利用资源,在研究这些样本中,我们也发现许多以前没有报道的新技术:
1.使用PowerShell的“Stop-Process -force”命令杀死正在运行的‘矿工’。
2.停止并删除黑名单中‘矿工’名称的exe进程。
3.停止运行可疑的exe进程。
4.通过命令行参数停止和删除‘矿工’进程。
5.通过查看已建立的TCP连接列表来停止并删除‘矿工’(查找与‘矿工’相关的端口)

过去,Xavier Mertens(@xme)等恶意软件研究人员建议,维护者可以使用与我们在IOC列表(下面提供的)中“competitors killer”相似的脚本来检测系统上是否存在恶意‘矿工’。但现在我们有个更好的建议,使用“killer script”作为辅助工具。参考Minerva的研究团队的GitHub中他们提供的脚本。编写属于自己的PowerShell脚本来移除恶意的‘矿工’是一个更好的方法。其中脚本可以根据‘矿工’的某些特征或可疑的TCP连接,来结束进程,任务或服务。但也要注意的是,MinerKiller只是按照某些特征来判断,所以它可能会停止甚至删除一些重要的进程!

 

五.后记

有兴趣了解更多关于Minerva事情吗?我们将在RSA 2018的Moscone South的2329号展位演示,或者在4月15日旧金山BSides听到我们,我们会和联合Omri Moyal创始人谈论Coinminers的兴起。申请地址

IOCs

C2IP地址:
123[.]59[.]68[.]172
散列(SHA-256):
Neutrino.ps1:
4b9ce06c6dc82947e888e919c3b8108886f70e5d80a3b601cc6eb3752a1069a1
9a326afeeb2ba80de356992ec72beeab28e4c11966b28a16356b43a397d132e8
WMI.ps1:
40a507a88ba03b9da3de235c9c0afdfcf7a0473c8704cbb26e16b1b782becd4d
WMI64.ps1:
8a2bdea733ef3482e8d8f335e6a4e75c690e599a218a392ebac6fcb7c8709b52
Associated Monero address:
43ZSpXdMerQGerimDrUviDN6qP3vkwnkZY1vvzTV22AbLW1oCCBDstNjXqrT3anyZ22j7DEE74GkbVcQFyH2nNiC3fchGfc
“Killer” script:
服务名称
xWinWpdSrv
SVSHost
Microsoft Telemetry
lsass
Microsoft
system
Oracleupdate
CLR
sysmgt
gm
WmdnPnSN
Sougoudl
Nationaaal
Natimmonal
Nationaloll
任务名称
Mysa
Mysa1
Mysa2
Mysa3
ok
Oracle Java
Oracle Java Update
Microsoft Telemetry
Spooler SubSystem Service
Oracle Products Reporter
Update service for products
gm
ngm
进程名称
msinfo
xmrig
minerd
MinerGate
Carbon
yamm1
upgeade
auto-upgeade
svshost
SystemIIS
SystemIISSec
WindowsUpdater
WindowsDefender
update
carss
service
csrsc
cara
javaupd
gxdrv
lsmosee
‘矿工’相关服务器侧TCP端口
1111
2222
3333
4444
5555
6666
7777
8888
9999
14433
14444
45560
65333
55335
’矿工‘有关命令行参数
cryptonight
stratum+
—donate-level
—max-cpu-usage
-p x
pool.electroneum.hashvault
(完)