楊燕燕, 魏豐國, 王斌君
(中國人民公安大學,北京 100038)
網(wǎng)絡技術的快速發(fā)展在給社會生活帶來日新月異變化的同時也使計算機犯罪日益猖獗。破獲網(wǎng)絡犯罪案件的關鍵在于計算機犯罪偵查和計算機電子數(shù)據(jù)取證。計算機取證指對存儲在計算機系統(tǒng)或網(wǎng)絡設備中潛在的電子證據(jù)的識別、收集、保護、檢查和分析,以及法庭出示的過程[1-2]。計算機取證分為靜態(tài)取證和動態(tài)取證。靜態(tài)取證又叫事后取證或者實驗室取證,是傳統(tǒng)的取證方法,這種取證方式具有滯后性。有些重要的證據(jù)存在于內(nèi)存等易失存儲器上,計算機關機時這些數(shù)據(jù)將會消失,而這些數(shù)據(jù)往往也是最重要、最關鍵的。計算機動態(tài)取證彌補了靜態(tài)取證缺乏實時性的缺點,通過技術手段,實時地分析網(wǎng)絡和主機的重要數(shù)據(jù),在被犯罪嫌疑人或者其他人為和自然因素干擾前形成證據(jù),保持了證據(jù)的完整性和可采信度。
動態(tài)取證可分為基于網(wǎng)絡取證和基于主機取證。基于網(wǎng)絡的取證主要結(jié)合入侵檢測技術、蜜罐技術、代理技術等,對網(wǎng)絡狀態(tài)、網(wǎng)絡信息進行獲取和分析。如對網(wǎng)絡端口開放的情況分析,對網(wǎng)絡傳送的數(shù)據(jù)包進行截獲和分析,對網(wǎng)絡中其他設備的信息進行調(diào)查取證?;谥鳈C的取證主要是對系統(tǒng)中易失數(shù)據(jù)的獲取,包括寄存器中的信息、緩沖區(qū)中的信息、內(nèi)存信息、正在運行的進程信息等,這些證據(jù)信息對案件現(xiàn)場重構具有重要意義。如惡意程序SQL Slammer,就是只存在于內(nèi)存中而從不向硬盤中寫入數(shù)據(jù)等。
證據(jù)是訴訟的關鍵,取證與司法鑒定是必經(jīng)的司法過程,獲取具有可采信的證據(jù)是取證與司法鑒定的主要目的。在計算機取證時,必須遵循一定原則確保獲得的證據(jù)合法有效。目前有靜態(tài)證據(jù)收集原則[3-4],但缺乏動態(tài)取證原則。經(jīng)過分析和研究,確定了以下幾點動態(tài)取證時應當遵循的原則,以確保電子數(shù)據(jù)的真實性和完整性。
(1)取證工具要盡可能地小,盡可能少地占用目標機器的資源,為了確保證據(jù)的真實性,僅做拷貝數(shù)據(jù)的工作,不做其他任何工作。
(2)盡可能完整地對目標數(shù)據(jù)進行收集。內(nèi)存的易失性數(shù)據(jù)是稍縱即逝的,為了確保證據(jù)的完整性,就必須盡可能完整地對目標數(shù)據(jù)進行收集。
其中,為了確保電子證據(jù)的真實性,對取證工具本身也有嚴格的規(guī)定。取證工具本身不能給取證人員提供任何形式除取證活動外的操作,防止取到的證據(jù)在取證和分析的過程中被取證人員誤操作發(fā)生篡改。
國內(nèi)外僅提出了動態(tài)取證工具的框架和開發(fā)模型,但是并沒有完善的動態(tài)取證工具來進行相關的取證工作。在現(xiàn)實工作中,有些偵查員不具備足夠知識來處理、分析操作系統(tǒng)中的動態(tài)數(shù)據(jù),且這方面的取證工具又很少[5],所以對動態(tài)數(shù)據(jù)的取證很難進行。本文針對Linux操作系統(tǒng)的內(nèi)存動態(tài)證據(jù),基于 GNOME3桌面環(huán)境的 GTK3開發(fā)包,使用glade3可視化編程工具對其進行界面設計,界面簡潔清晰。取證時為減少冗余,對內(nèi)存中關鍵的數(shù)據(jù)結(jié)構進行研究,不但提高了證據(jù)的提取速度,而且分析起來針對性強,速度快。
計算機中易失性數(shù)據(jù)大部分都存在于內(nèi)存中,獲得重要的易失性數(shù)據(jù)要先將計算機內(nèi)存的結(jié)構整理清楚。圖1描述了Linux操作系統(tǒng)采用虛擬內(nèi)存管理模式的重要數(shù)據(jù)結(jié)構、結(jié)構之間交互以及和物理內(nèi)存、虛擬內(nèi)存之間的關系。
圖1 linux虛擬內(nèi)存管理圖
在Linux中,每一個進程都由task_struct數(shù)據(jù)結(jié)構,即PCB來定義。它是對進程控制的唯一手段。當調(diào)用fork()函數(shù)時,系統(tǒng)會為進程創(chuàng)建一個task_struct結(jié)構。從父進程繼承一些數(shù)據(jù),把新進程插入進程樹,等待進行進程管理。此結(jié)構中還使用了和內(nèi)存管理相關的一個雙向鏈表的mm_struct結(jié)構,因此,可以通過獲得這個結(jié)構遍歷鏈表來實現(xiàn)進程的信息以及該進程在內(nèi)存中的數(shù)據(jù)。
mm_struct結(jié)構包含了如圖2所示的各個段的開始和結(jié)束地址,及這個進程所使用的物理內(nèi)存的個數(shù),虛擬地址空間和其他一些內(nèi)容。
這個結(jié)構體中有兩個主要用來管理程序內(nèi)存的成員:vm_area_struct和pgd。pgd成員是一個與平臺相關的成員,里面存的數(shù)值是PGD的地址,內(nèi)核在做虛擬地址到物理地址的映射時需要把pgd字段的值加載進CR3寄存器,然后通過分頁管理機制來找到相應的物理地址。取證工具獲得進程的物理內(nèi)存拷貝就需要用到這個字段,在工具中實現(xiàn)分頁機制來獲得。
通過對內(nèi)核結(jié)構及公安實踐經(jīng)驗,確定了以下重要字段,這些重要字段對案件的偵破和取證都是至關重要的。
(1)嫌疑進程創(chuàng)建的子進程鏈表。通過對該子進程鏈表進行分析可以得到和嫌疑進程通信的進程,獲得嫌疑人的社會關系等重要信息。
(2)嫌疑進程的可執(zhí)行文件的路徑。通過對該路徑的獲得找到嫌疑進程在嫌疑主機的位置,進而得知哪些軟件使用了該進程。
(3)嫌疑進程打開的文件信息。通過該信息得知嫌疑人利用該進程打開了哪些文件,可以找到這些文件的基本信息。
(4)嫌疑進程的時間信息。通過這些時間信息可以知道該進程開始運行時間、運行持續(xù)時間、是在核心態(tài)運行還是在用戶態(tài)運行,子進程運行時間,運行結(jié)束時間等重要的時間信息。如表1所示。
圖2 mm_struct結(jié)構信息
表1 進程的時間信息
通過上節(jié)的描述,可以完整地分析出目標計算機的進程信息、文件信息、執(zhí)行的命令信息等。為了證據(jù)的完整性,還可使用rootkit技術獲取相關信息,如系統(tǒng)版本號、主機名、硬件信息、獲得swap分區(qū)、本地文件系統(tǒng)、當前時間等信息。
為確保目標機上動態(tài)證據(jù)的原始性,取證工具應運行在工作機上,系統(tǒng)的總體框架如圖3所示。工作機的證據(jù)搜集工具模塊對目標計算機的重要數(shù)據(jù)進行獲取,然后交給物理內(nèi)存鏡像預處理模塊,預處理模塊通過內(nèi)核數(shù)據(jù)結(jié)構重要字段偏移數(shù)據(jù)庫中獲得的數(shù)據(jù)結(jié)構各字段偏移值對收集到的物理內(nèi)存鏡像進行處理,取出每個進程的PCB結(jié)構以及其對應的物理內(nèi)存,分別以文件的形式保存。最后證據(jù)顯示和分析模塊對這些文件進行處理和分析,并在圖形界面窗口顯示出對內(nèi)存分析的結(jié)果,為下一步線索分析和取證創(chuàng)造基礎。
圖3 取證工具總體架構
該模塊由目標計算機及遠程主機兩部分組成,整個模塊運行流程如圖4所示。
取證機和嫌疑機之間通過netcat進行證據(jù)回傳,netcat是一種典型的等待-響應機制,也是本文中基于C/S架構的證據(jù)回傳的核心。
Linux內(nèi)核不同發(fā)行版本對內(nèi)核結(jié)構都會做相應的改動,本取證工具是基于內(nèi)核數(shù)據(jù)結(jié)構各字段的偏移量對內(nèi)存進行分析的。為了使該工具更具有通用性,建立一個數(shù)據(jù)庫對不同內(nèi)核版本的重要字段偏移量進行存儲。如表2所示。
通過對取下的物理內(nèi)存映像進行預處理獲得系統(tǒng)中每個PCB對應的物理內(nèi)存。預處理程序主要的函數(shù)調(diào)用如圖5所示。
通過以上分析就可以實現(xiàn)把task_struct結(jié)構體的結(jié)構信息以及每個進程對應的物理地址寫入到文件。
圖4 證據(jù)收集模塊流程圖
表2 內(nèi)核數(shù)據(jù)結(jié)構重要字段偏移表
圖5 預處理模塊函數(shù)調(diào)用圖
本系統(tǒng)利用了glade3開發(fā)工具來進行圖形界面開發(fā),glade3是一款可視化編程軟件,能夠通過拖動的方式把對象布置在軟件界面中,并最終生成一個XML文件,在主程序中只需要調(diào)用這個XML文件就可以獲得相應的軟件界面,如圖6所示。
圖6 取證工具界面
隨著計算機技術的發(fā)展,犯罪分子反偵查的意識的增強,基于硬盤的靜態(tài)取證越來越無能為力,很多有用信息都存在于內(nèi)存等易失性存儲器里面。計算機動態(tài)偵查與取證是必然選擇,基于主機的動態(tài)取證是個新興的研究方向,在該領域還有很多工作可以做,尤其是取證工具方面的研究。本文通過對內(nèi)存結(jié)構的分析與研究,創(chuàng)新性地通過基于關鍵字段進行提取,解決了動態(tài)取證中海量數(shù)據(jù)存儲和分析的問題。
[1] 趙小敏,陳慶章.計算機取證的研究現(xiàn)狀和展望[M].計算機安全,2003(10):65-66.
[2] Judd R.An explanation of computer forensics[J/OL].http:∥www.forensics.net/forensics.htm
[3] Network Working Group D.Brezinski RFC 3227.Guidelines for Evidence Collection and Archiving[S].2002.
[4] Gorman M.Understanding the Linux Virtual Memory[M].Prentice Hall Professional Technical Reference,2004.
[5] Choi J,Savoldi A,Gubian P,et al.Live Forensic Analysis of a Compromised Linux System Using LECT(Linux Evidence Collection Tool)[C].International Conference on Information Security and Assurance,2008.