一种基于统一可扩展固件接口的固件文件可信验证方法

    专利查询2022-08-11  114



    1.一种基于统一可扩展固件接口的固件文件可信验证方法属于固件文件信息安全领域,尤其涉及uefi bios的固件文件可信验证领域。


    背景技术:

    2.1.uefi specification version2.9(march 2021)
    3.统一可扩展固件接口(unified extensible firmware interface,uefi)是最早由英特尔公司开发,之后交由英特尔、ibm、微软等国际知名企业共同组成的uefi论坛管理、推进的一套新一代基本输入输出系统(basic input output system,bios)技术规范。其规定了操作系统与硬件平台之间的全新固件接口规范,使用了模块化设计,可扩展性得到了巨大的提升。uefi bios分为7个阶段,本方法作用于其核心阶段efi初始化准备(pre-efi initialization,pei)阶段和驱动程序执行环境(driver execution environment,dxe)阶段。本发明针对了模块化这一特点,在pei和dxe阶段将固件文件作为模块加载的过程中,提取固件文件信息对其加以验证,保证了固件文件的安全性。
    4.2.刘文祺.基于uefi固件的安全性研究及恶意代码检测[d].四川:电子科技大学,2016.doi:10.7666/d.d00990581.
    [0005]
    刘文祺在“基于uefi固件的安全性研究及恶意代码检测”一文中,介绍了uefi环境下恶意文件的隐蔽性强、启动时间早等特点,并针对恶意文件提出了针对恶意文件特征检测方法,该方法通过遍历文件系统的方法,经过判断文件类型、完整性检测、病毒特征码匹配等手段,检测uefi文件系统中的固件文件,整个检测过程耗时较长,效率较低。
    [0006]
    3.中电科技(北京)有限公司.一种基于uefi的可执行程序文件保护系统和方法:cn201410457614.2[p].2015-04-29.
    [0007]
    专利公开号为cn104573499a专利名称为一种基于uefi的可执行程序文件保护系统和方法,主要针对硬盘中的各分区文件进行保护和度量,没有考虑uefi启动早期,系统还未加载硬盘驱动阶段时,存放在闪存中的一些固件文件的保护,保护能力并不突出。
    [0008]
    4.目前大部分基于uefi的固件文件保护方案,主要通过对硬盘全盘扫描的方式,局限于文件系统以内,无法做到对文件加载过程中的动态度量,且耗费系统资源较多,系统启动时间较长,效率较低。


    技术实现要素:

    [0009]
    本发明的目的为提供一种uefi中的文件可信验证的方法,用以保护uefi中的关键文件不被攻击或篡改,该方法相对于其他文件保护方法,只在uefi文件被加载的过程中验证,效率更高,也可以避免加载未被攻击者注入的不安全文件,导致uefi系统被攻击。
    [0010]
    基于uefi的固件文件可信验证的方法,对uefi中的pei阶段和dxe阶段的文件加载模块植入模块,提取被加载文件的度量信息,与保存在可信基板管理控制器(baseboard management controller,bmc)中进行比对,只有通过验证的文件才能被加载,保证了uefi
    系统的安全性。
    [0011]
    按照可信计算的基本思想,建立信任链首先要确立一个可信度量根,然后从可信度量根开始建立一条信任链,逐级扩展。可信度量根必须是可信的,其可信性由物理安全、技术安全和管理安全共同确保,是整个信任链可信的基础,也是整个可信计算平台可信的保障。
    [0012]
    建立一个以bmc为可信根的扩展度量模块,文件度量的基准值需要保存在bmc中,建立bmc与uefi的通信机制,在uefi加载固件文件的过程中提取出的度量文件信息发送到扩展度量模块,扩展度量模块与bmc通信获取基准值并进行判断,决定该文件是否可以加载。
    [0013]
    uefi系统的启动依据uefi specification的标准,包括七个阶段,依次是安全验证(security phase,sec)阶段、efi初始化准备(pre-efi initialization,pei)阶段、驱动程序执行环境(driver execution environment,dxe)阶段、启动设备选择(boot device selection,bds)阶段、瞬时系统加载(transient system load,tsl)阶段、系统运行(run time,rt)阶段和运行结束(after life,al)阶段。其中pei和dxe为uefi启动的核心阶段,需要加载关键文件,因此本方法作用于pei和dxe两个阶段。
    [0014]
    文件加载模块使用了uefi自身的程序,uefi由其模块化的设计特点,固件文件在pei和dxe阶段分别使用对应的调度器(dispatcher)进行文件加载,在调度器中植入模块,提取固件文件的度量信息,并发送给扩展度量模块进行度量,得出结果判断是否允许加载该文件。
    [0015]
    每个uefi固件文件都有一个独一无二的全局唯一标识符(globally unique identifier,guid)对其进行标识,uefi通过guid来对固件文件进行定位和加载,因此可以在固件文件加载过程中,提取固件文件的guid,并将其与存储在bmc中的基准表通过扩展度量模块进行比对,如果出现不在基准表中的guid,可以认为该文件是被非法嵌入固件中的,该文件不可信。通过guid只能度量uefi固件文件的有无,如果要检验文件是否完整是否被篡改,则需要使用文件的散列值(hash)校验。通过将可信的固件文件的hash值存放在基准值表中,再在加载时计算当前文件hash值并通过扩展度量模块与其进行比对,即可保证固件文件不被篡改,保证固件文件的安全性。
    [0016]
    固件文件可信验证流程如图一所示。
    [0017]
    在所建立的bmc与uefi的通信机制中,又建立了bmc与pei核心、bmc与dxe核心之间的通信,在pei阶段完成后,将pei阶段的固件文件可信验证结果送往bmc后再进入dxe阶段,以实现pei和dxe二者之间的可信切换。
    [0018]
    本发明的特征在于,这是一种在uefi bios系统可信启动全过程中保护固件文件模块在相互衔接的初始化准备阶段pei和驱动程序执行环境阶段dxe的固件文件模块动态安全性的可信验证方法,是在一个固件文件可信验证系统中按如下步骤依次实现的,
    [0019]
    步骤(1),系统构建,所述系统包括,一个pei阶段的文件加载模块,简称pei文件加载模块,一个dxe阶段文件加载模块,简称dxe文件加载模块,一个供上述两个文件加载模块共用且位于uefi bios系统内的扩展度量模块以及一个受可信根基板管理控制器bmc主控制器cpus控制的标准基准值表存储模块,其中:
    [0020]
    标准基准值表存储模块模块,其中:标准基准值是将固件文件存储到所述标准基
    准值表时的初始基准值,每个固件文件的标准基准值有两个,一个是每一个uefi的固件文件对应的全局唯一标识符guid,用于唯一指认每一个被加载的固件文件;另一个为被加载固件文件的hash标准值,用于将其与当前被加载文件的hash计算值比对,以保证当前被加载固件文件的可信性;
    [0021]
    扩展度量模块,其中包括:控制子模块,判定子模块,度量子模块及bmc通信模块,其中:
    [0022]
    bmc通信模块,通过bmc中与uefi的接口与bmc中的bmc主控制器cpus互连,同时又与所述判定子模块相连,用于在对当前固件文件可信验证时,先后把所述标准基准值表中的guid、hash标准值传送到所述判定子模块与当前固件文件的guid与hash计算值对比,此外所述bmc通信模块又与所述控制子模块互连,以便控制子模块在完成pei阶段的固件文件加载后经所述bmc主控制器cpus向uefi bios系统的主控制器发出请求激活dxe阶段的dxe核心,调用对应的接口开始加载dxe阶段需要加载的文件;
    [0023]
    度量子模块,使用国密sm3算法作为hash值计算方法,将当前加载文件即当前固件文件的内容进行度量,得到当前加载文件的hash计算值,
    [0024]
    判定子模块,先判断guid,将当前加载文件的guid与标准基准值表中的guid值比对,若guid比对通过,再将当前加载文件的hash计算值与标准基准值表中的hash标准值进行比对,并将guid比对结果和hash值比对结果传递给控制子模块,
    [0025]
    控制子模块,根据判定子模块的guid与hash值比对结果,若二者皆比对通过,则允许文件加载模块加载该文件,反之,则拒绝文件加载模块加载该文件;
    [0026]
    pei文件加载模块,包括pei调度器子模块和pei文件入口子模块,其中:
    [0027]
    pei调度器子模块,所述的pei调度器,是所述pei阶段的pei核心从数据包mdemodulepkg\core\pei\dispatcher\dispatcher.c中获得的接口,所述pei调度器子模块包括以下执行步骤:
    [0028]
    步骤1.pei调度器把当前固件文件以pei模块peim的形式加载,
    [0029]
    步骤2.pei调度器调用pei加载映像接口peiloadimage获得pei文件句柄peimfilehandle结构体,以获得其中固件文件的guid,并把guid的值送往所述扩展度量模块中的判定子模块,
    [0030]
    步骤3.所述pei加载映像接口peiloadimage打开所述peim获取固件文件地址,送往文件入口子模块,从文件入口子模块获取固件文件内容,送往所述扩展度量模块中的度量子模块;
    [0031]
    dxe阶段文件加载模块,包括dxe调度器子模块和dxe文件入口子模块,其中:
    [0032]
    dxe调度器子模块,所述的dxe调度器,是所述dxe阶段的dxe核心从数据包mdemodulepkg\core\dxe\dispatcher\dispatcher.c中获得的接口,所述dxe调度器子模块包括以下执行步骤:
    [0033]
    步骤1.dxe调度器根据预定队列mscheduledqueue的顺序加载固件文件,
    [0034]
    步骤2.dxe调度器将当前加载固件文件从mscheduledqueue中读入驱动入口driverentry结构体,并从driverentry中获取当前固件文件的guid,
    [0035]
    步骤3.dxe调度器把当前固件文件的guid送入所述扩展度量模块中的判定子模块,
    [0036]
    步骤4.dxe调度器再经dxe加载映像接口coreloadimage,打开当前固件文件的映像句柄imagehandle,获取当前固件文件地址,送往文件入口子模块,获取当前固件文件内容,送入所述扩展度量模块中的度量子模块;
    [0037]
    步骤(2)依次按以下步骤实现基于统一可扩展固件接口uefi的固件文件可信验证方法:
    [0038]
    步骤(2.1)在pei阶段:
    [0039]
    步骤(2.1.1)pei核心首先调用所述pei调度器加载pei固件文件,所述bmc通信模块在可信根bmc的主控制器控制下逐一地从标准基准值表存储模块中提取表中的guid,送往判定子模块,同步地,所述文件加载模块把当前加载文件的guid送往判定子模块,逐个地实现一对多的比较,若找到一个guid的标准值与所述当前加载的固件文件的guid度量值相同时,则证明当前文件具有可信验证的必要性,执行步骤(2.1.2),否则,拒绝加载当前文件,
    [0040]
    步骤(2.1.2)若必要条件通过的那个当前加载文件同时也用步骤(2.1.1)所述方法满足了充分条件,即hash计算值与标准基准值表中相同的guid对应的hash标准值相同,则系统必要又充分地实现了当前固件文件的可信验证,允许加载该文件,当控制子模块在完成pei阶段的固件文件加载后经所述bmc主控制器cpus向uefi bios系统的主控制器发出请求激活dxe阶段的dxe核心;
    [0041]
    步骤(2.2)在dxe阶段,按步骤(2.1)同样处理,在完成dxe阶段固件文件加载后,程序终止。
    [0042]
    在pei-dxe阶段中,从头到结束,实现了固件文件的可信验证,弥补了现有技术的不足,又保持了固件文件在uefi bios系统中的全程动态安全。
    附图说明
    [0043]
    图1为本发明的主程序流程框图。
    [0044]
    图2为本发明的系统框图。
    具体实施方式
    [0045]
    1.在pei阶段,文件加载通过pei核心(pei core)中的peidispatcher接口进行,该接口于mdemodulepkg\core\pei\dispatcher\dispatcher.c中实现。
    [0046]
    1.1pei core调用peidispatcher接口,
    [0047]
    1.2peidispatcher将固件文件以pei模块(pei module,peim)的形式进行加载,
    [0048]
    1.3在peidispatcher调用peiloadimage接口时获取peimfilehandle结构体,在其中获得固件文件的guid,
    [0049]
    1.4将获取到的guid与基准值表中的guid进行比对,比对通过则获取固件文件内容计算hash值,比对失败则拒绝加载,
    [0050]
    1.5peiloadimage接口打开peim时获取固件文件内容,
    [0051]
    1.6将固件文件内容送至扩展度量模块计算其hash值,
    [0052]
    1.7将hash值与基准表中的基准值进行比对,比对通过则证明文件安全,可以加载,比对失败则拒绝加载。
    [0053]
    在dxe阶段,文件加载通过dxe核心(dxe core)中的coredispatcher接口进行,该接口于mdemodulepkg\core\dxe\dispatcher\dispatcher.c中实现。
    [0054]
    2.1dxe core调用coredispatcher接口,
    [0055]
    2.2coredispatcher根据mscheduledqueue加载固件文件,
    [0056]
    2.3driverentry从mscheduledqueue中获取固件文件信息,
    [0057]
    2.4从数据结构driverentry中获取加载文件的guid,
    [0058]
    2.5将获取到的guid进行比对,比对通过则获取固件文件内容计算其hash值,比对失败则拒绝加载,
    [0059]
    2.6coreloadimage接口打开imagehandle时获取固件文件内容,
    [0060]
    2.7将固件文件内容计算hash值,
    [0061]
    2.8将hash值与基准表中的基准值进行比对,比对通过则证明文件安全,可以加载,比对失败则拒绝加载。

    技术特征:
    1.一种基于统一可扩展固件接口的固件文件可信验证方法,其特征在于,这是一种在uefi bios系统可信启动全过程中保护固件文件模块在相互衔接的初始化准备阶段pei和驱动程序执行环境阶段dxe的固件文件模块动态安全性的可信验证方法,是在一个固件文件可信验证系统中按如下步骤依次实现的,步骤(1),系统构建,所述系统包括,一个pei阶段的文件加载模块,简称pei文件加载模块,一个dxe阶段文件加载模块,简称dxe文件加载模块,一个供上述两个文件加载模块共用且位于uefi bios系统内的扩展度量模块以及一个受可信根基板管理控制器bmc主控制器cpu
    s
    控制的标准基准值表存储模块,其中:标准基准值表存储模块模块,其中:标准基准值是将固件文件存储到所述标准基准值表时的初始基准值,每个固件文件的标准基准值有两个,一个是每一个uefi的固件文件对应的全局唯一标识符guid,用于唯一指认每一个被加载的固件文件;另一个为被加载固件文件的hash标准值,用于将其与当前被加载文件的hash计算值比对,以保证当前被加载固件文件的可信性;扩展度量模块,其中包括:控制子模块,判定子模块,度量子模块及bmc通信模块,其中:bmc通信模块,通过bmc中与uefi的接口与bmc中的bmc主控制器cpu
    s
    互连,同时又与所述判定子模块相连,用于在对当前固件文件可信验证时,先后把所述标准基准值表中的guid、hash标准值传送到所述判定子模块与当前固件文件的guid与hash计算值对比,此外所述bmc通信模块又与所述控制子模块互连,以便控制子模块在完成pei阶段的固件文件加载后经所述bmc主控制器cpu
    s
    向uefi bios系统的主控制器发出请求激活dxe阶段的dxe核心,调用对应的接口开始加载dxe阶段需要加载的文件;度量子模块,使用国密sm3算法作为hash值计算方法,将当前加载文件即当前固件文件的内容进行度量,得到当前加载文件的hash计算值,判定子模块,先判断guid,将当前加载文件的guid与标准基准值表中的guid值比对,若guid比对通过,再将当前加载文件的hash计算值与标准基准值表中的hash标准值进行比对,并将guid比对结果和hash值比对结果传递给控制子模块,控制子模块,根据判定子模块的guid与hash值比对结果,若二者皆比对通过,则允许文件加载模块加载该文件,反之,则拒绝文件加载模块加载该文件;pei文件加载模块,包括pei调度器子模块和pei文件入口子模块,其中:pei调度器子模块,所述的pei调度器,是所述pei阶段的pei核心从数据包mdemodulepkg\core\pei\dispatcher\dispatcher.c中获得的接口,所述pei调度器子模块包括以下执行步骤:步骤1.pei调度器把当前固件文件以pei模块peim的形式加载,步骤2.pei调度器调用pei加载映像接口peiloadimage获得pei文件句柄peimfilehandle结构体,以获得其中固件文件的guid,并把guid的值送往所述扩展度量模块中的判定子模块,步骤3.所述pei加载映像接口peiloadimage打开所述peim获取固件文件地址,送往文件入口子模块,从文件入口子模块获取固件文件内容,送往所述扩展度量模块中的度量子模块;dxe阶段文件加载模块,包括dxe调度器子模块和dxe文件入口子模块,其中:
    dxe调度器子模块,所述的dxe调度器,是所述dxe阶段的dxe核心从数据包mdemodulepkg\core\dxe\dispatcher\dispatcher.c中获得的接口,所述dxe调度器子模块包括以下执行步骤:步骤1.dxe调度器根据预定队列mscheduledqueue的顺序加载固件文件,步骤2.dxe调度器将当前加载固件文件从mscheduledqueue中读入驱动入口driverentry结构体,并从driverentry中获取当前固件文件的guid,步骤3.dxe调度器把当前固件文件的guid送入所述扩展度量模块中的判定子模块,步骤4.dxe调度器再经dxe加载映像接口coreloadimage,打开当前固件文件的映像句柄imagehandle,获取当前固件文件地址,送往文件入口子模块,获取当前固件文件内容,送入所述扩展度量模块中的度量子模块;步骤(2)依次按以下步骤实现基于统一可扩展固件接口uefi的固件文件可信验证方法:步骤(2.1)在pei阶段:步骤(2.1.1)pei核心首先调用所述pei调度器加载pei固件文件,所述bmc通信模块在可信根bmc的主控制器控制下逐一地从标准基准值表存储模块中提取表中的guid,送往判定子模块,同步地,所述文件加载模块把当前加载文件的guid送往判定子模块,逐个地实现一对多的比较,若找到一个guid的标准值与所述当前加载的固件文件的guid度量值相同时,则证明当前文件具有可信验证的必要性,执行步骤(2.1.2),否则,拒绝加载当前文件,步骤(2.1.2)若必要条件通过的那个当前加载文件同时也用步骤(2.1.1)所述方法满足了充分条件,即hash计算值与标准基准值表中相同的guid对应的hash标准值相同,则系统必要又充分地实现了当前固件文件的可信验证,允许加载该文件,当控制子模块在完成pei阶段的固件文件加载后经所述bmc主控制器cpu
    s
    向uefi bios系统的主控制器发出请求激活dxe阶段的dxe核心;步骤(2.2)在dxe阶段,按步骤(2.1)同样处理,在完成dxe阶段固件文件加载后,程序终止。

    技术总结
    一种基于统一可扩展固件接口的固件文件可信验证方法,属于文件信息动态安全领域,其特征在于,这是一种UEFI BIOS在启动早期PEI-DXE阶段的固件文件加载时用的方法,本发明以文件外在标准作为验证必要条件,以文件hash值作为文件内容的验证充分条件,在可信根BMC内建立了以GUID、hash值双参数作为标准基准值,存入双参数基准表的存储模块,分别以PEI核心、DXE核心作为对应阶段起始点,通过各自的PEI、DXE核心调用相应的调度器来加载文件,并由相应调度器把文件的GUID及文件内容送往UEFI BIOS系统中建立的扩展度量模块,与其中BMC通信模块从BMC调用的标准基准值作比对,若固件文件既满足必要性又符合充分性,则允许加载,本发明弥补了当前仅对硬盘文件作静态保护方法的不足。法的不足。法的不足。


    技术研发人员:张建标 张硕 韩现群 刘燕辉
    受保护的技术使用者:北京工业大学
    技术研发日:2022.02.21
    技术公布日:2022/5/25
    转载请注明原文地址:https://tc.8miu.com/read-6188.html

    最新回复(0)