官术网_书友最值得收藏!

3.1 基于軟件的內(nèi)存獲取技術(shù)和工具

基于軟件的內(nèi)存鏡像獲取方式依賴于操作系統(tǒng)提供的物理內(nèi)存訪問技術(shù),這是在線取證中獲取物理內(nèi)存鏡像的關(guān)鍵技術(shù)。

在較低版本的操作系統(tǒng)中,一般都提供了直接訪問系統(tǒng)物理內(nèi)存的對象或設(shè)備,基于此,取證人員可以直接在用戶模式下讀寫系統(tǒng)物理內(nèi)存數(shù)據(jù)。隨著系統(tǒng)對安全性需求的不斷增長,較高版本的操作系統(tǒng)中,不再支持上述對象或設(shè)備的訪問。而運(yùn)行在核心態(tài)的驅(qū)動(dòng)程序,能將虛擬地址空間映射為物理地址空間,從而訪問物理內(nèi)存地址。如果還想在用戶模式下讀寫系統(tǒng)物理內(nèi)存數(shù)據(jù),就需要自己開發(fā)相應(yīng)驅(qū)動(dòng)或內(nèi)核擴(kuò)展程序?qū)崿F(xiàn)對內(nèi)存數(shù)據(jù)的訪問。因此,按照實(shí)現(xiàn)原理劃分,獲取內(nèi)存鏡像的軟件可分為兩類:利用對象或設(shè)備直接讀取物理內(nèi)存的軟件和利用驅(qū)動(dòng)或內(nèi)核擴(kuò)展讀取物理內(nèi)存的軟件。

3.1.1 利用對象或設(shè)備直接讀取物理內(nèi)存的軟件

在Windows XP系統(tǒng)中,各種資源以對象(Object)的形式組織。Windows XP提供了一個(gè)位于\Device路徑下的Section內(nèi)核對象PhysicalMemory。使用sysinternals(引用網(wǎng)址)工具查看到的此對象如圖3-1所示。通過系統(tǒng)提供的應(yīng)用程序編程接口(API,ApplicationProgramming Interface)函數(shù)對該對象進(jìn)行讀取,用戶程序就實(shí)現(xiàn)了對物理內(nèi)存的訪問。在內(nèi)存取證研究的初期出現(xiàn)了一些在用戶空間內(nèi)獲取內(nèi)存數(shù)據(jù)的軟件,其中較為出名的是2009年Garner為FAU套件編寫的Data-Dumper(dd)、mdd、dumpmmf,它們都可以通過訪問\Device\PhysicalMemory獲取內(nèi)存數(shù)據(jù)[6]

圖3-1 /Device/PhysicalMemory對象

最初的Linux和Mac操作系統(tǒng)中,內(nèi)存獲取方法并不需要第三方軟件,操作系統(tǒng)本身提供了可以讀寫物理內(nèi)存的特權(quán)應(yīng)用程序。調(diào)查人員可以使用dd讀取/dev/mem設(shè)備來獲取Linux/Mac OS物理內(nèi)存,并將物理內(nèi)存以文件的形式進(jìn)行存儲(chǔ)或者通過網(wǎng)絡(luò)傳輸?shù)男问絺鬏斨寥∽C機(jī)器。

(1)Windows系統(tǒng)下獲取內(nèi)存的軟件

①dd

當(dāng)用戶以管理員權(quán)限運(yùn)行dd時(shí),工具通過調(diào)用內(nèi)建的\\.\Device\PhysicalMemory內(nèi)存區(qū)對象來創(chuàng)建目標(biāo)機(jī)器的內(nèi)存dump文件。

②process dumper utility

此工具能夠轉(zhuǎn)儲(chǔ)一個(gè)正在運(yùn)行的進(jìn)程內(nèi)存空間,包括該進(jìn)程空間內(nèi)所有的數(shù)據(jù)和代碼。除此之外該工具使用元信息描述不同的映射并保存進(jìn)程環(huán)境和狀態(tài)。

③mdd

mdd是ManTech International Corporation開發(fā)的獲取Windows系統(tǒng)物理內(nèi)存鏡像的工具,它可以獲取Windows 2000、Windows XP、Windows Vista和Windows Server系統(tǒng)的內(nèi)存鏡像,對于Windows XP SP1及其以下版本的內(nèi)存鏡像的獲取,它是通過讀取\\.\Device\PhysicalMemory內(nèi)存區(qū)對象實(shí)現(xiàn)的。

(2)Linux\Mac OS下獲取內(nèi)存的軟件

①/dev/mem

