ShimCache 能否证明程序被执行过?

约 1 分钟阅读

TL;DR. 不能。ShimCache 条目只能证明 Windows 检查过 该文件 —— 通常但并非总是因为执行。Windows 10 / 11 已完全移除缓存内的执行标志。要证明执行,请用 Prefetch、AmCache 或进程创建事件(Security 4688 / Sysmon 1)来确认。

「ShimCache 里有就代表运行过」是事件响应中最常见的捷径之一 —— 也是错得足够多、足以让调查人员在法庭上被打脸的捷径之一。本文给出对「ShimCache 条目是否能证明程序被执行?」这一问题的严谨回答,并说明应当怎么做。

ShimCache 究竟记录什么

ShimCache(正式名称为 Application Compatibility Cache 或 AppCompatCache)记录 Windows 检查过 的可执行文件,通常是为了判断是否需要应用兼容性 shim。检查不等于执行。Windows 可能在以下情况下检查一个文件:

  • 用户双击该文件(多数情况下,但不总是,会导致执行),
  • 资源管理器枚举目录时检视该二进制文件,
  • 某个工具扫描文件系统(杀毒软件、索引器、安全代理),
  • 文件被通过右键「属性」或类似 shell 流程打开。

上述大多数情形与执行同时发生,但它们之间的联系是统计性的,而非逻辑性的。攻击者投放并立即删除却从未运行过的二进制文件,仍可能因为系统上的某个进程 碰过 它而出现在 ShimCache 中。

关键的 Windows 10 / 11 变化

在老版本的 Windows 中,ShimCache 条目带有 Executed 标志,二进制被执行时会被设置。这一标志被广泛当作「是否运行过?」的粗略信号。

到了 Windows 10 / 11,该标志被移除。现代 ShimCache 没有任何缓存内的标记能告诉你曾经发生过执行。所以即使你过去信任过该遗留标志,一旦进入现代 Windows,就必须停止依赖。

要了解现代 ShimCache 条目究竟暴露哪些字段,二进制格式参考 会逐个偏移地讲解。

如何确认执行

把 ShimCache 命中当作 假设,然后用真正记录执行的证据来佐证:

  • Prefetch (C:\Windows\Prefetch\*.pf) —— 进程启动时写入,跨重启保留。匹配的 Prefetch 文件是执行的强证据。
  • AmCache (Amcache.hve) —— 独立的注册表配置单元,记录已执行与已安装的程序,含 SHA-1 哈希,能精确识别文件。(为什么两者都要看?请见 ShimCache 与 AmCache。
  • 安全 / Sysmon 事件日志 —— 进程创建事件(4688、Sysmon 1)是现有最高保真度的执行证据。
  • UserAssist、BAM/DAM、RecentApps —— 基于注册表的其它执行信号。

程序执行证据参考 总结了每种证据捕捉的内容及实际可信度。

结论

一条 ShimCache 条目告诉你的是:Windows 曾经 看过 这个特定的文件。它是证明 存在 的高信号枢纽,并非执行证据。要主张程序运行过,请把 ShimCache 与 Prefetch、AmCache 或进程创建日志组合起来 —— 并用与所持证据相符的语言写下你的结论。

要立刻分析一份 SYSTEM 配置单元的 ShimCache,将其拖入 Shimcache Parser 即可。一切都在你的浏览器中完成,文件不会离开此页面。

延伸阅读

相关文章