$npx -y skills add killvxk/cybersecurity-skills-zh --skill acquiring-disk-image-with-dd-and-dcfldd使用 dd 和 dcfldd 创建取证级逐位磁盘镜像,通过哈希验证保持证据完整性。
| 1 | # 使用 dd 和 dcfldd 获取磁盘镜像 |
| 2 | |
| 3 | ## 适用场景 |
| 4 | - 需要为调查创建嫌疑驱动器的取证副本时 |
| 5 | - 事件响应(Incident Response)期间,在分析前需要保全易失性磁盘证据时 |
| 6 | - 法律执行或法律程序要求经过验证的逐位副本时 |
| 7 | - 在对存储设备执行任何破坏性分析之前 |
| 8 | - 从物理驱动器、USB 设备或存储卡获取镜像时 |
| 9 | |
| 10 | ## 前置条件 |
| 11 | - 基于 Linux 的取证工作站(SIFT、Kali 或任意 Linux 发行版) |
| 12 | - `dd`(预装于所有 Linux 系统)或 `dcfldd`(增强版取证工具) |
| 13 | - 已配置硬件写保护器或软件写保护 |
| 14 | - 目标驱动器有足够存储空间(大于源设备) |
| 15 | - 取证工作站上的 root/sudo 权限 |
| 16 | - SHA-256 或 MD5 哈希工具(`sha256sum`、`md5sum`) |
| 17 | |
| 18 | ## 工作流程 |
| 19 | |
| 20 | ### 步骤 1:识别目标设备并启用写保护 |
| 21 | |
| 22 | ```bash |
| 23 | # 列出所有已连接的块设备以识别目标 |
| 24 | lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL |
| 25 | |
| 26 | # 验证设备详情 |
| 27 | fdisk -l /dev/sdb |
| 28 | |
| 29 | # 启用软件写保护(如果没有硬件写保护器) |
| 30 | blockdev --setro /dev/sdb |
| 31 | |
| 32 | # 验证只读状态 |
| 33 | blockdev --getro /dev/sdb |
| 34 | # 输出: 1(表示已启用只读) |
| 35 | |
| 36 | # 或者,使用 udev 规则实现持久写保护 |
| 37 | echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules |
| 38 | udevadm control --reload-rules |
| 39 | ``` |
| 40 | |
| 41 | ### 步骤 2:准备目标位置并记录来源信息 |
| 42 | |
| 43 | ```bash |
| 44 | # 创建案件目录结构 |
| 45 | mkdir -p /cases/case-2024-001/{images,hashes,logs,notes} |
| 46 | |
| 47 | # 记录源驱动器信息 |
| 48 | hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt |
| 49 | |
| 50 | # 记录序列号和型号 |
| 51 | smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt |
| 52 | |
| 53 | # 预先对源设备进行哈希计算 |
| 54 | sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt |
| 55 | ``` |
| 56 | |
| 57 | ### 步骤 3:使用 dd 获取镜像 |
| 58 | |
| 59 | ```bash |
| 60 | # 带进度显示和错误处理的基本 dd 获取 |
| 61 | dd if=/dev/sdb of=/cases/case-2024-001/images/evidence.dd \ |
| 62 | bs=4096 \ |
| 63 | conv=noerror,sync \ |
| 64 | status=progress 2>&1 | tee /cases/case-2024-001/logs/dd_acquisition.log |
| 65 | |
| 66 | # 压缩镜像以节省空间 |
| 67 | dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \ |
| 68 | gzip -c > /cases/case-2024-001/images/evidence.dd.gz |
| 69 | |
| 70 | # 使用 dd 进行部分获取(指定数量) |
| 71 | dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \ |
| 72 | bs=1M count=1024 status=progress |
| 73 | ``` |
| 74 | |
| 75 | ### 步骤 4:使用 dcfldd 获取(推荐的取证方法) |
| 76 | |
| 77 | ```bash |
| 78 | # 如果未安装则安装 dcfldd |
| 79 | apt-get install dcfldd |
| 80 | |
| 81 | # 带内置哈希和分割输出的镜像获取 |
| 82 | dcfldd if=/dev/sdb \ |
| 83 | of=/cases/case-2024-001/images/evidence.dd \ |
| 84 | hash=sha256,md5 \ |
| 85 | hashwindow=1G \ |
| 86 | hashlog=/cases/case-2024-001/hashes/acquisition_hashes.txt \ |
| 87 | bs=4096 \ |
| 88 | conv=noerror,sync \ |
| 89 | errlog=/cases/case-2024-001/logs/dcfldd_errors.log |
| 90 | |
| 91 | # 将大型镜像分割成可管理的段 |
| 92 | dcfldd if=/dev/sdb \ |
| 93 | of=/cases/case-2024-001/images/evidence.dd \ |
| 94 | hash=sha256 \ |
| 95 | hashlog=/cases/case-2024-001/hashes/split_hashes.txt \ |
| 96 | bs=4096 \ |
| 97 | split=2G \ |
| 98 | splitformat=aa |
| 99 | |
| 100 | # 带验证的获取 |
| 101 | dcfldd if=/dev/sdb \ |
| 102 | of=/cases/case-2024-001/images/evidence.dd \ |
| 103 | hash=sha256 \ |
| 104 | hashlog=/cases/case-2024-001/hashes/verification.txt \ |
| 105 | vf=/cases/case-2024-001/images/evidence.dd \ |
| 106 | verifylog=/cases/case-2024-001/logs/verify.log |
| 107 | ``` |
| 108 | |
| 109 | ### 步骤 5:验证镜像完整性 |
| 110 | |
| 111 | ```bash |
| 112 | # 对获取的镜像进行哈希计算 |
| 113 | sha256sum /cases/case-2024-001/images/evidence.dd | \ |
| 114 | tee /cases/case-2024-001/hashes/image_hash.txt |
| 115 | |
| 116 | # 比较源和镜像的哈希值 |
| 117 | diff <(sha256sum /dev/sdb | awk '{print $1}') \ |
| 118 | <(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}') |
| 119 | |
| 120 | # 如果使用分割镜像,验证每个段 |
| 121 | sha256sum /cases/case-2024-001/images/evidence.dd.* | \ |
| 122 | tee /cases/case-2024-001/hashes/split_image_hashes.txt |
| 123 | |
| 124 | # 重新对源进行哈希以确认未发生变化 |
| 125 | sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_after.txt |
| 126 | diff /cases/case-2024-001/hashes/source_hash_before.txt \ |
| 127 | /cases/case-2024-001/hashes/source_hash_after.txt |
| 128 | ``` |
| 129 | |
| 130 | ### 步骤 6:记录获取过程 |
| 131 | |
| 132 | ```bash |
| 133 | # 生成获取报告 |
| 134 | cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt |
| 135 | DISK IMAGE ACQUISITION REPORT |
| 136 | ============================== |
| 137 | Case Number: 2024-001 |
| 138 | Date/Time: $(date -u +"%Y-%m-%d %H:%M:%S UTC") |
| 139 | Examiner: [Name] |
| 140 | |
| 141 | Source Device: /dev/sdb |
| 142 | Model: [from hdparm output] |
| 143 | Serial: [from hdparm output] |
| 144 | Size: [from fdisk output] |
| 145 | |
| 146 | Acquisition Tool: dcfldd v1.9.1 |
| 147 | Block Size: 4096 |
| 148 | Write Blocker: [Hardware/Software model] |
| 149 | |
| 150 | Image File: evidence.dd |
| 151 | Image Hash (SHA-256): [from hash file] |
| 152 | Source Hash (SHA-256): [from hash file] |
| 153 | Hash Match: YES/NO |
| 154 | |
| 155 | Errors During Acquisition: [from error log] |
| 156 | EOF |
| 157 | |
| 158 | # 压缩日志以归档 |
| 159 | tar -czf /cases/case-2024-001/acquisition_package.tar.gz \ |
| 160 | /cases/case-2024-001/hashes/ \ |
| 161 | /cases/case-2024-001/logs/ \ |
| 162 | /cases/case-2024-001/notes/ |
| 163 | ``` |
| 164 | |
| 165 | ## 核心概念 |
| 166 | |
| 167 | | 概念 | 定义 | |
| 168 | |------|------| |
| 169 | | 逐位副本(Bit-for-bit copy) | 包括未分配空间和松弛空间在内的源完整副本 | |
| 170 | | 写保护器(Write blocker) | 防止向证据介质写入的硬件或软件机制 | |
| 171 | | 哈希验证(Hash verification) | 通过比较源和镜像的加密哈希来证明完整性 | |
| 172 | | 块大小(Block size,bs) | 影响速度的传输块大小;取证通常使用 4096 或 64K | |
| 173 | | conv=noerror,sync | 读取错误时继续,并用零填充以保持偏移对齐 | |
| 174 | | 证据监管链(Chain of custody) | 证明证据未被篡改的文档记录链 | |
| 175 | | 分割镜像(Split imaging) | 将大型镜像分割成较小文件以便存储和传输 | |
| 176 | | 原始/dd 格式(Raw/dd format) | 不含元数据容器开销的逐位镜像格式 | |
| 177 | |
| 178 | ## 工具与系统 |
| 179 | |
| 180 | | 工具 | 用途 | |
| 181 | |------|------| |
| 182 | | dd | 用于原始镜像的标准 Unix 磁盘复制工具 | |
| 183 | | dcfldd | 美国国防部计算机取证实验室(DoD)增强版 dd,带哈希功能 | |
| 184 | | dc3dd | 来自 DoD 网络犯罪中心的另一个取证 dd 变体 | |
| 185 | | sha256sum | 用于完整性验证的 SHA-256 哈希计算工具 | |
| 186 | | blockdev | 将块设备设为只读模式的 Linux 命令 | |
| 187 | | hdparm | 驱动器识别和参数报告工具 | |
| 188 | | smartctl | 用于驱动器健康和识别的 S.M.A.R.T. 数据获取工具 | |
| 189 | | lsblk | 块设备枚举和识别工具 | |
| 190 | |
| 191 | ## 常见场景 |
| 192 | |
| 193 | **场景:获取嫌疑笔记本电脑硬盘** |
| 194 | 通过 Tableau T35u 硬件写保护器连接驱动器,识别为 `/dev/sdb`,使用带 SHA-256 哈希的 dcfldd,分割为 4GB 段用于 |