传统BIOS掘墓者——UEFI

张道华2014-08-15 09:05产品 标签:BIOS

由于BIOS功能限制和操作不便,UEFI已经逐渐成为其取代者。那么UEFI凭什么替代BIOS?它究竟又是如何运作的呢?就让我们揭开它神秘的面纱。

对于传统PC,BIOS是电脑必备组件。我们经常要进入BIOS对电脑硬件进行各项设置,如更改设备引导顺序、屏蔽不需要的硬件端口等。不过传统BIOS不仅界面丑陋难,而且功能也弱,随着电脑硬件的发展它已跟不上形势,逐渐被UEFI所替代。下面我们就来聊聊UEFI的那些事。

小知识

★UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口),是Intel为全新类型的PC固件的体系结构、接口和服务提出的建议标准。它通过图形化的硬件设置界面,提供了一组在操作系统未启动之前在所有平台上一致的预启动服务,从而使开机程序化繁为简,节省时间。

传统VS现代 BIOS对决UEFI

大家知道最早X86电脑是16位架构的,操作系统DOS也是16位的。BIOS为了兼容16位实模式,就要求处理器升级换代都要保留16位实模式。这些迫使英特尔在开发新的处理器时,都必须考虑16位兼容模式,16位实模式严重限制CPU的性能发展,因此英特尔在开发安腾处理器后推出了EFI(UEFI前身)。

EFI和BIOS最重要的区别在于,EFI使用的是模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,它比BIOS更容易实现容错和纠错。同时还大大的缩短了系统研发时间,UEFI运行在32或64位模式,甚至可以在未来的技术发展中,突破现在传统的16位代码寻址模式,达到处理器的最大寻址。另外,EFI驱动开发简单,所有的PC部件生产厂商都可以参与进来,整个过程十分像现代操作系统开发的过程。这样就实现了BIOS图形化并且支持鼠标操作,不仅交互操作更简单,而且功能得到极大的扩展(图1)。

从以上对比可以看出,UEFI的优势就是方便(图形化操作)、灵活(可定制)、兼容(可适应各类系统)。

1313crgjsjd01

华硕M5A97主板自带的图形化UEFI界面

UEFI与Windows 8

虽然UEFI技术早在2000年就提出来,但是在Windows 8发布之前仍然没有普及。因为UEFI作为一种全新的技术,它和CPU架构、操作系统、硬盘引导记录(分区表)密切相关。最近发布的Windows 8则将UEFI启动作为系统安全特性之一,随着Windows 8的普及,UEFI也逐渐被大家熟悉。

大家知道电脑开机时将启动代码执行过程,配置处理器、内存和硬件外围设备,以便为执行操作系统做准备。无论是Linux还是Windows,也无论是ARM还是X86设备,在所有操作系统和硬件平台中,此过程都是一样的。之后将启动系统,开始加载内核并加载硬件外围设备(如网卡、存储设备或显卡)驱动。

在传统的启动过程中,操作系统加载前的环境存在漏洞,可以通过将启动加载程序重定向到可能的恶意加载程序来实施攻击,在安全软件没有加载之前就已经启动,所以破坏性极大,比如之前流行的“鬼影”病毒等。因为它们的启动优先级更高,是在启动代码执行过程中启动,所以无法被系统防火墙、杀毒软件等拦截、查杀(图2)。

1313crgjsjd02

传统BIOS启动安全漏洞

为了提高操作系统启动安全性,Windows 8引入了UEFI安全启动概念,它是一个具有固件验证过程(该过程在UEFI 2.3.1规范第27章中定义)。在UEFI启动的电脑中,微软首先要求合作的硬件厂商提供安全启动证书,并且证书需要固化在UEFI配置文件中(如果硬件发生更改,则重新改写配置文件)。Windows 8的平台完整性体系结构,它利用UEFI安全启动以及固件中存储的证书与平台固件之间创建一个信任根。借助Windows 8的安全启动体系结构及其建立的信任根,通过确保在加载操作系统之前,仅能够执行已签名并获得认证的“已知安全”代码和启动加载程序,从而可以防止用户在根路径中执行恶意代码(图3)。

1313crgjsjd03

UEFI安全启动流程图

技术要点的描述总是比较晦涩,其实传统BIOS启动和Windows 8安全启动,它们就类似我们平时常见的考勤。比如一个公司原来使用的是传统的打卡考勤(BIOS启动),员工只要有工作卡就可以轻松进入厂区(启动引导程序)。后来公司发现很多坏人(恶意程序)借用工作卡混入公司内部,于是公司采用新的指纹考勤(UEFI启动),它先采集每个员工的指纹数据到数据库(硬件厂商的启动证书),以后每个员工只有通过自己的指纹才能进入公司(只有通过验证的程序才能启动),从而有效阻止坏人的进入。当然了,Windows 8的UEFI安全启动并不是简单添加一道验证,它是一个和其他硬件厂商、安全厂商(如TPM芯片)、UEFI开发机构集体合作的一个安全平台,通过多个安全验证来保护整个启动的安全(图4)。

从UEFI启动Windows 8的整个流程分析来看,UEFI的安全性比较原来的BIOS有了巨大的增强。

1313crgjsjd04

Windows 8安全启动流程展示

Linux如何突破UEFI安全启动

通过上面的描述,我们了解了Windows 8安全启动流程。UEFI只启动通过认证的引导装载程序,恶意软件无法再利用这种方法攻击用户,不过这同时也会“误伤”(也说不定是微软故意所为)到其他非授权系统,比如Ubuntu引导程序也无法实现启动。也就是说,在安装Windows 8并且使用UEFI启动的电脑上,我们默认就无法再安装其他Linux系统了,因为它们的引导程序无法启动。

为了解决这个问题,一方面一些大的Linux厂商如Fedora、红帽(Red Hat),他们与微软签订协议,通过电子签名来提供他们自己的Windows 8系统兼容UEFI安全启动程序。另一方面,一些专门的Linux研究机构(如Linux基金会),他们利用微软密钥签署一个小的预引导装载程序(pre-bootloader),然后链式加载(无需任何形式的签名许可)一个预先指示的引导装载程序,从而启动Linux(或其他操作系统)。这种预引导装载程序能够采用一种“当前用户”测试来确保它不会用来引导恶意程序。

更多的民间Linux高手,则通过自己的技术绕过UEFI安全验证,直接加载Linux引导程序实现启动(图5)。总之,任何技术都阻挡不了人类前进的脚步。(亳州师专理化系 张道华)

1313crgjsjd05

Linux突破UEFI安全启动方法