張澤 陳順 郭雅楠 余子龍 靖闊 楊建強
摘? 要: 安全用戶經常需要分析并找出系統(tǒng)中的可疑程序。利用Windows的PowerShell、WMI和內置程序實現(xiàn)了一個可疑程序取證工具,它能夠輔助安全用戶對可疑程序進行分析和取證。相較于第三方工具,該工具更加方便、安全、可靠,在某些方面也更加智能。測試結果表明,該工具能夠切實地輔助安全用戶識別可疑程序,收集與可疑程序有關的重要數(shù)據(jù)。
關鍵詞: PowerShell; 可疑程序; 安全; 取證
中圖分類號:TP309.5? ? ? ? ? 文獻標識碼:A? ? 文章編號:1006-8228(2022)02-23-04
Design of suspicious program forensics tool of using PowerShell
Zhang Ze, Chen Shuncai, Guo Yanan, Yu Zilong, Jing Kuo, Yang Jianqiang
(School of Computer Engineering, Hubei University of Arts and Science, Xiangyang, Hubei 441053, China)
Abstract: Security users often need to analyze suspicious programs in the system. A forensics tool for suspicious program was implemented by using Windows PowerShell, WMI and built-in programs. This tool can assist security users to analyze suspicious programs and collect the evidences. Compared with third-party tools, this tool is more convenient, safe, reliable, and smarter in some aspects. The test results show that the tool runs well and functions normally, and can effectively assist security users in identifying suspicious programs and collecting important data related to suspicious programs.
Key words: PowerShell; suspicious program; security; forensics
0 引言
防病毒軟件并不能檢測出所有的惡意軟件(或病毒),特別是新出現(xiàn)的惡意軟件。另外,有些不被識別為惡意軟件的程序,盡管并無明顯的惡意行為,但是卻會消耗大量的網絡帶寬資源、CPU計算資源或頻繁讀寫磁盤,嚴重影響合法程序的正常運行;有些軟件會時不時地彈出廣告窗口;有些軟件會誘導用戶修改系統(tǒng)配置或下載安裝其他軟件。這些軟件程序,盡管可能不被識別成病毒或惡意軟件,但是卻會影響用戶使用系統(tǒng)的體驗,甚至會影響業(yè)務系統(tǒng)的正常運行[1]。因此,很多企業(yè)的網絡管理員或安全分析員,以及具有較強安全意識的普通用戶,都會經常對系統(tǒng)中正在運行的進程進行分析,以識別出可疑的程序(如惡意軟件、流氓軟件、間諜軟件、廣告軟件等)。雖然Windows的“任務管理器”在一定程度上可用于對可疑的程序進行分析,但它并不是一個很專業(yè)的工具,特別是較早版本的Windows系統(tǒng)(包括Windows 7)的任務管理器更是如此。另外,某些第三方工具如ProcessHacker雖然能夠很好地用于分析可疑程序[2],但是,如果企業(yè)網絡禁止安裝第三方軟件的話,則可能無法使用此類軟件。這些工具通常不能對遠程系統(tǒng)進行分析,在某些方面也缺少一定的智能。
我們利用Windows的PowerShell、WMI和內置程序實現(xiàn)了一個可疑程序取證工具。該工具能夠收集可疑程序的相關信息,輔助安全用戶(主要指安全分析師、網絡管理員以及具有較強安全意識的普通用戶等)對可疑程序進行分析和取證。該工具既可以對本地系統(tǒng)的進程進行分析取證,也可以對遠程系統(tǒng)上的進程進行分析取證。同時還能夠智能地識別出某些可疑的進程,從而輔助安全用戶快速定位惡意或流氓程序。該工具能夠在Windows 7及之后的所有Windows系統(tǒng)上運行,并且不需要借助任何第三方工具,僅僅依靠Windows自身提供的程序或功能,就可以對可疑程序進行分析、取證。相較于第三方工具,該工具更加方便、安全、可靠,在某些方面也更加智能。
1 功能設計
要分析并確定系統(tǒng)中的可疑進程或程序,安全用戶需要了解Windows系統(tǒng)中常見的進程(特別是系統(tǒng)進程),熟悉它們的名稱和上下文環(huán)境。比如特定的父進程、特定的執(zhí)行賬戶、固定的程序文件路徑(啟動位置)等。如果常見的進程在父進程、執(zhí)行賬戶或啟動位置等方面出現(xiàn)偏離,則可能是惡意程序[3]。對于系統(tǒng)中不常見的進程,也需要從上述幾個方面進行判斷。此時主要看該進程的執(zhí)行賬戶是否合適、父進程是否恰當、啟動位置是否合理。比如,普通進程的執(zhí)行賬戶是System而非當前用戶帳戶,在資源管理器中啟動的程序的父進程不是explorer.exe,程序的啟動位置不是Program Files和System32,這些都是程序可疑的線索。因此,取證工具需要向安全用戶呈現(xiàn)系統(tǒng)中所有進程的如上信息。本工具將以樹型格式顯示進程的父子關系,同時給出各個進程的執(zhí)行賬戶和啟動路徑等信息。為了幫助安全用戶快速定位可疑的進程,本工具將借鑒人工智能技術來嘗試識別可疑的進程。
像惡意軟件、流氓軟件、間諜軟件或廣告軟件之類的可疑程序,為了能夠長期存活,通常都會采用某種方式隨系統(tǒng)啟動而運行。這些方式包括:在啟動文件夾中或注冊表的自啟動項中存放本程序文件的路徑或快捷方式,或以服務或計劃任務的方式啟動自己[3]。本工具將查看可疑進程在上述位置是否存在啟動命令。
可疑程序可能還會與遠程計算機通信,本工具將監(jiān)視可疑程序的網絡活動??梢沙绦虻膭?chuàng)建時間有時也能作為分析線索。另外,某些可疑程序為了保存配置信息或避免被安全用戶發(fā)現(xiàn),還會創(chuàng)建新的文件。本工具將查看可疑程序文件的創(chuàng)建時間并查找與該時間相近的其他文件的路徑信息。
除了以上功能,本工具還利用惡意程序檢測網站VirusTotal查看可疑程序是否是惡意程序[4]。除了對本地Windows系統(tǒng)上的可疑程序進行取證,本工具還可以對遠程系統(tǒng)上的可疑程序進行取證。另外,默認情況下,所有的取證結果都顯示在屏幕上,本工具也可以將各種取證結果以獨立的CSV或TXT文件形式保存起來,方便長期保存和事后分析。
概括而言,本工具具有如下六大功能:①顯示帶有關鍵信息的進程樹;②智能識別可疑進程;③搜集可疑程序的相關信息;④利用VirusTotal在線檢測可疑程序;⑤保存取證結果到文件中;⑥遠程取證。
2 設計要點
2.1 PowerShell版本的選擇
不同版本的Windows使用的PowerShell版本并不相同。比如,Windows 7及Windows Server 2008 R2默認安裝2.0版的PowerShell,Windows 10、Windows Server 2016和Windows Server 2019默認安裝PowerShell V5.1[5]。不過,基本上來說,PowerShell是向前兼容的,這意味著為舊版本的PowerShell編寫的腳本通??梢栽谛掳姹镜腜owerShell上運行。另外,盡管可以通過安裝PowerShell V1.0讓某些早期的Windows系統(tǒng)(比如XP SP2)支持PowerShell,但這些Windows系統(tǒng)已經過時,極少有人去使用。還有,盡管微軟已經結束對Windows 7的支持,但是Windows 7目前仍然占有比較大的市場[6]。所以本工具使用環(huán)境開發(fā)PowerShellV2.0,從而可以在Windows 7及之后的所有Windows系統(tǒng)上運行。
2.2 遇到的問題及解決方法
盡管以PowerShellV2.0作為開發(fā)環(huán)境可以保證本工具能夠在主流的Windows上運行,但是Power-
ShellV2.0是比較早的版本,缺少實現(xiàn)本工具的某些功能的命令或函數(shù)。我們采用的解決辦法是利用Windows的某些內置程序來實現(xiàn)這些功能。如表1所示。表1中同時還給出了PowerShell V2.0之后新增的具有類似功能的函數(shù)。
在中文版Windows中,控制臺的默認代碼頁是936。在此代碼頁下,程序schtasks無法正常工作。為了能夠順利使用schtasks獲得系統(tǒng)中的計劃任務,我們先保存當前的代碼頁,然后使用命令chcp切換到代碼頁437(此代碼頁下schtasks可以正常工作),然后執(zhí)行schtasks獲得計劃任務列表,之后再切換回原來的代碼頁。
2.3 其他重要設計
PowerShell以兩種不同的方式來進行遠程處理,一種稱為一對一遠程處理,另一種稱為一對多遠程處理。前者實際上是在遠程系統(tǒng)上執(zhí)行命令,包括腳本程序,后者是把命令發(fā)送到多個遠程計算機上,每個計算機獨立地執(zhí)行命令并返回結果[7]。當使用本工具對遠程系統(tǒng)上的進程進行分析取證時,如果使用第一種遠程處理方式,則需要事先把腳本程序復制到遠程系統(tǒng)上,這樣做不僅麻煩,效率也低。所以,我們采用第二種遠程處理方式,這種方式使用PowerShell的Invoke-Command命令進行一對多遠程處理。
為了簡化遠程取證的編碼,并以統(tǒng)一的方式處理本地取證和遠程取證,本工具把所有的數(shù)據(jù)收集功能集中在一個函數(shù)模塊中。這樣做,一方面,只需用一條Invoke-Command命令調用該函數(shù)即可完成對遠程系統(tǒng)上相關信息的收集,另一方面,也使得程序的流程更加簡潔,邏輯更加清晰。
為了幫助安全用戶快速定位可疑的進程,借鑒人工智能思想,本工具根據(jù)Windows中程序啟動的常見位置、環(huán)境變量path中的路徑、常見的Windows程序啟動位置,來判斷系統(tǒng)中的進程的啟動位置是否異常;同時判斷部分常見的系統(tǒng)進程的父進程和執(zhí)行賬戶是否異常。如果異常,則給出進程可疑的提示信息,從而輔助安全用戶快速定位可疑的進程。
在利用VirusTotal來查看可疑程序是否是惡意文件時,我們把可疑的程序文件和它所加載的所有非微軟官方的DLL文件的Hash指紋提交到VirusTotal來進行查詢。之所以不查詢微軟的DLL,一是它們基本上都是Windows系統(tǒng)文件。既然我們信任并使用Windows的內置程序,我們也應該信任這些DLL;二是可以節(jié)約查詢時間,提高執(zhí)行速度。
3 軟件實現(xiàn)
本工具是一個基于PowerShell腳本的命令行工具,其具體的執(zhí)行結果或功能依賴于是否使用命令選項以及使用何種選項。當本工具不帶任何選項時,將以樹形的格式顯示系統(tǒng)中的進程。如圖1所示。
本工具可用的選項及其功能說明如下。
list:以列表的格式顯示系統(tǒng)中各個進程的信息,包括進程的名字、ID、父進程的ID、用戶賬戶、可執(zhí)行文件路徑、命令行參數(shù)。
p:后跟指定進程的ID,將搜索并顯示該進程的家族線、加載的DLL、網絡活動、與之相關的計劃任務和服務、該進程在注冊表中或啟動文件夾中的自啟動項、進程的可執(zhí)行文件的時間戳等信息。該選項不能和下面的filepath同時使用。
filepath:后跟指定的程序文件的路徑,將搜索并顯示與給定的程序文件有關的信息(內容和選項p相似)。如果該程序文件作為進程在運行,還會顯示進程的相關信息。該選項不能與p同時使用。
outpath:后跟指定的文件夾路徑,將以CSV或TXT文件的格式在該路徑下保存指定的進程(和選項p同時使用時)或程序文件(與filepath同時使用時)的有關信息。
minutes:后跟分鐘數(shù),將搜索與可疑的程序文件的創(chuàng)建時間相距給定時長的文件。
computer:后跟將要分析的遠程計算機的名字或IP地址,將對遠程計算機進行取證。
credential:當分析遠程計算機時,可以使用該選項給出遠程系統(tǒng)的賬戶憑據(jù)。
vcheck:在VirusTotal網站上檢測可疑進程加載的模塊文件(程序文件及其加載的DLL)是否是惡意文件。
從使用命令選項的角度,本工具的主要執(zhí)行流程如圖2所示。無論是本地取證還是遠程取證(使用選項computer),執(zhí)行流程都是一樣的。需要說明的是,為突出主要流程和避免流程過于復雜,圖2中省略了minutes選項。minutes只在使用p或filepath選項的時候使用,并且可以和outpath、vcheck同時使用。
4 結束語
許多公司或企業(yè)的網絡信息系統(tǒng)對軟件的安裝有著嚴格的限制,因此安全用戶可能無法使用合適的工具對系統(tǒng)中的可疑進程進行分析取證。本文中取證工具利用Windows的PowerShell、WMI和內置程序實現(xiàn),不受企業(yè)軟件安裝策略的限制,可以運行在Windows 7及之后的所有Windows系統(tǒng)上。測試結果表明,本工具能夠切實地輔助安全用戶識別可疑程序,收集與可疑程序有關的重要證據(jù)。本工具不僅為嚴格限制軟件安裝的企業(yè)網絡提供了一種對可疑程序進行分析和取證的選擇,其特有的功能也是對現(xiàn)有的可疑程序分析工具的補充。本工具還有進一步拓展的空間。比如,增加同時對多個遠程系統(tǒng)進行取證的能力;當通過向VirusTotal提交文件指紋來檢測文件是否包含惡意代碼失敗時,轉而提交文件內容來進行檢測;提供更多自動識別可疑程序的途徑,以增強軟件的智能。未來我們將進一步強化本工具的功能。
參考文獻(References):
[1] 陸英.時下流行的9種惡意軟件[J].計算機與網絡,2019,45
(10):55-56
[2] Hoskyn, Jane. FREE SOFTWARE that SPEEDS UP
YOUR PC[J]. Computer Act!ve,2014(426)
[3] 韓筱卿,王建鋒等.計算機病毒分析與防范大全[M].北京:
電子工業(yè)出版社,2008
[4] 萬立夫.用客戶端直接到VirusTotal檢測文件[J].電腦迷,
2014(2):73
[5] How to Check the PowerShell Version Installed? [2020-11-3]
http://woshub.com/check-powershell-version-installed/
[6] Windows 7正式退休 微軟希望提升Win10市場占有率
[2020.01.15]. http://www.techweb.com.cn/it/2020-01-15/2773763.shtml
[7] Don Jones, Jeffery Hicks. Learn Windows PowerShell 3 in
a Month of Lunches (Second Edition)[M]. New York, US, Manning Publications Co,2013