关于 acquiring-disk-image-with-dd-and-dcfldd
为数字取证人员提供使用 dd 和 dcfldd 获取磁盘镜像的操作指南,涵盖写保护、逐位复制、哈希校验和过程记录。适用于事件响应及证据保全。
主要功能
- 01识别设备并启用写保护
- 02使用 dd 或 dcfldd 创建镜像
- 03计算并核对哈希值
- 04记录采集过程与证据链
- 05处理远程采集和故障磁盘
适用场景
- 01调查前复制嫌疑磁盘
- 02为法律程序保全经验证的副本
- 03从受感染工作站采集 USB 介质
- 04处理故障磁盘或远程采集
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill acquiring-disk-image-with-dd-and-dcfldd安装后在 Claude Code 中输入/acquiring-disk-image-with-dd-and-dcfldd确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 dd 和 dcfldd 获取磁盘镜像
何时使用
- 当你需要为调查创建嫌疑磁盘的取证副本时
- 在事件响应期间,需要在分析前保存易失性磁盘证据时
- 当执法或法律程序需要经过验证的逐位副本时
- 在对存储设备执行任何破坏性分析之前
- 当需要从物理磁盘、USB 设备或存储卡获取镜像时
前置条件
- 基于 Linux 的取证工作站(SIFT、Kali 或任意 Linux 发行版)
dd(所有 Linux 系统均预装)或dcfldd(增强型取证版本)- 已配置硬件写阻断器或软件写阻断
- 具有足够存储空间的目标磁盘(大于源磁盘)
- 取证工作站上的 root/sudo 权限
- SHA-256 或 MD5 哈希工具(
sha256sum、md5sum)
工作流
步骤 1:识别目标设备并启用写保护
# List all connected block devices to identify the target
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL
# Verify the device details
fdisk -l /dev/sdb
# Enable software write-blocking (if no hardware blocker)
blockdev --setro /dev/sdb
# Verify read-only status
blockdev --getro /dev/sdb
# Output: 1 (means read-only is enabled)
# Alternatively, use udev rules for persistent write-blocking
echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules
udevadm control --reload-rules
步骤 2:准备目标磁盘并记录源设备信息
# Create case directory structure
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}
# Document source drive information
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt
# Record the serial number and model
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt
# Pre-hash the source device
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt
步骤 3:使用 dd 获取镜像
# Basic dd acquisition with progress and error handling
dd if=/dev/sdb of=/cases/case-2024-001/images/evidence.dd \
bs=4096 \
conv=noerror,sync \
status=progress 2>&1 | tee /cases/case-2024-001/logs/dd_acquisition.log
# For compressed images to save space
dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \
gzip -c > /cases/case-2024-001/images/evidence.dd.gz
# Using dd with a specific count for partial acquisition
dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \
bs=1M count=1024 status=progress
步骤 4:使用 dcfldd 获取镜像(首选取证方法)
# Install dcfldd if not present
apt-get install dcfldd
# Acquire image with built-in hashing and split output
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256,md5 \
hashwindow=1G \
hashlog=/cases/case-2024-001/hashes/acquisition_hashes.txt \
bs=4096 \
conv=noerror,sync \
errlog=/cases/case-2024-001/logs/dcfldd_errors.log
# Split large images into manageable segments
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256 \
hashlog=/cases/case-2024-001/hashes/split_hashes.txt \
bs=4096 \
split=2G \
splitformat=aa
# Acquire with verification pass
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256 \
hashlog=/cases/case-2024-001/hashes/verification.txt \
vf=/cases/case-2024-001/images/evidence.dd \
verifylog=/cases/case-2024-001/logs/verify.log
步骤 5:验证镜像完整性
# Hash the acquired image
sha256sum /cases/case-2024-001/images/evidence.dd | \
tee /cases/case-2024-001/hashes/image_hash.txt
# Compare source and image hashes
diff <(sha256sum /dev/sdb | awk '{print $1}') \
<(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')
# If using split images, verify each segment
sha256sum /cases/case-2024-001/images/evidence.dd.* | \
tee /cases/case-2024-001/hashes/split_image_hashes.txt
# Re-hash source to confirm no changes occurred
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_after.txt
diff /cases/case-2024-001/hashes/source_hash_before.txt \
/cases/case-2024-001/hashes/source_hash_after.txt
步骤 6:记录获取过程
# Generate acquisition report
cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt
DISK IMAGE ACQUISITION REPORT
==============================
Case Number: 2024-001
Date/Time: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
Examiner: [Name]
Source Device: /dev/sdb
Model: [from hdparm output]
Serial: [from hdparm output]
Size: [from fdisk output]
Acquisition Tool: dcfldd v1.9.1
Block Size: 4096
Write Blocker: [Hardware/Software model]
Image File: evidence.dd
Image Hash (SHA-256): [from hash file]
Source Hash (SHA-256): [from hash file]
Hash Match: YES/NO
Errors During Acquisition: [from error log]
EOF
# Compress logs for archival
tar -czf /cases/case-2024-001/acquisition_package.tar.gz \
/cases/case-2024-001/hashes/ \
/cases/case-2024-001/logs/ \
/cases/case-2024-001/notes/
关键概念
| 概念 | 描述 |
|---|---|
| 逐位副本 | 源设备的精确复制,包括未分配空间和松弛空间 |
| 写阻断器 | 防止对证据介质进行写入的硬件或软件机制 |
| 哈希验证 | 通过加密哈希比对源设备与镜像以证明完整性 |
| 块大小(bs) | 影响速度的传输块大小;取证通常使用 4096 或 64K |
| conv=noerror,sync | 在读取错误时继续并用零填充以保持偏移对齐 |
| 证据链 | 证明证据未被篡改的书面记录 |
| 分卷镜像 | 将大型镜像拆分为较小文件以便存储和传输 |
| Raw/dd 格式 | 无元数据容器开销的逐位镜像格式 |
工具与系统
| 工具 | 用途 |
|---|---|
| dd | 用于原始镜像的标准 Unix 磁盘复制工具 |
| dcfldd | 美国国防部计算机取证实验室的 dd 增强版本,支持哈希计算 |
| dc3dd | 来自美国国防部网络犯罪中心的另一个取证 dd 变体 |
| sha256sum | 用于完整性验证的 SHA-256 哈希计算 |
| blockdev | 用于将块设备设置为只读模式的 Linux 命令 |
| hdparm | 磁盘识别和参数报告 |
| smartctl | 用于磁盘健康和识别的 S.M.A.R.T. 数据检索 |
| lsblk | 块设备枚举和识别 |
常见场景
场景 1:获取嫌疑笔记本电脑硬盘
通过 Tableau T35u 硬件写阻断器连接硬盘,识别为 /dev/sdb,使用带 SHA-256 哈希的 dcfldd,拆分为 4GB 分段以便 DVD 归档,验证哈希匹配,在案件笔记中记录。
场景 2:为受感染工作站的 USB 闪存盘制作镜像
使用 blockdev --setro 进行软件写阻断,使用 dcfldd 获取镜像并同时计算 MD5 和 SHA-256 双重哈希,镜像足够小可作为单个文件,验证并存储到加密的案件磁盘上。
场景 3:通过网络进行远程获取
使用 dd 通过 netcat 或 ssh 管道进行远程获取:ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096,在两端分别计算哈希以验证传输完整性。
场景 4:从故障磁盘获取镜像
先使用 ddrescue 恢复可读扇区,然后使用带 conv=noerror,sync 的 dd 用零填充间隙,在错误日志中记录哪些扇区不可读。
输出格式
Acquisition Summary:
Source: /dev/sdb (500GB Western Digital WD5000AAKX)
Destination: /cases/case-2024-001/images/evidence.dd
Tool: dcfldd 1.9.1
Block Size: 4096 bytes
Duration: 2h 15m 32s
Bytes Copied: 500,107,862,016
Errors: 0 bad sectors
Source SHA-256: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Image SHA-256: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Verification: PASSED - Hashes match
评论
支持 Markdown