Partitions/File Systems/Carving
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
硬盘或 SSD 磁盘可以包含不同的分区,目的是物理上分隔数据。 磁盘的 最小 单位是 扇区(通常由 512B 组成)。因此,每个分区的大小需要是该大小的倍数。
它分配在 引导代码后第一个扇区的 446B。这个扇区对于指示 PC 应该从哪里挂载分区至关重要。 它最多允许 4 个分区(最多 只有 1 个 可以是活动的/可引导)。但是,如果需要更多分区,可以使用 扩展分区。这个第一个扇区的 最后一个字节 是引导记录签名 0x55AA。只能标记一个分区为活动。 MBR 允许 最大 2.2TB。
从 MBR 的 440 到 443 字节 可以找到 Windows 磁盘签名(如果使用 Windows)。硬盘的逻辑驱动器字母取决于 Windows 磁盘签名。更改此签名可能会导致 Windows 无法启动(工具:Active Disk Editor)。
格式
分区记录格式
为了在 Linux 中挂载 MBR,您首先需要获取起始偏移(可以使用 fdisk
和 p
命令)
然后使用以下代码
LBA (逻辑块寻址)
逻辑块寻址 (LBA) 是一种常用的方案,用于指定存储在计算机存储设备上的数据块的位置,通常是硬盘驱动器等二级存储系统。LBA 是一种特别简单的线性寻址方案;块通过整数索引定位,第一个块为 LBA 0,第二个为 LBA 1,依此类推。
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)。
分区条目 (LBA 2–33)
分区类型
更多分区类型请见 https://en.wikipedia.org/wiki/GUID_Partition_Table
在使用 ArsenalImageMounter 挂载取证镜像后,可以使用 Windows 工具 Active Disk Editor** 检查第一个扇区**。在下图中,在扇区 0 检测到一个 MBR 并进行了解释:
如果是GPT 表而不是 MBR,则在扇区 1 中应出现签名 EFI PART(在前面的图像中是空的)。
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 (文件分配表) 文件系统围绕其核心组件——文件分配表设计,该表位于卷的开始。该系统通过维护两个副本的表来保护数据,确保即使一个损坏也能保持数据完整性。该表及根文件夹必须位于固定位置,这对系统的启动过程至关重要。
文件系统的基本存储单位是簇,通常为 512B,由多个扇区组成。FAT 通过版本演变:
FAT12,支持 12 位簇地址,处理最多 4078 个簇(与 UNIX 一起为 4084)。
FAT16,增强为 16 位地址,从而容纳最多 65,517 个簇。
FAT32,进一步发展为 32 位地址,允许每个卷高达 268,435,456 个簇。
所有 FAT 版本的一个显著限制是最大文件大小为 4GB,这是由于用于文件大小存储的 32 位字段所致。
根目录的关键组件,特别是对于 FAT12 和 FAT16,包括:
文件/文件夹名称(最多 8 个字符)
属性
创建、修改和最后访问日期
FAT 表地址(指示文件的起始簇)
文件大小
Ext2 是最常见的非日志分区(不经常更改的分区)的文件系统,如引导分区。Ext3/4 是日志文件系统,通常用于其余分区。
某些文件包含元数据。这些信息是关于文件内容的,有时对分析师可能很有趣,因为根据文件类型,它可能包含如下信息:
标题
使用的 MS Office 版本
作者
创建和最后修改日期
相机型号
GPS 坐标
图像信息
您可以使用 exiftool 和 Metadiver 等工具获取文件的元数据。
如前所述,有几个地方在文件“删除”后仍然保存文件。这是因为通常从文件系统中删除文件只是将其标记为已删除,但数据并未被触及。因此,可以检查文件的注册表(如 MFT)并找到已删除的文件。
此外,操作系统通常会保存大量关于文件系统更改和备份的信息,因此可以尝试使用它们来恢复文件或尽可能多的信息。
文件雕刻是一种尝试在大量数据中查找文件的技术。此类工具的主要工作方式有三种:基于文件类型的头部和尾部、基于文件类型的结构和基于内容本身。
请注意,此技术无法检索碎片化文件。如果文件未存储在连续扇区中,则此技术将无法找到它,或至少无法找到其部分。
您可以使用多种工具进行文件雕刻,指明您要搜索的文件类型。
数据流雕刻类似于文件雕刻,但不是查找完整文件,而是查找有趣的信息片段。 例如,代替查找包含记录的 URL 的完整文件,此技术将搜索 URL。
显然,有一些方法可以**“安全”删除文件及其部分日志**。例如,可以多次用垃圾数据覆盖文件的内容,然后删除关于该文件的**$MFT** 和 $LOGFILE 的日志,并删除卷影副本。 您可能会注意到,即使执行该操作,仍可能有其他部分记录了文件的存在,这确实是事实,取证专业人员的工作之一就是找到它们。
iHackLabs 认证数字取证 Windows
偏移 | 长度 | 项目 |
---|---|---|
偏移 | 长度 | 项目 |
---|---|---|
偏移量 | 长度 | 内容 |
---|---|---|
GUID 分区条目格式 | ||
---|---|---|
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
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)
分区中的扇区
0 (0x00)
8 字节
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 字节;但对于更大的扇区大小可以更多)
偏移量
长度
内容
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 代码单元)