現代惡意軟件技術概述:盤點近十年惡意軟件對WMI的濫用
一、前言
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的逃避技術,遺憾的是,這些看似微小的技術已經能夠阻止攻擊,或使目標全面淪陷。