4. MBR与GPT分区体系
分区表是磁盘取证中最先接触、也最容易被忽略的元数据层。它决定了操作系统如何理解磁盘上的数据边界,也决定了取证人员能否正确还原被删除、被隐藏或被篡改的分区。本节围绕MBR与GPT两套分区体系,从结构解析入手,逐步展开分区恢复、隐藏分区识别与分区表取证分析。
一、MBR分区表结构解析
MBR(Master Boot Record)位于磁盘的第一个扇区(LBA 0),共512字节。其结构分为三部分:前446字节为引导代码,中间64字节为分区表项(Partition Table Entry),最后2字节为结束标志0x55AA。64字节被均分为4个16字节的分区表项,因此MBR最多直接支持4个主分区。
每个16字节分区表项的字段布局如下:
| 偏移 | 长度 | 字段 | 说明 |
|---|---|---|---|
| 0x00 | 1 | Boot Flag | 0x80为活动分区,0x00为非活动 |
| 0x01 | 3 | CHS起始地址 | 柱面/磁头/扇区,历史遗留 |
| 0x04 | 1 | 分区类型 | 如0x07 NTFS、0x0B FAT32、0x83 Linux |
| 0x05 | 3 | CHS结束地址 | 同上 |
| 0x08 | 4 | LBA起始扇区 | 小端序,关键取证字段 |
| 0x0C | 4 | 分区扇区数 | 小端序,决定分区边界 |
取证时重点关注LBA起始扇区与分区扇区数。若这两个字段被篡改,分区边界就会偏移,导致文件系统无法挂载。例如,一个NTFS分区原本起始于LBA 2048、长度为209715200扇区,若起始被改为LBA 4096,则挂载时读取到的将是分区内部数据而非NTFS引导扇区,表现为“分区存在但无法识别”。
MBR的扩展分区机制通过EBR(Extended Boot Record)链实现逻辑分区。每个EBR同样包含一个分区表项指向下一个EBR,形成单向链表。取证分析时需沿链遍历,注意EBR中的起始LBA是相对于扩展分区起点的相对值,而非绝对LBA,这是常见的解析错误来源。
二、GPT分区表结构解析
GPT(GUID Partition Table)使用LBA 1作为GPT头,LBA 2至LBA 33通常为分区表项数组(每个128字节,默认128项)。GPT头包含签名EFI PART、修订号、头大小、CRC32校验、当前LBA、备份LBA、分区表项起始LBA、分区表项数量、单个表项大小以及分区表项数组的CRC32。
每个GPT分区表项包含:分区类型GUID(16字节)、唯一分区GUID(16字节)、起始LBA(8字节)、结束LBA(8字节)、属性标志(8字节)和分区名(72字节,UTF-16LE)。属性标志中,bit 0表示“必需分区”,bit 1表示“隐藏分区”,bit 2表示“传统BIOS可引导”。取证时若发现bit 1被置位,说明该分区被标记为隐藏,操作系统默认不分配盘符。
GPT在磁盘末尾保留一份备份GPT头和备份分区表项数组。当主GPT头损坏时,可通过备份恢复。取证工具如gdisk可执行gdisk /dev/sdb后使用v验证、r进入恢复菜单、b从备份重建主GPT。命令行示例:
# 查看GPT结构
gdisk -l /dev/sdb
# 从备份GPT恢复主GPT
gdisk /dev/sdb
Command (? for help): r
Recovery/transformation command (? for help): b
Recovery/transformation command (? for help): w
三、分区恢复与隐藏分区识别
分区恢复的核心思路是:先判断分区表是否可读,再判断分区边界是否可信,最后通过文件系统引导扇区特征反向定位分区。常见场景包括:分区表被清空、分区项被删除、分区起始LBA被篡改、GPT头CRC校验失败。
对于MBR分区表被清空的情况,可使用testdisk进行快速扫描。Testdisk会遍历磁盘寻找文件系统引导扇区(如NTFS的NTFS 、FAT32的FAT32 、ext4的0x53EF魔数),并据此重建分区表。操作流程为:testdisk /dev/sdb → 选择分区表类型 → Analyse → Quick Search → 确认分区 → Write写回。
隐藏分区的识别可从三个层面入手:一是MBR分区类型字段使用非标准值(如0x17隐藏NTFS、0x1B隐藏FAT32);二是GPT属性标志bit 1被置位;三是分区表项存在但文件系统引导扇区被清零或替换。取证时应记录隐藏分区的起始LBA、大小、类型及属性,并与正常分区对比。
四、分区表取证分析要点
分区表取证分析应遵循“先记录、后分析、再验证”的原则。第一步是制作磁盘镜像,使用dd或dc3dd获取完整镜像并计算哈希值,确保原始证据不被破坏。第二步是解析分区表,记录每个分区的起始LBA、结束LBA、类型、属性标志和分区名。第三步是交叉验证,将分区表信息与文件系统引导扇区、$MFT或超级块进行比对。
常见的异常模式包括:分区表项指向的LBA超出磁盘容量;两个分区表项重叠;GPT头中的分区表项数量与实际不符;备份GPT与主GPT不一致;分区类型GUID与文件系统实际类型不匹配。这些异常往往指向人为篡改或磁盘损坏。
注意:在分析分区表时,不要直接对原始磁盘执行写操作。所有恢复操作应在镜像副本上进行,并保留操作日志。若必须写回原始磁盘,应先完成镜像备份并记录哈希。
分区表取证的价值不仅在于恢复数据,更在于还原操作痕迹。例如,GPT属性标志中隐藏位被置位的时间、MBR分区类型字段被修改的顺序、EBR链中某个节点的缺失,都可能成为判断“谁在何时对分区做了什么”的关键线索。结合文件系统时间戳与日志,可以进一步构建完整的事件时间线。
实际案例中,某服务器磁盘出现“分区存在但无法访问”的故障。取证人员首先读取MBR,发现第一个分区表项起始LBA为2048、类型0x07,看似正常;但进一步读取LBA 2048处的内容,发现并非NTFS引导扇区,而是全零。继续搜索磁盘,在LBA 4096处发现NTFS引导扇区。由此判断分区起始LBA被从4096篡改为2048。修正后分区恢复正常挂载。该案例说明,分区表字段的微小偏移即可导致整个分区不可用,而反向搜索文件系统特征扇区是定位真实边界的有效手段。
综上,MBR与GPT分区体系是磁盘取证的入口层。掌握分区表结构、理解扩展分区链与GPT双备份机制、熟悉分区恢复工具与隐藏分区识别方法,是开展后续文件系统取证与数据恢复的前提。取证人员应始终以镜像为基础,以交叉验证为手段,以时间线重建为目标,确保分析结论可复现、可追溯。