代码改变世界

Process Monitor 学习笔记(5.2):事件模型与五大类操作(文档/注册表/进程/网络/Profiling

2025-11-09 10:38  tlnshuju  阅读(25)  评论(0)    收藏  举报

Process Monitor 学习笔记(5.2):事件模型与五大类操控(档案/注册表/进程/网络/Profiling)

本篇聚焦 “一条 Procmon 事件到底包含什么?”“五大类操作如何读懂与排障”。看懂这一节,你就能把海量日志“化噪为信”。


一、事件模型总览:一条事件 = 谁 + 何时 + 做了什么 + 在哪儿 + 结果 + 细节 + 证据

Procmon 把框架调用抽象为事件,核心字段建议这样理解/启用:

  • Time of Day / Relative Time:精确到微毫秒的时间戳 / 相对起点时间
  • Process Name / PID / TID:谁在执行(进程/线程)
  • Operation:执行了什么(如 CreateFile, RegSetValue, TCP Connect
  • Path:操作对象(记录/注册表键/网络端点/镜像路径等)
  • Result:Win32/NT 返回码(例:SUCCESS, ACCESS DENIED, NAME NOT FOUND
  • Detail关键信息宝库(Desired Access、ShareMode、Disposition、Length、Offset、重解析类型、目标端口等)
  • Category:事件分类(File System / Registry / Process / Network / Profiling …)
  • User / Session / Integrity:安全上下文(谁的会话、完整性级别)
  • Stack(User+Kernel)**:调用栈证据,定位“哪段代码触发了事件”的关键

建议列配置:勾选TID / Category / User / Integrity / Duration / Command Line / Company / Path,并在工具栏启用堆栈。当日志量很大时,先过滤再打开堆栈,可显著降压。


二、五大类操作如何读(含典型序列 & 常见坑)

1)文件(File System)

常见 Operation

  • CreateFileCloseFileReadFileWriteFileQueryInformationFile

  • SetRenameInformationFileSetDispositionInformationFile(删除/重命名)

  • DeviceIoControl(与设备/驱动交互)

  • 细节重点(在 Detail 字段)

    • Desired Access(所需权限:ReadData, WriteData, Execute, ReadAttributes …)
    • ShareMode(共享读/写/删,常见冲突根源)
    • DispositionOpen/Create/OpenIf/Overwrite/Supersede
    • Options/Attributes(同步/异步、目录/非目录等)
    • CreateResultCreated/Opened/Overwritten …)

典型序列

  • 打开读取:CreateFileQueryBasicInformationFileReadFile … → CloseFile
  • 写入/重命名/删除:CreateFile(含写权限/删除共享)→ SetDisposition… / SetRename…

易混淆返回码

  • NAME NOT FOUND路径末端不存在(文档/键名写错、搜索探测)
  • PATH NOT FOUND:中间某级目录不存在(部署/权限/挂载点问题)
  • SHARING VIOLATION:共享模式冲突(被他进程以不兼容的共享方式打开)
  • REPARSE:发生重解析(联接/符号链接/挂载点/兼容层重定向),继续看 Detail
  • BUFFER OVERFLOW:多为探测长度的预调用,不是错误

2)注册表(Registry)

常见 Operation

  • RegOpenKey / CreateKey / CloseKey
  • RegQueryValue / SetValue / EnumKey / EnumValue / DeleteValue

典型序列

  • 读配置:RegOpenKeyRegQueryValueCloseKey
  • 写配置:RegOpenKey/CreateKeyRegSetValueCloseKey

必看细节

  • Desired AccessQueryValue, SetValue, CreateSubKey, EnumerateSubKeys…)
  • WOW64 重定向:HKLM\Software(64 位) vs HKLM\Software\WOW6432Node(32 位)
  • UAC/权限:ACCESS DENIED 快速定位策略/ACL 问题
  • 虚拟化/兼容层否有重定向(同样依赖就是:遇到意外路径,请查看Detail/Stack

3)进程 / 线程(Process & Thread)

常见 Operation

  • Process Create / Process Exit(父子关系、命令行、映像路径)
  • Thread Create / Thread Exit
  • Load Image(模块/DLL 加载路径与签名)

