Windows环境下可执行文件操作痕迹分析方法
罗文华
中国刑事警察学院计算机犯罪侦查系,辽宁沈阳 110035
摘要
关键词: 可执行文件; 操作痕迹; 运行次数; 最后运行时间; Prefetch文件夹; UserAssist表键
中图分类号:DF793 文献标志码:B 文章编号:1008-3650(2013)04-0061-03

电子数据取证(特别是针对恶意程序进行调查)实践中, 可执行文件操作信息在揭示犯罪分子行为细节方面发挥着重要作用。通常, 可执行文件操作痕迹涵盖可执行文件名称、功能、位置、运行次数、运行时间、操作用户等多种信息。依靠Windows操作系统自带的系统命令或工具无法深入完整的挖掘出上述信息, 因此针对此类痕迹分析方法的研究具有非常积极而重要的意义。

1 可执行文件操作痕迹分析
1.1 基于文件(夹)信息分析操作痕迹

从Windows XP开始, Windows操作系统开始使用“ 预读” (prefetching)技术来改进系统性能。Windows XP、2003和7默认执行启动预读, XP和7还会默认启动应用程序预读。所谓预读, 是指系统缓存管理器在系统启动过程中以及在各种应用程序被导入的时候, 监视数据在磁盘和RAM之间以及在RAM和虚拟内存之间的移动。当缓存管理器监视这些事件时, 它会构造每个应用程序或进程引用的所有文件的映射。这些映射被保存到\Windows\Prefetch文件夹扩展名为.pf的文件中, 同时将文件名设置为“ 应用程序名称-程序路径哈希值” (见图1)。在这些pf映射文件被创建之后, 缓存管理器将在系统启动以及导入应用程序时使用它们以提高效率。更明确地, 缓存管理器会拦截将被导入的每一个进程或应用程序并且查看\Windows\Prefetch文件夹以确定是否存在相应的映射。如果存在, 缓存管理器将指派文件系统立即访问映射中的目录或文件引用; 然后缓存管理器将警告内存管理器并告诉它使用映射文件中的信息向内存中导入数据或代码。当这个预读操作完成之后, 缓存管理器将允许应用程序或进程继续导入。在应用程序或进程这样做的过程中, 它会发现需要的大部分文件和数据已经存在于内存中, 因此减少了磁盘访问量并且使得应用程序或进程导入或响应得更迅速。为了进一步提高这个预读操作的效率, Windows 操作系统会定期地分析映射文件的内容, 编辑一个目录和文件列表, 以导入的顺序组织它们, 并且将这些信息保存在\Windows\Prefetch文件夹下名为Layout.ini的文件中。然后它会安排磁盘碎片整理程序定期运行并且使用Layout.ini文件中的信息以重新部署所有目录文件。

图1 C:\Windows\Prefetch文件夹下的内容

预读由注册表键HKLM\SYSTEM\ControlSet00x\Control\Session Manager\Memory Management\PrefetchParameters控制, 该键下有一名为EnablePrefetcher的子键(见图2), 用于定义预读的方式, 其中0表示预读被禁止; 1和2分别代表程序和启动预读启用; 3则表示程序和启动预读都启用。

图2 与预读相关的注册表键

Prefetch目录中.pf文件对于调查是极其有用的。文件偏移90HB处4字节内容为该程序被运行的次数, 偏移78HB处的8字节内容对应程序最后运行的时间, 该值以UTC(Universal Time Coordinated, 协调世界时)形式存储。图3所示为IEXPLORE.EXE-27122324.pf文件的十六进制编码信息, 偏移78H处的“ 01 CD C2 D7 95 60 CB 68” (小字节序, 下同)即为IEXPLORE.EXE程序最后一次运行时间, 利用数据解释器解析可知其为2012年11月15日02时19分04秒。由于该时间采用UTC格式, 因此若要获得本地时间, 还需在解析时间基础上加上本地时区(以北京时间为例, 该运行时间实际为2012年11月15日10时19分04秒); 另外从偏移90处“ 00 00 00 03” 可知该程序运行的次数为3。

