hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving
2023-08-03 19:12:22 +00:00
..
ext.md Translated to Chinese 2023-08-03 19:12:22 +00:00
file-data-carving-recovery-tools.md Translated to Chinese 2023-08-03 19:12:22 +00:00
file-data-carving-tools.md Translated to Chinese 2023-08-03 19:12:22 +00:00
ntfs.md Translated to Chinese 2023-08-03 19:12:22 +00:00
README.md Translated to Chinese 2023-08-03 19:12:22 +00:00

分区/文件系统/数据恢复

分区/文件系统/数据恢复

☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

分区

硬盘或SSD磁盘可以包含不同的分区,目的是物理上分隔数据。
磁盘的最小单位是扇区通常由512B组成。因此每个分区的大小都需要是该大小的倍数。

MBR主引导记录

它分配在引导代码的446B之后的磁盘的第一个扇区中。该扇区对于指示计算机应该从何处挂载分区至关重要。
它最多允许4个分区(最多只能有1个活动/可引导)。但是,如果需要更多的分区,可以使用扩展分区。该第一个扇区的最后一个字节是引导记录签名0x55AA。只能标记一个分区为活动状态。
MBR允许最大2.2TB

从MBR的第440到443字节,可以找到Windows磁盘签名如果使用Windows。硬盘的逻辑驱动器字母取决于Windows磁盘签名。更改此签名可能会导致Windows无法启动工具Active Disk Editor

格式

偏移量 长度 项目
0 (0x00) 446(0x1BE) 引导代码
446 (0x1BE) 16 (0x10) 第一个分区
462 (0x1CE) 16 (0x10) 第二个分区
478 (0x1DE) 16 (0x10) 第三个分区
494 (0x1EE) 16 (0x10) 第四个分区
510 (0x1FE) 2 (0x2) 签名 0x55 0xAA

分区记录格式

偏移量 长度 项目
0 (0x00) 1 (0x01) 活动标志0x80 = 可引导)
1 (0x01) 1 (0x01) 起始磁头
2 (0x02) 1 (0x01) 起始扇区位0-5柱面的高位6-7
3 (0x03) 1 (0x01) 起始柱面的最低8位
4 (0x04) 1 (0x01) 分区类型代码0x83 = Linux
5 (0x05) 1 (0x01) 结束磁头
6 (0x06) 1 (0x01) 结束扇区位0-5柱面的高位6-7
7 (0x07) 1 (0x01) 结束柱面的最低8位
8 (0x08) 4 (0x04) 分区之前的扇区数(小端)
12 (0x0C) 4 (0x04) 分区中的扇区数

要在Linux中挂载MBR首先需要获取起始偏移量可以使用fdiskp命令)

然后使用以下代码

#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/

LBA逻辑块寻址

逻辑块寻址LBA是一种常用的方案用于指定存储在计算机存储设备上的数据块的位置通常是二级存储系统如硬盘驱动器。LBA是一种特别简单的线性寻址方案块通过整数索引来定位第一个块为LBA 0第二个为LBA 1依此类推。

GPTGUID分区表

它被称为GUID分区表因为驱动器上的每个分区都有一个全局唯一标识符。

就像MBR一样它从扇区0开始。MBR占用32位而GPT使用64位。
GPT在Windows中允许最多128个分区容量高达9.4ZB
此外分区可以有一个36个字符的Unicode名称。

在MBR磁盘上分区和引导数据存储在一个地方。如果这些数据被覆盖或损坏你就会遇到麻烦。相比之下GPT在磁盘上存储了多个副本,因此它更加健壮,如果数据损坏,可以从磁盘上的其他位置尝试恢复损坏的数据。

GPT还存储了循环冗余校验CRC以检查其数据是否完整。如果数据损坏GPT可以注意到问题并尝试从磁盘上的其他位置恢复损坏的数据。

保护性MBRLBA0

为了有限的向后兼容性GPT规范中仍然保留了传统MBR的空间但现在以一种方式使用以防止基于MBR的磁盘工具错误识别和可能覆盖GPT磁盘。这被称为保护性MBR。

混合MBRLBA 0 + GPT

在支持通过BIOS进行基于GPT的引导而不是EFI的操作系统中第一个扇区可能仍然用于存储第一阶段的引导加载程序代码修改以识别GPT分区。MBR中的引导加载程序不能假设扇区大小为512字节。

分区表头LBA 1

分区表头定义了磁盘上可用的块。它还定义了组成分区表的分区条目的数量和大小表中的偏移量80和84

偏移量 长度 内容
0 (0x00) 8字节 签名("EFI PART"45h 46h 49h 20h 50h 41h 52h 54h或0x5452415020494645ULL 在小端机器上)
8 (0x08) 4字节 UEFI 2.8的版本1.000h 00h 01h 00h
12 (0x0C) 4字节 头部大小以字节为单位的小端序通常为5Ch 00h 00h 00h或92字节
16 (0x10) 4字节 头部的CRC32偏移量+0到头部大小的小端序计算时该字段为零
20 (0x14) 4字节 保留;必须为零
24 (0x18) 8字节 当前LBA此头部副本的位置
32 (0x20) 8字节 备份LBA另一个头部副本的位置
40 (0x28) 8字节 分区的第一个可用LBA主分区表的最后一个LBA + 1
48 (0x30) 8字节 最后一个可用LBA次分区表的第一个LBA - 1
56 (0x38) 16字节 混合字节序的磁盘GUID
72 (0x48) 8字节 分区条目数组的起始LBA主副本中始终为2
80 (0x50) 4字节 数组中的分区条目数
84 (0x54) 4字节 单个分区条目的大小通常为80h或128
88 (0x58) 4字节 分区条目数组的CRC32的小端序
92 (0x5C) * 保留对于块的其余部分必须为零对于512字节的扇区大小为420字节但对于更大的扇区大小可能更多

