一种建立基于EFI的可信引导系统的方法 【技术领域】
本发明属于信息安全认证系统范围,具体涉及利用安全U盘的认证功能和安全可信存储功能,在Linux系统启动前对启动用户进行认证并对关键的配置文件以及操作系统内核文件进行校验,确保启动的Linux操作系统是一个干净、可信的操作系统。
背景技术
可信是安全的基础.近年来被高度关注的可信计算平台技术从可信的角度来帮助提高系统的安全性.可信计算的核心思想是“可信传递”,TCG(Trusted ComputingGroup:可信计算组织)提出了两种实现可信传递的关键技术,一是在计算平台上引入“可信根”,二是利用可信根来建立可信链.对于PC平台而言,TCG定义了从计算平台加电BIOS(Basic Input/Output System:基本输入输出系统)执行开始,到引导代码的执行,再到操作系统启动和上层应用程序的执行的一系列过程,信任将通过这个过程一直传递下去,直到整个计算环境的建立.由此可见,引导过程的安全是计算机系统安全的基点,引导阶段的可信验证是建立可信链的关键一环.根据TCG相关规范,建立平台信任链的关键硬件是TPM(Trusted Platform Module).TPM是一块类似于智能卡的芯片,是整个终端的信任根.我们也可以制作安全U盘(具有智能卡和U盘的双重功能)作为系统可信根。
怎样基于TPM建立系统的可信引导环境,国内外的学者对此进行了研究。Enforcer是Danmouth大学开发的一个Linux安全模块,它修改了LILO(Linux Loader)以支持TPM,使用TPM封装了一个加密文件系统的加密密码,引导过程中若发现指定文件的完整性与预期的不符则拒绝释放该密钥.AEGIS系统是基于嵌入式的安全模块,将系统引导分为多个层次,在引导过程的每一层之间转移的时候都进行完整性验证,转移间完整性验证失败时涉及到了一个恢复过程.德国波鸿大学的Trusted Grub和IBM的TCG Grub都是利用系统的TPM芯片,遵循了TCG规范,但只提供了简单的引导过程的度量.德国的Drseden大学的Bemhard Kauer开展了基于TPM和L4操作系统的认证启动研究工作.然而,上述的研究都是基于传统BIOS进行的。
从IBM于上世纪八十年代初推出了全世界第一台PC机开始,BIOS就成了个人计算机必备的系统软件。传统上的BIOS经过了长达20多年的时间,基本上没有大的特别的改进。EFI是Extensible Firmware Interface的缩写,中文意思是可扩展固件接口。EFI是Intel为了解决BIOS难于扩充的缺陷而推出的一项新技术,作为传统BIOS的接班人之一,是理论上能够很好地接替并且扩展现有BIOS功能的方案。EFI既保留了传统BIOS的所有基本功能,同时又针对传统BIOS的不足进行了必要的补充。
在基于新的EFI情况下,结合安全U盘的认证和安全功能建立平台信任链是一个需要研究的课题,国内外目前在这方面地研究很少。
【发明内容】
本发明的目的是提供一种建立基于EFI的可信引导系统的方法,其特征在于,具体包括:
第一步,通过Linux操作系统下的初始化模块对安全U盘进行初始化,设置需要验证的启动用户认证信息和操作系统内核模块的完整性校验信息;
第二步,对支持EFI的机器进行启动,当通过EFI引导管理器提示选择启动模块时,选择从文件ELilo.efi启动;若机器不支持EFI启动,则需要使用EFI EDK中的DUET制作EFI启动U盘,并将ELilo.efi以及操作系统内核模块和相关的initrd模块存放在EFI启动U盘上;使用EFI启动U盘启动系统到EFI Shell环境;
第三步,使用EFI Shell环境下的命令load装载EFI下的安全U盘驱动程序;
第四步,使用ELilo启动操作系统内核。ELilo利用安全U盘对启动用户进行认证并对操作系统内核进行可信验证,如果通过,则启动系统,否则终止系统的启动过程。
所述Linux操作系统,在新的EFI环境下使用安全U盘作为系统的一个可信硬件,根据可信计算理论,设计并实现对引导阶段文件的可信校验,建立引导阶段的可信链。
所述ELilo启动内核是使用Elilo引导模块,利用安全U盘提供的安全功能对Elilo模块进行安全增强,对启动阶段的文件进行检验,完成引导阶段的可信启动。
所述支持EFI的机器为长城安全电脑二代、惠普RX2600等。
所述不支持EFI的机器为普通基于传统BIOS的PC机等。
本发明相比现有技术有如下优点:
1.基于EFI进行引导阶段文件的可信检验,是对基于传统BIOS技术可信引导的有益补充.
2.在引导阶段对启动过程中的关键文件进行完整性校验,若通过则启动系统,否则终止系统的启动过程,增强了系统的可信性.
3.在启动阶段对启动用户进行认证增强了系统的安全性。
4.使用安全U盘作为可信根,增强了系统的实用性和便利性,更符合用户的使用习惯。
【附图说明】
图1是基于EFI的Linux操作系统引导流程图
图2是本发明的基于EFI的操作系统可信引导流程图
图3是ELilo系统中Linux内核模块探测功能bzImage_probe()的流程图
图4是本发明的Linux内核模块探测功能bzImage_probe()的流程图
图5是ELilo系统中Linux内核模块装载功能do_kernel_load()的流程图
图6是本发明的基于安全U盘的Linux内核模块可信装载功能do_kernel_load()流程图
图7是本发明的基于EFI的安全U盘驱动栈示意图
【具体实施方式】
本发明提供一种建立基于EFI的可信引导系统的方法,下面结合附图作对本发明作进一步详述:
图1,图2,图3,图4,图5,图6显示了本发明的工作原理.,
如图1所示,基于EFI的操作系统引导流程。整个EFI引导系统的主要模块是EFI引导管理器和EFI Loader。基于传统BIOS的Linux操作系统引导模块主要有Lilo和Grub。目前支持EFI的开源Linux操作系统引导模块有ELilo和Grub2,本发明使用ELilo。Linux引导过程中,我们假定EFI以及其中的引导管理器都是可信的,首先由引导管理器选择ELilo引导系统。由ELilo查找并装载内核,然后将系统控制权交给装载的操作系统内核,从而启动操作系统.
如图2所示,基于EFI的操作系统可信引导过程中,主要对ELilo进行了安全增强,由ELilo调度操作系统内核运行前对操作系统内核模块进行可信验证,若符合可信的条件,则继续引导操作系统,从而启动操作系统;否则,停止操作系统的调度和运行。具体流程如下:
第一步,通过Linux操作系统下的初始化模块对安全U盘进行初始化,设置需要验证的内核模块的完整性校验信息。
第二步,对系统固件支持EFI的机器进行启动,当通过EFI引导管理器提示选择启动模块时,选择从文件ELilo.efi启动;若系统固件不支持EFI启动,则需要使用TianoCore EDK中的DUET制作EFI启动U盘,并将ELilo以及操作系统内核和相关的initrd模块存放在EFI启动U盘上。使用EFI启动U盘启动系统到EFI Shell环境下,假设操作系统内核模块为vmlinuz-2.6.18-8.10WS,Initrd模块为initrd-2.6.18-8.10WS.img,Linux安装的根分区为/dev/sda10,则使用ELilo命令ELilo-i initrd-2.6.18-8.10WS.img vmlinuz-2.6.18-8.10WS roroot=/dev/sda10启动内核运行。
第三步,ELilo利用安全U盘对操作系统内核以及相关的配置文件进行可信验证,若通过,则启动系统,否则终止系统的启动过程。
图3所示,Elilo原有的启动流程中,首先要探测操作系统内核的存在,即通过读取并分析引导扇区,根据相关的配置数据对内核进行读取。
图4所示,我们修改了Elilo启动流程中探测操作系统内核,其中增加了对内核文件内容的完整性值的计算,并将计算结果存放在V1中,并在后续的功能模块中对其进行检查.
图5所示,Elilo原有的启动流程中操作系统内核探测成功后,便对操作系统内核进行装载,装载成功后,通过调用EFI的引导服务接口BS->ExitBootServices()终止EFI的引导服务,将系统控制权转交给操作系统内核,进而调用启动操作系统内核的函数start_kernel()启动整个系统。
图6所示,我们修改了Elilo启动流程中对操作系统内核的装载模块,在操作系统内核真正加载之前,通过EFI下的安全U盘协议接口EFI_SECURE_DISK中的相关函数指针访问安全U盘模块。首先对启动用户进行认证,若认证不通过,停止操作系统的装载过程;若认证通过,则将原来存放在安全U盘模块内的操作系统内核完整性校验值V2读出并与V1进行比较,若相等,则对操作系统内核的完整性校验成功,立即终止EFI的引导服务,并将系统控制权转交给操作系统内核,进而调用启动操作系统内核的函数start_kernel()启动整个系统;否则停止操作系统内核的装载,系统停止运行。
图7所示为EFI下的安全U盘驱动栈。为了在操作系统内核被装载运行前对操作系统内核文件进行完整性校验,需要使用一个安全设备作为可信存储,本发明使用一个安全存储U盘,安全U盘为该发明提供信息的安全可信存储功能。安全存储U盘的使用需要EFI下的驱动。最下层的是USB主机控制器设备驱动,其上是USB总线驱动,然后是USB块传输设备驱动,最上层是USB大容量设备驱动和智能卡设备驱动。