hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving
2024-02-07 04:49:09 +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 ['ctf-write-ups/challenge-0521.intigriti.io.md', 'ctf-write-u 2024-02-07 04:49:09 +00:00
file-data-carving-tools.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
ntfs.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
README.md Translated ['ctf-write-ups/challenge-0521.intigriti.io.md', 'ctf-write-u 2024-02-07 04:49:09 +00:00

分区/文件系统/Carving

分区/文件系统/Carving

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

支持HackTricks的其他方式

分区

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

MBR主引导记录

它分配在磁盘的第一个扇区在引导代码的446B之后。这个扇区对于指示计算机应该挂载哪个分区以及从哪里挂载分区至关重要。
它允许最多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

偏移量 长度 内容
00x00 8字节 签名“EFI PART”45h 46h 49h 20h 50h 41h 52h 54h或0x5452415020494645ULL 在小端机器上)
80x08 4字节 UEFI 2.8的修订版1.000h 00h 01h 00h
120x0C 4字节 以小端表示的头部大小以字节为单位通常为5Ch 00h 00h 00h或92字节
160x10 4字节 头部的CRC32从偏移量+0到头部大小以小端表示在计算过程中将此字段清零
200x14 4字节 保留;必须为零
240x18 8字节 当前LBA此头部副本的位置
320x20 8字节 备份LBA另一个头部副本的位置
400x28 8字节 分区的第一个可用LBA主分区表的最后一个LBA + 1
480x30 8字节 最后一个可用LBA次要分区表的第一个LBA - 1
560x38 16字节 混合大小端的磁盘GUID
720x48 8字节 分区条目数组的起始LBA主副本中始终为2
800x50 4字节 数组中的分区条目数
840x54 4字节 单个分区条目的大小通常为80h或128
880x58 4字节 以小端表示的分区条目数组的CRC32
920x5C * 保留对于块的其余部分必须为零对于512字节的扇区大小为420字节但对于更大的扇区大小可能会更多

分区条目LBA 233

GUID分区条目格式
偏移量 长度 内容
00x00 16字节 分区类型GUID(混合大小端)
160x10 16字节 唯一分区GUID混合大小端
320x20 8字节 第一个LBA小端
400x28 8字节 最后一个LBA包括通常为奇数
480x30 8字节 属性标志例如第60位表示只读
560x38 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/16MSDOSWIN95/98/NT/200
  • FAT3295/2000/XP/2003/VISTA/7/8/10
  • ExFAT2008/2012/2016/VISTA/7/8/10
  • NTFSXP/2003/2008/2012/VISTA/7/8/10
  • ReFS2012/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中删除有关文件的日志,并删除卷影副本
您可能会注意到,即使执行了该操作,文件的存在仍可能被记录在其他地方,这是取证专业人员的工作的一部分,是找到它们的。

参考资料