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


TAG:信息時代的犯罪偵查 |