固態(tài)硬盤Trim后的數(shù)據(jù)恢復
數(shù)據(jù)恢復技術是取證環(huán)節(jié)中是不可或缺的,或者說非常重要的一項手段。取證人員往往能從嫌疑人已刪除的數(shù)據(jù)中發(fā)現(xiàn)一些重要線索,甚至可以影響案件的偵破方向。那么對于傳統(tǒng)的機械硬盤而言,一般情況下在不對硬盤進行二次破壞或者數(shù)據(jù)覆蓋的情況下,大多數(shù)情況下是可以幾乎完整的恢復出刪除的數(shù)據(jù)。
比如NTFS文件系統(tǒng)下刪除某個文件后,對應文件的MFT項只是更改了表示文件狀態(tài)的字節(jié)。比如由01改為00表示文件被刪除,那么文件的數(shù)據(jù)區(qū)并未發(fā)生變化;再比如FAT32文件系統(tǒng)下文件被刪除后對應FDT首字節(jié)被E5標記,但數(shù)據(jù)區(qū)域同樣不會有任何變化。
那么固態(tài)硬盤無論其讀寫速度、硬盤體積以及工作條件都要優(yōu)于機械硬盤,而且目前的價格還有硬盤容量都被我們普通用戶所能接受。所以在我們當下乃至未來的取證工作中,固態(tài)硬盤都將是數(shù)據(jù)存儲的主要存儲介質。但是在取證工作一個很棘手的問題,那就是固態(tài)硬盤的數(shù)據(jù)恢復幾乎是不可能實現(xiàn)的。即便掌握了文件系統(tǒng)級的數(shù)據(jù)恢復技術,非常了解NTFS文件系統(tǒng)、非常了解FAT32文件系統(tǒng)了,甚至都可以通過手工的方式在底層進行數(shù)據(jù)提取。但是面對固態(tài)硬盤的刪除恢復同樣沒有辦法。所以,我們一般都認為固態(tài)硬盤數(shù)據(jù)刪除相當于底層數(shù)據(jù)清零,絕無數(shù)據(jù)恢復的可能。
當然說得并不嚴謹,應該說開啟了Trim后的固態(tài)硬盤,數(shù)據(jù)恢復幾乎不可能實現(xiàn)。既然開啟了Trim就不能做數(shù)據(jù)恢復了,那如果關閉Trim再繼續(xù)使用硬盤是不是就不用擔心數(shù)據(jù)恢復的問題呢?答案是肯定的,但是對于固態(tài)硬盤而言為了增加硬盤的使用壽命,建議還是開啟Trim機制。
什么是Trim機制
·TRIM 是一個專門為SSD設計的指令。當在操作系統(tǒng)下刪除某個文件后會發(fā)送Trim指令給SSD,使其數(shù)據(jù)無效,在做垃圾回收的時無需做數(shù)據(jù)搬運。
·最直觀可見的現(xiàn)象是,刪除的文件無法通過常規(guī)的手段恢復。
·有益于延長Flash的損耗,以達到增加SSD使用壽命的目的。
那么對于取證工作而言呢,最直觀的表現(xiàn)就是,想要恢復固態(tài)硬盤中丟失的數(shù)據(jù)往往是無法實現(xiàn)的。經過掃描發(fā)現(xiàn)文件的文件名,時間戳等信息都在,但是跳轉到數(shù)據(jù)區(qū)后發(fā)現(xiàn)全是零,或者甚至連文件名都掃描不出來。
雖然Trim給我們帶來了很多的困擾和阻礙,但數(shù)據(jù)安全存儲安全才是硬盤最該考慮的問題。為了延長硬盤的壽命所以Trim機制就沒發(fā)明出來了。
Trim數(shù)據(jù)恢復技術的適用范圍
那么是不是所有的固體硬盤經過Trim后之后都可以做數(shù)據(jù)恢復呢?理論上來說,是這樣的。但是從實際操作角度而言,并非所有都支持。目前可按照硬盤的主控芯片作為判定標準的。我們都知道無論是傳統(tǒng)的機械硬盤還是固態(tài)硬盤,都需要有主控芯片,主控芯片相當于我們計算機的CPU,硬盤的一切工作和任務都需要主控芯片下達指令。
(SSD結構)
SSD主控是一個技術深度和市場廣度都很大的芯片產品,SSD發(fā)展初期主控芯片廠商較少,原因是涉及和生產一款新的芯片的要求和門檻較高。如今由于SSD的蓬勃發(fā)展和普及,配套的主控廠商看到了發(fā)展的前景和利潤,紛紛切入這個產品,圖中幾款常見的硬盤主控。
(常見SSD主控品牌)
·Marrvell是全球排名第一的HDD和SSD主控芯片供應商,從2007年開始在SSD主控領域布局,2008年推出第一代SATA SSD產品。Marrvel憑借著HDD領域二十多年的經驗積累,其主控技術均領先于一般供應商。
·三星的主控基本上都是三星自己的SSD在使用,三星硬盤的品質也得到了市場和消費者的驗證,確實十分優(yōu)秀這都要得益于三星自家的主控算法。
·當然還有一些大廠都擁有自己的主控產品,比如東芝、因特爾等。
同樣國產主控在中低端市場的占比也是非常可觀的,常見的臺系主控有慧榮、群聯(lián),當然還有智微、硅格等等。
慧榮可以說是全球閃存控制芯片的技術領導者和先驅者,從2000年開始就提供flash存儲的解決方案;群聯(lián)也是2000年成立,從提供全球首顆單芯片U盤控制芯片起家。目前這兩家國產芯片在中低端SSD中市場占比量是非常大的,我們取證和恢復過程中,ATA協(xié)議的 SSD大多采用這兩種主控。
那么對于采用慧榮和群聯(lián)主控方案的固態(tài)硬盤Trim后是可以恢復或者說最容易恢復。那么對于其他品牌的主控或者其他品牌的硬盤理論上來說也是支持數(shù)據(jù)恢復的,只是操作起來十分困難。需要借助更為專業(yè)的工具,比如ACE的PC3000 Flash或者FE等工具。嘗試將flash存儲顆粒取下來,然后進行讀取以及重組工作。但比如因特爾的一些主控,寫入數(shù)據(jù)都是加密的,或者有些主控我們不清楚數(shù)據(jù)是如何存儲的,所以即便直接通過讀取flash顆粒將數(shù)據(jù)讀出來,但也無法進行重組。所以說恢復難度比較大。
圖中所展示的是目前所能支持的主控型號,比如慧榮的SM2258XT、2246、2259等;以及群聯(lián)的PS3111/3110等。如果在取證工作中遇到采用這種主控方案的固態(tài)硬盤,那么這塊硬盤即便經過了Trim,但刪除和丟失的數(shù)據(jù)也是有幾率可以恢復的。
(支持的主控)
Trim機制的支持情況什么情況下會默認開啟Trim,或者說哪些情況下Trim會被開啟呢?有三個條件:
·第一,操作系統(tǒng)需要支持,對于Windows系統(tǒng)而言,Win7及以上版本的操作系統(tǒng)都可以支持Trim;
·第二,就是硬盤的主控需要支持Trim,在早期生產的固態(tài)硬盤,其主控有不支持Trim的情況。但目前我們能遇到的幾乎所有硬盤都支持Trim;
·第三,文件系統(tǒng),Windows系統(tǒng)下NTFS是可以支持Trim的,而比如exfat是不支持的。
(支持情況)
判斷操作系統(tǒng)是否開啟Trim·Windows系統(tǒng)
可以通過命令來查詢當前Trim的開啟狀態(tài),當返回值為0時表示當前系統(tǒng)已開啟了Trim支持,而如果返回是1的話則表示未啟用Trim機制。也可以使用指令來控制Trim機制的開啟與關閉。
指令:fsutil behavior query disabledeletenotify
(Trim狀態(tài)查詢)
禁用Trim:fsutil behavior set disabledeletenotify 1
·macOS
同樣在macOS下可以點擊,關于本機-概覽-系統(tǒng)報告-NVMExpress這里查看Trim的狀態(tài),同樣可以利用相應的指令來開啟或關閉Trim。
(macOS下查看Trim狀態(tài))
Trim后的數(shù)據(jù)恢復原理
首先要清楚固態(tài)硬盤和機械硬盤是不同的,在《硬盤初檢在取證工作中的意義》中介紹了機械硬盤的相關知識。其中有提到,機械硬盤寫入數(shù)據(jù)其實就是磁頭磁化盤片的過程,比如原來扇區(qū)中是0想要寫入1,那么就改變磁極方向從新寫入1就可以了;同理原來扇區(qū)里面是1想寫0,那就直接寫0就可以了。這是機械硬盤的數(shù)據(jù)寫入。也就是機械硬盤寫入數(shù)據(jù),不必考慮原本扇區(qū)內是否有數(shù)據(jù),以及其中的數(shù)據(jù)是什么直接覆蓋寫入就可以。但SSD不行,固態(tài)硬盤并不支持數(shù)據(jù)覆蓋寫入。
(機械硬盤數(shù)據(jù)寫入)
圖中所示,固態(tài)硬盤底層沒有扇區(qū)磁道的概念,而是一個浮動柵(一個cell),為了理解就暫且稱之為一個扇區(qū)。
左側圖示,是寫入數(shù)據(jù)的過程,可以看到當在控制柵極通電,則電子會從下面襯底穿過隧穿層進入到浮動柵;再看右側擦除過程也就是放電,在下面襯底加電使原本在浮動柵中的電子流出來。
(固態(tài)讀寫數(shù)據(jù)原理)
所以通過這張圖可知,固態(tài)硬盤是通過浮動柵里面有無電子來表示0和1的。所以這就是為什么固態(tài)硬盤是不支持數(shù)據(jù)覆蓋寫入,是因為它是靠改變其中有沒有電子或者說一個浮動柵帶正負電來表示數(shù)據(jù)狀態(tài)的。
所以固態(tài)硬盤里有個概念,叫寫之前擦除(erase before overwrite)。想要寫入數(shù)據(jù)就要先將浮動柵進行放電,也就是所謂的擦除使其中沒有電子,也就是浮動柵帶正電;然后如果想要寫0進去的話,就讓電子進入浮動柵使其帶負電。
那么在進行擦除時,硬盤不會單獨去操作一個浮動柵的,是以block為單位進行放電的,一個block由多個cell組成。那么可以思考一下,如果說對整個block放電,那其中的數(shù)據(jù)不是就沒了嗎?那肯定不行的!這就要涉及GC垃圾回收的知識了。
文件的寫入與刪除
圖中左側假如想要向硬盤中寫入ABC這三個文件,那么其實對于操作系統(tǒng)而言呢,或者說對于文件系統(tǒng)而言,這些不過是一個個的數(shù)據(jù)塊,將文件分成若干個塊之后被硬盤也是以數(shù)據(jù)塊的形式存儲在底層。
(文件的寫入與刪除)
那么假設此時將C文件進行刪除,那么對應操作系統(tǒng)也會在文件系統(tǒng)層進行數(shù)據(jù)塊的定位,然后進行標記刪除,同樣硬盤底層也會做同樣的操作。
對于機械硬盤而言,我們知道只是在文件系統(tǒng)層做了相應的刪除標記,而文件的數(shù)據(jù)區(qū)未發(fā)生任何改變;而對于固態(tài)硬盤,此時操作系統(tǒng)則會向硬盤發(fā)送Trim指令,告訴硬盤這些數(shù)據(jù)塊是無效的,是垃圾數(shù)據(jù)。待空閑時將垃圾進行回收。為什么做垃圾回收呢?前面說過,SSD寫入前必須要擦除block,垃圾回收的過程就是在閑時將無效的block進行放電擦除以備下次寫入時使用。
(文件被刪除)
此時如果再次寫入一個新的文件D,那么硬盤底層是如何處理的,首先是當硬盤沒有開啟Trim機制。
如果沒有開啟Trim,操作系統(tǒng)層刪除了文件,文件系統(tǒng)層只是做了標記。但SSD并不會認為這些塊是垃圾,所以只會在垃圾數(shù)據(jù)其后繼續(xù)寫數(shù)據(jù),同樣在做數(shù)據(jù)搬運時,還會搬運這些已刪除的垃圾數(shù)據(jù),這無形中就增加了大量的工作量。
(未開啟Trim時寫入數(shù)據(jù))
接下來是當硬盤開啟了Trim,同樣是寫入文件D的過程,圖中白色表示free塊,空白塊,操作系統(tǒng)層刪除文件之后發(fā)送Trim告知SSD,所以此時SSD就知道這些塊是垃圾,那么就不做數(shù)據(jù)搬運了,然后把這些塊視為垃圾進行塊回收其實數(shù)據(jù)搬運是GC垃圾回收環(huán)節(jié)的一項非常重要的操作。
(開啟Trim時寫入數(shù)據(jù))
什么是垃圾回收(GC)
·GC(Garbage Collection,垃圾回收)的縮寫,是固態(tài)硬盤(SSD)的一項內部存儲機制,其設計目的是為了增加SSD的性能和使用壽命。
·垃圾回收的目的是回收空閑數(shù)據(jù)塊,以便在SSD需要寫入數(shù)據(jù)時直接寫入空閑塊中,確保硬盤可以高效運行并保持良好性能。
另一個前面一直提到的概念就是數(shù)據(jù)搬運,接下來來通過幾張圖了解一下,什么是數(shù)據(jù)搬運?為什么要數(shù)據(jù)搬運?其目的是什么?
數(shù)據(jù)搬運是為了垃圾回收可以順利進行,圖中block1和2是兩個數(shù)據(jù)塊,其中D1-D10表示有效數(shù)據(jù),其他灰色表示無效數(shù)據(jù)。當硬盤沒有開啟Trim時,由于操作系統(tǒng)沒有發(fā)送Trim指令給SSD,所以SSD并不知道哪些數(shù)據(jù)是無效的,那么在做GC數(shù)據(jù)搬運時,就默認所有的塊都是有效數(shù)據(jù),都要做數(shù)據(jù)搬運。
(未開啟Trim時的GC)
搬運完畢后,就可以將block1和2進行放電擦除,使其變?yōu)榭瞻讐K。
(放電擦除后的block)
接下來還是剛才的搬運過程,假設當開啟了Trim后,操作系統(tǒng)會發(fā)送Trim指令給硬盤,并告知哪些數(shù)據(jù)被刪除了,哪些數(shù)據(jù)是無效的。那么SSD就會進行標記,并認定其無效化,那么在做數(shù)據(jù)搬運時,只需要將有效數(shù)據(jù)D1-D10搬運到新的位置即可,而那些被Trim標記的無效數(shù)據(jù)就不再進行搬運了。
(開啟Trim時的GC)
然后呢,還是將原block1和2進行擦除放電,以備接下來做數(shù)據(jù)寫入時使用。但是要清楚,做硬盤做GC以及擦除是在硬盤閑時自主完成的,并非Trim標記后立刻擦除放電的。
(放電擦除后的block)
到這里相信大家就清楚了為什么SSD必須要開啟Trim了,雖然說Trim的開啟會影響取證工作,但之所以SSD具有Trim機制,才可以保障數(shù)據(jù)的安全和硬盤的使用壽命。
最后總結一下:
首先因為SSD的設計是由一個個的浮動柵組成的,那么是沒有辦法像機械硬盤一樣直接通過覆蓋的方式寫入數(shù)據(jù),只能通過浮動柵的帶電狀態(tài)表示0和1。所以這也就導致SSD在寫入數(shù)據(jù)之前必須要先擦除放電block,叫寫之前擦除。而為了節(jié)省時間,SSD不可能每次都要等到每次寫數(shù)據(jù)的時候再擦除,而是在操作系統(tǒng)或者文件系統(tǒng)刪除數(shù)據(jù)時發(fā)送Trim指令給硬盤,硬盤收到指令后對無效數(shù)據(jù)進行標記。那么在對block進行擦除前,就要先把有效數(shù)據(jù)搬運走,而那些被Trim標記的無效數(shù)據(jù)就不做搬運了,直接放電擦除即可。
實 驗
首先是SSD經過Trim后,直接對其進行數(shù)據(jù)恢復,就是日常取證工作通常面對的一個情況。嘗試在底層嘗試尋找文件的MFT項。
(搜索)
可以看到在211093768扇區(qū)找到一個MFT項,這里可以看到文件名是“AXIOM痕跡...”,這個文件名上一條刪除線標識這個文件已經被刪除。
(被刪除的MFT)
接下來看這個文件的屬性,可以看到10、30、80屬性都是正常的,而偏移地址16-17,表示文件狀態(tài)的字節(jié)被清零了,比如正常沒刪除的這里可能是0100,刪除了就是0000。
(刪除標記)
然后根據(jù)80屬性的run list,壓縮字節(jié)32進行數(shù)據(jù)區(qū)的跳轉,可以看到這個文件跳轉之后的數(shù)據(jù)區(qū)全為00。
(run list)
(數(shù)據(jù)區(qū)全為00)
也就是說雖然這個文件的屬性頭、屬性體都正常,但偏移到數(shù)據(jù)區(qū)發(fā)現(xiàn)文件底層都是00。
再借助R-Studio比較直觀的看下文件的狀態(tài),文件名前面紅色xx表示文件被刪除,查看底層發(fā)現(xiàn)確實全為00。這就是日常取證工作中最常遇到的情況,對固態(tài)硬盤進行掃描,可能能掃描到文件MFT項,也就是能掃描到文件名之類的,但是恢復出來發(fā)現(xiàn)文件沒有內容,底層全是00。
(RTT掃描結果)
那么這是為什么呢?是因為當刪除某些數(shù)據(jù)后,操作系統(tǒng)會向硬盤發(fā)送Trim指令,而硬盤收到指令后會在硬盤底層對無效數(shù)據(jù)進行標記。
進行標記后,當再次試圖去訪問這些無效數(shù)據(jù)時,其實在硬盤主控層面就已經阻斷了與硬盤存儲之間的聯(lián)系。既然已經被標記了,那么主控就會認為這部分無效數(shù)據(jù)已經被GC了,所以根本就沒有去flash存儲顆粒層面的地址上去讀取數(shù)據(jù),而是在主控層面上直接給用戶返回00。這就是為什么我們恢復固態(tài)硬盤數(shù)據(jù),文件名正常,但恢復出的數(shù)據(jù)全是00的原因了,其實都是主控芯片的行為在控制的。
(返回00的根本原因)
再看用了大招后的實驗效果
圖中所示是一個文件的MFT項,同樣10、30、80屬性都是正常的,偏移地址16-17兩個字節(jié)為0000表示文件被刪除。
(刪除標記)
接下來通過80屬性的run list以及通過DBR獲取到的每簇扇區(qū)數(shù),也就可以跳轉到文件的數(shù)據(jù)區(qū)。
(每簇扇區(qū)數(shù))
(run list)
進行跳轉后,這里應該就看到非常明顯的pdf標志頭,表明數(shù)據(jù)區(qū)是有數(shù)據(jù)的并且是有效數(shù)據(jù)。
(數(shù)據(jù)區(qū)有效數(shù)據(jù))
放到rtt中看的比較直觀。文件名前面紅色xx表示文件被刪除了,查看文件底層發(fā)現(xiàn)數(shù)據(jù)是正常的。
(rtt中查看文件狀態(tài))
總結一下,也就是說當硬盤經過了Trim后,通過常規(guī)鏡像方式進行數(shù)據(jù)恢復發(fā)現(xiàn)數(shù)據(jù)恢復幾乎是不可能的。而通過特殊的方式是完全有可能恢復出那些丟失的數(shù)據(jù)的。
恢 復 步 驟
我們需要對硬盤進行短接,短接的目的呢,是為了讓硬盤進入到ROM安全模式,這里需要注意的是,需要先短接再對硬盤進行通電,硬盤呢可以直接通過數(shù)據(jù)線接口與主板連接或者通過USB轉接板都可以。
那么短接點也是十分容易識別的,大部分硬盤都會打印在電路板上會寫著ROMxx字樣;另外兩個短接點,一個是圓的一個是方的,大多數(shù)是這樣。
(短接進入ROM安全模式)
在成功進入到安全模式后,可以轉到操作系統(tǒng)下的磁盤管理界面,可以看到最下面 1G未初始化狀態(tài)的磁盤,這就表示成功進入了安全模式,可以進一步接下來的操作了。
(成功進入安全模式)
然后運行軟件,此時軟件會提示ROM Code Mode Device,然后根據(jù)Flash iD信息選擇合適的固件再接下來。
(運行軟件識別到硬盤)
點擊右側Datarecovery按鈕后,會提示我們首先要加載MPISP,然后再加載ROMDebug。
(加載固件)
成功加載之后軟件會自動的回讀硬盤鏡像。最后可以直接對回讀的鏡像進行常規(guī)的數(shù)據(jù)恢復就可以對固態(tài)硬盤中丟失的數(shù)據(jù)嘗試進行數(shù)據(jù)恢復了。
(鏡像回讀)
那么是什么原理可以進行的鏡像回讀呢?前文提到之所以硬盤反饋回來的是00,是主控芯片的行為,它認為這部分數(shù)據(jù)已經被Trim標記了也就自然會被GC,而實際中GC是閑時才會進行的,并不是Trim后立刻執(zhí)行的,所以真實的情況是數(shù)據(jù)有可能沒有被立刻垃圾回收。
那么通過短接的方式讓硬盤進入ROM安全模式,就好比計算機啟動到BIOS。ROM安全模式下只有主控的淹膜ROM工作,讓其發(fā)送鏡像回讀指令便可在安全模式下直接訪問flash顆粒,此時便可回讀出完整的dump物理鏡像。最后再對dump鏡像進行重組和分析便可成功恢復出Trim之后丟失的那部分數(shù)據(jù)了。
下一篇:大華T70移動固態(tài)硬盤,手機電腦都兼容