hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/ntfs.md

16 KiB
Raw Blame History

NTFS

NTFS

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

NTFS

NTFS新技术文件系统是由Microsoft开发的专有日志文件系统。

在NTFS中簇是最小的大小单位簇的大小取决于分区的大小。

分区大小 每簇扇区数 簇大小
512MB或更小 1 512字节
513MB-1024MB1GB 2 1KB
1025MB-2048MB2GB 4 2KB
2049MB-4096MB4GB 8 4KB
4097MB-8192MB8GB 16 8KB
8193MB-16,384MB16GB 32 16KB
16,385MB-32,768MB32GB 64 32KB
大于32,768MB 128 64KB

松弛空间

由于NTFS中最小的大小单位是。每个文件将占用多个完整的簇。因此,每个文件占用的空间可能比必要的空间多。这些文件未使用的空间由文件预订,称为松弛空间,人们可以利用这个区域来隐藏信息。

NTFS引导扇区

当格式化NTFS卷时格式化程序为引导元数据文件分配了前16个扇区。第一个扇区是带有“引导加载程序”代码的引导扇区接下来的15个扇区是引导扇区的IPL初始程序加载器。为了增加文件系统的可靠性NTFS分区的最后一个扇区包含引导扇区的备用副本。

主文件表MFT

NTFS文件系统包含一个称为主文件表MFT的文件。在NTFS文件系统卷上至少有一个MFT条目对应每个文件包括MFT本身。有关文件的所有信息包括其大小、时间戳、权限和数据内容都存储在MFT条目中或在MFT条目描述的MFT之外的空间中。

文件添加到NTFS文件系统卷时MFT中会添加更多条目MFT的大小会增加。当从NTFS文件系统卷中删除文件时,它们的MFT条目被标记为自由可以重新使用。但是为这些条目分配的磁盘空间不会重新分配MFT的大小也不会减小。

NTFS文件系统保留空间用于MFT以尽可能使MFT连续。NTFS文件系统在每个卷中为MFT保留的空间称为MFT区域。文件和目录的空间也分配自此空间但只有在MFT区域之外的所有卷空间分配完之后才会分配。

根据平均文件大小和其他变量,在磁盘填满容量时可能首先分配保留的MFT区域或磁盘上的未保留空间。具有少量相对较大文件的卷将首先分配未保留的空间而具有大量相对较小文件的卷将首先分配MFT区域。在任一情况下当其中一个区域完全分配时MFT的碎片化开始发生。如果未保留的空间完全分配用户文件和目录的空间将从MFT区域分配。如果MFT区域完全分配新MFT条目的空间将从未保留的空间分配。

NTFS文件系统还生成一个**$MFTMirror**。这是MFT的前4个条目的副本$MFT、$MFT Mirror、$Log、$Volume。

NTFS为表的前16条记录保留了特殊信息

系统文件 文件名 MFT记录 文件用途
主文件表 $Mft 0 包含NTFS卷上每个文件和文件夹的一个基本文件记录。如果文件或文件夹的分配信息太大而无法适应单个记录则还会分配其他文件记录。
主文件表2 $MftMirr 1 MFT的前四个记录的重复图像。在单个扇区故障的情况下此文件保证访问MFT。
日志文件 $LogFile 2 包含用于NTFS可恢复性的事务步骤列表。日志文件大小取决于卷大小最大可达4MB。Windows NT/2000在系统故障后使用它来恢复NTFS的一致性。
$Volume 3 包含有关卷的信息,如卷标签和卷版本。
属性定义 $AttrDef 4 属性名称、编号和描述的表。
根文件名索引 $ 5 根文件夹。
簇位图 $Bitmap 6 显示哪些簇正在使用的卷的表示。
引导扇区 $Boot 7 包括用于挂载卷的BPB和用于可引导卷的附加引导加载程序代码。
坏簇文件 $BadClus 8 包含卷的坏簇。
安全文件 $Secure 9 包含卷内所有文件的唯一安全描述符。
大写表 $Upcase 10 将小写字符转换为匹配的Unicode大写字符。
NTFS扩展文件 $Extend 11 用于各种可选扩展,如配额、重解析点数据和对象标识符。
12-15 保留供将来使用。
配额管理文件 $Quota 24 包含用户分配的卷空间配额限制。
对象ID文件 $ObjId 25 包含文件对象ID。
重解析点文件 $Reparse 26 此文件包含有关卷上的文件和文件夹的信息,包括重解析点数据。

