GRUB2 UEFI SecureBoot漏洞:‘BootHole’

2020-07-30 03:31:32

Debian和Linux社区其他地方的开发人员最近已经意识到GRUB2引导加载程序中存在一个严重问题,该问题允许不良行为者完全绕过UEFI安全引导。Debian Security Advisory4735中描述了该问题的全部细节。本文档的目的是解释此安全漏洞的后果,以及采取了哪些步骤来解决。

UEFI安全引导(SB)是一种验证机制,用于确保由计算机的UEFI固件启动的代码是可信的。它的设计目的是在操作系统加载之前,在引导过程中保护系统免受恶意代码的加载和执行。

SB使用加密校验和和签名工作。固件加载的每个程序都包括签名和校验和,并且在允许执行之前,固件将通过验证校验和和签名来验证该程序是可信的。在系统上启用SB时,将不允许任何尝试执行不受信任的程序。这会阻止意外/未经授权的代码在UEFI环境中运行。

大多数x86硬件出厂时预装了Microsoftkey。这意味着这些系统上的固件将信任由Microsoft签名的二进制文件。大多数现代系统在出厂时都会启用SB-默认情况下,它们不会运行任何未签名的代码,但可以更改固件配置以禁用SB或注册额外的签名密钥。

与许多其他基于Linux的操作系统一样,Debian使用一个名为shim的程序将这种信任从固件扩展到我们在早期引导期间需要保护的其他程序:GRUB2bootloader、Linux内核和固件更新工具(fwupd和fwupdate)。

不幸的是,在读取和解析其配置的GRUB2引导加载器代码(grub.cfg)中发现了一个严重的错误。此错误会破坏信任链;通过利用此错误,可以在早期启动期间突破安全环境并加载未签名的程序。这个漏洞是由Eclypium的研究人员发现的,并被命名为BootHole。

开发人员被要求对GRUB2&39;的源代码进行深入的审计,而不是仅仅修复一个错误。修复一个主要缺陷而不去寻找其他缺陷是不负责任的!一组工程师已经一起工作了几个星期,以确定和修复一系列进一步的问题。我们已经发现,在给定意外输入的情况下,内存分配可能会溢出的几个地方,数学计算中整数溢出可能会引起麻烦的几个地方,以及释放内存后可能使用内存的几个地方。所有这些的补丁都已经在社区中进行了共享和测试。

在讨论GRUB2漏洞的同时,开发人员还谈到了Linux可能也允许安全引导绕过的情况。在那里发现了两个错误,这两个错误都允许root用户替换锁定系统上的ACPI表,而这是不允许的。已经发布了针对这些问题的修复程序。