从内存转储中提取 ShimCache

约 1 分钟阅读

TL;DR. ShimCache 存活于内存;磁盘上的 SYSTEM 配置单元仅包含上次干净关机时落盘的条目。要从一台在线或已崩溃主机上回收当前会话的条目,可用 Volatility 3 的 windows.shimcachemem(或 Velociraptor 的 Windows.Registry.AppCompatCache 工件)对内存镜像执行解析。

Windows 运行期间,ShimCache 存活于易失内存中,只在干净关机时才会被写入 SYSTEM 配置单元(时序详情)。也就是说,运行中主机的内存镜像,往往是找到上一会话 ShimCache 条目的 唯一 来源 —— 而那正是最可能与当前事件相关的条目。

何时内存副本比磁盘副本更重要

在以下情况你想要内存中的 ShimCache:

  • 事件发生后主机 未进行干净关机。绝大多数硬重启、BSOD 与强制断电会让 SYSTEM 配置单元里的 ShimCache 停留在过期状态。
  • 你怀疑 反取证。修改了磁盘配置单元的攻击者,可能没动每会话重建的内存副本。见 反取证检测
  • 你需要在最近一次刷盘时被 从磁盘配置单元中淘汰 的条目。1,024 条的上限会把旧条目轮换出去,但它们在特定条件下仍可能驻留在内存里。

使用 Volatility 2

经典插件是 shimcachemem。针对 XP–Win10 的内存镜像:

vol.py -f memory.raw --profile=Win10x64_19041 shimcachemem

它沿着 SYSTEM 配置单元的内存内表示遍历 AppCompatCache 结构,像离线解析器那样输出 (mtime, 路径) 行。插件源码与使用说明位于 Volatility 2 仓库

使用 Volatility 3

Volatility 3 将之延续为 windows.shimcachemem

vol -f memory.raw windows.shimcachemem

不再需要选择 profile(Vol 3 会自动识别系统)。该插件与 Windows 工件全集一起记录在 Volatility 3 文档 中。

使用 Velociraptor

如果是大规模采集而非单一镜像分析,Velociraptor 的 Windows.Registry.AppCompatCache 工件会通过实时注册表视图,直接从运行中的端点读取内存中的 ShimCache。这就是系统在关机时本该刷盘的同一份 ShimCache —— 无须等到关机。

把两种视图结合起来

实际中你常常同时拥有:

  • 来自 Volatility 插件或 Velociraptor 采集的 内存中 ShimCache
  • 同一主机 SYSTEM 配置单元里的 磁盘上 ShimCache

只要没有发生过干净关机,内存副本就是磁盘副本的超集 —— 但经过长时间运行后,磁盘副本里可能含有已被从内存挤出的条目。两份都取,按 (路径, mtime) 去重后取并集,再投入 狩猎工作流

下一步

拿到条目之后:

  • Shimcache Parser 在浏览器内对取出的配置单元做快速离线分诊,无需上传。
  • 若你自己解码原始 blob,请参考 二进制格式
  • 在断言「内存中恢复的条目意味着程序运行过」之前,请先看 执行证明

延伸阅读

相关文章