一、前言一、WMI概述WindowsManagementInstrumentation(WMI)是在Windows操作系统上管理数据和运行的基础设施。WMI是Microsoft基于Web的企业管理(WBEM)的实现。WMI使用公共信息模型(CIM)行业标准来表示系统、应用程序、网络、设备和其他托管组件。WMI可用于所有基于Windows的应用程序,旨在与C/C++、VBA或任何在Windows上具有引擎的脚本语言一起使用,并可处理ActiveX对象。许多Windows函数具有关联的WMI提供程序,这些提供程序实现由WMI类、方法和属性定义的功能以管理相应的Windows函数。管理应用程序通过各种基于组件对象模型(COM)的接口与WMI通信。主要的WMI类包括:WMI系统类:在WMI核心中,每个命名空间都包含预定义的类,提供许多基本功能,它们的功能类似于SQLServer中的系统表;MSFT类:提供操纵系统功能的操作方法,如远程事件和策略扩展;CIM类:公共信息模型(CIM)类,可以继承自这些类,Win32类继承自CIM类;标准消费者类:一组WMI事件消费者,它们在收到任意事件时触发操作。2.恶意场景第一个滥用WMI的恶意软件是Stuxnet,它也彻底改变了我们的网络安全环境。如今,越来越多的恶意软件开始滥用WMI(WindowsManagementInstrumentation)。Stuxnet是2010年最复杂的蠕虫之一,它影响了伊朗纳坦兹的核处理设施,并使用WMI遍历用户,将自身传播到可用的网络共享。它还使用MOF(托管对象格式)文件,这是用于创建和注册WMI提供程序和事件的方法。从ATT&CK的角度来看,恶意软件在持久阶段滥用WMI中的WMI事件订阅(T1084),在侦察阶段滥用帐户侦察(T1087)和网络共享侦察(T1135),以及远程文件复制(T1105)。这篇文章将详细盘点使用WMI来实现其目标的恶意软件。我们希望通过本文的盘点,让安全从业者和决策者能够了解当前的恶意技术。这些技术中的每一种都对应于MITREATT&CK矩阵中的一项策略,从而表明应该实施适当的WMI监控以防止网络攻击。下面的策略可能直接或间接使用WMI,每个策略对应一种技术。(1)Windows管理规范技术的实施(T1047);进程间通信:组件对象模型(T1559.001),通过COM与WMI交互;命令和脚本解释器:PowerShell(T1059.001),例如通过使用Get-WmiObjectcmdlet获取WMI类的实例;RemoteServices:WMI(T1021.006),WMI为WinRM提供管理数据;计划任务/作业(T1053),Win32_ScheduledJobWMI类表示使用AT命令创建的作业。(2)持久事件触发执行:WMI事件订阅(T1546.003),WMI可用于安装事件过滤器、提供者、消费者和绑定,可以在特定事件发生时执行代码;外部远程服务(T1133),可以使用WinRM;启动或登录时自动执行:RegistryRunKey/StartFolder(T1547.001),WMI类StdRegProv包含用于操作注册表运行键的方法。(3)DefenseEvasionImpactDefense:禁用或修改工具(T1562.001),可以通过WMI删除注册表项,或使用wmic.exe终止进程来实现;间接命令执行(T1202),通常为避免检测,恶意软件可以使用Win32_ProcessWMI类来执行命令,而无需直接调用cmd.exe;注册表修改(T1112),WMI类StdRegProv包含用于操作注册表项的方法。(4)ReconnaissanceAccountReconnaissance(T1087),Win32_UserAccountWMI类包含有关计算机系统上用户帐户的信息,Win32_LoggedOnUserWMI类将会话与用户帐户相关联;文件和目录侦察(T1083),Win32_DirectoryWMI类可以操作目录,CIM_DataFileWMI类代表一个命名的数据集合,Win32_ShortcutFileWMI类代表一个快捷方式文件;外围设备发现(T1120),有很多关键的WMI类,如:Win32_CDROMDrive、Win32_DesktopMonitor、Win32_InfraredDevice、Win32_Keyboard、Win32_Printer、Win32_SerialPort、Win32_USBController、Win32_VideoController等;组检测(T1069),Win32_GroupWMI类提供组账户信息,Win32_GroupUser将组与组内成员的账户相关联;进程检测(T1057),Win32_ProcessWMI类可以实现进程的检测;注册表检测(T1012),可以使用StdRegProvWMI类和Win32_Registry类从注册表中获取数据;远程系统侦察(T1018),Win32_PingStatus可以获取使用IPv4或IPv6地址的计算机的返回数据;系统信息侦察(T1082),可以使用的类有很多,比如Win32_OperatingSystem、Win32_SystemResourcesetc等;系统网络配置检测(T1016),Win32_SystemNetworkConnectionsWMI类与网络连接相关,MSFT_NetAdapter可以提供网络适配器的信息;系统服务检测(T1007),Win32_ServiceWMI类可以代表服务;系统时间检测(T1124),可以使用Win32_TimeZone检索时区信息;虚拟化/沙箱逃逸(T1497)、Win32_ComputerSystemWMI类和Win32_BaseBoard可以检测VM。(5)横向移动进程间通信:ComponentObjectModel(T1559.001),通过COM与WMI交互;远程服务:WindowsRemoteManagement(T1021.006),WMI为WinRM提供管理数据;远程服务(T1021),Win32_ServiceWMI类表示可以位于远程位置的服务;输入工具传输(T1105),可以使用Win32_ShareWMI类来实现。(6)命令控制非标准端口(T1571),WMI调用使用135端口,然后随机选择一个端口;远程访问硬件(T1219),ManagementScope.Connect方法将目标对象连接到远程计算机上的WMI名称空间。(7)ExfiltrationExfiltration是通过C2通道(T1041)进行的,这可以使用连接到远程计算机上命名空间的ManagementScope对象来实现。考虑到WMI的复杂性,上面的列表可能并不详尽。WMI滥用也可以通过其他策略和技术以更具创新性的方式执行。但是,我们希望通过对这些技术的总结,能够对WMI检测机制的实现和完善有所帮助。作为对上述内容的补充,我们将回顾一些流行的恶意软件示例,重点介绍它们如何使用上述技术滥用WMI。二、恶意软件技术分析1、KingminerKingminer是一种挖矿恶意软件,从2018年开始出现,目前仍在发展中。网络罪犯可以通过感染企业环境获利。Kingminer在改进版中加入了一些恶意技术,如暴力破解SQLServer实现初始访问、利用类似WannaCry的内核漏洞、规避黑名单的域名生成算法、无文件执行等。系统上安装了特定的Windows更新,并禁用对受感染计算机的远程桌面访问。在执行阶段,它滥用WMI事件订阅机制,部分恶意脚本会注册一个活跃的脚本消费者进行周期性执行。WMI事件消费者通过WMI事件订阅确保持久性,这是一种事件触发的执行方法(T1546.003)。如果你想完整分析这个恶意软件,包括有代表性的恶意代码,可以阅读这篇文章《Kingminer僵尸网络不断改进》[3]。2.Maze勒索软件2019年5月底,一款名为Maze的新型勒索软件登上了头条,填补了GandCrab消失后留下的空白。Maze的作者实施了一种渗漏机制,利用支付和转账来实现数据渗漏。使用WMI,Maze可以销毁所有现有的Windows备份,例如卷影副本。通过查询Win32_ShadowCopyWMI类,可以找到要在恶意软件的下一阶段删除的卷影,这种技术称为禁用系统恢复(T1490)。为了更好的理解Maze勒索病毒,推荐阅读代码片段,可以参考《恶意软件研究者指南:逆向Maze勒索软件》[4]。3.EmotetEmotet,也称为Geodo或Mealybug,于2014年首次被发现,此后一直活跃。它的第一个版本是一个银行木马,旨在捕获受害者的银行凭证。多年来,该恶意软件已从面向银行的威胁发展为更通用的加载程序,可以获取系统访问权限并提供额外的有效负载,可以是可执行文件或脚本。如今,Emotet最常见的攻击媒介是鱼叉式网络钓鱼电子邮件附件(T1566.001)。在电子邮件中,通常包含一个.doc文件。为了诱使用户执行恶意VBA,攻击者通常使用社会工程学。Emotet不再局限于攻击银行,还包括加密货币挖矿和勒索软件功能。在策略和技术方面,最新版本的Emotet使用了WMI。由于其传播范围广,本文将对其进行分析,以说明如何借助WMI相关技术检测该恶意软件。由于该恶意软件不直接生成PowerShell,而是主要使用间接命令执行(T1202)技术,在需要Win32_ProcessWMI类的地方,有时会被检测到。为了配置进程的启动参数,恶意软件还使用了Win32_ProcessStartup抽象WMI类。(1)Emotet技术分析我们抓取其中一个感染源,分析文档,最终发现其传播依赖于VBA事件过程。打开文件时(如果启用了宏),将触发调用Document_Open()过程的事件。作为一种混淆技术,攻击者在所有存储过程中使用了类似于下面的代码片段,实际上什么都不做。下面显示的代码已去除上面提到的混淆模块,以使其更具可读性。Document_Open()从Zgwsfixtdhep调用Rorsxwhelbf()。PowerShell命令行以Yujnbbunz格式存储,并使用相同的机制通过删除“}{”进行解码。使用WMI,Emotet恶意软件会破坏进程树。如果防御者没有正确监控WMI,恶意软件通常可以逃避检测。4.sLoadsLoad是一个PowerShell下载器,包括一个值得注意的WMI侦察功能。Microsoft研究人员发现了它的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块。正如MicrosoftDefenderAPT团队先前分析的那样,该恶意软件通过附加到电子邮件的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管理工具的副本引用为$Ultron。对于每个C&C地址,$InfinityStones是一个随机的8字符字符串,表示BITS传输作业的名称。$Wanda指向下载附加文件所需的完整命令,即:如果至少有一个文件被下载,则URL转换为“
