黃婉鏑,汪中夏,武振東
(1.北京信息科技大學 計算機學院,北京 100101;2.北京信息科技大學 數據恢復研究所,北京 100101)
在電子取證工作中,恢復數字設備中被刪除的數據是極為重要的工作之一,恢復數據又分依賴系統元信息的傳統數據恢復技術和不依賴系統元信息的文件雕刻。文件雕刻思想是指,在自動或最小的人工干預的條件下,從一個數字“平面”上“雕刻”出某些文件的“形狀”。這種思想的出現源于,當系統元信息不可信任或被損壞時,會導致數據區所有文件數據變得無差別以至于無法識別,只能采用基于文件的結構特征和內容特點的文件雕刻技術在這“無差別”數據區中“雕刻”出文件。由此,基于文件雕刻思想進行數據恢復的技術簡稱為文件雕復。
對視頻AVI文件進行取證時,經常遇到即使在無覆蓋風險的情況下,恢復出來的視頻也是不完整的。原因在于傳統的數據恢復技術通過系統元信息進行的數據恢復不具有數據偵測能力,一旦系統元信息不完整,即使數據仍保留在數字設備中,也無法恢復。沒有了可依賴的系統元信息,我們唯一可以做的就是利用AVI文件的結構特征和內容特點,在“無差別”的數據區中偵測每個“未分配”的數據簇,判斷它們是不是我們期望得到的視頻碎片數據。
在一個忽視系統元信息的環境中,如何偵測到每個AVI文件碎片,并將它們有序銜接起來,這就是本文研究的重點。
文件雕復是數據恢復技術的一個分支,可以在沒有系統元信息,或是系統元信息不可信任的情況下,恢復數據。文件雕復的雛形很早就有了,在2006年和2007年后受到了更多的重視,這兩年里DFRWS(Digital Forensics Research WorkShop)連續發布的文件雕復的難題[1],極大提高了文件雕復研究熱度。國內的文件雕復剛剛開始,并迅速受到關注,但尚未形成完整的理論研究和實際應用技術,因此,研究文件雕復,對推動數據恢復技術研究,促進電子取證技術發展有重要意義。以下簡單敘述文件雕復的相關技術。
文件雕復依賴文件的結構特征,最基礎的結構特征就是文件頭和文件尾的關鍵字[2],若是沒有碎片,那么檢測到文件頭和文件尾的關鍵字后,兩者之間就是整個文件的數據。關鍵字經常用來判斷文件類型,不單指文件頭和文件尾特征的關鍵字,如果某類型文件數據中會出現大量特定的字符,也可用來判斷簇的文件類型,例如大量出現“href”的簇可被認為屬于html類型文件。從關鍵字延伸出文件指紋的概念,指從某一種文件類型的大量文件中提取字節頻率,試圖尋找到某些特定字節的出現強度。這些出現強度高的字節也可認為是關鍵字,視為某類文件的“指紋”。實際應用中,會根據實際要求用一組指紋來判斷,用來彌補字節頻率的不穩定性和減少誤報。但這種關鍵字匹配并不一定是完全準確的。
并行唯一路徑[3],這是從Dijkstras單一源最短路徑算法變化而來的思想,最初用于圖像的碎片分析,但這種思想可以引申推廣。并行,指多個不完整文件同時存在,那么剩余的簇將會與這些文件一一匹配,分配給最佳匹配文件。唯一,指一個簇只能分配給一個文件。
二分碎片間隙雕復是,利用快速對象驗證技術[4]來恢復只有兩個碎片的文件。二分碎片間隙雕復是這樣的:詳細尋找已確定的標識頭和標識尾之間的所有簇的組合并且排除不是該文件的簇直到成功的解碼或驗證是可能的。假設文件頭所在簇是head,文件尾所在簇是end,中間碎片間隙是gap,初始化時gap=1,嘗試gap=1的所有組合,進行快速對象驗證。如果沒有通過,則嘗試所有gap=2的組合。gap值會遞增,直到找到能通過快速驗證的簇的組合或全部失敗停止。示例如圖1所示:

