• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      針對進(jìn)程用戶空間的電子數(shù)據(jù)取證方法研究

      2014-04-25 09:34:20羅文華
      中國司法鑒定 2014年5期
      關(guān)鍵詞:指針線程指向

      羅文華

      (中國刑事警察學(xué)院 網(wǎng)絡(luò)犯罪偵查系,遼寧 沈陽110854)

      Windows操作系統(tǒng)環(huán)境下,每個進(jìn)程都被賦予自己的虛擬地址空間。以32位操作系統(tǒng)為例,每個進(jìn)程的虛擬地址空間為4GB,因此32位指針可以尋址從0x00000000至0xFFFFFFFF之間的任意地址。雖然每一個32位進(jìn)程可使用4GB的地址空間,但并不意味著每一個進(jìn)程實際擁有4GB的物理地址空間。4GB僅僅是一個虛擬地址空間,進(jìn)程實際可以得到的物理內(nèi)存要遠(yuǎn)小于其虛擬地址空間。并且,進(jìn)程的虛擬地址空間是為每個進(jìn)程所私有的,在進(jìn)程內(nèi)運行的線程對內(nèi)存空間的訪問都被限制在調(diào)用進(jìn)程之內(nèi),而不能訪問屬于其他進(jìn)程的內(nèi)存空間。這樣,在不同的進(jìn)程中可以使用相同地址的指針來指向?qū)儆诟髯哉{(diào)用進(jìn)程的內(nèi)容而不會由此引起混亂。

      為進(jìn)一步保證操作系統(tǒng)安全,進(jìn)程的虛擬地址空間被設(shè)計者人為地分為兩個部分——用戶空間與內(nèi)核空間。32位操作系統(tǒng)中,用戶最大可以使用3GB的空間,主要存儲程序執(zhí)行所需的管理結(jié)構(gòu)(如進(jìn)程環(huán)境塊、線程環(huán)境塊等)與數(shù)據(jù);內(nèi)核則可占據(jù)從3GB到4GB的這段地址,管理諸如進(jìn)程塊(包括執(zhí)行體進(jìn)程塊、核心進(jìn)程塊)、線程塊(包括執(zhí)行體線程塊、核心線程塊)、句柄表(包含所有已被進(jìn)程打開對象的指針)一類的系統(tǒng)結(jié)構(gòu)(見圖1)。用戶進(jìn)程通常情況下只能訪問用戶空間的虛擬地址,需要進(jìn)行系統(tǒng)調(diào)用(代表用戶進(jìn)程在內(nèi)核態(tài)執(zhí)行)時才可以訪問內(nèi)核空間。用戶空間對應(yīng)進(jìn)程,每當(dāng)進(jìn)程切換,用戶空間就會隨之變化;而內(nèi)核空間則由內(nèi)核負(fù)責(zé)映射,并不隨進(jìn)程改變,是固定的[1]。

      圖1 特定進(jìn)程的用戶空間與系統(tǒng)空間內(nèi)容信息

      以往的內(nèi)存電子數(shù)據(jù)取證研究往往重點關(guān)注系統(tǒng)空間中的管理結(jié)構(gòu)分析,相對忽視了用戶空間中與特定進(jìn)程直接關(guān)聯(lián)的數(shù)據(jù)內(nèi)容剖析,無法全面深刻揭示應(yīng)用程序的細(xì)節(jié)。然而,實踐發(fā)現(xiàn)系統(tǒng)空間中存儲的一般性進(jìn)程信息證據(jù)價值并不高,很難與特定的用戶行為進(jìn)行關(guān)聯(lián)。因此,研究進(jìn)程用戶空間中典型數(shù)據(jù)結(jié)構(gòu)的證據(jù)屬性,挖掘應(yīng)用程序行為秘密,業(yè)已成為內(nèi)存電子數(shù)據(jù)取證領(lǐng)域新的關(guān)注熱點。

      1 進(jìn)程用戶空間中典型數(shù)據(jù)結(jié)構(gòu)證據(jù)屬性分析

      本節(jié)重點以32位Windows 7操作系統(tǒng)為背景,結(jié)合用戶空間中最重要的進(jìn)程環(huán)境塊、線程環(huán)境塊、虛擬地址描述符等數(shù)據(jù)結(jié)構(gòu),描述其取證特性與分析方法。

      1.1 進(jìn)程環(huán)境塊(Process Environment Block,PEB)

      每一個Windows進(jìn)程都有一個執(zhí)行體進(jìn)程塊(EPROCESS),負(fù)責(zé)描述進(jìn)程的基本信息(如進(jìn)程ID、父進(jìn)程ID、程序名、進(jìn)程優(yōu)先級、內(nèi)存管理信息、設(shè)備映像等),并指向其他與進(jìn)程控制相關(guān)的數(shù)據(jù)結(jié)構(gòu)。EPROCESS結(jié)構(gòu)的首部是核心進(jìn)程塊(KPROCESS,也成PCB),主要包含CPU調(diào)度時需要的信息,如進(jìn)程狀態(tài)、時間片大小等。需要指出的是,EPROCESS與KPROCESS均位于系統(tǒng)空間中,然而另一描述進(jìn)程的重要結(jié)構(gòu)——進(jìn)程環(huán)境塊(PEB)則處于用戶空間。PEB位于EPROCESS頭部偏移0x1a8處(見圖2),重點存放進(jìn)程運行所需的環(huán)境信息,因為其中的數(shù)據(jù)經(jīng)常需要用戶進(jìn)行修改,放在系統(tǒng)空間中會導(dǎo)致系統(tǒng)隱患和頻繁的操作模式切換,因此該結(jié)構(gòu)位于用戶空間中。

      圖2 EPROCESS頭部偏移0x1a8處含有指向PEB結(jié)構(gòu)的指針

      PEB結(jié)構(gòu)中(見圖3),有如下域值信息值得取證調(diào)查人員特別關(guān)注。ImageBaseAddress(偏移0x008處)域可以用來找尋映像(即可執(zhí)行文件)的基地址;Ldr(偏移0x008處)列舉所有被加載的模塊(利用下文所述VAD結(jié)構(gòu)也可實現(xiàn)此目的);基于ProcessParameters(偏移0x010處)則可以抽取進(jìn)程傳遞的參數(shù);Process Heap(偏移0x018處)指向堆指針列表,NumberOfHeaps(偏移0x088處)給出了堆列表的大小,ProcessHeaps(偏移0x090處)則直接指向了堆列表中的第一個堆(即缺省堆),綜合上述三種域值信息能夠?qū)崿F(xiàn)歸屬于特定進(jìn)程的堆結(jié)構(gòu)分析;AnsiCodePageData(偏移0x058處)、OemCodePageData(偏移 0x05C 處)、UnicodeCase TableData(偏移0x060處)分別指向了代碼頁中特定編碼格式的數(shù)據(jù),可在其指定的頁面空間中實現(xiàn)已知關(guān)鍵字的搜索。

      圖3 PEB結(jié)構(gòu)體具體信息(部分)

      1.2 線程環(huán)境塊(Thread Environment Block,TEB)

      每個進(jìn)程都有一個或多個線程,這些線程由執(zhí)行體線程塊(ETHREAD)(主要包含有線程創(chuàng)建時間、結(jié)束時間、當(dāng)前狀態(tài)、優(yōu)先級別等信息)進(jìn)行描述。ETHREAD的首部為核心線程塊(KTHREAD),其內(nèi)存儲有分發(fā)器(內(nèi)核中負(fù)責(zé)調(diào)度的例程集合)頭部、總用戶時間、總內(nèi)核時間、棧結(jié)構(gòu)等。ETHREAD和它所指向的結(jié)構(gòu)通常都位于系統(tǒng)地址空間中,唯一的例外是線程環(huán)境塊(TEB)。由于操作系統(tǒng)要在TEB中保存頻繁使用的線程相關(guān)數(shù)據(jù),因此它位于用戶地址空間中。KTHREAD結(jié)構(gòu)偏移0x088處即為指向TEB結(jié)構(gòu)體的指針(見圖4),它存放在比PEB所在地址低的地方。進(jìn)程中的每個線程都有自己的一個TEB,并主要以棧的方式進(jìn)行存儲[1]。

      圖4 KTHREAD頭部偏移0x088處含有指向TEB結(jié)構(gòu)的指針

      TEB的首部為NT_TIB結(jié)構(gòu)格式的NtTib域,基于其內(nèi)含的StackBase與StackLimit可實現(xiàn)棧信息的深度挖掘;偏移0x030處的ProcessEnvironmentBlock指向PEB結(jié)構(gòu),用于線程與所屬進(jìn)程的關(guān)聯(lián);偏移0x040處的Win32ThreadInfo則含有32位進(jìn)程的描述信息;ActivationContextStackPointer(偏移 0x1a8 處)負(fù)責(zé)指向棧的上下文數(shù)據(jù);StaticUnicodeString(偏移0xbf8 處)、StaticUnicodeBuffer(偏移 0xc00 處)、Thread PoolData(偏移0xf90)指向了非二進(jìn)制信息的存儲區(qū)域,可用于關(guān)鍵字搜索;0xf6c處的WinSockData則描述了網(wǎng)絡(luò)通訊數(shù)據(jù)(如果存在的話)。具體信息如圖5所示。

      圖5 TEB結(jié)構(gòu)體具體信息(部分)

      1.3 虛擬地址描述符(VirtualAddressDescriptor,VAD)

      Windosws系統(tǒng)使用虛擬地址描述符VAD描述進(jìn)程的虛擬地址空間。對于每一個進(jìn)程,內(nèi)存管理器都需要為其分配一組VAD節(jié)點,用來描述該進(jìn)程地址空間的狀態(tài)。這些VAD節(jié)點被組織成一棵自平衡的二叉樹,以便使查找過程迅速高效。當(dāng)一個進(jìn)程提出內(nèi)存空間請求時,內(nèi)存管理器就創(chuàng)建一個VAD節(jié)點來保存此次內(nèi)存請求所提供的相關(guān)信息,比如被保留的地址范圍、共享或是私有、是否可被繼承,以及應(yīng)用頁面的保留屬性等。EPROCESS頭部偏移0x278處的VadRoot域使用MMVAD結(jié)構(gòu)描述VAD二叉樹節(jié)點,內(nèi)含該VAD節(jié)點的左右孩子節(jié)點、所屬進(jìn)程等信息(見圖6),因此利用該結(jié)構(gòu)可以實現(xiàn)特定進(jìn)程涉及的所有VAD節(jié)點的遍歷。另外,依靠VAD二叉樹能夠確定地址空間類型,私有(private)或是已映射(mapped)。所謂私有是指該區(qū)域只存在于特定進(jìn)程的地址空間中,而已映射區(qū)域卻可以存在于多個進(jìn)程的地址空間中[2]。

      圖6 MMVAD結(jié)構(gòu)體具體信息

      基于圖6還可發(fā)現(xiàn)該結(jié)構(gòu)體中包含有一指向MSUBSECTION結(jié)構(gòu)的指針MappedSubsection(偏移0x024處),MSUBSECTION結(jié)構(gòu)首部為指向控制區(qū)域CONTROL_AREA的指針,如果該指針為空,則表示該區(qū)域?qū)傩詾樗接?,否則為已映射。已映射區(qū)域可細(xì)分為FILE_OBJECT和SECTION_OBJECT兩種類型,F(xiàn)ILE_OBJECT表示磁盤文件在內(nèi)存中的映射,SECTION_OBJECT則表示多個進(jìn)程間的共享內(nèi)存區(qū)域(如果CONTROL_AREA結(jié)構(gòu)體中的FilePointer指針為空,即表示該區(qū)域類型為 SECTION_OBJECT)。CONTROAL_AREA結(jié)構(gòu)首部就是指向SEGMENT結(jié)構(gòu)的指針,而在SEGMENT結(jié)構(gòu)中同樣含有一指針指向CONTROAL_AREA結(jié)構(gòu)。在使用Rootkit技術(shù)修改EPROCESS結(jié)構(gòu)體中的雙向鏈表指針ActiveProcessLinks,使進(jìn)程從鏈表中脫離的情況下,可通過掃描SEGMENT結(jié)構(gòu)體,逆向發(fā)現(xiàn)被隱藏的進(jìn)程[3]。利用VAD二叉樹可以發(fā)現(xiàn)進(jìn)程間的共享區(qū)域,直至挖掘出對象句柄表(Object Handle Table)的細(xì)節(jié)信息,具體流程如圖7所示。

      圖7 基于VAD發(fā)現(xiàn)共享的內(nèi)存區(qū)域

      2 應(yīng)用實例

      本節(jié)利用Windbg(Windows平臺下的用戶態(tài)和內(nèi)核態(tài)調(diào)試工具)工具,重點基于第2節(jié)所述管理結(jié)構(gòu)說明針對進(jìn)程用戶空間的電子數(shù)據(jù)取證方法具體應(yīng)用。Windbg能夠用于調(diào)試在線系統(tǒng)和鏡像文件 (擴(kuò)展名為DMP),利用工具自帶的“process”命令可獲得特定進(jìn)程的EPROCESS結(jié)構(gòu)的內(nèi)存地址信息,利用該地址可以追溯用戶空間中其他重要的管理結(jié)構(gòu)。實例中“win32dd.exe”的EPROCESS結(jié)構(gòu)首地址為0x87ccb030,其結(jié)構(gòu)頭部偏移0x1a8處出現(xiàn)有“Peb:0x7ffdd000_PEB”,可知該進(jìn)程環(huán)境塊的起始地址為0x7ffdd000。圖8所示為基于0x7ffdd000地址解析出的PEB內(nèi)容。

      圖8 起始地址為0x7ffdd000的PEB具體信息(部分)

      以Ldr域為例,該域當(dāng)前值為 0x77df7880,指向PEB_LDR_DATA結(jié)構(gòu)。深入分析該結(jié)構(gòu)發(fā)現(xiàn),其內(nèi)含有名為 InLoadOrderModuleList(0x221990-0x245648)和 InMemoryOrderModuleList(0x221998-0x245650)的鏈表(LIST_ENTRY)(見圖9)。依據(jù)鏈表存儲的地址,即可實現(xiàn)加載模塊的挖掘。

      圖9 起始地址為0x77df7880的PEB_LDR_DATA具體信息

      按照 EPROCESS→KPROCESS→ThreadListHead→ETHREAD→KTHREAD→TEB的次序,找尋到該進(jìn)程的第一個線程的地址為0x87e7e298,其具體內(nèi)容如圖10所示。該結(jié)構(gòu)體中最重要的就是首部NtTib域,其中含有StackBase、StackLimit等歸屬于特定線程的棧屬性,利用這些信息可以抽取出被調(diào)用函數(shù)的地址及參數(shù)。

      圖10 起始地址為0x87e7e298的TEB具體信息(部分)

      EPROCESS頭部偏移0x278處的VadRoot值為0x875c9780,其左右孩子節(jié)點地址分別為0x87dd3 b00、0x87ff0ac8,Subsection 結(jié)構(gòu)與 MappedSubsection結(jié)構(gòu)的指針同為0x88518a70(見圖11)。需要指出的是,每個VAD二叉樹節(jié)點均為MMVAD結(jié)構(gòu),因此基于根節(jié)點可以獲知整個二叉樹的信息。

      圖11 VAD二叉樹根節(jié)點信息

      vad命令后接二叉樹根節(jié)點地址可以顯示該樹全部節(jié)點信息(見圖12),其中包括每個樹節(jié)點的虛擬地址、所在層級、提交類型、讀寫權(quán)限等。以DLL文件為例,通常就包含在提交類型為“Mapped”、讀寫權(quán)限為“EXECUTE_WRITECOPY”的VAD空間中。如果要對DLL文件進(jìn)行調(diào)查,便可重點針對此類VAD空間進(jìn)行挖掘。

      圖12 獲取VAD二叉樹信息

      選取0x87a7bef8節(jié)點描述的虛擬地址區(qū)域進(jìn)行解析,其 MappedSubsection域值為 0x87afc428;MappedSubsection域中ControlArea指針值為0x87 afc3d8;ControlArea域中包含有指向Segment的指針0x8ac56c50;而Segment域中包含有指向ControlArea的指針0x87afc3d8(見圖13)。利用互逆的這兩個指針可實現(xiàn)進(jìn)程結(jié)構(gòu)體與對象句柄的追蹤。另外,ControlArea域中還包含有一名為FilePointer的指針,負(fù)責(zé)指向具體的FILE_OBJECT對象;在該對象的FileName域中會出現(xiàn)有被調(diào)用的動態(tài)鏈接庫文件的完整路徑與文件名稱。

      圖13 基于內(nèi)存數(shù)據(jù)結(jié)構(gòu)獲取DLL文件信息

      3 結(jié)語

      文中重點分析對象是Windows操作系統(tǒng)內(nèi)存轉(zhuǎn)儲(DMP)文件,同時 ProDiscover IR、Mandiant Memoryze、Moonsols DumpIt等工具也可生成該格式文件。而對于由DD(已升級到Windows和Linux環(huán)境下均可使用)、Mantech mdd等工具生成的內(nèi)存映像文件,則無法使用WinDbg進(jìn)行信息獲取,但可使用Winhex一類的十六進(jìn)制編輯器完成取證分析。另外,本文應(yīng)用實例基于特定進(jìn)程,在需要針對整個鏡像中的進(jìn)程用戶空間進(jìn)行深度分析時,可借助開源工具Volatility予以實現(xiàn)[4]。進(jìn)程用戶空間中還有一些用于實現(xiàn)特定功能或傳遞關(guān)鍵信息的子結(jié)構(gòu),進(jìn)一步挖掘這些結(jié)構(gòu)的電子數(shù)據(jù)取證特性,從而全面深刻揭示用戶程序操作行為,將是課題組下一步的重點工作。

      參考文獻(xiàn):

      [1]Russinovich MR,Solomon DA.Microsoft windows Internals:Windows Server 2008 and Window Vista[M].5th ed.USA:Microsoft Press,2012:146-253.

      [2]Okolica J,Peterson GL.Windows operating systems agnostic memory analysis[J].Digital Investigation 2010,(7)::48-56.

      [3]Hejazi SM,Talhi C,Debbabi M.Extraction of forensically sensitive information from windows physical memory[J].Digital Investigation,2009,6(S1):121-131.

      [4]羅文華,湯艷君.基于Volatility的內(nèi)存信息調(diào)查方法研究[J].中國司法鑒定,2012,(4):90-93.

      猜你喜歡
      指針線程指向
      科學(xué)備考新指向——不等式選講篇
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      把準(zhǔn)方向盤 握緊指向燈 走好創(chuàng)新路
      傳媒評論(2017年8期)2017-11-08 01:47:36
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      淺談linux多線程協(xié)作
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      ARM Cortex—MO/MO+單片機的指針變量替換方法
      Linux線程實現(xiàn)技術(shù)研究
      么移動中間件線程池并發(fā)機制優(yōu)化改進(jìn)
      Who?。疲铮酰睿洹。粒恚澹颍椋悖??
      土默特左旗| 时尚| 金沙县| 阿拉善右旗| 宕昌县| 长沙县| 虎林市| 荔波县| 开原市| 治多县| 五台县| 漯河市| 鄂伦春自治旗| 祥云县| 舞阳县| 安西县| 肃北| 乌兰察布市| 普格县| 高陵县| 深泽县| 南昌市| 南雄市| 灵武市| 延边| 利津县| 蕉岭县| 秭归县| 河间市| 土默特左旗| 彰化市| 盈江县| 遂宁市| 新龙县| 桐乡市| 额济纳旗| 乌审旗| 泾阳县| 赫章县| 若羌县| 祁东县|