摘要
加密货币价格上涨导致了恶意软体样本在野外的激增。DDoS攻击与加密货币挖矿互为因果,增加了攻击者的收入/获利。此外,如果攻击者拥有数千名受害者,诱惑将愈加强烈。
本文介绍了我们近期对DirtyMoe恶意软体的研究结果。我们注意到NuggetPhantom恶意软体是DirtyMoe的首个版本,PurpleFox则是其利用工具包。我们将DirtyMoe的首次出现日期追溯到2016年。在过去几年中,该恶意软体经历了引人入胜的演变。最初样本往往不稳定并显示明显症状,但当前的样本在反取证、反追踪和反调试技术的使用上已经达到了与其他恶意软体相当的水平。
DirtyMoe恶意软体运用了简单的模组化设计理念,同时做到不可检测和不可追踪。该恶意软体的目的是专注于加密挖矿和DDoS攻击。DirtyMoe通过EternalBlue和至少三个其他漏洞,以系统级别的特权作为Windows服务运行。具体功能由恶意软体作者远程控制,他们可以在几小时内重新配置数千个DirtyMoe实例以达到所需功能。DirtyMoe只是下载一个加密有效负载,这个有效负载对应于所需的功能,并将其注入自身。
DirtyMoe的自我防护和隐藏技术可以在本地和网络的恶意软体层面上找到。DirtyMoe的核心是受VMProtect保护的服务。它提取一个利用各种rootkit能力的Windows驱动程式,例如服务、注册表条目和驱动程序隐藏。此外,该驱动可以隐藏系统卷上的选定文件,并可以将任意DLL注入到系统中新创建的每一个进程中。与母服务器的网络通信不是硬编码的,也不是直接调用的。DirtyMoe会对一个硬编码的域进行DNS请求,使用一组硬编码的DNS服务器。然而,最终的IP地址和端口是通过另一组DNS请求衍生出来的。因此,阻止最终的IP地址并不能使恶意软体失效,并且我们也无法阻止对如Google、Cloudflare等DNS服务器的请求。
这是DirtyMoe系列文章的第一篇。在这篇文章中,我们提供了DirtyMoe架构的高层次概述。后续文章将专注于DirtyMoe架构的详细方面,如驱动程序、服务、模组等。在本文章中,我们描述了DirtyMoe的攻击链、复杂的网络通信、自我保护技术和显著的症状。此外,我们提供了有关该恶意软体的流行程度和C&C服务器位置的统计信息。最后,我们讨论并总结了DirtyMoe与PurpleFox之间的关系。每个恶意软体组件的妥协指标清单将在未来的文章中发布。
1. 攻击链
以下图表 显示了DirtyMoe架构的两个视图。第一个是交付,第二个是探索,包括安装。各个攻击链项目在以下小节中进行说明。
图1.
攻击链:交付
图2. 攻击链:利用和安装
1.2 侦查
透过端口扫描和开放漏洞数据库,攻击者发现并针对大量弱电脑。PurpleFox是DirtyMoe常用的利用工具包。
1.3 武器化
DirtyMoe的作者使用多种明确的技术来获取DirtyMoe的管理特权。
一个偏好的漏洞是EternalBlue(CVE-2017-0144
),尽管这一漏洞自2017年以来已广为人知。Avast每月仍阻止约2000万次EternalBlue攻击尝试。不幸的是,仍有约一百万台机器使用易受攻击的SMBv1协议,因而让DirtyMoe等恶意软体有机可乘。此外,最近出现了一种新的感染途径,通过对Windows机器进行SMB密码暴力破解开始流行。
另一种感染受害者机器的方式是通过包含可利用InternetExplorer的URL的钓鱼电子邮件,例如,脚本引擎内存损坏漏洞(CVE-2020-0674
)。该漏洞可以注入并损坏内存,使执行的代码在当前用户上下文中运行。因此,如果攻击者足够幸运地获得了管理员用户登录,该代码将控制受影响的机器。令人惊讶的是,有多少用户频繁使用这一存在漏洞的InternetExplorer。
此外,各种感染文件也是部署DirtyMoe的方式。破解、Keygen,甚至正规应用程序可能会包含恶意代码,并在其执行过程中将恶意软体安装到受害者的计算机中。通常情况下,恶意软体的安装是在背景下静默进行的,无需用户交互或用户知情。感染的宏、自解压存档和流行应用程序的重新打包安装程序都是典型的类别。
我们提供了一些最知名的例子,但部署恶意软体的方式是无限的。所有方式都有一个共同点:即公共漏洞与暴露(CVE)。确切的DirtyMoe安装方法超出了本文章的范畴。然而,我们列出了一份DirtyMoe所使用的CVE的短列表,如下所示:
CVE-2019-1458
、CVE-2015-1701
、CVE-2018-8120
: Win32k特权提升漏洞CVE-2014-6332
: Windows OLE自动化数组远程代码执行漏洞
1.4 交付
当其中一个漏洞成功并获取系统特权时,DirtyMoe可以被安装在受害者的机器上。我们观察到DirtyMoe利用WindowsMSI安装程序来部署恶意软体。MSI安装程序在多个平台和版本的Windows上提供了一种简便的安装方式。每个版本需要不同的位置来安装文件和注册表项。恶意软体的作者可以轻松地为目标系统和平台设置DirtyMoe配置。
1.4.1 MSI安装包
恶意软体作者通过MSI安装程序为受害者环境做好适当准备。他们专注于禁用反间谍软体和文件保护功能。此外,MSI包利用了一项系统功能,帮助覆盖系统文件以进行恶意软体的部署。
注册表操作
在MSI安装过程中,存在若干注册表操作。最重要的注册表条目在以下概述中描述:
- 可以通过设置
1
的DisableAntiSpyware
注册表键禁用Microsoft Defender Antivirus。 HKCU\SOFTWARE\Policies\Microsoft\Windows Defender\DisableAntiSpyware
- 禁用Windows系统文件的Windows文件保护 (WFP)。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDisable
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCScan
- 禁用SMB共享以防止其他恶意软体的感染。
HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\SMBDeviceEnabled
- 通过恶意软体替换系统文件。
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AllowProtectedRenames
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
- 将阈值设置为最大值,以确保每个服务作为一个线程运行,而不是普通的进程。
HKLM\SYSTEM\CurrentControlSet\Control\SvcHostSplitThresholdInKB
文件操作
如果满足适当的条件,MSI安装程序将文件复制到定义的目标,以下表格总结了这一过程。
| 文件 | 目标位置 | 条件 | |——————–|————–|———————–| | sysupdate.log | WindowsFolder | 总是 | | winupdate32.log | WindowsFolder | 不是VersionNT64 | | winupdate64.log | WindowsFolder | 是VersionNT64 |
Windows会话管理器(smss.exe
)在Windows启动过程中根据PendingFileRenameOperations
注册表值复制这些文件,具体过程如下:
- 删除(如果存在)
\\[WindowsFolder]\\AppPatch\\Acpsens.dll
- 将
\\[SystemFolder]\\sens.dll
移动到\\[WindowsFolder]\\AppPatch\\Acpsens.dll
- 将
\\[WindowsFolder]\\winupdate[64,32].log
移动到\\[SystemFolder]\\sens.dll
- 删除(如果存在)
\\[WindowsFolder]\\AppPatch\\Ke583427.xsl
- 将
\\[WindowsFolder]\\sysupdate.log
移动到\\[WindowsFolder]\\AppPatch\\Ke583427.xsl
1.4.2 MSI安装
MSI安装程序可静默运行,无需用户交互。安装需要系统重启以应用所有更改,但MSI安装程序支持延迟重启,用户不会察觉到任何可疑症状。MSI安装程序准备了所有必要的文件和配置来部署DirtyMoe恶意软体。在系统重启后,系统会覆盖定义过的系统文件,并运行恶意软体。我们将在后续文章中详细分析MSI包。
1.5 利用
MSI包通过Windows会话管理器覆盖系统文件sens.dll
。因此,DirtyMoe滥用了Windows系统事件通知(SENS),使其能够在系统启动时加载。感染的SENS服务是一个中介,负责部署DirtyMoe服务。
在首个阶段,滥用的服务确保DirtyMoe在系统重启后加载,并将滥用的Windows服务恢复到原始状态。其次,主DirtyMoe服务启动,并由rootkit驱动程式隐藏DirtyMoe的服务、注册表条目和文件。
1.5.1 感染的SENS服务
Windows在NTAUTHORITY\SYSTEM用户下运行原始的SENS。因此,DirtyMoe获得了系统级别的特权。在感染的SENS服务的首次运行中,DirtyMoe必须完成三个基本目标。
Rootkit驱动程序加载
DirtyMoe以用户模式运行,但恶意软体需要来自内核空间的支持。大量内核操作尝试隐藏或反追踪DirtyMoe的活动。驱动程序二进制文件嵌入在DirtyMoe服务中,并在DirtyMoe启动时加载该驱动。DirtyMoe服务注册
感染的SENS服务将DirtyMoe服务注册为系统中的普通Windows服务。因此,DirtyMoe恶意软体可以在系统重启后存活。此时DirtyMoe驱动程序被激活;因此,新创建的服务也被隐藏。DirtyMoe服务是维护所有恶意软体活动的主要执行单位。系统事件通知服务恢复
如果DirtyMoe的安装和服务部署成功,感染的SENS服务的最后一步是从Acpsens.dll
备份文件中恢复原始的SENS服务;见文件操作部分。
1.5.2 DirtyMoe服务
DirtyMoe服务在恶意软体部署期间注册进入系统。启动时,该服务提取并加载DirtyMoe驱动程序以保护自身。当驱动程序被加载后,服务会清除文件系统和注册表中关于驱动程序的所有证据。
DirtyMoe恶意软体由两个进程组成,即_DirtyMoe核心_和_DirtyMoe执行者_,由DirtyMoe服务创建;如果这些进程创建和配置成功,DirtyMoe服务将自行终止。DirtyMoe服务通过多个进程和线程创建_核心_和_执行者_进程,这些进程会随著时间的推移被终止。因此,法医和追踪方法变得更加困难。关于DirtyMoe的服务、进程及其细节将在未来的文章中详细描述。
1.6 安装
上述所有内容仅是恶意执行的准备。_DirtyMoe核心_是维护进程,负责下载、更新、加密、备份和保护DirtyMoe恶意软体。_DirtyMoe核心_负责将恶意代码注入到_执行者_中来执行。被注入的代码称为MOE对象或模组,从C&C服务器下载。MOE对象是加密的PE文件,_DirtyMoe核心_对其进行解密并将其注入到_执行者_中。
此外,由MSI安装程序作为sysupdate.log
文件部署的初始有效负载决定了_DirtyMoe核心_的初始化行为。因此,_DirtyMoe核心_可以通过有效负载注入来更新或改变其自身的功能。
1.7 指挥与控制
_DirtyMoe核心_和_执行者_为恶意软体作者提供了一个接口,他们可以远程模组化DirtyMoe并根据MOE对象改变其目的和配置。_DirtyMoe核心_与指挥和控制(C&C)服务器通信,以获取攻击者命令。因而,整个复杂的层次结构具有高度模组化且在配置和控制上非常灵活。
C&C通信的隐蔽性在于DirtyMoe并不使用固定的IP地址,而是实施了一种独特的机制来模糊最终C&C服务器的地址。因此,由于每次C&C通信中的服务器地址都不同,因此无法在受害者的机器上阻止C&C服务器。此外,该机制基于DNS请求,这无法轻易阻止,因为这会影响日常通信。
1.8 目标行动
关于DirtyMoe的模组化,加密挖矿似乎是一项持续的活动,若恶意软体作者不需要进行定向攻击,就会永久使用受害者的机器。因此,挖矿是在平静时期的活动。然而,NSFOCUS威胁情报中心发现了分散式拒绝服务(DDoS)攻击。一般而言,DirtyMoe可以将任意恶意软体部署到受感染的系统中,例如信息窃取者、勒索软体、木马等。
2. 网络通信
如我们所宣布,与C&C服务器的网络通信十分复杂。C&C服务器的IP地址不是硬编码的,因为它是从DNS请求中衍生出来的。代码中硬编码了三个信息。
- 一组公共DNS伺服器,如Google、Cloudflare等。
- 一个硬编码的域
rpc[.]1qw[.]us
是获取C&C服务器最终IP地址的入口。 - 用于IP地址转换的保加利亚常数。
对1qw[.]us
域的DNS请求返回一组活动服务器,但并不是最终的C&C服务器。DirtyMoe将返回的IP地址转换为整数并减去第一个保加利亚常数(任何使结果正确的数字)以计算最终C&CIP地址。C&C端口也是通过最终IP地址派生,使用第二个保加利亚常数使事情更加复杂。
翻译的隐蔽性在于DNS请求的应用,这无法轻易阻止,因为用户需要进行IP地址转换。DirtyMoe向公众DNS伺服器发送请求,这些伺服器则递归解析1qw[.]us
域。因此,用户机器不直接与恶意域联系,而是通过硬编码的域名伺服器之一进行通信。此外,返回的IP地址列表每分钟都不同。
截至目前,我们已经记录约2000个IP地址。许多已翻译的IP地址对应到活动的web伺服器,大多是中文内容。目前尚不清楚恶意软体作者是否拥有这些web伺服器,或者这些web伺服器是否只是被DirtyMoe攻击而摧毁的。
3. 统计
根据我们的观察,DirtyMoe首次显著出现是在2017年。2018年至2020年间,DirtyMoe的命中数量以几千计。
3.1 DirtyMoe命中
今年事件的增长幅度较前几年更为明显,正如图3
的对数尺度所示。另一方面,必须注意的是,我们在2020年提高了对DirtyMoe的检测。我们目前记录约100,000台感染和活动的计算机。然而,显然DirtyMoe恶意软体仍然活动且呈上升趋势。因此,我们将需要保持警惕。
图3. DirtyMoe命中的年度发生数
DirtyMoe命中的主导国为俄罗斯,具体而言,65,000次命中属于245,000次;见图4 。DirtyMoe在欧洲和亚洲领先,如图5
所示。美国的命中数也相当可观。
图4. 各国命中的分布情况
图5. 各洲命中的分布情况
3.2 C&C服务器
我们观察到C&C服务器(IP地址)和样本命中的国家及大陆分布不同。大多数C&C服务器位于中国,如图6 和图7
所示。我们可以推断,该恶意软体的来源位于中国。显然,这些恶意软体的作者是一个精心组织的团体,在所有主要洲运作。
图6. C&C服务器的国家分布情况
图7. C&C服务器的洲分布情况
3.3 VMProtect
在过去两年中,DirtyMoe使用受害者机器的卷ID作为服务DLL的名称。DirtyMoe的第一版本随机选择Windows服务名称。这一策略在2018年占主导地位;见图8
。
图8. 使用服务名称的案例分布
我们在2018年底首次检测到了VMProtect的显著发现。自2019年以来,通过VMProtect的混淆持续被观察到。在使用VMProtect前,恶意软体作者依赖于常见的混淆方法,这些方法在VMProtect版本的DirtyMoe中仍然存在。
4. 自我保护技术
每个优秀的恶意软体都必须实施一系列保护、反取证、反追踪和反调试技术。DirtyMoe利用rootkit方法隐藏系统活动。通过VMProtect软体和自身的加密/解密演算法实现混淆。通过多层架构利用网络通信,避免了母服务器的IP地址硬编码。最后但同样重要的是,DirtyMoe进程之间的保护。
4.1 DirtyMoe驱动程序
DirtyMoe驱动程序提供了广泛的功能,简要列举如下:
- 小过滤器:影响(隐藏、插入、修改)目录列举
- 注册表隐藏:能隐藏指定注册表键
- 服务隐藏:修补
service.exe
结构以隐藏所需的服务 - 驱动隐藏:能隐藏自己
DirtyMoe驱动程式是一个广泛的主题,我们将在未来的文章中讨论。
4.2 混淆和VMProtect
DirtyMoe代码包含许多恶意模式,这些模式将被大多数反病毒软体侦测到。恶意软体作者使用VMProtect对DirtyMoe服务DLL文件进行混淆。下载的DirtyMoe对象使用硬编码的密钥通过对称密码进行加密。我们已经看到几个MOE对象,这些对象本质上相同的PE文件在PE头部上有所不同。然而,即使这些微小的改变也足以使所用的密码产生完全不同的MOE对象。因此,静态检测无法应用于MOE加密对象。此外,DirtyMoe不会在文件系统中导出解密的MOE对象(PE文件),而是直接将MOE对象注入内存中。
DirtyMoe将其配置存储在注册表项中,如下所示: HKLM\SOFTWARE\Microsoft\DirectPlay8\Direct3D
配置值也使用对称密码和硬编码的密钥进行加密。图9
展示了用于DirectPlay8\Direct3D
注册表键的解密方法。该方法的详细解释将在未来的文章中发表。
图9. Direct3D注册值的解密方法
4.3 反取证和保护
正如我们在利用部分提到的,法医和追踪方法更加复杂,因DirtyMoe工作者是通过多个进程和线程启动的。工作者最初以svchost.exe
的形式运行,但DirtyMoe驱动程序将工作者的进程名称更改为fontdrvhost.exe
。DirtyMoe有两个工作进程(
核心_和_执行者 )互相保护。因此,如果第一个工作者被终止,第二个会启动第一个的新实例,反之亦然。
5. 症状和停用
尽管DirtyMoe使用了先进的保护和反取证技术,但仍有几个症状表明DirtyMoe的存在。
5.1 注册表
DirtyMoe存在的一个标志性指标是注册表键HKLM\SOFTWARE\Microsoft\DirectPlay8\Direct3D
。
DirtyMoe在这个注册表键中存储配置。
此外,如果系统注册表在HKLM\SYSTEM\CurrentControlSet\Services
路径中包含重复键,则可能指向Windows内核结构中的未经授权操作。DirtyMoe驱动程序实施技术以隐藏注册表键,这会导致注册表不一致。
如果MSI安装成功,则会留下以下标记标志:
HKEY_LOCAL_MACHINE\SOFTWARE\SoundResearch\UpdaterLastTimeChecked[1-3]
5.2 文件
DirtyMoe的工作目录在C:\Windows\AppPatch
。DirtyMoe恶意软体将原始SENSDLL文件备份到工作目录下的Acpsens.dll
文件。
有时DirtyMoe工作者在.moe
文件注入过程中失败,而C:\Windows\AppPatch\Custom
文件夹中可能存在未处理的MOE文件。
有时,DirtyMoe“忘记”删除用于恶意软体部署的临时DLL文件。临时服务存在于Windows服务中,服务名称模式为ms<五位随机数字>app
。因此,System32
文件夹中可能包含形式为:
C:\Windows\System32\ms<五位随机数字>app.dll
的DLL文件。
MSI安装程序经常在C:\Program Files
文件夹中创建一个名为MSI产品名称的目录:
FONDQXIMSYHLISNDBCFPGGQDFFXNKBARIRJH
或相似格式:[A-Z]{36}
5.3 进程
在Windows10中,DirtyMoe进程没有实时的父进程,因为父进程由于反追踪而被终止。工作者基于svchost.exe
。尽管如此,这些进程作为fontdrvhost.exe
在SYSTEM用户下可见,并带有以下命令行参数:
svchost.exe -k LocalService svchost.exe -k NetworkService
5.4 停用
需要停止或删除名为Ms<volume-
的DirtyMoe服务。不幸的是,DirtyMoe驱动程序甚至在安全模式下也会隐藏服务。因此,系统应通过任何安装磁碟启动,以避免驱动程序的影响,然后删除/重命名位于
id>AppC:\Windows\System32\Ms<volume-
的服务DLL文件。
id>App.dll
然后,DirtyMoe服务将不会启动,并可以采取以下操作:
- 删除
Ms<volume-id>App
服务 - 删除服务DLL文件
- 从
C:\Windows\AppPatch
中删除核心有效负载及其备份文件 Ke<五位随机数字>.xsl
和Ac<volume-id>.sdb
- 从
C:\Windows\AppPatch\Custom
中删除DirtyMoe对象 <md5>.mos
;<md5>.moe
;<md5>.mow
6. 讨论
在过去的四年中,我们已见到DirtyMoe恶意软体的部分。显著的部分被NSFOCUS科技公司描述为NuggetPhantom。然而,DirtyMoe需要某种利用工具包进行部署。我们有线索表明PurpleFox与DirtyMoe之间存在关系。问题仍然是PurpleFox和DirtyMoe是否属于不同的恶意软体团体,或者PurpleFox是否被支付来分发DirtyMoe。或者这两个恶意软体家族来自同一来源。两者都有复杂而精密的网络基础设施。因此,这些恶意软体可能是同一团队的作品。
DirtyMoe的作者可能来自中国。DirtyMoe服务和MOE模组是用Delphi写的。另一方面,DirtyMoe驱动程序是用MicrosoftVisualC++编写的。然而,该驱动程式包含许多从互联网上复制的bug,显示出作者对rootkit编写并不熟悉。此外,Delphi的恶意模式也很容易被检测到,因此作者就使用了VMProtect进行代码混淆。
在过去一年中,PurpleFox和DirtyMoe的发生率以数量级增加,预期DirtyMoe将会持续活跃。此外,恶意软体作者似乎是一个庞大而有组织的团体。因此,DirtyMoe需要密切监控。
7. 结论
加密挖矿和DDoS攻击依然是热门的方法,我们的发现表明DirtyMoe仍然活动且有所上升。DirtyMoe是一个复杂的恶意软体,设计为模组化系统。PurpleFox是DirtyMoe部署中使用最频繁的利用工具包之一。DirtyMoe可以根据加载的MOE对象执行任意功能,比如DDoS等,这意味著它基本上可以做任何事情。同时,恶意软体的目标是进行加密挖矿。
该恶意软体在本地、网络和内核层面实施许多自我防护和隐藏技术。与C&C服务器的通信基于DNS请求,并使用特殊机制将DNS结果转换为真实IP地址。因此,阻止C&C服务器并不是一个简单的任务,因为C&C地址每次都不同且不硬编码。
PurpleFox和DirtyMoe都是活跃的恶意软体,在增强之中。2020年PurpleFox的攻击显著增加。同样,DirtyMoe的命中数量也在攀升,因为这两种恶意软体显然是密切关联的。目前我们已记录约100,000台感染的计算机。在每种情况下,DirtyMoe和PurpleFox均仍在活跃中。此外,一个MOE对象的目标是潜入其他机器,因此PurpleFox和DirtyMoe肯定会增加他们的活动。因此,两者在目前应该密切监控。
本文总结了DirtyMoe恶意软体的高层次概述。我们描述了DirtyMoe的一般部署、安装、目的、通信、自我保护及统计。DirtyMoe系列的后续文章将旨在提供对MSI安装包、DirtyMoe驱动程序、服务、MOE对象及其他与DirtyMoe整体架构相关的有趣主题的详细描述。
参考文献
[1]
[2]
[3]
[4]
[5]
标签:、、、、
分享:XFacebook