hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/README.md

18 KiB
Raw Blame History

分区/文件系统/Carving

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持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依此类推。

GPTGUID分区表

GUID分区表简称GPT因其与MBR主引导记录相比增强的功能而备受青睐。GPT以其全局唯一标识符为分区而脱颖而出,具有以下几个显著特点:

  • 位置和大小GPT和MBR都从扇区0开始。但是GPT使用64位与MBR的32位形成对比。
  • 分区限制GPT在Windows系统上支持最多128个分区,并可容纳高达9.4ZB的数据。
  • 分区名称提供了使用最多36个Unicode字符命名分区的功能。

数据弹性和恢复

  • 冗余与MBR不同GPT不将分区和引导数据限制在单一位置。它在整个磁盘上复制这些数据增强数据完整性和弹性。
  • 循环冗余校验CRCGPT采用CRC来确保数据完整性。它积极监视数据损坏一旦检测到GPT会尝试从另一个磁盘位置恢复损坏的数据。

保护性MBRLBA0

  • 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

混合MBRLBA 0 + GPT

来自维基百科

在支持通过BIOS进行基于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字节 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包含多个扇区。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 %}

文件切割

文件切割是一种尝试在大量数据中查找文件的技术。此类工具的工作方式有3种主要方式基于文件类型的头部和尾部,基于文件类型的结构,以及基于内容本身。

请注意,此技术无法用于检索分段的文件。如果文件未存储在连续的扇区中,则此技术将无法找到它,或者至少无法找到部分文件。

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

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

参考资料

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式