只擦除闪存驱动器一次就足够了吗?

信息安全 USB驱动器 删除 破坏 闪存
2021-08-23 07:36:35

根据用于擦除常规硬盘驱动器的“diskscrb”命令的文档:http ://www.forensics-intl.com/diskscrb.html

“符合并超过 DoD 5220.22-M 中规定的政府标准。可以覆盖环境数据区域 9 次。(每次通过涉及 3 次单独的写入,然后是验证通过。)这有助于消除影子数据恢复的可能性。 "

因此,如上所述,至少可以擦拭硬盘 9 次。但是 SSD 和 USB 闪存驱动器呢?我必须擦除它们上的数据 9 次,还是只需要一次?

这是我用来定期从我的存储卡、USB 闪存驱动器等中删除数据的方法。(我在晚上启动它,并在早上停止,例如:它会覆盖我的 USB 闪存驱动器 10 次):

loopcountdd=0;   
while [ 1 = 1 ]; 
do (( loopcountdd= $loopcountdd + 1 )); 
dd if=/dev/urandom bs=4096 | pv | dd bs=4096 of=/dev/XXX; 
echo "overwritten: $loopcountdd x"; 
done

这个问题是本周的 IT 安全问题

阅读 2011 年 8 月 3 日的博客文章了解更多详情或提交您自己的本周问题。

3个回答

最好停止这样做。除非万不得已,否则切勿完全覆盖 SSD/闪存设备以将其擦除。

NVRAM 的可用写入周期数量有限。在某个时候,在对 NVRAM 单元进行足够多的写入后,它将完全停止工作。对于现代版本,我们的估计寿命为 3,000 次写入周期

此外,内部 SSD 看起来与传统硬盘完全不同。SSD 具有以下独特属性:

  • 备用区域,通常为总闪光量的 8% - 20%,用于磨损均衡目的最终用户无法使用常用工具写入此备用区域,它是为 SSD 的控制器保留的。但是备用区域可以保存(较少)数量的旧用户数据。

  • “Flash 转换层”,FTL。您的操作系统如何“看到”SSD(LBA地址)和实际的NVRAM 地址空间布局完全没有关联。

  • 对消费级 SSD 的大量写入可能会使控制器的垃圾收集算法落后,并使控制器进入性能下降的状态然后会发生什么取决于控制器。在极端最坏的情况下,它无法恢复性能。在更有可能的情况下,随着操作系统发送“修剪”命令,它会慢慢恢复性能。

最后,来自“可靠地从基于闪存的固态驱动器中擦除数据”一文的结论“为了清理整个磁盘,[...] 软件技术在大多数情况下都有效,但并非全部。”

因此,当您完全覆盖闪存存储时,您可能正在执行有效的安全擦除——但是,您也可能会丢失一些位。而且您肯定会消耗相当多的驱动器预期寿命。这不是一个好的解决方案。

那么,我们应该怎么做呢?

  • “最好的”现代驱动器支持特定于供应商的安全擦除功能。例如英特尔的新 320 系列和一些基于 SandForce 22xx 的驱动器,以及许多标榜为具有“全盘加密”或“自加密驱动器”的 SSD。该方法通常类似于以下内容:
  1. SSD 控制器包含完整的硬件加密引擎,例如使用 AES 128。
  2. 在第一次初始化时,控制器会生成一个随机 AES 密钥,并将其存储在 NVRAM 中的私有位置。
  3. 曾经写入驱动器的所有数据都使用上述 AES 密钥加密。
  4. 如果/当最终用户执行安全擦除时,驱动器会丢弃 AES 密钥,生成一个新密钥,并覆盖 NVRAM 中的旧 AES 密钥位置。假设旧的 AES 密钥无法恢复,这实际上会使旧数据无法恢复。
  • 某些驱动器没有上述功能,但支持ATA 安全擦除命令。这是它变得更加棘手 - 基本上我们依靠驱动器制造商来实施“强”安全擦除。但这是一个黑匣子,我们不知道他们实际上在做什么。如果你需要高安全性,那么你不应该依赖这个,或者至少你应该阅读技术文档和/或联系驱动器制造商来验证他们的方法有多安全。关于他们正在做什么/应该做什么的合理猜测是:
  1. 虽然该驱动器未使用完整的加密密码(如 AES),但它仍在使用广泛的数据压缩算法和校验和以及类似 RAID 的跨多个 NVRAM 组的数据条带化。(所有现代高性能 SSD 都使用这些技术的变体。)这会混淆驱动器上的用户数据。
  2. 收到 ATA 安全擦除命令后,驱动器会擦除其“闪存转换层”表和其他内部数据结构,并将所有 NVRAM 标记为已释放。

我的个人建议:

  1. 如果您只需要对 SSD 进行不安全擦除,请使用制造商的最终用户工具,或使用 ATA Secure Erase 命令,例如hdparm在 Linux 上。

  2. 如果您需要安全擦拭,那么:

  • 仅使用通过强 (AES) 加密明确宣传安全擦除的驱动器,并运行制造商的安全擦除。和/或:
  • 确保您写入驱动器的所有数据在命中驱动器之前都已加密。通常通过软件全盘加密,例如 PGP Whole Disk Encryption、TrueCrypt、Microsoft BitLocker、BitLocker To Go、OSX 10.7 FileVault 或 LUKS。或者:
  • 物理销毁驱动器。

SSD 和闪存驱动器是一个有趣的问题......

正如@Bell 作为对这个问题的回应所指出的那样

是的,粉碎操作的有效性取决于块编号和非易失性存储块之间的固定或物理映射。这适用于旋转介质,但不适用于出于性能和生命周期原因虚拟化其块的 SSD。因此,粉碎模型在 SSD(以及许多 SAN 上)上是无效的。更有趣的是,SSD 上可用空间中的数据持久性是完全不可预测的。如果没有通过驱动器的可用空间准备过程进行清理操作,它也可能会被完全擦除

一些更好的 SSD 和闪存驱动器提供安全功能来执行安全删除(通常通过绕过生命周期/性能寻址机制),因此如果您确实有需要删除的敏感数据,建议您这样做,但请注意它会影响设备的使用寿命。

普通的覆盖将不可靠。

首先,对于所有当前的磁性硬盘驱动器,一次覆盖就足够了。从驱动器中恢复信息从未像人们声称的那样容易。

其次,您不能简单地通过覆盖闪存驱动器来擦除它们。在你真正覆盖所有数据之前,你会用覆盖来磨损它们。您可以绝对确定的唯一方法是首先对闪存驱动器上的数据进行加密,这样您就不必在意未删除的碎片。