数字取证证据采集与完整性

CompTIABeginner
立即练习

介绍

欢迎来到数字取证的世界。任何调查的关键部分是正确获取数字证据。这个过程包括创建存储设备的精确、逐位副本,而不改变原始数据。同样重要的是确保该副本的完整性,证明自创建以来未被篡改。

在本实验中,你将扮演一名初级取证分析师的角色。你将学习如何使用标准的 Linux 命令行工具来执行数字取证中最基本的两项任务:证据获取和完整性验证。我们将使用 dd 命令创建磁盘映像,并使用 sha256sum 生成加密哈希,以确保我们的证据是可靠的。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 93%。获得了学习者 100% 的好评率。

使用 dd 创建模拟磁盘映像

在此步骤中,你将从模拟证据文件中创建一个取证映像。在数字取证中,“映像”是源驱动器的逐位副本。我们使用 dd 命令,这是一个强大且通用的复制和转换数据的实用程序。它是取证中的标准工具,因为它可以创建存储设备的精确副本,保留所有数据,包括已删除的文件和剩余空间(slack space)。

首先,让我们导航到我们的案例目录,查看已为你准备好的原始证据文件。

cd ~/project/forensics_case
ls -lh

你应该会看到一个名为 original_evidence.dd 的文件。

-rw-rw-r-- 1 labex labex 11M Aug  5 15:28 original_evidence.dd

现在,让我们使用 dd 来创建此文件的映像。我们将映像命名为 evidence_image.img

  • if=original_evidence.dd: 指定 input file(输入文件)。
  • of=evidence_image.img: 指定 output file(输出文件)。
  • bs=4096: 将 block size(块大小)设置为 4096 字节。这是一个常见的块大小,可能会影响性能。

执行以下命令:

dd if=original_evidence.dd of=evidence_image.img bs=4096

该命令将输出读取和写入的记录数以及复制的总字节数。

2560+1 records in
2560+1 records out
10485809 bytes (10 MB, 10 MiB) copied, 0.0130138 s, 806 MB/s

现在,再次列出文件,查看原始文件和新创建的映像。

ls -lh

你将看到 evidence_image.img 的大小与 original_evidence.dd 完全相同,这是我们的复制成功的第一个良好迹象。

-rw-rw-r-- 1 labex labex 11M Aug  5 15:43 evidence_image.img
-rw-rw-r-- 1 labex labex 11M Aug  5 15:28 original_evidence.dd

计算原始文件和映像文件的哈希值

在此步骤中,你将验证刚刚创建的取证映像的完整性。仅仅拥有一个副本是不够的;我们必须能够证明该副本是原始文件的精确、未更改的副本。我们通过为原始文件和映像计算加密哈希来做到这一点。

哈希函数接收一个输入(在我们的例子中是文件的内容),并生成一个固定大小的字符字符串,这就是“哈希”。即使输入文件发生微小的更改,也会产生一个完全不同的哈希。如果原始文件的哈希与映像文件的哈希匹配,我们就可以确信该副本是完美的。我们将使用 sha256sum 命令,它实现了 SHA-256 哈希算法。

首先,计算原始证据文件的 SHA256 哈希值:

sha256sum original_evidence.dd

输出将是一个长字符串(哈希值),后跟文件名。

55a290c58509790860da55a47256188865bdd8dd5cbf7cd5c4b95cb5264f109a  original_evidence.dd

接下来,计算你创建的映像文件的哈希值:

sha256sum evidence_image.img
55a290c58509790860da55a47256188865bdd8dd5cbf7cd5c4b95cb5264f109a  evidence_image.img

比较这两个哈希值。它们必须完全相同。这是你的 evidence_image.imgoriginal_evidence.dd 的真实准确副本的数学证明。

为了进行适当的文档记录,将这些哈希值保存到日志文件中是最佳实践。我们现在就来做。

sha256sum original_evidence.dd evidence_image.img > hashes.txt

现在,查看你的哈希日志文件的内容。

cat hashes.txt
55a290c58509790860da55a47256188865bdd8dd5cbf7cd5c4b95cb5264f109a  original_evidence.dd
55a290c58509790860da55a47256188865bdd8dd5cbf7cd5c4b95cb5264f109a  evidence_image.img

这个 hashes.txt 文件是你案件的关键文档。

提取基本文件元数据,如时间戳

在此步骤中,我们将检查文件的元数据。元数据是“关于数据的数据”,它可以在调查中提供关键的上下文。对于文件,这包括创建时间、最后修改时间以及最后访问时间等信息。这些通常被称为 MAC 时间(修改 Modify、访问 Access、更改 Change)。

我们将使用 stat 命令来查看这些详细信息。stat 命令显示文件或文件系统状态。

