BootHole 安全启动存在严重漏洞,影响大量Linux和Window系统

2020-08-03 6,608

2020年7月29日,Eclypsium研究人员在GRUB2引导程序中发现了一个漏洞并将其命名为“BootHole”(CVE-2020-10713),利用该漏洞可在启动进程中执行任意代码。攻击者可利用该漏洞安装持久且隐秘的bootkit或恶意引导程序来控制设备。目前绝大多数linux发行版系统受影响。深信服安全研究团队依据漏洞重要性和影响力进行评估,作出漏洞通告。

GRUB2介绍

GRUB2全称GRand Unified Bootloader 2,统一引导加载程序,是来自GNU项目的操作系统启动程序。用于加载操作系统内核,然后将控制权转移到该内核。还可在计算机启动时选择希望运行的操作系统,解决同一台计算机上安装的多个操作系统的问题。

漏洞描述

Eclypsium研究人员在GRUB2引导程序中发现了一个漏洞并将其命名为“BootHole”(CVE-2020-10713),可在启动进程中执行任意代码。攻击者可利用该漏洞安装持久且隐秘的bootkit或恶意引导程序来控制设备。目前绝大多数linux发行版系统受影响。

漏洞详情

GRUB2配置文件是一个文本文件,解析异常的grub.cfg文件时在GRUB2中可发生缓冲区溢出。此配置文件是通常位于EFI系统分区中的外部文件,因此可以由具有管理员特权的攻击者修改。攻击者可以在UEFI执行环境中获得任意代码执行权限,该代码可以用于运行恶意软件,更改启动过程,直接篡改OS内核数据或执行许多其他恶意操作。

为了处理来自外部配置文件的命令,GRUB2使用flex和bison从语言描述文件和辅助程序函数生成针对特定域的语言解析引擎。Flex生成的语法引擎包括了处理token的代码如下:

 image.png

如果处理的token过长,则调用YY_FATAL_ERROR,该函数的实现为:

图片2.png

其中并没有停止执行或退出程序的代码,只将错误输出到控制台并返回到调用的函数,这使得yy_flex_strncpy()被调用,并将配置文件中的源字符串从复制到一个过小的缓冲区中。

图片3.png

除该路径外,flex生成的代码中还有很多其他地方,一旦YY_FATAL_ERROR()执行非预期操作将不会正确返回,并执行不安全的操作。最终,由于配置文件写入的token长度过大无法被解析器正常处理,将造成缓冲区溢出覆盖堆中的关键结构。这些覆盖的字段包括解析器内的结构元素等,可造成任意代码执行。


影响范围


【影响版本】

GRUB 1.99, 2.00, 2.02, 2.04

解决方案

1检测方案

输入以下命令查看grub2版本

grub-install --version

2 修复方案

厂商目前还未发布安全更新,请及时关注官网以获得最新版本。

https://www.gnu.org/software/grub/

3 临时修复方案

1.升级检查并修复 grub.cfg 文件

2.暂时替换引导程序为rEFInd/sysline/systemd-boot/clover

时间轴

2020/7/29  Eclypsium发布关于CVE-2020-10713的详细信息

2020/7/31 深信服千里目安全实验室发布漏洞分析文章。

 参考链接

1.https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/



本文作者:Further_eye

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/136425.html

Tags:
评论  (0)
快来写下你的想法吧!

Further_eye

文章数:319 积分: 2105

深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号