关键词:写保护器、只读接入、USB、PCIe、SATA、SAS、移动取证箱、耗材清单
难度:入门
前置知识:取证流程与原则
一、概述
取证装备要解决的矛盾很直接:既要高速读取介质,又绝对不能写入它。
普通 USB-SATA 硬盘盒做不到——它是一条完整的双向通路,电脑可以往盘里写任何东西。写保护器就是插在中间的那道物理闸门。
一个流传很广的认知偏差,是把只读挂载当成写保护器。mount -o ro 是操作系统层面的约束,它可以因为参数写错而失效(NTFS 需要 noload、ext4 需要 noload),可以被某些驱动绕过,而且某些文件系统挂载时就会更新挂载计数、写日志。写保护器则是电气层就不允许写命令通过。两者不能互相替代,软写保护的五条局限里最后一条最要命:NVMe 没有传统 ATA 命令集,软方案覆盖度差。
写保护器构成采集环节的硬件前置条件。它决定的不是"能不能采到数据",而是"采到的数据能不能作为证据"。
上游是委托与受理——送检人交来的设备处于什么状态(关机?运行中?已损坏?)直接决定处置顺序。上游还包含取证流程与原则确定的原则:只读接入是纪律,不是偏好。
下游支撑三件事:镜像制作是在硬件通道打开之后才开始的事,dcfldd 的读取速度受限于所选的写保护器接口;只读挂载与安全接入是接入后的软件侧约束,与硬件侧构成两道防线;证据保管链与委托证明则要把"用什么设备、什么接口采集的"记进去。操作步骤里那些准备动作记录的型号与序列号,就是保管链的锚点。
写保护器本体按接口分为 USB / PCIe / SATA / SAS,以及移动设备用的取证箱,接口类型比品牌更决定成败。
固件层的两条查询命令各对应一套隐藏空间机制。hdparm -N /dev/sdX 的输出中 max sectors 大于当前可见容量即说明存在 HPA(Host Protected Area);案例里这条命令的输出是"未发现 HPA",这个否定结论本身就是要写进报告的。hdparm --dco-identify 对应 DCO(Device Configuration Overlay),另一套隐藏空间的机制。
DigiForensics.dd 与 DigiForensics.map 是两遍 ddrescue 策略的产物。mapfile 证明"哪些区段读不到",本身构成证据——报告里那 0.5 GB 不可读区域就是靠它给出的精确偏移范围。
RAID 成员盘在阵列里处于"非独立"状态,单盘直接读会得到错误数据或报错。移动设备取证箱有四种能力层级:逻辑提取 / 文件系统级提取 / 物理提取 / 云端提取,文件系统级价值最高,因为它能拿到已删除内容。防静电装备、USB 线材、电池属于耗材清单里的东西,劣质 USB 线导致供电不足断连,会打断采集产生不完整镜像,这比想象中常见。
能回答的是这些:手头这个设备该选哪种接口的写保护器、怎么验证写保护真的生效(不能只看设备灯,要实测)、怀疑有隐藏空间时怎么查、以及读取次数本身是稀缺资源时该按什么顺序读。
不解决的是这些:镜像怎么采、参数怎么定——dcfldd / ddrescue 的参数与坏扇区策略在镜像制作;镜像拿到之后怎么分析,那是文件系统篇的事。
手机里的数据怎么取也不在范围内。取证箱的能力层级讲过了,但现代手机的 FBE / Data Protection 让难点从"数据在不在"变成"能不能解锁",那属于加密范畴,见BitLocker 全卷加密取证与数据库与配置文件加密。RAID 阵列的条带参数怎么重建缺失条带同样超出这一层,这里只到"单盘不能直接读"这一步,更深的部分本库暂无专篇。
先要理解取证流程的阶段划分,以及为什么只读接入是纪律。后者不是技术问题而是认知问题:如果你相信"我小心点就没事",上面每一条都会显得多余。
建议动手接过一次硬盘。纸上读"写保护器"和手上接过一次,感受完全不同。尤其是那个"想验证写保护生效,于是往 /dev/sdX 写一个零"的动作:**这个动作本身有风险,因为它的正确执行结果就是失败——而失败恰恰是它唯一的有效证据。命令没有指定 seek,默认从第 0 扇区开始写,一旦写保护实际未生效,这 512 个零会真的落到原始检材的头部,覆盖 MBR/VBR 或 GPT 头部。**所以这个测试只在两种前提下做:写保护已经通过另一条独立路径确认有效,或者这块盘是可以牺牲的练习盘。正式检材上的确认方式见第四章对 Read-only file system 与设备声明的区分。
二、核心原理
2.1 两种写保护原理
| 原理 |
机制 |
优点 |
局限 |
| 只读型(Read-Only) |
设备只实现读命令,写命令被设备固件拒绝 |
不改动设备任何状态,兼容性最好 |
依赖固件正确实现;极少数有实现缺陷的设备 |
| 物理阻断(Blocking) |
用物理开关或跳线切断写方向的电气通路 |
与设备固件无关,从硬件层杜绝写入 |
开关被误置是重大风险;需操作前复核 |
实务要点:两种原理的可靠性都很高,但"物理阻断型"多一道人工检查环节。
无论哪种类型,每次使用前都必须用只读测试工具验证——不能假设。
2.2 接口类型对照
| 接口 |
适用介质 |
典型速率 |
注意事项 |
| USB 3.x |
2.5"/3.5" SATA 盘、USB 直连盘 |
5–10 Gbps |
通用性最好;供电不足时需外接电源 |
| SATA |
2.5"/3.5" HDD/SSD |
6 Gbps |
台式机内直连,稳定高效 |
| PCIe / NVMe |
M.2、M-key、U.2 NVMe SSD |
3–8 GB/s |
必须确认协议层(NVMe 或 SATA)与 key 规格 |
| SAS |
企业级 2.5"/3.5" 盘 |
6–12 Gbps |
服务器场景主流;需 HBA 卡 |
| IDE/PATA |
老旧设备 |
100 MB/s |
存量案件仍有;需对应接口 |
⚠️ M.2 的坑:M.2 是形态不是协议。
同样的 M.2 插槽,底层可能是 NVMe/PCIe 或 SATA。买错协议直接读不出数据。
M-key 支持 NVMe,B-key 多为 SATA——下单前务必核对。
2.3 固件层陷阱:HPA 与 DCO
即使完全只读,硬盘固件里仍可能藏着你看不见的空间:
| 机制 |
全称 |
作用 |
取证含义 |
| HPA |
Host Protected Area |
固件划出一块"主机保护区",对 BIOS 不可见 |
可能藏有分区表或数据 |
| DCO |
Device Configuration Overlay |
类似 HPA 的另一套机制 |
同上 |
| RAID 元数据 |
阵列配置 |
大型阵列的成员盘是"非独立"状态 |
单盘直接读会得到错误数据或报错 |
# 检查 HPA —— 可见容量 vs 真实容量
sudo hdparm -N /dev/sdX
# 读全部 IDENTIFY 数据
sudo hdparm -I /dev/sdX
# DCO 设置
sudo hdparm --dco-identify /dev/sdX
💡 hdparm -N 输出中"max sectors"若大于当前可见容量,说明存在 HPA。这不是造假,可能是厂商预留或历史遗留,但必须记录并在报告中说明。
2.4 软镜像的固有局限
所谓"软写保护"指不用硬件设备,靠操作系统层手段限制写入。它的问题在于:
| 局限 |
说明 |
| 挂载即可能写 |
某些文件系统挂载时会更新挂载计数、写入日志 |
| 参数写错就失效 |
mount -o ro 之外,NTFS 需 noload,ext4 需 noload |
| 工具可能绕过 |
某些取证工具会尝试修复"错误",从而写入 |
| 无法覆盖 NVMe |
NVMe 无传统 ATA 命令集,软方案覆盖度差 |
| 日志类设备无法软隔离 |
磁盘阵列控制器、智能卡等 |
结论:软写保护可以作为补充,绝不能作为唯一手段。
唯一例外是——镜像已经做好了,只在副本上分析。此时原始介质已封存,软隔离就够了。
2.5 移动设备取证箱的工作方式
移动取证与磁盘取证的物理对象完全不同。取证箱(移动取证箱 / 移动数据提取工作站)的核心能力:
| 能力 |
说明 |
意义 |
| 逻辑提取 |
读取应用层可见数据 |
快,但拿不到已删除碎片 |
| 文件系统级提取 |
绕过应用锁定,直接读分区 |
能拿到已删除内容,价值最高 |
| 物理提取 |
整块芯片的比特流 |
最完整,但通常需拆机或专用接口 |
| 云端提取 |
通过账号获取云端数据 |
设备已灭失时的替代路径 |
现实约束:现代手机普遍有硬件级加密(Android 的 FBE、iOS 的 Data Protection)。没有正确凭证时,物理镜像拿到的也是密文。
手机取证的难点从"数据在不在"变成了"能不能解锁"——这属于板块 5 的加密范畴。
2.6 耗材清单
低层取证的真实成本常被低估:
| 耗材/损耗 |
消耗原因 |
影响 |
| 硬盘读写头 |
故障盘反复读取 |
二次读取会加速损坏 |
| SSD 写入寿命 |
大量小文件写入 |
一般不适用于只读取证 |
| USB 线材 |
移动硬盘供电不足导致断连 |
频繁断连会打断采集,产生不完整镜像 |
| 防静电装备 |
静电放电损坏主板/内存 |
手机取证中风险最高 |
| 电池损耗 |
设备长时间不通电 |
部分电池老化后充电即危险 |
关键实践:对疑似故障的硬盘,读取次数本身就是稀缺资源。每读一次都可能永久损失数据。
必须先用 ddrescue 逻辑读,确认坏道分布后再决定是否深挖。
三、操作步骤
步骤 1:接写保护器前的准备
# 1) 记录检材信息(接之前就记录,避免混乱)
lsblk -o NAME,SIZE,MODEL,SERIAL,TYPE
# 2) 确认目标未被挂载
findmnt | grep -E 'sd[a-z]|nvme'
# 3) 记录固件可见容量
sudo hdparm -I /dev/sdX | head -30
sudo hdparm -N /dev/sdX
物理层面:
1 取证人员佩戴防静电手环
2 取下检材,记录外观与接口状态
3 检查写保护器开关处于"阻断/只读"位
4 接入写保护器,再接检材(顺序很重要:先接写保护器端)
5 在检材通电前,再次确认开关位置
步骤 2:验证写保护真的生效
这一步绝不能跳过:
# 确认内核层面设备为只读
lsblk -o NAME,RO,RM,SIZE,MODEL
# RO 列必须为 1
# 尝试写入测试 —— 应该失败
# 写测试:未指定 seek,落点在第 0 扇区(MBR/GPT 头)。仅在写保护已由
# 独立路径确认、或使用可牺牲练习盘时执行;正式检材上它必须以失败告终。
sudo dd if=/dev/zero of=/dev/sdX bs=512 count=1
# 期望结果:Read-only file system
⚠️ 注意:RO=1 有时是内核因设备特性(如 USB 直连盘)自动加的保护,不等于物理写保护。真正的验证要看写保护器自身的指示与型号规格。
步骤 3:执行镜像采集
# 正常介质
sudo dcfldd if=/dev/sdX of=DigiForensics.dd \
hash=md5,sha256 hashlog=DigiForensics.hashlog \
bs=4M conv=noerror,sync status=on
# NVMe 设备(注意接口名可能是 /dev/nvme0n1)
sudo dcfldd if=/dev/nvme0n1 of=DigiForensics.dd \
hash=md5,sha256 hashlog=DigiForensics.hashlog \
bs=4M conv=noerror,sync status=on
步骤 4:疑似故障盘的处置顺序
# 第 1 遍:快速读取,不做坏道重试(快,先拿到大部分数据)
sudo ddrescue -n /dev/sdX DigiForensics.dd DigiForensics.map
# 查看坏道分布
ddrescuelog -t DigiForensics.map
# 第 2 遍:只对失败区域重试
sudo ddrescue -d -r3 /dev/sdX DigiForensics.dd DigiForensics.map
💡 为什么要分两遍:ddrescue -n 跑得快,能尽快把绝大多数数据救出来并建立 mapfile。之后才针对坏道做耗时的逐块重试。如果一开始就 -d,可能耗几天且中途再次损坏。
步骤 5:RAID 阵列的处理
# 识别控制器与阵列状态(需硬件 RAID 卡)
# 先用 lspci 找到 RAID 控制器
lspci | grep -i raid
# 阵列成员的容量与型号通常不一致于单盘标称值
lsblk -o NAME,SIZE,MODEL,SERIAL
# 重要:不要单独读成员盘
# 正确做法:先在原控制器上做一致性备份,或使用阵列卡的镜像功能
⚠️ RAID 的常见翻车点:成员盘单独读出的是不一致的数据(因为条带分布在多盘上)。必须由控制器输出逻辑盘,或从其他成员盘补齐缺失条带。
步骤 6:移动设备处置
1 记录设备状态:是否开机、锁屏、是否有通知
2 若开机:不要解锁,也不要拔线(可能丢失内存中的会话)
3 评估是否需要内存提取(见板块 8)
4 选择提取方式:逻辑 / 文件系统级 / 物理
5 提取后立即对提取物计算哈希
四、常见陷阱
取证装备的失误大多不是技术判断错误,而是把某个"看起来安全"的状态当成了已验证的安全。一章已经点明核心矛盾:只读挂载是操作系统层面的约束,写保护器是物理层面的约束,两者不能互相替代。本章按四个环节展开:硬件连接、写保护验证、固件与容量、故障盘与特殊介质。
★ 标记表示该操作会导致原始检材永久灭失或不可逆改变,执行前必须停下来确认。
4.1 硬件连接与选型
陷阱 1:用普通硬盘盒直接接原始检材
现象:为了省事,原始硬盘直接插进 USB 硬盘盒就开始 dcfldd,采集顺利完成,镜像哈希也算了。
为什么会误判:USB-SATA 桥接芯片让电脑可以往盘里写,它是一条完整的双向通路。而操作序列里的一切信号都是正常的:设备识别成功、读命令返回数据、哈希能算出来、看不出任何异常。问题在于——桥接芯片的写通道一直存在,dcfldd 只是一条读命令,它没写不等于通路没写。而操作系统在这一刻可能正在做的事,完全不在 dcfldd 的视野里:文件系统自动挂载触发日志回放、写保护设备被内核尝试重新挂载、日志或缓存落盘。
误判代价:这是实务中最高频的证据灭失原因,而且它不留痕迹——事后没有任何一个文件能证明检材被写过,唯一能证明检材仍然完整的是事前用对了硬件。更麻烦的是责任归属:镜像"正常采到了",所有后续结论都会建立在一个原始性存疑的基础上。
正确做法:原始检材必须经写保护器接入,且顺序是"先接写保护器端、再接检材"(步骤 1 的物理流程第 4 步明确"顺序很重要"):