固态盘闪存扰乱数据的恢复方法研究
2017-10-21江山
江山
摘要:针对数据扰乱技术影响固态盘闪存数据恢复率的问题,该文提出一种能有效恢复扰乱闪存数据、提高固态盘数据恢复率的方法。实验表明,该方法既能在不拆除闪存硬件的前提下获取到固态盘闪存的所有数据,为固态盘数据分析提供了完整的数据源,又能生成无扰乱的闪存物理镜像,使取证数据的数据恢复率达到75%以上。
关键词:固态盘;NAND闪存;数据扰乱;数据恢复
1概述
固态盘(SSD)是一种基于闪存阵列的硬盘,固态盘大容量、高密度的数据存储需求促使硬件厂商采用位密度更小的MLC型闪存作为固态盘的基本存储单元,固态盘闪存存储密度的增加加重了相邻闪存单元之间的电压干扰,造成闪存数据错误率的增大。ECC校验算法虽然能对错误数据进行检测和校验,但其可校验的数据位个数是有限的。为了解决该问题,数据扰乱技术被提出并被应用于固态盘主控中。然而,闪存数据扰乱技术的存在破坏了文件的标志符特征,使得利用文件标志符从物理镜像中查找文件并重组时无法恢复出任何有效数据,给通过文件镜像方式进行数据恢复带来了极大的难度。
2闪存数据扰乱问题
为了解决因读写特殊位模式的数据而造成错误率升高的问题,数据扰乱技术(data scrambling或data randomization)被提出并被应用于MLC闪存的设备控制器中。该技术能够在向物理闪存写人数据之前通过随机化手段打乱原有数据的位模式,减轻相邻存储单元之间的电压干扰,进而降低闪存读写数据的错误率㈣。不同闪存设备其数据扰乱技术的具体实现不同。一般来说,数据扰乱模块通常由初始扰乱种子寄存器、扰乱密钥发生器和异或操作逻辑组成。
在针对闪存进行数据恢复的时候,由于其应用了数据扰乱技术,通常的技术手段无法恢复其原始数据或恢复出来的数据为无意义的扰乱数据,解决该问题的关键是需要还原物理镜像中的随机化数据。本节从数据扰乱技术的原理出发,设计并实现了一种扰乱恢复方法。通过对闪存数据的扰乱恢复生成还原后的闪存物理镜像,从而保证用户原始数据的顺利读取。
3扰乱恢复算法
3.1扰乱恢复方法的理论分析
根据数据扰乱技术的基本理論可知,扰乱算法主要分两步:一步是在写闪存数据之前通过异或操作打乱原有数据的位模式,另一步是在读闪存数据之后再次执行异或操作从而对打乱的数据进行恢复。前者被称之为扰乱,后者被称之为扰乱恢复。图1显示的是数据扰乱技术应用于某个固态盘后盘内数据的流向和变化,其中虚线箭头代表写操作的数据流,实线箭头代表读操作的数据流。如图所示,原有数据在经过数据扰乱器与扰乱密钥执行位异或操作后变为被扰乱数据,扰乱数据再次经过扰乱器与扰乱密钥进行异或后实现扰乱恢复。根据位异或操作的特性可知,要得到与原有数据相同的恢复结果,参与扰乱恢复过程的扰乱密钥必须等于对应扰乱过程的扰乱密钥。
基于上述扰乱恢复过程的理论分析,恢复扰乱数据的方法实现可能存在两种途径:一种是彻底弄清固态盘主控中数据扰乱引擎的具体工作过程,包括知道初始扰乱种子的准确值、知道生成扰乱密钥的地址是物理地址还是逻辑地址,知道扰乱密钥的生成算法以及地址映射表内容等信息。在此基础上用软件实现数据扰乱引擎的硬件功能,进而对获取到的闪存物理镜像进行扰乱恢复。另一种则不需要了解这些具体的实现细节,直接利用固态盘主控开启数据扰乱引擎的恢复扰乱功能,通过固态盘的Boot Loader代码加载读取底层闪存数据的软件,利用数据扰乱引擎的恢复扰乱功能还原被扰乱的闪存数据,从而生成未扰乱的物理镜像。
对比这两种实现方法,第二种方法相对容易实现,只需识别出初始的扰乱种子值、确定出种子值存入的寄存器地址以及如何利用固态盘主控开启数据扰乱引擎的扰乱恢复功能。本文主要介绍第二种数据扰乱恢复方法的实现。为了使研究结果具有普遍性,本文选择采用主流主控——Barefoot的固态盘作为取证研究对象。该主控支持像三星、现代、东芝、美光等主流厂商的多种闪存芯片,广泛应用于固态硬盘的设计中。
3.2扰乱恢复算法实现
由OpenSSD项目提供的技术参考手册可知Barefoot主控是通过设置位标志寄存器FCP_OPTION的标志位FO_SCRAM-BLE来实现数据扰乱引擎开启的,同时如果该标志位在读请求的响应过程中有效,则数据扰乱引擎执行的就是恢复扰乱功能。结合上一小节识别的初始扰乱种子值和扰乱种子寄存器,即可实现固态盘闪存数据的恢复扰乱算法并由此生成未扰乱的闪存物理镜像。
其中setScrambleKey(涵数的功能是将识别的扰乱种子存人目标寄存器,这里scramble_seedlil是一个长度为8的一维数组,数组元素是32比特的无符号整数,用来暂存已被识别的扰乱种子值;SCRAMSEED_BASE代表目标寄存器的起始地址;send_to_dev()函数代表将初始种子值写入固态盘寄存器硬件。Descrambling()函数是实现恢复扰乱算法的主要函数,功能是在读闪存数据后对其进行恢复扰乱并生成未扰乱的闪存物理镜像;变量enableScramble是数据扰乱引擎的开启开关,它的不同取值决定标志位FO_SCRAMBLE是否有效。ReadPage()是能够实现恢复扰乱的读闪存页函数,WriteFile()函数实现闪存物理镜像的生成。
4实验验证
为了验证上述扰乱恢复算法的有效性,选定3个不同型号的6个固态盘(主控都是Barefoot)作为实验对象。其中同一型号的固态盘有2个,硬件参数两两相同。比如型号是CrucialM225的目标固态盘共2个,分成2组,一个用于Windows XP系统,另一个用于Windows 7系统。每个测试盘在Windows XP或Windows 7系统下被格式化为NTFS文件系统,分别存人两个大小是650KB的小文件和一个容量等于800MB的大文件。然后删除其中的大文件和一个小文件。准备好后,将测试盘连接到PC机上,分别计算系统元文件、未删除文件和已删除文件中提取到的文件页占对应文件页总数的比值。
实验结果如表1所示,其中A镜像代表由扰乱数据组成的镜像,B镜像代表恢复扰乱数据生成的镜像。表中数据显示对于扰乱数据镜像(A镜像)而言,不论是文件系统元文件还是用户自定义文件(包括已删除和未删除的)没有一个数据页被恢复出来;而对于扰乱恢复数据镜像(B镜像)而言,系统元文件和用户自定义文件中的未删除文件100%被恢复出来,该结果确认了主控为Barefoot的固态盘采用数据扰乱技术的事实并且验证了本文提出的扰乱恢复算法的正确性。
5结论
本文重点研究了数据扰乱技术对固态盘闪存数据恢复率的影响。为了解决该问题,本文提出一种通过恢复扰乱闪存数据提高固态盘数据恢复率的方法。该方法不依赖于数据扰乱引擎的实现细节,而是通过反汇编固态盘的固件镜像分析出初始扰乱种子值,改写开源固件代码实现初始扰乱种子的载人以及数据扰乱引擎硬件的开启,利用数据扰乱引擎实现闪存数据的恢复扰乱,从而生成正常的固态盘闪存物理镜像。实验测试表明,该恢复扰乱方法能正确还原固态盘的闪存数据,使被删除数据的数据恢复率提高到75%以上。endprint