图3 IEXPLORE.EXE-27122324.pf文件信息

必须指出的是, 实验发现计算机系统运行一段时间之后, 由于.pf文件中已经存储了用户常用的应用程序引用映射, 新的可执行文件操作可能不会改变相应.pf文件中的内容, 此时.pf文件中的最后运行时间和运行次数信息便不再可靠。鉴于操作系统安装后, 杀毒软件往往会自动升级, 用户也通常选择在第一时间使用IE浏览器或即时通讯工具等软件, 因此在用户未删除过Prefetch目录内容的情况下, 可以依据这些最为常用软件映射文件的创建时间推测操作系统大致的安装时间。然后再依据最后运行时间与系统安装时间的跨度, 判断其是否可靠。另外, 运行程序的路径及所需相关文件信息以Unicode编码格式存储在.pf文件中, 即使用户安装、运行特定程序后将其删除, 痕迹也会留在Prefetch目录中。图4所示为可用于映射文件调查的WinPrefetchView软件运行界面, 该软件能够解析出最后运行时间、程序存放路径、映射文件创建时间、所需相关文件等信息, 为取证分析提供极大的方便。

图4 WinPrefetchView软件功能截图

除了Prefetch文件, 基于Rencent文件(Windows XP环境下存放路径为%SystemDrive%\Documents and Settings\用户名\, Win7下则为%SystemDrive%\User\用户名\)也可以间接解析出可执行文件操作信息。Rencent文件夹中存放有对应用户最近一段时间内访问过文件的链接(见图5), “ 开始” → “ 我最近的文档” (Win7中为“ 最近使用的项目” )操作会显示该文件夹中的部分信息。直观上该文件夹只包含被访问文件的名称与类型信息, 但通过文件类型可关联其对应的可执行程序。实践中可利用该文件夹隐含的最近操作过的可执行程序信息验证Prefetch文件中的最后运行时间是否可靠。

图5 C:\User\Administrator\Recent文件夹下的内容

1.2 基于注册表信息分析操作痕迹

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist下通常有两个GUID子键:5E6AB780-7743-11CF-A12B-00AA004 AE837和75048700-EF1F-11D0-9888-006097DEACF9。前一个子键指向Internet工具条(%SystemRoot%\system32\browseui.dll), 后一个则指向活动桌面(%SystemRoot%\system32\SHELL32.dll)。Internet工具条主要记录URL站点信息, 而活动桌面则记录详细的用户活动, 包括可执行文件操作信息。

图6可以看出, UserAssist表键包含的活动桌面信息无法直接理解。实际上, 该表键下的注册表项均采用Rot-13加密(一种编码算法, 将26个字母按顺序分成前后两组, 每组13个, 加密或解密时将字母转换为另一组对应位置的字母即可)。解密后的注册表项名指向可执行程序, 键值数据一般为16字节, 第5至8字节表示该程序曾经的运行次数, 第9至16字节表示程序的最后运行时间。图7所示某子键为“ Q:\XX软件\gbby\Gbbyf\Nhgbehaf\nhgbehafp.rkr” , 通过Rot-13解码可知该子键初始为“ D:\XX软件\tool\Tools\Autoruns\autorunsc.exe” , 键值信息中的“ 07 00 00 00” 表示该程序曾经运行了2次(运行次数从5开始计数), “ F0 9C 97 34 4B AB CC 01” 则表明最后运行时间为2011年11月25日16时21分18秒(解析时间加上本地时区)。

图6 UserAssist表键下的活动桌面信息

图7 UserAssist表键值下包含的运行次数与最后运行时间信息

