当前位置: 首页 > 技术干货 > Windows 取证之ShellBags

Windows 取证之ShellBags

发表于:2021-07-07 17:36 作者: 合天实验室 阅读数(368人)

Windows 取证之ShellBags   相关实验:内存镜像取证   

(了解常用的内存镜像取证工具的使用,包括Dumplt、FTK Imager、Belkasoft RAM Capture和Dump镜像内存提取工具。)


0x0、概述

ShellBags是一组用来记录文件夹(包括挂载网络驱动器文件夹和挂载设备的文件夹)的名称、大小、图标、视图、位置的注册表项,或称为BagMRU。每次对文件夹的操作,ShellBags的信息都会更新,而且包含时间戳信息。是Windows系统改善用户体验的功能之一。即使删除文件夹后,ShellBags仍然会保留文件夹的信息。因此可以用来揭示用户的活动。


0x1、ShellBags的用途和取证中的价值

微软从Windows 7开始引入ShellBags,虽然在Windows xp中也存在,但是其文件格式发生了很大的改变。并在后续的系统上一直使用。ShellBags用来保存用户浏览文件夹时的偏好信息,比如文件夹的排列方式,文件夹显示图标的大小等,比如将文件夹的显示方式从"大图标"模式改为"详细信息模式",ShellBags会立即创建或更新记录,当你打开、关闭或者右键单击、或者重命名文件夹时,也会创建或更新ShellBags记录。这意味着:


1、如果在Windows ShellBags记录了某个文件夹,那么表示它一定在某个时间出现过在该系统中,包括压缩文件在内的本地文件系统、网络位置和外接设备(如U盘、移动硬盘等)上的文件夹,即使它现在已经不存在了。


2、由于这些对文件夹的操作和查看首选项与该用户的注册表配置单元(registry hives)相关联。所以我们可以将特定用户和特定的文件夹相关联,甚至,还可以从ShellBags包含的MAC时间戳中获取文件夹的访问时间信息。



0x2、ShellBags的存储

在Windows XP中,存储在NTUSER.dat文件中,在系统注册表中的位置分别是:


- 记录网络路径文件夹访问的记录在:\Software\Microsoft\Windows\Shell

- 记录本地文件夹访问的记录在:\Software\Microsoft\Windows\ShellNoRoam

- 可移动存储器文件夹访问的记录在:\Software\Microsoft\Windows\StreamMRU


但是从Windows 7开始,已经发生了很大的变化,Windows 7新增了一个用户特定的注册表配置单元:USRCLASS.dat。这个配置单元支持新的用户访问控制(UAC)和强制访问控制完整性级别。它用于记录来自无权写入标准注册表配置单元的用户进程的配置信息。所以如果要获取完整的ShellBags信息,需要为每个用户解析NTUSER.dat 和 USRCLASS.dat这两个文件。这些文件可以在%userprofile%、%userprofile%\AppData\Local\Microsoft\Windows路径中找到。

1.png

image-20210706100611312.png


具体的注册表位置为:


记录最近通过资源管理器访问的文件夹的信息:


USRCLASS.DAT:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU


USRCLASS.DAT:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

image-20210706101629760.png


image-20210706101651436.png

记录从桌面访问的文件夹信息:


NTUSER.DAT:HKCU\Software\Microsoft\Windows\Shell\BagMRU


NTUSER.DAT:HKCU\Software\Microsoft\Windows\Shell\Bags

image-20210706101629760.png

image-20210706101651436.png


还有其他一些注册表位置:(因为系统版本不同,可能有一些附加的注册表项目)

NTUSER.DAT:HKCU\Software\Microsoft\Windows\ShellNoRoam\BagMRU

NTUSER.DAT:HKCU\Software\Microsoft\Windows\ShellNoRoam\Bags

USRCLASS.DAT:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\ShellNoRoam\BagMRU

USRCLASS.DAT:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\ShellNoRoam\Bags

USRCLASS.DAT:HKCU\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU

USRCLASS.DAT:HKCU\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\Bags

可以发现ShellBags的数据主要存在两个注册表键值中,分别是BagMRU和Bags中。


BagMRU:用于记录文件夹名称和文件夹路径


Bags:记录文件夹的视图配置,比如窗口的大小,位置,排序方式等视图模式信息。


0x3、ShellBags的结构分析


