使用 shred 命令恢复文件

使用 shred 命令恢复文件

假设我的电脑里有一些敏感文件,我想彻底删除它们,这样就没有人能找回它们了。为此,我可以使用该rm命令,但它仍然很容易恢复。所以我选择使用该shred命令,用噪音覆盖我的文件,然后将其删除。

> shred -n 120 -u my_file.txt

但是,我仍不确定我的方法是否完全安全。
我粉碎文件后,该怎么做才能恢复它?

先决条件

假设我可以使用所有可用的取证软件和实验室设备来恢复我的数据。
假设我想保持硬盘的物理完整性(以免遭受微波炉、火灾或任何物理损坏)。

研究

我也尝试过:

dd if=/dev/zero of=my_file.txt bs=16M status=progress

为了用 0 替换我的文件内容。但我不知道这种方法是否比shred.

答案1

我仍然不确定我的方法是否完全安全。

它不是:

Shred 基本上依赖于一个非常重要的假设:文件系统会就地覆盖数据。这是传统的处理方式,但许多现代文件系统设计并不满足这一假设

来源:https://unix.stackexchange.com/questions/656146/how-to-use-the-shred-command-the-right-way#comment1234353_656147,评论者丹尼尔·凯利

使敏感数据几乎无法恢复的唯一方法是用几种定义的模式覆盖(“擦除”或“粉碎”)数据。

注意:使用擦除或粉碎工具依赖于一个非常重要的假设:文件系统会就地覆盖数据。这是传统的处理方式,但许多现代文件系统设计并不满足此假设,例如 Ext4、XFS、ReiserFS 等。

来源:SystemRescue - 安全删除数据

Shred 不适用于 SSD:

将块写入 SSD 不会覆盖旧块。这是因为所有最近的 SSD 都使用了一种称为“磨损均衡”的技术。

要将一个块写入 SSD,您需要先将其擦除,然后才能写入新数据。但擦除操作只能执行有限次数;每次执行擦除操作时,都会“削弱”硬件,直到无法再正确擦除该块。

因此,磨损均衡不会擦除并覆盖同一个块,而是让 SSD 选择不同的、未使用的块并写入该块,而将数据保留在旧块上。

如果旧块上的数据还在,就意味着它仍然可以读取。

因此,任何用于“覆盖”文件的命令(cp、dd、cat、shred 等等)都存在这个弱点:它实际上根本不覆盖文件,而是将零、随机数据或其他内容写入新块。

因此,与高清硬盘不同,这不是确保您的数据消失且无法被他人读取的好方法。

来源:Shred 是否不利于擦除 SSD? - Unix & Linux Stack Exchange,回答者迪尔克特


进一步阅读:

答案2

假设我的计算机中有一些敏感文件,我想彻底删除它们,以便任何人都无法检索它们。

这本身就是一个永远无法满足的要求。如果我们假设使用传统的磁力驱动器,那么我读过的所有研究和文献都表明,即使只经过一次零运算,也不可能恢复有意义的数据。

例子:https://www.researchgate.net/publication/221160815_Overwriting_Hard_Drive_Data_The_Great_Wiping_Controversy

这项研究表明,即使数据量很小或只分布在硬盘的一小部分,正确擦除的数据也无法合理地恢复。即使使用 MFM 或其他已知方法也不行。认为可以开发一种工具来从擦除的驱动器中恢复 GB 或 TB 级的信息是错误的。

无法恢复,现在

但人们仍然可以争辩说,我还没有找到正确的研究,或者虽然这可能是目前的情况,但并不能保证遥远的地方没有人能够恢复数据。

覆盖/撕碎到位

由于 OP 讨论的是单个文件,因此要覆盖文件内容(或将其粉碎或无论你想如何称呼它),我们必须假设该文件在文件系统级别被就地覆盖。因此文件位于 10 - 20 个簇中,粉碎机现在可以将粉碎的文件实际保存到 10-20 个簇中。但是,如果文件系统出于某种原因决定将其保存到 100 - 110 个簇中,则原始文件内容仍然存在,文件系统只是不再指向它。在这种情况下,最简单的用户文件恢复软件就可以恢复您想要覆盖/粉碎的数据。

现代驱动器可能并不总能按照您的预期运行。

即使我们假设文件系统配合,像 SSD 或 SMR 驱动器这样的现代驱动器几乎按照定义将碎化数据写入不同的物理位置。此外,现代驱动器可能在将块写入“最终目的地”之前缓存“文件”或更好的文件数据。例如,许多 SMR 驱动器保留一个 CMR 区域用于快速写入(媒体缓存),数据先写入该区域,然后再写入较慢的 SMR 区域。在 CMR 区域中的数据被覆盖之前,您的数据会存在 2 个副本。

混合驱动器(SSHD)的过程类似。

在 SSD 上甚至可能存在文件的多个副本..

