現(xiàn)代惡意軟件技術(shù)概述:盤點(diǎn)近十年惡意軟件對(duì)WMI的濫用
一、前言
1. WMI概述
Windows管理規(guī)范(WMI)是用于在Windows操作系統(tǒng)上管理數(shù)據(jù)和進(jìn)行操作的基礎(chǔ)結(jié)構(gòu)。WMI是微軟基于Web的企業(yè)管理(WBEM)的實(shí)現(xiàn)。WMI使用通用信息模型(CIM)行業(yè)標(biāo)準(zhǔn)來表示系統(tǒng)、應(yīng)用程序、網(wǎng)絡(luò)、設(shè)備和其他托管組件。
WMI可以在所有基于Windows的應(yīng)用程序中使用,其設(shè)計(jì)的初衷在于能夠與C/C++、VBA或任何Windows上有引擎的腳本語言一起使用,并且可以處理ActiveX對(duì)象。有很多Windows功能都具有相關(guān)的WMI提供程序,它們實(shí)現(xiàn)WMI類、方法和屬性定義的功能,以管理相對(duì)應(yīng)的Windows功能。管理用用程序通過各種基于組件對(duì)象模型(COM)的接口與WMI通信。
主要的WMI類包括:
- WMI系統(tǒng)類:WMI核心中,每個(gè)命名空間所包含的預(yù)定義類,它們提供了許多基本功能,其作用與SQL Server中的系統(tǒng)表類似;
- MSFT類:提供了操縱操作系統(tǒng)功能的方法,例如遠(yuǎn)程事件和策略擴(kuò)展;
- CIM類:公共信息模型(CIM)類,可以從這些類中繼承,Win32類就是從CIM類中繼承;
- 標(biāo)準(zhǔn)使用者類:一組WMI事件使用者,它們?cè)谑盏饺我馐录笥|發(fā)操作。
2. 惡意場景
最早濫用WMI的惡意軟件是Stuxnet,它也徹底改變了我們的網(wǎng)絡(luò)安全環(huán)境。時(shí)至今日,越來越多的惡意軟件都開始濫用WMI(Windows管理規(guī)范)。Stuxnet是2010年最為復(fù)雜的蠕蟲之一,它影響了伊朗納坦茲的核處理設(shè)施,并使用WMI遍歷用戶,將自身傳播到可用的網(wǎng)絡(luò)共享之中。它還使用了MOF(托管對(duì)象格式)文件,這是用于創(chuàng)建和注冊(cè)WMI提供程序和事件的方法。從ATT&CK的視角來看,該惡意軟件在持久化階段濫用了WMI(T1084)中的WMI事件訂閱,在偵查階段進(jìn)行了帳戶偵查(T1087)和網(wǎng)絡(luò)共享偵查(T1135),在橫向移動(dòng)階段進(jìn)行了遠(yuǎn)程文件復(fù)制(T1105)。
這篇文章將詳細(xì)盤點(diǎn)使用WMI實(shí)現(xiàn)其目標(biāo)的惡意軟件。我們期望通過本文的盤點(diǎn),可以讓安全從業(yè)者和決策者了解當(dāng)前惡意技術(shù)。其中的每種技術(shù)都與MITER ATT&CK矩陣中的策略對(duì)應(yīng),由此展示出在防范網(wǎng)絡(luò)攻擊的過程中應(yīng)當(dāng)進(jìn)行適當(dāng)?shù)腤MI監(jiān)控。
下面的策略可能直接或間接地使用WMI,每種策略都與技術(shù)相對(duì)應(yīng)。
(1) 執(zhí)行
- Windows管理規(guī)范技術(shù)(T1047);
- 進(jìn)程間通信:組件對(duì)象模型(T1559.001),與WMI的交互是通過COM完成的;
- 命令和腳本解釋器:PowerShell(T1059.001),例如通過使用Get-WmiObject cmdlet獲取WMI類的實(shí)例;
- 遠(yuǎn)程服務(wù):WMI(T1021.006),WMI為WinRM提供管理數(shù)據(jù);
- 計(jì)劃任務(wù)/作業(yè)(T1053),Win32_ScheduledJob WMI類表示使用AT命令創(chuàng)建的作業(yè)。
(2) 持久化
- 事件觸發(fā)執(zhí)行:WMI事件訂閱(T1546.003),WMI可用于安裝事件過濾器、提供程序、使用者和綁定,它們可以在發(fā)生特定事件時(shí)執(zhí)行代碼;
- 外部遠(yuǎn)程服務(wù)(T1133),可以使用WinRM;
- 啟動(dòng)或登錄時(shí)自動(dòng)執(zhí)行:注冊(cè)表運(yùn)行鍵/啟動(dòng)文件夾(T1547.001),WMI類StdRegProv中包含用于操作注冊(cè)表運(yùn)行鍵的方法。
(3) 防御逃避
- 影響防御:禁用或修改工具(T1562.001),可以通過WMI刪除注冊(cè)表項(xiàng),或使用wmic.exe終止進(jìn)程來實(shí)現(xiàn)該技術(shù);
- 間接命令執(zhí)行(T1202),通常情況下為了避免檢測,惡意軟件可以使用Win32_Process WMI類執(zhí)行命令,而無需直接調(diào)用cmd.exe;
- 修改注冊(cè)表(T1112),WMI類StdRegProv包含用于操縱注冊(cè)表項(xiàng)的方法。
(4) 偵查
- 帳戶偵查(T1087),Win32_UserAccount WMI類包含有關(guān)計(jì)算機(jī)系統(tǒng)上用戶帳戶的信息,Win32_LoggedOnUser WMI類將會(huì)話和用戶帳戶相關(guān)聯(lián);
- 文件和目錄偵查(T1083),Win32_Directory WMI類可以操縱目錄,CIM_DataFile WMI類表示數(shù)據(jù)的命名集合,Win32_ShortcutFile WMI類表示快捷方式文件;
- 外圍設(shè)備發(fā)現(xiàn)(T1120),有很多關(guān)鍵的WMI類,例如:Win32_CDROMDrive、Win32_DesktopMonitor、Win32_InfraredDevice、Win32_Keyboard、Win32_Printer、Win32_SerialPort、Win32_USBController、Win32_VideoControlleretc等;
- 權(quán)限組偵查(T1069),Win32_Group WMI類提供有關(guān)組帳戶的信息,Win32_GroupUser關(guān)聯(lián)一個(gè)組和組內(nèi)成員的帳戶;
- 進(jìn)程偵查(T1057),Win32_Process WMI類可以實(shí)現(xiàn)對(duì)進(jìn)程的偵查;
- 注冊(cè)表偵查(T1012),可以使用StdRegProv WMI類和Win32_Registry類從注冊(cè)表中獲取數(shù)據(jù);
- 遠(yuǎn)程系統(tǒng)偵查(T1018),Win32_PingStatus可以獲取使用IPv4或IPv6地址計(jì)算機(jī)的返回?cái)?shù)據(jù);
- 系統(tǒng)信息偵查(T1082),有很多可以使用的類,例如Win32_OperatingSystem、Win32_SystemResourcesetc等;
- 系統(tǒng)網(wǎng)絡(luò)配置偵查(T1016),Win32_SystemNetworkConnections WMI類與網(wǎng)絡(luò)連接有關(guān),MSFT_NetAdapter可以提供有關(guān)網(wǎng)絡(luò)適配器的信息;
- 系統(tǒng)服務(wù)偵查(T1007),Win32_Service WMI類可以表示服務(wù);
- 系統(tǒng)時(shí)間偵查(T1124),使用Win32_TimeZone可以檢索時(shí)區(qū)信息;
- 虛擬化/沙箱逃逸(T1497),Win32_ComputerSystem WMI類和Win32_BaseBoard可以檢測VM。
(5) 橫向移動(dòng)
- 進(jìn)程間通信:組件對(duì)象模型(T1559.001),與WMI的交互是通過COM完成的;
- 遠(yuǎn)程服務(wù):Windows遠(yuǎn)程管理(T1021.006),WMI為WinRM提供管理數(shù)據(jù);
- 遠(yuǎn)程服務(wù)(T1021),Win32_Service WMI類表示可以位于遠(yuǎn)程位置的服務(wù);
- 入口工具傳輸(T1105),可以使用Win32_Share WMI類來實(shí)現(xiàn)。
(6) 命令和控制
- 非標(biāo)準(zhǔn)端口(T1571),WMI調(diào)用使用135端口,然后選擇一個(gè)隨機(jī)端口;
- 遠(yuǎn)程訪問硬件(T1219),ManagementScope.Connect方法將目標(biāo)對(duì)象連接到遠(yuǎn)程計(jì)算機(jī)上的WMI命名空間。
(7) 滲出
通過C2通道進(jìn)行滲出(T1041),可以使用連接到遠(yuǎn)程計(jì)算機(jī)上的命名空間的ManagementScope對(duì)象來實(shí)現(xiàn)滲出。
考慮到WMI的復(fù)雜性,上述列表可能并不詳盡。WMI濫用還可以通過其它策略和技術(shù),以更具創(chuàng)新性的方式來執(zhí)行。但是,我們希望對(duì)這些技術(shù)的總結(jié),能夠有助于WMI檢測機(jī)制的實(shí)現(xiàn)和改進(jìn)。作為對(duì)上述內(nèi)容的補(bǔ)充,我們會(huì)盤點(diǎn)一些流行惡意軟件的示例,重點(diǎn)揭示它們是如何使用上述技術(shù)濫用WMI的。
二、惡意軟件技術(shù)分析
1. Kingminer
Kingminer是自2018年以來一直存在的一種加密劫持惡意軟件,至今仍然在持續(xù)發(fā)展,網(wǎng)絡(luò)犯罪分子可以通過感染企業(yè)環(huán)境而獲利。Kingminer在改進(jìn)版本中加入了一些惡意技術(shù),例如暴力破解SQL Server以實(shí)現(xiàn)初始訪問、類似于WannaCry的內(nèi)核漏洞利用、用于逃避黑名單的域生成算法、無文件執(zhí)行等。
這種加密劫持軟件濫用了WMI來檢查系統(tǒng)上是否安裝了特定的Windows Update,并且禁用了對(duì)受感染計(jì)算機(jī)的遠(yuǎn)程桌面訪問。
在執(zhí)行階段,它濫用了WMI事件訂閱機(jī)制,惡意腳本的一部分注冊(cè)了活躍腳本使用者以實(shí)現(xiàn)定期執(zhí)行。WMI事件使用者通過WMI事件訂閱這種事件觸發(fā)執(zhí)行的方式(T1546.003)來保證持久性。
如果希望完整分析該惡意軟件,包括其中有代表性的惡意代碼,可以閱讀《Kingminer僵尸網(wǎng)絡(luò)不斷改進(jìn)》[3]這篇文章。
2. Maze勒索軟件
在2019年5月底,一個(gè)名為Maze的新勒索軟件成為了新聞?lì)^條,填補(bǔ)了GandCrab消失后的空白。Maze的作者實(shí)現(xiàn)了一種滲出機(jī)制,利用付款和轉(zhuǎn)賬實(shí)現(xiàn)數(shù)據(jù)泄露。利用WMI,Maze可以銷毀所有存在的Windows備份,例如卷影副本。
通過查詢Win32_ShadowCopy WMI類,可以找到在惡意軟件下一階段中要?jiǎng)h除的卷影,該技術(shù)稱為禁用系統(tǒng)恢復(fù)(T1490)。
為了更好地理解Maze勒索軟件,建議閱讀代碼片段,可以參考《惡意軟件研究者指南:逆向Maze勒索軟件》[4]。
3. Emotet
Emotet,也稱為Geodo或Mealybug,在2014年首次被發(fā)現(xiàn),此后一直活躍。其第一個(gè)版本是銀行木馬,用于捕獲受害者的銀行憑據(jù)。幾年后,該惡意軟件從一個(gè)面向銀行的威脅演變成更為通用的加載程序,可以獲取系統(tǒng)訪問權(quán)限,然后投遞其他Payload,而這個(gè)Payload可以是可執(zhí)行文件或腳本。
如今,Emotet的最常見攻擊媒介是魚叉式釣魚郵件附件(T1566.001)。在電子郵件中,通常包含一個(gè).doc文件。為了誘導(dǎo)用戶執(zhí)行惡意VBA,攻擊者通常會(huì)使用社會(huì)工程學(xué)。Emotet目前已經(jīng)不再局限于對(duì)銀行進(jìn)行攻擊,還會(huì)包含加密貨幣挖礦和勒索軟件的功能。
在策略和技術(shù)方面,最新版本的Emotet使用WMI。由于其傳播非常廣泛,我們?cè)谶@篇文章中將進(jìn)行分析,以說明如何借助WMI相關(guān)技術(shù)來檢測該惡意軟件。由于惡意軟件并沒有直接生成PowerShell,而是主要使用間接命令執(zhí)行(T1202)技術(shù),這里就需要用到Win32_Process WMI類,所以有時(shí)會(huì)被檢測到。
為了配置進(jìn)程的啟動(dòng)參數(shù),惡意軟件還會(huì)使用Win32_ProcessStartup抽象WMI類。
(1) Emotet技術(shù)分析
我們捕獲到其中一個(gè)感染來源,并對(duì)文檔進(jìn)行了分析,最終發(fā)現(xiàn)其傳播依賴于VBA事件過程。在打開文件時(shí)(如果已啟用宏),將會(huì)觸發(fā)一個(gè)調(diào)用Document_Open()過程的事件。
作為一種混淆技術(shù),攻擊者在所有的存儲(chǔ)過程中都使用了與下面類似的代碼段,實(shí)際上這些代碼沒有任何作用。