/dev/mem是操作系統(tǒng)提供的一個(gè)對物理內(nèi)存的映射。首先使用open函數(shù)打開/dev/mem設(shè)備,然后使用mmap映射到用戶空間實(shí)現(xiàn)應(yīng)用程序?qū)?nèi)存信息的讀取。然而/dev/mem的映射區(qū)域有限,只映射了RAM的896 MB地址,通過它無法完全獲取更大的RAM。因此,目前較為主流的Linux版本不再支持此設(shè)備的映射。Mac OS X 10.4以后的版本也刪除了/dev/mem文件。

②/dev/kmem

和/dev/mem不同的是,/dev/kmem是虛擬內(nèi)存的映射,使用者可以以用戶態(tài)直接訪問內(nèi)核虛擬地址空間。這樣會(huì)給系統(tǒng)安全帶來隱患,因此目前Linux主流發(fā)行版已經(jīng)禁止使用/dev/kmem設(shè)備。

③Ptrace

Ptrace[7]是Linux本身提供的用戶態(tài)調(diào)試接口,此接口適用于對某個(gè)進(jìn)程的內(nèi)存空間信息獲取,而不是對全部內(nèi)存信息的獲取。首先通過讀取/proc//maps獲取指定進(jìn)程的地址空間范圍,然后對內(nèi)存信息逐頁獲取存至磁盤。

④/proc/kcore

/proc/kcore文件將內(nèi)核的虛擬地址空間以ELF(Executable and Linking Format)文件的形式導(dǎo)出在用戶空間,在32 bit系統(tǒng)中,獲取地址局限在896 MB以內(nèi)。不過通過此文件獲取內(nèi)存的步驟較為繁瑣,需要專門的工具配合使用獲取內(nèi)存信息。

隨著操作系統(tǒng)對安全權(quán)限等的重視,現(xiàn)在主流操作系統(tǒng)上,運(yùn)行在用戶態(tài)的程序已經(jīng)無法獲取完整的物理內(nèi)存鏡像。

3.1.2 利用驅(qū)動(dòng)或內(nèi)核擴(kuò)展讀取物理內(nèi)存的軟件

用戶模式的進(jìn)程不允許執(zhí)行CPU的一些指令,對系統(tǒng)數(shù)據(jù)、地址空間以及硬件的訪問是受到嚴(yán)格限制的。因此,從用戶模式訪問系統(tǒng)的全部物理內(nèi)存數(shù)據(jù),需要將一個(gè)內(nèi)核模式驅(qū)動(dòng)程序裝載到系統(tǒng)中并調(diào)用它,從而利用驅(qū)動(dòng)擁有的權(quán)限對底層硬件(物理內(nèi)存)信息進(jìn)行讀寫操作。以下介紹常見的軟件工具。

(1)Windows下獲取內(nèi)存的軟件

①win32dd

win32dd是由suiche開發(fā)的一款運(yùn)行于內(nèi)核級的內(nèi)存獲取工具(可從moonsols網(wǎng)站下載),該工具的運(yùn)行要求用戶具有管理員權(quán)限,通過MmMapIoSpace()映射函數(shù)實(shí)現(xiàn)對內(nèi)存的映射。

②Memoryze

Memoryze是一款由Mandiant開發(fā)的免費(fèi)的內(nèi)存取證軟件(可從mandiant網(wǎng)站下載)。它可以幫助取證調(diào)查人員鏡像內(nèi)存或從實(shí)時(shí)內(nèi)存中分析關(guān)鍵信息。

③Windows Memory Reader

Windows Memory Reader[8]是一款由National Institute of Justice提出的免費(fèi)獲取物理內(nèi)存的命令行工具,該工具支持對32 bit和64 bit Windows XP-Windows 8系統(tǒng)物理內(nèi)存的獲取。調(diào)查人員可以通過該工具獲取設(shè)備的內(nèi)存映射數(shù)據(jù),如共享的video設(shè)備的內(nèi)存。

除此之外,還有很多提供了內(nèi)存鏡像功能的軟件,如Encase(可從Guidance Software官網(wǎng)獲得)和FTK Imager(可從Access Data網(wǎng)站下載)等。

(2)Linux\Mac OS系統(tǒng)下獲取內(nèi)存的軟件

①M(fèi)emdump

雖然使用dd或者dc3dd可以通過讀取/dev/mem獲取Linux系統(tǒng)物理內(nèi)存,不過Linux系統(tǒng)版本眾多,物理內(nèi)存管理機(jī)制不盡相同,在使用dd的過程中出現(xiàn)不兼容或者獲取不全的情況。針對此問題,Coroner取證包中的Memdump工具跳過內(nèi)存映射將系統(tǒng)內(nèi)存轉(zhuǎn)儲(chǔ)到標(biāo)準(zhǔn)輸出流,且可以在Solaris、FreeBSD、RedHat、OpenBSD以及SunOS等多個(gè)系統(tǒng)中使用。

