黃婉鏑,汪中夏,武振東
(1.北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100101;2.北京信息科技大學(xué) 數(shù)據(jù)恢復(fù)研究所,北京 100101)
在電子取證工作中,恢復(fù)數(shù)字設(shè)備中被刪除的數(shù)據(jù)是極為重要的工作之一,恢復(fù)數(shù)據(jù)又分依賴系統(tǒng)元信息的傳統(tǒng)數(shù)據(jù)恢復(fù)技術(shù)和不依賴系統(tǒng)元信息的文件雕刻。文件雕刻思想是指,在自動(dòng)或最小的人工干預(yù)的條件下,從一個(gè)數(shù)字“平面”上“雕刻”出某些文件的“形狀”。這種思想的出現(xiàn)源于,當(dāng)系統(tǒng)元信息不可信任或被損壞時(shí),會(huì)導(dǎo)致數(shù)據(jù)區(qū)所有文件數(shù)據(jù)變得無差別以至于無法識(shí)別,只能采用基于文件的結(jié)構(gòu)特征和內(nèi)容特點(diǎn)的文件雕刻技術(shù)在這“無差別”數(shù)據(jù)區(qū)中“雕刻”出文件。由此,基于文件雕刻思想進(jìn)行數(shù)據(jù)恢復(fù)的技術(shù)簡稱為文件雕復(fù)。
對視頻AVI文件進(jìn)行取證時(shí),經(jīng)常遇到即使在無覆蓋風(fēng)險(xiǎn)的情況下,恢復(fù)出來的視頻也是不完整的。原因在于傳統(tǒng)的數(shù)據(jù)恢復(fù)技術(shù)通過系統(tǒng)元信息進(jìn)行的數(shù)據(jù)恢復(fù)不具有數(shù)據(jù)偵測能力,一旦系統(tǒng)元信息不完整,即使數(shù)據(jù)仍保留在數(shù)字設(shè)備中,也無法恢復(fù)。沒有了可依賴的系統(tǒng)元信息,我們唯一可以做的就是利用AVI文件的結(jié)構(gòu)特征和內(nèi)容特點(diǎn),在“無差別”的數(shù)據(jù)區(qū)中偵測每個(gè)“未分配”的數(shù)據(jù)簇,判斷它們是不是我們期望得到的視頻碎片數(shù)據(jù)。
在一個(gè)忽視系統(tǒng)元信息的環(huán)境中,如何偵測到每個(gè)AVI文件碎片,并將它們有序銜接起來,這就是本文研究的重點(diǎn)。
文件雕復(fù)是數(shù)據(jù)恢復(fù)技術(shù)的一個(gè)分支,可以在沒有系統(tǒng)元信息,或是系統(tǒng)元信息不可信任的情況下,恢復(fù)數(shù)據(jù)。文件雕復(fù)的雛形很早就有了,在2006年和2007年后受到了更多的重視,這兩年里DFRWS(Digital Forensics Research WorkShop)連續(xù)發(fā)布的文件雕復(fù)的難題[1],極大提高了文件雕復(fù)研究熱度。國內(nèi)的文件雕復(fù)剛剛開始,并迅速受到關(guān)注,但尚未形成完整的理論研究和實(shí)際應(yīng)用技術(shù),因此,研究文件雕復(fù),對推動(dòng)數(shù)據(jù)恢復(fù)技術(shù)研究,促進(jìn)電子取證技術(shù)發(fā)展有重要意義。以下簡單敘述文件雕復(fù)的相關(guān)技術(shù)。
文件雕復(fù)依賴文件的結(jié)構(gòu)特征,最基礎(chǔ)的結(jié)構(gòu)特征就是文件頭和文件尾的關(guān)鍵字[2],若是沒有碎片,那么檢測到文件頭和文件尾的關(guān)鍵字后,兩者之間就是整個(gè)文件的數(shù)據(jù)。關(guān)鍵字經(jīng)常用來判斷文件類型,不單指文件頭和文件尾特征的關(guān)鍵字,如果某類型文件數(shù)據(jù)中會(huì)出現(xiàn)大量特定的字符,也可用來判斷簇的文件類型,例如大量出現(xiàn)“href”的簇可被認(rèn)為屬于html類型文件。從關(guān)鍵字延伸出文件指紋的概念,指從某一種文件類型的大量文件中提取字節(jié)頻率,試圖尋找到某些特定字節(jié)的出現(xiàn)強(qiáng)度。這些出現(xiàn)強(qiáng)度高的字節(jié)也可認(rèn)為是關(guān)鍵字,視為某類文件的“指紋”。實(shí)際應(yīng)用中,會(huì)根據(jù)實(shí)際要求用一組指紋來判斷,用來彌補(bǔ)字節(jié)頻率的不穩(wěn)定性和減少誤報(bào)。但這種關(guān)鍵字匹配并不一定是完全準(zhǔn)確的。
并行唯一路徑[3],這是從Dijkstras單一源最短路徑算法變化而來的思想,最初用于圖像的碎片分析,但這種思想可以引申推廣。并行,指多個(gè)不完整文件同時(shí)存在,那么剩余的簇將會(huì)與這些文件一一匹配,分配給最佳匹配文件。唯一,指一個(gè)簇只能分配給一個(gè)文件。
二分碎片間隙雕復(fù)是,利用快速對象驗(yàn)證技術(shù)[4]來恢復(fù)只有兩個(gè)碎片的文件。二分碎片間隙雕復(fù)是這樣的:詳細(xì)尋找已確定的標(biāo)識(shí)頭和標(biāo)識(shí)尾之間的所有簇的組合并且排除不是該文件的簇直到成功的解碼或驗(yàn)證是可能的。假設(shè)文件頭所在簇是head,文件尾所在簇是end,中間碎片間隙是gap,初始化時(shí)gap=1,嘗試gap=1的所有組合,進(jìn)行快速對象驗(yàn)證。如果沒有通過,則嘗試所有g(shù)ap=2的組合。gap值會(huì)遞增,直到找到能通過快速驗(yàn)證的簇的組合或全部失敗停止。示例如圖1所示:
圖1 二分碎片間隙雕復(fù)示例
除此之外,還有計(jì)算簇的熵值、Oscar方法等文件雕復(fù)方法及文件雕復(fù)質(zhì)量的評估方法,當(dāng)然,這些大多是理論模型,文件雕復(fù)的實(shí)踐仍要長時(shí)間的積累。
一個(gè)文件的存儲(chǔ)可能出現(xiàn)三種情況,如圖2所示:
圖2 碎片出現(xiàn)的三種情景模式的模擬
遇到情況一時(shí),按特征值找到文件頭,再找到文件尾或是能從文件頭信息中得知文件的長度,從頭到尾順序讀取。遇到情況二時(shí),利用文件的結(jié)構(gòu)特征,有時(shí)也會(huì)用到特定文件格式的內(nèi)容特點(diǎn)來偵測碎片,當(dāng)我們找到這些碎片后,按順序鏈接起來就成了一個(gè)完整的文件。最困難無疑是情況三,碎片無序,即使我們找到了所有碎片,卻不得不對它們進(jìn)行排序。慶幸的是,情況三遠(yuǎn)沒有前兩種情況常見。偵測碎片是有很多難點(diǎn)需要解決的,如簇的文件類型歸類,某一數(shù)據(jù)塊是屬于AVI,或是JPEG,還是其它;判斷簇具體屬于哪個(gè)文件,例如某一塊數(shù)據(jù)是AVI文件類型,而A和B都是AVI文件,那么如何判斷該數(shù)據(jù)塊是屬于A還是B,等等諸多問題需要解決。
通常的做法是先將數(shù)字設(shè)備中的數(shù)據(jù)制作成鏡像,然后分析AVI文件結(jié)構(gòu)[5],對鏡像進(jìn)行文件雕復(fù)。AVI文件的文件頭中可以讀取文件的長度,當(dāng)確定屬于該文件的碎片的總大小正好是文件的長度時(shí),這個(gè)文件的雕復(fù)就結(jié)束了。
首先在鏡像中檢索AVI文件的文件頭。文件頭hex特征值“52 49 46 46”,即表示是一種RIFF格式文件。緊跟4個(gè)字節(jié)指文件的長度。然后4個(gè)字節(jié)表示文件類型,即AVI,其hex特征值“41 56 49 20”。這些特征應(yīng)該出現(xiàn)在某簇的開始。某文件的文件頭結(jié)構(gòu)如圖3所示:
圖3 某文件的文件頭部分結(jié)構(gòu)
整個(gè)文件可視為由多個(gè)LIST子塊構(gòu)成,還會(huì)有JUNK填充塊用來占位。主要有包含頭信息的ID為hdrl的LIST,包含主要音視頻數(shù)據(jù)的ID為movi的LIST,末尾有一個(gè)可選的索引塊idxl。
可以用Winhex工具按文件頭結(jié)構(gòu)特征搜索和定位文件頭所在簇號(hào)。文件頭信息列表hdrl可視為是完整的,即實(shí)際上這部分一般不會(huì)出現(xiàn)碎片。文件的斷裂處應(yīng)該出現(xiàn)在主數(shù)據(jù)區(qū)列表movi中。
AVI文件是一種靈活復(fù)雜的音視頻文件,所以結(jié)構(gòu)特征是多樣的。主數(shù)據(jù)區(qū)的結(jié)構(gòu)可以是一系列單個(gè)視頻幀;一個(gè)音頻幀和一個(gè)視頻幀交替出現(xiàn);多個(gè)音頻幀和多個(gè)視頻幀交替出現(xiàn);以一系列LIST子塊為單位,多個(gè)音視頻幀封裝在這些子塊中,等等。這些信息既可以從主數(shù)據(jù)區(qū)中觀察出來,也可以從頭信息中分析出來。
按文件頭特征檢索到文件頭后,向下線性檢測,尋找碎片點(diǎn)或文件尾。
先提供以下概念:碎片點(diǎn),每個(gè)碎片的最后一個(gè)簇;碎片點(diǎn)幀,每個(gè)碎片的最后一個(gè)幀。
壓縮視頻幀為dc,未壓縮的是db,音頻幀為wb。常見壓縮視頻幀dc。
借鑒二分碎片雕復(fù)思想的兩個(gè)核心,一是間隙gap遞增形成各種組合,二是合適方法驗(yàn)證多種組合。修改后應(yīng)用于本文的碎片偵測方法,間隙gap從偵測到的碎片點(diǎn)開始,從0遞增。驗(yàn)證下一個(gè)碎片的起始簇位置不用解碼器,而是幀長值、音視頻幀交替結(jié)構(gòu)特征和最近優(yōu)先匹配相結(jié)合來驗(yàn)證。
4.2.1 利用幀長判斷碎片點(diǎn)和偵測下一個(gè)碎片起始簇
分析幀的結(jié)構(gòu),來判斷是否出現(xiàn)碎片。幀名占4個(gè)字節(jié),例如是##wb,幀名后面的4個(gè)字節(jié)是幀長值。需要注意的是,長度不包括幀名的4個(gè)字節(jié)和表示長度占用的4個(gè)字節(jié)。讀取它的字節(jié)長度,如果幀長值不是偶數(shù)應(yīng)在末尾填充一個(gè)字節(jié)的00,保證幀長度值是偶數(shù)。跨越該長度的字節(jié),應(yīng)該緊跟另一個(gè)幀(也可能是LIST子塊,這個(gè)結(jié)構(gòu)特征應(yīng)從第一個(gè)碎片中提取,這里為敘述簡單,一致視為下一個(gè)就是幀)。這并不絕對,有時(shí)數(shù)據(jù)會(huì)“丟失”。雖然文件雕復(fù)依賴于文件的結(jié)構(gòu)特征,但有時(shí)也需要模糊處理,以防只是損壞了一幀的數(shù)據(jù)卻誤以為出現(xiàn)了碎片。但幀的長度值仍然是我們分辨碎片點(diǎn)的依據(jù)。若幀的后面超出幀長度后仍未找到下一個(gè)幀,甚至附近都不再有幀存在,我們就認(rèn)為出現(xiàn)碎片了。我們稱這個(gè)幀為碎片點(diǎn)幀。
模擬情況,如圖4所示。圖中每一簇被分為八個(gè)單位,上圖以每個(gè)小方格為一個(gè)單位,黑粗框表示一個(gè)簇。在第一個(gè)簇中,發(fā)現(xiàn)視頻幀頭,該視頻幀長12個(gè)單位,向下取12個(gè)單位,沒找到下一個(gè)幀,說明非連續(xù)存儲(chǔ);出現(xiàn)碎片,這個(gè)幀是碎片點(diǎn)幀,是這個(gè)碎片的最后一個(gè)幀。
圖4 利用幀的長度來識(shí)別碎片點(diǎn)
第一次令gap=1,就是點(diǎn)1后要跳過一個(gè)簇,即圖中點(diǎn)1和點(diǎn)2之間的簇,但跳過該簇后,按12個(gè)單位讀取,仍未找到下一個(gè)幀。此時(shí)令gap=2,點(diǎn)1銜接點(diǎn)3的簇,正好在12個(gè)單位的長度后,遇到了下一個(gè)音頻幀。
點(diǎn)1就是碎片點(diǎn),點(diǎn)3是下一個(gè)碎片的起始簇,點(diǎn)1指向了點(diǎn)3,忽略中間的垃圾簇,完成了兩個(gè)碎片的銜接。
間隙的長度大小gap的計(jì)算按下式:
其中,Gap指碎片間隙的大小,以簇為單位;N指碎片點(diǎn)幀所在簇和下一個(gè)碎片起始幀所在簇之間的長度大小,以簇為單位;n指該幀的長度,以字節(jié)為單位;H指碎片點(diǎn)幀所在簇已經(jīng)包含的該幀的部分長度,以字節(jié)為單位;L指每一個(gè)簇包含的字節(jié)數(shù)。如此,(n-H)/L的下取整計(jì)算出的就是這個(gè)幀占據(jù)的完整簇的個(gè)數(shù)。
其實(shí),我們還看到,有其它的組合滿足這種依靠幀長值的判斷法,例如將點(diǎn)2看做碎片點(diǎn),和點(diǎn)4銜接起來,忽略中間的簇,也能滿足幀的長度。這意味著有多組合滿足利用幀長度判斷的條件。
圖4中,N=3,n=12,H=2,L=8,按公式1計(jì)算間隙大小Gap=2,即兩個(gè)碎片之間的間隙是兩個(gè)簇。按公式2計(jì)算出有2種可能的組合,即點(diǎn)1銜接點(diǎn)3,點(diǎn)2銜接點(diǎn)4。
評估哪種組合的正確性更高,可以用字節(jié)密度、字節(jié)強(qiáng)度、特定字節(jié)頻率等排除法來做。
4.2.2 驗(yàn)證下一個(gè)碎片起始幀的正確性
尋找到的下一個(gè)碎片起始幀是否正確,還要通過音視頻幀交替結(jié)構(gòu)特征驗(yàn)證。根據(jù)第一個(gè)碎片中提取到的幀排列規(guī)律特征,推測下一個(gè)碎片的起始幀應(yīng)該是視頻幀、音頻幀或是LIST子塊。偵測到的下一個(gè)碎片起始幀應(yīng)與規(guī)律特征吻合。
最近優(yōu)先匹配是,將下一個(gè)碎片起始幀向前回查,如果和前面緊挨著的簇也是匹配的,那么這個(gè)幀應(yīng)該是屬于距離最近的文件。例如,有兩個(gè)AVI文件A和B,偵測到了碎片C同時(shí)與A和B匹配,但與B是緊挨著的,那么C會(huì)優(yōu)先分配給B。
最終的驗(yàn)證方法就是整個(gè)文件的大小。所有碎片加起來應(yīng)該正好等于文件的大小,如果不吻合,那么意味著有碎片出錯(cuò)了,需要重新組合其它的碎片。
2011年6月某小區(qū)發(fā)生了一起惡意毀車案件,監(jiān)視器錄制下的視頻被人刪除。用傳統(tǒng)的數(shù)據(jù)恢復(fù)工具進(jìn)行恢復(fù),發(fā)現(xiàn)部分視頻是破損的。經(jīng)過推斷,凌晨4點(diǎn)30分到4點(diǎn)45分的視頻記錄了案件發(fā)生過程,但大約15分鐘的視頻全部丟失。
使用Winhex工具恢復(fù)顯示,4點(diǎn)30分至4點(diǎn)45分時(shí)間段的視頻為0字節(jié),完全無法播放。使用R-studio 6.0版本可以恢復(fù)4點(diǎn)30到4點(diǎn)35分04秒的視頻,后續(xù)中斷,無法播放。最后的畫面如圖5所示:
圖5 視頻損壞后的最后畫面
圖6 4點(diǎn)30至4點(diǎn)45監(jiān)控視頻文件頭信息
按照本文上述的文件雕復(fù)思想,首先按結(jié)構(gòu)特征定位文件頭所在簇。這個(gè)鏡像之中存在大量的監(jiān)視器錄制視頻,不依賴系統(tǒng)元信息很難直接定位4點(diǎn)30分的視頻,所幸工具R-studio 6.0版本可以恢復(fù)部分視頻,從這里可以提取目標(biāo)視頻的結(jié)構(gòu)特征,在鏡像中檢索后就準(zhǔn)確定位了目標(biāo)視頻的文件頭所在簇為8241737號(hào)簇,文件大小“29 E1 B1 05”,倒過來變十六進(jìn)制數(shù)值“05B1E129”,轉(zhuǎn)成十進(jìn)制即95543593個(gè)字節(jié)。文件頭信息如圖6所示。
主數(shù)據(jù)區(qū)列表movi中的幀的排列結(jié)構(gòu)特征是,只有視頻幀00dc,一個(gè)緊挨一個(gè),無音頻幀。即監(jiān)視器錄像不錄制聲音。字節(jié)排列緊密,這是由于是壓縮的視頻幀,所以極少有“00”樣式的字節(jié),那么如果檢測到數(shù)據(jù)稀疏的簇,那么基本可以認(rèn)為是非AVI文件,可以排除掉。當(dāng)然,也不應(yīng)該出現(xiàn)大量的數(shù)字或其它文件的特定符號(hào),這些都可以視為排除的依據(jù)。
自動(dòng)雕復(fù)過程1:識(shí)別00dc,讀取該幀理論長度,跨越該長度后,如果沒有尋找到下一個(gè)幀,視為出現(xiàn)碎片,記錄碎片點(diǎn)幀的位置。過程2:按照過程1得到的信息,偵測下一個(gè)碎片起始幀的位置,然后依據(jù)幀交替結(jié)構(gòu)特征和最近優(yōu)先匹配判斷下一個(gè)碎片起始幀的正確與否。最后依靠Winhex工具拼接。
為了減少程序運(yùn)行時(shí)間,本案例的碎片偵測過程并非對整個(gè)鏡像,而是根據(jù)實(shí)際情況判斷,在最有可能找到碎片的鏡像局部進(jìn)行偵測。
在本案例中,人工干預(yù)比較多,使用了Winhex和R-studio6.0,原因在于對AVI文件的文件雕復(fù)研究尚在初期,而且制作全自動(dòng)雕復(fù)工具比較復(fù)雜。
文件雕復(fù)后的完整視頻看到了嫌疑人的動(dòng)作如圖7所示:
圖7 文件雕復(fù)后的完整視頻中發(fā)現(xiàn)了嫌疑人
本次案例依據(jù)AVI文件的結(jié)構(gòu)特征進(jìn)行了文件雕復(fù)。工具、制作輔助程序和手工相結(jié)合,完成了文件雕復(fù)。尚未有專門針對AVI文件的全自動(dòng)雕復(fù)工具,一些具有雕復(fù)功能的工具,如RecoverMyFiles、X-ways Forensics等,也并不能保證每次都能雕復(fù)成功。
文件雕復(fù)技術(shù)雖力求自動(dòng)化,但目前文件類型種類繁多,現(xiàn)有文件雕復(fù)工具不可能完成對所有文件的雕復(fù)工作,所以雕復(fù)工具往往具有針對性,只針對一種或幾種文件類型進(jìn)行雕復(fù)。更多情況下,需要取證人員有大量經(jīng)驗(yàn),工具和手工相配合,有時(shí)需要專門寫一些程序來輔助文件雕復(fù)。AVI文件是一種廣泛使用的視頻文件,對其進(jìn)行研究,具有實(shí)際意義,有助于國內(nèi)文件雕復(fù)和電子取證技術(shù)的發(fā)展。
[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文件結(jié)構(gòu)的實(shí)例分析[J].企業(yè)技術(shù)開發(fā),2008,27(3):3-6.