← 返回博客

用 USN 日志找回已删除文件的证据

当一个文件已被删除、从回收站清空,且 MFT 表项已被回收 — USN 日志通常仍然记着它的名字、父级和时间线。如何把这些证据取出来。

阅读约 1 分钟

取证分析师从非技术方收到最多的问题,都是某种版本的 「你能证明这个文件存在过吗?」。当文件已经从磁盘上消失、回收站也已清空,而距离久到 $MFT 表项已被复用时,答案常常取决于 USN 日志 还记得什么。

本文带你看 USN 日志在文件删除后还保留什么、如何把这些证据取出来,以及在哪些场景下日志是你最后的证人。

删除后日志保留了什么

在 NTFS 上删除一个文件时,会发生若干事:

  1. 父目录里的 $FILE_NAME 表项被取消链接。
  2. 该 MFT 表项被标记为可用 — 但不会被清零。
  3. USN 日志收到一条 FileDelete | Close 记录,记录该文件名、父引用、MFT 表项号和时间戳。

日志中的这条记录是三者里 韧性最强 的。父目录一旦被改写,目录项立刻消失;只要新建一个文件,MFT 表项就可能被复用;而日志这条记录待在一个要数天乃至数周活动后才回环一次的环形缓冲里。

也就是说,对于多天前删掉的文件,日志通常还能给你:

  • 文件名(只是末端名字,不是完整路径)。
  • 父目录的 MFT 引用 — 与已解析的 $MFT 配合就有完整路径。
  • 删除时间戳(UTC)。
  • 文件曾占用的 MFT 表项号(可用于跨参照雕刻获得的痕迹)。
  • 一条 生命周期轨迹:删除前的 FileCreateDataExtendBasicInfoChange 记录告诉你文件什么时候创建、如何写入、其时间戳是否被改过。

一个最简恢复流程

只要你拥有解析过的日志(本页解析器或 usnrs 都行;获取 $J$MFT 请见 提取指南):

  1. FileDelete 过滤,让窗口内每条删除浮现出来。按时间戳排序。
  2. 对每个感兴趣的删除,按 FileReferenceNumber 分组,看到文件的完整历史 — 创建、写入、改名对、属性变化、最后的删除。
  3. 通过 $MFT 解析父路径。两份文件同时提供时,本站解析器会自动完成这一步。
  4. 若删除非常新近,再交叉看 $LogFile — 它可能仍保留目录项的「之前」镜像,给你第二个独立的证人。

「我有一个 MFT 引用、一个文件名、一个父级、一个创建时间和一个删除时间」这种组合,通常足以满足法律保留或为更深的调查提供锚点。

当父路径解析不出来时

有时候,你查看的时候 MFT 父级表项自身也已被回收 — 在繁忙的主机上尤其常见。这种情况下,日志能给你文件名和父引用,但 $MFT 已不知道这个号曾对应哪个目录。

通常以下三种线索能帮上忙:

  • 父引用上较早的 RenameNewName 记录 — 它们可能带着改名时仍可解析的父信息。
  • $LogFile 的索引项 — 未文档化但 libfsntfs 已涵盖。
  • 同一父引用下的兄弟文件 — 把所有日志记录按父级分组。若其中一个兄弟被重命名 一个 MFT 表项仍然有效的目录,你可以通过它做透视。

这也是为何本工具的初步报告会写成「filename: notes.docx」而不带路径:我们宁可不发明无法验证的路径。

「擦除」不等于消失

少数文件粉碎工具(CCleaner、Eraser、BleachBit)会覆写内容再删除。它们留下与普通删除相同的日志记录,加上覆写记录。日志因此让「安全删除」变得吵闹,而不是悄无声息:

  • 在文件的 FileDelete | Close 之前出现多条 DataOverwrite | Close,表明有意覆写。
  • 同一文件在秒级时间内既出现 FileCreate 又出现 FileDelete,中间夹着覆写 — 这是经典模式。
  • 若 shredder 还通过写入临时文件去清理 slack space,这些临时文件本身会产生自己的 create/extend/overwrite/delete 序列 — 在证据销毁的瞬间附近会形成一团记录。

对应的 MITRE ATT&CK 技术是 T1485 Data DestructionT1070.004 File Deletion

那么文件的 内容 呢?

USN 日志从不携带内容 — 它只携带操作的元数据。如果你需要把字节找回来,日志会把你指向:

  • 已删除文件的 MFT 表项号。如果该表项未被复用,MFT 仍持有 data run,内容可能通过 The Sleuth Kit 的 icat 或 X-Ways 恢复。
  • 对于极新近的删除,$LogFile 的「之前」镜像。
  • 若有 卷影副本(VSS) — 被删除的文件可能存在于此前的快照中。
  • 应用专有存储 — OneDrive 的回收站、Office 的「自动保存」文件夹、浏览器缓存。

日志在这里的角色是说明 某个 文件曾存在,以及它 何时 被删除 — 后续的恢复在下游进行。

实际限制

  • 日志有 时间窗口。在你拥有的最旧记录之前(环形缓冲已绕过去)被删除的文件,这里就找不到了。请补充取 $LogFile 和卷影副本。
  • 有些操作 不会 触及日志:文件系统级的加密变更、只触及分配位图的稀疏区写入、NTFS 重解析点的操控,都可能不产生 DataExtend/DataOverwrite
  • 在窗口内只见到 FileDelete 而见不到对应 FileCreate,说明该文件创建于日志当前最旧记录 之前 — 生命周期是部分的,但删除时间戳仍可作为锚点。

更广的痕迹背景可参见 SANS Windows Forensic Analysis 海报Microsoft Learn 的 change journals 参考