固态硬盘Trim后的数据恢复
数据恢复技术是取证环节中是不可或缺的,或者说非常重要的一项手段。取证人员往往能从嫌疑人已删除的数据中发现一些重要线索,甚至可以影响案件的侦破方向。那么对于传统的机械硬盘而言,一般情况下在不对硬盘进行二次破坏或者数据覆盖的情况下,大多数情况下是可以几乎完整的恢复出删除的数据。
比如NTFS文件系统下删除某个文件后,对应文件的MFT项只是更改了表示文件状态的字节。比如由01改为00表示文件被删除,那么文件的数据区并未发生变化;再比如FAT32文件系统下文件被删除后对应FDT首字节被E5标记,但数据区域同样不会有任何变化。
那么固态硬盘无论其读写速度、硬盘体积以及工作条件都要优于机械硬盘,而且目前的价格还有硬盘容量都被我们普通用户所能接受。所以在我们当下乃至未来的取证工作中,固态硬盘都将是数据存储的主要存储介质。但是在取证工作一个很棘手的问题,那就是固态硬盘的数据恢复几乎是不可能实现的。即便掌握了文件系统级的数据恢复技术,非常了解NTFS文件系统、非常了解FAT32文件系统了,甚至都可以通过手工的方式在底层进行数据提取。但是面对固态硬盘的删除恢复同样没有办法。所以,我们一般都认为固态硬盘数据删除相当于底层数据清零,绝无数据恢复的可能。
当然说得并不严谨,应该说开启了Trim后的固态硬盘,数据恢复几乎不可能实现。既然开启了Trim就不能做数据恢复了,那如果关闭Trim再继续使用硬盘是不是就不用担心数据恢复的问题呢?答案是肯定的,但是对于固态硬盘而言为了增加硬盘的使用寿命,建议还是开启Trim机制。
什么是Trim机制
·TRIM 是一个专门为SSD设计的指令。当在操作系统下删除某个文件后会发送Trim指令给SSD,使其数据无效,在做垃圾回收的时无需做数据搬运。
·最直观可见的现象是,删除的文件无法通过常规的手段恢复。
·有益于延长Flash的损耗,以达到增加SSD使用寿命的目的。
那么对于取证工作而言呢,最直观的表现就是,想要恢复固态硬盘中丢失的数据往往是无法实现的。经过扫描发现文件的文件名,时间戳等信息都在,但是跳转到数据区后发现全是零,或者甚至连文件名都扫描不出来。
虽然Trim给我们带来了很多的困扰和阻碍,但数据安全存储安全才是硬盘最该考虑的问题。为了延长硬盘的寿命所以Trim机制就没发明出来了。
Trim数据恢复技术的适用范围
那么是不是所有的固体硬盘经过Trim后之后都可以做数据恢复呢?理论上来说,是这样的。但是从实际操作角度而言,并非所有都支持。目前可按照硬盘的主控芯片作为判定标准的。我们都知道无论是传统的机械硬盘还是固态硬盘,都需要有主控芯片,主控芯片相当于我们计算机的CPU,硬盘的一切工作和任务都需要主控芯片下达指令。
SSD主控是一个技术深度和市场广度都很大的芯片产品,SSD发展初期主控芯片厂商较少,原因是涉及和生产一款新的芯片的要求和门槛较高。如今由于SSD的蓬勃发展和普及,配套的主控厂商看到了发展的前景和利润,纷纷切入这个产品,图中几款常见的硬盘主控。
·Marrvell是全球排名第一的HDD和SSD主控芯片供应商,从2007年开始在SSD主控领域布局,2008年推出第一代SATA SSD产品。Marrvel凭借着HDD领域二十多年的经验积累,其主控技术均领先于一般供应商。
·三星的主控基本上都是三星自己的SSD在使用,三星硬盘的品质也得到了市场和消费者的验证,确实十分优秀这都要得益于三星自家的主控算法。
·当然还有一些大厂都拥有自己的主控产品,比如东芝、因特尔等。
同样国产主控在中低端市场的占比也是非常可观的,常见的台系主控有慧荣、群联,当然还有智微、硅格等等。
慧荣可以说是全球闪存控制芯片的技术领导者和先驱者,从2000年开始就提供flash存储的解决方案;群联也是2000年成立,从提供全球首颗单芯片U盘控制芯片起家。目前这两家国产芯片在中低端SSD中市场占比量是非常大的,我们取证和恢复过程中,ATA协议的 SSD大多采用这两种主控。
那么对于采用慧荣和群联主控方案的固态硬盘Trim后是可以恢复或者说最容易恢复。那么对于其他品牌的主控或者其他品牌的硬盘理论上来说也是支持数据恢复的,只是操作起来十分困难。需要借助更为专业的工具,比如ACE的PC3000 Flash或者FE等工具。尝试将flash存储颗粒取下来,然后进行读取以及重组工作。但比如因特尔的一些主控,写入数据都是加密的,或者有些主控我们不清楚数据是如何存储的,所以即便直接通过读取flash颗粒将数据读出来,但也无法进行重组。所以说恢复难度比较大。
图中所展示的是目前所能支持的主控型号,比如慧荣的SM2258XT、2246、2259等;以及群联的PS3111/3110等。如果在取证工作中遇到采用这种主控方案的固态硬盘,那么这块硬盘即便经过了Trim,但删除和丢失的数据也是有几率可以恢复的。
Trim机制的支持情况
·第一,操作系统需要支持,对于Windows系统而言,Win7及以上版本的操作系统都可以支持Trim;
·第二,就是硬盘的主控需要支持Trim,在早期生产的固态硬盘,其主控有不支持Trim的情况。但目前我们能遇到的几乎所有硬盘都支持Trim;
·第三,文件系统,Windows系统下NTFS是可以支持Trim的,而比如exfat是不支持的。
判断操作系统是否开启Trim
可以通过命令来查询当前Trim的开启状态,当返回值为0时表示当前系统已开启了Trim支持,而如果返回是1的话则表示未启用Trim机制。也可以使用指令来控制Trim机制的开启与关闭。
指令:fsutil behavior query disabledeletenotify
禁用Trim:fsutil behavior set disabledeletenotify 1
同样在macOS下可以点击,关于本机-概览-系统报告-NVMExpress这里查看Trim的状态,同样可以利用相应的指令来开启或关闭Trim。
Trim后的数据恢复原理
首先要清楚固态硬盘和机械硬盘是不同的,在《硬盘初检在取证工作中的意义》中介绍了机械硬盘的相关知识。其中有提到,机械硬盘写入数据其实就是磁头磁化盘片的过程,比如原来扇区中是0想要写入1,那么就改变磁极方向从新写入1就可以了;同理原来扇区里面是1想写0,那就直接写0就可以了。这是机械硬盘的数据写入。也就是机械硬盘写入数据,不必考虑原本扇区内是否有数据,以及其中的数据是什么直接覆盖写入就可以。但SSD不行,固态硬盘并不支持数据覆盖写入。
图中所示,固态硬盘底层没有扇区磁道的概念,而是一个浮动栅(一个cell),为了理解就暂且称之为一个扇区。
左侧图示,是写入数据的过程,可以看到当在控制栅极通电,则电子会从下面衬底穿过隧穿层进入到浮动栅;再看右侧擦除过程也就是放电,在下面衬底加电使原本在浮动栅中的电子流出来。
所以通过这张图可知,固态硬盘是通过浮动栅里面有无电子来表示0和1的。所以这就是为什么固态硬盘是不支持数据覆盖写入,是因为它是靠改变其中有没有电子或者说一个浮动栅带正负电来表示数据状态的。
所以固态硬盘里有个概念,叫写之前擦除(erase before overwrite)。想要写入数据就要先将浮动栅进行放电,也就是所谓的擦除使其中没有电子,也就是浮动栅带正电;然后如果想要写0进去的话,就让电子进入浮动栅使其带负电。
那么在进行擦除时,硬盘不会单独去操作一个浮动栅的,是以block为单位进行放电的,一个block由多个cell组成。那么可以思考一下,如果说对整个block放电,那其中的数据不是就没了吗?那肯定不行的!这就要涉及GC垃圾回收的知识了。
文件的写入与删除
图中左侧假如想要向硬盘中写入ABC这三个文件,那么其实对于操作系统而言呢,或者说对于文件系统而言,这些不过是一个个的数据块,将文件分成若干个块之后被硬盘也是以数据块的形式存储在底层。
那么假设此时将C文件进行删除,那么对应操作系统也会在文件系统层进行数据块的定位,然后进行标记删除,同样硬盘底层也会做同样的操作。
对于机械硬盘而言,我们知道只是在文件系统层做了相应的删除标记,而文件的数据区未发生任何改变;而对于固态硬盘,此时操作系统则会向硬盘发送Trim指令,告诉硬盘这些数据块是无效的,是垃圾数据。待空闲时将垃圾进行回收。为什么做垃圾回收呢?前面说过,SSD写入前必须要擦除block,垃圾回收的过程就是在闲时将无效的block进行放电擦除以备下次写入时使用。
此时如果再次写入一个新的文件D,那么硬盘底层是如何处理的,首先是当硬盘没有开启Trim机制。
如果没有开启Trim,操作系统层删除了文件,文件系统层只是做了标记。但SSD并不会认为这些块是垃圾,所以只会在垃圾数据其后继续写数据,同样在做数据搬运时,还会搬运这些已删除的垃圾数据,这无形中就增加了大量的工作量。
接下来是当硬盘开启了Trim,同样是写入文件D的过程,图中白色表示free块,空白块,操作系统层删除文件之后发送Trim告知SSD,所以此时SSD就知道这些块是垃圾,那么就不做数据搬运了,然后把这些块视为垃圾进行块回收其实数据搬运是GC垃圾回收环节的一项非常重要的操作。
什么是垃圾回收(GC)
·GC(Garbage Collection,垃圾回收)的缩写,是固态硬盘(SSD)的一项内部存储机制,其设计目的是为了增加SSD的性能和使用寿命。
·垃圾回收的目的是回收空闲数据块,以便在SSD需要写入数据时直接写入空闲块中,确保硬盘可以高效运行并保持良好性能。
另一个前面一直提到的概念就是数据搬运,接下来来通过几张图了解一下,什么是数据搬运?为什么要数据搬运?其目的是什么?
数据搬运是为了垃圾回收可以顺利进行,图中block1和2是两个数据块,其中D1-D10表示有效数据,其他灰色表示无效数据。当硬盘没有开启Trim时,由于操作系统没有发送Trim指令给SSD,所以SSD并不知道哪些数据是无效的,那么在做GC数据搬运时,就默认所有的块都是有效数据,都要做数据搬运。
搬运完毕后,就可以将block1和2进行放电擦除,使其变为空白块。
接下来还是刚才的搬运过程,假设当开启了Trim后,操作系统会发送Trim指令给硬盘,并告知哪些数据被删除了,哪些数据是无效的。那么SSD就会进行标记,并认定其无效化,那么在做数据搬运时,只需要将有效数据D1-D10搬运到新的位置即可,而那些被Trim标记的无效数据就不再进行搬运了。
然后呢,还是将原block1和2进行擦除放电,以备接下来做数据写入时使用。但是要清楚,做硬盘做GC以及擦除是在硬盘闲时自主完成的,并非Trim标记后立刻擦除放电的。
到这里相信大家就清楚了为什么SSD必须要开启Trim了,虽然说Trim的开启会影响取证工作,但之所以SSD具有Trim机制,才可以保障数据的安全和硬盘的使用寿命。
最后总结一下:
首先因为SSD的设计是由一个个的浮动栅组成的,那么是没有办法像机械硬盘一样直接通过覆盖的方式写入数据,只能通过浮动栅的带电状态表示0和1。所以这也就导致SSD在写入数据之前必须要先擦除放电block,叫写之前擦除。而为了节省时间,SSD不可能每次都要等到每次写数据的时候再擦除,而是在操作系统或者文件系统删除数据时发送Trim指令给硬盘,硬盘收到指令后对无效数据进行标记。那么在对block进行擦除前,就要先把有效数据搬运走,而那些被Trim标记的无效数据就不做搬运了,直接放电擦除即可。
实 验
首先是SSD经过Trim后,直接对其进行数据恢复,就是日常取证工作通常面对的一个情况。尝试在底层尝试寻找文件的MFT项。
可以看到在211093768扇区找到一个MFT项,这里可以看到文件名是“AXIOM痕迹...”,这个文件名上一条删除线标识这个文件已经被删除。
接下来看这个文件的属性,可以看到10、30、80属性都是正常的,而偏移地址16-17,表示文件状态的字节被清零了,比如正常没删除的这里可能是0100,删除了就是0000。
然后根据80属性的run list,压缩字节32进行数据区的跳转,可以看到这个文件跳转之后的数据区全为00。
也就是说虽然这个文件的属性头、属性体都正常,但偏移到数据区发现文件底层都是00。
再借助R-Studio比较直观的看下文件的状态,文件名前面红色xx表示文件被删除,查看底层发现确实全为00。这就是日常取证工作中最常遇到的情况,对固态硬盘进行扫描,可能能扫描到文件MFT项,也就是能扫描到文件名之类的,但是恢复出来发现文件没有内容,底层全是00。
那么这是为什么呢?是因为当删除某些数据后,操作系统会向硬盘发送Trim指令,而硬盘收到指令后会在硬盘底层对无效数据进行标记。
进行标记后,当再次试图去访问这些无效数据时,其实在硬盘主控层面就已经阻断了与硬盘存储之间的联系。既然已经被标记了,那么主控就会认为这部分无效数据已经被GC了,所以根本就没有去flash存储颗粒层面的地址上去读取数据,而是在主控层面上直接给用户返回00。这就是为什么我们恢复固态硬盘数据,文件名正常,但恢复出的数据全是00的原因了,其实都是主控芯片的行为在控制的。
再看用了大招后的实验效果
图中所示是一个文件的MFT项,同样10、30、80属性都是正常的,偏移地址16-17两个字节为0000表示文件被删除。
接下来通过80属性的run list以及通过DBR获取到的每簇扇区数,也就可以跳转到文件的数据区。
进行跳转后,这里应该就看到非常明显的pdf标志头,表明数据区是有数据的并且是有效数据。
放到rtt中看的比较直观。文件名前面红色xx表示文件被删除了,查看文件底层发现数据是正常的。
总结一下,也就是说当硬盘经过了Trim后,通过常规镜像方式进行数据恢复发现数据恢复几乎是不可能的。而通过特殊的方式是完全有可能恢复出那些丢失的数据的。
恢 复 步 骤
我们需要对硬盘进行短接,短接的目的呢,是为了让硬盘进入到ROM安全模式,这里需要注意的是,需要先短接再对硬盘进行通电,硬盘呢可以直接通过数据线接口与主板连接或者通过USB转接板都可以。
那么短接点也是十分容易识别的,大部分硬盘都会打印在电路板上会写着ROMxx字样;另外两个短接点,一个是圆的一个是方的,大多数是这样。
在成功进入到安全模式后,可以转到操作系统下的磁盘管理界面,可以看到最下面 1G未初始化状态的磁盘,这就表示成功进入了安全模式,可以进一步接下来的操作了。
然后运行软件,此时软件会提示ROM Code Mode Device,然后根据Flash iD信息选择合适的固件再接下来。
点击右侧Datarecovery按钮后,会提示我们首先要加载MPISP,然后再加载ROMDebug。
成功加载之后软件会自动的回读硬盘镜像。最后可以直接对回读的镜像进行常规的数据恢复就可以对固态硬盘中丢失的数据尝试进行数据恢复了。
那么是什么原理可以进行的镜像回读呢?前文提到之所以硬盘反馈回来的是00,是主控芯片的行为,它认为这部分数据已经被Trim标记了也就自然会被GC,而实际中GC是闲时才会进行的,并不是Trim后立刻执行的,所以真实的情况是数据有可能没有被立刻垃圾回收。
那么通过短接的方式让硬盘进入ROM安全模式,就好比计算机启动到BIOS。ROM安全模式下只有主控的淹膜ROM工作,让其发送镜像回读指令便可在安全模式下直接访问flash颗粒,此时便可回读出完整的dump物理镜像。最后再对dump镜像进行重组和分析便可成功恢复出Trim之后丢失的那部分数据了。