◆吳紅
(國網(wǎng)眉山供電公司四川 620010)
Windows事件跟蹤[1](Event Tracing for Windows)是Windows操作系統(tǒng)提供的內(nèi)核級(jí)別跟蹤工具。在軟件開發(fā)領(lǐng)域,ETW提供了以非侵入式的方式來監(jiān)控組件的能力,例如識(shí)別CPU高占用率、資源泄露、調(diào)用堆棧,并能輸出日志以便構(gòu)建監(jiān)控與警報(bào)系統(tǒng)。由于其強(qiáng)大的功能及廣泛的覆蓋面,在安全領(lǐng)域也常用作SIEM[2]等安全組件的事件收集器。
在APT攻擊中,APT組織幾乎都會(huì)在受害者主機(jī)上部署惡意軟件,這些軟件功能可能各有側(cè)重,但總需要一種方式將數(shù)據(jù)走私至外部網(wǎng)絡(luò),因此NIDS等安全設(shè)施盡其所能地檢測(cè)網(wǎng)絡(luò)流量中的可疑行為,從而發(fā)現(xiàn)APT攻擊的痕跡。除此之外,HIDS或EDR等終端防護(hù)設(shè)施也需要監(jiān)視系統(tǒng)環(huán)境,試圖攔截APT進(jìn)程發(fā)起各類數(shù)據(jù)竊取、橫向移動(dòng)、權(quán)限提升、后門部署行為,并配合NIDS關(guān)聯(lián)受害主機(jī)與惡意進(jìn)程,而ETW正好提供了基礎(chǔ)。ETW能以多個(gè)角度對(duì)進(jìn)程行為進(jìn)行記錄,如進(jìn)程調(diào)用的Win32 API、調(diào)用堆棧、加載的dll、網(wǎng)絡(luò)通信等,并且十分高效。因此,使用ETW作為數(shù)據(jù)源構(gòu)建自動(dòng)化APT威脅告警系統(tǒng)是一種可行的方案。本文將介紹ETW架構(gòu),并描述一種基于ETW的可疑APT進(jìn)程檢測(cè)的解決方案。
ETW分為三個(gè)組件:
(1)控制器,用于啟動(dòng)和停止事件跟蹤會(huì)話并啟用提供程序。
(2)提供者,提供事件。
(3)消費(fèi)者,消費(fèi)事件。
有四種提供者,MOF提供者、WPP提供者、基于清單的提供者與TraceLogging提供者。每一個(gè)基于清單的提供者都有下列信息:
(1)名稱;
(2)GUID;
(3)級(jí)別,系統(tǒng)使用6個(gè)級(jí)別,0為Log Always,1為Critical,2為Error, 3為Warning,4為Informational,5為Verbose,其中0是默認(rèn)級(jí)別。還可以定義自定義日志記錄級(jí)別,但保留級(jí)別 6-15??梢酝ㄟ^ ORing各自的級(jí)別來捕獲一個(gè)以上的日志記錄級(jí)別;提供255 (0xFF)是捕獲所有支持的日志記錄級(jí)別的標(biāo)準(zhǔn)方法;
(4)關(guān)鍵字 All,關(guān)鍵字用于過濾特定類別的事件。日志級(jí)別用于按事件的真實(shí)性/重要性進(jìn)行過濾,而關(guān)鍵字則允許按事件類別進(jìn)行過濾。一個(gè)關(guān)鍵字對(duì)應(yīng)于一個(gè)特定的位值。All表示對(duì)于KeywordsAny匹配的給定關(guān)鍵字,應(yīng)根據(jù) KeywordsAll中的特定位值進(jìn)行進(jìn)一步過濾。該字段通常被設(shè)置為零;
(5)關(guān)鍵字Any,允許根據(jù)指定的關(guān)鍵字的任意組合進(jìn)行過濾。這可被視為“邏輯或”,其中 KeywordsAll是“邏輯與”的后續(xù)應(yīng)用。低的 6個(gè)字節(jié)指的是特定于提供者的關(guān)鍵字,高的兩個(gè)字節(jié)是保留的。
(6)屬性;
(7)過濾器類型。
圖1 ETW架構(gòu)圖
Logman是Windows內(nèi)置的事件跟蹤會(huì)話創(chuàng)建與管理工具。下面介紹一些用法:
(1)查詢Providers: logman query providers;
(2)查詢系統(tǒng)正在運(yùn)行的ETW會(huì)話:logman query -ets;
(3)創(chuàng)建事件跟蹤會(huì)話:logman create trace [Name]-ets。
ETWExplorer用于查看Provider的元信息,例如事件類型、模板、關(guān)鍵字等。如果想探索系統(tǒng)中一些未文檔化或用例較少的Provider,該工具是一個(gè)較好的選擇。
該工具是微軟官方提供的ETW分析工具,功能強(qiáng)大并具有友好的用戶界面,但它已停止開發(fā)與支持。
krabsetw是一個(gè)C++庫,它簡(jiǎn)化了與ETW的交互。它允許啟用任何數(shù)量的跟蹤和提供者,并允許客戶端代碼從這些跟蹤中注冊(cè)事件通知。krabsetw還提供了代碼來簡(jiǎn)化將通用事件數(shù)據(jù)解析為強(qiáng)類型數(shù)據(jù)的過程。
flatkrabsetw 是一個(gè)圍繞 krabsetw C++ 庫的 flat-C 封裝器。它的主要目的是為其他語言的FFI綁定提供接口。
本文的解決方案主要從三個(gè)方面記錄進(jìn)程行為:
對(duì)于進(jìn)程網(wǎng)絡(luò)行為,我們選擇Provider Microsoft-Windows-Kernel-Network。該P(yáng)rovider提供TCP/IP及UDP協(xié)議細(xì)粒度的事件模板,如發(fā)起連接、連接建立、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、斷開連接等。模板字段包含數(shù)據(jù)長度、源地址、目標(biāo)地址、源端口、目標(biāo)端口、開始時(shí)間、結(jié)束時(shí)間、以及最重要的進(jìn)程ID等信息。
對(duì)于進(jìn)程的操作行為,如鏡像加載、線程創(chuàng)建等,使用Microsoft-Windows-Kernel-Process Provider。該P(yáng)rovider提供的重要事件模板有進(jìn)程創(chuàng)建、進(jìn)程結(jié)束、線程創(chuàng)建、線程結(jié)束、鏡像加載、鏡像卸載。
APT攻擊行為中的數(shù)據(jù)竊取會(huì)留下對(duì)文件系統(tǒng)的訪問痕跡,而這些痕跡可通過ETW Provider Microsoft-Windows-Kernel-File記錄。該P(yáng)rovider記錄文件創(chuàng)建、寫入、讀取、移動(dòng)、拷貝、重命名、設(shè)置安全描述符等。
下一步是選擇對(duì)ETW進(jìn)行交互的工具。Logman等命令行工具雖然允許我們配置并啟動(dòng)ETW會(huì)話,但它們通常不提供API或自定義配置以供其他客戶端實(shí)時(shí)分析并處理日志。雖然我們可以選擇先保存日志文件,再統(tǒng)一轉(zhuǎn)發(fā)至日志中心,但這樣做在實(shí)時(shí)性上稍差,對(duì)事件日志的預(yù)處理也需要在服務(wù)端統(tǒng)一完成,而一些輕量的預(yù)處理工作交由客戶端處理更加合適。因此,我們的方案是自行開發(fā)事件收集器,為了減輕開發(fā)人員的工作量,使用腳本語言FFI[3]庫與ETW進(jìn)行交互。
Elasticsearch、Logstash 和 Kibana(ELK)I[4]在數(shù)據(jù)處理和分析領(lǐng)域有廣泛應(yīng)用。使用ETW收集到的事件日志將流經(jīng)日志管道并落入Elasticsearch中,可通過Elasticsearch API檢索并進(jìn)一步分析。在部署ELK棧時(shí),我們?cè)诳拷鼣?shù)據(jù)源側(cè)使用Filebeat TCP端口轉(zhuǎn)發(fā)日志到Redis數(shù)據(jù)庫中,Redis數(shù)據(jù)庫用于消息隊(duì)列。
當(dāng)NIDS發(fā)出告警后,APT分析引擎將關(guān)聯(lián)連接時(shí)間到ETW事件中的一組網(wǎng)絡(luò)通信日志,并提取PID字段,在Elasticsearch中過濾出相應(yīng)的進(jìn)程并告警。接下來,引擎進(jìn)一步分析可疑進(jìn)程,這一步可通過下列幾個(gè)方面進(jìn)行:
(1)調(diào)用反病毒軟件接口進(jìn)行查殺。例如主機(jī)是Windows 10操作系統(tǒng),則調(diào)用內(nèi)置的反病毒軟件掃描接口[5](AMSI)的Scan方法掃描。
(2)提取進(jìn)程鏈,這一過程需要部署在主機(jī)上的Agent配合收集信息。獲得進(jìn)程鏈后,識(shí)別可疑模式,如利用 Office宏創(chuàng)建的子進(jìn)程,或者Jscript或VBScript等腳本引擎解釋器創(chuàng)建的子進(jìn)程,以及WMI宿主進(jìn)程創(chuàng)建的子進(jìn)程。
(3)標(biāo)記“白加黑”模式運(yùn)行的可疑軟件。白加黑指利用殺軟白名單進(jìn)程加載惡意 dll的手法。如果 dll包含 APT所需的核心功能,則其在加載后可能直接搜集數(shù)據(jù)并發(fā)送至攻擊源,因此,分析引擎尋找最早的告警記錄時(shí)間并在其之前一段范圍里過濾進(jìn)程鏡像加載事件,以此大致定位可疑的dll,當(dāng)然這種方式誤報(bào)率較高。
(4)C2信道檢測(cè)。雖然有不少APT組織使用的遠(yuǎn)控都能隨機(jī)化心跳包間隔,但檢測(cè)以固定間隔發(fā)起的C2連接請(qǐng)求仍然有必要。除此之外,使用DNS信道往往會(huì)產(chǎn)生大量DNS請(qǐng)求,因此過于頻繁的DNS流量也是檢測(cè)指標(biāo)之一。
本文介紹了ETW在APT檢測(cè)中的應(yīng)用。ETW作為Windows內(nèi)置的高效工具,已經(jīng)被大量運(yùn)用于紅軍安全建設(shè)領(lǐng)域,越來越多的安全產(chǎn)品也使用它收集數(shù)據(jù)。但ETW不是萬靈藥,不能篤定ETW能無損地記錄所有數(shù)據(jù)。目前已有不少技術(shù)用于避開或破壞ETW架構(gòu),因此在未來圍繞ETW的對(duì)抗還將持續(xù)升溫。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2020年12期