论文部分内容阅读
传统计算机操作系统启动前的硬件初始化工作及操作系统的引导控制权都是BIOS (Basic Input/output System)来完成的。随着计算机科学的发展,针对BIOS的弊端,INTEL开发了下一代BIOS技术EFI,而UEFI是最新一代BIOS技术。但由于UEFI其组件加载模式、高级语言编写和软件框架特性,大部分程序都是用C语言实现的,意味着很多人都可以很容易破译UEFI,所以需要更加重视它的安全性。安全性的一般要求是阻止恶意代码和行为的攻击、内部/外部的访问控制和数据保护。由于UEFI的唯一性和其在PC机架构中特殊的位置使得通过恶意软件对UEFI进行的未授权的更改可能对计算机造成明显的威胁。恶意UEFI更改可能是一个复杂攻击的一部分,目的是造成永久的拒绝服务或者一个持续的恶意软件。UEFI的内容不是一成不变的,为了解决BUG、打补丁、支持新硬件等等,我们需要对UEFI进行更新。安全问题由此而生,恶意代码可能危害UEFI和系统安全,所以我们需要根据规范制定BIOS更新流程以及研究更新安全的方法。因此,本文讨论UEFI更新机制的安全问题,针对更新机制的特点设计一套基础保护流程,并针对中段验证部分采用UEFI驱动模型,将验证模块嵌入到驱动中,以UEFI DXE阶段的代码为基础对UEFI的更新进行验证,使更新机制更安全。首先文章介绍了UEFI的相关知识,尤其是UEFI的更新机制,并且分析了更新过程中出现的漏洞以及黑客利用漏洞造成的严重后果。随后给出了实现UEFI保护的额外信息和建议,明确给出了安全特性的规范。其次,根据规范,我们初步制定了一个简单的流程,此流程大体可以分为三大部分,BIOS签名,BIOS验证,更新BIOS,而本文主要设计和实现验证阶段,其发生在UEFI运行的DXE阶段,其功能实现在DXE驱动里做,只有通过验证的BIOS才可以进入更新阶段。而加密算法和具体验证流程还需要结合签名阶段,步骤和方法应该是相对应的。验证部分需要在DXE阶段完成,而UEFI有两种驱动写法,一种是直接嵌入到代码之中,特点是简单实用,占用空间小,另一种则是写成协议,特点是模块化,重用性高,对于程序员读起来更方便。在比较两种驱动模式之后我选择了后一种模式进行编写,和前后两步骤完美的进行了对接,使整套流程运转良好,具体每步方法将在正文中介绍。