背景技术
BIOS(Basic Input/Output System,基本输入输出系统)是计算机系统中的基础元件,计算机在上电后通过BIOS初始化CPU及芯片组,引导操作系统提供用户正常使用。
计算技术的发展和应用需求导致目前存储BIOS系统固件的芯片普遍采用Flash芯片。Flash芯片的使用为BIOS系统带来两个突出变化:(1)存储BIOS的芯片容量增加;(2)在操作系统环境下能够以纯软件方式读写BIOS。这两个变化一方面便于BIOS的在线更新升级;另一方面导致攻击BIOS系统的技术逐步成熟,使第三方恶意者向BIOS中植入恶意代码、病毒、木马等成为可能,对计算机安全产生威胁。2011年的Mebromi是一个新的针对BIOS的rootkit,它感染电脑主板的BIOS芯片和硬盘MBR(主引导区),再控制Windows系统文件加载恶意代码,使受害用户无论重装系统、格式化硬盘,甚至换掉硬盘都无法将其彻底清除。
由于BIOS系统处于计算机系统底层,因此BIOS系统遭受到上述威胁攻击时,会造成计算机系统的彻底崩溃,或导致计算机系统被恶意者从底层控制。安全BIOS系统必须能够防范上述的恶意攻击,阻止攻击者植入BIOS芯片中的恶意代码的执行,保障BIOS系统自身代码和数据的完整性,保证BIOS系统的执行代码只来自可信任的BIOS厂商、硬件驱动厂商等。由于不可预知的故障或攻击导致BIOS系统部分完整性遭到破坏时,BIOS系统必须提供安全有效的检测机制和失败自恢复机制。实施该机制的BIOS代码必须受到硬件保护,保证失败自恢复机制自身不会遭到破坏。
目前已经有一些对BIOS进行保护和更新的系统和方法。专利CN101464933B是根据用户在配置界面的选择,实现对BIOS防止写入的控制。该方法根据密码及用户是否是管理员权限来限制用户是否可以进入配置界面进行配置。此种方法没有硬件保护,是一种利用FLASH写保护命令操作的软件写保护方法,无法阻止恶意软件自己操作FLASH的写保护命令从而实现对BIOS的恶意篡改。专利CN1121012C是利用x86架构平台特有的系统管理中断SMI,实现对FLASH芯片的写保护。这种方法不具有通用性,尤其不能应用于国产的龙芯等处理器平台。专利CN1231787A通过特定的加密协处理器硬件装置对BIOS升级进行授权来保护BIOS不被非法修改。专利CN101281577B通过特定的可信计算模块实现对BIOS代码读写和更新的访问控制,来实现对BIOS的保护。这两个专利的硬件设计与实现方法都比较复杂,BIOS保护的实现方法都独立于BIOS自身代码之外,与本发明的硬件和软件实现方法都有很大区别。专利CN100561923C给出了一种在远程模式下通过网络接口对BIOS数据进行更新的方法,通过BIOS文件传输模块和存储模块中的加密解密模块保证BIOS的数据安全,并由BIOS更新控制模块读取刷新标志位判断是否更新。
发明内容
为解决上述问题,针对现有技术中的缺陷,本发明提出了一种利用BIOS自身代码和控制模块硬件,实现BIOS安全更新和写保护的方法,以达到从底层保护计算机系统安全性的目的。
一种BIOS自更新保护系统,包括:CPU及配套芯片组、FLASH芯片和控制模块。所述CPU及配套芯片组用于执行BIOS代码的基本功能、BIOS检测与恢复功能及BIOS更新保护功能;所述FLASH芯片用于存储系统运行过程中正常执行的BIOS代码;所述控制模块,它与FLASH芯片的写保护引脚相连,用于控制数据写入FLASH芯片,实现对存储BIOS代码的FLASH芯片的写保护。
进一步的,所述FLASH芯片中的BIOS代码,分成BootBlock和MainBlock两部分,BootBlock中还包括BIOS检测单元和BIOS恢复单元,前者用于检查BIOS的完整性,当BIOS的完整性检查失败时,用后者实现对BIOS的恢复。MainBlcok中还包含BIOS自更新单元和FLASH保护配置单元,分别用于执行正常的BIOS更新升级和实现对FLASH芯片写保护的配置,防止用户对FLASH芯片中BIOS代码的恶意篡改。
进一步的,所述控制模块中包括FLASH写保护控制单元、更新寄存器和WO寄存器。FLASH写保护控制单元根据BIOS的配置,实现对FLASH芯片的写保护。更新寄存器和WO寄存器分别用于标示更新的状态和FLASH芯片写保护的状态;其中,更新寄存器是非易失性的;WO寄存器是易失性的,且在一次上电过程中,其状态只允许改变一次,且只允许从0改为1。
进一步的,所述BootBlock代码所在的FLASH部分是被永久写保护,不可改写的;MainBlock所在的FLASH部分由控制模块根据WO寄存器的值来完成对其的写保护控制。
一种BIOS自更新保护方法,其特征在于,BIOS自更新步骤至少包括:
步骤S1:生成待更新BIOS镜像;
步骤S2:设置更新寄存器的状态为1,重启计算机;
步骤S3:BIOS检测单元检测BIOS的完整性,如果BIOS没有被篡改,则继续向下执行;如果BIOS被篡改,则由BIOS恢复单元执行对BIOS的恢复;
步骤S4:BIOS自更新单元检测更新寄存器,若其值为1,则检测待更新BIOS的合法性,并根据检测结果执行安全更新;
步骤S5:BIOS的FLASH保护配置单元置WO寄存器为1,控制模块FLASH写保护控制单元根据WO寄存器的状态执行FLASH硬件写保护,使得上层软件不能对FLASH进行写操作;
步骤S6:执行BIOS的其它功能,正常启动OS。
进一步的,所述待更新BIOS镜像的生成步骤包括:
步骤S1.1:开发编译生成待升级的BIOS镜像的纯代码;
步骤S1.2:利用杂凑算法计算BIOS镜像的摘要;
步骤S1.3:利用私钥对BIOS镜像的摘要进行签名;
步骤S1.4:将BIOS镜像、签名和公钥打包,重构成待更新的BIOS镜像;
进一步的,所述步骤S3中检测BIOS的完整性的步骤包括:
步骤S3.1:FLASH中运行的BIOS的完整性检测单元利用自己的公钥对FLASH中运行的BIOS的签名进行验签,得到摘要值A;
步骤S3.2:FLASH中运行的BIOS的完整性检测单元利用自己的摘要算法对FLASH中运行的BIOS的代码进行杂凑运算,得到摘要值B;
步骤S3.3:比较摘要值A和B;
步骤S3.4:如果A=B,则表明FLASH中运行的BIOS MainBlock是合法的,系统继续向下执行;
步骤S3.5:如果A≠B,则表明FLASH中运行的BIOS MainBlock是非法的,由BIOS恢复单元执行BIOS恢复。
进一步的,所述步骤S4中检测待更新BIOS合法性的步骤包括:
步骤S4.1:FLASH中运行的BIOS自更新单元利用自己的公钥对待更新BIOS的签名进行验签,得到摘要值A;
步骤S4.2:FLASH中运行的BIOS自更新单元利用自己的摘要算法对待更新BIOS的代码进行杂凑运算,得到摘要值B;
步骤S4.3:比较摘要值A和B;
步骤S4.4:如果A=B,则表明待更新的BIOS是合法的,执行BIOS安全更新并清除更新寄存器为0;
步骤S4.5:如果A≠B,则表明待更新的BIOS是非法的,报警提示,拒绝更新,并清空更新寄存器为0。
进一步的,所述BIOS BootBlock中还应该包括用于验签的公钥以及进行验签和计算杂凑时用到的算法;BIOS MainBlock中还应该包含BIOS自身的签名、用于验签的公钥以及进行验签和计算杂凑时用到的算法。
进一步的,所述验签过程中用到的密钥对由BIOS厂商构建,私钥与公钥分别秘密保存,公钥固化到终端BIOS中,避免个人构建密钥对将非法BIOS文件写入。
有益效果:
1、本发明通过BIOS的自更新保护方法,保证BIOS不被非授权的修改;即使BIOS被非授权修改,也可以通过本发明的完整性检测手段检测到非授权修改,并在当BIOS被非授权修改或者崩溃时,对其进行恢复,保证系统的正常运行。
2、本发明综合考虑各种非物理现场的破坏或篡改BIOS的潜在威胁,从硬件上控制BIOS写操作,并兼具了软件更新的易用性,可以保障BIOS更新的安全性和正确性。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
如图1所示,本发明的BIOS自更新保护系统包括:CPU及配套芯片组P10、FLASH芯片P20和控制模块P30。P10,即CPU及配套芯片组,用于执行BIOS代码的基本功能、BIOS检测与恢复功能及BIOS更新保护功能,P10可以是支持x86、MIPS、SPARC或Alpha等不同指令集类型的处理器架构。P20,即FLASH芯片,用于存储系统运行过程中正常执行的BIOS代码。P30,即所述控制模块,它通过GPIO等方式,与FLASH芯片的写保护引脚相连,用于控制数据写入FLASH芯片,实现对存储BIOS代码的FLASH芯片的写保护。
P20中的BIOS代码,分成BootBlock和MainBlock两部分。BootBlock代码负责初始化最小可运行硬件环境,准备好系统可用内存。BootBlock中还包括BIOS检测单元P23和BIOS恢复单元P24,P23用于检查BIOS的完整性,当BIOS的完整性检查失败时,用P24实现对BIOS的恢复。MainBlcok用于初始化硬件平台中所有其它硬件,并引导操作系统。MainBlock中还包含BIOS自更新单元P21和FLASH保护配置单元P22,P21用于执行正常的BIOS更新升级,P22实现对FLASH芯片写保护的配置,防止用户对FLASH芯片中BIOS代码的恶意篡改。另外,BootBlock代码所在的FLASH部分通过硬件实现被永久写保护,不可改写;MainBlock所在的FLASH部分由P30根据P33的值来完成对其的写保护控制。
P30包括FLASH写保护控制单元P31、更新寄存器P32和WO寄存器P33。P31根据BIOS配置P33的值,控制P30与P20之间的物理连接线拉高或者拉低,实现对FLASH芯片的写保护。P32和P33分别用于标示更新的状态和FLASH芯片写保护的状态。其中,P32是非易失性的;P33是易失性的,每次开机上电会清零,且在一次上电过程中,其状态只允许改变一次,且只允许从0改为1。
如图2所示,计算机开机上电的执行过程,及计算机在运行过程中BIOS自更新保护流程描述如下:(1)开机上电,BIOS的BootBlock先执行,由P23检测MainBlock的完整性;(2)如果MainBlock被篡改,则由P24执行BIOS恢复,恢复成功后重启计算机系统。如果MainBlock是完整的,则继续执行第(3)步;(3)BIOS的MainBlock执行,P21检测更新标志寄存器P32是否为1;(4)如果P32为1,则需要进行BIOS更新,继续执行第(5)步,否则,不需要BIOS更新,则继续执行第(8)步;(5)P21对待更新的BIOS文件进行验签,验证其是否是由BIOS厂商提供的合法的BIOS镜像文件。如果是,则执行第(6)步,进行BIOS更新,否则执行第(7)步;(6)P21更新FLASH中的BIOS,然后清空更新寄存器P32为0,并重新启动计算机;(7)P21清空更新寄存器P32为0,报警提示,拒绝更新FLASH中的BIOS;(8)P22设置BIOS写保护生效,置P33为1;(9)P31执行BIOS写保护设置,使得FLASH芯片的内容不可被更改;(10)MainBlock引导操作系统,操作系统下的应用程序运行,并随时准备接受上层软件对于P32的设置,进行FLASH中的BIOS更新。因为物理上FLASH的写保护引脚同控制模块相连,同时,在第(9)步中,将FLASH设置为不可写状态,而操作系统上的软件要想操作FLASH写,必须通过控制模块,这就保证了FLASH上的BIOS代码免于被恶意篡改。
要进行BIOS安全更新,必须先生成可验证其合法性的安全BIOS镜像。BIOS镜像的生成过程,及对其完整性和合法性进行验证的过程如图3所示。对该过程描述如下:
由BIOS厂商生成待更新的安全BIOS镜像,其生成方法,如图3左侧线框内的流程所示:(1)BIOS厂商开发编译生成待升级的BIOS镜像的纯代码;(2)利用杂凑算法计算BIOS镜像的摘要;(3)利用私钥对BIOS镜像的摘要进行签名;(4)将BIOS镜像、签名和公钥打包,重构成待更新的安全BIOS镜像。
检测待更新BIOS合法性的步骤,如图3右侧线框内的流程所示:(1)FLASH中运行的BIOS自更新单元利用自己的公钥对待更新BIOS的签名进行验签,得到摘要值A;(2)FLASH中运行的BIOS自更新单元利用自己的摘要算法对待更新BIOS的代码进行杂凑运算,得到摘要值B;(3)比较摘要值A和B;(4)如果A=B,则表明待更新的BIOS是合法的,执行BIOS安全更新并清除更新寄存器为O;(5)如果A≠B,则表明待更新的BIOS是非法的,报警提示,拒绝更新,并清空更新寄存器为0。
检测BIOS的完整性的方法同检测待更新BIOS合法性的方法一致,流程描述如下:(1)FLASH中运行的BIOS的完整性检测单元利用自己的公钥对FLASH中运行的BIOS的签名进行验签,得到摘要值A;(2)FLASH中运行的BIOS的完整性检测单元利用自己的摘要算法对FLASH中运行的BIOS的代码进行杂凑运算,得到摘要值B;(3)比较摘要值A和B;(4)如果A=B,则表明FLASH中运行的BIOS MainBlock是合法的,系统继续向下执行;(5)如果A≠B,则表明FLASH中运行的BIOS MainBlock是非法的,由BIOS恢复单元执行BIOS恢复。
安全BIOS镜像的组成架构如图4所示。BIOS BootBlock中还应该包括用于验签的公钥以及进行验签和计算杂凑时用到的算法;BIOS MainBlock中还应该包含BIOS自身的签名、用于验签的公钥以及进行验签和计算杂凑时用到的算法。验签过程中用到的密钥对由BIOS厂商构建,私钥与公钥分别秘密保存,公钥固化到终端BIOS中,避免个人构建密钥对将非法BIOS文件写入。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。