国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于EPROCESS 特征的物理內(nèi)存查找方法

2013-09-20 08:19:56董振興田慶宜
關(guān)鍵詞:鏈表進(jìn)程內(nèi)存

陳 龍,敬 凱,董振興,田慶宜

(1.重慶郵電大學(xué)計算機(jī)取證研究所,重慶 400065;2.重慶市公安局電子物證司法鑒定中心,重慶 400065)

0 引言

計算機(jī)取證是運用計算機(jī)及其相關(guān)科學(xué)和技術(shù)的原理與方法獲取與計算機(jī)相關(guān)的證據(jù)以證明某個客觀事實存在的過程[1]。傳統(tǒng)的取證是基于文件系統(tǒng)的,采用傳統(tǒng)的取證手段主要有以下幾個理由:①獲取方法簡單,只需關(guān)掉計算機(jī)電源,保護(hù)好現(xiàn)場即可,對取證人員要求較低;②現(xiàn)在市場上能夠買到的計算機(jī)取證調(diào)查工具大部分只適用于磁盤鏡像。但是,如果只采用傳統(tǒng)的方式進(jìn)行取證,內(nèi)存中的數(shù)據(jù)就會丟失。Windows內(nèi)存取證是應(yīng)用計算機(jī)取證工具分析Windows系統(tǒng)內(nèi)存中的敏感信息,從而獲得犯罪證據(jù)的一種技術(shù)。傳統(tǒng)的計算機(jī)取證技術(shù)很難獲得的犯罪證據(jù),如當(dāng)前正在運行的進(jìn)程線程信息、網(wǎng)絡(luò)連接信息等,都可以通過內(nèi)存取證獲得。

內(nèi)存取證技術(shù)是從2005年開始才快速發(fā)展的。在2005年夏季,數(shù)字取證研究工作組(digital forensic research workshop,DFRWS)開展了一次 Forensics Challenge,主題就是針對物理內(nèi)存鏡像的分析。主辦方提供了2個物理內(nèi)存鏡像文件:dfrws2005-physicalmemory1.dmp 和 dfrws2005-physical-memory2.dmp,文件系統(tǒng)的時間表(dfrws2005-timeline.txt),mactime格式的元數(shù)據(jù)(dfrws2005-body-file.fls),并依此對參賽者提出了相關(guān)問題。這場挑戰(zhàn)賽鼓勵選手們分析Windows2000中的內(nèi)存管理機(jī)制。在本次大賽上Chris Betz開發(fā)出了能夠重建進(jìn)程列表并且分析進(jìn)程內(nèi)存信息的工具memparser。George M,Garner Jr.和Robert-Jan Mora開發(fā)出了能夠獲取物理內(nèi)存并對其進(jìn)行分析的工具 kntlist。2006 年,Andreas Schuster[2]提出了一種分析內(nèi)存的方法,并開發(fā)出了相應(yīng)的工具PTfinder。利用此方法可發(fā)現(xiàn)內(nèi)存鏡像中的一些進(jìn)程和線程的信息,此方法只適用于Windows 2000、Windows xp的 sp1/sp2版本和 Windows Server 2003。2010 年,Richard M.Stevens 和 Eoghan Casey[3]剖析了命令提示符歷史數(shù)據(jù)結(jié)構(gòu)并且開發(fā)出了一種能夠從Windows XP內(nèi)存鏡像中重構(gòu)Windows命令提示符歷史記錄的工具。2011年,James Okolica和Gilbert L.Peterson[4]介紹了 Windows剪貼板的結(jié)構(gòu)和恢復(fù)剪貼板中的數(shù)據(jù)的過程,并提出剪貼板內(nèi)容數(shù)據(jù)的獲取方法。此方法對文本有作用,但只能提取被剪切過的文本數(shù)據(jù)。

本文針對Windows提出一種提取系統(tǒng)運行進(jìn)程所使用的物理內(nèi)存的方法。運用此方法可以從系統(tǒng)內(nèi)存鏡像中提取出正常運行和被隱藏的進(jìn)程的EPROCESS結(jié)構(gòu),及相應(yīng)進(jìn)程的內(nèi)存數(shù)據(jù)。這就為進(jìn)一步的取證分析工作打下了堅實的基礎(chǔ)。

