Windows注册表Hive文件恢复
1.引言
最近几年,Windows注册表的取证分析技术逐渐成为计算机取证研究的重点之一。但是基于Windows注册表的取证分析技术还处于起步阶段,大部分的研究主要集中在注册表的分析,缺乏对注册表Hive文件恢复的研究。1999年,Russinovich在《注册表内部结构》中描述注册表的物理结构[1]。2005年,HarlanCarvey[2]提出了把注册表作为计算机取证的信息来源。2007年,TimothyMorgan在文献[3]中提出的算法能够从Hive文件中恢复出被删除的数据。对于操作频繁的Hive文件,此算法恢复效果就不是很理想。2008年,JolantaThomassen[4]在她的硕士毕业论文中深入浅出的介绍了Hive文件内部各组成部分的作用和原理,并且改进了被删除注册表数据的恢复算法。2008年,BrendanDolan-Gavitt在文章[5]中详细说明了注册表存储在物理内存中的结构,并开发了基于内存的注册表取证工具。
2.Hive文件介绍
WindowsXP的注册表逻辑上是以树形结构组织。它由两个注册表子目录树组成:HKEY_LOCAL_MACHINE(HKLM)和HKEY_USERS(HKU)。其实,在物理上注册表信息存储在多个独立的二进制文件中,这些文件被称为Hive。表1.1介绍注册表路径对应的Hive文件及其相关文件。
1999年,Russinovich首先描述Windows注册表Hive文件的的内部结构,并且说明各个组成部分的相互关系。具体内部结构如图1.1所示。注册表Hive文件包含头部块(Baseblock)和HBIN(HiveBin)。头部块和HBIN的大小都是4096字节的整数倍。注册表的第一个块被称为头部块,在头部块后面是Hive文件所有HBIN块,每个HBIN包含一个HBIN头部和多个cell。头部块包含Hive文件的一些重要信息,如魔幻数“regf”、该Hive文件的名称、存储路径、修改日期和到根项的偏移量。HBIN头部包含魔幻数“hbin”、到第一个HBIN块的距离和该HBIN块的大小等信息。
图1.1Hive文件内部结构
2.1分析
因为Windows系统中含有其它内部结构和Hive文件相似的文件,如:Hive文件的相关log文件和sav文件等,所以在对Hive文件恢复前,必要先对这些文件进行分析,研究它们之间的异同点。
在WindowsXPSP2系统中,通过注册表路径HKLM\SYSTEM\CurrentControlSet\Control\Hivelist,可以找到全部的注册表Hive文件和相关的路径。其中HARDWAR存储系统启动的时候检查到的硬件信息,本文不对该文件进行恢复。SAM全称是安全账户管理,用来保存用户及用户组信息。SECURITY记录系统的安全信息。SOFTWARE存储每个应用程序的设置。SYSTEM记录磁盘驱动和服务配置。.DEFAULT记录关于用户的缺省设置。每一个用户都有NTUSER.DAT和UsrClass.dat,分别记录与用户的配置相关的信息和用户的文件类型关联信息。
除了Hivelist中包含的Hive文件之外,系统在其它(本文转载自
www.yzbxz.com 一枝笔写作网)地方也存储着和注册表相关的数据。log文件是Hive文件的修改事件日志文件。sav文件WindowsXP安装过程中创建的Hive文件的备份文件。userdiff的作用是把用户的特征从前一个版本WindowsNT更新到WindowsNT4.0。REGLOCS.OLD是Windows系统运行过程中产生的垃圾文件。hiberfil.sys是系统休眠文件。pagefile.sys是页面交换文件。repair文件夹下面的这些文件(default,ntuser.dat,sam,security,software和system)都是Windows系统第一次安装成功时生成的。剩余空间也包含Hive文件主要是由于删除操作系统或者系统用户遗留的。
如何从众多的干扰数据中把真正的Hive文件恢复出来。现在对这些非Hive文件的内部格式进行分析如下:
log文件在偏移量0X200处有标识符为“444952FF”,而Hive文件在该偏移量处全都是0。sav文件虽然它有魔幻数“regf”,但是它没有修改日期和文件名。userdiff文件可以通过文件名把userdiff文件和其它Hive文件区分开。REGLOCS.OLD文件头部没有修改日期和文件名。同样repair目录下面的文件头部只有魔幻数和校验值,没有修改日期和文件名。剩余空间、pagefile.sys和hiberfil.sys中可能含有部分的注册表头部信息,而且修改日期不是最近的。每一个用户,包括本地服务用户和网络服务用户,都有文件NTUSER.DAT和UsrClass.dat。NTUSER.DAT和UsrClass.dat中的路径名支持的长度是32个字母。因为NTUSER.DAT文件存放在用户文件夹下,因此它的路径中包含用户名,可以用于区分不同的用户的NTUSER.DAT。但是因为UsrClass.dat的路径太长,系统省略了用户文件名,因此每一个UsrClass.dat文件中路径都是一样的。UsrClass.dat文件的第一个项是和SID有关的。每个用户都有对应着一个唯一的SID。SID就是安全标识符(SecurityIdentifiers)。例如:S-1-5-21-1390067357-1303643608-682003330-1003,其中第一项S表示该字符串是SID;第二项1是SID的版本号;第三项5是SID的签发者主代码(对于WindowsXP来说,这个值永远是5)。在往后的四组数字是签发者子代码。最后是一个RID(RelativeIdentifier,相对标识符,即例子中的1003)。S-1-5-19表示本地服务用户;S-1-5-20表示网络服务用户;S-1-5-21-域-500表示系统管理员用户账号;S-1-5-21-域-501表示来宾账号;S-1-5-21-域-1001表示系统登录用户账号的RID从1001开始。对于每个系统登录用户账户,NTUSER.DAT文件的$$$PROTO.HIV\Software\Microsoft\ProtectedStorageSystemProvider含有一个以用户的SID命名的子键。
2.2恢复
文件恢复主要从两个层次进行:文件系统级和应用级。当文件系统被犯罪分子破坏的时候,文件系统级恢复就无能为力。应用级文件恢复可以在不依赖文件系统的情况下,利用文件的内部特征,达到恢复文件的目的。以下都是针对应用级的文件恢复技术。
注册表的Hive文件的头部块和HBIN块的大小都是4KB的整数倍。当文件系统中的簇大小为4KB时,注册表Hive文件的头部是不会被分片的。在现实中HBIN块之间经常发生分片。如图1.2所示。即分片点发生在两个HBIN块的连接处。Hive文件分片有两种情况:第一种是HBIN块后面不是HBIN块,但是这个HBIN块又有指针指向下一个HBIN块,这说明该Hive文件在此HBIN块后面发生了分片。第二种是HBIN块的后面是一个HBIN块,但是它们之间的到第一块HBIN距离之差不等于上一块HBIN块的大小。这说明Hive文件在此HBIN块分片。
图1.2HBIN块之间发生分片情况(责任编辑:一枝笔写作事务所)