← 返回博客

USN 日志 vs $MFT vs $LogFile:对应哪个问题该用哪个 NTFS 痕迹?

三个 NTFS 元数据痕迹的对照参考 — 每一次 Windows 取证调查最终都会触及它们。各自记录什么、不记录什么,以及何时取用哪个。

阅读约 2 分钟

NTFS 给取证分析师提供了三大类元数据来源。最快丢一天的方式就是去看错了那个。速查地图:

痕迹记录什么时间跨度粒度位置
$MFT卷上每个文件/目录的当前状态 — 名称、大小、时间戳、父项「现在」加上尚未复用的已删除条目每个文件MFT 表项 0
$UsnJrnl:$J每次创建/删除/重命名/修改的环形日志数天到数周每次操作\$Extend\$UsnJrnl:$J (替代数据流)
$LogFileNTFS 用于崩溃恢复的事务日志 — 元数据写入的前后影像数分钟到数小时每次元数据事务\$LogFile (MFT 表项 2)

本文给出实用决策树:面对一个问题,该取哪一种。

$MFT — 「此刻有什么」

Master File Table 是 NTFS 的脊柱。每个文件或目录都有一条表项 (通常 1024 字节),里面有 $STANDARD_INFORMATION、一个或多个 $FILE_NAME,以及 data run。Microsoft 在 NTFS 参考 文档化了结构,Brian Carrier 的 File System Forensic Analysis 是经典的整本著作处理。

用于:

  • 「这个卷上有什么」 — 包括每个表项的时间戳。
  • 通过父级 MFT 表项链重建完整路径 (本解析器在你同时提交 $MFT 时就是这么解析日志记录的路径)。
  • 恢复最近删除的文件 — 只要表项还没被覆盖,data run 可能仍然完好。

它不会告诉你:

  • 周二 14:32 文件发生了什么 — $MFT 只携带 $STANDARD_INFORMATION$FILE_NAME 的四个时间戳,这只是终态,不是历史。

工具:Eric Zimmerman 的 MFTECmd 是事实标准解析器,mft (Rust) 和 analyzeMFT (Python) 是扎实的开源替代品。

$UsnJrnl:$J — 「先后发生了什么」

USN 日志记录卷上每一次创建、删除、重命名、截断、属性变更和关闭。背景请见我们的 格式介绍reason 代码参考

用于:

  • 即便文件已被删除,也重建其生命周期。
  • 事件响应的时间线重建,尤其是 RenameOldName/RenameNewName 的成对以及 DataOverwrite 的集群。
  • 在规模上检测勒索软件模式 (见 我们的专文)。

它不会告诉你:

  • 做了什么 — 没有用户、进程或命令行。需配合 Security.evtx (事件 ID 4663) 或 Sysmon。
  • 任何文件的内容 — 只知道它变了。
  • 环形缓冲窗口之外的任何事。默认大小从客户端的 ~10 MB 到服务器的 1 GB+,对应数天到数周的历史。

工具:usnrsPoorBillionaire/USN-Journal-Parser、本站的解析器。

$LogFile — 「NTFS 即将做什么」

这是 NTFS 用于崩溃恢复的元数据日志。它记录每次元数据写入的前/后影像 — INDEX_ALLOCATION 更新、属性修改、MFT 表项重写。格式未文档化,但已有充分逆向;Joachim Metz 的 libfsntfs 仓库 是最彻底的开放参考。

用于:

  • 恢复 几分钟内 既创建又删除的文件 — $LogFile 可能还保留删除的「前」影像,其中含文件名和父级。
  • 捕捉直接动了 $MFT 的反取证行为 — 即便外观看似干净,$LogFile 仍记录了写入。

它不会告诉你:

  • 超过近几千条事务以外的事 — $LogFile 旋转很快,活跃机器上往往一小时之内就转完。
  • 文件内容。只记录元数据变更。

工具:LogFileParser 以及基于 libfsntfs 构建的解析器。

决策树

你知道是哪一个文件吗?
├── 是 → 想要当前状态? → $MFT (路径、时间戳、大小)
│        想要历史?     → $UsnJrnl (近期细节继续看 $LogFile)
└── 否 → 时间窗口?
          ├── 近几分钟        → $LogFile (粒度最细)
          ├── 近几天/几周     → $UsnJrnl (信噪比最好)
          └── 更早            → 只能看 $MFT (可能只剩时间戳)

是否要在文件间做关联?
└── 只有 $UsnJrnl 拥有按操作排序的时间线。

组合使用

三类痕迹相互补充:

  1. $MFT + $UsnJrnl 是经典组合 — $MFT 提供解析路径所需的目录树,$UsnJrnl 提供操作历史。本页解析器在你同时投入两份文件时,就是这么做的。
  2. $LogFile 是面向近期过去的兜底,尤其在 $UsnJrnl 过于稀疏 (小或被禁用) 时格外有用。
  3. 想要更宽的上下文,补上 Security.evtx (进程/对象事件)、Prefetch (执行痕迹) 与注册表 hive — 全景见 SANS Windows Forensic Analysis 海报