从 SYSTEM hive 构建程序执行时间线

约 2 分钟阅读

TL;DR. 构建一条融合了 ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon 的时间线。用 ShimCache 来确定角色(路径),再用真正记录事件的来源给每一行补充时间戳。给每一个时间戳标注其来源语义。绝不要把"文件 mtime"和"进程启动"折叠进同一列。

程序执行时间线是 Windows IR 调查员产出的最有用的工件。做得好,它能跨多个数据来源讲出一个按时间排序的故事。做得差,它就会夸大证据,并被任何懂 mtime 的人质疑。下面是我以 ShimCache 为脊梁的工作流。

为什么 ShimCache 是个好脊梁

该缓存很少是任何单一字段最准确的来源,但作为时间线锚点有独到的优势:

  • 它显式地携带文件路径。一些工件只有哈希或部分路径。
  • 它捕获了 Windows 仅仅检查过的可执行文件,因此包含了那些短暂运行后又被删除的二进制(Prefetch 和 BAM 可能错过)。
  • 它能在很多清除其他工件的反取证尝试中幸存下来,但有重要的告诫。

用 ShimCache 来定义时间线中的角色阵容。然后用佐证工件来丰富每一行,为它们分配可靠的时间。

要融合的数据源

一条完整的程序执行时间线至少要从以下五个来源拉数据:

来源它给行带来的内容
ShimCache路径 + 文件 mtime
AmCacheSHA-1、文件大小、publisher、安装时间戳、首次运行时间戳
Prefetch进程启动时间(最多最近 8 次)、加载的模块
BAM/DAMWin10/11 上每个用户的"最后执行"时间戳
Security / Sysmon带命令行、父进程、用户的进程创建事件

背景见 程序执行工件参考。在较大的案件中,再纳入 SRUM 用于网络与资源使用、USN journal 用于文件活动、LNK 文件 与 跳转列表 用于 shell 历史。

可重现的工作流

  1. 采集工件。 带事务日志的 SYSTEM hive、带 .LOG1 和 .LOG2 的 Amcache.hve、C:\Windows\Prefetch\*.pf、导出的 Security 事件日志,若有则附带 Sysmon 日志、每个用户的 NTUSER.DAT。采集指南 具体介绍了 SYSTEM hive。
  2. 将每一份解析为规范化表。 离线工作用 Eric Zimmerman 套件(AppCompatCacheParser、AmcacheParser、PECmd),ShimCache 这部分可在浏览器中用 Shimcache Parser 处理。
  3. 按 (path, 可选 SHA-1) 进行融合。 连接键是文件路径,AmCache 的 SHA-1 作为辅助信号。注意大小写差异和路径规范化(\??\C:\ vs C:\)。
  4. 给每个时间戳标注其来源语义。 不要把"AmCache install_date"和"Prefetch run_time"合并进一列。它们回答的是不同的问题。让它们相邻但保持独立。
  5. 渲染到能处理逐行来源归属的工具中。 Eric Zimmerman 的 Timeline Explorer (TLE) 和 Plaso / log2timeline 都做得不错。较小的案件用电子表格里的 CSV 就够了。

好的样子

一条最终时间线里站得住脚的行:

2026-04-12 09:14:33 UTC  C:\Users\alice\AppData\Local\Temp\setup.exe
  ShimCache mtime: 2026-04-12 09:14:30 UTC
  AmCache       : SHA-1 a3b8c9..., signer "Acme Updates", install 2026-04-12 09:14:33
  Prefetch      : last run 2026-04-12 09:15:01 UTC (1 execution)
  Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, parent PID 1234 (svchost.exe)

每个时间戳都有出处,这一行经得起挑战。反之("ShimCache 显示 setup.exe 于 09:14:33 运行")把文件 mtime 与执行时间混淆,正是会让报告被驳回的那类断言。见 执行证明。

来源不一致时

冲突也是数据。

  • ShimCache mtime ≠ Prefetch 首次运行。 正常。它们衡量不同的东西。两者都记下来。不要二选一。
  • AmCache 说运行过,但 ShimCache 对该文件是空的。 可能的原因:反取证清除(检测模式)、条目被 1,024 上限挤出去、二进制在上次 clean shutdown 之后才运行(仍仅在内存中,拉一份 RAM dump)。
  • Prefetch 缺席。 服务器 SKU 和针对 SSD 调优的主机经常禁用 Prefetch。退回到 AmCache 加 BAM。
  • EVTX Security 4688 有程序名但没有命令行。 命令行审计被关掉了。有用但有限。EVTX parser 介绍了审计策略的前置条件。

在合适的地方停下

时间线不必完整也能有价值。一个严谨构造的聚焦窗口("2026-04-11 14:00 到 18:00 之间,主机 X 上运行了什么?")胜过一份大而归属薄弱的时间线。恶意软件狩猎工作流 帮助你挑出那个窗口。

延伸阅读

相关文章