下面展示的代碼已經(jīng)去掉了上述所提到的混淆模塊,以使其更加具有可讀性。Document_Open()從Zgwsfixtdhep調(diào)用Rorsxwhelbf()。

PowerShell命令行使用Yujnbbunz格式存儲(chǔ),并通過刪除“}{”的方式,使用相同的機(jī)制進(jìn)行解碼。

利用WMI,Emotet惡意軟件打破了進(jìn)程樹。如果防御者沒有正確地對(duì)WMI進(jìn)行監(jiān)控,通??梢宰寪阂廛浖颖軝z測。
4. sLoad
sLoad是一個(gè)PowerShell下載程序,其中包含值得關(guān)注的WMI偵查功能。微軟的研究人員發(fā)現(xiàn)了其2.0.1版本[5],Bitdefender發(fā)現(xiàn)并隔離了經(jīng)過改進(jìn)后的2.7.3版本。之所以我們能如此具體地區(qū)分出版本,是因?yàn)閻阂廛浖拈_發(fā)人員將其添加到了惡意腳本的開頭。

當(dāng)我們分析sLoad時(shí),一些研究人員經(jīng)常會(huì)提到它是如何使用BITS過濾數(shù)據(jù)的。這次,我們重點(diǎn)分析它濫用WMI的方式。在偵查環(huán)節(jié)中,sLoad通過WMI類Win32_Processor和Win32_OperatingSystem獲取有關(guān)系統(tǒng)的信息(T1082,系統(tǒng)信息發(fā)現(xiàn))。此外,它還使用Win32_LogicalDisc類來尋找可能存在的共享。
(1) sLoad技術(shù)分析
分析的入口點(diǎn)是使用隨機(jī)名稱的PowerShell腳本,在我們的樣本中是JWVrjYXZ.ps1。它是基于幾個(gè)故意產(chǎn)生異常的try-except塊。
正如微軟Defender APT團(tuán)隊(duì)此前所分析的,惡意軟件通過電子郵件中附帶的ZIP壓縮包附件的方式進(jìn)入計(jì)算機(jī)。
隨機(jī)命名的腳本負(fù)責(zé)解碼在同一目錄下找到的“system.ini”文件,并在不接觸磁盤的情況下,在內(nèi)存中執(zhí)行該文件。
微軟團(tuán)隊(duì)根據(jù)在$starsLord = Split-Path -parent -resolve $MyInvocation.MyCommand.Path;中找到的變量,將2.0.1版本稱為“Starslord”。因此,我們可以根據(jù)$Sokovia = Split-Path -parent -resolve $MyInvocation.MyCommand.Path;,將2.7.3版本稱為“Sokovia”。但最通用的名稱還是sLoad。
惡意軟件將BITS Admin工具的副本引用為$Ultron。

