摘 要:自從互聯(lián)網(wǎng)問(wèn)世的幾十年來(lái),帶動(dòng)了計(jì)算機(jī)普及的同時(shí),同時(shí)也導(dǎo)致了計(jì)算機(jī)犯罪案件的大幅上升。計(jì)算機(jī)中的電子證據(jù)由于其虛擬性,易修改、易丟失等特性,加之操作系統(tǒng)、程序本身的封裝限制,所以造成了計(jì)算機(jī)犯罪中取證的困難。近幾年來(lái),由于逆向工程方案的問(wèn)世,一種嶄新的程序測(cè)試方法也隨之誕生。本文利用逆向工程方面的知識(shí),探討該項(xiàng)技術(shù)方案在計(jì)算機(jī)取證中的應(yīng)用,以求能降低計(jì)算機(jī)犯罪中取證的困難度。
關(guān)鍵詞:逆向工程;計(jì)算機(jī)取證;網(wǎng)絡(luò)犯罪
中圖分類號(hào):TP391.7
當(dāng)前,網(wǎng)絡(luò)空間如今在以高速的節(jié)奏發(fā)展壯大,幾乎每天都有計(jì)算機(jī)被用于從事犯罪活動(dòng)。隨著計(jì)算機(jī)網(wǎng)絡(luò)、硬件和軟件的構(gòu)成越來(lái)越復(fù)雜,加之其與傳統(tǒng)證據(jù)的勘驗(yàn)、檢查方法以及取證對(duì)象等的不同,也增加了將其用于犯罪活動(dòng)的可能性與取證的難度。由于在軟件測(cè)試中,黑盒測(cè)試方法無(wú)法獲知源程序是否被篡改,犯罪分子有可能利用程序的封裝性所造成的取證難度加大而隱藏了犯罪證據(jù)。逆向工程可從本質(zhì)上分析程序代碼結(jié)構(gòu)以及程序的運(yùn)行流程,從而得到犯罪分子的犯罪證據(jù)。
1 逆向工程簡(jiǎn)介
計(jì)算機(jī)程序一般是用C、C++等高級(jí)語(yǔ)言編寫后,由編譯器編譯成機(jī)器語(yǔ)言形式的目標(biāo)文件后,再通過(guò)鏈接過(guò)程最終生成可執(zhí)行的程序。逆向工程(Reverse Engineering)是將某封裝好的可執(zhí)行程序還原成高級(jí)語(yǔ)言、匯編語(yǔ)言或是二進(jìn)制代碼的一種技術(shù)。通常源程序與逆向分析后的結(jié)果存在不同,運(yùn)行的結(jié)果雖然相同,但是代碼會(huì)發(fā)生很大變化,這就需要分析偵查人員對(duì)軟件測(cè)試、計(jì)算機(jī)低級(jí)語(yǔ)言甚至程序運(yùn)行原理有著深刻的認(rèn)識(shí)和理解。
目前逆向工程常用的分析軟件分為兩大類:動(dòng)態(tài)反匯編分析以及靜態(tài)反匯編分析軟件。在“動(dòng)態(tài)分析”過(guò)程中,調(diào)試器加載程序,并以調(diào)試模式運(yùn)行,分析者可以在程序的執(zhí)行過(guò)程中獲知程序運(yùn)行的流程以及最終的結(jié)果。但是實(shí)際的分析中,很多情況并不能實(shí)際的運(yùn)行目標(biāo)程序,比如某一個(gè)無(wú)法單獨(dú)運(yùn)行的模塊、惡意代碼、硬件環(huán)境與程序不兼容而導(dǎo)致無(wú)法運(yùn)行……而所謂的“靜態(tài)分析”,是相對(duì)于“動(dòng)態(tài)分析”而言的。調(diào)試工具Ollydbg具有動(dòng)態(tài)分析的功能,但是其反匯編輔助分析功能有限,所以一般使用功能極為強(qiáng)大的反匯編?kù)o態(tài)分析工具IDA Pro。
2 利用逆向技術(shù)分析計(jì)算機(jī)物證實(shí)例
本文以某個(gè)已經(jīng)捆綁了一個(gè)隱藏的未知程序的可執(zhí)行程序?yàn)槔?,此已知的可?zhí)行程序?yàn)橐粋€(gè)常見(jiàn)的應(yīng)用程序,并無(wú)危害,但是其內(nèi)部捆綁了一個(gè)未知的程序,普通的黑盒測(cè)試中是無(wú)法判斷其危害性,進(jìn)而也無(wú)法取得這種情況下的電子物證。下面通過(guò)逆向技術(shù)的分析,來(lái)判定這個(gè)未知程序的作用以及取得該電子物證。
實(shí)驗(yàn)環(huán)境為Windows 8.1下的VMWare虛擬機(jī)配置的Windows XP SP3的操作系統(tǒng)環(huán)境。某未知程序,其運(yùn)行后效果為系統(tǒng)提供的cmd.exe程序,但是由于其被附加了另一個(gè)未知程序,不能判定該程序類型、功能,所以我們利用互式反編譯工具IDA Pro來(lái)進(jìn)行分析。圖1為使用IDA Pro打開(kāi)該程序后的界面。
圖1 使用IDA Pro打開(kāi)該程序后的界面
從圖1可以得出該文件是一個(gè)Win32 PE文件。Win32 PE(Protable Execute)文件名稱為可移植執(zhí)行文件,日常所用的exe、com、sys等后綴名的文件都屬于PE文件類型,該文件是windows系統(tǒng)上的程序文件,其有可能直接執(zhí)行,也有可能以動(dòng)態(tài)鏈接庫(kù)(dll)的形式間接運(yùn)行。我們?cè)谡{(diào)試VC++開(kāi)發(fā)的程序時(shí),總是從main(或是WinMain)函數(shù)開(kāi)始,實(shí)際上,在這兩個(gè)函數(shù)被調(diào)用運(yùn)行之前,已經(jīng)有真正的入口函數(shù)被調(diào)用,通常入口函數(shù)是mainCRTStartup、wmainCRTStartup、WinMainCRTStartup以及wWinMainCRTStartup,具體情況和編譯器的選項(xiàng)有關(guān)。用IDA Pro的程序樹(shù)視圖(圖2)可以看到,IDA Pro已經(jīng)把真正的入口函數(shù)部分隱藏,它會(huì)直接分析出WinMain函數(shù)所在位置并且直接顯示出來(lái),這對(duì)于分析人員進(jìn)行逆向分析降低了一定的難度。
圖2 IDA Pro的程序樹(shù)視圖
在windows絕大部分的程序調(diào)用中,實(shí)際上程序調(diào)用時(shí)會(huì)釋放到臨時(shí)變量中,載入內(nèi)存,然后再運(yùn)行程序。本文所用的程序也屬于這種情況,所以分析時(shí)從CreateFile和WriteFile兩個(gè)函數(shù)入手,詳細(xì)分析出該程序具體實(shí)現(xiàn)的功能。
在IDA Pro的導(dǎo)入信息函數(shù)窗口(Imports)中,找到CreateFileA與WriteFileA函數(shù),由于這兩個(gè)函數(shù)總是成對(duì)出現(xiàn),所以分析時(shí)只觀察一個(gè)即可。列出所有CreateFileA被用引用過(guò)的窗口(圖3)發(fā)現(xiàn)本程序共調(diào)用了4次CreateFile函數(shù),說(shuō)明其共創(chuàng)建了4份臨時(shí)文件。
圖3 列出所有CreateFileA被用引用過(guò)的窗口
查看用戶變量文件夾,在運(yùn)行qqq.exe之后,變量文件夾內(nèi)產(chǎn)生了3個(gè)臨時(shí)文件(圖4)。
圖4 運(yùn)行qqq.exe之后,變量文件夾內(nèi)產(chǎn)生了3個(gè)臨時(shí)文件
也證明了該程序確實(shí)調(diào)用了4個(gè)CreateFile函數(shù),第一個(gè)CreateFile函數(shù)創(chuàng)建了程序本身,后三個(gè)函數(shù)分別創(chuàng)建了qqq.exe,iexpoler.exe,svchsot.exe三個(gè)應(yīng)用程序?,F(xiàn)通過(guò)十六進(jìn)制文本編輯器來(lái)分離其中的一部分程序。利用010edit編輯器打開(kāi)qqq.exe文件,在識(shí)別的ASCII字符串中可發(fā)現(xiàn)MZ文件頭,MZ文件頭是PE文件類型的標(biāo)志之一,這使得PE文件成為一個(gè)合法的DOS可執(zhí)行文件。通過(guò)篩選幾處MZ字符串,發(fā)現(xiàn)此程序是由兩部分組合而成,將最后的MZ標(biāo)識(shí)之后的所有數(shù)據(jù)都復(fù)制到記事本中,修改后綴名為exe,運(yùn)行結(jié)果如圖5所示:
圖5 修改后綴名為exe后的運(yùn)行結(jié)果
結(jié)束,原程序是由cmd控制臺(tái)程序與上述MessageBox程序捆綁組合而成。這里我們利用了IDA Pro分析了程序構(gòu)造,以及利用了十六進(jìn)制文本編輯器進(jìn)行了程序的分離操作,同理也可引用到計(jì)算機(jī)取證分析中去。
3 結(jié)束語(yǔ)
計(jì)算機(jī)程序由于其具有封裝的性質(zhì),一般在程序測(cè)試中,所用黑盒測(cè)試占了絕大部分。但是黑盒測(cè)試有其無(wú)法避免的缺點(diǎn):黑盒測(cè)試一般只能用來(lái)測(cè)試程序的功能性、可用性是否完好,而無(wú)法判定一個(gè)程序的內(nèi)部構(gòu)造。若某程序封裝了一個(gè)在表面看不出運(yùn)行結(jié)果的程序段,那么在運(yùn)行時(shí),利用進(jìn)程隱藏等技術(shù),是可以靜默地運(yùn)行某段未知程序代碼的,這就勢(shì)必造成了一定的安全問(wèn)題,同時(shí)在計(jì)算機(jī)犯罪事后取證中也造成了一定影響。利用逆向工程方面的知識(shí),可以將一個(gè)程序完全“解剖”開(kāi)來(lái),與白盒測(cè)試相類似,這就解決了上述難題,相信隨著逆向工程理論與技術(shù)的發(fā)展,一定會(huì)有更廣闊的前景與用途。
參考文獻(xiàn):
[1]Frederic Lemieux.Investigating Cyber Security Threats:Exploring National Security and Law Enforcement Perspectives. Report GW-CSPRI-2011-2, April 7,2011.
[2]Markson Aigbodi,Karim Ouazzane, Daniel Mitchell.Defence in-depth for Cyber Security With Custom Anti-Virus Signature Definition.ISBN:978-0-9853484-3-5,2013.SDIWC.
[3]Chris Eagle.The IDA Pro Book: The Unofficial Guide to the World’s Most Popular Disassembler[M].ISBN:978-1-59327-178-7,published by No Starch Press,2008.
作者簡(jiǎn)介:劉天悅(1989-),男,蒙古族,遼寧沈陽(yáng)人,現(xiàn)為網(wǎng)絡(luò)安全保衛(wèi)學(xué)院碩士研究生,研究方向:信息安全及計(jì)算機(jī)犯罪偵查。
作者單位:中國(guó)人民公安大學(xué),北京 100038