首页/安全/取证与溯源速查/dd 镜像采集与哈希校验
Linux 取证135 条

dd 镜像采集与哈希校验

整盘镜像沿用 dd 语义:指定块大小、忽略读错误并同步填充零,完成后立即计算哈希并两次记录,形成可校验的镜像文件。

取证与溯源速查安全更新于 2026-10-13

Linux 现场镜像的做法

在 Linux 服务器上做现场镜像,本质是把块设备按字节原样复制成文件,同时保证源设备不被写入。与通用 dd 用法相比,现场作业要额外判断三件事:镜像是整盘还是单个分区(决定能否保留分区表)、源设备是否已挂载(已挂载的在用文件系统会有缓存不一致)、以及输出文件写到哪块盘上(不能写回源设备本身)。完成采集后立即计算哈希并两次记录,形成可校验的镜像文件。

基本信息

适用平台Linux(coreutils 的 dd;取证向替代工具 dc3dd、dcfldd)
设备识别lsblk -o NAME,SIZE,SERIAL,MOUNTPOINT、blkid、findmnt
常用命令dd if=<源> of=<镜像> bs=4M conv=noerror,sync status=progress
整盘与分区if=/dev/sdb 含分区表;if=/dev/sdb1 只有该分区数据
特殊设备LVM 用 /dev/vg/lv,加密卷用 /dev/mapper/xxx,云盘用对应块设备
输出位置写到外接存储或网络挂载目录,绝不能落在源盘上

典型使用场景

  • 服务器被入侵后固定整盘镜像,供后续离线分析
  • 只采集受影响分区,缩短采集时间与存储占用
  • 采集系统盘前先记录分区布局,便于后续按偏移解析
  • 云主机现场:确认块设备名与挂载关系后再采集
  • 与易失数据采集配合:先取内存与连接,再做镜像
  • 为合规交付提供可校验的镜像与校验清单

采集与校验

采集与校验
# 先确认设备名、容量、序列号与挂载点,避免拷错盘
lsblk -o NAME,SIZE,SERIAL,FSTYPE,MOUNTPOINT
findmnt -o TARGET,SOURCE,FSTYPE
# 能卸载的先卸载(无法卸载的系统盘需说明一致性限制)
# sudo umount /dev/sdb1
# 采集:4M 块大小,遇错继续并填充,显示进度
dd if=/dev/sdb of=/mnt/ev/disk.img bs=4M conv=noerror,sync status=progress
# 立即计算哈希,写入清单并保留输出
sha256sum /mnt/ev/disk.img | tee /mnt/ev/disk.img.sha256
# 记录分区布局,供后续分析按扇区偏移解析
sfdisk -d /dev/sdb > /mnt/ev/disk.sfdisk.txt 2>/dev/null
# 采样期间避免对源盘做任何写操作(挂载、fsck、touch)

现场判断要点

判断项含义处理建议
整盘还是分区是否包含分区表与引导区需要恢复删除文件或做分区级分析时采整盘
是否已挂载在用文件系统存在缓存未落盘可能时先卸载;不能卸载要在记录中说明一致性限制
输出介质容量镜像文件大小约等于源设备容量留出空间并确认输出介质无坏道
bs 取值影响速度与读取错误粒度机械盘常用 1M-4M,过大反而影响错误定位
校验方式镜像哈希与源设备哈希源设备仍在位时两侧都记录,并注明范围
dc3dd、dcfldd 可在采集同时输出哈希与错误统计,比原生 dd 更适合规范流程;使用时报明工具与版本,便于他人复现采集过程。
conv=noerror 会让 dd 在坏扇区处跳过或填充内容,可能导致镜像长度与源设备不一致。报告中要引用错误统计并说明缺口,不能简单声称「完整镜像」。

易错点

  • if 与 of 写反,镜像覆盖源设备,数据被不可逆破坏
  • 镜像文件写到源盘所在的分区,边读边写造成结果不一致甚至写满空间
  • 对已挂载的在用文件系统直接采集,缓存中的未落盘数据与实际不符,报告未做说明
  • bs 设成 512 字节导致大容量盘耗时成倍增长,现场时间窗被拖垮
  • 采集完不记录分区布局与错误统计,后续无法按偏移解析,也无法说明数据缺口

数据来源与参考

  • man 1 dd(GNU coreutils)
  • NIST SP 800-86(取证流程指南)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