江山
摘要:針對(duì)數(shù)據(jù)擾亂技術(shù)影響固態(tài)盤閃存數(shù)據(jù)恢復(fù)率的問題,該文提出一種能有效恢復(fù)擾亂閃存數(shù)據(jù)、提高固態(tài)盤數(shù)據(jù)恢復(fù)率的方法。實(shí)驗(yàn)表明,該方法既能在不拆除閃存硬件的前提下獲取到固態(tài)盤閃存的所有數(shù)據(jù),為固態(tài)盤數(shù)據(jù)分析提供了完整的數(shù)據(jù)源,又能生成無擾亂的閃存物理鏡像,使取證數(shù)據(jù)的數(shù)據(jù)恢復(fù)率達(dá)到75%以上。
關(guān)鍵詞:固態(tài)盤;NAND閃存;數(shù)據(jù)擾亂;數(shù)據(jù)恢復(fù)
1概述
固態(tài)盤(SSD)是一種基于閃存陣列的硬盤,固態(tài)盤大容量、高密度的數(shù)據(jù)存儲(chǔ)需求促使硬件廠商采用位密度更小的MLC型閃存作為固態(tài)盤的基本存儲(chǔ)單元,固態(tài)盤閃存存儲(chǔ)密度的增加加重了相鄰閃存單元之間的電壓干擾,造成閃存數(shù)據(jù)錯(cuò)誤率的增大。ECC校驗(yàn)算法雖然能對(duì)錯(cuò)誤數(shù)據(jù)進(jìn)行檢測(cè)和校驗(yàn),但其可校驗(yàn)的數(shù)據(jù)位個(gè)數(shù)是有限的。為了解決該問題,數(shù)據(jù)擾亂技術(shù)被提出并被應(yīng)用于固態(tài)盤主控中。然而,閃存數(shù)據(jù)擾亂技術(shù)的存在破壞了文件的標(biāo)志符特征,使得利用文件標(biāo)志符從物理鏡像中查找文件并重組時(shí)無法恢復(fù)出任何有效數(shù)據(jù),給通過文件鏡像方式進(jìn)行數(shù)據(jù)恢復(fù)帶來了極大的難度。
2閃存數(shù)據(jù)擾亂問題
為了解決因讀寫特殊位模式的數(shù)據(jù)而造成錯(cuò)誤率升高的問題,數(shù)據(jù)擾亂技術(shù)(data scrambling或data randomization)被提出并被應(yīng)用于MLC閃存的設(shè)備控制器中。該技術(shù)能夠在向物理閃存寫人數(shù)據(jù)之前通過隨機(jī)化手段打亂原有數(shù)據(jù)的位模式,減輕相鄰存儲(chǔ)單元之間的電壓干擾,進(jìn)而降低閃存讀寫數(shù)據(jù)的錯(cuò)誤率㈣。不同閃存設(shè)備其數(shù)據(jù)擾亂技術(shù)的具體實(shí)現(xiàn)不同。一般來說,數(shù)據(jù)擾亂模塊通常由初始擾亂種子寄存器、擾亂密鑰發(fā)生器和異或操作邏輯組成。
在針對(duì)閃存進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,由于其應(yīng)用了數(shù)據(jù)擾亂技術(shù),通常的技術(shù)手段無法恢復(fù)其原始數(shù)據(jù)或恢復(fù)出來的數(shù)據(jù)為無意義的擾亂數(shù)據(jù),解決該問題的關(guān)鍵是需要還原物理鏡像中的隨機(jī)化數(shù)據(jù)。本節(jié)從數(shù)據(jù)擾亂技術(shù)的原理出發(fā),設(shè)計(jì)并實(shí)現(xiàn)了一種擾亂恢復(fù)方法。通過對(duì)閃存數(shù)據(jù)的擾亂恢復(fù)生成還原后的閃存物理鏡像,從而保證用戶原始數(shù)據(jù)的順利讀取。
3擾亂恢復(fù)算法
3.1擾亂恢復(fù)方法的理論分析
根據(jù)數(shù)據(jù)擾亂技術(shù)的基本理論可知,擾亂算法主要分兩步:一步是在寫閃存數(shù)據(jù)之前通過異或操作打亂原有數(shù)據(jù)的位模式,另一步是在讀閃存數(shù)據(jù)之后再次執(zhí)行異或操作從而對(duì)打亂的數(shù)據(jù)進(jìn)行恢復(fù)。前者被稱之為擾亂,后者被稱之為擾亂恢復(fù)。圖1顯示的是數(shù)據(jù)擾亂技術(shù)應(yīng)用于某個(gè)固態(tài)盤后盤內(nèi)數(shù)據(jù)的流向和變化,其中虛線箭頭代表寫操作的數(shù)據(jù)流,實(shí)線箭頭代表讀操作的數(shù)據(jù)流。如圖所示,原有數(shù)據(jù)在經(jīng)過數(shù)據(jù)擾亂器與擾亂密鑰執(zhí)行位異或操作后變?yōu)楸粩_亂數(shù)據(jù),擾亂數(shù)據(jù)再次經(jīng)過擾亂器與擾亂密鑰進(jìn)行異或后實(shí)現(xiàn)擾亂恢復(fù)。根據(jù)位異或操作的特性可知,要得到與原有數(shù)據(jù)相同的恢復(fù)結(jié)果,參與擾亂恢復(fù)過程的擾亂密鑰必須等于對(duì)應(yīng)擾亂過程的擾亂密鑰。
基于上述擾亂恢復(fù)過程的理論分析,恢復(fù)擾亂數(shù)據(jù)的方法實(shí)現(xiàn)可能存在兩種途徑:一種是徹底弄清固態(tài)盤主控中數(shù)據(jù)擾亂引擎的具體工作過程,包括知道初始擾亂種子的準(zhǔn)確值、知道生成擾亂密鑰的地址是物理地址還是邏輯地址,知道擾亂密鑰的生成算法以及地址映射表內(nèi)容等信息。在此基礎(chǔ)上用軟件實(shí)現(xiàn)數(shù)據(jù)擾亂引擎的硬件功能,進(jìn)而對(duì)獲取到的閃存物理鏡像進(jìn)行擾亂恢復(fù)。另一種則不需要了解這些具體的實(shí)現(xiàn)細(xì)節(jié),直接利用固態(tài)盤主控開啟數(shù)據(jù)擾亂引擎的恢復(fù)擾亂功能,通過固態(tài)盤的Boot Loader代碼加載讀取底層閃存數(shù)據(jù)的軟件,利用數(shù)據(jù)擾亂引擎的恢復(fù)擾亂功能還原被擾亂的閃存數(shù)據(jù),從而生成未擾亂的物理鏡像。
對(duì)比這兩種實(shí)現(xiàn)方法,第二種方法相對(duì)容易實(shí)現(xiàn),只需識(shí)別出初始的擾亂種子值、確定出種子值存入的寄存器地址以及如何利用固態(tài)盤主控開啟數(shù)據(jù)擾亂引擎的擾亂恢復(fù)功能。本文主要介紹第二種數(shù)據(jù)擾亂恢復(fù)方法的實(shí)現(xiàn)。為了使研究結(jié)果具有普遍性,本文選擇采用主流主控——Barefoot的固態(tài)盤作為取證研究對(duì)象。該主控支持像三星、現(xiàn)代、東芝、美光等主流廠商的多種閃存芯片,廣泛應(yīng)用于固態(tài)硬盤的設(shè)計(jì)中。
3.2擾亂恢復(fù)算法實(shí)現(xiàn)
由OpenSSD項(xiàng)目提供的技術(shù)參考手冊(cè)可知Barefoot主控是通過設(shè)置位標(biāo)志寄存器FCP_OPTION的標(biāo)志位FO_SCRAM-BLE來實(shí)現(xiàn)數(shù)據(jù)擾亂引擎開啟的,同時(shí)如果該標(biāo)志位在讀請(qǐng)求的響應(yīng)過程中有效,則數(shù)據(jù)擾亂引擎執(zhí)行的就是恢復(fù)擾亂功能。結(jié)合上一小節(jié)識(shí)別的初始擾亂種子值和擾亂種子寄存器,即可實(shí)現(xiàn)固態(tài)盤閃存數(shù)據(jù)的恢復(fù)擾亂算法并由此生成未擾亂的閃存物理鏡像。
其中setScrambleKey(涵數(shù)的功能是將識(shí)別的擾亂種子存人目標(biāo)寄存器,這里scramble_seedlil是一個(gè)長(zhǎng)度為8的一維數(shù)組,數(shù)組元素是32比特的無符號(hào)整數(shù),用來暫存已被識(shí)別的擾亂種子值;SCRAMSEED_BASE代表目標(biāo)寄存器的起始地址;send_to_dev()函數(shù)代表將初始種子值寫入固態(tài)盤寄存器硬件。Descrambling()函數(shù)是實(shí)現(xiàn)恢復(fù)擾亂算法的主要函數(shù),功能是在讀閃存數(shù)據(jù)后對(duì)其進(jìn)行恢復(fù)擾亂并生成未擾亂的閃存物理鏡像;變量enableScramble是數(shù)據(jù)擾亂引擎的開啟開關(guān),它的不同取值決定標(biāo)志位FO_SCRAMBLE是否有效。ReadPage()是能夠?qū)崿F(xiàn)恢復(fù)擾亂的讀閃存頁函數(shù),WriteFile()函數(shù)實(shí)現(xiàn)閃存物理鏡像的生成。
4實(shí)驗(yàn)驗(yàn)證
為了驗(yàn)證上述擾亂恢復(fù)算法的有效性,選定3個(gè)不同型號(hào)的6個(gè)固態(tài)盤(主控都是Barefoot)作為實(shí)驗(yàn)對(duì)象。其中同一型號(hào)的固態(tài)盤有2個(gè),硬件參數(shù)兩兩相同。比如型號(hào)是CrucialM225的目標(biāo)固態(tài)盤共2個(gè),分成2組,一個(gè)用于Windows XP系統(tǒng),另一個(gè)用于Windows 7系統(tǒng)。每個(gè)測(cè)試盤在Windows XP或Windows 7系統(tǒng)下被格式化為NTFS文件系統(tǒng),分別存人兩個(gè)大小是650KB的小文件和一個(gè)容量等于800MB的大文件。然后刪除其中的大文件和一個(gè)小文件。準(zhǔn)備好后,將測(cè)試盤連接到PC機(jī)上,分別計(jì)算系統(tǒng)元文件、未刪除文件和已刪除文件中提取到的文件頁占對(duì)應(yīng)文件頁總數(shù)的比值。
實(shí)驗(yàn)結(jié)果如表1所示,其中A鏡像代表由擾亂數(shù)據(jù)組成的鏡像,B鏡像代表恢復(fù)擾亂數(shù)據(jù)生成的鏡像。表中數(shù)據(jù)顯示對(duì)于擾亂數(shù)據(jù)鏡像(A鏡像)而言,不論是文件系統(tǒng)元文件還是用戶自定義文件(包括已刪除和未刪除的)沒有一個(gè)數(shù)據(jù)頁被恢復(fù)出來;而對(duì)于擾亂恢復(fù)數(shù)據(jù)鏡像(B鏡像)而言,系統(tǒng)元文件和用戶自定義文件中的未刪除文件100%被恢復(fù)出來,該結(jié)果確認(rèn)了主控為Barefoot的固態(tài)盤采用數(shù)據(jù)擾亂技術(shù)的事實(shí)并且驗(yàn)證了本文提出的擾亂恢復(fù)算法的正確性。
5結(jié)論
本文重點(diǎn)研究了數(shù)據(jù)擾亂技術(shù)對(duì)固態(tài)盤閃存數(shù)據(jù)恢復(fù)率的影響。為了解決該問題,本文提出一種通過恢復(fù)擾亂閃存數(shù)據(jù)提高固態(tài)盤數(shù)據(jù)恢復(fù)率的方法。該方法不依賴于數(shù)據(jù)擾亂引擎的實(shí)現(xiàn)細(xì)節(jié),而是通過反匯編固態(tài)盤的固件鏡像分析出初始擾亂種子值,改寫開源固件代碼實(shí)現(xiàn)初始擾亂種子的載人以及數(shù)據(jù)擾亂引擎硬件的開啟,利用數(shù)據(jù)擾亂引擎實(shí)現(xiàn)閃存數(shù)據(jù)的恢復(fù)擾亂,從而生成正常的固態(tài)盤閃存物理鏡像。實(shí)驗(yàn)測(cè)試表明,該恢復(fù)擾亂方法能正確還原固態(tài)盤的閃存數(shù)據(jù),使被刪除數(shù)據(jù)的數(shù)據(jù)恢復(fù)率提高到75%以上。endprint