②fmem

為了解決/dev/mem無法獲取較大內(nèi)存的問題,fmem(可從github下載)通過加載一個(gè)名為/dev/fmem的內(nèi)核驅(qū)動(dòng)來訪問物理內(nèi)存空間。和/dev/mem相比,/dev/fmem在獲取前通過調(diào)用page_is_ram函數(shù)檢查所獲取的物理頁是否為系統(tǒng)物理內(nèi)存后再進(jìn)行獲取,防止調(diào)查人員意外讀取設(shè)備所占用內(nèi)存或未映射的物理地址而引起系統(tǒng)崩潰。/dev/fmem可以獲取較大范圍的物理內(nèi)存。/dev/fmem存在的不足在于調(diào)查人員需要手工通過讀取/proc/iomem文件獲取系統(tǒng)物理內(nèi)存的范圍,如下所示,操作系統(tǒng)版本為Ubuntu14.04(3.13.0-32-generic)、內(nèi)存大小為0x12F800000的系統(tǒng)內(nèi)存地址范圍如下。

③SecondLook

SecondLook是一款商業(yè)安全產(chǎn)品,可以用于Linux系統(tǒng)的內(nèi)存取證和完整性掃描,并對物理內(nèi)存中存在的未知和潛在惡意代碼進(jìn)行報(bào)警。SecondLook提供了本地和遠(yuǎn)程兩種內(nèi)存獲取方式,本地獲取方式通過在本機(jī)中運(yùn)行命令行腳本獲取物理內(nèi)存,遠(yuǎn)程獲取方式通過調(diào)用目標(biāo)系統(tǒng)中的內(nèi)存獲取代理程序目標(biāo)系統(tǒng)中的物理內(nèi)存信息。除了提供內(nèi)存獲取功能外,SecondLook也可以通過分析檢測系統(tǒng)中存在的惡意程序、隱藏的rootkit以及后門等惡意行為來實(shí)時(shí)分析系統(tǒng)物理內(nèi)存。

④LiME

LiME(Linux Memory Extractor)是目前使用較為廣泛的內(nèi)存獲取工具(可從github下載),是一種可加載內(nèi)核模塊(LKM,Loadable Kernel Module),以此獲得Linux設(shè)備中易失性存儲(chǔ)器中的內(nèi)容。使用LiME時(shí)首先加載一個(gè)內(nèi)核驅(qū)動(dòng),然后在用戶態(tài)調(diào)用內(nèi)核驅(qū)動(dòng)獲取內(nèi)存信息,減少了獲取過程中用戶和內(nèi)核空間進(jìn)程之間的互動(dòng),提高了獲取性能。另外,在獲取過程中,LiME通過枚舉內(nèi)核中的iomem_resouce鏈表獲取物理內(nèi)存段信息,按照分段信息的起始和終結(jié)地址依次獲取內(nèi)存,且可以處理物理內(nèi)存較大的目標(biāo)設(shè)備。

LiME提供了3種獲取內(nèi)存格式:raw、padded和lime。raw格式是指獲取全部物理內(nèi)存段的物理內(nèi)存;padded是指除獲取物理內(nèi)存段物理內(nèi)存外,其他段以0填充;lime除獲取物理內(nèi)存外,每段內(nèi)存段前附加了格式為lime_header結(jié)構(gòu)體的數(shù)據(jù)。

⑤Mac Memoryze

Mac Memoryze(可從mandiant網(wǎng)站下載)可以獲取Mac OS X 10.6~Mac OS X 10.8的內(nèi)存。該軟件輸出raw格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件。

除了內(nèi)存獲取功能,Mac Memoryze具有基本的內(nèi)存分析功能:獲取進(jìn)程鏈表、轉(zhuǎn)儲(chǔ)進(jìn)程內(nèi)存空間、顯示每個(gè)進(jìn)程加載的庫和建立的網(wǎng)絡(luò)連接、獲取加載的內(nèi)核擴(kuò)展、分析系統(tǒng)調(diào)用表hook。

⑥Mac Memory Reader

Mac Memory Reader是一款鏡像Mac OS X物理內(nèi)存的免費(fèi)(非開源)命令行工具(可從cybermarshal下載)。該軟件支持Mac OS X 10.6~Mac OS X 10.8版本。

Mac Memory Reader包括一個(gè)用戶級的組件和一個(gè)內(nèi)核擴(kuò)展。加載成功后,內(nèi)核擴(kuò)展創(chuàng)建兩個(gè)設(shè)備文件。

