-
UEFI是操作系统与固件平台间新的接口规范。UEFI使用高级语言开发,采用模块化构建方式,功能丰富,扩展性良好[1]。随着UEFI固件普及,出现了针对UEFI固件的BOOTKIT攻击。文献[2]通过固件SMM漏洞向UEFI固件植入恶意代码,攻击TXT (trusted execution technology)安全机制[3]。2015年,文献[4]对UEFI固件进行漏洞攻击,使数以百万的计算机无法正常使用。
UEFI固件BOOTKIT隐藏在固件中,于操作系统启动前执行,通过篡改UEFI固件文件以及操作系统(OS)核心文件,实现攻击目的[4]。基于UEFI的BOOTKIT的防范方法,其最终目的是确保UEFI固件和OS核心文件的完整性。现有完整性检测方法主要分为两类:一是固件完整性检测;二是OS文件检测。文献[5]采用代码特征对比的策略,提出了一种基于UEFI固件的恶意代码检测机制,但大量的病毒特征码给UEFI固件内存造成了沉重负担。文献[6]以TPM芯片为可信根,建立了一条系统启动的可信链来确保固件完整;该算法实现复杂、代码量大,且容易被BOOTKIT绕过,存在实用性低的问题。Copilot[7]利用PCI卡周期性地对OS内核进行访问以检测内核代码的完整性;改进的Copilot[7]则能检测OS内核中数据的完整性。Servicsor[8]可以在OS的整个运行周期中保障可执行程序的合法性。这些检测方法能有效检测OS内核的完整性,但是不能独立于OS运行,也不能对固件文件进行完整性检测。文献[9]提出了在执行UEFI固件可执行文件前验证其数字签名的方法,该方法原理简单,能有效检测文件的完整性,但是不能对异常文件进行恢复。
针对上述不足,本文提出一种新的UEFI固件BOOTKIT检测方法UDS(UEFI detection system),其主要特点有:1)以UEFI虚拟设备驱动程序的形式实现[1],能独立于OS运行;2)采用将完整性检测与文件恢复相结合的策略,分别在DXE阶段和OS BOOT阶段对固件、OS文件进行完整性检测,并对异常文件进行恢复;3)能自我保护,防止BOOTKIT对自身进行攻击;4)小巧简便,利用UEFI固件接口和UEFI隐藏分区开发,减少UDS占用的ROM空间。
最后实验表明,UDS能在操作系统启动之前,成功防范固件攻击并恢复异常文件,具有启动早、开销少,能自我防护的优点。
HTML
-
实验目的是检测UDS的防范能力、空间开销和启动效率。首先,在UEFI开源代码的基础上,编译带有UDS的UDS-UEFI ROM文件;编译好的ROM文件大小为57 KB,能够充分满足固件内存的限制;最后利用周立功SmartPRO 9800 plus编程器,将该ROM文件刷写到UEFI芯片中。测试基于EDKII开发平台,操作系统为Window 7旗舰版SP1,CPU型号为Inter Core Q8200,主板为华硕H81-D,4 G内存条。
防范能力测试用于测试UDS的完整性检查、文件修复及自我保护能力,实验结果如表 1所示。BMW、STONED是基于固件的BOOTKIT,实现篡改固件数据和隐藏驱动的功能;TDL4能在固件初期就开始运行,通过HOOK操作篡改固件代码、绕过驱动,劫持执行流程;Superkit[10]、ADORE-NG[11]、hideme和鬼影等是基于操作系统内核的BOOTKIT,主要实现篡改系统调用表、关键函数指针[13]以及修改控制[12]流程等功能。
Rootkit 平台 攻击行为 UDS结果 完整检查 文件恢复 自我保护 BMW 固件 篡改固件数据 √ √ √ STONED 固件 篡改固件代码、隐藏驱动 √ √ √ TDL4 固件 篡改控制流、绕过驱动、隐藏进程 √ √ √ ADORE-NG OS 篡改控制流 √ √ √ Superkit OS 篡改控制流 √ 无 √ hindme OS 篡改OS代码 √ 无 √ 鬼影 OS 篡改调用表、关键函数 √ √ √ 实验结果表明,UDS完成了对固件、OS文件的完整性检查和异常文件恢复,能有效防范来自基于固件或OS的BOOTKIT的恶意攻击;通过自我防护,UDS能避免BOOTKIT的影响,保持正常运行。
表 2是UDS与其他同类检测工具的对比结果。实验结果表明,Nickle[14]和SecVisor[8]能够对OS核心文件的完整性进行保护,但是不能对固件文件进行完整性检查;UDS和UEFI恶意代码防范系统(MCDU)[5]都能完成固件文件完整性检查、OS文件完整性检查和文件恢复的功能,但是UDS更加精简,所占空间更少。与UDS相比,由于MCDU采用基于恶意代码特征的扫描方法,除了要完成完整性检查及文件恢复的功能以外,恶意代码查询、定位、匹配等功能还需额外的代码实现;另外,MCDU模块中还保存了大量的恶意代码特征和特征定位信息。而UDS的原理简单,不用实现诸如上述的函数,还能将备份文件等信息保存在硬盘分区上,因而UDS的实现简单,配置方便,占有的ROM空间更少。
参数 UDS Nickle SecVisor MCDU 固件文件完整性 √ × × √ OS文件完整性 √ √ √ √ 文件修复 √ × × √ 文件大小/KB 57 > 100 > 100 > 100 图 3是对比UDS-UEFI启动时间的结果。实验表明,UDS-UEFI的启动时间比UEFI恶意代码防范系统(MCDU)要少,不会对计算机启动造成大的影响。由于UDS的检测算法简单,不用实现MCDU中大量的特征识别函数,还能直接利用UEFI平台现成的接口,执行文件读写、数字签名、HASH等操作。因此UDS运行所需的开销较少,UDS-UEFI的启动速度比MCDU的启动更快。