简短回答: NTFS 上的反取证手段意在隐藏某个文件是什么、何时被触碰过,或它是否曾经存在。常见手段没有一种是干净的 —— 每一种都会在 $MFT、$UsnJrnl、$LogFile 或 VSS 快照中留下不同的痕迹。本文盘点这些手段,以及能反制它们的破绽。
Timestomping(时间戳篡改)
经典手法。SetMACE、timestomp 之类的工具,以及内置的 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.IdentifierADS 是浏览器自动添加的,经常在被下载下来的有效载荷上存活 —— 这就能证明文件来自互联网,以及它属于哪一个安全区。
如何识别: 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.exe、lsass.exe 或其他常见的 Windows 二进制文件。严格说这不算 MFT 反取证,但却是野外最常见的欺骗分析师的把戏。
留下的痕迹:
- 一个
$FILE_NAME,其父目录引用并不指向C:\Windows\System32。 - 一个
$DATA属性,其大小与熵分布与合法二进制文件不符。 - 来自下载过程的
Zone.IdentifierADS。
勒索软件对 MFT 的涂抹
某些勒索软件家族(Petya、NotPetya 以及之后的少数)会故意破坏 $MFT,使卷无法挂载。这是破坏性的,而不是规避性的。
留下的痕迹:
- 本应是
FILE之处出现了BAAD记录。 - 系统无法启动,但镜像在取证上仍很有价值 —— 在卷上做
FILE记录的签名扫描,大部分表内容依然可读。
详情见 MFT 中的勒索软件特征。
总体原则
NTFS 上每一种反取证手段都会留下 某些 痕迹。原因是结构性的:$MFT、$UsnJrnl、$LogFile 与 VSS 各自记录着对同一组事件的不同视角,而修改其中任何一个本身又是一个会被其他几个记录下来的事件。把这四者一并纳入排查,是很难被绕过的。