由于数据的组织方式、“编程”和擦除方式,SSD 的情况甚至更糟。由于 NAND 的特性,以及一次可以编程多少(一页)和一次可以擦除多少(一个擦除块),并且只能对已擦除的页进行编程,因此几乎根据定义,它永远不会写入您读取的物理位置。换句话说,“您的碎纸机”读取文件,对数据进行打乱并保存。但 SSD 不会覆盖原始数据,因为打乱的数据写入了其他地方。

此外,在您不知情的情况下,您的文件的多个副本可能存在,因为 SSD 往往会在各处重新排列数据(清理、磨损均衡等等),目的是在某个时候删除陈旧的副本。研究人员发现一份文件多达 16 份副本已保存至 SSD只有一次! 由于仅有一个副本映射到 LBA,因此对于我们这些最终用户来说,就好像该数据仅有一个副本存在。

看:https://www.usenix.org/legacy/events/fast11/tech/full_papers/Wei.pdf

图 1:多个副本该图显示 FTL 复制文件最多 16 次。

因此,即使你成功就地粉碎了文件,文件的许多陈旧副本可能仍然存在,并且可以通过正确的工具恢复

所以,你的方法并不安全。

但是,我仍不确定我的方法是否完全安全。我粉碎文件后,该怎么做才能恢复它?

读完前面的内容后,应该就很明显了。

我们所需要的是一种方法来访问这些仍然存在的“陈旧”数据副本的空间。

这种现代驱动器通常与“转换器”或“转换层”(FTL)一起工作,将 LBA 地址映射到物理地址,跟踪页面状态、磨损等。

如果 SSD 保存了您的文件,即使文件系统写入完全相同的位置,它也会找到一个已擦除的页面来写入数据。读取数据的页面并非按定义。但是对于操作系统来说,数据似乎写入了相同范围的 LBA 块。SSD 只需将不同的物理位置映射到这些 LBA 块即可实现这一点。

在 NAND 级别,我们现在有文件的两个副本,原始文件位于不再映射到任何 LBA 地址的位置,我们称之为陈旧数据,而新文件(切碎的变体)则称为新文件。

因此,我们需要的是一个允许我们访问“LBA 域”之外的数据的工具。

选项1:

Acelab 的 PC3000 SSD。几乎每个数据恢复实验室都有此工具。要访问您的“过时数据”,需要该工具“知道”SSD 型号。即使目前不支持特定型号,将来也可能支持。新型号不断添加。

看:https://blog.elcomsoft.com/2019/01/life-after-trim-using-factory-access-mode-for-imaging-ssd-drives/

选项 2:

彻底转储 NAND 并绕过控制器。

例子:http://www.flash-extractor.com/library/SSD/IDX110M00/IDX100M01-LC%20v2__2c_68_04_46__16x1

但在现代 NAND 上这是不可能的,因为虽然我们可以读取 NAND,但数据是加密的,并且(此时)无法解密,因为我们缺乏控制器的帮助。

例子:http://www.flash-extractor.com/library/SSD/SandForce/SF-2281VB1-SDC-S03__2c_88_04_4b__4x4

关于 SMR 驱动器,PC3000 的最新更新(撰写本文时)进一步增强了对此类驱动器的支持:https://youtu.be/PylbEVGWo3M

答案3

了解不同级别的安全性很有用。

  1. 您拥有用户权限。简单来说rm就足够了。处理其他副本,例如备份和文件系统可访问的快照。

  2. 您拥有 root 权限。然后,您可以访问磁盘上的任何快照和任何原始数据。在某些文件系统上,shred 可以工作,在其他文件系统上则不行。尤其是 COW 文件系统(如 btrfs、ZFS 和 nilfs2)是一个问题。日志写回模式下的 ext3/4 也是一个问题。

  3. 您正在破解驱动器的固件。然后您可能有机会访问重新映射的块和耗损均衡块。可能有替代固件可以简化此操作,并且可能有自制固件或原始访问模式。这将特别允许访问 SSD 上的备用块。

  4. 您正在硬件级别访问驱动器。然后,您可以尝试读取坏块,这些坏块甚至无法通过忽略被标记为坏块的固件读取,因为它们实际上是坏的。如果这些块确实有缺陷(而且不仅难以读取),它们几乎不可能在现代驱动器上恢复。过去有使用更昂贵设备读取块的方法,但随着驱动器的存储量越来越大,方法也越来越复杂,大多数这些方法将不再有效。如果有人告诉您擦除 35 次,他们说的是 100 兆字节驱动器,而不是 10 兆字节驱动器。

最常见的威胁模型是根级访问。而你必须处理文件系统功能。我建议加密驱动器并阻止人们在运行系统上获得根访问权限。那么在大多数情况下你都会没事的。加密还可以防止更复杂情况下的问题。

答案4

拿起您的 SSD,使用各种工具来物理“粉碎”设备。锤子、角磨机等都很有用。

然后将碎片扔进最近的河里。

相关内容