利用UserAssistView工具能够自动完成UserAssist表键信息的解码。从图8可以看出, 解码后的注册表信息大部分以UEME_开始, 后接RUNPATH(指向文件的绝对路径, 由双击可执行程序图标或“ 开始” → “ 运行” 中键入应用程序名称等操作产生)、RUNPIDL(由“ 开始” → “ 我最近的文档” 选择LNK文件操作产生)、RUNCPL(指向控制面板程序)等标志。其中出现的“ UEME_RUNCPL:timedate.cpl” 字样, 说明控制面板中的“ 日期和时间” 程序被执行过, 可结合该程序的最后运行时间, 判断相关文件的时间属性是否真实。另外, 实验表明UserAssist表键下的程序最后运行时间比Prefetch文件中的可靠得多, 但仍有个别程序(特别是IEXPLORE.EXE)表现出更新不及时的现象, 处理具体案件时要特别注意。

图8 利用UserAssistView工具实现UserAssist表键信息解码

与HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU键值类似, UserAssist键值也能够提供通过“ 开始” → “ 运行” 方式执行的命令信息。RunMRU键值中只含有命令内容和执行次序信息(次序信息并不完全准确, 如执行MRUList列表中已有的命令, Windows并不会改写MRUList列表), UserAssist键值则还含有运行次数和运行时间信息。在电脑安全或计算机犯罪事件中, 入侵者或犯罪分子往往倾向于使用Windows操作系统提供的“ 开始” → “ 运行” 功能执行其预先准备的命令行式程序, 以达到提升权限进而窃取信息的目的。此种情况下, 可综合UserAssist与RunMRU键值进行分析, 达到深度挖掘操作痕迹的目的。还有一类可执行程序也需要特别关注, 即系统自动运行的程序。UserAssist键值中并不含有此类信息, 但可通过HKLM\Software\Microsoft\Windows\CurrentVersion\下的Run、RunOnce、RunOnceEx、RunServices、RunServicesOnce等表键获知。图9所示为Run表键下的自启动程序。

图9 HKLM\Software\Microsoft\Windows\CurrentVersion\Run表键下的自启动程序信息

需要说明的是, 前文提到的UserAssistView工具只适用于在线调查, 当针对送检介质中注册表文件进行离线分析时, 需要将注册表文件导入到注册表脱机查看工具中, 之后才能使用本文所描述的方法进行分析。笔者在此推荐一款注册表脱机查看工具MiTec Windows Registry Recobery, 该软件能够用于注册表文件的脱机查看与分析(见图10), 操作步骤简单, 并可从互联网上下载得到。

图10 MiTec Windows Registry Recobery软件功能截图

基于可执行文件的最后运行时间, 结合日志文件中的用户登录记录, 可进一步确定该操作可能的执行用户。需要指出的是, 相对于文件(夹), 基于注册表中的UserAssist键值可以解析出更为丰富准确的可执行文件操作痕迹信息(特别是最后运行时间)。因此, 实践中应以该键值分析为主, 其他信息可作为辅助佐证之用。

另外, 本文只讨论了硬盘介质中可执行文件操作痕迹的可能存放地点及其分析方法, 未涉及内存介质。可以预知的是, 内存中有关可执行文件的信息会较硬盘更为多样详尽, 因此研究针对内存对象的深入全面且行之有效的分析方法将是课题组未来的主要方向。

The authors have declared that no competing interests exist.

参考文献
[1] 罗威丽, 杨永川. 电子数据司法鉴定工具可靠性评估研究[J]. 刑事技术, 2011(2): 23-27. [本文引用:1]
[2] Harlan Carvey. Windows取证分析[M]. 北京: 科学出版社, 2009: 111-154. [本文引用:1]
[3] 杜威, 彭建新, 毛莉. 网络电子证据取证技术综述[J]. 刑事技术, 2011(2): 26-28. [本文引用:1]
[4] 罗文华, 胡振辽, 马贺男. 利用Windows注册表进行电子数据取证[J]. 中国刑警学院学报, 2008(4): 23-25. [本文引用:1]
[5] 陈剑. 电子物证特性研究[J]. 刑事技术, 2009(4): 38-40. [本文引用:1]