TL;DR. 构建一条融合了 ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon 的时间线。用 ShimCache 来确定角色(路径),再用真正记录事件的来源给每一行补充时间戳。给每一个时间戳标注其来源语义。绝不要把"文件 mtime"和"进程启动"折叠进同一列。
程序执行时间线是 Windows IR 调查员产出的最有用的工件。做得好,它能跨多个数据来源讲出一个按时间排序的故事。做得差,它就会夸大证据,并被任何懂 mtime 的人质疑。下面是我以 ShimCache 为脊梁的工作流。
为什么 ShimCache 是个好脊梁
该缓存很少是任何单一字段最准确的来源,但作为时间线锚点有独到的优势:
- 它显式地携带文件路径。一些工件只有哈希或部分路径。
- 它捕获了 Windows 仅仅检查过的可执行文件,因此包含了那些短暂运行后又被删除的二进制(Prefetch 和 BAM 可能错过)。
- 它能在很多清除其他工件的反取证尝试中幸存下来,但有重要的告诫。
用 ShimCache 来定义时间线中的角色阵容。然后用佐证工件来丰富每一行,为它们分配可靠的时间。
要融合的数据源
一条完整的程序执行时间线至少要从以下五个来源拉数据:
| 来源 | 它给行带来的内容 |
|---|---|
| ShimCache | 路径 + 文件 mtime |
| AmCache | SHA-1、文件大小、publisher、安装时间戳、首次运行时间戳 |
| Prefetch | 进程启动时间(最多最近 8 次)、加载的模块 |
| BAM/DAM | Win10/11 上每个用户的"最后执行"时间戳 |
| Security / Sysmon | 带命令行、父进程、用户的进程创建事件 |
背景见 程序执行工件参考。在较大的案件中,再纳入 SRUM 用于网络与资源使用、USN journal 用于文件活动、LNK 文件 与 跳转列表 用于 shell 历史。
可重现的工作流
- 采集工件。 带事务日志的 SYSTEM hive、带
.LOG1和.LOG2的Amcache.hve、C:\Windows\Prefetch\*.pf、导出的 Security 事件日志,若有则附带 Sysmon 日志、每个用户的 NTUSER.DAT。采集指南 具体介绍了 SYSTEM hive。 - 将每一份解析为规范化表。 离线工作用 Eric Zimmerman 套件(
AppCompatCacheParser、AmcacheParser、PECmd),ShimCache 这部分可在浏览器中用 Shimcache Parser 处理。 - 按 (path, 可选 SHA-1) 进行融合。 连接键是文件路径,AmCache 的 SHA-1 作为辅助信号。注意大小写差异和路径规范化(
\??\C:\vsC:\)。 - 给每个时间戳标注其来源语义。 不要把"AmCache install_date"和"Prefetch run_time"合并进一列。它们回答的是不同的问题。让它们相邻但保持独立。
- 渲染到能处理逐行来源归属的工具中。 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 上运行了什么?")胜过一份大而归属薄弱的时间线。恶意软件狩猎工作流 帮助你挑出那个窗口。
延伸阅读
- Plaso / log2timeline:消费 ShimCache、AmCache、Prefetch 以及数十种其他 Windows 工件的开源时间线引擎。
- Eric Zimmerman 工具:参考 parser 以及 Timeline Explorer。
- Velociraptor
Windows.Registry.AppCompatCache:规模化采集。