我们紧接上一篇文章继续讲解。
贮存池和过载区域
固态硬盘的物理容量始终高于开发商所宣传的可用存储量,这是因为大多数现代固态硬盘驱动器占用了其存储容量的5%到10%,但某些型号的硬盘驱动器所占的百分比明显还要高。例如,Crucial(英睿达)释放了具有480 GB存储空间的入门级BX系列固态硬盘驱动器,而其价格较高的MX系列则提供500 GB的容量。两种型号都可能使用了512 GB内部容量(不包括ECC代码和标记,否则物理容量会更高),由于如今的NAND芯片的大小可以任意制定,不一定是2的倍数,所以芯片的实际大小可以是8.7 GB,而不是8 GB。
这种差异就是由所谓的保留区的大小造成的,这也就是所谓的过载区域。这些额外的块会被用于磨损均衡和交换池,允许固态硬盘控制器在需要重写某些数据时快速选择空块。
值得注意的是,过载区域的块可能包含数据。一旦固态硬盘控制器将数据块推送到无法寻址的池中,该块就被标记为空(开启TRIM功能)。开启TRIM功能的数据块将排队进行垃圾收集,这是一个后台进程。垃圾收集进程实际上将清除开启TRIM功能的数据块的内容。这个进程不是即时的,可能需要一段时间来完成,具体取决于开启TRIM功能的数据块的数量、NAND闪存的类型和速度。某些固态硬盘驱动器可能需要15分钟才能完成清除开启TRIM功能的数据块。我们还看到,固态硬盘驱动器实际上从未真正清除由于固件错误导致的过载区域块的内容。这就是为什么大多数军用数据清理标准要求物理销毁固态存储介质,而不是依赖于任何软件方法。
固态硬盘驱动器删除证据的进程
另一个非常重要的注意事项是,一旦一系列数据块开启TRIM功能,即使固态硬盘驱动器立即断开连接,垃圾收集进程也会在固态硬盘驱动器启动时恢复工作。 串口硬盘(SATA)的只读隔离程序不会影响此进程,也不能用于防止后台的垃圾信息收集。
如果你还想试图读取那些仍包含数据的经过TRIM处理的块,则结果取决于TRIM处理的方式。目前从经过TRIM处理的块中读取信息的模式总共有3种:
1.未明确定义的TRIM功能:当读取开启TRIM功能的块时,固态硬盘控制器可以返回实际数据,全零或其他数据。有趣的是,不同的读取尝试(SATA Word 169 bit 0)之间的结果可能不同,不过高技术含量的固态硬盘制造商很少使用这种产品。
2.Trim后的确定性读取(Deterministic Read After Trim ,DRAT):固态硬盘控制器在读取Trim后的数据块时,无论其实际内容如何,都将始终返回一个预定义值。该值可能全为零,但也可能是其他的值(SATA Word 69 bit 14),这是目前消费级固态硬盘驱动器中最常用的方法。
3.TRIM后的确定性零(Deterministic Zeroes After Trim,DZAT):无论实际内容如何,所有TRIM过的块都会立即被读取为零(SATA Word 69 bit 5)。此模式通常用于企业级固态硬盘驱动器。如果想要制造固态硬盘 RAID,大多数NAS制造商都需要用到此模式。
用户可以通过运行以下命令轻松确定其固态硬盘驱动器的运行模式:hdparm -I。
Example: $ sudo hdparm -I /dev/sda | grep -i trim * Data Set Management TRIM supported (limit 1 block) * Deterministic read data after TRIM
实际上,DRAT和DZAT模式可以有效地防止在发出Trim命令后立即访问实际数据。即使固态硬盘驱动器使用快速格式进行格式化,其整个内容也会立即无法访问,这与未加密的磁性硬盘表现出的行为大不相同。不但没有办法访问经过TRIM处理的数据,也没有办法阻止后台垃圾收集进程对仍然存储在TRIM块中的证据的破坏。
开启TRIM功能后,如何使用工厂访问模式镜像固态硬盘驱动器?
以前,开启TRIM功能后,提取固态硬盘驱动器的数据只有上述的两种策略,使用第一种策略,专家处理固态硬盘驱动器的方法类似于磁性硬盘驱动器的方法,这将使删除的数据无法访问。
另一种策略是芯片提取分析(chip-off analysis),该方法需要将NAND芯片从PCM设备上提出出来,并进行复杂的分析,整个过程耗时耗力。以上我们说过,分析一个只有四芯片的固态硬盘就需要两周的时间,而处理一个十芯片的磁盘几乎是不可能的。
将固态硬盘驱动器返回到制造商那里,再进行数据恢复的情况很少发生,但从技术上来说,这可能是最佳策略,因为制造商可以通过固态硬盘的工厂模式进行进行数据恢复。
具有内置控制器(包括固态硬盘驱动器、USB闪存驱动器、eMMC芯片甚至SD卡)的固态存储介质具有多种操作模式。默认情况下,它们以标准模式运行,进行读取和写入数据,对数据块进行TRIM处理或格式化分区。但是,所有固态存储设备都存在着一种特殊的访问模式,研究人员将它称为“工厂访问模式(factory access mode)”或干脆将其简称为“工厂模式(factory mode)”。在这种模式下,制造商可以将控制器初始化、上传固件、测试NAND存储器并构建重新映射的那些坏的数据块的初始列表。在工厂访问模式中,制造商可以直接访问存储在NAND芯片中的信息以及所有服务信息。工厂访问模式内置于现有的每个固态硬盘驱动器中,包括那些用回收部件在地下工厂组装的驱动器。
在工厂访问模式下,固态硬盘可以执行通过ATA接口(或USB,或PCI-E或固态硬盘具有的任何其他接口)发送的低级命令。在工厂模式下,固态硬盘可以执行许多在标准模式下无法执行的操作。
工厂访问模式的存在是有其原因的,在磁性硬盘驱动器中,工厂访问模式用于低级诊断,允许制造商及早发现制造缺陷(例如磁头缺陷)。而在固态存储介质中,工厂模式则用于检测NAND单元中的位错误。当客户由数据恢复服务时,许多制造商也使用它来提供数据恢复服务。最后,工厂访问模式可以用于上传固件并在初始化磁盘时创建服务区域,例如地址映射表。
哪些制造商使用了工厂访问模式?
几乎每个固态硬盘制造商都会使用工厂访问模式,事实上,USB闪存驱动器、eMMC芯片、SD卡和其他配备微控制器的“智能”存储介质的制造商都使用了工厂访问模式来编程、测试和初始化存储设备。即使是用现成的部件组装磁盘的制造商(例如流行的Phison PS2251-07控制器)也可以使用工厂模式,工厂访问模式内置在所有SATA, NVME, USB和其他固态硬盘驱动器。
工厂访问模式的特点
对于普通用户来说,使用工厂访问模式可以让他们接触到以前无法接触到的潜在功能,特别是对取证专家来说,下列8个特征是让他们最感兴趣的:
1.通过物理数据块读取原始数据,块返回的是真正意义上的“原始”数据,包括完整的编码和ECC数据校正信息。这是在不提取芯片的情况下离芯片最近的一次。注意,即使媒介加密密钥(media encryption key,MEK)没有加密,加密的数据也不会在这种模式下解密。
2.读取逻辑数据块,这包括必要的解码操作,包括分解页面和块、转换已编码的页面和执行ECC纠正。此外,具有硬件加密功能的固态硬盘驱动器将解密加密的数据(如果使用默认的媒介加密密钥)。换句话说,这是从固态硬盘读取数据的最简单方法,包括经过TRIM处理和过载区域的块。
3.对于加密的固态硬盘驱动器,查找包含媒介加密密钥(MEK)的模块。虽然固态硬盘加密不在本文的讲解范围,但需要注意的是,某些加密方法(例如Windows 10版本的BitLocker)使用固态硬盘内置的加密特性,而不是使用CPU加密数据。因此,专家可以在很短的时间内找到BitLocker加密密钥并解密数据。
4.访问过载区域中的块以及由转换表(重新映射、重定定位和保留块)定义的可寻址池外部的块。
5.访问SMART记录;
6.访问(查找和读取)包含固态硬盘固件和转换表的系统区域;
7.读取系统区域并保存以供后续分析;
8.通过将微程序放入控制器的RAM,取证专家可以将固态硬盘引导到不同的固件中,进而使用不同的(重新构建的)转换表。例如,如果原始转换表损坏或不可读。
对于数字取证专家来说,有两个额外的功能可能会引起他们的特别兴趣。第一个是他们可以暂时禁用控制器的后台进程,如垃圾收集、损耗均衡和地址重映射。这有效地防止了固态硬盘在后台破坏证据。第二个是他们可以访问存储在不可寻址块(过载区域、贮存池等)中的数据,这样可以访问最近删除的数据。
固态驱动器使用Trim命令,就可以快速删除不再用于保存有意义数据的块来提高写入性能。当文件被删除或者磁盘空间以不同的方式被使用(例如磁盘被格式化)时,Trim命令允许固态硬盘控制器释放未使用的块。释放的块计划由内置垃圾收集器处理,它们还可以重新映射来分配不同的物理地址或将其推到可寻址空间之外的过载区域。重要的是,Trim命令本身不会删除数据,以上所述就是垃圾收集进程。
释放的数据块可以在一段时间内保留其原始数据,不过这些块保留原始数据的时间长短取决于多种因素,比如固态硬盘的当前负载,固态硬盘控制器的型号及固件以及制造商为特定型号设置的可变优先级。将垃圾收集优先于读写操作的固态硬盘会暂时降低I/O性能,因为后台垃圾收集会消耗资源。反过来,将当前I/O优先于垃圾收集的固态硬盘,由于Trim功能被开启,则实际删除的时间会有很长的延迟,利用这种延迟,取证专家就可以在经过TRIM处理的块或被释放后的块中提取相关信息。
使用工厂访问模式提取数据
根据以上的推测,工厂访问模式可以用于固态介质的取证镜像。这是取证专家目前可用于从固态硬盘驱动器中提取信息的唯一模式,而且利用此模式还不存在存储介质擦拭而丢失证据的风险,这也是目前唯一允许访问不可寻址、过载区域的块的模式。使用工厂访问模式要简单几个数量级,而且成本要低得多,尤其是在对加密设备进行镜像的情况下。
重要的是,在工厂模式下访问信息没有既定的标准,目前还没有通用的方法将给定的固态硬盘驱动器切换到工厂访问模式,也没有标准的命令集可供所有型号和制造商在工厂模式下使用。工厂访问模式几乎没有成型的文档记录,在很多情况下,工厂访问模式仅适用于各个制造商的较大授权服务中心。
目前取证人员通常会使用非OEM第三方工具进行提取,这其中就包括对固态硬盘镜像。 ACELAB专业级硬盘维修工具PC3000就可以支持通过工厂访问模式为各种存储设备提供低级固态硬盘镜像。该工具包可以镜像运行良好以及无法运行的固态硬盘驱动器,即使它们无法启动或显示出错误消息。由于OEM的缘故,目前固态硬盘控制器和固件版本的种类繁多,关于PC-3000的细节请参考以下3篇文章:
PC-3000 固态硬盘:Active Utilities(主要概念描述);
PC-3000 固态硬盘:Silicon Motion(SM)实用程序;
PC-3000 固态硬盘:Phison Utility适用于PS3109,PS3105,PS3108,PS3109,PS3110,PS3111,TC58NC1000,TC58NC10100;
一般而言,通过工厂访问模式的固态硬盘镜像需要以下6个步骤:
1.通过阻止控制器访问NAND闪存芯片,这样做的目的是为了防止固态硬盘控制器启动后进入“标准”模式,这可以防止控制器加载固件并确保没有后台进程可以破坏证据。
2.将固态硬盘驱动器切换到出厂访问模式;
3.读取固态硬盘固件和系统区域,如有必要,重建损坏的转换表;
4.将微代码(Microcode)上传到固态硬盘控制器RAM,然后上传转换表和其他系统数据,微代码(Microcode)就是用简单的硬件操作来模拟当时无法用技术直接实现的复杂指令。
5.将固态硬盘控制器引导至RAM中的代码;
6.使用工厂访问模式访问固态硬盘驱动器上的信息;
对于每个固态硬盘驱动器或者更确切地说,对于每个固态硬盘控制器,要采用不同的顺序切换到工厂模式。在将固态硬盘驱动器切换到出厂访问模式(也称为出厂模式、安全模式、恢复模式等)之前,必须首先确保固态硬盘控制器在开机时不以标准模式启动,这可以通过阻止对包含固态硬盘固件和系统区域的NAND闪存芯片的访问来实现,普通用户也可以通过缩短PCB上的Service Pin(服务引脚)来阻止对NAND芯片的访问。
阻止对NAND芯片的访问也可以帮助取证人员启动损坏的固态硬盘驱动器,其中包含损坏的转换表。如果转换表已损坏,则固态硬盘可能会进入bootloop(无限重启)模式“加载微码>错误>重置>加载微码>错误…”,如果固态硬盘已损坏且处于无限重启模式中,由于全负荷负载,则它将不接受服务命令,切换到工厂访问模式。
以下就是如何在Crucial BX100上阻止对NAND芯片访问的示意图:
接下来,我们将固态硬盘连接到ACELab PC-3000,以便将其切换到工厂访问模式。由于每个OEM/控制器有很大的不同,通过向固态硬盘控制器发送一个特定服务命令来激活工厂访问模式。然后,我们将LDR代码上传到控制器的RAM中。
如果我们能够成功上传微码,则下一步将是读取或恢复转换表,此时损坏的转换表可以自动或手动重新组装。
转换表必须上传到固态硬盘控制器的RAM中:
然后,你可以使用Data Extractor应用程序对固态硬盘驱动器进行镜像,此时数据将保存为标准磁盘镜像格式。此时,你将能够读取已经过TRIM处理但尚未被物理删除的块。
为了更快更容易的分析数据,可以将磁盘内容作为文件系统提取。在此模式下,仅保存现有文件,删除的数据将无法使用。
总结
固态硬盘取证一直都是一个非常热的主题,虽然固态硬盘制造商提高了存储密度并采用了磨损均衡、缓存和写入加速的方法,但取证专家也在开始尝试使用新方法对固态介质进行镜像。在本文中,我们就讨论了使用工厂访问模式对固态硬盘驱动器进行镜像的可能性。