← 返回博客

$MFT 如何暴露一次勒索软件攻击

· 阅读 1 分钟

大多数勒索软件在磁盘上做的事情都差不多:枚举文件、逐个读取、在旁边写一份加密副本、删掉原文件。每一步都会出现在 $MFT 中。

三种关键模式

大规模扩展名变更。新文件出现在和已有文件相同的父目录、同样的基名,但扩展名不同。report.docx 变成 report.docx.lockedreport.encryptedreport.{guid}。统计某段短时间窗口内出现了多少这样的成对文件,是 $MFT 上最干净的勒索软件指标之一。

几秒内集中爆发的 SI 创建时间戳。正常用户活动只会零星地一次创建一两个文件。勒索软件则会创建成百上千个。把 SI 创建时间戳画成直方图,攻击窗口就以一根高耸的竖线出现。

与加密副本对应的被删除原件。每一个 report.docx.locked 通常都对应着一个 report.docx,后者的「使用中」标志已经被清掉。被删除的记录会一直留在 $MFT 中,直到被重新使用。从这些槽位里,你可以恢复原件的名字、大小和时间戳。

$MFT 不会告诉你的

$MFT 能确认什么何时。但它不告诉你是哪一个进程进行了写入。要补足这一块,你需要:

  • Prefetch 与 ShimCache —— 证明哪个可执行文件曾经运行;
  • $UsnJrnl —— 看清创建、删除、重命名等操作的顺序;
  • 内存取证 —— 如果机器仍然存活、进程仍然驻留。

但仅仅依靠 $MFT,通常就能回答最紧迫的问题:攻击是何时开始的、波及范围多大、哪些文件被动过。

关于勒索说明文件

大多数家族会在每个被影响的目录里丢下一份勒索说明,名字往往是 HOW_TO_DECRYPT.txtREADME_FOR_DECRYPT.html。这些说明内容一致、大小一致,创建时间也高度集中。在 $MFT 上搜索「散落在大量目录中、大小完全相同的若干文本文件」,通常会比任何按文件名的过滤都更快地找到它们。

外部资源