Partitions/File Systems/Carving

支持 HackTricks

分区

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

MBR(主引导记录)

它分配在 引导代码后第一个扇区的 446B。这个扇区对于指示 PC 应该从哪里挂载分区至关重要。 它最多允许 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,依此类推。

GPT (GUID 分区表)

GUID 分区表,称为 GPT,因其相较于 MBR(主引导记录)具有增强的能力而受到青睐。GPT 以其全局唯一标识符为分区而独树一帜,具体体现在几个方面:

  • 位置和大小:GPT 和 MBR 都从扇区 0 开始。然而,GPT 采用64位,而 MBR 则是 32位。

  • 分区限制:GPT 在 Windows 系统上支持最多128个分区,并可容纳高达9.4ZB的数据。

  • 分区名称:提供最多 36 个 Unicode 字符的分区命名能力。

数据弹性和恢复

  • 冗余:与 MBR 不同,GPT 不将分区和引导数据限制在一个地方。它在磁盘上复制这些数据,从而增强数据完整性和弹性。

  • 循环冗余校验 (CRC):GPT 使用 CRC 来确保数据完整性。它主动监控数据损坏,并在检测到时,尝试从另一个磁盘位置恢复损坏的数据。

保护性 MBR (LBA0)

  • GPT 通过保护性 MBR 维持向后兼容性。此功能位于传统 MBR 空间中,但旨在防止较旧的基于 MBR 的工具错误地覆盖 GPT 磁盘,从而保护 GPT 格式磁盘上的数据完整性。

混合 MBR (LBA 0 + GPT)

来自维基百科

在支持通过 BIOS 服务而非 EFI 的GPT 启动的操作系统中,第一个扇区仍可能用于存储引导加载程序代码的第一阶段,但经过修改以识别GPT 分区。MBR 中的引导加载程序不得假设扇区大小为 512 字节。

分区表头 (LBA 1)

来自维基百科

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

偏移量长度内容

0 (0x00)

8 字节

签名 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 或 0x5452415020494645ULL 在小端机器上)

8 (0x08)

4 字节

版本 1.0 (00h 00h 01h 00h) 适用于 UEFI 2.8

12 (0x0C)

4 字节

小端的头部大小(以字节为单位,通常为 5Ch 00h 00h 00h 或 92 字节)

16 (0x10)

4 字节

CRC32 头部的 CRC(偏移量 +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 2–33)

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** 检查第一个扇区**。在下图中,在扇区 0 检测到一个 MBR 并进行了解释:

如果是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,由多个扇区组成。FAT 通过版本演变:

  • FAT12,支持 12 位簇地址,处理最多 4078 个簇(与 UNIX 一起为 4084)。

  • FAT16,增强为 16 位地址,从而容纳最多 65,517 个簇。

  • FAT32,进一步发展为 32 位地址,允许每个卷高达 268,435,456 个簇。

所有 FAT 版本的一个显著限制是最大文件大小为 4GB,这是由于用于文件大小存储的 32 位字段所致。

根目录的关键组件,特别是对于 FAT12 和 FAT16,包括:

  • 文件/文件夹名称(最多 8 个字符)

  • 属性

  • 创建、修改和最后访问日期

  • FAT 表地址(指示文件的起始簇)

  • 文件大小

EXT

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

元数据

某些文件包含元数据。这些信息是关于文件内容的,有时对分析师可能很有趣,因为根据文件类型,它可能包含如下信息:

  • 标题

  • 使用的 MS Office 版本

  • 作者

  • 创建和最后修改日期

  • 相机型号

  • GPS 坐标

  • 图像信息

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

已删除文件恢复

记录的已删除文件

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

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

File/Data Carving & Recovery Tools

文件雕刻

文件雕刻是一种尝试在大量数据中查找文件的技术。此类工具的主要工作方式有三种:基于文件类型的头部和尾部、基于文件类型的结构和基于内容本身。

请注意,此技术无法检索碎片化文件。如果文件未存储在连续扇区中,则此技术将无法找到它,或至少无法找到其部分。

您可以使用多种工具进行文件雕刻,指明您要搜索的文件类型。

File/Data Carving & Recovery Tools

数据流 Carving

数据流雕刻类似于文件雕刻,但不是查找完整文件,而是查找有趣的信息片段。 例如,代替查找包含记录的 URL 的完整文件,此技术将搜索 URL。

File/Data Carving & Recovery Tools

安全删除

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

参考文献

支持 HackTricks

Last updated