新聞中心
近日,F(xiàn)ireEye 安全公司的高級(jí)逆向工程團(tuán)隊(duì)(FLARE)發(fā)布了一份標(biāo)題為《 WMI 攻擊,防御與取證分析技術(shù) 》的PDF文檔,該文檔頁(yè)數(shù)多達(dá)90頁(yè),文檔內(nèi)容主要從攻擊,防御和取證分析這三個(gè)角度分篇對(duì)WMI 技術(shù)做了詳細(xì)的描述。其中不乏有很多值得學(xué)習(xí)思考的地方。于是,我利用業(yè)余時(shí)間翻譯整理了此文檔,拿出來(lái)與大家共分享 :),如有紕漏,望各位不吝賜教。

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),元氏網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:元氏等地區(qū)。元氏做網(wǎng)站價(jià)格咨詢:028-86922220
為了對(duì)原文檔內(nèi)容進(jìn)行全面的翻譯和解讀,我按照文章的分析角度對(duì)原文檔進(jìn)行了分段式的翻譯,本篇文章是分段式里面的第二篇,其余兩篇譯文的標(biāo)題分別為:
《 WMI 的攻擊,防御與取證分析技術(shù)之攻擊篇 》
《 WMI 的攻擊,防御與取證分析技術(shù)之取證分析篇 》
0x00 WMI 防御
對(duì)于每一種WMI的攻擊方式,都有相同數(shù)量的潛在防御措施。
現(xiàn)有的檢測(cè)工具
下列工具可以用來(lái)檢測(cè)和刪除WMI的持久性惡意攻擊程序:
Sysinternals Autoruns
Kansa –– 一個(gè)用于事件響應(yīng)的 PowerShell 模塊
這些工具的缺點(diǎn)是只能在一個(gè)特定時(shí)間的快照里檢測(cè) WMI 持久性代碼。一旦攻擊者執(zhí)行完他們的操作,他們就會(huì)清理掉相關(guān)的持久性代碼。然而可以使用 WMI 永久訂閱實(shí)時(shí)的捕捉攻擊者的 WMI 持久性操作。
通過(guò) EventConsumers 對(duì)WMI持久性的檢測(cè)是微不足道的。圖 11 中的 PowerShell 代碼會(huì)查詢遠(yuǎn)程系統(tǒng)上的所有 WMI 持久性項(xiàng)目。
圖 11:檢測(cè)遠(yuǎn)程系統(tǒng)的 WMI 持久性的 PowerShell 代碼
使用WMI檢測(cè)WMI攻擊
目前在WMI 中有極其強(qiáng)大的事件處理子系統(tǒng),因此,WMI 可以被認(rèn)為是一個(gè)你從來(lái)不知道的并且已存在的微軟的免費(fèi)主機(jī) IDS ??紤]到幾乎所有的系統(tǒng)操作都可以觸發(fā) WMI 事件,所以,WMI 可以實(shí)時(shí)的捕捉許多攻擊行為。請(qǐng)細(xì)想下面的攻擊活動(dòng)以及在 WMI 中它們各自的影響:
1.攻擊者使用 WMI 作為持久性機(jī)制
影響: __EventFilter 、__EventConsumer 和 __FilterToConsumerBinding 的實(shí)例被創(chuàng)建。__InstanceCreationEvent 事件被觸發(fā)。
2.WMI Shell 工具集被用于 C2 的通道
影響: __Namespace 對(duì)象的實(shí)例被創(chuàng)建和修改。因此,__NamespaceCreationEvent 和__NamespaceModificationEvent 事件被觸發(fā)了。
3.創(chuàng)建 WMI 類來(lái)存儲(chǔ)攻擊者的數(shù)據(jù)
影響:__ClassCreationEvent 事件被觸發(fā)。
4.攻擊者安裝惡意的 WMI 提供程序
影響:__Provider 類的實(shí)例被創(chuàng)建,__InstanceCreationEvent事件被觸發(fā)。
5.攻擊者通過(guò) “開(kāi)始菜單” 和 “注冊(cè)表” 進(jìn)行持續(xù)攻擊
影響:Win32_StartupCommand 類實(shí)例被創(chuàng)建,__InstanceCreationEvent事件被觸發(fā)。
6.攻擊者通過(guò)其他額外的注冊(cè)表值進(jìn)行持續(xù)攻擊
影響:RegistryKeyChangeEvent 和 RegistryValueChangeEvent 事件被觸發(fā)。
7.攻擊者安裝服務(wù)
影響:Win32_Service 類實(shí)例被創(chuàng)建,__InstanceCreationEvent 事件被觸發(fā)。
所有的攻擊和上述描述的影響都可以用 WMI 事件查詢來(lái)表示。在與事件消費(fèi)者結(jié)合使用時(shí),防御者可以極具創(chuàng)造力的選擇如何檢測(cè)和響應(yīng)攻擊者的操作。例如,防御者可以選擇在創(chuàng)建 Win32_StartupCommand 的任意實(shí)例后接收一封電子郵件。
在創(chuàng)建了用于警報(bào)攻擊者行為的 WMI 事件時(shí),必須認(rèn)識(shí)到攻擊者也有可能很熟悉 WMI ,并且可以檢查和刪除現(xiàn)有的 WMI 防御事件訂閱。因此,貓和老鼠的游戲就接著開(kāi)始了。作為最終所采取的防御機(jī)制以防止攻擊者刪除你的防御事件訂閱,你可以注冊(cè)一個(gè)事件訂閱來(lái)檢測(cè)__InstanceDeletionEvent 事件的 __EventFilter,__EventConsumer 和__FilterToConsumerBinding 對(duì)象。然后,如果攻擊者成功地刪除了 WMI 永久防御事件訂閱,防御者將會(huì)在刪除時(shí)有最后一次機(jī)會(huì)得到攻擊警報(bào)。
緩解措施
除了部署 WMI 永久防御事件訂閱之外,還有幾種可能防止部分或所有正在發(fā)生的 WMI 攻擊的緩解措施。
系統(tǒng)管理員可以禁用 WMI 服務(wù)。這對(duì)一個(gè)組織要考慮它對(duì) WMI 的需要是非常重要的。一定要考慮清楚停止 WMI 服務(wù)后所帶來(lái)的任何意外情況。因?yàn)?,Windows 已經(jīng)越來(lái)越依賴于 WMI 和 WinRM 的管理任務(wù)。
考慮阻止 WMI 的協(xié)議端口。如果沒(méi)有正當(dāng)?shù)睦碛尚枰h(yuǎn)程使用 WMI,可以考慮配置 DCOM 使用單一端口,然后阻止該端口。這是一個(gè)比較明智的緩解措施,因?yàn)樗鼤?huì)阻止遠(yuǎn)程 WMI ,但允許該服務(wù)在本地運(yùn)行。
WMI、 DCOM 和 WinRM 的事件會(huì)被記錄為下列事件日志:
??a. Microsoft-WindowsWinRM/Operational
????i. 顯示含有來(lái)源 IP 地址的失敗的 WinRM 連接嘗試
??b.Microsoft-Windows-WMI-Activity/Operational
????i. 包含失敗的 WMI 查詢和可能包含攻擊者活動(dòng)證據(jù)的方法調(diào)用
??c.Microsoft-WindowsDistributedCOM
????i. 顯示含有來(lái)源 IP 地址的失敗的 DCOM 連接嘗試
0x01 公共信息模型 (CIM)
"公共信息模型 (CIM) 是一個(gè)開(kāi)放的標(biāo)準(zhǔn),它定義了如何將托管的元素在 IT 環(huán)境中表示為一組公共的對(duì)象以及它們之間的關(guān)系。分布式管理任務(wù)組維護(hù) CIM ,允許這些托管的元素獨(dú)立于其制造商或供應(yīng)商的一致管理。WMI 使用 CIM 標(biāo)準(zhǔn)來(lái)表示其管理的對(duì)象。例如,系統(tǒng)管理員通過(guò) WMI 查詢的系統(tǒng)必須通過(guò)標(biāo)準(zhǔn)化的 CIM 命名空間來(lái)獲取一個(gè)處理對(duì)象實(shí)例。
WMI 在 CIM 儲(chǔ)存庫(kù)中維護(hù)了一個(gè)所有可管理對(duì)象的登記冊(cè)。CIM 儲(chǔ)存庫(kù)是一個(gè)持久性的數(shù)據(jù)庫(kù),它存儲(chǔ)在運(yùn)行 WMI 服務(wù)的本地計(jì)算機(jī)上。在使用 CIM 時(shí),它維護(hù)了所有可管理對(duì)象的定義,包括它們之間的關(guān)系以及由誰(shuí)來(lái)提供它們的實(shí)例。例如,當(dāng)軟件開(kāi)發(fā)者通過(guò) WMI 公開(kāi)自定義應(yīng)用程序的性能統(tǒng)計(jì)時(shí),他們必須先注冊(cè)性能指標(biāo)的描述。這使得 WMI 能夠正確解釋查詢并用良好的格式化數(shù)據(jù)來(lái)作響應(yīng)。
CIM 是面向?qū)ο蟮?,支持的特性?(單一) 繼承、抽象和靜態(tài)屬性、默認(rèn)值并可以將任意鍵-值對(duì)附加到被稱作"限定符"的項(xiàng)目中。
相關(guān)的類被分組式的放在分層命名空間之下。類聲明的屬性和方法通過(guò)可托管對(duì)象公開(kāi)。屬性是一個(gè)包含在類實(shí)例中的特定類型數(shù)據(jù)的名稱字段。類定義描述了有關(guān)屬性的元數(shù)據(jù),類的實(shí)例包含了具體的由 WMI 提供程序填充的值。方法是一個(gè)已命名的例程,它在一個(gè)類的實(shí)例中執(zhí)行,并且是由 WMI 提供程序?qū)崿F(xiàn)的。類定義描述了其原型 (返回值的類型、 名稱、 參數(shù)類型),但沒(méi)有實(shí)現(xiàn)過(guò)程。限定符是一個(gè)可以附加到命名空間、類、屬性和方法的元數(shù)據(jù)的鍵-值對(duì)。常見(jiàn)的限定符提供了一個(gè)字符串類型的提示的值,以指示客戶端如何去解釋枚舉項(xiàng)和語(yǔ)言代碼頁(yè)。
例如,圖 12 列出了一些安裝在純凈版 Windows 10 上的命名空間。請(qǐng)注意,它們可以很簡(jiǎn)單的被表示為樹(shù)狀。當(dāng)客戶端沒(méi)有聲明其本身的命名空間時(shí), WMI 會(huì)選擇 ROOT\CIMV2 命名空間作為默認(rèn)的命名空間。
圖 12 命名空間 示例
在此安裝的 Windows 中,ROOT\CIMV2 命名空間包含 1,151 個(gè)類定義。圖 13 列出了一些在此命名空間中發(fā)現(xiàn)的類。請(qǐng)注意每個(gè)類具有一個(gè)名稱和一個(gè)用于唯一標(biāo)識(shí)類的路徑。按照約定,某些類擁有名為 Description 的限定符,它包含了一個(gè)用以描述應(yīng)如何托管這個(gè)類的人類可讀字符串。 WMI Explorer 這個(gè)工具提供了用戶友好的界面來(lái)獲取 Description 限定符并在網(wǎng)格視圖中顯示它的值。
圖 13 類 示例
圖 14 列出了一些 Win32_LogicalDisk 類實(shí)例中已公開(kāi)的屬性。此類定義聲明了 40 個(gè)屬性, Win32_LogicalDisk 類實(shí)例包含了每個(gè)屬性具體的值。例如,DeviceID 屬性是字符串類型,用于磁盤的唯一標(biāo)識(shí),所以一個(gè) WMI 客戶端可以枚舉類實(shí)例并期望得到像 A:、C:,D: 這樣的值。
圖 14 屬性 示例
圖 15 列出了 Win32_LogicalDisk 類實(shí)例中已公開(kāi)的方法。此類定義聲明了五種方法并且相關(guān)聯(lián)的 WMI 提供程序允許客戶端能夠調(diào)用 Win32_LogicalDisk 實(shí)例的這些方法。面板底部的兩個(gè)窗口描述了調(diào)用方法必須提供的參數(shù)和返回的數(shù)據(jù)。在此示例中,Chkdsk 方法需要五個(gè)布爾型參數(shù)并返回了一個(gè)描述操作狀態(tài)的 32 位整數(shù)。請(qǐng)注意, Description 限定符附加到這些方法后其參數(shù)將作為 WMI 客戶端開(kāi)發(fā)者的 API 文檔。
圖 15 方法 實(shí)例
在此安裝的 Windows 中,有三個(gè) Win32_LogicalDisk 類的實(shí)例。圖 16 列出了使用它們唯一的實(shí)例路徑的類實(shí)例。此路徑是通過(guò)組合在類名稱中具有限定符的特殊屬性的名稱和值所構(gòu)成的。在這里,有一個(gè)屬性: DeviceID 。每個(gè)類實(shí)例都是用來(lái)自同一個(gè)邏輯項(xiàng)目的具體數(shù)據(jù)填充的。
圖 16 類實(shí)例 示例
圖 17 列出了 Win32_LogicalDisk 類實(shí)例中 C: 磁盤卷的具體的值。注意,并非 40 個(gè)屬性都列出在了這里;在類定義中,沒(méi)有明確的值的屬性也是沒(méi)有默認(rèn)值的。
圖 17 Win32_LogicalDisk 類實(shí)例中 C: 磁盤卷的屬性值
0x02 托管對(duì)象格式 (MOF)
WMI 使用托管對(duì)象格式(MOF)用于描述 CIM 類的語(yǔ)言。MOF 文件是一個(gè)文本文件,包含了指定的可被查詢的事物的語(yǔ)句如該事物的名稱,復(fù)雜類的字段類型,對(duì)象組相關(guān)的權(quán)限。語(yǔ)言的結(jié)構(gòu)類似于 Java,相當(dāng)于受限的 Java 接口聲明。系統(tǒng)管理員可以通過(guò) WMI 使用 MOF 文件擴(kuò)展 CIM 支持并且 mofcomp.exe 工具可以在 CIM 資料庫(kù)中將被格式化的數(shù)據(jù)插入到 MOF 文件中。WMI 提供程序通常是由提供的 MOF 文件定義的,它定義了數(shù)據(jù)和事件類和提供數(shù)據(jù)的 COM DLL 文件。
MOF 是一種面向?qū)ο蟮恼Z(yǔ)言,它由以下部分組成:
命名空間
類
屬性
方法
限定符
實(shí)例
引用
注釋
所有在 "公共信息模型 (CIM)" 章節(jié)中所闡述的實(shí)體都可以使用 MOF 語(yǔ)言進(jìn)行描述。以下各章節(jié)將會(huì)說(shuō)明如何使用 MOF 語(yǔ)言來(lái)描述 CIM 實(shí)體。
MOF 中的命名空間
要在 MOF 中聲明一個(gè) CIM 命名空間,可以使用 #pragma namespace (\\computername\path) 指令。通常,這個(gè)語(yǔ)句被發(fā)現(xiàn)在文件的最開(kāi)始,并且會(huì)應(yīng)用到同一文件內(nèi)剩余部分的語(yǔ)句。
MOF 語(yǔ)言允許通過(guò)聲明父命名空間并定義一個(gè) __namespaceclass 的新實(shí)例來(lái)創(chuàng)建新的命名空間。例如,我們可以使用在圖 18 中列出的 MOF 文件創(chuàng)建 \\.\ROOT\default\NewNS 命名空間。
圖 18 在 MOF 中創(chuàng)建命名空間
MOF 中的類定義
要在 MOF 中聲明一個(gè)類,首先需要定義當(dāng)前命名空間,然后再使用 class 關(guān)鍵字。提供新的類名和所繼承的類。大多數(shù)類都有一個(gè)父類,新的 WMI 類的開(kāi)發(fā)人員應(yīng)該找到相應(yīng)的要繼承的類。接下來(lái),描述新的類所支持的屬性和方法。將限定符附加到類,屬性和方法時(shí),會(huì)有額外的元數(shù)據(jù)關(guān)聯(lián)到一個(gè)實(shí)體上,如使用目的或枚舉的解釋。使用動(dòng)態(tài)修飾符用于指示提供程序動(dòng)態(tài)的創(chuàng)建類的實(shí)例。抽象類限定符用于指示該類沒(méi)有實(shí)例可以創(chuàng)建。讀取屬性限定符用于指示該值是只讀的。
MOF 支持程序員使用的常見(jiàn)的數(shù)據(jù)類型,包括字符串、數(shù)字類型 (uint8、sint8、uint16、sint16 等)、日期 (datetime) 和其他數(shù)據(jù)類型的數(shù)組。
圖 19 列出了在 MOF 中定義類的語(yǔ)句的結(jié)構(gòu),而圖 20 列出了一個(gè)定義了兩個(gè)新類: ExistingClass 和 NewClass 的 MOF 示例文件。在 \\.\ROOT\default 命名空間中,可以找到這兩個(gè)類。ExistingClass 類有兩個(gè)屬性:Name 和 Description。Name 屬性的 Key 限定符指示了它被用于唯一標(biāo)識(shí)此類的一個(gè)實(shí)例。NewClass 類有四個(gè)顯式屬性: Name, Buffer, Modified 和 NewRef。NewClass 也繼承了其基類 ExistingClass 的 Description 屬性。NewClass 被標(biāo)記了動(dòng)態(tài)限定符,這意味著相關(guān)聯(lián)的 WMI 提供程序?qū)?huì)按需要?jiǎng)討B(tài)創(chuàng)建此類的實(shí)例。NewClass 有一個(gè)名為 FirstMethod 的方法,該方法接受一個(gè) 32 位無(wú)符號(hào)整數(shù)的參數(shù),并返回一個(gè) 8 位無(wú)符號(hào)的整數(shù)值。
圖 19 MOF 類定義結(jié)構(gòu)
圖 20 在 MOF 中創(chuàng)建類定義
MOF中的實(shí)例
在 MOF 中定義類的一個(gè)實(shí)例,需要在類名后使用 instance 關(guān)鍵字, 名稱-值的鍵值對(duì)列表用來(lái)填充具體的屬性值。圖 21 列出了一個(gè)創(chuàng)建 \\.\ROOT\default\ExistingClass 類的實(shí)例的 MOF 文件,并分別給 Name 和 Description 屬性提供了具體的值 SomeName 和 SomeDescription 。其余字段將會(huì)默認(rèn)填充為 nil 。
圖 21 在 MOF 中創(chuàng)建一個(gè)類實(shí)例
MOF 中的引用
CIM 類屬性可以通過(guò)實(shí)例對(duì)象路徑引用其他類的現(xiàn)有實(shí)例。這被稱為引用。在 MOF 中定義類實(shí)例的引用,需要使用 ref 關(guān)鍵字作為屬性的數(shù)據(jù)類型的一部分。例如,圖 22 列出的 MOF 語(yǔ)句用于聲明一個(gè)命名為 NewRef 的類引用,它指向了 ExistingClass 類的一個(gè)實(shí)例。
圖 22 在 MOF 中定義類的實(shí)例引用
若要設(shè)置引用屬性的值,請(qǐng)將屬性的值設(shè)置為實(shí)例對(duì)象路徑用于標(biāo)識(shí)現(xiàn)有的類實(shí)例。例如,圖 23 列出的 MOF 語(yǔ)句可以將 NewRef 的屬性設(shè)置為帶有 Name 屬性的 ExistingClass 類的實(shí)例,這等同于直接使用 SomeName 對(duì) ExistingClass 類實(shí)例的 Name 屬性進(jìn)行賦值。
圖 23 在 MOF 中設(shè)置類實(shí)例的引用
MOF 中的注釋
MOF 格式支持單行和多行 C 語(yǔ)言風(fēng)格的注釋。圖 24 列出了各種風(fēng)格的 MOF 語(yǔ)句定義的注釋。
圖 24 MOF 中的注釋
MOF 自動(dòng)恢復(fù)
WMI 的 CIM 儲(chǔ)存庫(kù)實(shí)現(xiàn)了 MOF 文件的事務(wù)緩存式的插入,以確保數(shù)據(jù)庫(kù)不會(huì)被破壞。如果在插入的時(shí)候系統(tǒng)發(fā)生崩潰或停止, MOF 文件可以被注冊(cè)為后續(xù)自動(dòng)恢復(fù)。若要啟用此功能,可以在 MOF 文件頂部使用 #pragma autorecover 語(yǔ)句。這時(shí),WMI 服務(wù)將會(huì)把 MOF 文件的完整路徑添加到 MOF 文件自動(dòng)恢復(fù)列表中,此列表存儲(chǔ)在以下注冊(cè)表項(xiàng)中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Autorecover MOFs
網(wǎng)頁(yè)題目:WMI的攻擊、防御與取證分析技術(shù)之防御篇
網(wǎng)站地址:http://m.jiaoqi3.com/article/cdcddsc.html


咨詢
建站咨詢