1 基于KPCR的內(nèi)存分析方法

內(nèi)核處理器控制區(qū)(kernel processor control region,KPCR)是用來保存與線程切換有關(guān)的全局信息的一種結(jié)構(gòu)。2009年,基于在Windows中KPCR線性地址固定的特點,郭牧和王連海教授[5]提出一種在內(nèi)存鏡像中尋找系統(tǒng)KPCR的方法,通過KPCR還可以找到其他的與內(nèi)核變量有關(guān)的重要信息。2010年,王連海教授[6]又針對其方法進(jìn)行了相應(yīng)的改進(jìn),使之適用于Windows 7。

在Windows的內(nèi)核中有一個活動進(jìn)程鏈表Ps-ActiveProcessList。這個雙向鏈表保存著所有活動進(jìn)程的EPROCESS結(jié)構(gòu),如圖1所示。圖1中,進(jìn)程的EPROCESS結(jié)構(gòu)包含一個具有指針成員FLINK和BLINK的LIST_ENTRY結(jié)構(gòu),這2個指針分別指向其后方進(jìn)程和前方進(jìn)程的LIST_ENTRY。

獲取KPCR以后,可以根據(jù)KPCR內(nèi)的KPRCB尋找到_KTHREAD結(jié)構(gòu),通過_KTHREAD找到_KAPC_STATE結(jié)構(gòu),通過_KAPC_STATE找到EPROCESS結(jié)構(gòu)。最終所找到的就是當(dāng)前正在被執(zhí)行的進(jìn)程的EPROCESS結(jié)構(gòu)。當(dāng)前運行的進(jìn)程被一個雙向鏈表連接在一起,通過所獲得的EPROCESS結(jié)構(gòu)就可以獲得所有活動進(jìn)程的EPROCESS結(jié)構(gòu)。

圖1 進(jìn)程間的鏈接關(guān)系Fig.1 Link relationships between processes

基于KPCR結(jié)構(gòu)對物理內(nèi)存進(jìn)行分析的方法是一種較為有效的方法,為內(nèi)存取證領(lǐng)域提供了一種新的研究方式。但存在著以下的不足:①查找定位存在一定的不確定性。隨著Windows系統(tǒng)版本的不斷更新,其對內(nèi)存大小的要求也越來越高。定位KPCR的限制條件較弱,查找結(jié)果可能較多,查找到的結(jié)構(gòu)區(qū)域都需設(shè)法進(jìn)一步驗證;②無法找出隱藏的進(jìn)程。利用DKOM(direct kernel object manipulation)直接內(nèi)核對象操作技術(shù)在PsActiveProcessList鏈表上刪除了某個進(jìn)程的EPROCESS結(jié)構(gòu)以后,該進(jìn)程將被隱藏起來,但仍會在后臺運行[7]。通過遍歷此鏈表得到活動進(jìn)程的方法將不會得到此進(jìn)程。

根據(jù)KPCR的方法來查找進(jìn)程的過程是,找到當(dāng)前被執(zhí)行的進(jìn)程的EPROCESS結(jié)構(gòu),然后根據(jù)此結(jié)構(gòu)內(nèi)的FLINK和BLINK 2個指針成員來遍歷Ps-ActiveProcessList鏈表,找到所有運行的進(jìn)程。由此可見,通過KPCR的方法無法找到被隱藏進(jìn)程的EPROCESS結(jié)構(gòu)。

2 基于EPROCESS結(jié)構(gòu)的進(jìn)程地址空間獲取方法

每一個進(jìn)程都有自己獨立的尋址空間,有自己獨立的頁目錄和頁表來管理虛擬內(nèi)存到物理內(nèi)存的映射。如果知道一個進(jìn)程的頁目錄基地址,那么尋找一個進(jìn)程的物理地址空間的問題就轉(zhuǎn)換成尋找此進(jìn)程所使用的虛擬地址空間的問題。通過一個進(jìn)程的虛擬地址空間和頁目錄基地址可以找到進(jìn)程使用的物理頁。下面我們以32位系統(tǒng)為例對此方法進(jìn)行描述。

2.1 活動進(jìn)程EPROCESS結(jié)構(gòu)的查找

