← 返回博客

NTFS 反取证:攻击者会对 MFT 做什么,以及如何识别

· 阅读 1 分钟

简短回答: NTFS 上的反取证手段意在隐藏某个文件是什么、何时被触碰过,或它是否曾经存在。常见手段没有一种是干净的 —— 每一种都会在 $MFT$UsnJrnl$LogFile 或 VSS 快照中留下不同的痕迹。本文盘点这些手段,以及能反制它们的破绽。

Timestomping(时间戳篡改)

经典手法。SetMACEtimestomp 之类的工具,以及内置的 PowerShell one-liner,会调用 SetFileTime 或直接写 $STANDARD_INFORMATION,让一个文件看起来比实际更老或更新。

留下的痕迹:

  • $STANDARD_INFORMATION$FILE_NAME 的时间戳出现分歧 —— SetFileTime 只更新 SI。见 MFT 的四个时间戳
  • 亚秒精度往往被清零。自然的 Windows 活动会留下小数秒;许多 timestomping 工具会四舍五入到整秒。
  • $STANDARD_INFORMATION创建时间 早于 $FILE_NAME创建时间 是不可能的 —— 文件不可能在被命名之前就存在。

如何识别: 解析 $MFT,标记每一条 SI 与 FN 时间相差超过几秒、或 SI 早于 FN 的记录。本站的浏览器解析器会按记录展示两组时间戳。

备用数据流(ADS)

NTFS 允许一个文件携带多个 $DATA 属性。未命名的那个是「真正」的文件;命名的(如 file.txt:hidden)就是 备用数据流 —— 在资源管理器和 dir 中都看不到,常被用来藏入有效载荷。

留下的痕迹:

  • 一个 ADS 只是同一条 MFT 记录里的另一个 $DATA 属性。任何会遍历属性流的解析器都会把它们列出来。
  • Zone.Identifier ADS 是浏览器自动添加的,经常在被下载下来的有效载荷上存活 —— 这就能证明文件来自互联网,以及它属于哪一个安全区。

如何识别: cmd.exe 中的 dir /R 会在活动系统上列出 ADS。Sysinternals 的 streams.exe 也能枚举。MFT 解析器会在每条记录中直接显示它们。见备用数据流

擦除单个文件

老练的擦除器会覆写文件的簇,然后删除 MFT 记录。不那么老练的(del /f、默认设置下的 SDelete)只会覆写数据,但把 MFT 记录留在原地。

留下的痕迹:

  • 一条已删除的 MFT 记录,其 $FILE_NAME$STANDARD_INFORMATION 完好无损 —— 即便数据已不在,名称和时间戳仍然存活。见在 NTFS 上删除文件时哪些信息会留下
  • 通常还有该文件最初创建与删除时的 $UsnJrnl 条目。
  • 元数据操作对应的 $LogFile 条目。
  • 一个在擦除之前拍下的 VSS 快照仍然包含完整的文件。

如何识别: 即便是被「擦除」的文件,也会在 $MFT 中留下名称、路径和时间戳。结合 VSS 快照(快照与 $MFT)看,往往连内容都能恢复出来。

擦除 MFT 记录本身

更激进的攻击者会刻意写入新文件来重用槽位,覆写已删除的记录。这一步能成功 —— 槽位确实没了 —— 但这次删除本身也是一个事件。

留下的痕迹:

  • 该记录的 序列号 递增了。一条来自 $UsnJrnl$LogFile 的引用,如果指向旧的序列号,现在就是陈旧的,这会告诉你这个槽已经被重用过。
  • $UsnJrnl 仍然记录着原文件的创建/删除 以及 新文件的创建,如果新文件位于别处,还会包含不同的父目录。
  • 重用之前的 $MFT 快照副本仍然保有原记录。

如何识别:$UsnJrnl 与当前 $MFT 做交叉对照。如果某条 $UsnJrnl 条目所指向的目标记录,其当前序列号高于条目中所引用的序列号,就说明该槽位已被重用。

$UsnJrnl 截断

变更日志是有界的。一名攻击者如果运行嘈杂的操作(大量文件写入),就可以迫使 $UsnJrnl 回绕,把较旧的条目挤出去。

留下的痕迹:

  • $UsnJrnl 的起始位置比 $Max 参数所暗示的要晚,这就值得怀疑。
  • $LogFile 不是按同样的方式轮转的,通常仍然记录着把 $UsnJrnl 挤掉的那些操作。
  • 那些嘈杂操作本身会留下成千上万条 MFT 记录 —— 它们是可见的。

$UsnJrnl 删除

fsutil usn deletejournal /D C: 会把整本日志移除。重建的日志会从一个全新的 USN 计数器开始。

留下的痕迹:

  • $UsnJrnl 的首个 USN 异常地大,或者其首条记录的时间仅比事件早几小时或几分钟,这是可疑的。
  • $Extend 目录里某条 MFT 记录的序列号递增了。
  • 删除之前拍下的 VSS 快照仍然保有完整日志。

将文件改名为系统文件

把恶意软件伪装成 svchost.exelsass.exe 或其他常见的 Windows 二进制文件。严格说这不算 MFT 反取证,但却是野外最常见的欺骗分析师的把戏。

留下的痕迹:

  • 一个 $FILE_NAME,其父目录引用并不指向 C:\Windows\System32
  • 一个 $DATA 属性,其大小与熵分布与合法二进制文件不符。
  • 来自下载过程的 Zone.Identifier ADS。

勒索软件对 MFT 的涂抹

某些勒索软件家族(Petya、NotPetya 以及之后的少数)会故意破坏 $MFT,使卷无法挂载。这是破坏性的,而不是规避性的。

留下的痕迹:

  • 本应是 FILE 之处出现了 BAAD 记录。
  • 系统无法启动,但镜像在取证上仍很有价值 —— 在卷上做 FILE 记录的签名扫描,大部分表内容依然可读。

详情见 MFT 中的勒索软件特征

总体原则

NTFS 上每一种反取证手段都会留下 某些 痕迹。原因是结构性的:$MFT$UsnJrnl$LogFile 与 VSS 各自记录着对同一组事件的不同视角,而修改其中任何一个本身又是一个会被其他几个记录下来的事件。把这四者一并纳入排查,是很难被绕过的。

外部资源