如何在没有 ATA Secure Erase 的情况下尽可能多地擦除 SSD?

信息安全 删除 数据恢复 固态硬盘 数据剩余
2021-08-22 03:21:41

这个问题几乎完全回答了。但是,仍然需要更多细节。请参阅此处的更新 2。

我了解到 ATA 安全擦除在 SSD 中未正确实现(来源在此处),但我仍然愿意找到一种方法尽可能多地擦除它们。

我打算擦除的是整个 SDD,其中包括:

  • 用户可以访问的单元格
  • 坏/未映射/损坏的扇区
  • 过度配置的空间
  • 修剪的单元格
  • 设备配置覆盖 (DCO)
  • 宿主保护区 (HPA)
  • 而我忘记的一切

我知道加密是模拟有限“安全擦除”的最佳方式,但在为我的新数据执行此操作之前,我想至少进行一次通过,以便尽可能多地擦除旧数据。

据我所知:

  • ATA 安全擦除:不可靠,仍然可以正确擦除 HPA 或 DCO 吗?
  • dban:不擦除重新映射的扇区,也不擦除 HPA 或 DCO
  • nwipe:与 dban 相同的问题,因为它是一个 fork
  • dd:与dban和nwipe相同,但每次遇到坏扇区时都会阻塞
  • shred:推荐用于文件,如 dban,可能与 SSD 有问题
  • badblocks -w :应该破坏性地检查每个扇区,它是否为 SSD 正确实施?

目前,我能做的最好的就是一个 badblock -w。

所以问题是:我可以使用哪些工具来尽可能多地擦除 SSD 上的数据?

这个想法是,根据我可能不知道的信息——但你知道——找到这里列出的最合适的工具,或者这里没有列出的任何其他工具。

此外,任何可能导致正确访问或/然后删除 SDD 的 DCO 或 HPA 的事情也可以。-> @guest 几乎完全回答了这个问题,但请参阅更新 2。

重新映射/坏/未映射的扇区、修剪的单元和过度配置的空间也是如此。

销毁驱动器不是一种选择。

资料来源:

