ACPI 安全引导漏洞 - GRUB 2 - (CVE-2020-14372)
摘要
红帽目前已了解到,在 GRUB 2 引导加载程序(boot loader)中存在一个缺陷,该缺陷会影响到我们的产品,包括 Red Hat Enterprise Linux(RHEL)。利用这个缺陷,攻击者(需要已经在系统上)可以绕过安全引导(Secure Boot)保护来加载未经签名的内核模块。此漏洞只会影响到使用 UEFI 安全引导(Secure Boot)机制的系统。UEFI 安全引导机制会对用于启动计算机的软件进行验证,以达到保护系统的目的。这个安全问题已被记录为 CVE-2020-14372,它的安全影响级别被定为 Moderate(中度)。我们建议使用受影响版本的红帽客户应用相应的更新。
以下红帽产品版本和容器会直接受到影响或可能会有潜在的影响:
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 8
Red Hat Enterprise Atomic Host
Red Hat OpenShift Container Platform 4 [1]
[1]这些产品包含 Red Hat Enterprise Linux(RHEL)的内容,在针对 RHEL 的相应公告发布后,会发布针对这些产品的、包括相关更新内容的公告。
使用 Red Hat Enterprise Linux 基本镜像的产品容器。基本镜像将被更新以包含针对此漏洞的修复程序,请确保容器是最新的。Container Health Index(Red Hat Container Catalog 的一部分)可以用来检查红帽容器的安全状态。
从 RHEL 频道获取软件包的产品。在使用这些产品的环境中,确保底层的 Red Hat Enterprise Linux 软件包是最新的。
请参照下面的诊断部分的内容,检查您的系统当前是否存在这些安全漏洞。此外,下面还提供了一个可以自动修复这些问题的 Ansible playbook。
技术概述
通过 CVE-2020-14372,在 Linux 内核被加载后,一个攻击者可能会利用 RUB 2 的漏洞绕过安全引导(Secure Boot)机制。当一个系统重启后,攻击者可以让 grub(通过它的配置文件)加载一个自定义高级配置和电源接口(ACPI)表来禁用内核的锁定机制,从而进一步允许将未经签名的代码加载到内核空间中,从而可能会损害系统的数据完整性、机密性和可用性。
请注意,这仅会影响到使用安全引导的环境,并且需要提升的特权。攻击者只有在已经获得对系统的物理控制或 root 级别的权限时才能利用此漏洞。
备注:一个 shim 更新将会在可用后发布,它将包括 SBAT 技术(有关 SBAT 的更多信息,请参阅背景信息部分)。这是为了确保在发布之前,shim 更新已被正确测试,并避免出现将其他程序漏洞引入引导系统的问题。
缓解方案
没有针对此漏洞的缓解措施。
技术细节
GRUB 2引导加载程序支持多个模块和命令,可用于修改引导加载程序的行为或扩展其功能。当使用安全引导技术引导系统时,所有加载的模块都应遵守相关的限制并拒绝用户加载未经签名的代码。此安全漏洞可以使 GRUB 2 ACPI 命令选项不遵守安全引导的限制。因此,恶意的代理可以加载一个精心制作的 ACPI 表,该表会修改环境,从而导致安全引导的机制被破坏。
具有本地 root 用户权限的攻击者可以在系统上放置一个 SSDT(Secondary System Description Table),并修改 grub 配置文件以使其加载这个恶意的 SSDT。然后,内核会运行这个精心制作的 ACPI表,覆盖内核锁定变量,从而使攻击者能够加载未签名的内核模块和 kexec 未签名的代码。
在发生这种情况时,需要撤销 shim 的哈希值。在接下来的几周内,会发布一个称为 Secure Boot Advanced Targeting(SBAT)的新技术,它会包括在 shim 软件包中。这将替代以前由 dbxtool 软件包对该过程的处理。有关更多详细信息,请参见下面的背景信息部分。
有关 ACPI 和 SSDT 的更多信息,请参见本文底部的参考部分。
CVE-2020-14372
在 GRUB 2 中发现了一个缺陷,该缺陷在启用安全引导后,会错误地启用对 ACPI 命令的使用。一个具有特定权限的攻击者,可以利用此缺陷对 SSDT(Secondary System Description Table)进行修改,使其包含特定代码直接在内存中覆盖 Linux 内核锁定变量内容。该表进一步会被内核加载并执行,从而破坏了安全引导锁定保护,并允许攻击者加载未签名的代码。此漏洞带来的最大威胁是对数据机密性和完整性以及系统可用性的威胁。
2021 年 3 月 2 日,会公布其他六个 GRUB 2 相关的问题(严重程度都为中度)。参阅相关的 CVE 页以获取更详细的信息。
CVE-2020-25632 grub2: use-after-free in rmmod command
CVE-2020-25647 grub2: out-of-bound write in grub_usb_device_initialize()
CVE-2020-27749 grub2: Stack buffer overflow in grub_parser_split_cmdline
CVE-2020-27779 grub2: cutmem command allows privileged user to remove memory regions when Secure Boot is enabled
CVE-2021-20225 grub2: heap out-of-bounds write in short form option parser
CVE-2021-20233 grub2: heap out-of-bound write due to mis-calculation of space required for quoting
背景信息
有关安全引导及其工作方式的更多信息,请参阅什么是UEFI安全引导及其工作方式?
在 2020 年中发生的 BootHole 事件要求大量撤销现有的已签名的二进制文件和证书轮换,导致对 shim 和 grub 更新的影响,并大幅增加对 DBX 空间的消耗。
因为这个问题的存在,所以需要增强 UEFI 的撤销机制,使在引导路径中涉及的组件可以具有比 UEFI 固件更快速、更轻松的演进过程。作为 shim 软件包的一部分,引入一个新的 Generation-Based Revocation 机制,它被称为 UEFI Secure Boot Advanced Targeting(SBAT)模型。此机制可以更容易地撤销受到破坏的引导链组件。
SBAT 的开发是由 Linux 社区和 Microsoft 合作进行的,其在所有 UEFI 二进制代码中采用了新的元数据用来提供有关厂商、产品系列、产品、组件、版本和世代(generation)的信息。此元数据经过数字签名,可以进一步合并到 UEFI 安全引导机制的允许或拒绝列表中。
因为引导链工具中会包括全局的世代(generation)号,所以对于以后可能需要的撤销事件,可以通过简单地在撤销列表中指定一个元数据项来替换多个哈希或签名条目。
有关 SBAT 的更详细的技术信息,请参阅 “UEFI shim bootloader secure boot life-cycle improvements” 文档。
通过 SBAT 机制的变化,红帽将不再需要轮转安全引导(Secure Boot)密钥并重新对所有信任的组件(kernel、shim、grub2 和 fwupd)进行签名,因为当前的密钥会保持有效并允许被引导。
产品影响
Red Hat Enterprise Linux (RHEL) 7 和 8、Red Hat Enterprise Atomic Host,以及 RHEL CoreOS(Openshift Container Platform 4 的一部份)都带有存在安全漏洞的 GRUB 2 版本。
受影响产品的更新
我们强烈建议,所有运行受影响版本的红帽产品的用户,在相关勘误可用后尽快进行更新。
产品 | 组件 | 公告/更新 |
Red Hat Enterprise Linux 8 | grub2 | |
Red Hat Enterprise Linux 8 | shim | 待定 [1] |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | grub2 | |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | shim | 待定 [1] |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | grub2 | |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | shim | 待定 [1] |
Red Hat Enterprise Linux 7 | grub2 | |
Red Hat Enterprise Linux 7 | shim | 待定 [1] |
Red Hat Enterprise Linux 7.7 延长更新支持(EUS)[2] | grub2 | |
Red Hat Enterprise Linux 7.7 延长更新支持(EUS)[2] | shim | 待定 [1] |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | grub2 | |
Red Hat Enterprise Linux 7.6 延长更新支持(EUS)[2] | shim | 待定 [1] |
Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions, Advanced Update Support [3],[4] | grub2 | |
Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions, Advanced Update Support [3],[4] | shim | 待定 [1] |
Red Hat Enterprise Linux 7.3 Advanced Update Support [4] | grub2 | |
Red Hat Enterprise Linux 7.3 Advanced Update Support [4] | shim | 待定 [1] |
Red Hat Enterprise Linux 7.2 Advanced Update Support [4] | grub2 | |
Red Hat Enterprise Linux 7.2 Advanced Update Support [4] | shim | 待定 [1] |
RHEL Atomic Host | Image | 待定 [1] |
Red Hat OpenShift Container Platform 4.6 [7] | Red Hat CoreOS | 待定 [1] |
[1] 公告/更新链接将在更新发布后添加。
[2] 什么是 Red Hat Enterprise Linux Extended Update Support (EUS) 订阅?
[3] 什么是 Advanced mission critical Update Support (AUS)?
[4] 什么是 Red Hat Enterprise Linux SAP Solutions 订阅?
[5] 访问此修补程序需要一个有效的延长生命周期支持(ELS)订阅。如果您的帐户并没有包括有效的 ELS 订阅,请联系红帽销售部门或您的销售代表以获取更多信息。
[6] 使用 Red Hat Enterprise Linux 基本镜像的产品容器。基本镜像将被更新以包含针对此漏洞的修复程序,请确保容器是最新的。Container Health Index(Red Hat Container Catalog 的一部分)可以用来检查红帽容器的安全状态。
[7] 受影响的 Red Hat CoreOS 组件会使用 RHEL 的内容,并将作为 Red Hat OpenShift Container Platform 的公告进行重新构建并发布。
诊断
一个安全漏洞检测脚本已被开发,用来检查您的系统当前是否存在相关的安全漏洞。您可以下载 OpenPGP 签名来验证脚本的真实性。红帽客户门户网站上提供了有关如何使用GPG签名进行验证说明。
Ansible Playbook
另外,下面还提供了一个 Ansible playbook。该 playbook 会更新所有相关的软件包。要使用该 playbook,请使用 HOSTS 变量指定要更新的主机:
ansible-playbook -e HOSTS=<myhosts> CVE-2020-14372-update_fixit.yml
您可以下载 OpenPGP 签名来验证脚本的真实性。红帽客户门户网站上提供了有关如何使用GPG签名进行验证说明。
致谢
红帽借此感谢 MátéKukri 发现并报告此漏洞。红帽还感谢行业合作伙伴和 GNU GRUB 社区在此问题上的合作。
参考信息
Boot Hole 安全漏洞 - GRUB 2 boot loader - CVE-2020-10713
GRUB 的 ACPI命令行用法
在 ACPI 中使用SSDT Overlays
Comments