挂载 LUKS 分区是否会对其进行身份验证?

信息安全 卢克斯
2021-09-02 02:11:48

如果我的 LUKS 卷在其他受信任的系统上接受我的密码,我能否确定它的(未加密的)内容没有被篡改?

换句话说,可以访问我的加密 LUKS 分区的攻击者创建另一个加密分区,其密码与我的原始密码相同,但新数据?我知道他们无法获得加密密钥或密码,但他们可以创建一个新的加密密钥并对其进行加密,以便原始密码可以解密吗?

1个回答

他们可以创建一个新的加密密钥并对其进行加密,以便原始密码可以解密它吗?

我不明白这怎么可能。

如您所知,Luks 的工作原理是生成一个随机的“主”密钥,该密钥存储在 Luks 标头中并用于加密磁盘的内容。实际上有 8 个密钥槽引用主密钥的加密副本。如果您打开 Luks 分区,您需要提供一个密码来解密其中一个加密的主副本,然后使用该密码来解密容器的内容。

使用对称加密来加密和解密主密钥。因此,如果有人想创建自己的 Luks 分区并接受与您相同的密码,他至少需要知道您的一个密码,这样当您在假 luks 容器上输入密码时,密码就能正确解密用于加密容器中数据的主密钥。

小字

如果我的 LUKS 卷在其他受信任的系统上接受我的密码,我能否确定它的(未加密的)内容没有被篡改?

不会。不知道密码并不能保护 Luks 容器免受篡改。攻击者总是可以用他选择的任何数据覆盖容器的任何部分;只是通常,当您打开容器并解密任何更改的内容时,它会解密为随机的废话并可能破坏文件系统,然后它会通知您文件系统已损坏。但是,您可能需要一段时间才能访问被篡改的文件系统部分;在您访问它或运行文件系统完整性检查之前,您不会注意到任何篡改。

这可能不是您担心的,但是这种情况如何:

你有一个 Luks 分区。你非常勤奋,所以你使用 dd 将它备份到另一个硬盘驱动器上(例如,逐字节复制分区)。

攻击者获取了您的备份硬盘。他现在能做的,就是对比两张新盘和旧盘,看看有没有变化。当他发现一个对他来说很有希望的部分时,他可以从备份驱动器中取出旧部分并将其复制到生产 luks 分区上完全相同的位置。

有时,这会失败并导致文件系统损坏。但是,在某些情况下它会起作用,例如,它会将某些文件或目录内容更改回您进行备份时的内容,而不会警告您 Luks 分区已被其他人修改。这种攻击更有可能在较旧的非日志文件系统上起作用,并且它很可能总是在写时复制文件系统(如 btrfs)上失败。

因此,总而言之,对 Luks 分区进行精确的字节级备份可能使攻击者能够透明地将对生产分区所做的任何更改恢复为备份中的版本。

如果这是一个问题,您可以通过在备份介质上创建一个新的 luks 分区并在容器内复制纯文本文件系统数据而不是克隆 Luks 容器本身来避免它。

使您的 Luks 容器防篡改

为了使您的 Luks 容器防篡改,您可以在使用完毕后在其上构建哈希和并关闭它。您将此哈希和存储在安全的地方。在下次打开容器之前,您再次构建哈希和并将其与存储的哈希和进行比较。如果它们匹配,没有人会篡改它。

此解决方案的问题在于文件系统通常非常大,并且在整个文件系统数据上构建散列可能需要数小时或数天。