LWN: 避免ext4文件系统中泄露个人信息!
共 2299字,需浏览 5分钟
·
2021-05-09 09:35
关注了就能看到更多这么棒的文章哦~
Preventing information leaks from ext4 filesystems
By Jonathan Corbet
April 27, 2021
DeepL assisted translation
https://lwn.net/Articles/854054/
文件系统的作用是存储信息,并根据要求来获取原始形式的数据。但是,文件系统也应该防止那些不应该看到信息的人检索这些信息。这一要求延伸到了已经被删除的数据;用户希望这些数据真正消失,并且不欢迎它们在令人惊讶的地方重新出现。在 Ext4 方面所做的一些工作表明,需要采取一些措施才能达到这个要求。
在四月初的时候,Leah Rumancik 发布了两组 patch,对 ext4 文件系统的实现做了一些小改动。其中第一个改动会在删除一个文件后确保对存储该文件名的空间(在磁盘上)进行覆盖。在回答人们询问为什么需要这样做的时候,ext4 的维护者 Ted Ts'o 解释说,这是针对有时用户会在文件名中存储个人身份信息(PII,personally identifiable information)的情况。当这种性质的文件被删除时,用户希望确保 PII 信息也不再存储在磁盘上,这意味着要把文件名也抹掉。
Dave Chinner 很快表示反对。他认为,真正的问题在于用户将 PII 以明文方式保存。擦除目录里的文件名记录(directory entry)并不是解决这个问题的真正办法:
这听起来越来越说明 "不要在任何地方用明文来保存 PII" 是一个非常好的做法,应该得到强制执行。文件名无处不在,而且没有简单的方法来避免泄露,因为内核中的任何地方都可以进行路径遍历。这听起来就像你在玩一个永远不会赢的打地鼠游戏。
从安全的角度来看,这正是一个糟糕的设计。将 PII 存储在明文的文件名中,几乎可以确定这个 PII 信息会被泄露,因为它不能被清除,也不能被控制在应用程序自己能控制的范围内。试图在随便某个内核子系统中来控制文件名不被传播,对我来说感觉是一个笨办法,尤其是考虑到很少有内核开发者知道文件名从安全角度来看也是敏感信息。
正如 Ts'o 解释的那样,这种方法的问题在于,相关人员可能甚至不知道他们的 "legacy workloads" 在做什么。他说,与其冒着在无人意识到的情况下可能暴露 PII 信息的风险,不如直接清除文件名。
当然,如果一个文件名被认定为 PII,那么其内容也可能会挺有意思。当文件被删除时,也是可能对文件中的数据进行覆盖写入的,尽管这样做的开销很高。至少在现代的存储设备上,可以使用 FITRIM 这个 ioctl(),来告知驱动器要丢弃这些数据。哪怕这个操作并没有从物理上删除数据,也应该要使这些数据后续不可以被读取到。由于这个原因(以及其他一些原因),那些关心被删除数据仍被保存导致问题的管理员会喜欢定期运行 FITRIM 操作。
不过,对于那些真正的偏执狂来说还有一个小问题。Ext4 同许多现代文件系统一样,都使用日志(journaling)来确保文件系统写入在被异常打断的时候也能保证内容一致性。为了实现这种稳健性功能,要写入 Ext4 文件系统的 metadata(元数据)也会被写入日志(文件数据也可以选择要不要写入日志),因此,哪怕在文件系统的文件存储空间中删除了所有痕迹,这时日志里仍然可能包含一些 PII 信息。一个获得磁盘访问权的坏人就可以从日志中获取到这些数据,即使文件本身已经从文件系统中彻底删除了。
为了解决这个问题,Rumancik 的第二组 patch 增加了一个新的 ioctl()命令,称为 FS_IOC_CHKPT_JRNL,强制将日志也刷新到持久性存储(persistent storage)。还有一个可选的 flag,即 CHKPT_JRNL_DISCARD,它会使文件系统在刷新完成之后对日志本身也同样进行类似于 FITRIM 的操作。这可以确保没有 PII 留在日志数据中。
Chinner(在上面提到的那封邮件中)建议,这种行为应该是 FITRIM 操作的一个选项,而不是一个单独的命令,不过他后来发现 FITRIM 没有 flag 这个字段,因此无法进行扩展。他建议,也许现在应该增加一个单独的 fstrim() 系统调用,并且也可以用来对日志数据进行 trim 操作。缺省来说,这个单独的系统调用也会使所有文件系统都能使用这个,而不是仅仅 Ext4 才能使用这个特定功能。
这两个 patch 的目的是帮助系统管理员能确保从文件系统中删除的数据会真正消失。不过,看起来它们将以不同的方式被合入内核。Rumancik 最近对于文件名覆盖这个 patch 单独提供了一版更新 patch,Ts'o 随后就合入了。Ts'o 说,日志方面的问题会需要更多的讨论。不过,最终,这两个问题的解决方案应该能够进入内核。这将有助于防止 ext4 文件系统中敏感信息的意外泄露,即使用户是以不合适的方式来保存这些敏感信息的。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~