王丹 丁兆錕 周鋒 趙燕
(南京拓界信息技術有限公司 江蘇省南京市 210014)
眾所周知,內存是計算機的重要組成部分之一,在系統運行時起到了關鍵的存儲作用。但內存與硬盤等介質存儲不同,其只有在計算機工作時進行數據存儲。計算機一旦關機,內存中的所有數據將不再存在。因此,內存取證又被稱為易失性數據提取。本文在研究和分析內存取證方法及工具的基礎上,提出了基于動態內存讀取技術(DMA),通過主機主板外部或內部的不同接口直接訪問內存,實現在不破壞內存完整性的前提下,對內存鏡像進行提取的方法,并依據相關司法規定討論該方法的合法性。
從目前能夠查詢到的資源材料來看,計算機取證起源于1984年,而內存取證作為計算機取證的一個分支直到2002年才被美國空軍特別調查辦公室的Kornblum 提出[1]。此后,Brain D.Carrier 和Joe Grand 于2004年在Digital Investigation 雜志發表《A hardwarebased memory acquisition procedure for digital investigations》對易失性數據提取的可行性進行了分析[2]。2005年,DFRWS 發起了一場數字挑戰賽,從而拉開了內存取證技術研究的大幕。眾多學者開始關注內存取證。綜合當前的研究成果來看,內存取證主要集中在兩個方面:
(1)物理內存提取;
(2)虛擬內存提取。
物理內存提取是當前學者研究比較多的方向,也是物理磁盤取證與內存取證不同的主要著眼點。PetroniJr N L,Walters A,Fraser T,Zhang S,Wang L,Zhang R 等學者都先后對內存取證提出了自己的方法及研究成果。同時,美國 Guidance Software 公司、美國AccessData 公司、韓國 FinalData 公司、德國 X-Ways software 公司等公司也先后利用多種方法制作了內存提取工具。基于對這些研究搜索發現,物理內存取證的方法主要集中的三個方面:
1.1.1 利用硬件進行物理內存提取
這種方法主要是通過計算機外部硬件連接來完成對計算機內存的提取。如,Brian Carrier 和 Joe Grand 通過對計算機安裝 “Tribble”硬件擴展卡的方式,來實現將物理內存中的數據復制到外接存儲設備中進行保存。再比如比較流行的 Volatility 開源工程。
1.1.2 利用應用軟件進行物理內存提取
這種方法被應用的較多,通過編寫程序完成一個軟件,利用該軟件對物理內存進行按地址獲取并記錄到物理存儲設備中。這種方法中,有的利用用戶模式的應用程序達到讀取內核內存區對象的目的。但該方法常常受到算法及權限的影響,導致物理內存提取不全或者失敗。如Dolan-Gavitt 曾經借助VAD 樹算法來枚舉內存進程與線程信息,并存儲到物理設備中。有的利用內核模式程序進行內存取證。這種方法可以有效解決系統權限等安全問題引起的數據獲取難題,可以輕松繞過系統安全機制而完整獲取內存空間對象。研究成果中,學者Betz 和Andreas 分別從Windows 2000 內核數據結構以及內核進程、線程結構等角度提出了自己的方法,并制作成了MemParser 和PTFinder 工具。
1.1.3 利用系統休眠機制或者崩潰機制進行內存取證
(1)自從WindowsXP 開始支持ACPI Advanced Configurationand Power Interface 以來,Windows 系統便有了系統休眠功能。該功能主要通過將將內存中的數據轉儲到硬盤上一個休眠文件來實現切斷系統供電不會導致數據丟失的目的。據此,有學者提出,如果在系統休眠的情況下,對硬盤上的休眠文件進行提取,就可以達到內存取證的目的。那么,如何在計算機斷電情況下,硬盤上的休眠文件提出來,又不破壞計算機內存數據呢?常用的方法可以通過計算機帶電折機的方法,將硬盤利用只讀硬盤復制機進行拷貝。但這樣一來,對內存取證的技術要求便提高了很多,常常會因為操作失誤而導致內存損壞。所以在司法鑒定領域應用并不多。
(2)利用系統崩潰機制進行內存提取,Garner 和 Mora 團隊通過逆向分析 Windows 2000 崩潰轉儲文件的重要內核數據結構發現,操作系統崩潰時記錄下來的當前系統狀態信息可以給內存取證提供了便利,據此還開發了內存取證工具 KNTList。這種方法與休眠方法類似,雖然可以解決內存取證問題,但對內存取證人員的技術要求過高。首先,技術人員要清楚的知道崩潰文件的存儲位置;其次,技術人員要能夠精確的控制系統崩潰;最后還要實現將崩潰文件拷貝到指定存儲設備中。有一個環節出了問題,都會導致系統內存數據損失。
通過對計算機存儲介質的虛擬化,實現對內存的管理和利用是虛擬內存的重要作用。頁交換文件是虛擬內存的一個重要特征,其中包含有某些進程的部分信息,因此2008年James M 等學者就提出要對這部分信息的提取加以重視。經過資料檢索發現,從2008年以來,雖然學者們對頁交換文件作為取證的一部分并無太多異議,但真正的研究成果并不是很多。零星的一些方法包括利用注入簽名驅動的方法進行提取,利用文件系統直接提取等。
綜合物理內存取證和虛擬內存取證的調研成果來看,本文所研究的重點應該屬于物理內存取證范疇,因此對于虛擬內存取證本文不做過多探討。在物理內存取證方法中,DMA 技術提取內存又是利用硬件進行物理內存提取的范圍,而且并非本文首次提出。PetroniJr N L 等人4 就提出使用FireWire 設備進行物理內存提取的方法,該方法就是利用了DMA 技術,但這一技術一直無法完全解決系統藍屏死機或者丟失部分內存信息等問題。本文繼續對這一技術進行研究,力爭找到一條穩定、可靠且符合司法鑒定要求的物理內存提取方法。
DMA 技術又稱為直接內存存取技術。它可以利用DMA 控制器直接與系統內存進行讀寫,而不需要依賴于計算機CPU。正是因為這一特性,使得利用此技術對內存直接讀取并寫入外部存儲器成為可能。
利用 DMA(direct memory access,直接內存訪問)指令去獲取物理內存,同樣可以完全內存取證工作。在獲取物理內存時,目標系統的CPU 將暫停,以避免因操作系統的執行而改變內存數據。基于DMA 技術進行內存取證,需要有DMA 控制器,利用控制器,通過PCI、IEEE 1394 火線以及雷電等接口與目標主機連接,從而利用程序控制內存提取。具體步驟如下:第一步,將DMA 控制器通過PCI、IEEE 1394 火線以及雷電等接口與目標主機連接。第二步,通過仲裁器協調DMA 請求的優先權,等等目標主機回應。第三步,對目標主機的內存進行提取。
采用這類方法的優點是,在基于Intel 架構的操作系統(Windows,Linux,Mac OS 等)中,都可以利用該方法獲取物理內存;同時DMA 方式能夠在不干擾操作系統和 CPU 的情況下,較為準確地獲取物理內存。但該方法也存在一些兼容性缺點。由于需要有硬件設備插入目標主機主板中,受目標主機形態的影響,很可能會導致硬件環境不滿足,從而內存取證失敗。
在實際工作場景中,內存存在很多其他類型的密碼信息,比如系統密碼,第三方加密工具的密鑰信息,部分應用程序,如微信,QQ 等的數據庫密鑰信息。因此,在動態讀取內存技術的基礎上,進一步研究其他類型的密鑰在內存中的特征,找到第三方加密工具或社交軟件數據庫的加密方式,獲取解密數據庫的密鑰值,從而分析出更多的密鑰信息。
傳統獲取內存的方式是基于軟件的內存獲取,但該種方式往往需要運行特定的程序來實現,而外部程序一旦在內存中運行,就會破壞部分內存信息,導致獲取的動態內存數據不準確。本課題研究是基于硬件的內存獲取,利用 DMA 指令直接獲取物理內存。因此,相對于傳統的軟件內存獲取方式,其優點在于,獲取物理內存時,能夠避免取證軟件造成的內存數據變化,從而保證目標系統內存信息的完整性與一致性,實現在不干擾操作系統和 CPU 的情況下,較為準確地獲取物理內存數據,為進一步取證分析工作提供必要條件。
內存取證在司法取證中被稱為易失數據取證,在相關的司法規定中有明確的取證要求。
(1)符合電子數據取證原則。《電子數據司法鑒定通用實施規范》SF/Z JD0400001-2014 中明確規定了電子數據鑒定基本原則,包括原始性原則、完整性原則、安全性原則、可靠性原則、可重現原則、可追溯原則以及及時性原則。基于DMA 技術的內存取證方法利用外部設備進行內存提取,首先保證了被取證設備內存的完整性和原始性,同時該方法具有安全、可靠以及可重現等特點,能夠符合電子數據鑒定基本原則的規定。
(2)符合電子數據證據獲取規范。《電子數據證據現場獲取通用規范》SF/Z JD0400002——2015 中明確規定了易丟失數據的提取和固定步驟,同時提出了利用計算電子數據和存儲介質的完整性校驗值進行完整性校驗。從取證方法上來看,基于DMA 技術的內存取證方法能夠滿足該規范要求。
(3)多種取證方法的原則性比較,如表1所示,通過與休眠文件、崩潰轉儲等方法進行比較發現,本文中提出的方法具有一定的可操作性和可靠性,便于在司法鑒定過程中進行實施。

表1:多種取證方法原則性比較
內存取證技術是當前計算機取證技術的重要組成部分,也是目前取證領域的研究熱點,本文從動態內存讀取技術原理的角度出發,通過利用Windows 主機中的雷電3、Express Car 等接口,結合動態內存讀取技術,有效地進行內存固定與提取,同時針對易失數據證據固定中的相關規范文件,對該方法從取證原則到方法步驟進行對比,符合司法鑒定的相關要求。