更新: badblocks -w 可能不可靠(https://lime-technology.com/forum/index.php?topic=23792.0),但我需要进一步挖掘,除非有人先在这里提供答案,我'我也感兴趣。

更新 2

现在,我需要知道的剩下的事情是:DCO 和 HPA 各自擦除和禁用的实施是否有效 - 并且不像 ATA 安全擦除那样做得不好 - ?此外,这里有一个天真的问题:禁用 HPA 是否意味着后者也会被删除?

PS:抱歉,如果我没有立即回答,我正在世界各地工作和旅行——因此与这篇文章相关——而且我经常面临时间紧迫的业务。但是,我肯定会回答肯定的。

3个回答

我不知道你为什么说 SSD 不正确地执行 ATA Security Erase。现代的使用 SED 实现它(它使用驱动器已知的加密密钥并将所有数据存储在非易失性内存中,允许它简单地擦除密钥以立即使数据不可读),而其他人则将所有扇区标记为 TRIMed ,当垃圾收集器到达它们时,它应该有效地擦除数据。我敢肯定有一些不正确地实现它(这并不是特别罕见),但同样适用于硬盘驱动器。

确实,外部 USB SSD 和 HDD 经常会出现 ATA 安全擦除问题,但这是由于 USB 接口无法很好地与 ATA 标准兼容造成的问题。此外,USB 闪存驱动器(我不会称那些“SSD”)不实施 ATA 安全擦除,因为它具有极其简单的固件和非常低端的微控制器(与具有非常强大的处理器的 SSD 和 HDD 相比,通常双核,有时甚至是四核)。SSD 是连接 FTL 和闪存芯片阵列的完整计算机。闪存驱动器是内置闪存的微控制器。

至于使用用户空间工具进行擦除,这些都不会影响 DCO,也不会直接影响过度配置空间。只有使用 ATA Security Erase 才能擦除所有这些。它旨在擦除重新分配的扇区(只要它们没有受到严重损坏)以及 HPA。DCO 只是配置数据,因此它不会包含任何您从商店获得时不包含的内容。如果您真的想擦除它,可以使用 Linux hdparm 工具将其重置为出厂默认设置,该工具具有恢复 DCO 的命令。

请注意, badblocks -w 写入一个可预测的模式,一些 SSD 会检测到这一点并对其进行压缩,从而导致实际上并未将整个内容写入驱动器。出于数据销毁的目的,这几乎是无用的。您将需要编写一个随机模式来防止这种情况。

只需使用 ATA 安全擦除。如果您知道您的特定 SSD 固件有一个错误的实现,并且您无法升级固件来修复它,那么使用 hdparm 将 TRIM 命令发送到所有扇区,并使用 dd(或类似的命令,如 ddrescue或 dcfldd)将随机数据写入您的驱动器,并多次执行此操作。需要多次这样做不是因为有一种方法可以恢复已删除的数据,而是因为无法一次性写入过度配置空间。

您将无法擦除完全损坏的扇区。如果驱动器检测到某个扇区返回数据的时间比正常时间长,返回的数据与内部校验和不匹配,或者它必须经常重试,那么它会将其移动到已知良好的扇区并标记它一样糟糕。如果一个扇区被简单地写入超过一定次数(因为它们在相当可预测的擦除周期数后失败,通常在 2000 左右),它也会做同样的事情。可以诱使驱动器再次手动将扇区标记为好,以便擦除它或将数据放入其中(ATA Security Erase 可以执行此操作,hdparm 可以执行此操作),但前提是它仅在丢失时被标记为坏健康。如果该扇区被严重损坏以至于无法返回任何数据,并且写入无限期停止/完全失败,那么您或驱动器将无能为力。如果没有您(或高级法医调查员)对其进行物理检查,则无法到达该扇区。您可以使用 smartmontools 包确定是否有损坏的扇区:

# find out how many sectors are reallocated, and how many reallocations occurred
smartctl -a /dev/sda | grep -i reallocated

例如,如果您无法使用 ATA 安全擦除,请/dev/sda尽可能安全地擦除:

# find our max sectors (geometry = 91201/255/63, sectors = 1465149168, start = 0)
hdparm -g /dev/sda

# disable the HPA
hdparm -N p1465149168 /dev/sda

# trim every sector in the drive, from 0 to the max
hdparm --trim-sector-ranges 0:1465149168 /dev/sda

# create a crypt device with a random key, and overwrite it a few times
cryptsetup open -M plain -c aes -d /dev/urandom /dev/sda wipe
for i in {0..6}; do dcfldd bs=256k pattern=0$i of=/dev/mapper/wipe; sync; done
cryptsetup close wipe

# restore DCO to factory defaults (this can mess up the SSD, so do it last)
hdparm --dco-restore /dev/sda

但如果可以的话,我仍然建议您改用 ATA 安全擦除:

# initiate an ATA Security Erase which can't be disabled until it completes
hdparm --security-set-pass NULL /dev/sda
hdparm --security-erase-enhanced NULL /dev/sda

下一次,加密您的数据!

简短回答:禁用 HPA 并重置 DCO 只会取消隐藏驱动器上先前保留的扇区,并且本身不涉及任何安全擦除。它仅使系统可以使用这些扇区,以供系统工具稍后删除。

更新 2:

现在,我需要知道的剩下的事情是:DCO 和 HPA 各自擦除和禁用的实施是否有效 - 并且不像 ATA 安全擦除那样做得不好 - ?

您可以禁用 HPA(即,将其大小设置为 0),并且可以将 DCO 重置为出厂默认设置。这些都不涉及擦除。与 HPA 不同,DCO 不能包含个人信息(而 HPA 可能包含已删除但未覆盖的数据)。DCO 只是少量的配置数据。如果甚至可以完全擦除它,您就会将驱动器变砖。您所能做的就是将其重置为出厂默认设置。您无需担心安全删除它,因为从您从商店购买它的那一天起,就没有任何东西被写入它。

存储在 DCO 中的信息示例,以显示它实际存储的信息量:

# hdparm --dco-identify /dev/sda
/dev/sda:
DCO Revision: 0x0001
The following features can be selectively disabled via DCO:
    Transfer modes:
         mdma0 mdma1 mdma2
         udma0 udma1 udma2 udma3 udma4 udma5 udma6(?)
    Real max sectors: 1465149168
    ATA command/feature sets:
         SMART self_test error_log security HPA 48_bit
         (?): selective_test conveyance_test write_read_verify
         (?): WRITE_UNC_EXT
    SATA command/feature sets:
         (?): NCQ SSP

此外,这里有一个天真的问题:禁用 HPA 是否意味着后者也会被删除?

不可以。将 HPA 视为隐藏分区。配置 HPA 类似于调整此保留分区的大小。禁用 HPA 会将大小设置为 0,让您的操作系统现在可以查看和使用曾经保留的空间。一旦它被禁用(设置为 0),以前无法触及的空间现在可以使用系统工具进行擦除。但是,与重要的 HPA 交互的唯一方法是设置它的大小。

请注意,DCO 还能够通过使驱动器本身比实际小来隐藏数据,尽管其方式与 HPA 不同。一些供应商会故意通过 DCO 减小尺寸,以制造一种驱动器尺寸,通过 DCO 限制尺寸来削弱它,并以折扣价出售,销售全尺寸版本(即没有 DCO 限制的版本)全价。您可以通过在执行任何擦除之前将 DCO 重置为出厂默认设置来消除任何潜在的限制,但请注意,对驱动器的任何低级配置更改都会带来风险

关于您对我的第一个答案的评论(我无法在评论中回复,因为这是一个访客帐户),您链接的论文似乎是在谈论不正确地实施 ATA 安全擦除标准的旧 SSD。正如我所说,固件写得差到无法实现它的情况并不少见。然而,现代驱动器都使用 SED,它消除了闪存单元内存剩磁的问题。总体而言,到目前为止,现代驱动器可能比坏块更可靠几个数量级。

一个简单的测试是用 0xdeadbeef 之类的模式覆盖驱动器,启动 ATA 安全擦除(使用启用 SED 的驱动器),并检查以确保找不到该模式。这样,您就可以知道它是否已正确实施。如果命令几乎立即返回,并且模式消失了,那么 SED 很可能已正确实施。

假设您可以在首次使用之前设置加密(然后丢失密钥以进行擦除),则删除所有内容都没有关系。这完全无关紧要。

如果您的设备上已有数据但未加密,那么为时已晚。正如您所指出的,所有可用的工具都存在缺陷(通过磨损平衡、阻塞等),因此如果必须安全擦除数据,您唯一可靠的选择就是物理销毁 SSD。

所以我建议使用工业碎纸机(可以使用其他破坏方法