圖1 二分碎片間隙雕復示例
除此之外,還有計算簇的熵值、Oscar方法等文件雕復方法及文件雕復質量的評估方法,當然,這些大多是理論模型,文件雕復的實踐仍要長時間的積累。
一個文件的存儲可能出現三種情況,如圖2所示:

圖2 碎片出現的三種情景模式的模擬
遇到情況一時,按特征值找到文件頭,再找到文件尾或是能從文件頭信息中得知文件的長度,從頭到尾順序讀取。遇到情況二時,利用文件的結構特征,有時也會用到特定文件格式的內容特點來偵測碎片,當我們找到這些碎片后,按順序鏈接起來就成了一個完整的文件。最困難無疑是情況三,碎片無序,即使我們找到了所有碎片,卻不得不對它們進行排序。慶幸的是,情況三遠沒有前兩種情況常見。偵測碎片是有很多難點需要解決的,如簇的文件類型歸類,某一數據塊是屬于AVI,或是JPEG,還是其它;判斷簇具體屬于哪個文件,例如某一塊數據是AVI文件類型,而A和B都是AVI文件,那么如何判斷該數據塊是屬于A還是B,等等諸多問題需要解決。
通常的做法是先將數字設備中的數據制作成鏡像,然后分析AVI文件結構[5],對鏡像進行文件雕復。AVI文件的文件頭中可以讀取文件的長度,當確定屬于該文件的碎片的總大小正好是文件的長度時,這個文件的雕復就結束了。
首先在鏡像中檢索AVI文件的文件頭。文件頭hex特征值“52 49 46 46”,即表示是一種RIFF格式文件。緊跟4個字節指文件的長度。然后4個字節表示文件類型,即AVI,其hex特征值“41 56 49 20”。這些特征應該出現在某簇的開始。某文件的文件頭結構如圖3所示:

圖3 某文件的文件頭部分結構
整個文件可視為由多個LIST子塊構成,還會有JUNK填充塊用來占位。主要有包含頭信息的ID為hdrl的LIST,包含主要音視頻數據的ID為movi的LIST,末尾有一個可選的索引塊idxl。
可以用Winhex工具按文件頭結構特征搜索和定位文件頭所在簇號。文件頭信息列表hdrl可視為是完整的,即實際上這部分一般不會出現碎片。文件的斷裂處應該出現在主數據區列表movi中。
AVI文件是一種靈活復雜的音視頻文件,所以結構特征是多樣的。主數據區的結構可以是一系列單個視頻幀;一個音頻幀和一個視頻幀交替出現;多個音頻幀和多個視頻幀交替出現;以一系列LIST子塊為單位,多個音視頻幀封裝在這些子塊中,等等。這些信息既可以從主數據區中觀察出來,也可以從頭信息中分析出來。
按文件頭特征檢索到文件頭后,向下線性檢測,尋找碎片點或文件尾。
先提供以下概念:碎片點,每個碎片的最后一個簇;碎片點幀,每個碎片的最后一個幀。
壓縮視頻幀為dc,未壓縮的是db,音頻幀為wb。常見壓縮視頻幀dc。
借鑒二分碎片雕復思想的兩個核心,一是間隙gap遞增形成各種組合,二是合適方法驗證多種組合。修改后應用于本文的碎片偵測方法,間隙gap從偵測到的碎片點開始,從0遞增。驗證下一個碎片的起始簇位置不用解碼器,而是幀長值、音視頻幀交替結構特征和最近優先匹配相結合來驗證。
4.2.1 利用幀長判斷碎片點和偵測下一個碎片起始簇
分析幀的結構,來判斷是否出現碎片。幀名占4個字節,例如是##wb,幀名后面的4個字節是幀長值。需要注意的是,長度不包括幀名的4個字節和表示長度占用的4個字節。讀取它的字節長度,如果幀長值不是偶數應在末尾填充一個字節的00,保證幀長度值是偶數。跨越該長度的字節,應該緊跟另一個幀(也可能是LIST子塊,這個結構特征應從第一個碎片中提取,這里為敘述簡單,一致視為下一個就是幀)。這并不絕對,有時數據會“丟失”。雖然文件雕復依賴于文件的結構特征,但有時也需要模糊處理,以防只是損壞了一幀的數據卻誤以為出現了碎片。但幀的長度值仍然是我們分辨碎片點的依據。若幀的后面超出幀長度后仍未找到下一個幀,甚至附近都不再有幀存在,我們就認為出現碎片了。我們稱這個幀為碎片點幀。
模擬情況,如圖4所示。圖中每一簇被分為八個單位,上圖以每個小方格為一個單位,黑粗框表示一個簇。在第一個簇中,發現視頻幀頭,該視頻幀長12個單位,向下取12個單位,沒找到下一個幀,說明非連續存儲;出現碎片,這個幀是碎片點幀,是這個碎片的最后一個幀。

