学习如何使用ProcMon收集文件系统日志,排查使用文档加密遇到的问题。
开始
ProcMon是适用于 Windows 的高级监视工具,可显示实时文件系统、注册表和进程/线程活动。访问 Process Monitor – Sysinternals | Microsoft Learn 下载最新版本的ProcMon。使用管理员权限,在64位操作系统上运行ProcMon64.exe,在32位操作系统上运行ProcMon.exe。此外,初次使用ProcMon时,会监控所有事件(文件系统、注册表、网络、进程\线程等),这里我们只介绍观察文件系统的行为。因此,点击关闭红框中的按钮,只开启绿框中的按钮(文件系统)
基础操作
菜单栏中,文件菜单(File)里有一些非常有用的基础操作:
Capture Events – 你可以通过这个菜单来启用或停止监控行为;
Save… – 当你完成事件捕获后,你可以通过这个菜单来保存ProcMon日志(.PML),以提供给我们分析;
Open… – 打开一个ProcMon日志文件;
此外,还有几个快捷键也经常用得到:
CTRL+X – 清空当前展示的事件;
CTRL+L – 打开筛选器;
筛选器
筛选器是ProcMon的一个强大的特性。你可以通过筛选器从大量的事件中,筛选出你感兴趣的事件。
比如,你可以添加以下条件:
ProcessName is winword.exe then include
Path contain desktop then include
那么,就会展示Word操作文件路径中包含 “desktop” 字符串的事件。常用的属性有:PID(进程ID)、Process Name(进程名称)、Path(文件路径)等。当然,你也可以选择排除(exclude)符合特定条件的事件。
调整过滤器高度(Altitude)
ProcMon捕获文件系统事件是通过将一个文件过滤驱动插入到操作系统的文件系统过滤栈上实现的。简单来说,你可以理解操作系统中有很多不同作用的文件过滤驱动(比如:杀毒软件、加密软件等),他们是按照一个高度(Altitude)属性进行排序。当一个应用程序执行文件系统的相关操作时,这些驱动被按照高度值从高到低的顺序进行调用。Ping32文档加密驱动位于FSFilter Encryption(140000-149999)组中,你可以理解是一个高度值适中的位置。详细的分组和高度值,可参考这篇文章Load order groups and altitudes for minifilter drivers – Windows drivers | Microsoft Learn
调整ProcMon的高度,可以决定ProcMon能捕获到什么样的事件。举个例子,如果ProcMon的高度高于Ping32文档加密驱动的高度,那么ProcMon可以观察到应用程序发送给Ping32的请求;如果ProcMon的高度低于Ping32的高度,那么ProcMon可以观察到Ping32发送给文件系统的行为。通常,ProcMon位于两个不同位置时捕获到的事件,对于我们分析问题都是非常重要的。
ProcMon的默认高度385200,高于Ping32位于的FSFilter Encryption(140000-149999)组。因此,当你使用ProcMon的默认高度捕获了一些事件后,你还需要将ProcMon的高度调到Ping32下面,再次捕获一些事件。这就需要你来调整ProcMon的高度。你可以通过下方的注册表位置,修改Altitude,然后重新运行ProcMon.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance
帮助我们收集ProcMon日志
当我们需要获取ProcMon日志,分析一个特定问题时,请按照以下步骤操作:
Process Name is System
Operation begins with IRP_MJ_
Operation begins with FASTIO_
Result begins with FAST IO
最后,将两次捕获到的日志,提供给我们的工作人员。