cryptsetup 中存在一个漏洞,允许您禁用 LUKS2 分区中的加密

Cryptsetup 软件包中已发现一个漏洞 (CVE-2021-4122),该漏洞用于加密 Linux 中的磁盘分区,该漏洞允许通过修改元数据在 LUKS2(Linux 统一密钥设置)格式的分区上禁用加密。 要利用此漏洞,攻击者必须能够物理访问加密媒体,即该方法主要适用于攻击加密的外部存储设备,例如闪存驱动器,攻击者可以访问这些设备,但不知道解密数据的密码。

该攻击仅适用于 LUKS2 格式,并且与负责激活“在线重新加密”扩展的元数据操作相关,如果需要更改访问密钥,该扩展允许即时启动数据重新加密过程无需停止分区工作。 由于使用新密钥进行解密和加密的过程需要花费大量时间,因此“在线重新加密”可以不中断分区的工作并在后台执行重新加密,逐渐将数据从一个密钥重新加密到另一个密钥。 还可以选择一个空的目标密钥,它允许您将该部分转换为解密的形式。

攻击者可以对 LUKS2 元数据进行更改,模拟由于故障而中止解密操作,并在所有者激活和使用修改后的驱动器后实现对部分分区的解密。 在这种情况下,连接修改后的驱动器并使用正确密码解锁的用户不会收到有关恢复中断的重新加密操作过程的任何警告,只能使用“luks Dump”了解此操作的进度命令。 攻击者可以解密的数据量取决于 LUKS2 标头的大小,但在默认大小 (16 MiB) 下,它可以超过 3 GB。

该问题是由于以下事实引起的:尽管重新加密需要计算和验证新旧密钥的哈希值,但如果新状态意味着不存在用于加密的明文密钥,则不需要哈希值来开始解密。 此外,指定加密算法的 LUKS2 元数据如果落入攻击者手中,将无法防止被修改。 为了阻止该漏洞,开发人员在 LUKS2 中添加了对元数据的额外保护,现在会检查一个额外的哈希值,该哈希值是根据已知密钥和元数据内容计算的,即攻击者无法再在不知道解密密码的情况下秘密更改元数据。

典型的攻击场景要求攻击者能够多次接触驱动器。 首先,不知道访问密码的攻击者会更改元数据区域,从而在驱动器下次激活时触发部分数据的解密。 然后,驱动器返回到原来的位置,攻击者等待用户输入密码来连接它。 当用户激活设备时,后台重新加密过程就会启动,在此过程中,部分加密数据将被解密数据替换。 此外,如果攻击者设法再次拿到设备,驱动器上的一些数据将处于解密形式。

该问题由 cryptsetup 项目维护者发现,并在 cryptsetup 2.4.3 和 2.3.7 更新中修复。 可以在以下页面上跟踪为解决发行版中的问题而生成的更新的状态:Debian、RHEL、SUSE、Fedora、Ubuntu、Arch。 该漏洞仅在 cryptsetup 2.2.0 发布后出现,该版本引入了对“在线重新加密”操作的支持。 作为保护的解决方法,可以使用“--disable-luks2-reencryption”选项启动。

来源: opennet.ru

添加评论