對(duì)于每個(gè)C&C地址,$InfinityStones表示BITS傳輸作業(yè)名稱的隨機(jī)8個(gè)字符的字符串。
$Wanda指向下載其他文件所需的完整命令,該命令為:
- URL轉(zhuǎn)換為“< C&C >/main.php?ch=1&i=< MAC地址和計(jì)算機(jī)名的計(jì)算md5連接“

如果成功下載了至少一個(gè)文件,則使用$ad標(biāo)志對(duì)其進(jìn)行標(biāo)記,并將內(nèi)容另存為$cryptoKey。
如果沒有成功下載文件,則會(huì)對(duì)C&C重新加密,并在域名后附加一個(gè)計(jì)數(shù)器。例如:hxxps[:]//nbrwer2[.]eu/topic/ and hxxps[:]//joodfbnm2[.]eu/topic/,它會(huì)退出并終止PowerShell。


使用WMI類Win32_processor,$Yoda獲取到CPU名稱。使用Win32_OperatingSystem,可以獲取到操作系統(tǒng)信息。
獲取當(dāng)前運(yùn)行進(jìn)程中的特定列表,保存到$Pietro列表中。
使用帶URL參數(shù)的BITS admin,可以將捕獲的數(shù)據(jù)經(jīng)過Base64編碼后發(fā)送給攻擊者。
在這種情況下,是使用Download BITS作業(yè)來滲出信息,并將信息作為URL參數(shù)傳遞。
如果滲出失敗,則會(huì)退出并終止PowerShell。在失敗的情況下,有三個(gè)命令可以使用,分別是:
- eval – 運(yùn)行PowerShell腳本;
- iex – 加載并調(diào)用PowerShell代碼;
- run – 運(yùn)行可執(zhí)行文件。
5. 挖礦下載工具
另一個(gè)示例是使用StdRegProv WMI類操縱注冊(cè)表以禁用保護(hù)機(jī)制的挖礦下載工具(T1112,修改注冊(cè)表)。在執(zhí)行初期,首先檢查是否有網(wǎng)絡(luò)連接,下載工具使用Win32_PingStatus類對(duì)知名站點(diǎn)進(jìn)行了ping操作。該挖礦工具的命令行允許指定要連接的IP地址,在一些案例中,它還可以連接到德國合法的基礎(chǔ)設(shè)施。
(1) 挖礦下載工具技術(shù)分析
首先,它嘗試使用以下命令創(chuàng)建任務(wù),該任務(wù)在啟動(dòng)時(shí)會(huì)以最高特權(quán)級(jí)別的SYSTEM身份運(yùn)行。如果不能獲得足夠的權(quán)限,將會(huì)出現(xiàn)失敗。
這意味著,為了保證持久性,它需要足夠的特權(quán)。否則,它僅僅會(huì)啟動(dòng)一次附加的Payload。
隨后,惡意軟件創(chuàng)建防火墻規(guī)則,以便將例外添加到cscript.exe或wscript.exe中。
BD37D891CD1C4ABD9C8C781是“WindowsIndexCoreUpdate”,并且是cscript或wscript的BFE路徑。
使用winmgmts:{impersonationLevel=Impersonate}!\\.\root\CIMV2:Win32_PingStatus.Address=去ping知名網(wǎng)站,如果成功就退出。
使用“winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv”修改注冊(cè)表,為%TEMP%路徑添加排除項(xiàng),并禁用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。如果成功,則會(huì)運(yùn)行腳本。如果失敗,則退出。
每次啟動(dòng)時(shí),惡意軟件都會(huì)更改變量和函數(shù)的名稱,刪除自身,并將修改后的版本放在%AppData%//
< random_from_guid >/< random_from_guid >.vbs。隨機(jī)目錄被隱藏。
如果文件是.VBE腳本,則副本也是.VBE。然后在內(nèi)存中重新編碼和解碼。
三、總結(jié)
Windows管理規(guī)范為管理員提供了很多方便,但也為惡意行為者提供了很多方便。由于WMI允許實(shí)施無文件攻擊,因此我們發(fā)現(xiàn)在野攻擊者越來越關(guān)注這些技術(shù)。在合法使用和惡意濫用方面,WMI都提供了比較高的靈活性,可以獲取有關(guān)系統(tǒng)的信息,甚至為遠(yuǎn)程計(jì)算機(jī)和應(yīng)用程序進(jìn)行配置,安排在特定時(shí)間運(yùn)行進(jìn)程,啟用和禁用日志記錄以獲取代碼執(zhí)行。
這些特性使其成為惡意行為者的理想組件,特別是在偵查方面。除此之外,WMI對(duì)于執(zhí)行、持久化、橫向移動(dòng)、命令和控制、滲出等環(huán)節(jié)都有比較大的影響。作為一種不太典型的間接方法,它也可以成為防御逃避的一種方式。
自2018年首次發(fā)現(xiàn)以來,Kingminer一直在不斷發(fā)展,當(dāng)前版本使用事件觸發(fā)執(zhí)行-WMI事件訂閱(T1546.003)的技術(shù)。更重要的是,WMI處于一個(gè)非常微妙的位置,可以檢查是否安裝了特定的Windows Update,并阻止受感染計(jì)算機(jī)上的遠(yuǎn)程桌面訪問。對(duì)于勒索軟件來說,WMI也可以發(fā)揮重要的作用。作為其中的典型案例,我們選擇了Maze進(jìn)行介紹,該惡意軟件會(huì)使用WMI來刪除Windows備份。將視線轉(zhuǎn)移到銀行領(lǐng)域,我們關(guān)注到知名惡意軟件Emotet也使用了WMI。利用間接命令執(zhí)行(T1202)技術(shù),攻擊者可以逃避某些安全產(chǎn)品的檢測。PowerShell下載工具sLoad經(jīng)常會(huì)濫用BITS,但我們看到,它也并不是唯一的攻擊思路。
SLoad在偵查階段會(huì)使用一些WMI類,例如Win32_Processor、Win32_OperatingSystem和Win32_LogicalDisc這些類來獲取系統(tǒng)信息。我們選擇了比較典型的挖礦下載工具進(jìn)行分析,在該工具中,通過WMI操縱注冊(cè)表來禁用保護(hù)機(jī)制(T1112,修改注冊(cè)表)。另外,它還會(huì)通過Win32_PingStatus類ping知名網(wǎng)站,從而確認(rèn)是否連接到互聯(lián)網(wǎng)。
盡管WMI濫用已經(jīng)持續(xù)了近十年,但它仍然在繼續(xù)發(fā)展。如今,它已經(jīng)可以在多種新型場景中發(fā)生,并影響著大量攻擊技術(shù)。從Stuxnet開始,現(xiàn)代惡意軟件結(jié)合了基于WMI的逃避技術(shù),遺憾的是,這些看似微小的技術(shù)已經(jīng)能夠阻止攻擊,或使目標(biāo)全面淪陷。