圖4 利用幀的長度來識別碎片點
第一次令gap=1,就是點1后要跳過一個簇,即圖中點1和點2之間的簇,但跳過該簇后,按12個單位讀取,仍未找到下一個幀。此時令gap=2,點1銜接點3的簇,正好在12個單位的長度后,遇到了下一個音頻幀。
點1就是碎片點,點3是下一個碎片的起始簇,點1指向了點3,忽略中間的垃圾簇,完成了兩個碎片的銜接。
間隙的長度大小gap的計算按下式:

其中,Gap指碎片間隙的大小,以簇為單位;N指碎片點幀所在簇和下一個碎片起始幀所在簇之間的長度大小,以簇為單位;n指該幀的長度,以字節為單位;H指碎片點幀所在簇已經包含的該幀的部分長度,以字節為單位;L指每一個簇包含的字節數。如此,(n-H)/L的下取整計算出的就是這個幀占據的完整簇的個數。
其實,我們還看到,有其它的組合滿足這種依靠幀長值的判斷法,例如將點2看做碎片點,和點4銜接起來,忽略中間的簇,也能滿足幀的長度。這意味著有多組合滿足利用幀長度判斷的條件。

圖4中,N=3,n=12,H=2,L=8,按公式1計算間隙大小Gap=2,即兩個碎片之間的間隙是兩個簇。按公式2計算出有2種可能的組合,即點1銜接點3,點2銜接點4。
評估哪種組合的正確性更高,可以用字節密度、字節強度、特定字節頻率等排除法來做。
4.2.2 驗證下一個碎片起始幀的正確性
尋找到的下一個碎片起始幀是否正確,還要通過音視頻幀交替結構特征驗證。根據第一個碎片中提取到的幀排列規律特征,推測下一個碎片的起始幀應該是視頻幀、音頻幀或是LIST子塊。偵測到的下一個碎片起始幀應與規律特征吻合。
最近優先匹配是,將下一個碎片起始幀向前回查,如果和前面緊挨著的簇也是匹配的,那么這個幀應該是屬于距離最近的文件。例如,有兩個AVI文件A和B,偵測到了碎片C同時與A和B匹配,但與B是緊挨著的,那么C會優先分配給B。
最終的驗證方法就是整個文件的大小。所有碎片加起來應該正好等于文件的大小,如果不吻合,那么意味著有碎片出錯了,需要重新組合其它的碎片。
2011年6月某小區發生了一起惡意毀車案件,監視器錄制下的視頻被人刪除。用傳統的數據恢復工具進行恢復,發現部分視頻是破損的。經過推斷,凌晨4點30分到4點45分的視頻記錄了案件發生過程,但大約15分鐘的視頻全部丟失。
使用Winhex工具恢復顯示,4點30分至4點45分時間段的視頻為0字節,完全無法播放。使用R-studio 6.0版本可以恢復4點30到4點35分04秒的視頻,后續中斷,無法播放。最后的畫面如圖5所示:

圖5 視頻損壞后的最后畫面

圖6 4點30至4點45監控視頻文件頭信息
按照本文上述的文件雕復思想,首先按結構特征定位文件頭所在簇。這個鏡像之中存在大量的監視器錄制視頻,不依賴系統元信息很難直接定位4點30分的視頻,所幸工具R-studio 6.0版本可以恢復部分視頻,從這里可以提取目標視頻的結構特征,在鏡像中檢索后就準確定位了目標視頻的文件頭所在簇為8241737號簇,文件大小“29 E1 B1 05”,倒過來變十六進制數值“05B1E129”,轉成十進制即95543593個字節。文件頭信息如圖6所示。
主數據區列表movi中的幀的排列結構特征是,只有視頻幀00dc,一個緊挨一個,無音頻幀。即監視器錄像不錄制聲音。字節排列緊密,這是由于是壓縮的視頻幀,所以極少有“00”樣式的字節,那么如果檢測到數據稀疏的簇,那么基本可以認為是非AVI文件,可以排除掉。當然,也不應該出現大量的數字或其它文件的特定符號,這些都可以視為排除的依據。
自動雕復過程1:識別00dc,讀取該幀理論長度,跨越該長度后,如果沒有尋找到下一個幀,視為出現碎片,記錄碎片點幀的位置。過程2:按照過程1得到的信息,偵測下一個碎片起始幀的位置,然后依據幀交替結構特征和最近優先匹配判斷下一個碎片起始幀的正確與否。最后依靠Winhex工具拼接。
為了減少程序運行時間,本案例的碎片偵測過程并非對整個鏡像,而是根據實際情況判斷,在最有可能找到碎片的鏡像局部進行偵測。
在本案例中,人工干預比較多,使用了Winhex和R-studio6.0,原因在于對AVI文件的文件雕復研究尚在初期,而且制作全自動雕復工具比較復雜。
文件雕復后的完整視頻看到了嫌疑人的動作如圖7所示:

圖7 文件雕復后的完整視頻中發現了嫌疑人
本次案例依據AVI文件的結構特征進行了文件雕復。工具、制作輔助程序和手工相結合,完成了文件雕復。尚未有專門針對AVI文件的全自動雕復工具,一些具有雕復功能的工具,如RecoverMyFiles、X-ways Forensics等,也并不能保證每次都能雕復成功。
文件雕復技術雖力求自動化,但目前文件類型種類繁多,現有文件雕復工具不可能完成對所有文件的雕復工作,所以雕復工具往往具有針對性,只針對一種或幾種文件類型進行雕復。更多情況下,需要取證人員有大量經驗,工具和手工相配合,有時需要專門寫一些程序來輔助文件雕復。AVI文件是一種廣泛使用的視頻文件,對其進行研究,具有實際意義,有助于國內文件雕復和電子取證技術的發展。
[1]B.Carrier,E.Casey,W.Venema.DFRWS 2006 Forensics Challenge Overview[EB/OL].http://www.dfrws.org/2006/challenge/index.shtml,2006.
[2]Anandabrata Pal,Nasir Memon.The Evolution of File Carving[J].IEEESIGNALPROCESSINGMAGAZINE,2009,(3):59-71.
[3]Anandabrata Pal,Husrev T.Sencar,Nasir Memon.Detecting file fragmentation point using sequential hypothesis testing[J].Digital Investigation,2008,(5):S2-S13.
[4]Simson L.Garfinkel.Carving contiguous and fragmented files with fast object validation[J].Digital Investigation,2007,(4S):S2-S12.
[5]黃東軍,賀宏遵.AVI文件結構的實例分析[J].企業技術開發,2008,27(3):3-6.