介绍
欢迎来到数字取证的世界。任何调查的关键部分是正确获取数字证据。这个过程包括创建存储设备的精确、逐位副本,而不改变原始数据。同样重要的是确保该副本的完整性,证明自创建以来未被篡改。
在本实验中,你将扮演一名初级取证分析师的角色。你将学习如何使用标准的 Linux 命令行工具来执行数字取证中最基本的两项任务:证据获取和完整性验证。我们将使用 dd 命令创建磁盘映像,并使用 sha256sum 生成加密哈希,以确保我们的证据是可靠的。
欢迎来到数字取证的世界。任何调查的关键部分是正确获取数字证据。这个过程包括创建存储设备的精确、逐位副本,而不改变原始数据。同样重要的是确保该副本的完整性,证明自创建以来未被篡改。
在本实验中,你将扮演一名初级取证分析师的角色。你将学习如何使用标准的 Linux 命令行工具来执行数字取证中最基本的两项任务:证据获取和完整性验证。我们将使用 dd 命令创建磁盘映像,并使用 sha256sum 生成加密哈希,以确保我们的证据是可靠的。
在此步骤中,你将从模拟证据文件中创建一个取证映像。在数字取证中,“映像”是源驱动器的逐位副本。我们使用 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.img 是 original_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-001。date 命令获取此信息。whoami 命令的输出。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 命令检查文件元数据,例如时间戳,这对于理解文件的历史至关重要。这些技能是严谨数字取证实践的基石。通过确保证据被正确采集并保持其完整性,你为成功的调查奠定了基础。