MFT的每个条目如下所示

请注意每个条目以“FILE”开头。每个条目占据1024位。因此在MFT条目的开始后1024位您将找到下一个条目。

使用Active Disk Editor非常容易检查MFT中文件的条目。只需右键单击文件然后单击“检查文件记录”

通过检查**“正在使用”**标志,很容易知道文件是否已删除(0x0表示已删除)。

还可以使用FTKImager恢复已删除的文件

MFT属性

每个MFT条目都有几个属性如下图所示

每个属性表示一些由类型标识的条目信息:

类型标识符 名称 描述
16 $STANDARD_INFORMATION 一般信息如标志最后访问、写入和创建时间所有者和安全ID。
32 $ATTRIBUTE_LIST 可在其中找到文件的其他属性的列表。
48 $FILE_NAME 文件名以Unicode表示以及最后访问、写入和创建时间。
64 $VOLUME_VERSION 卷信息。仅存在于版本1.2Windows NT
64 $OBJECT_ID 文件或目录的16字节唯一标识符。仅存在于版本3.0+之后Windows 2000+)。
80 $SECURITY_ DESCRIPTOR 文件的访问控制和安全属性。
96 $VOLUME_NAME 卷名称。
112 $VOLUME_ INFORMATION 文件系统版本和其他标志。
128 $DATA 文件内容。
144 $INDEX_ROOT 索引树的根节点。
160 $INDEX_ALLOCATION 以$INDEX_ROOT属性为根的索引树的节点。
176 $BITMAP 用于$MFT文件和索引的位图。
192 $SYMBOLIC_LINK 软链接信息。仅存在于版本1.2Windows NT
192 $REPARSE_POINT 包含关于重解析点的数据用作版本3.0+Windows 2000+)中的软链接。
208 $EA_INFORMATION 用于与OS/2应用程序HPFS向后兼容。
224 $EA 用于与OS/2应用程序HPFS向后兼容。
256 $LOGGED_UTILITY_STREAM 包含版本3.0+Windows 2000+)中加密属性的密钥和信息。

例如,类型480x30标识文件名

还有必要了解这些属性可以是驻留的意味着它们存在于给定的MFT记录中非驻留的意味着它们存在于MFT记录之外的磁盘的其他位置并且仅在记录中引用。例如如果属性**$Data是驻留的**,这意味着整个文件保存在MFT中,如果是非驻留的,则文件内容位于文件系统的另一部分。

一些有趣的属性:

  • $STANDARD_INFORMATION(以及其他):
  • 创建日期
  • 修改日期
  • 访问日期
  • MFT更新日期
  • DOS文件权限
  • $FILE_NAME(以及其他):
  • 文件名
  • 创建日期
  • 修改日期
  • 访问日期
  • MFT更新日期
  • 分配大小
  • 实际大小
  • 文件引用到父目录。
  • $Data(以及其他):
  • 包含文件的数据或数据所在扇区的指示。在下面的示例中,属性数据不是驻留的,因此属性提供有关数据所在扇区的信息。

NTFS时间戳

分析MFT的另一个有用工具是MFT2csv选择mft文件或图像然后按“dump all and extract”以提取所有对象
该程序将提取所有MFT数据并以CSV格式呈现。还可用于转储文件。

$LOGFILE

文件**$LOGFILE包含有关已对文件执行的操作日志**。它还保存了在发生错误时需要执行的操作以及需要执行的操作以返回先前状态
这些日志对于MFT在某种错误发生时重建文件系统很有用。此文件的最大大小为65536KB

要检查$LOGFILE,您需要先提取它,然后使用MFT2csv工具对先前检查的$MFT运行。
然后针对此文件运行LogFileParser,选择导出的$LOGFILE文件和$MFT检查的CVS。您将获得一个包含由$LOGFILE日志记录的文件系统活动日志的CSV文件。

通过文件名过滤,您可以查看针对文件执行的所有操作

$USNJnrl

文件$EXTEND/$USNJnrl/$J是文件$EXTEND$USNJnrl的一个备用数据流。此工件包含在NTFS卷内产生的更详细的更改记录的注册表$LOGFILE更详细。

要检查此文件,可以使用工具UsnJrnl2csv

通过文件名过滤,可以查看针对文件执行的所有操作。此外,您还可以在父文件夹中找到MFTReference。然后查看该MFTReference,您可以找到来自父文件夹的信息

$I