GRUB2 中难以修复的漏洞可让您绕过 UEFI 安全启动

GRUB8引导加载程序中已披露了2个漏洞,这些漏洞允许绕过UEFI安全引导机制并运行未经验证的代码,例如,在引导加载程序或内核级别执行恶意软件。

让我们回想一下,在大多数 Linux 发行版中,为了在 UEFI 安全启动模式下验证启动,会使用一个小的填充层,并由 Microsoft 进行数字签名。 该层使用自己的证书验证 GRUB2,这使得发行版开发人员不必让每个内核和 GRUB 更新都经过 Microsoft 认证。 GRUB2 中的漏洞允许您在成功验证 shim 后、加载操作系统之前的阶段执行代码,在安全启动模式处于活动状态时嵌入信任链并获得对进一步启动过程的完全控制,包括加载另一个操作系统、修改操作系统组件系统并绕过锁定保护。

与去年的 BootHole 漏洞一样,更新引导加载程序不足以阻止该问题,因为攻击者无论使用什么操作系统,都可以使用带有旧的、数字签名的、易受攻击的 GRUB2 版本的可引导媒体来破坏 UEFI 安全引导。 该问题只能通过更新证书吊销列表(dbx、UEFI 吊销列表)来解决,但在这种情况下,Linux 将失去使用旧安装介质的能力。

在固件具有更新的证书吊销列表的系统上,只能在 UEFI 安全引导模式下加载 Linux 发行版的更新版本。 发行版需要更新安装程序、引导加载程序、内核包、fwupd 固件和 shim 层,为它们生成新的数字签名。 用户将需要更新安装映像和其他可启动媒体,并将证书吊销列表 (dbx) 加载到 UEFI 固件中。 在将 dbx 更新到 UEFI 之前,无论操作系统中是否安装了更新,系统仍然容易受到攻击。 可以在以下页面上评估漏洞的状态:Ubuntu、SUSE、RHEL、Debian。

为了解决分发吊销证书时出现的问题,未来计划使用 SBAT(UEFI Secure Boot Advanced Targeting)机制,GRUB2、shim 和 fwupd 已实现对该机制的支持,并且从下次更新开始用于代替 dbxtool 包提供的功能。 SBAT 是与 Microsoft 联合开发的,涉及向 UEFI 组件的可执行文件添加新的元数据,其中包括有关制造商、产品、组件和版本的信息。 指定的元数据经过数字签名认证,并且还可以包含在 UEFI 安全启动允许或禁止的组件列表中。 因此,SBAT 将允许您在撤销期间操作组件版本号,而无需重新生成安全启动密钥,也无需为内核、shim、grub2 和 fwupd 生成新签名。

已发现的漏洞:

  • CVE-2020-14372 – 使用 GRUB2 中的 acpi 命令,本地系统上的特权用户可以通过将 SSDT(辅助系统描述表)放置在 /boot/efi 目录中并更改 grub.cfg 中的设置来加载修改后的 ACPI 表。 尽管安全启动模式处于活动状态,但建议的 SSDT 将由内核执行,并可用于禁用阻止 UEFI 安全启动旁路路径的锁定保护。 这样,攻击者就可以在不检查数字签名的情况下,通过 kexec 机制实现加载其内核模块或运行代码。
  • CVE-2020-25632 是 rmmod 命令实现中的释放后使用内存访问,当尝试卸载任何模块而不考虑与其关联的依赖项时,就会发生这种情况。 该漏洞不排除创建可能导致代码执行绕过安全启动验证的漏洞。
  • CVE-2020-25647 初始化 USB 设备时调用的 grub_usb_device_initialize() 函数中出现越界写入。 可以通过连接专门准备的 USB 设备来利用该问题,该设备生成的参数的大小与为 USB 结构分配的缓冲区的大小不对应。 攻击者可以通过操纵USB设备来执行未经安全启动验证的代码。
  • CVE-2020-27749 是 grub_parser_split_cmdline() 函数中的缓冲区溢出,可能是由于在 GRUB2 命令行上指定大于 1 KB 的变量引起的。 该漏洞允许代码执行绕过安全启动。
  • CVE-2020-27779 – cutmem 命令允许攻击者从内存中删除一系列地址以绕过安全启动。
  • CVE-2021-3418 - 对 shim_lock 的更改创建了一个额外的向量来利用去年的漏洞 CVE-2020-15705。 通过在 dbx 中安装用于对 GRUB2 进行签名的证书,GRUB2 允许直接加载任何内核,而无需验证签名。
  • CVE-2021-20225 - 运行具有大量选项的命令时可能会写入越界数据。
  • CVE-2021-20233 - 使用引号时,由于缓冲区大小计算不正确,可能会导致数据写入越界。 计算大小时,假设需要三个字符来转义单引号,而实际上需要四个字符。

来源: opennet.ru

添加评论