自动化与脚本
在Linux取证工作站上对可疑磁盘/USB/存储卡做比特级镜…
需要对可疑磁盘、USB设备或存储卡做取证级比特级镜像、并在采集过程中用哈希校验保证证据完整性时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在Linux取证工作站上对可疑磁盘/US通用
解决思路
- 识别目标设备并启用写保护:用 `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`。
- 准备目标目录并记录源盘信息:创建案件目录结构 `mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}`;用 `hdparm -I /dev/sdb > .../notes/source_drive_info.txt` 记录源盘信息,用 `smartctl -i /dev/sdb >> ...` 追加序列号和型号;采集前先对源设备做哈希 `sha256sum /dev/sdb | tee .../hashes/source_hash_before.txt`。
- 用 dd 采集镜像:基本命令为 `dd if=/dev/sdb of=/cases/case-2024-001/images/evidence.dd bs=4096 conv=noerror,sync status=progress 2>&1 | tee .../logs/dd_acquisition.log`;需要压缩时用 `dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | gzip -c > .../images/evidence.dd.gz`;只采集部分数据时用 `dd if=/dev/sdb of=.../images/first_1gb.dd bs=1M count=1024 status=progress`。
- 用 dcfldd 采集(首选取证方法):如未安装先 `apt-get install dcfldd`;带内置哈希与分段输出的命令为 `dcfldd if=/dev/sdb of=.../images/evidence.dd hash=sha256,md5 hashwindow=1G hashlog=.../hashes/acquisition_hashes.txt bs=4096 conv=noerror,sync errlog=.../logs/dcfldd_errors.log`;大镜像分段用 `dcfldd if=/dev/sdb of=.../images/evidence.dd hash=sha256 hashlog=.../hashes/split_hashes.txt bs=4096 split=2G splitformat=aa`;带校验回读用 `dcfldd if=/dev/sdb of=.../images/evidence.dd hash=sha256 hashlog=.../hashes/verification.txt vf=.../images/evidence.dd verifylog=.../logs/verify.log`。
- 校验镜像完整性:对镜像做哈希 `sha256sum .../images/evidence.dd | tee .../hashes/image_hash.txt`;比较源与镜像哈希 `diff <(sha256sum /dev/sdb | awk '{print $1}') <(sha256sum .../images/evidence.dd | awk '{print $1}')`;若为分段镜像,逐段校验 `sha256sum .../images/evidence.dd.* | tee .../hashes/split_image_hashes.txt`;再次对源做哈希 `sha256sum /dev/sdb | tee .../hashes/source_hash_after.txt` 并与采集前哈希 `diff` 比对,确认源未被改动。
- 记录采集过程:生成采集报告(包含案件编号、UTC 时间、检验人、源设备型号/序列号/容量、采集工具及版本、块大小、写阻断器型号、镜像文件、镜像与源 SHA-256、哈希是否匹配、采集错误),可用 heredoc 写入 `.../notes/acquisition_report.txt`;最后将哈希、日志、笔记打包归档 `tar -czf /cases/case-2024-001/acquisition_package.tar.gz .../hashes/ .../logs/ .../notes/`。
- 理解关键概念以正确操作:比特级副本包含未分配空间和松弛空间;写阻断器防止对证据介质写入;哈希校验用密码学哈希比对源与镜像证明完整性;块大小(bs)影响速度,取证常用 4096 或 64K;`conv=noerror,sync` 在读错误时继续并用零填充以保持偏移对齐;监管链记录证据未被篡改;分段镜像便于存储与运输;raw/dd 格式无元数据容器开销。
- 按场景选择做法:可疑笔记本硬盘经 Tableau T35u 硬件写阻断器接入识别为 /dev/sdb,用 dcfldd 加 SHA-256 并分 4GB 段归档、校验哈希、记录案件笔记;被入侵工作站的 USB 闪存盘用 `blockdev --setro` 软件写保护,dcfldd 同时做 MD5 与 SHA-256 双哈希,单文件存储并校验后存到加密案件盘;远程网络采集用 `ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096`(或经 netcat),两端各自独立哈希校验传输完整性;故障盘先用 `ddrescue` 抢救可读扇区,再用带 `conv=noerror,sync` 的 dd 以零填充缺口,并在错误日志中记录不可读扇区。
适用边界 · 注意事项
- 没有配置写阻断(硬件或软件)时不要对证据介质执行采集,否则可能破坏证据。
- 目标存储空间不大于源设备容量时不要开始采集,会因空间不足失败。
- 没有 root/sudo 权限时无法设置块设备只读或直接读取块设备。