在Windows系統(tǒng)中,每個進(jìn)程都由一個EPROCESS結(jié)構(gòu)來表示。在Windows內(nèi)核中,進(jìn)程是靠EPROCESS結(jié)構(gòu)來識別的。這個EPROCESS結(jié)構(gòu)里面包含了與進(jìn)程相關(guān)的重要的信息,如進(jìn)程內(nèi)的線程信息、當(dāng)前系統(tǒng)所運行的進(jìn)程鏈表的信息、進(jìn)程名字等。Windows 7中與Windows XP中的EPROCESS結(jié)構(gòu)是不同的。

圖2、圖 3分別為 Windows 7,Windows XP下EPROCESS結(jié)構(gòu)的片段。Windows 7中此結(jié)構(gòu)的大小為0x2C0,Windows XP中此結(jié)構(gòu)的大小為0x25C。進(jìn)程的許多信息都可以直接從這個結(jié)構(gòu)體中獲取。

圖2 Windows 7下的EPROCESSFig.2 EPROCESS structure in Windows 7

圖3 Windows XP下的EPROCESSFig.3 EPROCESS structure in Windows XP

Windows 7中:+0x0a8ExitTime是一個_LARGE_INTEGER類型,占用8個字節(jié),該屬性記錄一個進(jìn)程的退出時間,當(dāng)一個進(jìn)程正在運行時此屬性的值為0。

+0x1a8 Peb進(jìn)程環(huán)境塊(process environment block,PEB),每個進(jìn)程都有自己的 PEB信息,PEB中記錄著進(jìn)程的運行參數(shù)、映像裝入地址等信息。EPROCESS結(jié)構(gòu)中PEB屬性的類型是一個指針,指向該進(jìn)程的進(jìn)程控制塊。在Windows XP SP1及以前的版本中PEB的地址是固定的,都為0x7ffdf000,從Windows XP SP2以后系統(tǒng)引入了一個新的特性:PEB地址隨機(jī)化。加入這個新特性后,每一個進(jìn)程的PEB地址都不是固定的(除了system的PEB地址總是零)。盡管如此,PEB的地址還是有規(guī)律可循。系統(tǒng)創(chuàng)建進(jìn)程時設(shè)置PEB的存儲區(qū)域,這是在進(jìn)程用戶模式分區(qū)內(nèi)分配的一塊內(nèi)存。PEB地址低16位隨機(jī)化高16位是固定的,都為0x7ffd。

+0x274 ExitStatus

此屬性表示進(jìn)程的退出狀態(tài),通過進(jìn)程的退出狀態(tài)可以獲知進(jìn)程非正常退出的大致原因。一個運行進(jìn)程默認(rèn)的ExitStatus的狀態(tài)是STATUS_PENDING也稱為STILL_ACTIVE。此屬性占4個字節(jié),一個運行的進(jìn)程對應(yīng)的此屬性的值為0x00000103。

Windows XP中這3個屬性在EPRCESS結(jié)構(gòu)中的位置與Windows 7不同,分別為

+0x078 ExitTime

+0x1b0 Peb

+0x24c ExitStatus

Windows XP中這3個屬性的特性與Windows 7中的特性相同。由以上可得,在內(nèi)存鏡像中檢索出運行進(jìn)程的EPROCESS的方法如下。

Windows 7中,PEB相對于ExitTime的偏移量為0x100,ExitStatus相對于Peb的偏移量為0xCC,然后根據(jù)這3個屬性的值也就可以定位出EPRCESS的位置。

Windows XP中,Peb相對于ExitTime的偏移量為0x138,ExitStatus相對于 Peb的偏移量為0x9C,然后根據(jù)這3個屬性的值就可以定位出EPRCESS的位置。

2.2 獲取頁目錄基地址

進(jìn)程頁目錄的物理起始地址——頁目錄基地址保存在EPROCESS結(jié)構(gòu)中,通過頁目錄基地址進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換。

EPROCESS的第1個域即進(jìn)程的進(jìn)程控制塊(process control block,PCB)。PCB是一個 KPROCESS結(jié)構(gòu),此結(jié)構(gòu)位于EPROCESS的第1項,也就是說其地址和進(jìn)程EPROCESS的地址相同。PCB是一種存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu),每一個進(jìn)程均有一個PCB,在創(chuàng)建進(jìn)程時,建立PCB,伴隨進(jìn)程運行的全過程,直到進(jìn)程撤消而撤消。

