.. | ||
file-data-carving-recovery-tools.md | ||
README.md |
分区/文件系统/雕刻
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 上关注 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 分享黑客技巧。
分区
硬盘或 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,您首先需要获取起始偏移(可以使用 fdisk
和 p
命令)
然后使用以下代码
#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 坐标
- 图像信息
您可以使用 exiftool 和 Metadiver 等工具获取文件的元数据。
已删除文件恢复
记录的已删除文件
如前所述,有几个地方在文件“删除”后仍然保存文件。这是因为通常从文件系统中删除文件只是将其标记为已删除,但数据并未被触及。因此,可以检查文件的注册表(如 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 %}
数据流 Carving
数据流雕刻类似于文件雕刻,但不是查找完整文件,而是查找有趣的信息片段。
例如,代替查找包含记录的 URL 的完整文件,此技术将搜索 URL。
{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
安全删除
显然,有一些方法可以**“安全”删除文件及其部分日志**。例如,可以多次用垃圾数据覆盖文件的内容,然后删除关于该文件的**$MFT** 和 $LOGFILE 的日志,并删除卷影副本。
您可能会注意到,即使执行该操作,仍可能有其他部分记录了文件的存在,这确实是事实,取证专业人员的工作之一就是找到它们。
参考文献
- https://en.wikipedia.org/wiki/GUID_Partition_Table
- http://ntfs.com/ntfs-permissions.htm
- https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html
- https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
- iHackLabs 认证数字取证 Windows
{% hint style="success" %}
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 在 Twitter 上关注 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。