更新引导代码的制作方法
【专利说明】
【背景技术】
[0001]计算系统可包括用于执行计算系统的各种启动功能的代码。此代码可包括基本输入/输出系统(B1S)代码。B1S代码可成为计算系统中的或来自外部服务的恶意软件攻击的对象。作为攻击的结果,B1S代码可能受到影响。
【附图说明】
[0002]关于下图描述一些实施方式。
[0003]图1是根据一些实施方式的示例系统的框图。
[0004]图2至图4是根据一些实施方式的各种多阶段更新程序的流程图。
[0005]图5是根据其他实施方式的示例系统的框图。
【具体实施方式】
[0006]用于执行计算系统的启动的系统代码可包括系统固件,系统固件可采用可在计算系统的处理器上运行的机器可读指令的形式。“系统固件”可指在计算系统的启动期间运行的任何机器可读指令。计算系统的示例可包括台式机、笔记本电脑、平板电脑、个人数字助理(PDA)、智能电话、游戏机、服务器计算机、存储节点、网络通信节点,等等。
[0007]系统固件可包括基本输入/输出系统(B1S)代码,该代码可初始化计算系统的各种组件,并加载计算系统的操作系统(OS)。B1S代码可执行硬件组件的检查,以确保硬件组件存在且正常运作。这可例如为上电自检(POST)程序的部分。在POST程序之后,B1S代码可继续通过引导序列的剩余部分,此后,B1S代码可加载OS并将控制传递到OS。B1S代码可包括传统的B1S代码,或可替代地,包括统一可扩展固件接口(UEFI)代码。在一些示例中,B1S代码可包括在0S加载之后运行的运行时部分。
[0008]系统固件可存储在非易失性存储器中,例如闪存或可编程的任意其他持久性存储器中。系统固件可成为恶意软件或其他实体篡改的对象,这可能引起固件受影响。例如,系统固件可能损坏,使得其不再能够无错误地执行,或系统固件可能被修改,使得系统固件执行未授权的任务。
[0009]为了保护系统固件不受篡改,可锁定存储系统固件的可运行部分的存储器区域。即使具有锁定这样的存储器区域的能力,由于系统固件被更新,仍然可能危害系统固件。例如,系统固件供应商可能发布更新以解决各种问题(例如,缺陷),或增加新的特征。为了允许系统固件的一部分被更新,对应的存储器区域将不得不被解锁,这可使解锁的存储器区域容易受到恶意软件的篡改。
[0010]依照一些实施方式,安全更新技术或机制被提供以允许安全地更新系统固件的部分。安全更新技术或机制可采用多阶段更新程序,以更新系统固件的至少一部分。在多阶段更新程序中,解锁第一存储器区域,以允许更新第一存储器区域中的系统固件的第一部分,而锁定包含系统固件的其他部分的至少另一存储器区域,以保护其他存储器区域在第一存储器区域中的第一系统固件部分的更新期间不被篡改。随后,在更新之后,可锁定第一存储器区域,且可解锁另一个存储器区域,以更新在其他被解锁的存储器区域中的系统固件部分。
[0011]尽管本讨论中引用了 “系统固件”,但注意到,根据一些实施方式的安全更新技术或机制可应用到可用于执行系统的启动功能的其他类型的引导代码。
[0012]依照一些实施方式,硬件锁定机制用于锁定对系统固件的部分进行存储的某些存储器区域。硬件锁定提供存储器区的更安全保护,以保护系统固件不受篡改。
[0013]图1是示例系统100的框图,系统100包括非易失性存储器102和硬件控制器104。非易失性存储器102可被实施为一个或多个存储器设备。非易失性存储器是系统100掉电时不丢失其内容的存储器。非易失性存储器102的示例包括闪存或任意其他可编程的且在系统100掉电时保持其内容的存储器(例如,电池支持的动态或静态随机存取存储器、相变存储器、基于磁盘的存储器,等等),。
[0014]硬件控制器104包括用于执行计算系统100的规定功能的逻辑,该功能例如视频功能、总线接口功能、存储器控制器功能,等等。例如,硬件控制器104可包括输入/输出(1/0)控制器,例如英特尔公司的平台控制器集线器(PCH)。PCH可包括各种功能,包括到图形子系统的显示器接口、到系统总线的系统总线接口,等等,各种I/O设备可连接系统总线接口。在其他示例中,可使用其他类型的I/O控制器。I/O控制器是计算系统100的核心逻辑的部分,其中核心逻辑利用可包括一个或多个集成电路(1C)芯片的芯片组来实施。
[0015]如图1中描述的,系统固件的不同部分被存储在非易失性存储器102的对应区域中。尽管非易失性存储器102被表示为图1中的单个方框,但注意到,非易失性存储器102可利用一个或多个存储器设备或存储器区域来实施。
[0016]第一系统固件部分是引导块,该引导块是系统100开始启动时运行的系统固件的初始部分。在允许系统固件的其余部分运行之前,首先运行引导块。引导块可用于检查系统固件的完整性,以及执行其他初始功能。如果引导块确认系统固件的完整性,那么引导块可将控制传递到系统固件的另一部分。
[0017]在一些示例中,引导块也称作系统固件的预可扩展固件接口(Pre-EFI)初始化(PEI)代码。
[0018]系统固件的不同部分称作驱动运行环境(DXE)代码,该代码在引导块的运行后运行。DXE代码用于初始化系统100的各种组件,例如处理器、芯片组、以及其他组件。
[0019]更一般地,代替引导块和DXE代码,引用在引导程序的相应引导阶段期间执行的第一引导阶段代码、第二引导阶段代码等。引导块可为第一引导阶段代码的示例,DXE代码可为第二引导阶段代码的示例,等等。一旦系统启动,首先运行第一引导阶段代码,接着是随后的引导阶段代码。
[0020]在图1的示例中,引导块的多个实例(引导块A和引导块B)存储在非易失性存储器102的相应的不同存储器区域中,且DXE代码的多个实例(DXE代码A和DXE代码B)存储在非易失性存储器102的相应的不同存储器区域中。更具体地,引导块A存储在第一存储器区域106中,且DXE代码A存储在第二存储器区域108中。存储器区域106和108可通过硬件控制器104被硬件锁定。更具体地,硬件控制器104包括用于执行存储器区域106和108的硬件锁定(也称为芯片组锁定)的锁定机制110。
[0021]在硬件锁定中,硬件用于控制是否允许对特定的存储器区域写入。例如,锁定机制110可访问受保护的范围寄存器(或其他存储元件),该寄存器可存储识别将被锁定的存储器区域的信息。受保护的范围寄存器的内容可由系统固件来编程。一旦接收对位于受保护的范围寄存器所指示的地址范围内的地址的写入请求,锁定机制110就阻止相应的写入发生。
[0022]一旦存储器区域106和108通过锁定机制110被硬件锁定,就不能更新在锁定的存储器区域106和108中存储的系统固件部分(引导块A和DXE代码A)。根据一些实施方式的安全更新技术或机制能够执行多阶段更新程序,该更新程序允许合适的存储器区域106和/或108被解锁,以允许相应的系统固件部分被更新。
[0023]在一些实施方式中,除了硬件锁定外,还可实施系统管理模式(SMM)锁定。通过SMM锁定,系统固件的更新在SMM模式下执行。系统100响应于系统管理中断(SMI)的激活而进入SMM模式。在SMM模式下,系统固件处理程序(例如,B1S处理程序)被调用,这在执行系统固件更新时被涉及。
[0024]在其他实施方式中,不使用SMM锁定。
[0025]非易失性存储器102还包括用于分别存储引导块B和DXE代码B的存储器区域112和114。在一些示例中,存储器区域112和114不通过锁定机制110被锁定。在更新可用于引导块和DXE代码时,更新后的引导块和更新后的D