知識
隨筆
案例
聲音
其他
編者按
Oracle數據庫是典型、大型關(guān)系型數據庫。在很多信息系統中被廣泛應用。小編的職業(yè)生涯中,針對Orace的取證經(jīng)歷并不多,與作倫兄聊此案,算是彌補一個(gè)不足,亦收獲良多。
然,此文術(shù)語(yǔ)過(guò)多,與廣大讀者而言,可能存在閱讀上的困難,敬請原諒。
一、案情簡(jiǎn)介
李XX在某醫院任藥品管理員(國家工作人員),利用職務(wù)的便利,采取修改電腦中藥物管理軟件中庫存藥物數量的辦法,侵吞單位資產(chǎn),涉嫌貪污罪。
移送的扣押的物品只有一個(gè)U盤(pán)。
送檢要求,查找庫存藥品被修改過(guò)的記錄。
本案件的特殊情況:
1、該醫院發(fā)案時(shí)的藥品管理軟件已經(jīng)停用將近兩年,現有的藥品管理軟件是另外一家公司的產(chǎn)品。
2、發(fā)案時(shí)的藥品管理軟件的開(kāi)發(fā)公司已倒閉,原開(kāi)發(fā)人員已經(jīng)聯(lián)系不上。
3、發(fā)案時(shí)的服務(wù)器已經(jīng)消毀了。
4、單位沒(méi)有任何備份數據。
5、藥品管理軟件和加密狗都丟失了。
6、當時(shí)的技術(shù)人員也已離職。
在檢驗過(guò)程中,通過(guò)對U盤(pán)復制件內部文件的分析,發(fā)現在一個(gè)名為oracle_data的目錄下,存有user01.dbf、user02.dbf、user03.dbf。在接下來(lái)的搭建Oracle數據庫環(huán)境的過(guò)程中,我先后遇到了Oracle數據庫版本的問(wèn)題、服務(wù)器實(shí)例名稱(chēng)的問(wèn)題、服務(wù)器端字符集的問(wèn)題和只有部分數據文件的數據恢復等問(wèn)題。
取證結果:數據庫重建失敗
二、檢驗再分析
本案涉及Oracle數據庫取證的問(wèn)題,與其它數據庫取證的案件一樣,對于數據庫的案件,我們一般關(guān)心數據庫中的如下信息:
數據庫中現有數據信息
修改過(guò)的數據
刪除的數據
(1)對于數據庫中現有數據信息,我們通常在重建完數據庫時(shí),通過(guò)SQL語(yǔ)句就能查詢(xún)到相應的數據;
(2)對于修改過(guò)的數據,我們一般可以通過(guò)兩種方式進(jìn)行判斷,一種是通過(guò)數據庫本身的日志進(jìn)行分析,另一種是可以通過(guò)應用程序日志進(jìn)行分析。
需要注意的是Oracle數據庫的日志是二進(jìn)制文件,非文本文件,對它的分析要借助第三方的軟件或Oracle 10g以后的版本中提供的logminer工具作深度的日志挖掘;
(3)對于刪除的數據,我們同樣可以通過(guò)數據庫本身的日志文件或應用程序的日志進(jìn)行分析。同時(shí)我們還可以通過(guò)對數據庫中相應的數據表項進(jìn)行分析看數據是否真的從表中被刪除,還是僅做了刪除的標記。
在碰到的涉及數據庫的案例中,多數的情況下,我們能很容易的拿到完整的備份數據并能得到應用軟件開(kāi)發(fā)商的幫助,很快在我們的實(shí)驗室中搭建出模擬運行環(huán)境,從而對涉案的數據進(jìn)行檢驗分析。
但本案是一個(gè)很極端的案例。通過(guò)對本案分析,筆者認為本案取證失敗的主要原因是系統運行環(huán)境的相關(guān)信息較少和檢材本身的數據文件不全造成的。
首先是運行環(huán)境的信息中我們缺少如下的信息:
(一)數據庫的版本問(wèn)題
Oracle軟件版本很多,版本間存在的差異性也很大。不同版本間的數據庫恢復、不同的位(bit)級別(32 位或 64 位)間進(jìn)行數據的備份和恢復可能都會(huì )出現問(wèn)題。
(二)實(shí)例名稱(chēng),即數據庫服務(wù)名稱(chēng)(DB_NAME)
正常情況下我們重建完成數據庫后,會(huì )搭建應用程序的環(huán)境,通過(guò)對應用的分析來(lái)解析數據與業(yè)務(wù)間的邏輯關(guān)系。而DB_NAME是應用程序與數據庫進(jìn)行聯(lián)系時(shí)的關(guān)鍵,如果沒(méi)有這個(gè)參數,就很難正常運行應用程序。
本案中,我們對檢材進(jìn)行檢驗分析的過(guò)程中,還沒(méi)有走到這一步,只停留在數據恢復階段,原因如下:
(1)數據庫本身的重建工作沒(méi)有進(jìn)行成功,部分數據文件的數據沒(méi)有被成功恢復到數據庫中。
(2)現場(chǎng)扣押的物品中,沒(méi)有用戶(hù)使用的應用程序的安裝程序。所以在本案中即使數據文件內容被成功恢復到重建的數據庫中,我們依然無(wú)法搭建應用的模擬環(huán)境。
(三)多國語(yǔ)言的設置和字符集的設置
在搭建數據庫模擬環(huán)境時(shí),數據庫會(huì )要求我們輸入需要的語(yǔ)言和相關(guān)的字符集,ORACLE 數據庫多國語(yǔ)言的設置是為了支持世界范圍的語(yǔ)言與字符集,一般對語(yǔ)言提示, 貨幣形式,排序方式和 CHAR,VARCHAR2,C LOB,LONG 字段的數據的顯示等有效。
ORACLE 的多國語(yǔ)言設置,最主要的兩個(gè)特性就是國家語(yǔ)言設置與字符集設置,國家語(yǔ)言設置決定了界面或提示使用的語(yǔ)言種類(lèi),字符集決定了數據庫保存與字符集有關(guān)數據(如文本)時(shí)候的編碼規則。
ORACLE 字符集設定,分為數據庫字符集和客戶(hù)端字符集環(huán)境設置。在數據庫端,字符集在創(chuàng )建數據庫的時(shí)候設定,并保存在數據庫 props$表中。在客戶(hù)端的字符集環(huán)境比較簡(jiǎn)單,主要就是環(huán)境變量或注冊表項 NLS_ LANG。如果字符集設置不正確,我們看到的數據就會(huì )是亂碼。在本案中,我們語(yǔ)言的的設置很簡(jiǎn)單,因為應用是僅限國內使用的,所以我們只需選擇簡(jiǎn)體中文就可以了;對于所需要的字符集,我們可以通過(guò)枚舉的方法嘗試使用常用的字符集即可。
(四)只有數據文件的數據庫的重建
在本案中,沒(méi)有控制文件和日志文件,而且通過(guò)現有文件在重建控制文件的過(guò)程中,通過(guò)返回的錯誤發(fā)現數據文件備份不完全,這實(shí)際上是一種極端的冷備份情況。
下面我們先介紹一下Oracle數據庫的結構和常用的備份與恢復的方法:
Oracle數據庫的物理文件按其作用可以分為三類(lèi):數據文件 ;日志文件 ;控制文件 。
1、數據文件
數據文件用來(lái)存儲數據庫的數據,如表、索引等。一般來(lái)說(shuō)數據文件的后綴是DBF的文件,但也不排除是其它的后綴名稱(chēng),這主要看用戶(hù)在開(kāi)始創(chuàng )建數據文件時(shí)是怎么命名的,Oracle數據庫系統對此沒(méi)有做強制性規定,用戶(hù)調用數據時(shí),系統首先從數據庫文件中讀取數據,并存儲到SGA的數據緩沖區中。這是為了減少I(mǎi)/O,如果讀取數據時(shí),緩沖區中已經(jīng)有要讀取的數據,就不需要再從磁盤(pán)中讀取了。存儲數據時(shí)也是一樣,事務(wù)提交時(shí)改變的數據先存儲到內存緩沖區中,再由oracle后臺進(jìn)程DBWR決定何時(shí)將其寫(xiě)入到數據文件中。
2、重做日志文件
重做日志文件記錄對數據庫的所有修改信息。它是一個(gè)二進(jìn)制的文件,它所存儲的并不是操作的命令集,而是數據庫中發(fā)生變化了的數據。它是三類(lèi)文件中最復雜的一類(lèi)文件,也是保證數據庫安全與數據庫備份與恢復有直接關(guān)系的文件。日志文件的后綴是DBF。
3、控制文件
控制文件是一個(gè)二進(jìn)制文件,用來(lái)描述數據庫的物理結構,一般來(lái)說(shuō)控制文件的后綴是CTL,一個(gè)數據庫只需要一個(gè)控制文件,控制文件的內容包括:數據庫名及數據庫唯一標識 、數據文件和日志文件標識 、數據庫恢復所需的同步信息,即檢查點(diǎn)號(SCN號)。
三、常用備份、恢復方法
Oracle數據庫有三種標準的備份方法,分別是導出/導入(EXP/IMP)、熱備份和冷備份。導出備件是一種邏輯備份,冷備份和熱備份是物理備份。
1、導出/導入(Export/Import)
利用Export可將數據從數據庫中提取出來(lái),利用Import則可將提取出來(lái)的數據送回到Oracle數據庫中去。
2、冷備份
冷備份發(fā)生在數據庫已經(jīng)正常關(guān)閉的情況下,此時(shí)進(jìn)行數據備份會(huì )提供給我們一個(gè)完整的數據庫。冷備份實(shí)際上時(shí)將一些關(guān)鍵性的文件拷貝到另外的位置的一種作法。對于備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份中必須拷貝的文件包括:
(1) 所有數據文件
(2) 所有控制文件
(3)所有聯(lián)機REDO LOG文件
(4)Init.ora文件(可選)
值得注意的是冷備份必須在數據庫關(guān)閉的情況下進(jìn)行,當數據庫處于打開(kāi)狀態(tài)時(shí),執行數據庫文件系統備份是無(wú)效的。
3、熱備份
熱備份是在數據庫運行的情況下,采用archivelog mode方式備份數據庫的方法。熱備份的文件由三部分組成:
(1)一個(gè)表空間一個(gè)表空間的數據文件備份。
(2) 備份歸檔log文件
(3) 備份控制文件
本案中的作法屬于冷備份。
對于冷備份,我們上面已作了介紹,我們實(shí)際上應該將所有數據文件、 所有控制文件、所有聯(lián)機REDO LOG文件都應該進(jìn)行備份。如果要進(jìn)行日志挖掘分析,我們還應將歸檔日志進(jìn)行完全拷貝。
但本案中,我們只有數據文件,假定所有的數據文件都被拷貝完整了,我們即使沒(méi)有拷貝控制文件和日志文件,也可以通過(guò)重建控制文件和日志文件的方法將數據恢復的數據庫中。
但本案失敗的主要原因,就是數據文件也沒(méi)有被拷貝完整,在檢驗分析時(shí),我們嘗試多種方法對控制文件進(jìn)行重建均失敗。通過(guò)查找資料,發(fā)現這是因為Oracle數據庫與其它數據庫存在很大的區別,Oracle數據庫中的CKPT進(jìn)程(檢查點(diǎn)進(jìn)程)會(huì )在修改過(guò)的數據庫緩沖區中的數據都被寫(xiě)入到數據文件,日志文件、數據文件、數據庫頭和控制文件中都有寫(xiě)入檢查點(diǎn)標記。數據庫在恢復時(shí),只需提供自上一個(gè)檢查以來(lái)所做的修改。檢查點(diǎn)完成時(shí)系統將更新數據庫數據庫頭和控制文件。 Oracle數據庫的數據文件的頭部中存儲有DBID號、FILEID號、SCN號等。在啟動(dòng)時(shí),實(shí)例會(huì )從數據文件中讀出DBID號,并根據FILEID號依次找到數據文件,接下來(lái)會(huì )比較日志文件的檢查點(diǎn)信息,與數據文件的檢查點(diǎn)信息和數據庫頭的檢查點(diǎn)信息。三個(gè)地方的檢查點(diǎn)號相同,如果不同,說(shuō)明數據庫不同步,此時(shí)數據庫肯定無(wú)法正常啟動(dòng)。
【編者注】在信息技術(shù)高速發(fā)展的今天,電子數據已經(jīng)滲透到人們生活的各個(gè)領(lǐng)域,大量現實(shí)生活中的行為和特征都已經(jīng)被數字化或者在數字化的路上。這些信息以數字化的形式存儲在數據庫中,而提取數據庫中的數據并解析數據所包含的內容則是取證人員未來(lái)努力的目標。
目前,Oracle依然是大型業(yè)務(wù)系統的主流數據庫系統,將Oracle數據庫備份與恢復技術(shù)作為數據庫取證研究的突破口,形成一套收集、整理、分析和應用的方法,有其現實(shí)意義。