在Windows 7和Windows XP中進(jìn)程的頁目錄基地址均在PCB內(nèi)+0x18處。為DirectoryTable-Base前4個字節(jié)的值。通過此基地址可以進(jìn)行虛擬地址和物理地址之間的轉(zhuǎn)換,如圖4-圖5所示。

2.3 基于VadRoot域的數(shù)據(jù)獲取

虛擬地址描述符(virtual address descriptor,VAD)。一個VAD保存一段被分配地址空間的信息,所有VAD組成一個二叉排序樹來描述用戶地址空間的情況。每個進(jìn)程有自己的用戶地址空間,所以每個進(jìn)程也有自己的VAD二叉排序樹。

每一個VAD結(jié)點的結(jié)構(gòu)如圖6所示。虛擬頁號(virtual page number,VPN),StartingVpn 表示這個內(nèi)存塊的起始虛擬頁號,EndingVpn表示這個內(nèi)存塊的結(jié)束虛擬頁號。Parent是一個指向此VAD節(jié)點的父節(jié)點的指針,LeftChild是一個指向左孩子節(jié)點的指針,RightChild是一個指向右孩子節(jié)點的指針。VadRoot是指向VAD二叉排序樹根節(jié)點的指針。Windows 7中的 VadRoot位于 EPROCESS內(nèi)0x278處,Windows XP中的 VadRoot位于 EPROCESS內(nèi)0x11c處,如圖7所示。

圖4 Windows 7下PCBFig.4 Pcb structure in Windows 7

圖5 Windows XP下PCBFig.5 Pcb structure in Windows XP

圖6 Windows中vad結(jié)構(gòu)Fig.6 Vad structure in Windows

圖7 vad二叉排序樹Fig.7 Vad binary sort tree

此二叉樹是一個AVL自平衡二叉樹[8],這種組織方式完全是方便快速查找。樹中的每一個節(jié)點代表了一段虛擬地址空間。所以程序的代碼段,數(shù)據(jù)段,堆段都會各占用一個或多個VAD節(jié)點。通過遍歷此二叉樹可以得到一個進(jìn)程所使用的代碼段,數(shù)據(jù)段,堆段,進(jìn)而得到此進(jìn)程所使用的物理內(nèi)存。

虛擬首地址=StartingVpn<<12;

虛擬末地址=EndingVpn<<12;

從根結(jié)點開始遍歷整個二叉樹,就可以得到這個進(jìn)程所使用的虛擬地址空間。根據(jù)頁目錄基地址進(jìn)行轉(zhuǎn)換,進(jìn)而得到進(jìn)程所使用的在用戶地址空間的物理內(nèi)存。

3 實驗結(jié)果及分析

鏡像提取工具:DumpIt。原因:用此工具獲得的鏡像文件的位移與實際物理內(nèi)存地址相一致。根據(jù)此算法相應(yīng)的程序已經(jīng)寫出,在多臺計算機(jī)上做了相應(yīng)的實驗。

用dkom技術(shù)隱藏3個進(jìn)程,任務(wù)管理器里面看不到此3個進(jìn)程。做鏡像的時候,通過任務(wù)管理器查看運行的進(jìn)程數(shù)。設(shè)Windows XP SP2為S1,Windows XP SP3 為 S2,Windows 7 為 S3,Windows SP1為S4,用任務(wù)管理器查看的結(jié)果為A,用本文提出的方法找出的結(jié)果為B。實驗結(jié)果如表1所示。

表1 實驗結(jié)果統(tǒng)計表Tab.1 Statistics of experimental results

EPROCESS結(jié)構(gòu)里的ImageFileName屬性代表進(jìn)程的名字,通過此屬性可以驗證結(jié)果的正確性。由表1可知,運用此方法找到的運行進(jìn)程的數(shù)目與系統(tǒng)內(nèi)實際運行的數(shù)目一致(包括被隱藏的進(jìn)程)。我們已對找到的結(jié)果進(jìn)行了人工驗證,結(jié)果表明,所找到的進(jìn)程均為系統(tǒng)內(nèi)運行的進(jìn)程。

