宋桂成
(河南省统计局, 河南 郑州 450018)
传统BIOS采用汇编语言编写,编写难度大,很难对BIOS的功能进行补充,在硬件兼容性、自身安全性以及可扩展性方面存在较多缺陷。随着时间的推移,传统BIOS已经严重制约了计算机的创新。2003年,Intel 设计并提出新一代固件标准:统一可扩展固件接口[1](Unified Extensible Firmware Interface, UEFI)。与传统BIOS相比,UEFI全部使用C语言进行编码,为驱动和应用程序提供了良好的接口规范,方便厂商根据需求编写驱动程序,具有良好的可扩展性,此外,还提供了健全的文档规范和丰富的接口协议。
然而正是由于UEFI的丰富接口,新的标准为攻击者编写恶意驱动带来了更多的可能,UEFI固件安全形式变得日益严峻。随着UEFI的应用,UEFI变得越来越复杂,更多的安全组织开始对UEFI进行研究。2016年Anibal Sacco和Alfredo Ortega在CanSecWest安全会议上展示了一种UEFI攻击方式[5]。他们通过向UEFI中植入一小段代码来获得计算机系统的控制权。2017年Alex Matrosov和Eugene Rodionov在Blackhat ASIA安全会议上展示了一种全新的UEFI攻击技术[9],他们针对不同固件厂商的固件实现漏洞,向SPI Flash插入一段Rootkit代码,从而完全获取受害者计算机的控制权。在2017年Blackhat Vegas安全会议上[8],Cylance通过逆向分析的技术,针对不同厂商的UEFI引导配置模块,找出UEFI引导配置的安全漏洞,实现了UEFI引导过程的Rottkit攻击。2017年,Ulf Frisk针对UEFI的预启动[9],使用直接内存访问(Direct Memory Access,DMA)技术,通过挂钩引导服务函数SignalEvent(),成功修改操作系统引导程序。对UEFI的安全引导过程进行攻击。
本文以UEFI开源规范为基础,针对UEFI安全引导模型进行分析,详细阐述了可能存在的安全风险以及典型的漏洞利用方法,给出了面向UEFI的典型漏洞利用范式,并提出了SMI信号抑制和Speed Racer两种基于SPI Flash的漏洞利用方法。……