1. 取证工程导论
磁盘与文件系统取证,是数字取证的一个核心分支。它研究的对象不是“文件内容”本身,而是承载文件的底层介质与组织规则:磁盘的扇区、分区表、卷、文件系统元数据、日志、空闲空间、残留数据,以及这些结构在时间维度上的变化痕迹。理解这一点非常关键——同一份文档,在操作系统里看到的是“一个文件”,在取证视角下则是一组指向数据块的索引记录、若干时间戳、可能的日志条目,以及尚未被覆盖的旧版本残片。
因此,磁盘与文件系统取证的定义可以概括为:以磁盘等块存储介质及其文件系统为对象,通过只读获取、镜像固定、结构解析、数据恢复与时间线重建,形成可验证、可复现、可追溯证据的工程活动。它既包含技术操作,也包含程序规范,二者缺一不可。
一、法律边界:取证不是“随便看看”
取证工作的第一约束不是技术能力,而是合法性。未经授权对他人设备进行镜像、挂载、恢复删除文件,即使技术完美,也可能构成侵权甚至违法。合法取证通常需要满足几个前提:明确的授权来源(如搜查令、公司制度授权、当事人书面同意、司法委托书)、限定取证范围(哪些设备、哪些分区、哪些时间段)、规范的操作记录,以及证据保管链的完整。
在工程实践中,需要特别区分三类边界:
- 权限边界:谁授权、授权到什么程度。超出授权范围获取的数据,可能被认定为非法证据。
- 对象边界:只对授权设备与分区操作,避免误触无关存储介质。
- 方法边界:优先使用只读、写保护、镜像副本方式,避免对原始介质产生任何写入。
二、工程化流程:从证物到结论
磁盘与文件系统取证不是一次性动作,而是一条可管理的工程链。典型流程包括:证物接收与登记、写保护与镜像获取、哈希固定、镜像副本制作、文件系统解析、数据恢复与筛选、时间线重建、分析报告与归档。每一步都产生可记录的输出,形成证据链。
以一块 500GB 的 SATA 硬盘为例,假设授权范围是“整盘镜像,用于分析某时间段内的文件操作”。工程上通常先接入写保护设备,使用 dd 或专用取证工具生成 E01 或 RAW 镜像,同时计算 MD5/SHA-256。示例命令如下:
# 示例:只读镜像并计算哈希(实际执行需在写保护条件下进行)
dd if=/dev/sdb of=/evidence/disk01.raw bs=512 conv=noerror,sync
sha256sum /evidence/disk01.raw
# 输出示例(假设值):
# 3f2a...c91d /evidence/disk01.raw
镜像完成后,原始盘封存,后续所有解析、恢复、挂载都在副本上进行。这样即使分析过程中出现误操作,也不会污染原始证物。哈希值的作用是“固定”:只要镜像哈希与记录一致,就能证明分析对象未被篡改。
三、文件系统取证的核心观察点
文件系统是磁盘上的“组织规则”。以 NTFS 为例,取证关注的核心结构包括:引导扇区($Boot)、主文件表($MFT)、日志文件($LogFile)、USN 变更日志、$Bitmap 空闲空间位图、以及各类元数据文件。每个文件在 $MFT 中至少有一条记录,记录中包含文件名、父目录引用、时间戳(创建、修改、MFT 修改、访问)、数据运行列表(Data Runs)等。
删除文件时,NTFS 通常不会立即清除数据区,而是将 $MFT 记录标记为空闲,并在 $Bitmap 中释放对应簇。只要这些簇未被新数据覆盖,就可能恢复出文件内容或残片。这正是文件系统取证的价值所在:操作系统“看不见”的,取证视角可能仍然可见。
时间戳是另一条关键线索。NTFS 的四个时间戳($STANDARD_INFORMATION 与 $FILE_NAME 各一套)可能不一致,这种不一致本身就可能说明文件被复制、移动或工具修改过。分析时需要交叉比对,而不是只看一个时间。
四、证据链要求:可追溯比“找到”更重要
证据链(Chain of Custody)要求从获取到呈堂的每一次交接、每一次操作都有记录。工程上至少应记录:证物编号、设备型号与序列号、获取时间、操作人、使用工具及版本、镜像路径、哈希算法与哈希值、存储位置、交接签名。缺少任何一环,证据的证明力都会下降。
下面这张图概括了磁盘与文件系统取证从授权到证据输出的工程链路与关键控制点,便于建立整体框架。
五、工程化落地的关键习惯
把上述流程落到日常工作中,需要形成几个稳定习惯。第一,先记录再操作:任何接入、镜像、挂载前先登记证物信息与操作目的。第二,先固定再分析:镜像哈希未记录前,不进行任何解析。第三,先副本再实验:恢复、挂载、工具测试一律在副本上做。第四,先交叉再结论:单一时间戳、单一日志、单一工具结果都不足以定论,需要多源比对。
对于文件系统取证,一个常见的误区是“只看文件内容”。实际上,目录结构、文件大小、簇分配、时间戳异常、日志中的重命名与删除记录,往往比文件内容更能说明“发生了什么”。例如,一个文件在 $MFT 中显示创建时间晚于修改时间,可能意味着时间被篡改或系统时间被调整;一个已删除文件仍能在 $LogFile 中找到创建记录,则说明它曾经真实存在过。