acquiring-disk-image-with-dd-and-dcfldd

使用 dd 和 dcfldd 创建取证级逐位磁盘镜像,通过哈希验证保持证据完整性。

9 stars

Best use case

acquiring-disk-image-with-dd-and-dcfldd is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 dd 和 dcfldd 创建取证级逐位磁盘镜像,通过哈希验证保持证据完整性。

Teams using acquiring-disk-image-with-dd-and-dcfldd should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/acquiring-disk-image-with-dd-and-dcfldd/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/acquiring-disk-image-with-dd-and-dcfldd/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/acquiring-disk-image-with-dd-and-dcfldd/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How acquiring-disk-image-with-dd-and-dcfldd Compares

Feature / Agentacquiring-disk-image-with-dd-and-dcflddStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 dd 和 dcfldd 创建取证级逐位磁盘镜像,通过哈希验证保持证据完整性。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 使用 dd 和 dcfldd 获取磁盘镜像

## 适用场景
- 需要为调查创建嫌疑驱动器的取证副本时
- 事件响应(Incident Response)期间,在分析前需要保全易失性磁盘证据时
- 法律执行或法律程序要求经过验证的逐位副本时
- 在对存储设备执行任何破坏性分析之前
- 从物理驱动器、USB 设备或存储卡获取镜像时

## 前置条件
- 基于 Linux 的取证工作站(SIFT、Kali 或任意 Linux 发行版)
- `dd`(预装于所有 Linux 系统)或 `dcfldd`(增强版取证工具)
- 已配置硬件写保护器或软件写保护
- 目标驱动器有足够存储空间(大于源设备)
- 取证工作站上的 root/sudo 权限
- SHA-256 或 MD5 哈希工具(`sha256sum`、`md5sum`)

## 工作流程

### 步骤 1:识别目标设备并启用写保护

```bash
# 列出所有已连接的块设备以识别目标
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL

# 验证设备详情
fdisk -l /dev/sdb

# 启用软件写保护(如果没有硬件写保护器)
blockdev --setro /dev/sdb

# 验证只读状态
blockdev --getro /dev/sdb
# 输出: 1(表示已启用只读)

# 或者,使用 udev 规则实现持久写保护
echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules
udevadm control --reload-rules
```

### 步骤 2:准备目标位置并记录来源信息

```bash
# 创建案件目录结构
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}

# 记录源驱动器信息
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt

# 记录序列号和型号
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt

# 预先对源设备进行哈希计算
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt
```

### 步骤 3:使用 dd 获取镜像

```bash
# 带进度显示和错误处理的基本 dd 获取
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

# 压缩镜像以节省空间
dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \
   gzip -c > /cases/case-2024-001/images/evidence.dd.gz

# 使用 dd 进行部分获取(指定数量)
dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \
   bs=1M count=1024 status=progress
```

### 步骤 4:使用 dcfldd 获取(推荐的取证方法)

```bash
# 如果未安装则安装 dcfldd
apt-get install dcfldd

# 带内置哈希和分割输出的镜像获取
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

# 将大型镜像分割成可管理的段
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

# 带验证的获取
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:验证镜像完整性

```bash
# 对获取的镜像进行哈希计算
sha256sum /cases/case-2024-001/images/evidence.dd | \
   tee /cases/case-2024-001/hashes/image_hash.txt