让我们首先查看 original_evidence.dd 文件的元数据。

stat original_evidence.dd

输出提供了大量信息,但让我们专注于时间戳。

  File: original_evidence.dd
  Size: 10485809        Blocks: 20488      IO Block: 4096   regular file
Device: 7eh/126d        Inode: 11210686    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: 2025-08-05 15:43:57.680473291 +0800
Modify: 2025-08-05 15:28:59.196596566 +0800
Change: 2025-08-05 15:28:59.196596566 +0800
 Birth: 2025-08-05 15:28:59.164595416 +0800

现在,让我们对我们的 evidence_image.img 执行相同的操作。

stat evidence_image.img
  File: evidence_image.img
  Size: 10485809        Blocks: 20488      IO Block: 4096   regular file
Device: 7eh/126d        Inode: 11206338    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: 2025-08-05 15:44:14.001048192 +0800
Modify: 2025-08-05 15:43:57.692473714 +0800
Change: 2025-08-05 15:43:57.692473714 +0800
 Birth: 2025-08-05 15:43:57.680473291 +0800

请注意,虽然文件内容是相同的(正如哈希值所证明的),但元数据却不是。evidence_image.img 的时间戳反映了映像的创建时间,而不是原始文件被创建或修改的时间。这是预期的行为,并且很重要,需要记录。它显示了你,调查员,执行了数据采集的时间。

生成获取证据的保管链日志

在最后一步,你将创建一个简单的保管链(Chain of Custody)日志。保管链是法证领域最关键的文件之一。它是一份按时间顺序记录的日志,详细说明证据的扣押、保管、控制、转移、分析和处置。一份维护良好的保管链可以证明证据得到了妥善处理,并且没有被篡改。

虽然真实的保管链表格会更复杂,但我们可以创建一个基本的文本日志来记录我们的操作。此日志应包含关于证据和采集过程的关键信息。

我们将使用 echo 命令将信息写入一个名为 chain_of_custody.log 的文件。我们需要收集几条信息:

  • 案件编号 (Case Number): 调查的唯一标识符。我们将使用 CASE-001
  • 项目描述 (Item Description): 证据是什么。
  • 采集日期/时间 (Date/Time of Acquisition): 我们可以使用 date 命令获取此信息。
  • 采集者 (Acquired by): 执行采集的分析师。我们将使用 whoami 命令的输出。
  • SHA256 哈希值 (SHA256 Hash): 我们采集的映像的哈希值,将从 hashes.txt 文件中获取。

让我们来创建日志。我们将使用 echo> 操作符来创建文件并添加第一行,然后使用 >> 来追加后续行。首先,让我们获取映像文件的哈希值。

IMAGE_HASH=$(grep 'evidence_image.img' hashes.txt | cut -d ' ' -f 1)

现在,让我们创建包含所有必要信息的日志文件。

echo "--- CHAIN OF CUSTODY ---" > chain_of_custody.log
echo "Case Number: CASE-001" >> chain_of_custody.log
echo "------------------------" >> chain_of_custody.log
echo "Item ID: 1" >> chain_of_custody.log
echo "Description: Forensic image of original_evidence.dd" >> chain_of_custody.log
echo "Acquired By: $(whoami)" >> chain_of_custody.log
echo "Acquisition Date: $(date)" >> chain_of_custody.log
echo "SHA256 Hash: $IMAGE_HASH" >> chain_of_custody.log
echo "--- END OF LOG ---" >> chain_of_custody.log

最后,显示你完成的保管链日志。

cat chain_of_custody.log

你的输出应该与此类似:

--- CHAIN OF CUSTODY ---
Case Number: CASE-001
------------------------
Item ID: 1
Description: Forensic image of original_evidence.dd
Acquired By: labex
Acquisition Date: Tue Aug  5 15:44:43 CST 2025
SHA256 Hash: 55a290c58509790860da55a47256188865bdd8dd5cbf7cd5c4b95cb5264f109a
--- END OF LOG ---

你现在已经创建了一个基本但至关重要的文档,记录了你的操作并保护了证据的完整性。

总结

在此次实验中,你已成功完成了数字取证证据采集和完整性验证的基础步骤。

你学会了如何:

  • 使用 dd 命令创建数据源的逐位(bit-for-bit)取证映像。
  • 使用 sha256sum 命令计算加密哈希值,以证明取证映像是原始证据的精确副本。
  • 使用 stat 命令检查文件元数据,例如时间戳,这对于理解文件的历史至关重要。
  • 创建一个基本的保管链(Chain of Custody)日志来记录证据的处理过程,这是法律诉讼的关键要求。

这些技能是严谨数字取证实践的基石。通过确保证据被正确采集并保持其完整性,你为成功的调查奠定了基础。