綜上可知,此方法能夠找到包括被隱藏的進(jìn)程在內(nèi)的所有活動進(jìn)程,其適用的系統(tǒng)版本有:Windows XP SP2,Windows XP SP3,Windows 7,Windows 7 SP1。

4 結(jié)束語

內(nèi)存取證領(lǐng)域還是一個較新的領(lǐng)域,發(fā)展還不是太成熟,缺少能夠應(yīng)用于內(nèi)存取證實踐的工具和方法,且隨著系統(tǒng)的不斷更新,對取證技術(shù)的要求也不斷變化。

本文提出一種內(nèi)存查找取證方法,此方法能夠有效地獲取進(jìn)程內(nèi)存,不僅適用于Windows XP還適用于新的系統(tǒng)Windows 7。但是隨著系統(tǒng)新版本的推出更新?lián)Q代,對于內(nèi)存取證技術(shù)的要求也會發(fā)生相應(yīng)的變化。Linux和即將發(fā)布的Windows 8也需要我們做更進(jìn)一步的研究。

[1]陳龍,王國胤.計算機(jī)取證技術(shù)綜述[J].重慶郵電大學(xué)學(xué)報:自然科學(xué)版,2005,17(6):736-740.CHEN Long,WANG Guoyin.Summary on Computer Forensics[J].Journal of Chongqing University of Posts and Telecommunications:Natural Science Edition,2005,17(6):736-740.

[2]ANDREAS S.Searching for processes and threads in Microsoft Windows memory dumps[EB/OL].[2012-03-01].http://www.dfws.org/2006/proceedings/2-Schuster.pdf.

[3]RICHARD M S,EOGHAN C.Extracting Windows command line details from physical memory[EB/OL].[2012-03-01].http://www.dfrws.org/2010/proceedings/2010-307.pdf.

[4]JAMES O,GILBERT L P.Extracting the Windows clipboard from physical memory[EB/OL].[2012-03-01].http://www.dfrws.org/2011/proceedings/18-350.pdf.

[5]郭牧,王連海.基于KPCR結(jié)構(gòu)的Windows物理內(nèi)存分析方法[J].計算機(jī)工程與應(yīng)用,2009,45(18):74-77.GUO Mu,WANG Lianhai.Windows memory analysis method based on KPCR structure[J].Computer Engineering and Applications,2009,45(18):74-77.

[6]ZHANG Shuhui,WANG Lianhai,ZHANG Rui-chao,et al.Exploratory Study on Memory Analysis of Windows 7 Operating System[C]//Pro.of ICACTE'2010.Cheng-Du:IEEE Press,2010:373-377.

[7]LI Peng,WANG Ruchuan,ZHANG Wei.Key technologies of new malicious code developments and defensive measures in communication networks[J].The Journal of China Universities of Posts and Telecommunications.2010,17(4):69-73.

[8]MARK R,DAVID S.Microsoft Windows Internals[M].Fifth Edition.Washington:Microsoft Press,2009:721-724.

猜你喜歡
鏈表進(jìn)程內(nèi)存
債券市場對外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
基于二進(jìn)制鏈表的粗糙集屬性約簡
“春夏秋冬”的內(nèi)存
跟麥咭學(xué)編程
基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗證機(jī)制
鏈表方式集中器抄表的設(shè)計
電測與儀表(2014年1期)2014-04-04 12:00:22
社會進(jìn)程中的新聞學(xué)探尋
基于內(nèi)存的地理信息訪問技術(shù)
我國高等教育改革進(jìn)程與反思
Linux僵死進(jìn)程的產(chǎn)生與避免
杭州市| 株洲市| 江门市| 班戈县| 上犹县| 静宁县| 南溪县| 锡林郭勒盟| 嵊泗县| 湄潭县| 吕梁市| 鹿邑县| 上林县| 营山县| 民乐县| 鸡东县| 鄄城县| 滨海县| 梅州市| 隆安县| 东台市| 灵石县| 工布江达县| 乐亭县| 日土县| 隆安县| 公主岭市| 马边| 石渠县| 闸北区| 呼图壁县| 衡阳县| 汉中市| 闽清县| 循化| 伊宁县| 江西省| 高台县| 加查县| 琼结县| 南丹县|