基于注册表中的ShellNo-Roam表键解析文件夹操作行为
罗文华
中国刑事警察学院网络犯罪侦查系,沈阳 110854
摘要
关键词: 注册表; ShellNoRoam; 文件夹操作; BagMRU; MRUListEx; 电子物证
中图分类号:DF793 文献标志码:B 文章编号:1008-3650(2014)03-0042-04

从Windows 95开始, Windows系列操作系统采用了一种叫做“ 注册表” 的数据库来统一管理系统配置信息。作为集中存放Windows系统各类信息的“ 重地” , 注册表中包含了所有的软、硬件配置和状态信息, 主要有应用程序初始条件、系统设置许可、文件与应用程序关联、硬件属性描述、计算机性能记录、底层系统状态等信息。伴随着Windows系列操作系统的不断发展, 注册表逐渐存储了愈来愈多的信息, 其中包含用户帐号、URL地址、外接设备、文件操作历史等记录, 由此形成了一个信息丰富的证据库[1, 2]

越来越多的与电子数据取证相关的注册表表键被挖掘出来, 它们能够直接或间接地证明嫌疑人的犯罪行为, 从而为取证工作提供极大的帮助。如与最近操作过的文件对应的RecentDocs及OpenSaveMRU表键、与搜索项目相关的ACMru表键、与自动运行程序相关的Run及RunOnce表键、与挂载过的USB设备相关的MountedDevices及USBSTOR表键, 与可执行文件操作痕迹相关的UserAssist表键等。本文则针对之前关注较少的ShellNoRoam表键开展了充分研究, 证实该表键键值会随文件夹操作而变化, 并归纳总结出与特定行为相关的变化规律。

1 注册表中的ShellNoRoam表键

ShellNoRoam表键位于HKEY_USERS\< USERID> \Software\Microsoft\Windows\下, 这里的USERID指的是安全标识符(Security Identifiers, SID), Windows中的内部进程将引用账户的SID而不是账户的用户名或组名。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList表项下可以查看本地账户与SID的对应关系。图1所示即为本地账户LWH的SID为S-1-5-21-1343024091-57989841-1417001333-1006。

图1 注册表中的本地账户与SID关联信息

ShellNoRoam表键含有名为“ BagMRU Size” 的键值, 其默认值为0x00001388(十进制5000), 代表了该表键下所能描述的文件夹的最大数目。同时, 该表键下还含有名为“ BagMRU” 、“ Bags” 、“ DUIBags” 和“ MUICache” 等多个子键(见图2)。其中, BagMRU和Bags与文件夹信息密切相关。

图2 ShellNoRoam表键所存放的信息

BagMRU表键对应特定用户的“ 桌面” 文件夹, 其下子键使用数字命名。其中“ 0” 对应桌面上的“ 我的文档” 文件夹, “ 1” 对应“ 我的电脑” 文件夹, 其他数字则依次对应着桌面上的其余文件夹。除子键外, BagMRU表键目录下还含有名称为“ 0” 、“ 1” 、“ 2” 、“ MRUListEX” 和“ NodeSlots” 的键值。名称为数字序号的键值与子键对应, 其数据信息用于描述文件夹的名称及时间属性(下文详述)。基于MRUListEx可以解析出文件夹的访问次序, 该键值的数据中四字节一组存放文件夹对应的数字序号, 图3所示的最左侧0x00000004(小字节序)即表示“ 桌面” 文件夹下最近被访问过的是数字序号为“ 4” 的文件夹。“ NodeSlots” 在其他表键下名为“ NodeSlot” , 表示特定文件夹在Bags表键下对应的子键名称。

图3 BagMRU子键下的内容

双击名称为“ 4” 的键值, 即弹出如图4所示的二进制数值信息。其中偏移0x0E处的“ abcdef” 即为该文件夹的名称信息(GB2312编码); 头部偏移0x08处的“ EB 42 90 06” 表示文件的访问时间, 0x1E处的“ EB 42 90 06” 表示修改时间, 0x22处的“ EB 42 90 06” 表示创建时间; 偏移0x2A处的信息则为该文件名称的Unicode编码。需要指出的是, 上述时间属性均采用小字节序的32位DOS“ 日期+时间” 格式, 在实践中需考虑时区因素才能获取到真实的时间信息[3]

图4 BagMRU表键下特定键值的具体数据信息

点击图3所示的BagMRU表键下“ 1” 子键前的“ +” 标志, 即弹出如图5所示的画面信息。由于该子键对应“ 我的电脑” 文件夹, 因此会以树状结构展示磁盘中被访问的文件夹信息。该子键下名称为“ 1” 的键值即对应C盘, 而名称为“ 1” 的子键则对应C盘下的具体文件夹。

图5 BagMRU表键下的“ 1” 子键解析

当点击“ 树叶” 子键(对应文件夹下已无子文件夹或子文件夹未被访问)时, 其MRUListEx键值的数据内容会只有“ ff ff ff ff” (其他情况则以“ ff ff ff ff” 作为结束标志)。另外, 从图6的NodeSlot值还可以得出, “ 4” 子键对应的文件夹“ abcdef” 在Bags表键下对应的子键名称为“ 36” (0× 00000024)。

图6 NodeSlot键值解析

Bags表键由以数字序号命名的子键组成, 每个子键都对应特定文件夹, 其下含有一名为“ Shell” 的项目用于存储与文件夹相关的设置信息, 如窗口位置、窗口大小、图标排列方式等。依据BagMRU表键获取到特定文件夹在Bags表键下对应的数字序号后, 即可在Bags表键中定位相应子键, 进而查看文件夹窗口信息。图7所示即为桌面目录下的“ abcdef” 文件夹在Bags表键下的对应数据。

