ShimCache 解析器比较:Mandiant、Zimmerman、Velociraptor 以及本工具

约 2 分钟阅读

TL;DR. 案件工作用 Eric Zimmerman 的 AppCompatCacheParser。OS 覆盖面最广、有 CSV 输出、经过充分测试。舰队规模的活体分诊用 Velociraptor。需要一份简单的 Python 参考时用 Mandiant 的 Shim Cache Parser。想要零安装、零上传时用本工具。意见分歧时做交叉验证。这种格式挑剔到两个 parser 偶尔会看出不同结果。

对于 ShimCache 解析来说有四个值得关注的开源工具。它们各有自己的领域。我看到初级分析师常犯的错误是挑一个并把它当作所有案件的答案。正确答案取决于你是在做规模化、写脚本,还是凌晨两点盯着一份 hive。

真正重要的四个 parser

工具语言分发方式最适用于
Mandiant Shim Cache ParserPythonGitHub 上的源码读懂格式、编写定制化分析脚本
Eric Zimmerman AppCompatCacheParserC# / .NET单一二进制案件工作。对生产环境报告最可靠。
Velociraptor Windows.Registry.AppCompatCacheVQLVelociraptor 服务端舰队规模的活体采集
Shimcache Parser(本工具)Rust → WebAssembly仅浏览器、无需安装无须设置的快速分诊,数据不离开机器

何时该选哪一个

Eric Zimmerman 的 AppCompatCacheParser

离线分析的事实标准。覆盖从 XP 到 Windows 11 的每个 Windows 变体,自动重放 SYSTEM 事务日志,输出能干净地落进 Timeline Explorer 的 CSV。如果你的产出要进入最终报告,这就是评审人员期待你使用的工具。

AppCompatCacheParser.exe -f SYSTEM --csv .

注意点:仅 Windows 二进制,需要 .NET Framework 或 Core,不为临时的浏览器端分诊而设计。

Velociraptor

当你需要从数十或数千台主机上拉取 ShimCache 时,Velociraptor 胜出。该工件直接从运行中的端点读取内存中的缓存,这与 OS 在关机时会刷新的是同一份视图,但不必等到关机。理由见 从内存转储中提取 ShimCache。

注意点:需要 Velociraptor 基础设施。对一次性分析来说杀鸡用牛刀。

Mandiant Shim Cache Parser

原始的 Python proof-of-concept。不如 EZ 工具光鲜,但在你想阅读代码理解格式究竟如何被解码、或想围绕它做定制化分析脚本时很有用。输出是纯文本;与其他 Python 流水线集成。

python ShimCacheParser.py -t -h /path/to/SYSTEM

注意点:需要 Python 2.x 或兼容性分支。CSV / JSON 输出不如 EZ 精致。

本 Shimcache Parser

为其他工具没能很好覆盖的两种情况而存在:

  1. 零安装分诊。 打开网页,拖入 hive,看到条目。在没有安装 DFIR 工具的主机上、在笔记本或借用机器上分析时很有用。
  2. 对信任敏感的分析。 hive 完全通过 WebAssembly 在你的浏览器中被解析。文件不离开页面、不到达服务器、不在任何日志中出现。当 hive 属于客户或属于不允许上传的案件时这一点很重要。

权衡:没有命令行界面、没有自动化挂钩。把它用于人工驱动的分诊,不是流水线。对于流水线,EZ 的工具才是正解。

parser 分歧时的交叉验证

二进制格式不留情面。Windows 10/11 布局参考 解释了为什么单一偏移量算错就会一路波及 blob 其余部分。实际中 parser 通常意见一致,但现实里的 hive 偶尔会发布略偏规范的数据,parser 在以下方面会有分歧:

  • Win7 hive 上的 bit 数检测。 头部并未明确说明 x86 还是 x64,因此 parser 会启发式地推断。两款工具在同一份 hive 上产出不同路径,就是给你的提示。
  • 路径规范化。 反斜杠转义、盘符大小写、起首的 \??\ 标记。不同 parser 的规范化方式不同。
  • 空条目或占位条目。 一些工具会为未使用的槽位输出空白行;另一些则跳过。

当结果重要时,跑两个 parser 然后做 diff。我常用的组合:

  • EZ + 本工具,做快速交叉检查。
  • EZ + Mandiant,做"Python vs C#"的合理性检查。
  • EZ + Velociraptor,做"实时内存 vs 磁盘 hive"对比。

常见坑

  • 不要忘了事务日志。 SYSTEM.LOG1 和 SYSTEM.LOG2 携带待处理的写入;没有它们你读到的就是过时的 hive。EZ 的工具会自动重放它们。另一些工具不会。见 获取 SYSTEM hive。
  • 不要直接比较磁盘和内存中的 ShimCache。 它们是不同的真值来源。磁盘的只反映上一次 clean shutdown 的状态。内存的反映当前会话。把它们当作互补而非可替代。
  • 不要假定执行。 没有 parser 能解决这一点。该缓存记录的是检查,不是执行。

延伸阅读

相关文章