一、前言
.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核心中,每个命名空间所包含的预定义类,它们提供了许多基本功能,其作用与SQLServer中的系统表类似;
2、MSFT类:提供了操纵操作系统功能的方法,例如远程事件和策略扩展;
3、CIM类:公共信息模型(CIM)类,可以从这些类中继承,Win32类就是从CIM类中继承;
4、标准使用者类:一组WMI事件使用者,它们在收到任意事件后触发操作。
.2恶意场景
最早滥用WMI的恶意软件是Stuxnet,它也彻底改变了我们的网络安全环境。时至今日,越来越多的恶意软件都开始滥用WMI(Windows管理规范)。Stuxnet是年最为复杂的蠕虫之一,它影响了伊朗纳坦兹的核处理设施,并使用WMI遍历用户,将自身传播到可用的网络共享之中。它还使用了MOF(托管对象格式)文件,这是用于创建和注册WMI提供程序和事件的方法。从ATTCK的视角来看,该恶意软件在持久化阶段滥用了WMI(T)中的WMI事件订阅,在侦查阶段进行了帐户侦查(T)和网络共享侦查(T35),在横向移动阶段进行了远程文件复制(T05)。
这篇文章将详细盘点使用WMI实现其目标的恶意软件。我们期望通过本文的盘点,可以让安全从业者和决策者了解当前恶意技术。其中的每种技术都与MITERATTCK矩阵中的策略对应,由此展示出在防范网络攻击的过程中应当进行适当的WMI监控。
下面的策略可能直接或间接地使用WMI,每种策略都与技术相对应。
、执行
()Windows管理规范技术(T);
(2)进程间通信:组件对象模型(T.00),与WMI的交互是通过COM完成的;
(3)命令和脚本解释器:
PowerShell(T.00),例如通过使用Get-WmiObjectcmdlet获取WMI类的实例;
(4)远程服务:WMI(T02.),WMI为WinRM提供管理数据;
(5)计划任务/作业(T),
Win32_ScheduledJobWMI类表示使用AT命令创建的作业。
2、持久化
()事件触发执行:WMI事件订阅(T.),WMI可用于安装事件过滤器、提供程序、使用者和绑定,它们可以在发生特定事件时执行代码;
(2)外部远程服务(T33),可以使用WinRM;
(3)启动或登录时自动执行:注册表运行键/启动文件夹(T.00),WMI类StdRegProv中包含用于操作注册表运行键的方法。
3、防御逃避
()影响防御:禁用或修改工具(T.00),可以通过WMI删除注册表项,或使用wmic.exe终止进程来实现该技术;
(2)间接命令执行(T),通常情况下为了避免检测,恶意软件可以使用Win32_ProcessWMI类执行命令,而无需直接调用cmd.exe;
(3)修改注册表(T2),WMI类StdRegProv包含用于操纵注册表项的方法。
4、侦查
()帐户侦查(T),Win32_UserAccountWMI类包含有关计算机系统上用户帐户的信息,Win32_LoggedOnUserWMI类将会话和用户帐户相关联;
(2)文件和目录侦查(T),Win32_DirectoryWMI类可以操纵目录,CIM_DataFileWMI类表示数据的命名集合,Win32_ShortcutFileWMI类表示快捷方式文件;
(3)外围设备发现(T20),有很多关键的WMI类,例如:Win32_CDROMDrive、Win32_DesktopMonitor、Win32_InfraredDevice、Win32_Keyboard、Win32_Printer、Win32_SerialPort、Win32_USBController、Win32_VideoControlleretc等;
(4)权限组侦查(T),Win32_GroupWMI类提供有关组帐户的信息,Win32_GroupUser关联一个组和组内成员的帐户;
(5)进程侦查(T),Win32_ProcessWMI类可以实现对进程的侦查;
(6)注册表侦查(T02),可以使用StdRegProvWMI类和Win32_Registry类从注册表中获取数据;
(7)远程系统侦查(T08),Win32_PingStatus可以获取使用IPv4或IPv6地址计算机的返回数据;
(8)系统信息侦查(T),有很多可以使用的类,例如
Win32_OperatingSystem、Win32_SystemResourcesetc等;
(9)系统网络配置侦查(T06),
Win32_SystemNetworkConnectionsWMI类与网络连接有关,MSFT_NetAdapter可以提供有关网络适配器的信息;
(0)系统服务侦查(T),Win32_ServiceWMI类可以表示服务;
()系统时间侦查(T24),使用
Win32_TimeZone可以检索时区信息;
(2)虚拟化/沙箱逃逸(T),
Win32_ComputerSystemWMI类和Win32_BaseBoard可以检测VM。
5、横向移动
()进程间通信:组件对象模型(T.00),与WMI的交互是通过COM完成的;
(2)远程服务:
Windows远程管理(T02.),WMI为WinRM提供管理数据;
(3)远程服务(T02),Win32_ServiceWMI类表示可以位于远程位置的服务;
(4)入口工具传输(T05),
可以使用Win32_ShareWMI类来实现。
6、命令和控制
()非标准端口(T57),WMI调用使用35端口,然后选择一个随机端口;
(2)远程访问硬件(T29),
ManagementScope.Connect方法将目标对象连接到远程计算机上的WMI命名空间。
7、渗出
()通过C2通道进行渗出(T04),可以使用连接到远程计算机上的命名空间的ManagementScope对象来实现渗出。
考虑到WMI的复杂性,上述列表可能并不详尽。WMI滥用还可以通过其它策略和技术,以更具创新性的方式来执行。但是,我们希望对这些技术的总结,能够有助于WMI检测机制的实现和改进。作为对上述内容的补充,我们会盘点一些流行恶意软件的示例,重点揭示它们是如何使用上述技术滥用WMI的。
二、恶意软件技术分析
2.Kingminer
Kingminer是自年以来一直存在的一种加密劫持恶意软件,至今仍然在持续发展,网络犯罪分子可以通过感染企业环境而获利。Kingminer在改进版本中加入了一些恶意技术,例如暴力破解SQLServer以实现初始访问、类似于WannaCry的内核漏洞利用、用于逃避黑名单的域生成算法、无文件执行等。
这种加密劫持软件滥用了WMI来检查系统上是否安装了特定的WindowsUpdate,并且禁用了对受感染计算机的远程桌面访问。
在执行阶段,它滥用了WMI事件订阅机制,恶意脚本的一部分注册了活跃脚本使用者以实现定期执行。WMI事件使用者通过WMI事件订阅这种事件触发执行的方式(T.)来保证持久性。
如果希望完整分析该恶意软件,包括其中有代表性的恶意代码,可以阅读《Kingminer僵尸网络不断改进》[3]这篇文章。
2.2Maze勒索软件
在年5月底,一个名为Maze的新勒索软件成为了新闻头条,填补了GandCrab消失后的空白。Maze的作者实现了一种渗出机制,利用付款和转账实现数据泄露。利用WMI,Maze可以销毁所有存在的Windows备份,例如卷影副本。
通过查询Win32_ShadowCopyWMI类,可以找到在恶意软件下一阶段中要删除的卷影,该技术称为禁用系统恢复(T)。
为了更好地理解Maze勒索软件,建议阅读代码片段,可以参考《恶意软件研究者指南:逆向Maze勒索软件》。
2.3Emotet
Emotet,也称为Geodo或Mealybug,在年首次被发现,此后一直活跃。其第一个版本是银行木马,用于捕获受害者的银行凭据。几年后,该恶意软件从一个面向银行的威胁演变成更为通用的加载程序,可以获取系统访问权限,然后投递其他Payload,而这个Payload可以是可执行文件或脚本。
如今,Emotet的最常见攻击媒介是鱼叉式钓鱼邮件附件(T.00)。在电子邮件中,通常包含一个.doc文件。为了诱导用户执行恶意VBA,攻击者通常会使用社会工程学。Emotet目前已经不再局限于对银行进行攻击,还会包含加密货币挖矿和勒索软件的功能。
在策略和技术方面,最新版本的Emotet使用WMI。由于其传播非常广泛,我们在这篇文章中将进行分析,以说明如何借助WMI相关技术来检测该恶意软件。由于恶意软件并没有直接生成PowerShell,而是主要使用间接命令执行(T)技术,这里就需要用到Win32_ProcessWMI类,所以有时会被检测到。
为了配置进程的启动参数,恶意软件还会使用Win32_ProcessStartup抽象WMI类。
Emotet技术分析
我们捕获到其中一个感染来源,并对文档进行了分析,最终发现其传播依赖于VBA事件过程。在打开文件时(如果已启用宏),将会触发一个调用Document_Open()过程的事件。
作为一种混淆技术,攻击者在所有的存储过程中都使用了与下面类似的代码段,实际上这些代码没有任何作用。
下面展示的代码已经去掉了上述所提到的混淆模块,以使其更加具有可读性。Document_Open()从Zgwsfixtdhep调用Rorsxwhelbf()。
PowerShell命令行使用Yujnbbunz格式存储,并通过删除“}{”的方式,使用相同的机制进行解码。
利用WMI,Emotet恶意软件打破了进程树。如果防御者没有正确地对WMI进行监控,通常可以让恶意软件逃避检测。
2.4sLoad
sLoad是一个PowerShell下载程序,其中包含值得