图7 Bags表键解析

2 ShellNoRoam表键随文件夹操作行为的变化规则

对于直接位于“ 桌面” 上的文件夹, 如果其在BagMRU表键中已有对应子键, 那么无论是“ 打开” 还是“ 关闭” 操作, 系统均会自动定位到相应键值, 并更新MRUListEx键值所存储的访问序列, 将被操作文件的数字序号存放于数据区域的最左侧, 原有内容顺次右移。同时会把文件夹的展示方式信息写入到Bags表键的对应键值中。

对于未直接位于“ 桌面” 上的文件夹(如C盘下的Windows文件夹), 如果其在BagMRU表键中已有对应子键, “ 打开” 或“ 关闭” 操作除了会更新文件夹对应的MRUListEx键值和展示方式信息外, 还会依次设置该文件夹的“ 祖先” 文件夹对应的MRUListEx键值, 标识其为对应子键下最近被访问过的文件夹。

如果被操作的文件在BagMRU表键中尚未有对应子键, 那么对于直接位于“ 桌面” 上的文件夹, “ 打开” 操作并不会创建对应的子键。但是对于未直接位于“ 桌面” 上的文件夹, “ 打开” 操作虽然不会创建对应子键, 却会更新被操作文件夹的“ 祖先” 文件夹所对应的MRUListEx键值(如果存在), 标识其为对应子键下最近被访问过的文件夹。

关闭文件夹行为会使被操作文件夹在BagMRU表键中创建对应子键(未有对应子键情况下), 无论其存放位置在何处。系统在该文件夹的父文件夹所对应的子键下创建对应项目(如父文件夹尚未有对应子键, 则自动创建父文件夹的子键), 并将文件夹的名称与时间属性填入相应键值中, 之后依次更新该文件夹的“ 祖先” 文件夹的MRUListEx访问序列。

删除文件夹行为只会更新MRUListEx访问序列, 并不会造成BagMRU表键下的对应子键被删除。删除文件夹后, 如果在原位置新生成一同名文件夹, 则该文件夹会继承原文件夹在ShellNoRoam表键下的项目, 创建时间等时间属性并不被更新[4]

3 案例分析

某年3月, 某科技公司负责人赵某报案, 称该公司员工袁某在离职前将公司重要技术文件越权获取至移动存储介质中, 并携带出公司, 出售给公司重要竞争对手, 导致该公司蒙受了巨大经济损失。取证人员在对袁某曾使用的公司计算机进行调查时, 基于注册表中的ShellNoRoam表键信息发现, C盘用户桌面文件夹下曾经存放有名为“ Nuclear Power Project” 的文件夹(见图8), 但已被彻底删除。同时, 通过键值数据内容分析得出该文件夹的创建时间为某年3月15日8时06分18秒。

图8 桌面上的“ Nuclear Power Project” 文件夹信息

利用ShellNoRoam表键下的BagMRU子键分析发现, 该计算机有过一名为“ E” 的分区, 并且在该分区下也存在有“ Nuclear Power Project” 文件夹, 其创建时间为某年3月15日10时25分02秒(见图9)。但事实上, 袁某的公司计算机硬盘只划分了“ C” 分区, 并无“ E” 分区。因此怀疑该计算机曾经挂载过移动存储介质。

图9 E分区下的“ Nuclear Power Project” 文件夹信息

使用USB设备查看工具获知, 该计算机曾于某年3月15日10时16分55秒挂载过品牌为Aigo的移动存储设备, 其序列号为“ 19424784” (见图10)。通过搜查袁某住所, 取证人员寻找到一块Aigo U盘。经检验, 该U盘序列号为“ 19424784” , 并在其中发现了“ Nuclear Power Project” 文件夹, 该文件夹中包含有科技公司的重要技术文件, 从而证明了袁某曾使用私人移动存储介质连接公司计算机, 并非法获取重要技术文件。在强有力的证据链面前, 袁某对自己的犯罪事实供认不讳。

图10 使用USB设备查看工具获知移动存储介质信息

ShellNoRoam表键信息存储在Ntuser.dat文件中(Windows XP环境下存放路径为%SystemDrive%\Documents and Settings\用户名\)。因此, 当针对送检介质中注册表文件进行离线分析时, 需要将Ntuser.dat文件导入到注册表脱机查看工具中, 之后才能使用本文所描述的方法进行分析。另外, 由于Windows操作系统为每个用户账号均设置有Ntuser.dat文件, 因此基于ShellNoRoam表键分析出的文件夹操作行为可以与特定用户相对应。需要指出的是, Win7操作系统的注册表中不再包含ShellNoRoam表键, 而只设置了Shell表键。实验证明, Shell表键用于描述远程文件夹的操作行为, 其分析方法与ShellNoRoam表键相同。

The authors have declared that no competing interests exist.

参考文献
[1] 罗文华. CMD命令执行记录调查方法研究[J]. 刑事技术, 2013(1): 31-34. [本文引用:1]
[2] Carvey H. Windows forensic analysis[M]. US: Syngress, 2012: 134-156. [本文引用:1]
[3] Harlan C. The Windows Registry as a Forensic Resource[J]. Digital Investigation, 2005(2): 201-205. [本文引用:1]
[4] Yuand ong Zhu, Pavel Gladyshev. Using shellbag information to reconstruct user activities[J]. Digital Investigation, 2009(6): 69-77. [本文引用:1]