专利名称:受保护的引导流程的制作方法
技术领域:
本发明一般地涉及一个计算机系统内的引导过程。特别涉及一个防止引导序列被窜改的受保护引导过程。
2.背景技术在一个计算机系统可以运行前,它的存储器中必须具有一个允许其他软件,例如各种应用程序,获取和控制计算机的资源的操作系统(OS)。人们希望拥有可加载到同一计算机系统硬件的各种类型和版本的操作系统。为实现此目的,计算机硬件具有一个非易失、比较简单的引导程序,该程序初始化各种基本函数,然后从磁盘中装入更复杂的软件。引导序列可能具有多个装入程序的等级,每个后续级装入更复杂、功能更强但有更多修改余地的程序,直到操作系统自身被装入。
在传统系统中,引导过程从某种复位函数开始。这可能是冷启动复位(最初硬件电源关闭)、热启动复位(硬件已经被供电,但是处于部分未知的逻辑状态)或其他几种启动状态之一。复位类型影响在引导序列中必须执行的特定函数,但是一般不改变整个引导过程。
典型地,复位函数产生一个把系统引导到非易失存储器中的一个程序并从那一点开始运行的复位中断。这个程序一般是闪存中的一个基本输入输出系统(BIOS)。该BIOS使能基本输入输出(IO)控制,转入一个可选只读存储器(ROM),激活在该特定系统中有效的选择,然后转回该BIOS程序以完成初始化并把操作系统(OS)从磁盘中装入主存储器。虽然这样一个系统中的多数硬件由计算机供应商提供,BIOS和可选只读存储器(ROM)却一般由第三方供应商提供,因此计算机供应商对这些部件的具体内容只有有限的了解和控制。此外,BIOS和可选只读存储器(ROM)在计算机中一般都是可再编程的,因此在系统安装后可能被窜改。这引出了一个安全问题,因为无法确定BIOS或可选只读存储器(ROM)是否已被窜改过。对狡猾的电脑黑客和计算机病毒的广泛关注使得这个问题尤其令人担忧,因为系统可能被用未知和可能无法检测的方法窜改。
计算机供应商想要能够证实引导序列是他们所需要和期望的,并且对该序列所做的任何未经授权的修改在引导时都可被检测,以便能终止引导序列和对问题进行调查。
发明内容
本发明包括一种引导操作系统的方法,该方法包括初始化一个复位函数、执行一个受保护程序、校验一个BIOS程序和执行该BIOS程序。
图1示出了一个引导序列的示意图。
图2示出了一个固件中心块划分示意图。
图3示出了另一个引导序列的示意图。
具体实施例方式
本发明通过向传统的引导序列引入一组或更多组受保护指令来对其进行完善,这些指令是受保护的以防止其自身被窜改并至少检验剩余引导序列一部分的完整性。图1示出了系统的一个实施例。块10包含存储引导序列中所用指令和数据的非易失性存储器。固件中心(FWH)12是存储控制并校验引导序列的指令(代码)的非易失性存储器块。BIOS 14是非易失性存储器块,它可能含有一个比较标准但是经修改以便和FWH 12交互作用的BIOS。
系统启动时,系统复位向量16被调用,它引导处理器在FWH 12的子块21内的固件中心A(FWH_A)内一个特定地址开始运行。FWH_A的代码定位被标作BIOS_A的BIOS 14的第一子块23。然后FWH_A 21校验该BIOS和FWH_B 25以确认其包含的是所期望的代码。可以有多种校验形式,视所希望的安全等级而定。一个实施例对该BIOS代码进行求和校验,并把该校验和与存储在FWH_A内的预期校验和相比较。另一个实施例用数字签名来增强此安全系统提供的保护。FWH_A可以包含一个表,它确定要执行的安全校验类型、要执行安全校验的目标BIOS以及用于执行校验的代码。
除校验BIOS外,用于校验和执行可选只读存储器(ROM)的代码也可以包含于FWH 12或BIOS 14中。可选只读存储器(ROM)可以在BIOS 14中,也可以在一个独立的存储器块内。
校验完BIOS后,控制被交给位于BIOS 14的子块23中的BIOS_A的代码。BIOS_A代码负责初始化主存储器并确定CPU复位的类型。启动引导序列的CPU复位类型可能影响引导序列中执行的具体函数,但并不改变整个引导过程。执行完这些函数后,控制被交给位于FWH 12的子块25内的FWH_B。FWH_B代码负责锁定FWH 12和/或BIOS 14内闪存的各块。
锁定是通过禁止对代码的进一步写入来实现稳定代码块的一个过程。该特征在FWH 12通常所用的闪存中是动态可用的。在被FWH_B锁定前,受影响的块可以被引导代码更新。锁定之后,如果不重新开始引导过程,就不能对块再做修改。FWH_B也可以在系统存储器中装入附加的安全单元以供以后使用。FWH_A也可能执行有限次的锁定。
各代码块可以在被锁定前更新。这一般通过在系统关机前由操作系统把更新过的块写入主存储器中的预定位置来处理。当系统关机并重新启动,引导程序检测到这些更新过的模块,对其进行校验,并把它们装入含有此引导程序的非易失性存储器。这些更新过的模块安装完成后,可以被锁定以防止再对它们进行修改。这个过程允许做必要的更新,但是保护引导序列在已到达该引导序列的某个点后免受未经授权的窜改。
完成这些任务后,控制被交给包含在BIOS子块27内的BIOS_B的代码。BIOS_B代码也可具有附加安全接口,这些接口在代码继续执行它的标准通电自检(POST)序列时可用。BIOS_B也可以以常规模式转到可选只读存储器(ROM)。BIOS_B含有开始把操作系统18装入存储器处理的OS加载器。上述校验过程的目的之一就是校验该OS加载器的完整性。
图2示出了可以如何分配固件中心的内容。在一个实施例中,FWH引导块31含有在生产FWH时提供的FWH_A代码。这可能是一个由硬件保护的单个64KB块,不能被系统更新。该代码定位BIOS_A,并执行一个校验程序以确认该BIOS代码是预期的代码。
BIOS启动块32提供了在FWH_A内运行但一般由BIOS供应商提供的代码。它可以包含同BIOS_A、BIOS_B以及一个BIOS恢复函数(未示出)接口的代码。引导块31和BIOS启动块32都含有只能直接从FWH 12开始运行的代码。
锁定分区33是在引导过程早期被锁定,在系统运行过程中受保护的一个或多个块的集合。每个块都可被单独锁定。闪烁介质管理器(FMM)可被用于更新该分区内的数据。但是,引导序列中对该分区的任何写操作必须在锁定前进行。一旦该分区内的块已被锁定,FWH硬件禁止对这些存储器区域的任何写入。只有复位FWH才能解除对这些块的锁定,这仅在CPU复位时才会发生。为更新这些块,一个更新映像被装入存储器并启动一个CPU复位。在受保护引导序列中,该映像将被检测到并用于在锁定分区被实际锁定前更新其内部记录。
锁定解除的分区34是一个或多个可被解除锁定,因此可写入的块的集合。这些块可以是空间允许的任何大小。这些块内的全部数据可以由FMM管理。
可以选择分配给图2中所示每个功能的块的数量以满足一个特定系统类型的需求,这个数量一般由BIOS供应商在最初设计FWH和BIOS代码时确定。
下面是本发明一个实施例更详细的说明,说明了图1中四个主要部分FWH_A、BIOS_A、FWH_B和BIOS_B。
FWH_AFWH_A的代码负责进行处理器模式的转换和校验系统内的代码。特别是它必须在把控制交给该代码前校验整个BIOS启动块。校验可以用求和校验或其他更复杂的校验方法完成。这个代码段内的所有代码运行时应该不用或用有限的存储器资源。
如果有一个更新恢复块(回收块)可用,其他的安全软件可以在擦除BIOS启动块前备份它,然后在更新序列中写入新的BIOS启动块。如果在更新完成前掉电,就用备份更新。FWH_A代码确定BIOS启动块和回收块中的哪个包含有效映像。
FWH_A可能是处理器复位后执行的第一段代码。该代码应该可以在不必初始化RAM资源的条件下运行。它存在于含有可靠代码的FWH引导块中。FWH_A代码能执行下列功能1)引导向量-处理器复位时,从此处获取并执行第一条指令。
2)锁定引导块-引导块被置于锁定状态。在引导块外部运行锁定代码,因为闪存不能在执行它内部的代码时被锁定。
3)模式转换-把CPU模式转换到平坦(flat)32位环境。
4)校验BIOS启动块-用预定方法进行校验,例如求和校验。
5)如果校验失败-或者a)发出警告信号并使系统暂停,或者b)在回收块内定位备份BIOS启动块,对它进行校验,如果校验通过则跳转到该块,如果校验失败则发出警告信号并使系统暂停。
6)跳转到BIOS_A-如果校验步骤4通过,跳转到BIOS_A代码的入口点。
BIOS_ABIOS_A代码是被运行的第一段BIOS代码。该代码负责确定引导类型,使能RAM资源并把控制交回FWH_B。BIOS_A代码存在于BIOS启动块内并由FWH_A代码调用。BIOS_A代码能执行下列功能1)确定重引导-处理器可能因为多种原因被复位。这些原因包括从休眠节能状态复苏、部分重引导、热态重引导、冷引导等。根据正在执行的重引导类型,引导序列可能有所不同。
2)使能存储器-一旦重引导类型被确定,BIOS_A代码可以恢复存储器控制器的状态(热引导、从休眠状态复苏),或重新初始化并检测存储器(冷引导)。
3)设置FWH B参数-BIOS_A代码根据引导类型指明运行路径。它可以确定其他保护软件的位置(热引导),或装入其他保护软件的位置(冷引导)。
4)跳转到FWH_B-使能存储器后,BIOS_A代码通过跳转到FWH_B的入口点把控制交回FWH引导块。
FWH_B该代码负责初始化其他被管理的块中的任何相关保护软件,用于更新需要在引导序列中更新的任何块,锁定那些块并把控制交给BIOS_B。该代码能执行下列功能1)初始化非易失性存储器-该代码确定平台中闪存总量并初始化所有相关寄存器。
2)根据引导类型转移-根据BIOS_A确定的引导类型,代码可以转移到下列步骤3之一加载操作系统OS、返回操作系统OS或更新。
3)加载OS-BIOS_A代码指明BIOS正重新加载。同其他相关保护软件的接口应该被加载到BIOS_A指明的位置。
4)初始化堆栈-存储器资源可用,因此堆栈应该被初始化供使用。
5)把闪烁介质管理器(FMM)装入存储器-FMM应被从引导块复制到根据BIOS_A指定的加载值确定的存储器区域。
6)如果需要,进行恢复-在这点,存储器资源可用,允许恢复更新失败的BIOS启动块。调用FMM的恢复函数可以实现此操作。
7)锁定BIOS启动块-BIOS启动块应当被锁定。
8)初始化FMM-初始化FMM,包括已锁定和未锁定的分区,并允许进行任何掉电恢复(power-loss recovery)。
9)加载相关保护软件-可以在这点通过使用在步骤3中加载的接口加载其他保护代码。
10)失败时跳转到BIOS的恢复-在FMM锁定的分区初始化失败或相关保护软件未被定位的情况下,控制可以被交给BIOS恢复代码。
11)锁定块-锁定在锁定分区内的全部块。
12)跳转到BIOS_B-把控制交给FWH内的BIOS_B加载器。
3)返回OS-BIOS_A代码指明BIOS正返回OS,例如自休眠状态返回。
4)锁定块-不占用存储器资源,把锁定分区和BIOS启动块内的全部块锁定。
5)转入实模式-在打开被屏蔽存储器中的BIOS映像前,处理器返回实模式。
6)跳转到BIOS兼容引导向量-把控制交回在存储器中屏蔽的BIOS映像。
3)更新-BIOS_A代码指明正在对锁定分区进行更新,应运行可靠的更新应用程序。
4)初始化堆栈-定位并建立堆栈区。
5)校验相关保护代码-任何相关保护代码必须被校验以保证安全软件自身是安全和有效的。
6)校验并加载更新应用程序-更新应用软件被校验并装入存储器。
7)执行更新应用程序-把控制交给更新应用程序。该应用程序定位、检验并加载更新映像。
8)进行冷引导-开始一个完整的重引导。
BIOS_BBIOS_B的代码一般负责加载标准BIOS,因此可以叫做BIOS加载器。事件的实际顺序一般留给BIOS供应商决定,但可以是下列步骤1)把BIOS装入存储器-一旦被装入存储器,BIOS_B代码就可以解压BIOS代码。
2)初始化图像-通常希望把图像尽快地输出到屏幕上。
3)进行完整的存储器检测-在引导流程的BIOS_A部分,可能只有一部分低端存储器被初始化。该步骤可以检测并初始化剩余存储器。
4)初始化系统剩余部分。
5)重新定位相关保护代码-该代码一般位于高端存储器,因此本步骤把它移动到紧接在前一步骤的SMM代码的下面。相关的表可以被放在其他地方。
6)POST-完成通电自检。
在另一实施例中,如图3所示,FWH引导块43在子块44中包含BIOS_A代码,在子块41中包含FWH_B代码。BIOS_A代码可以由BIOS生产商提供,而FWH_B代码可以由BIOS生产商或第三方提供。BIOS_A代码和FWH_B在BIOS编程时被一起存储在引导块43中。BIOS_B代码被存储在非易失性器件40的其他部分,可以不受保护。存储在引导块43中的代码受到保护,不会在运行中被硬件修改,并且只能通过BIOS_A代码更新。这样在系统运行时,引导块43就可以受到保护,免受未经授权的窜改。
系统的复位向量42使程序在BIOS_A中的预定地址开始运行。BIOS_A代码负责启动系统、初始化存储器并定位FWH_B代码。FWH_B代码负责定位和校验全部或部分BIOS_B代码,以保证它是预期的代码。FWH_B代码接着把控制交给BIOS_B代码,由它继续初始化系统,并加载操作系统46。
上述说明的目的在于解释而非限制。本领域技术人员可以作出其他变化。仅被所附权利要求的主旨和范围所限制的本发明包含了这些变化。
权利要求
1.一种在计算机系统内引导软件的方法,包括初始化一个复位函数;运行第一个受保护的程序;校验一个BIOS程序;和运行该BIOS程序。
2.如权利要求1中所述方法,其中,运行BIOS程序包括校验和运行一个操作系统加载器。
3.如权利要求1中所述方法,其中,校验包括定位BIOS程序。
4.如权利要求1中所述方法,其中,初始化包括转移到第一个受保护程序中一个引导序列的入口点。
5.如权利要求1中所述方法,其中,运行BIOS程序包括初始化主存储器。
6.如权利要求1中所述方法,其中,运行BIOS程序包括确定复位类型。
7.如权利要求1中所述方法,其中,校验包括至少锁定第一个受保护程序和BIOS程序其中之一的某些部分。
8.如权利要求1中所述方法,其中,校验BIOS程序包括校验第二个受保护程序,运行该BIOS程序包括运行该第二个受保护程序。
9.如权利要求8中所述方法,其中,第二个受保护程序是一个可选ROM程序。
10.如权利要求1中所述方法,其中,校验BIOS程序包括校验和安装更新模块。
11.一种在计算机系统内引导软件的方法,包括初始化一个复位函数;运行第一个受保护的程序;至少校验第一和第二BIOS程序其中之一;运行第一BIOS程序;运行第二个受保护程序;和运行第二BIOS程序。
12.如权利要求11中所述方法,其中,初始化包括转移到第一个受保护程序中一个引导序列的入口点。
13.如权利要求11中所述方法,其中,运行第一个受保护程序包括至少校验第一和第二BIOS程序其中之一。
14.如权利要求11中所述方法,其中,运行第一BIOS程序包括初始化主存储器。
15.如权利要求11中所述方法,其中,运行第一BIOS程序包括确定复位类型。
16.如权利要求11中所述方法,其中,至少运行第一个受保护程序第二个受保护程序其中之一包括至少锁定第一个受保护程序、第二个受保护程序、第一BIOS程序和第二BIOS程序其中之一中的数据块。
17.如权利要求11中所述方法,其中,运行第二受保护程序包括在存储器中加载附加安全单元。
18.如权利要求11中所述方法,其中,至少运行第一BIOS程序和运行第二BIOS程序其中之一包括校验一操作系统加载器。
19.如权利要求18中所述方法,还包括运行该操作系统加载器。
20.如权利要求11中所述方法,其中,校验包括校验一个可选ROM。
21.如权利要求20中所述方法,其中,运行至少第一和第二BIOS程序其中之一包括运行一个校验过的可选ROM程序。
22.如权利要求11中所述方法,其中,校验包括校验并安装更新模块。
23.一种机器可读介质,其上存储了指令,这些指令被至少一个处理器执行时使得所述至少一个处理器执行下列操作初始化一个复位函数;运行一个受保护的程序;校验一个BIOS程序;和运行该BIOS程序。
24.一种装置,包括含有一个受保护的第一程序序列的第一存储器块;和含有用于引导计算机系统的第二程序序列的第二存储器块;其中,第一程序序列包括用于校验第二程序序列和把控制转给第二程序序列的指令。
25.如权利要求24所述装置,其中,第一程序序列包括用于锁定至少第一存储器块和第二存储器块其中之一的一部分的指令。
26.如权利要求24所述装置,其中,第二程序序列包括一个BIOS程序序列。
27.如权利要求24所述装置,其中,至少第一和第二程序序列之一包括用于锁定至少第一存储器块和第二存储器块其中之一的一部分的指令。
28.如权利要求24所述装置,其中,至少第一和第二程序序列之一包括用于校验可选ROM的指令。
29.如权利要求24所述装置,其中,至少第一和第二程序序列之一包括用于校验和安装更新模块的指令。
30.权利要求24所述装置,其中,第一程序序列包括用于定位第二程序序列的指令。
全文摘要
计算机系统内一个受保护的引导序列。一个复位向量引导系统进入一个包含受保护程序的引导程序。该受保护程序在转移到BIOS去运行标准引导程序函数前验证BIOS内容的完整性。该受保护程序也能锁定各种引导程序代码块,防止其在经过引导序列中某点后被修改。
文档编号G06F9/445GK1416545SQ01804817
公开日2003年5月7日 申请日期2001年1月4日 优先权日2000年2月11日
发明者克里斯托弗·J·施皮格尔, 安德鲁·H·加夫肯, 罗伯特·P·黑尔, 小威廉·A·史蒂文斯 申请人:英特尔公司