235 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 分区/文件系统/雕刻
{{#include ../../../banners/hacktricks-training.md}}
## 分区
硬盘或**SSD磁盘可以包含不同的分区**,目的是物理上分隔数据。\
磁盘的**最小**单位是**扇区**通常由512B组成。因此每个分区的大小需要是该大小的倍数。
### MBR主引导记录
它分配在**引导代码后的第一个扇区的446B**。这个扇区对于指示PC应该从哪里挂载分区至关重要。\
它最多允许**4个分区**(最多**只有1个**可以是活动的/**可引导的**)。但是,如果需要更多分区,可以使用**扩展分区**。这个第一个扇区的**最后一个字节**是引导记录签名**0x55AA**。只能标记一个分区为活动。\
MBR允许**最大2.2TB**。
![](<../../../images/image (350).png>)
![](<../../../images/image (304).png>)
从MBR的**440到443字节**可以找到**Windows磁盘签名**如果使用Windows。硬盘的逻辑驱动器字母取决于Windows磁盘签名。更改此签名可能会导致Windows无法启动工具[**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**。
![](<../../../images/image (310).png>)
**格式**
| 偏移量 | 长度 | 项目 |
| ----------- | -------- | ------------------- |
| 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`命令)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
然后使用以下代码
```bash
#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 来确保数据完整性。它主动监控数据损坏一旦发现GPT 会尝试从另一个磁盘位置恢复损坏的数据。
**保护性 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](<../../../images/image (1062).png>)
**混合 MBR (LBA 0 + GPT)**
[来自维基百科](https://en.wikipedia.org/wiki/GUID_Partition_Table)
在支持**通过 BIOS** 服务而非 EFI 的操作系统中,第一扇区仍可能用于存储**引导加载程序**代码的第一阶段,但**经过修改**以识别**GPT** **分区**。MBR 中的引导加载程序不得假设扇区大小为 512 字节。
**分区表头 (LBA 1)**
[来自维基百科](https://en.wikipedia.org/wiki/GUID_Partition_Table)
分区表头定义了磁盘上可用的块。它还定义了构成分区表的分区条目的数量和大小(在表中的偏移量 80 和 84
| 偏移量 | 长度 | 内容 |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 字节 | 签名 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 或 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-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](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs)(混合字节序) |
| 16 (0x10) | 16 字节 | 唯一分区 GUID混合字节序 |
| 32 (0x20) | 8 字节 | 第一个 LBA[小端](https://en.wikipedia.org/wiki/Little_endian) |
| 40 (0x28) | 8 字节 | 最后 LBA包含通常为奇数 |
| 48 (0x30) | 8 字节 | 属性标志(例如,第 60 位表示只读) |
| 56 (0x38) | 72 字节 | 分区名称36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE 代码单元) |
**分区类型**
![](<../../../images/image (83).png>)
更多分区类型请见 [https://en.wikipedia.org/wiki/GUID_Partition_Table](https://en.wikipedia.org/wiki/GUID_Partition_Table)
### 检查
在使用 [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/) 挂载取证镜像后,可以使用 Windows 工具 [**Active Disk Editor**](https://www.disk-editor.org/index.html)** 检查第一个扇区**。在下图中,**扇区 0** 检测到一个 **MBR** 并被解释:
![](<../../../images/image (354).png>)
如果它是 **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 个簇4084 个与 UNIX
- **FAT16**,增强为 16 位地址,从而容纳最多 65,517 个簇。
- **FAT32**,进一步发展为 32 位地址,允许每个卷高达 268,435,456 个簇。
所有 FAT 版本的一个显著限制是**最大文件大小为 4GB**,这是由于用于文件大小存储的 32 位字段所致。
根目录的关键组件,特别是对于 FAT12 和 FAT16包括
- **文件/文件夹名称**(最多 8 个字符)
- **属性**
- **创建、修改和最后访问日期**
- **FAT 表地址**(指示文件的起始簇)
- **文件大小**
### EXT
**Ext2** 是最常见的**非日志**分区(**不经常更改的分区**)的文件系统,如引导分区。**Ext3/4** 是**日志**文件系统,通常用于**其余分区**。
## **元数据**
某些文件包含元数据。这些信息是关于文件内容的,有时对分析师可能很有趣,因为根据文件类型,它可能包含如下信息:
- 标题
- 使用的 MS Office 版本
- 作者
- 创建和最后修改日期
- 相机型号
- GPS 坐标
- 图像信息
您可以使用像 [**exiftool**](https://exiftool.org) 和 [**Metadiver**](https://www.easymetadata.com/metadiver-2/) 这样的工具来获取文件的元数据。
## **已删除文件恢复**
### 记录的已删除文件
如前所述,有几个地方在文件被“删除”后仍然保存该文件。这是因为通常从文件系统中删除文件只是将其标记为已删除,但数据并未被触及。因此,可以检查文件的注册表(如 MFT并找到已删除的文件。
此外,操作系统通常会保存大量关于文件系统更改和备份的信息,因此可以尝试使用它们来恢复文件或尽可能多的信息。
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### **文件雕刻**
**文件雕刻**是一种尝试在大量数据中**查找文件**的技术。此类工具的工作主要有三种方式:**基于文件类型的头部和尾部**、基于文件类型的**结构**以及基于**内容**本身。
请注意,这种技术**无法检索碎片化的文件**。如果文件**未存储在连续的扇区中**,则此技术将无法找到它,或至少无法找到其部分。
您可以使用多种工具进行文件雕刻,指明您要搜索的文件类型。
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### 数据流 **C**arving
数据流雕刻类似于文件雕刻,但**不是查找完整文件,而是查找有趣的信息片段**。\
例如,代替查找包含记录的 URL 的完整文件,此技术将搜索 URL。
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### 安全删除
显然,有方法可以**“安全地”删除文件及其部分日志**。例如,可以**多次用垃圾数据覆盖**文件的内容,然后**删除**关于该文件的**$MFT** 和 **$LOGFILE** 中的**日志**,并**删除卷影副本**。\
您可能会注意到,即使执行该操作,仍可能有**其他地方记录了文件的存在**,这确实是事实,取证专业人员的工作就是找到它们。
## 参考文献
- [https://en.wikipedia.org/wiki/GUID_Partition_Table](https://en.wikipedia.org/wiki/GUID_Partition_Table)
- [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
- [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](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](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
- **iHackLabs 认证数字取证 Windows**
{{#include ../../../banners/hacktricks-training.md}}