hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving
2024-07-18 22:08:20 +00:00
..
ext.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
file-data-carving-recovery-tools.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:08:20 +00:00
file-data-carving-tools.md Translated ['1911-pentesting-fox.md', '6881-udp-pentesting-bittorrent.md 2024-07-18 18:17:52 +00:00
ntfs.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
README.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:08:20 +00:00

Partitions/File Systems/Carving

{% hint style="success" %} 学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}

Partitions

硬盘或 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 格式磁盘上的数据完整性。

https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png

混合 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 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** 检查第一个扇区**。在下图中,在扇区 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并找到已删除的文件。

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

{% 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 中的日志,并删除卷影副本
您可能会注意到,即使执行该操作,仍可能有其他部分记录了文件的存在,这确实是事实,取证专业人员的工作之一就是找到它们。

参考文献

{% hint style="success" %} 学习和实践 AWS 黑客攻击:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客攻击: HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}