/dev/mem:該設(shè)備的操作原理與原來存在于Mac OS X的/dev/mem類似,它導(dǎo)出物理內(nèi)存內(nèi)容,使用戶級別的組件可以訪問物理內(nèi)存。

/dev/pmap:該設(shè)備導(dǎo)出物理內(nèi)存范圍。

用戶級工具首先通過訪問/dev/pmap文件獲取物理內(nèi)存范圍的偏移和大小;然后通過讀取/dev/mem獲取相應(yīng)數(shù)據(jù)內(nèi)容。Mac Memory Reader通常將內(nèi)存樣本保存為Mach-O文件格式,該格式將在Mac OS X內(nèi)存分析技術(shù)一章(第9章)中進(jìn)行詳細(xì)講解。除了支持導(dǎo)出Mach-O文件格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件,該軟件還通過某些選項(xiàng)的支持導(dǎo)出其他格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件。

H:使用MD5、SHA-1、SHA-256或SHA-512計(jì)算內(nèi)存樣本散列值,在獲取工作完成后,該值被寫入stderr。

p:將物理內(nèi)存以raw格式寫入轉(zhuǎn)儲(chǔ)文件,但是不會(huì)填充RAM區(qū)域之間的空白區(qū)域。這就導(dǎo)致了物理內(nèi)存中的物理偏移地址與內(nèi)存轉(zhuǎn)儲(chǔ)文件的物理偏移地址是不一致的。因此,一般的物理內(nèi)存分析工具無法從該格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件中分析出結(jié)構(gòu)化的信息。

P:將物理內(nèi)存以raw格式寫入轉(zhuǎn)儲(chǔ)文件,會(huì)填充RAM區(qū)域之間的空白區(qū)域。該格式文件可以被物理內(nèi)存分析工具分析,但是比較浪費(fèi)磁盤空間(對同一物理內(nèi)存來講,該格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件占用的磁盤空間要大于Mach-O文件格式的內(nèi)存轉(zhuǎn)儲(chǔ)文件)。

k:創(chuàng)建/dev/mem和/dev/pmap文件的專用模式,該模式下,不獲取內(nèi)存轉(zhuǎn)儲(chǔ)文件。借助這兩個(gè)文件,取證人員可以使用其他工具來讀取正在運(yùn)行的系統(tǒng)中的任意內(nèi)存區(qū)域。

⑦OSXPMem

OSXPMem是rekall開發(fā)包中pmem套件的一部分,它能快速便捷地獲取基于Intel的Mac OS物理內(nèi)存鏡像,該工具支持多種輸出格式:Mach-O、ELF、AFF4和zero-padded RAW。

AFF4(Advanced Forensic Framework 4)是由Michael Cohen、Simson Garfinkel、Bradley Schatz所設(shè)計(jì)的一種取證文件格式。傳統(tǒng)的文件格式存在某些缺陷,具體如下。

·EWF格式難以實(shí)現(xiàn)和解釋。

·dd文件格式在不壓縮時(shí)非常大,并且沒有元數(shù)據(jù)、數(shù)字簽名和密碼學(xué)算法的支持。

·傳統(tǒng)的文件格式被設(shè)計(jì)為存儲(chǔ)單一的數(shù)據(jù)流,然而,在實(shí)際調(diào)查取證工作中,某些時(shí)候需要同時(shí)獲取多元數(shù)據(jù)并存儲(chǔ)在同一個(gè)證據(jù)卷中。

·傳統(tǒng)的文件格式僅處理數(shù)據(jù),并沒有結(jié)合文件說明構(gòu)建一個(gè)統(tǒng)一的證據(jù)管理系統(tǒng)。

基于此,提出的AFF文件格式支持密碼算法、數(shù)字簽名、壓縮以及外部引用。AFF4是AFF的一個(gè)擴(kuò)展,是一個(gè)面向?qū)ο蟮慕Y(jié)構(gòu),因此,可以通過唯一的名字來訪問它。例如,一個(gè)AFF4對象可命名為urn:aff4:f3eba626-505a-4730-8216-1987853bc4d2。

主站蜘蛛池模板: 伊川县| 民权县| 贵溪市| 蒲江县| 通榆县| 新晃| 洪湖市| 翁牛特旗| 汾西县| 泽普县| 仁化县| 赤峰市| 吉水县| 历史| 桂平市| 正定县| 滁州市| 巧家县| 浏阳市| 乌苏市| 拜泉县| 天峨县| 府谷县| 崇文区| 故城县| 公主岭市| 修水县| 珠海市| 宣汉县| 会宁县| 鄂托克旗| 石楼县| 涿鹿县| 静宁县| 志丹县| 娱乐| 望奎县| 巴南区| 平乐县| 罗江县| 固镇县|