acquiring-disk-image-with-dd-and-dcfldd について
dd と dcfldd を使ったディスクイメージ取得のデジタルフォレンジック向けスキルです。書き込み防止、ビット単位の複製、ハッシュ検証、作業記録の手順を示します。
主な機能
- 01デバイスの特定と書き込み防止
- 02dd または 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 | Raw イメージング用の標準的な Unix ディスク複製ユーティリティ |
| dcfldd | ハッシュ機能を備えた、DoD Computer Forensics Laboratory による拡張版 dd |
| dc3dd | DoD Cyber Crime Center による、もう 1 つのフォレンジック用 dd 派生版 |
| sha256sum | 完全性検証のための SHA-256 ハッシュ計算 |
| blockdev | ブロックデバイスを読み取り専用モードに設定する Linux コマンド |
| hdparm | ドライブの識別とパラメーターの報告 |
| smartctl | ドライブの正常性確認と識別のための S.M.A.R.T. データ取得 |
| lsblk | ブロックデバイスの列挙と識別 |
一般的なシナリオ
シナリオ 1:疑わしいノート PC のハードドライブを取得する
Tableau T35u ハードウェア書き込みブロッカーを介してドライブを接続し、/dev/sdb として識別します。SHA-256 ハッシュを使用して dcfldd で取得し、DVD への保管用に 4GB のセグメントに分割して、ハッシュが一致することを検証し、事件記録に記録します。
シナリオ 2:侵害されたワークステーションの USB フラッシュドライブをイメージ化する
blockdev --setro を使ってソフトウェア書き込み防止を行い、MD5 と SHA-256 の二重ハッシュを含めて dcfldd で取得します。イメージは単一ファイルに収まるサイズなので、検証後、暗号化された事件記録用ドライブに保存します。
シナリオ 3:ネットワーク経由でリモート取得する
リモート取得には、netcat または ssh を介してパイプで dd を実行します: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