徐国天
(中国刑事警察学院网络犯罪侦查系,沈阳110854)
恢复存储器中被删除的文件是一种非常重要的技术方法[1]。目前现有数据恢复软件主要有Final Data、encase 和取证大师等几种,但在实际应用中我们发现这些软件存在一个问题,即某些文件被删除之后,通过分析我们发现这些文件大部分数据仍然残留在硬盘内,但是现有软件却无法成功恢复。本文深入研究了3 种NTFS 存储设备数据恢复方法,即通过NTFS 日志文件($LogFile)、残留的MFT 记录和文件头部存储特征值来完成恢复。NTFS 日志恢复方法基于中国刑警学院课题组自行开发软件测试,另两种方法基于Final Data 软件测试。。
NTFS 日志文件是NTFS 为实现可恢复性和安全性而设计的。当系统运行时,NTFS 就会在日志文件中记录所有影响NTFS 卷结构的操作,包括文件的创建和改变目录结构的命令,从而在系统失败时能够恢复NTFS 卷。通过$LogFile 元文件可以提取出删除痕迹,进而完成删除文件的恢复。
这里使用中国刑警学院课题组自行开发的NTFS文件系统日志检验分析软件对NTFS 格式存储设备的日志文件进行检验分析,获取被删除文件的相关信息,主要包括文件名称、文件创建时间、文件修改时间、最后一次MFT 记录变化时间、最后一次文件访问时间、文件大小、文件的覆盖率、文件数据的存储位置,根据以上信息恢复被删除文件。
图1 为应用NTFS 日志检验分析软件从NTFS日志中提取出的3 组删除痕迹,每组删除痕迹之间用一个空行分隔,以第1 组删除痕迹为例进行说明。num 是日志检验分析软件为每组删除痕迹自动添加的唯一编号,本例为0;name 是被删除文件的名称,本例为ceshi_1.doc;c-time 是被删除文件的创建时间;a-time 是被删除文件的修改时间;m-time 是被删除文件的最后一次MFT 记录变化时间;r-time 是被删除文件最后一次访问时间;size 是被删除文件大小,以簇块为单位,本例为35 簇;COVER 是被删除文件的覆盖率,本例为0%;datarun 是被删除文件的数据存储位置,在本例中被删除文件的数据实际存储在起始簇号为0X05E181 即385409 簇的地方,共0X23 即35 个簇块,这说明第1 个被删除文件是连续存储的。
从图1 可知第2、3 个被删除文件是非连续存储的。其中第2 个被删除文件数据存储在4 段区域内,其簇号范围是492796 ~ 492799、385444 ~ 385456、385476 ~ 385478、492802 ~ 492804,共23 个簇块。第3 个被删除文件数据存储在3 段存储区域内,其簇 号 范 围 是385508 ~ 385517、385526 ~ 385527、385536 ~ 385538,共15 个簇块。根据图1 所示的3组删除痕迹应用NTFS 日志检验分析软件恢复出3 个被删除文件。
图1 从NTFS 日志中提取出的3 组删除痕迹Fig.1 Traces of three deleted files from NTFS log file
图2 给出了3 个删除文件在硬盘内的实际存储情况,下面以痕迹2 为例说明。日志检验分析软件首先从$LogFile 元文件中识别出第2 个文件的删除痕迹,根据其中保存的数据位置定位硬盘上的4 段区域,并确定其簇块次序为492796~492799、38544~385456、385476~385478、492802492804,共23 个簇块,进而依次提取出这些簇块、组合成一个完整文件。
图2 恢复出的3 个删除文件Fig.2 Three restored files
目前现有数据恢复软件(如Final Data)普遍基于两种策略恢复删除文件。一种是扫描$MFT 元文件,寻找出被删除文件残留的MFT 记录,进而根据其中存储的相关信息恢复文件[2]。这种方式的优点是可以快速恢复文件,但如果被删除文件残留的MFT 记录被覆盖,这种方法将失效,下面举例分析。
使用Final Data 的快速扫描功能(即扫描$MFT元文件)恢复同一NTFS 存储设备中的删除文件[3]。扫描结果如图3 所示,可见识别出1 个删除文件,名称为~WRL0001.tmp,文件的起始簇号为385508,恢复出的文件与图1 中的第3 个删除文件完全相同。图1 中另外2 个删除文件的MFT 记录已被覆盖,因此没有识别出来。
图3 使用Final Data 的快速扫描恢复Fig.3 Quick scan recovery by Final Data
$MFT 元文件是NTFS 下最重要的1 个系统文件,它记录着磁盘上每个文件和目录的基本信息,这些信息包括:文件名、目录名、安全属性、目录索引、文件大小、安全位置等内容[4]。元文件$MFT 由一系列MFT 记录组成,每个MFT 记录的大小为1KB。磁盘上每个文件或目录都对应了一个MFT 记录,本文将保存文件基本信息的MFT 记录简称为MFT 文件记录。当某个文件被删除之后,如果其对应的MFT 文件记录没有被覆盖,则可以根据MFT 文件记录完整恢复被删除的文件,下面分析被删除文件“~WRL0001.tmp”残留的MFT文件记录存储结构。(见图4)
图4 被删除文件“~WRL0001.tmp”残留的MFT 记录Fig.4 Residual MFT data from the deleted “~ WRL0001.tmp” file
前56 个字节是文件记录头。文件记录头的前4 个字节固定是ASCII 码“FILE”。第23、24 字节是标志字节,值为0x0000,表示这是一个被删除文件。如果是正常文件,这个值应为0x0001。第81~88 字节是文件的创建时间。第89~96 字节是文件的修改时间。第97~104 字节是MFT 记录变化时间。第105~112 字节是文件的最后一次访问时间。第243~264 字节是采用Unicode 表示的文件名,共24个字节,值为“~WRL0001.tmp”。第353~360 字节是文件的占用空间大小,值为0x F0 00 = 61440 字节,即15 簇。第361~368 字节是文件的实际大小,值为0x E6 00 = 58880 字节。
第377~392 字节为数据存储位置,值为0x 31 0A E4 E1 05 11 02 12 11 03 0A 00 00 D0 90 E1,其中包含3 个数据运行,分别是0x 31 0A E4 E1 05、11 02 12 和11 03 0A。整个文件数据由3 块空间组成,每个数据运行标识一块空间。第1 块空间的起始簇号是0x 05 E1 E4 = 385508,空间大小为0x 0A = 10簇。第2 块空间的起始簇号是0x 12,但这是与第1个数据运行的相对地址,因此第2 块空间的起始簇号是0x 05 E1 E4 + 0x 12 = 0x 05 E1 F6 = 385526,空间大小为0x 02 = 2 簇。同理第3 块空间的起始簇号也是与第2 个数据运行的相对地址,因此第3 块空间的起始簇号是0x 05 E1 F6 + 0x 0A = 0x 05 E2 00 =385536,空间大小是0x 03 = 3 簇。
根据这个残留的MFT 记录可以恢复出被删除文件“~WRL0001.tmp”的名称、创建时间、修改时间、最后一次MFT 记录变化时间、最后一次文件访问时间、文件大小、文件的覆盖率、文件数据的存储位置。
另一种恢复策略是扫描NTFS 格式存储设备的空闲空间,根据被删除文件的头部、尾部特征值定位起始和结束簇块,进而将起始和结束簇块之间的连续数据块提取、合并成一个原始文件。这种方式可以有效恢复较长时间以前删除的文件,但如果文件数据不是连续存放的,这种方式不能有效恢复,同时不能恢复文件的名称和修改时间等信息。
使用Final Data 的完整扫描功能(即扫描NTFS分区的空闲空间)恢复同一NTFS 存储设备中的删除文件。扫描结果如图5 所示,可见识别出3 个删除文件。第1 个文件的起始簇号为492796,对应图1 中的第2 组删除痕迹。第2 个文件的起始簇号为385508。对应图1 中的第3 组删除痕迹。第3 个文件的起始簇号为385409。对应图1 中的第1 组删除痕迹。恢复出的3 个文件中只有第3 个文件可以正常使用,恢复出文件的名称和时间信息丢失。
图5 使用Final Data 的完整扫描恢复Fig.5 Full scan recovery by Final Data
由于3 个被删除文件均为Office2003 版本Doc文件,这类文件的头部特征值为0X D0 CF 11 E0 A1 B1 1A E1。Final Data 软件根据这一特征值从硬盘空闲空间内找到这3 个被删除文件,图6 为使用winhex 查看到的3 个被删除文件的头部数据,可见每个文件的起始8 个字节均为Doc 文件特征值。
图6 3 个被删除文件的头部特征值Fig.6 Peculiar head data of the three deleted files
图7 显示的是Final Data 恢复结果与删除文件实际存储情况的对比,下面依次分析。Final Data 在385409 簇识别出Doc 文件头部特征值,将其后连续48 个簇块合并成一个Doc 文件。而该文件的实际存储情况是从385409 簇开始,共35 簇。Final Data的恢复范围包含了删除文件的实际存储范围,因此Final Data 恢复出的这一文件可以正常使用。
随 后,Final Data 在385508 簇 识 别 出Doc 文件头部特征值,并将其后的15 个簇块合并成1 个Doc 文件。而该文件实际存储在385508、385526、385536 簇开始的3 段空间内,Final Data 只恢复出第1 段存储空间的数据,其它2 段丢失,因此恢复出的文件不可使用。
Final Data 在492796 簇 识 别 出1 个Doc 文 件特征值,并将其后的32 个簇块合并成1 个Doc 文件。但该文件实际存储在385444、385476、492796、492802 簇开始的4 段空间内,Final Data 只恢复出第1、4 段数据,但这两段数据次序错误,并且其间掺杂了大量无关数据,因此恢复出的文件无法使用。
图7 Final Data 恢复结果与删除文件实际存储情况对比Fig.7 Recovery result and the actual storage condition
综上所述,Final Data 应用快速扫描和完整扫描恢复出图1 中的第1 和第3 个删除文件,但由于第2个删除文件的MFT 记录已被覆盖,并且数据不连续存储,因此Final Data 没有成功恢复,而应用NTFS日志可成功恢复该文件。
3 种方式恢复效果对比如表1 所示。经过测试我们发现NTFS 日志和MFT 记录方式恢复速度快,恢复出的可用信息多、全面,但前提是删除文件的NTFS 日志痕迹和残留的MFT 记录未被覆盖,因此这两种方式不能有效应对较长时间以前删除文件的恢复。相反特征值可恢复较长时间之前删除文件,但要求文件连续存放,并且无法恢复文件名称、创建时间等相关信息。
表1 3 种方式恢复效果对比Table 1 Comparison of three recovery choices
[1] 王桂强.电子物证检验[J].刑事技术,2003(4): 3-7.
[2] 徐国天.NTFS 系统下“小文件”取证软件的设计与实现[J].信息网络安全,2011(8): 38-40.
[3] 李盛,朱秀云,韩杰,等.电子物证检验中常用数据恢复工具对比研究[J].刑事技术,2008(4): 24-27.
[4] 徐国天.电子商务平台的Oracle 数据库系统文件恢复与检验软件的开发[J].信息网络安全,2010(4): 12-14.