USB闪存驱动器上的写保护开关有多可靠?

信息安全 硬件 USB驱动器
2021-09-03 12:22:19

我目前正在使用带有实时分发的 USB 闪存驱动器。有时我会将它插入我无法信任的终端。

我在这里的威胁模型只是对闪存驱动器上的实时分发映像进行未经授权的修改的风险不幸的是,live CD 不够方便(文件系统在安全终端上使用时必须允许写入,并且不断地重新制作太麻烦)。

我现在正在考虑闪存驱动器上的物理写保护(只读)开关是否足够可靠以值得信赖我的意思是可以在较旧的闪存驱动器上看到(例如PQI U339H)。

从我目前发现的情况来看,据说写保护完全是在硬件级别上完成的,但我无法验证是否确实没有办法绕过它。肯定有 SD 卡(因为它基本上是软件级别的信息,流氓系统不必尊重)。

例如,SD 简化规范将其描述为:

4.3.6 写保护管理

SD 存储卡支持以下三种写保护方法:

  • 机械写保护开关(仅主机责任)
  • 卡内部写保护(卡的责任)
  • 密码保护卡锁操作。

机械写保护开关

用户将使用卡侧面的机械滑动平板电脑(请参阅第 1 部分机械附录)来指示给定卡是否具有写保护。[...]

插座侧的正确匹配开关将向主机指示卡是否被写保护。保护卡片是主人的责任。卡的内部电路不知道写保护开关的位置。

[...]

您是否知道有关这种写保护如何在 USB 闪存驱动器上工作的类似技术解释,并且依赖它来确保安全性是否明智?

4个回答

USB 驱动器上的物理写保护应该适用于所有情况。写控制器位于驱动器本身中。因此,除了完全疯狂的实现之外,物理写保护开关是安全的。

物理写保护总是一种半软的东西,但它通常在驱动器内部。对于控制器在设备外部的软盘驱动器,人们可以制作一个忽略写保护滑块的驱动器。我认为 SD 卡在这方面与软盘驱动器相同,但我不会打赌,因为我知道它们包含一些用于诸如磨损均衡之类的电路。

首先,这里是一个页面的链接,其中包含带有此类写保护开关的 USB 棒列表:http ://www.fencepost.net/2010/03/usb-flash-drives-with-hardware-write-protection/那里有一些信息,它们也暗示这是一种硬件保护。

现在,如果你真的很认真,你可以考虑使用 USB 写拦截器,它通常用于取证目的,但也可以这样使用。这是一个例子: http: //www.salvationdata.com/data-recovery-equipment/source-data-safe-guard.htm

尽管许多低级闪存芯片确实提供了硬件“写保护”管脚,但如果该管脚的状态在写操作中间发生变化,则操作完全未指定;虽然在操作开始时更改引脚可能总是具有完全阻止操作的效果(如果足够快完成),允许最后一次写入操作完成(如果在芯片识别命令之后完成),或者可能创建具有奇怪的中间逻辑电平的位,一些数据表明确拒绝指定结果仅限于这些。

写保护引脚的目的不是允许最终用户通过外部开关进行控制,而是更典型地允许产品制造商确保预编程芯片的内容一旦被更改就不会改变焊接到最终应用电路中,或允许制造商确保它只能通过特殊的工厂编程电缆进行更改。

如果闪存控制器中的固件设计正确,那么具有固件可读的“写保护”开关应该与硬件互锁开关一样好。更好的替代方法是将开关连接到锁存电路,这样写保护引脚只能在启用开关时更改为允许写入,但是一旦处理器采取了需要该能力的操作写,它可以确保它保持这种能力,即使开关在过渡期间改变。然而,这样的实现可能需要额外的硬件。

关于观察 axeoth某些驱动器可能仅在安装驱动器时检查开关,我建议这种行为(与我上面描述的闩锁设计不兼容)可能是由于 USB 大容量存储设备规范中的缺陷所致——最值得注意的是,设备无法对操作系统说“我想将自己从系统中删除;请确保将任何待处理的数据写入我,并在完成时通知我,或者让我和附近的任何人都知道是否有问题”。如果支持这种行为,则将开关从写启用切换到写保护模式可能会提示设备请求完全卸载,然后将自身重新安装为只读设备。然而,如果没有这种能力,设备将不得不要么执行“粗鲁” 卸载、延迟确认开关,或让写入操作报告“意外”故障。虽然粗鲁的卸载可能是最好的行为,但如果某些用户在认为数据已写入导致数据丢失后翻转开关,他们可能会感到恼火。

我想将此作为对@Jeff Ferland答案的评论发布,但它有点太长了。

杰夫,看来你的解释是我能得到的最好的解释。每个实现都是特定于供应商的,但每个理智的实现都应该提供硬件级别的写保护。

我必须验证我的实际闪存驱动器,但查看闪存驱动器内部示例,嵌入式Hynix NAND 闪存的数据表中明确说明了写保护功能

写保护引脚可用于提供硬件保护以防止编程和擦除操作

[...]

当写保护信号为低时,器件将不接受编程或擦除操作,因此存储器阵列的内容不能更改。写保护信号不会被写使能锁存,以确保即使在上电期间也能提供保护。

我想我可以放心地假设所有主要制造商都是一样的。因此,除非我对某些错误的实现非常不走运,否则我应该依靠物理写保护开关来安全