确保数据在被删除后不会逗留

信息安全 删除 数据剩余
2021-08-11 18:00:48

我正在尝试提供一项服务,尽可能少地保留其用户的数据。为此,我想确保使用取证工具的人不会获得比查看我的数据库或文件系统更多的信息。换句话说,你不应该能够用十六进制编辑器浏览我的硬盘并找到用户昨天删除的消息。

我已经采取的措施:

我在 30 分钟内删除了带有识别信息的日志文件。我已经关闭了交换。我有/tmp, /home, /root, 并/var/log安装在 RAM 磁盘上。我已删除rm,并srm在其位置放置了硬链接。

我有一个不会重新分配块的硬盘,除非有坏扇区。

我的系统目前存在的问题:

  1. 如果敏感文件被修改并变小,那将(AFAIK)释放一个扇区,即使srm在文件上调用该扇区,也不会被粉碎。
  2. 更改rm对于直接调用 unlink 的程序没有任何作用。
  3. 我在 MySQL 中有包含敏感数据的行。我删除了这些行,但我担心 MySQL 会以某种方式保留它们。
    编辑:似乎 SQLite 有一个名为secure_delete. 我将改用 SQLite。

可能的改进:

  • 设置 chattr 属性s(安全删除) 我现在没有这个设置,因为 chattr 手册说 ext2/3/4 忽略了这个标志。我发现关于 ext4 是否支持它的信息相互矛盾。哪些文件系统尊重它?
  • 擦除可用空间。似乎是一种大锤方法,但我无法找到解决#1的方法。此外,我看到的执行此操作的方法涉及制作一个非常大的文件,然后将其删除。我担心当这个系统几乎没有空间时它可能会导致程序崩溃。
  • 我可以对 MySQL 数据库(绝对不包含已删除的行)进行文本备份,删除原始文件,然后恢复它们。
  • 切换到不同的 SQL 守护进程?
  • 重新启动以清除 RAM 磁盘。但是,我不希望经常停机。此外,它不会做任何事情来清除残留在硬盘上的数据。

解决这三个问题的最佳方法是什么?我目前正在使用带有 ext3 和MySQL SQLite 的 Arch Linux。我愿意改变其中的任何一个。

感谢您的关注!

2个回答

在不物理损坏介质的情况下正确销毁数据是一项相当艰巨的任务,特别是因为 HDD 已经开始进行块重新分配。这对于 SSD 来说要困难几个数量级(如果不是不可能的话),因为固件确实对真正存储在闪存中的内容产生了魔力。由于我在评论中询问有关您的设置的更多详细信息而没有得到答复,因此我们假设涉及 SSD。

由于您无法真正销毁数据,因此最好的办法是使它们无法访问这就是加密通常比较擅长的(如果做得好)。因此,您的通用解决方案是加密您希望能够轻松忘记的所有数据,并在这样的时间到来时丢弃密钥。

各种服务的实现可能会有很大差异,并且可能(或可能不需要)需要对您的基础架构进行重大更改。然而,在所有情况下,将适用两条规则:

  1. 使用良好的加密算法和配置(操作模式,IV 生成)

  2. 确保您能够真正正确地丢弃密钥(实际上是任何敏感的纯文本数据!) - 这基本上要求将其物理存储在 RAM 中并记住在不再需要时用其他东西覆盖它1

一个关于用户主目录的简单示例(在 Linux 上)

  • 创建一个常规文件 - 它的大小将决定用户家的大小,用(伪)随机数据填充它(一种方法是将零写入该文件支持的 dm-crypt 设备)

  • 创建由文件支持的 dm-crypt 设备,将密码仅存储在 RAM 中(参见1)。如果您在上一步中使用 dm-crypt 设备“随机化”备份文件,请现在使用不同的密码。

  • 在加密设备上创建文件系统;

  • 安装在用户家中;

  • 当您决定移除房屋时,卸载它,扔掉钥匙,移除文件(可能再次用随机数据填充它,但请记住这对 SSD 没有多大意义)。


1相当棘手的部分,您的里程可能会有所不同(一如既往的安全)。关键是,即使对于服务器,也有可能在内存中不应该存在该密钥(或其他敏感数据)的情况。在您的情况下,这可能是例如当服务(数据库......)崩溃(或刚刚停止进行维护)时,或者如评论中所建议的那样,在断电的情况下,尤其是强制断电 - 即攻击者将服务器从其位置物理移除以进行分析。

第一种情况可以通过内核在释放属于应用程序的任何内存页面后擦除它们来解决(因此包括任何形式的应用程序停止)。

第二个更棘手。您可能会问为什么在断电后还要使用 RAM,而您不会是第一个阅读数据剩磁冷启动攻击和检查例如断电后不保留数据的易失性内存芯片吗?. 一般回答:如果没有专门设计的可以在断电时擦除 RAM 的硬件,您将无能为力。即便如此 - 您能否排除攻击者在硬件级别上连接到正在运行的机器的可能性?

虽然这听起来很偏执,但这只是暗示您在实施此类服务时可能需要考虑的事项。你必须决定什么是有意义的,你不想在什么威胁上花费资源,什么权衡是可以接受的。例如,如果您希望能够在无人看管的情况下重新启动机器,那么您非常不走运,因为这要求它至少可以访问一些未加密的敏感数据(比如说加密密钥),而这反过来又会破坏整个隐私链。

另一个问题是,您需要确保它不会被换出 - 至少不是未加密的交换存储。

总而言之:问题不在于你是否能让攻击者无法获取数据——而是你让数据变得多么困难。你必须指定多少部分才能看到什么是有意义的。

最好的解决方案确实是最简单的。

不要保存您不想最终落入他人手中的信息。不希望您的日志在删除后可恢复?不要登录。不希望您的 cookie 被用来跟踪您?不要使用cookies。不希望以后可以恢复已删除的邮件?嗯,这很难,因为在删除之前必须保存消息,所以我无法帮助你。

这是具有“隐私模式”的网络浏览器使用的方法。他们的足迹是不可恢复的,因为他们从一开始就不会离开他们。不使用缓存,不保存历史记录,不记住密码。当然,他们也会警告你,你发送的数据一旦离开你的电脑,仍然会被截获,所以总有第三方的行为是你无法控制的。