分区条目LBA 233

GUID分区条目格式
偏移量 长度 内容
0 (0x00) 16字节 分区类型GUID(混合字节序)
16 (0x10) 16字节 唯一分区GUID混合字节序
32 (0x20) 8字节 第一个LBA小端序
40 (0x28) 8字节 最后一个LBA包括通常为奇数
48 (0x30) 8字节 属性标志例如第60位表示只读
56 (0x38) 72字节 分区名称36个UTF-16LE代码单元

分区类型

更多分区类型请参考https://en.wikipedia.org/wiki/GUID_Partition_Table

检查

在使用ArsenalImageMounter挂载取证镜像后可以使用Windows工具Active Disk Editor检查第一个扇区。在下图中,检测到了MBR扇区0上,并进行了解释:

如果是GPT表而不是MBR,则在扇区1中应该出现_EFI PART_的签名在上图中为空

文件系统

Windows 文件系统列表

  • FAT12/16: MSDOS, WIN95/98/NT/200
  • FAT32: 95/2000/XP/2003/VISTA/7/8/10
  • ExFAT: 2008/2012/2016/VISTA/7/8/10
  • NTFS: XP/2003/2008/2012/VISTA/7/8/10
  • ReFS: 2012/2016

FAT

FAT文件分配表文件系统以其组织方法命名,文件分配表位于卷的开头。为了保护卷,保留两个副本的表,以防一个副本损坏。此外,文件分配表和根文件夹必须存储在固定位置,以便正确定位系统启动所需的文件。

该文件系统使用的最小空间单元是一个通常为512B(由多个扇区组成)。

早期的FAT12使用12位簇地址,最多有4078个簇它允许使用UNIX最多4084个簇。更高效的FAT16增加到16位簇地址,允许每个卷最多65517个簇。FAT32使用32位簇地址允许每个卷最多268435456个簇

FAT允许的最大文件大小为4GB减去一个字节因为文件系统使用32位字段以字节为单位存储文件大小而2^32字节=4 GiB。这适用于FAT12、FAT16和FAT32。

根目录在FAT12和FAT16中占据特定位置在FAT32中它占据像任何其他文件夹一样的位置。每个文件/文件夹条目包含以下信息:

  • 文件/文件夹的名称最多8个字符
  • 属性
  • 创建日期
  • 修改日期
  • 最后访问日期
  • 文件的第一个簇所在的FAT表的地址
  • 大小

使用FAT文件系统“删除”文件时目录条目几乎保持不变,除了文件名的第一个字符修改为0xE5保留了大部分“删除”文件的名称以及其时间戳、文件长度和最重要的是磁盘上的物理位置。然而文件占用的磁盘簇列表将从文件分配表中删除将这些扇区标记为其他文件创建或修改后可用。在FAT32的情况下还会擦除一个负责文件起始簇值的上16位的擦除字段。

NTFS

{% content-ref url="ntfs.md" %} ntfs.md {% endcontent-ref %}

EXT

Ext2不带日志的分区(不经常更改的分区,如引导分区)上最常见的文件系统。Ext3/4带日志的文件系统,通常用于其余分区

{% content-ref url="ext.md" %} ext.md {% endcontent-ref %}

元数据

某些文件包含元数据。这些信息是关于文件内容的,对于分析人员来说可能很有趣,因为根据文件类型的不同,它可能包含以下信息:

  • 标题
  • 使用的 MS Office 版本
  • 作者
  • 创建和最后修改的日期
  • 相机型号
  • GPS 坐标
  • 图像信息

您可以使用exiftoolMetadiver等工具获取文件的元数据。

已删除文件恢复

记录的已删除文件

如前所述文件“删除”后仍然保存在多个位置。这是因为通常从文件系统中删除文件只是将其标记为已删除但数据并未被触及。然后可以检查文件的注册表如MFT并找到已删除的文件。

此外,操作系统通常保存有关文件系统更改和备份的大量信息,因此可以尝试使用它们来恢复文件或尽可能多的信息。

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

文件切割

文件切割是一种试图在大量数据中找到文件的技术。这类工具的工作方式有三种:基于文件类型的头部和尾部,基于文件类型的结构,以及基于内容本身。

请注意,此技术无法用于检索碎片化的文件。如果文件不存储在连续的扇区中,那么这种技术将无法找到它或至少部分找到它。

有几个工具可以用于文件切割,您可以指定要搜索的文件类型

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

数据流切割

数据流切割类似于文件切割,但不是寻找完整的文件,而是寻找有趣的信息片段。例如,不是寻找包含已记录的 URL 的完整文件,而是搜索 URL。

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

安全删除

显然,有办法**“安全地”删除文件和与其相关的日志部分**。例如,可以多次使用垃圾数据覆盖文件的内容,然后从**$MFT$LOGFILE删除有关文件的日志**,并删除卷影副本
您可能会注意到,即使执行了该操作,仍然可能记录文件存在的其他部分,这是真实的,取证专业人员的工作之一就是找到它们。

参考资料

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