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

约 2 分钟阅读

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

"ShimCache 显示它运行过"是 Windows 事件响应中代价最高的一句话。它被写进报告。它会被对方律师质询。它会让分析师在证人席上解释为什么 mtime 不是进程启动时刻,与此同时房间里的每个人对 Application Compatibility Cache 的了解远超出他们想要的。不要做那个分析师。

ShimCache 实际记录的内容

该缓存正式名称为 Application Compatibility Cache,存放在 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache,记录 Windows 为判定是否需要应用兼容性 shim 而检查过的可执行文件。检查不是执行。Windows 在以下情况会检查一个二进制:

  • 用户双击它。
  • Explorer 枚举一个文件夹,并检查 PE header 以获取图标数据。
  • 反病毒扫描器、索引器或 EDR 遍历文件系统。
  • 右键"属性"拉取版本资源。
  • 系统调用解析了一个以 .exe 结尾的路径。

这些大多发生在执行的同时。有些则不是。被攻击者投放、改名并删除却从未启动的二进制,仍可能因为 Defender 在它落地途中扫描了它而进入缓存。

Windows 10 拿走的那个 flag

较旧的版本(XP 到 Windows 8.1)在每个条目中嵌入了一个 Executed flag。许多分析师学会了 grep "yes" 然后收工。Windows 10 移除了那个 flag。Windows 11 也没有把它放回来。现代缓存只携带路径、mtime 以及结构性元数据。缓存中没有任何"这运行过"的标记。

如果你在旧 hive 上受训,如今正在读 Windows 10/11 的 SYSTEM,请重新校准。你记得的"Executed"列已经没有了。每一个值得用的 parser(Eric Zimmerman 的 AppCompatCacheParser、Mandiant 的 Shim Cache Parser、本工具)都诚实地反映了这种缺失。如果你看到某个工具在现代 hive 上报告执行 flag,那个工具是在编造。

字段级别的布局见 Windows 10/11 二进制格式详解。

什么能确认执行

把 ShimCache 命中当作一个假设。然后去寻找真正记录进程创建的证据。

  • Prefetch。 C:\Windows\Prefetch\*.pf 文件在工作站 SKU 上每次进程启动后约 10 秒内被写入。运行次数、最近八次运行时间、加载的模块。文件存在,则二进制运行过。Prefetch parser 讲解了该格式以及禁用的情形。
  • AmCache。 Amcache.hve 携带 SHA-1 哈希和明确的首次运行时间戳,并且持续写入。AmCache parser 提供了字段指南。
  • EVTX / Sysmon。 Security 4688(在启用命令行审计的情况下)和 Sysmon Event ID 1 是你能拿到的最高保真度记录。EVTX parser 介绍了分诊工作流。
  • BAM / DAM。 HKLM\SYSTEM\CurrentControlSet\Services\bam\State 下的每用户最后执行时间。读取代价很低,被严重低估。
  • UserAssist。 仅限通过 Explorer 的交互式启动,名称采用 ROT13 编码。对"用户是否双击了它?"有用,对"该二进制是否曾运行?"则不然。

交叉参照模式见 程序执行工件参考。

报告里如何措辞

差的写法:"ShimCache 显示 mimikatz.exe 于 2026-04-11 14:33:21 UTC 被执行。"

更好的写法:"ShimCache 记录了文件 C:\Users\Public\mimikatz.exe,$STANDARD_INFORMATION mtime 为 2026-04-11 14:33:21 UTC。Prefetch 条目 MIMIKATZ.EXE-A1B2C3D4.pf 显示在 14:34:02 UTC 有一次执行。AmCache 的 SHA-1 与已知的 mimikatz build 2.2.0 匹配。"

第二句话能经得起交叉质询。第一句不能。

不离开浏览器就解析一份 hive

把你的 SYSTEM hive 拖入 Shimcache Parser。一切都在客户端运行。不上传,这在 hive 来自受监管环境或客户委托案件时非常重要。

延伸阅读

相关文章