当用户通过Windows资源管理器浏览文件系统的时,首次打开个文件夹时,系统会创建ShellBags条目。每个文件夹都有一个编号,编号从0开始记录。当打开子路径,会在相应的ShellBags条目右侧添加一个条目,并分配一个编号,编号每次递增1。


image-20210706122110446.png


当用户对文件夹进行操作,ShellBag条目会立即更新。这意味着相应的注册表项最后修改时间可能也是最后操作文件夹的时间。


BagMRU键值:


ShellBags的根目录,它的子键包含了ShellBags子条目和子目录。由数字编号0,1,2...组成。


image-20210706124644311.png


而他们的二进制类型的值项(value name)记录着文件夹的路径和文件夹的长短名称。因此,我们可以根据这个结构还原文件系统的目录结构。


我们可以通过Nirsoft的注册表修改监视工具和Shell bags view工具结合注册表查看其创建和变化过程。


首先在C盘下创建一个shellbagstest的文件夹


image-20210706141321765.png


查看注册表修改:


image-20210706141605788.png


在注册表中查看:


image-20210706143116540.png


可以看到HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU\2\0键的值项"11"的内容记录了文件夹的名称,并与其子键"11"对应。

image-20210706143708173.png


HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU\2\0\11键的NodeSlot项值即为HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags键中的ID(Bags键的子健名称)。



还有一个MRUListEx,这个记录了上次访问了哪个文件夹。根据这个可以解析出文件夹的访问次序。当对应文件夹下没有子文件夹或者子文件夹未被访问过,其值为ff ff ff ff。


image-20210706150009350.png



当我们进入这个文件夹并添加一个子文件夹后,再次查看注册表修改:

image-20210706150711280.png



可以看到新增了多个键值项,MRUListEx也发生了变化。其中"1"为子文件夹"subdir"。而"0"是新建文件夹时候的"新建文件夹"。


image-20210706152333410.png


关于MRUListEx值项


它是记录文件夹访问次序的,每4个字节记录一个文件夹的数字编号,新增访问记录,原记录往右边移。拿刚刚这个举例:


image-20210706153118250.png


最左侧0x00000001表示最近访问过的是shellbagstest文件夹下数字序号为"1"的文件夹,也就是subdir这个文件夹。如果再增加一个文件夹subdir2:


image-20210706153510935.png


MRUListEX的值则变成如下数值:


image-20210706153617752.png


其父键的MRUListEX也会更新:

image-20210706154023251.png


Bags键值:


Bags键值由数字命名的子健组成,每个子健的数字编号对应特定的文件夹。其下包含有一个Shell 的键用于存储与文件夹相关的视图配置信息,比如位置、大小、排序方式等。所以我们可以根据BagMRU键值获得特定文件夹在Bags键下对应的数字序号后, 即可Bags键中定位相应子键, 进而查看文件夹的视图配置信息。


比如刚刚我们创建的文件夹:

image-20210706155648314.png


0x4、取证实战


案情:在之前的调查(Windows 取证之注册表)中,我们证明了Theon趁Podrick不在的时候把U盘(2020年2月3日下午12点15分-12点45分之间)插进了他的电脑。Podrick称他电脑的一些文件/文件夹发生的更改。他认为是Theon干的。Podrick希望我们帮忙找出是哪些文件发生了更改。主要关注桌面上被清空的Projects文件夹。


提交Projects文件夹被Theon重新创建的时间。


提供给我们的文件包括NTUSER.DAT 和 UsrClass.dat。


image-20210706163014809.png


我们可以借助ShellBags解析工具,如Shell Bag Explorer:https://f001.backblazeb2.com/file/EricZimmermanTools/ShellBagsExplorer.zip

image-20210706163403784.png





使用工具加载USRCLASS.DAT文件

image-20210706163808294.png


找到Projects文件夹,可以看到文件夹的创建时间是12:41:26 ,这个时间点正好是Podrick不在电脑旁边的时间。结合之前的调查,即可确定这个时间就是文件夹重新创建的时间。

image-20210706163936490.png


参考资料:


基于注册表中的ShellNo-Roam表键解析文件夹操作行为:http://www.xsjs-cifs.com/article/2014/1008-3650-39-3-42.html


Computer Forensic Artifacts: Windows 7 Shellbags : https://www.sans.org/blog/computer-forensic-artifacts-windows-7-shellbags/


Explaining the Bags/BagMRU registry tree (trying) - Tielen Consultancy :https://www.jeroentielen.nl/explaining-the-bagsbagmru-registry-tree-trying/