实战要点

  • 找注入/加载Load Image + Stack可定位是谁触发某 DLL 加载
  • 定位启动慢:关注早期 Load Image、首次 CreateFile/RegOpenKey 失败重试
  • 完整性级别(Integrity):中低完整性进程访问受限位置会频繁 DENIED

4)网络(Network)

常见 Operation

  • TCP Connect / TCP Reconnect / TCP Disconnect
  • TCP Send / TCP Receive
  • UDP Send / UDP Receive

理解边界

  • Procmon 不是抓包器,不展示负载内容,但能看到连哪里是否成功
  • 结合 Detail 看本地/远端 IP:Port 与返回码(WSAE*/Win32 错误)。
  • 与防火墙/代理/证书验证疑问对照排查;必要时配合抓包工具。

5)Profiling(CPU 采样)

  • 以固定间隔对目标进程做调用栈采样,形成 Profiling 事件
  • 结合 Process Activity Summary / Stack Summary热点模块/函数
  • 适合定位“卡顿/高 CPU”趋势,抓取前先设好过滤并控制时长

温馨提示:采样 + 栈解析会增加开销;在大规模抓取前先在小窗口验证。


三、读懂一条“有价值”的事件(示例解剖)

示例:文件打开失败

Operation  : CreateFile
Path       : C:\ProgramData\Vendor\App\config.json
Result     : ACCESS DENIED
Detail     : Desired Access: Generic Read, Disposition: Open,
             ShareMode: Read, Write, Options: Non-Directory File,
             Attributes: n/a
Process    : App.exe (PID 1234)  Integrity: Medium  User: DOMAIN\User

如何解读

  1. ACCESS DENIED → 核心矛盾是权限
  2. Desired Access: Generic Read → 仅需“读”,却仍被拒
  3. 结合 Integrity/User否跨会话/跨账户访问共享数据?就是:
  4. Stack:谁发起?有没有安全产品/驱动在中途介入?
  5. 右键 Jump to Path / Permissions或直接检查该文件/父目录 ACL

四、过滤与高亮的通用套路(降噪 80%)

起手三板斧

  1. Process Name is <目标进程> → Include
  2. Category is (File System OR Registry)(按需加 Network/Process)
  3. 勾选 Drop Filtered EventsCtrl+X清屏后复现问题

高亮规则(建议)

  • Result contains DENIED|VIOLATION|NOT FOUND|TIMEOUT → 高亮
  • Operation begins with Query* → 可先 Exclude 减少噪音
  • Path begins with C:\Windows\Prefetch / 临时目录 → 先排除

五、栈(Stack)= 证据链

  • 调整符号服务器(Options → Configure Symbols),解码User/Kernel Stack
  • 从栈顶向下看,快速锁定问题模块(第三方驱动/安全产品/插件往往一眼识破)
  • Stack Summary聚合热点调用路径,适合“高 CPU/卡顿”归因

六、常见 Result 速查(便携清单)

Result意义/处置建议
SUCCESS正常;若性能差,看 Duration/Stack
ACCESS DENIED权限/策略/锁定;查 ACL、完整性、句柄占用
NAME NOT FOUND末级对象不存在;路径/文件名/键名错误或探测
PATH NOT FOUND中间目录缺失;部署/安装/重定向错误
SHARING VIOLATION共享模式冲突;找到“先占用者”并比对 ShareMode
REPARSE发生重解析;检查符号链接/联接点/兼容层
BUFFER OVERFLOW多为长度探测,非错误;可忽略
FAST IO DISALLOWED否影响性能就是走慢路径,非错误;关注

七、一步一招的“排障剧本”(可直接照做)

  1. 缩小范围:按进程/类别 Include →Drop Filtered Events
  2. 复现问题:短时间抓取,立即停止
  3. 定位失败:按 Result 排序/高亮,先看 DENIED/NOT FOUND/VIOLATION
  4. 读 Detail:权限/共享/重解析/Disposition
  5. 看栈否三方模块介入?就是:是谁触发?
  6. 对策:改 ACL/修部署/修路径/修共享;必要时与安全或驱动团队沟通
  7. 沉淀:保存 Filter/Column 布局为模板,团队复用

八、结语

理解事件模型与五大类操作,你就有了读懂 Procmon 的“通用语法”。
下一篇(5.3 过滤、强调与收藏:把 1000 万行变 100 行)将系统演示如何构建稳定可复用的过滤器与高亮规则,显著提升定位效率。