ShimCache 会记录被删除的文件吗?

约 1 分钟阅读

TL;DR. 会。无论文件在磁盘上是否还存在,ShimCache 条目都会保留在注册表中。删除二进制并不会删除其 ShimCache 条目——这正是该工件在捕获攻击者投放、使用、再清除的工具时如此宝贵的原因。

「文件被删除后 ShimCache 还会显示它吗?」是程序执行取证中最常见的问题之一——而答案正是采集该工件的根本原因。

简短回答:会

ShimCache 在一个注册表值中存储路径 + 最后修改时间戳。该记录没有指回文件系统的链接。当可执行文件被删除时,NTFS 释放该文件——但注册表值原封不动。该条目会一直保留,直到被更新的条目挤出(缓存最多容纳 1,024 条),或该值本身被清除。

因此,攻击者投放到 C:\Users\Public\、运行后十分钟删除的二进制,仍可能留下一条干净、可读的 ShimCache 条目,显示它曾占据的完整路径。

为什么这在取证上很强大

已删除文件的条目往往是攻击者工具唯一幸存的证据:

  • 凭据窃取后被删除的、改名的 mimikatz.exe
  • 数据外带后被移除的暂存压缩包。
  • 安装载荷后自删除的投放器。

每种情况下文件都没了,但 ShimCache 的路径告诉你它存在过、在哪里,并(通过最后修改时间戳)把它与某次构建关联起来。这是用 ShimCache 狩猎恶意软件以及攻击者惯于清除工具的勒索软件调查的支柱。

已删除文件的条目能存活多久?

有两个限制:

  • 挤出。 缓存有上限(最多 1,024 条)。在繁忙主机上,大量可执行活动会把旧条目挤出。在安静的服务器上它可能存活数月。
  • 落盘时机。 新条目只在干净关机时持久化到蜂巢。如果自删除以来主机未关机,幸存条目可能仍只在内存中——从内存镜像中提取(方法)。存储/落盘模型见ShimCache 存储在哪里

不能证明什么

已删除文件的条目证明该文件在那台主机上存在过并被检查过。它本身不证明文件执行过,也不告诉你它何时被删除(时间戳是文件的 mtime,不是删除时间)。把它当作有力的存在证人,并用 Prefetch/AmCache 佐证执行——见ShimCache 是否证明执行

要检查蜂巢中哪些条目指向已不存在的文件,用 Shimcache Parser 解析并交叉比对路径——一切都在你的浏览器本地运行。

延伸阅读

相关文章