# 比较源和镜像的哈希值
diff <(sha256sum /dev/sdb | awk '{print $1}') \
     <(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')

# 如果使用分割镜像,验证每个段
sha256sum /cases/case-2024-001/images/evidence.dd.* | \
   tee /cases/case-2024-001/hashes/split_image_hashes.txt

# 重新对源进行哈希以确认未发生变化
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:记录获取过程

```bash
# 生成获取报告
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

# 压缩日志以归档
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/
```

## 核心概念

| 概念 | 定义 |
|------|------|
| 逐位副本(Bit-for-bit copy) | 包括未分配空间和松弛空间在内的源完整副本 |
| 写保护器(Write blocker) | 防止向证据介质写入的硬件或软件机制 |
| 哈希验证(Hash verification) | 通过比较源和镜像的加密哈希来证明完整性 |
| 块大小(Block size,bs) | 影响速度的传输块大小;取证通常使用 4096 或 64K |
| conv=noerror,sync | 读取错误时继续,并用零填充以保持偏移对齐 |
| 证据监管链(Chain of custody) | 证明证据未被篡改的文档记录链 |
| 分割镜像(Split imaging) | 将大型镜像分割成较小文件以便存储和传输 |
| 原始/dd 格式(Raw/dd format) | 不含元数据容器开销的逐位镜像格式 |

## 工具与系统

| 工具 | 用途 |
|------|------|
| dd | 用于原始镜像的标准 Unix 磁盘复制工具 |
| dcfldd | 美国国防部计算机取证实验室(DoD)增强版 dd,带哈希功能 |
| dc3dd | 来自 DoD 网络犯罪中心的另一个取证 dd 变体 |
| sha256sum | 用于完整性验证的 SHA-256 哈希计算工具 |
| blockdev | 将块设备设为只读模式的 Linux 命令 |
| hdparm | 驱动器识别和参数报告工具 |
| smartctl | 用于驱动器健康和识别的 S.M.A.R.T. 数据获取工具 |
| lsblk | 块设备枚举和识别工具 |

## 常见场景

**场景:获取嫌疑笔记本电脑硬盘**
通过 Tableau T35u 硬件写保护器连接驱动器,识别为 `/dev/sdb`,使用带 SHA-256 哈希的 dcfldd,分割为 4GB 段用于 DVD 归档,验证哈希匹配,在案件记录中记录文档。

**场景:对受损工作站的 USB 闪存驱动器进行镜像**
使用 `blockdev --setro` 进行软件写保护,使用包含 MD5 和 SHA-256 双重哈希的 dcfldd 获取,镜像足够小可存为单个文件,验证后存储在加密的案件驱动器上。

**场景:通过网络进行远程获取**
使用 dd 通过 netcat 或 ssh 管道进行远程获取:`ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096`,在两端独立计算哈希以验证传输完整性。

**场景:从故障驱动器获取**
首先使用 `ddrescue` 恢复可读扇区,然后使用带 `conv=noerror,sync` 的 dd 用零填充空缺,在错误日志中记录哪些扇区不可读。

## 输出格式

```
获取摘要:
  源:       /dev/sdb (500GB Western Digital WD5000AAKX)
  目标:     /cases/case-2024-001/images/evidence.dd
  工具:     dcfldd 1.9.1
  块大小:   4096 bytes
  耗时:     2h 15m 32s
  已复制:   500,107,862,016 字节
  错误:     0 个坏扇区
  源 SHA-256:  a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
  镜像 SHA-256: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
  验证结果: 通过 - 哈希匹配
```

Related Skills

securing-container-registry-images

9
from killvxk/cybersecurity-skills-zh

通过使用 Trivy 和 Grype 实施漏洞扫描、使用 Cosign 和 Sigstore 强制执行镜像签名、配置镜像仓库访问控制,以及构建阻止部署未扫描或未签名镜像的 CI/CD 流水线,来保护容器仓库(Container Registry)中的镜像安全。

scanning-docker-images-with-trivy

9
from killvxk/cybersecurity-skills-zh

Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。

scanning-container-images-with-grype

9
from killvxk/cybersecurity-skills-zh

使用 Anchore Grype 扫描容器镜像的已知漏洞(Vulnerability),支持基于 SBOM 的匹配和可配置的严重性阈值。

performing-disk-forensics-investigation

9
from killvxk/cybersecurity-skills-zh

使用取证镜像、文件系统分析、产物恢复和时间线重建进行磁盘取证调查,以支持事件响应案例。 使用 FTK Imager、Autopsy 和 The Sleuth Kit 等工具进行证据采集、已删除文件恢复和产物检查。 适用于磁盘取证、硬盘分析、取证镜像、文件恢复、证据采集或数字取证调查等请求场景。

performing-container-image-hardening

9
from killvxk/cybersecurity-skills-zh

本技能涵盖通过最小化攻击面、移除不必要软件包、实施多阶段构建、配置非 root 用户, 以及应用 CIS Docker 基准建议来加固容器镜像,生成安全的生产就绪镜像。

implementing-image-provenance-verification-with-cosign

9
from killvxk/cybersecurity-skills-zh

使用 Sigstore Cosign 进行容器镜像来源签名与验证,支持基于 OIDC 的无密钥签名、证明附件及 Kubernetes 准入强制执行。

implementing-disk-encryption-with-bitlocker

9
from killvxk/cybersecurity-skills-zh

使用 Microsoft BitLocker 在 Windows 端点上实施全盘加密,保护静态数据免受 设备丢失或被盗时未授权访问的威胁。适用于部署加密以满足合规要求、保护移动工作站 或在企业范围内实施数据保护控制的场景。适用于涉及 BitLocker 加密、磁盘加密、 TPM 配置或静态数据保护的请求。

implementing-container-image-minimal-base-with-distroless

9
from killvxk/cybersecurity-skills-zh

通过在 Google distroless 基础镜像上构建应用镜像来减少容器攻击面,这些镜像仅包含应用运行时,没有 shell、包管理器或不必要的 OS 工具。

analyzing-disk-image-with-autopsy

9
from killvxk/cybersecurity-skills-zh

使用 Autopsy 对磁盘镜像进行全面取证分析,恢复文件、检查痕迹并构建调查时间线。

triaging-vulnerabilities-with-ssvc-framework

9
from killvxk/cybersecurity-skills-zh

使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。

triaging-security-incident

9
from killvxk/cybersecurity-skills-zh

使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。

triaging-security-incident-with-ir-playbook

9
from killvxk/cybersecurity-skills-zh

使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。