一、前言
1. WMI概述
Windows管理规范(WMI)是用于在Windows操作系统上管理数据和进行操作的基础结构。WMI是微软基于Web的企业管理(WBEM)的实现。WMI使用通用信息模型(CIM)行业标准来表示系统、应用程序、网络、设备和其他托管组件。
WMI可以在所有基于Windows的应用程序中使用,其设计的初衷在于能够与C/C++、VBA或任何Windows上有引擎的脚本语言一起使用,并且可以处理ActiveX对象。有很多Windows功能都具有相关的WMI提供程序,它们实现WMI类、方法和属性定义的功能,以管理相对应的Windows功能。管理用用程序通过各种基于组件对象模型(COM)的接口与WMI通信。
主要的WMI类包括:
- WMI系统类:WMI核心中,每个命名空间所包含的预定义类,它们提供了许多基本功能,其作用与SQL Server中的系统表类似;
- MSFT类:提供了操纵操作系统功能的方法,例如远程事件和策略扩展;
- CIM类:公共信息模型(CIM)类,可以从这些类中继承,Win32类就是从CIM类中继承;
- 标准使用者类:一组WMI事件使用者,它们在收到任意事件后触发操作。
2. 恶意场景
最早滥用WMI的恶意软件是Stuxnet,它也彻底改变了我们的网络安全环境。时至今日,越来越多的恶意软件都开始滥用WMI(Windows管理规范)。Stuxnet是2010年最为复杂的蠕虫之一,它影响了伊朗纳坦兹的核处理设施,并使用WMI遍历用户,将自身传播到可用的网络共享之中。它还使用了MOF(托管对象格式)文件,这是用于创建和注册WMI提供程序和事件的方法。从ATT&CK的视角来看,该恶意软件在持久化阶段滥用了WMI(T1084)中的WMI事件订阅,在侦查阶段进行了帐户侦查(T1087)和网络共享侦查(T1135),在横向移动阶段进行了远程文件复制(T1105)。
这篇文章将详细盘点使用WMI实现其目标的恶意软件。我们期望通过本文的盘点,可以让安全从业者和决策者了解当前恶意技术。其中的每种技术都与MITER ATT&CK矩阵中的策略对应,由此展示出在防范网络攻击的过程中应当进行适当的WMI监控。
下面的策略可能直接或间接地使用WMI,每种策略都与技术相对应。
(1) 执行
- Windows管理规范技术(T1047);
- 进程间通信:组件对象模型(T1559.001),与WMI的交互是通过COM完成的;
- 命令和脚本解释器:PowerShell(T1059.001),例如通过使用Get-WmiObject cmdlet获取WMI类的实例;
- 远程服务:WMI(T1021.006),WMI为WinRM提供管理数据;
- 计划任务/作业(T1053),Win32_ScheduledJob WMI类表示使用AT命令创建的作业。
(2) 持久化
- 事件触发执行:WMI事件订阅(T1546.003),WMI可用于安装事件过滤器、提供程序、使用者和绑定,它们可以在发生特定事件时执行代码;
- 外部远程服务(T1133),可以使用WinRM;
- 启动或登录时自动执行:注册表运行键/启动文件夹(T1547.001),WMI类StdRegProv中包含用于操作注册表运行键的方法。
(3) 防御逃避
- 影响防御:禁用或修改工具(T1562.001),可以通过WMI删除注册表项,或使用wmic.exe终止进程来实现该技术;
- 间接命令执行(T1202),通常情况下为了避免检测,恶意软件可以使用Win32_Process WMI类执行命令,而无需直接调用cmd.exe;
- 修改注册表(T1112),WMI类StdRegProv包含用于操纵注册表项的方法。
(4) 侦查
- 帐户侦查(T1087),Win32_UserAccount WMI类包含有关计算机系统上用户帐户的信息,Win32_LoggedOnUser WMI类将会话和用户帐户相关联;
- 文件和目录侦查(T1083),Win32_Directory WMI类可以操纵目录,CIM_DataFile WMI类表示数据的命名集合,Win32_ShortcutFile WMI类表示快捷方式文件;
- 外围设备发现(T1120),有很多关键的WMI类,例如:Win32_CDROMDrive、Win32_DesktopMonitor、Win32_InfraredDevice、Win32_Keyboard、Win32_Printer、Win32_SerialPort、Win32_USBController、Win32_VideoControlleretc等;
- 权限组侦查(T1069),Win32_Group WMI类提供有关组帐户的信息,Win32_GroupUser关联一个组和组内成员的帐户;
- 进程侦查(T1057),Win32_Process WMI类可以实现对进程的侦查;
- 注册表侦查(T1012),可以使用StdRegProv WMI类和Win32_Registry类从注册表中获取数据;
- 远程系统侦查(T1018),Win32_PingStatus可以获取使用IPv4或IPv6地址计算机的返回数据;
- 系统信息侦查(T1082),有很多可以使用的类,例如Win32_OperatingSystem、Win32_SystemResourcesetc等;
- 系统网络配置侦查(T1016),Win32_SystemNetworkConnections WMI类与网络连接有关,MSFT_NetAdapter可以提供有关网络适配器的信息;
- 系统服务侦查(T1007),Win32_Service WMI类可以表示服务;
- 系统时间侦查(T1124),使用Win32_TimeZone可以检索时区信息;
- 虚拟化/沙箱逃逸(T1497),Win32_ComputerSystem WMI类和Win32_BaseBoard可以检测VM。
(5) 横向移动
- 进程间通信:组件对象模型(T1559.001),与WMI的交互是通过COM完成的;
- 远程服务:Windows远程管理(T1021.006),WMI为WinRM提供管理数据;
- 远程服务(T1021),Win32_Service WMI类表示可以位于远程位置的服务;
- 入口工具传输(T1105),可以使用Win32_Share WMI类来实现。
(6) 命令和控制
- 非标准端口(T1571),WMI调用使用135端口,然后选择一个随机端口;
- 远程访问硬件(T1219),ManagementScope.Connect方法将目标对象连接到远程计算机上的WMI命名空间。
(7) 渗出
通过C2通道进行渗出(T1041),可以使用连接到远程计算机上的命名空间的ManagementScope对象来实现渗出。
考虑到WMI的复杂性,上述列表可能并不详尽。WMI滥用还可以通过其它策略和技术,以更具创新性的方式来执行。但是,我们希望对这些技术的总结,能够有助于WMI检测机制的实现和改进。作为对上述内容的补充,我们会盘点一些流行恶意软件的示例,重点揭示它们是如何使用上述技术滥用WMI的。
二、恶意软件技术分析
1. Kingminer
Kingminer是自2018年以来一直存在的一种加密劫持恶意软件,至今仍然在持续发展,网络犯罪分子可以通过感染企业环境而获利。Kingminer在改进版本中加入了一些恶意技术,例如暴力破解SQL Server以实现初始访问、类似于WannaCry的内核漏洞利用、用于逃避黑名单的域生成算法、无文件执行等。
这种加密劫持软件滥用了WMI来检查系统上是否安装了特定的Windows Update,并且禁用了对受感染计算机的远程桌面访问。
在执行阶段,它滥用了WMI事件订阅机制,恶意脚本的一部分注册了活跃脚本使用者以实现定期执行。WMI事件使用者通过WMI事件订阅这种事件触发执行的方式(T1546.003)来保证持久性。
如果希望完整分析该恶意软件,包括其中有代表性的恶意代码,可以阅读《Kingminer僵尸网络不断改进》[3]这篇文章。
2. Maze勒索软件
在2019年5月底,一个名为Maze的新勒索软件成为了新闻头条,填补了GandCrab消失后的空白。Maze的作者实现了一种渗出机制,利用付款和转账实现数据泄露。利用WMI,Maze可以销毁所有存在的Windows备份,例如卷影副本。
通过查询Win32_ShadowCopy WMI类,可以找到在恶意软件下一阶段中要删除的卷影,该技术称为禁用系统恢复(T1490)。
为了更好地理解Maze勒索软件,建议阅读代码片段,可以参考《恶意软件研究者指南:逆向Maze勒索软件》[4]。
3. Emotet
Emotet,也称为Geodo或Mealybug,在2014年首次被发现,此后一直活跃。其第一个版本是银行木马,用于捕获受害者的银行凭据。几年后,该恶意软件从一个面向银行的威胁演变成更为通用的加载程序,可以获取系统访问权限,然后投递其他Payload,而这个Payload可以是可执行文件或脚本。
如今,Emotet的最常见攻击媒介是鱼叉式钓鱼邮件附件(T1566.001)。在电子邮件中,通常包含一个.doc文件。为了诱导用户执行恶意VBA,攻击者通常会使用社会工程学。Emotet目前已经不再局限于对银行进行攻击,还会包含加密货币挖矿和勒索软件的功能。
在策略和技术方面,最新版本的Emotet使用WMI。由于其传播非常广泛,我们在这篇文章中将进行分析,以说明如何借助WMI相关技术来检测该恶意软件。由于恶意软件并没有直接生成PowerShell,而是主要使用间接命令执行(T1202)技术,这里就需要用到Win32_Process WMI类,所以有时会被检测到。
为了配置进程的启动参数,恶意软件还会使用Win32_ProcessStartup抽象WMI类。
(1) Emotet技术分析
我们捕获到其中一个感染来源,并对文档进行了分析,最终发现其传播依赖于VBA事件过程。在打开文件时(如果已启用宏),将会触发一个调用Document_Open()过程的事件。
作为一种混淆技术,攻击者在所有的存储过程中都使用了与下面类似的代码段,实际上这些代码没有任何作用。
下面展示的代码已经去掉了上述所提到的混淆模块,以使其更加具有可读性。Document_Open()从Zgwsfixtdhep调用Rorsxwhelbf()。
PowerShell命令行使用Yujnbbunz格式存储,并通过删除“}{”的方式,使用相同的机制进行解码。
利用WMI,Emotet恶意软件打破了进程树。如果防御者没有正确地对WMI进行监控,通常可以让恶意软件逃避检测。
4. sLoad
sLoad是一个PowerShell下载程序,其中包含值得关注的WMI侦查功能。微软的研究人员发现了其2.0.1版本[5],Bitdefender发现并隔离了经过改进后的2.7.3版本。之所以我们能如此具体地区分出版本,是因为恶意软件的开发人员将其添加到了恶意脚本的开头。
当我们分析sLoad时,一些研究人员经常会提到它是如何使用BITS过滤数据的。这次,我们重点分析它滥用WMI的方式。在侦查环节中,sLoad通过WMI类Win32_Processor和Win32_OperatingSystem获取有关系统的信息(T1082,系统信息发现)。此外,它还使用Win32_LogicalDisc类来寻找可能存在的共享。
(1) sLoad技术分析
分析的入口点是使用随机名称的PowerShell脚本,在我们的样本中是JWVrjYXZ.ps1。它是基于几个故意产生异常的try-except块。
正如微软Defender APT团队此前所分析的,恶意软件通过电子邮件中附带的ZIP压缩包附件的方式进入计算机。
随机命名的脚本负责解码在同一目录下找到的“system.ini”文件,并在不接触磁盘的情况下,在内存中执行该文件。
微软团队根据在$starsLord = Split-Path -parent -resolve $MyInvocation.MyCommand.Path;中找到的变量,将2.0.1版本称为“Starslord”。因此,我们可以根据$Sokovia = Split-Path -parent -resolve $MyInvocation.MyCommand.Path;,将2.7.3版本称为“Sokovia”。但最通用的名称还是sLoad。
恶意软件将BITS Admin工具的副本引用为$Ultron。
对于每个C&C地址,$InfinityStones表示BITS传输作业名称的随机8个字符的字符串。
$Wanda指向下载其他文件所需的完整命令,该命令为:
- URL转换为“< C&C >/main.php?ch=1&i=< MAC地址和计算机名的计算md5连接“
如果成功下载了至少一个文件,则使用$ad标志对其进行标记,并将内容另存为$cryptoKey。
如果没有成功下载文件,则会对C&C重新加密,并在域名后附加一个计数器。例如:hxxps[:]//nbrwer2[.]eu/topic/ and hxxps[:]//joodfbnm2[.]eu/topic/,它会退出并终止PowerShell。
使用WMI类Win32_processor,$Yoda获取到CPU名称。使用Win32_OperatingSystem,可以获取到操作系统信息。
获取当前运行进程中的特定列表,保存到$Pietro列表中。
使用带URL参数的BITS admin,可以将捕获的数据经过Base64编码后发送给攻击者。
在这种情况下,是使用Download BITS作业来渗出信息,并将信息作为URL参数传递。
如果渗出失败,则会退出并终止PowerShell。在失败的情况下,有三个命令可以使用,分别是:
- eval – 运行PowerShell脚本;
- iex – 加载并调用PowerShell代码;
- run – 运行可执行文件。
5. 挖矿下载工具
另一个示例是使用StdRegProv WMI类操纵注册表以禁用保护机制的挖矿下载工具(T1112,修改注册表)。在执行初期,首先检查是否有网络连接,下载工具使用Win32_PingStatus类对知名站点进行了ping操作。该挖矿工具的命令行允许指定要连接的IP地址,在一些案例中,它还可以连接到德国合法的基础设施。
(1) 挖矿下载工具技术分析
首先,它尝试使用以下命令创建任务,该任务在启动时会以最高特权级别的SYSTEM身份运行。如果不能获得足够的权限,将会出现失败。
这意味着,为了保证持久性,它需要足够的特权。否则,它仅仅会启动一次附加的Payload。
随后,恶意软件创建防火墙规则,以便将例外添加到cscript.exe或wscript.exe中。
BD37D891CD1C4ABD9C8C781是“WindowsIndexCoreUpdate”,并且是cscript或wscript的BFE路径。
使用winmgmts:{impersonationLevel=Impersonate}!\\.\root\CIMV2:Win32_PingStatus.Address=去ping知名网站,如果成功就退出。
使用“winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv”修改注册表,为%TEMP%路径添加排除项,并禁用Windows Defender组件。
E16是&H80000002,表示HKEY_LOCAL_MACHINE。
尝试从URL“hxxp[:]//gmfordown[.]com/game[.]log”、“hxxp[:]//tor4games[.]com/steam[.]lock”或“hxxp[:]//dvx2videofr[.]com/pack[.]dll”检索下一阶段恶意软件,并将其另存为%TMP%\\steam.vbe。如果成功,则会运行脚本。如果失败,则退出。
每次启动时,恶意软件都会更改变量和函数的名称,删除自身,并将修改后的版本放在%AppData%//
< random_from_guid >/< random_from_guid >.vbs。随机目录被隐藏。
如果文件是.VBE脚本,则副本也是.VBE。然后在内存中重新编码和解码。
三、总结
Windows管理规范为管理员提供了很多方便,但也为恶意行为者提供了很多方便。由于WMI允许实施无文件攻击,因此我们发现在野攻击者越来越关注这些技术。在合法使用和恶意滥用方面,WMI都提供了比较高的灵活性,可以获取有关系统的信息,甚至为远程计算机和应用程序进行配置,安排在特定时间运行进程,启用和禁用日志记录以获取代码执行。
这些特性使其成为恶意行为者的理想组件,特别是在侦查方面。除此之外,WMI对于执行、持久化、横向移动、命令和控制、渗出等环节都有比较大的影响。作为一种不太典型的间接方法,它也可以成为防御逃避的一种方式。
自2018年首次发现以来,Kingminer一直在不断发展,当前版本使用事件触发执行-WMI事件订阅(T1546.003)的技术。更重要的是,WMI处于一个非常微妙的位置,可以检查是否安装了特定的Windows Update,并阻止受感染计算机上的远程桌面访问。对于勒索软件来说,WMI也可以发挥重要的作用。作为其中的典型案例,我们选择了Maze进行介绍,该恶意软件会使用WMI来删除Windows备份。将视线转移到银行领域,我们关注到知名恶意软件Emotet也使用了WMI。利用间接命令执行(T1202)技术,攻击者可以逃避某些安全产品的检测。PowerShell下载工具sLoad经常会滥用BITS,但我们看到,它也并不是唯一的攻击思路。
SLoad在侦查阶段会使用一些WMI类,例如Win32_Processor、Win32_OperatingSystem和Win32_LogicalDisc这些类来获取系统信息。我们选择了比较典型的挖矿下载工具进行分析,在该工具中,通过WMI操纵注册表来禁用保护机制(T1112,修改注册表)。另外,它还会通过Win32_PingStatus类ping知名网站,从而确认是否连接到互联网。
尽管WMI滥用已经持续了近十年,但它仍然在继续发展。如今,它已经可以在多种新型场景中发生,并影响着大量攻击技术。从Stuxnet开始,现代恶意软件结合了基于WMI的逃避技术,遗憾的是,这些看似微小的技术已经能够阻止攻击,或使目标全面沦陷。