文献标识码: A
DOI:10.16157/j.issn.0258-7998.174325
中文引用格式: 苏振宇. 可信计算在服务器基板管理控制器中的应用[J].电子技术应用,2018,44(5):48-51.
英文引用格式: Su Zhenyu. The application of trusted computing technology on baseboard management controller platform[J]. App-
lication of Electronic Technique,2018,44(5):48-51.
0 引言
基板管理控制器(Baseboard Management Controller,BMC)是服务器的重要单元,其利用虚拟的键盘、界面、鼠标、电源等为服务器提供远程管理功能[1],用户登录BMC的Web管理界面监视服务器的物理特征,如主板各部件的温度、电压、电源供应以及机箱入侵等。BMC本质上是一个嵌入式系统,在使用过程中会面临程序完整性被破坏、操作系统被攻击、Web应用被植入恶意代码等安全风险。此外,目前国内的服务器普遍采用国外的BMC芯片,如ASPEED系列的AST2400、AST2500型号,安全性未知,核心技术受制于人。因此,本文基于自主研发的BMC模块,研究了BMC的可信启动技术并且成功地进行了应用。
1 信任链构建
自主研发的BMC板卡以现场可编程门阵列(Field Programmable Gate Array,FPGA)为控制核心,以国产的可信密码模块(Trusted Cryptography Module,TCM)作为信任根,实现了BMC的可信引导,对服务器平台的模块逐级进行度量,最终构建起完整的信任链[2]。
信任链模型如图1所示,信任的建立过程如下:
(1)BootROM:系统上电后执行的第一段代码,用于初始化相应的硬件模块。由于BootROM位于FPGA的片内ROM中,外界无法更改,因此默认BootROM是可信的[3]。BootROM运行之后把位于片外SD卡的Preloader镜像加载到FPGA片内RAM执行,控制权交给Preloader[4]。
(2)Preloader:基于SPL架构的引导程序,初始化SDRAM、PLL、IO接口等硬件,属于U-Boot的一部分,与U-Boot共享大部分的驱动代码,设计的TCM驱动可被Preloader与U-Boot共同使用。Preloader把U-Boot镜像由SD卡加载到SDRAM并对镜像进行度量,之后控制权交给U-Boot。
(3)U-Boot:初始化操作系统环境,在U-Boot中设计了TCM驱动与度量程序,对设备树镜像(Flattened Device Tree,FDT)、文件系统Ramdisk镜像以及Linux内核zImage镜像进行度量,之后把Linux内核镜像由SD卡加载到SDRAM,控制权交给Linux。
(4)Linux Kernel:在嵌入式Linux中实现了内核层的TCM驱动以及度量程序,度量系统BIOS的启动代码Boot Block后,控制权交给BIOS。
(5)BIOS:对服务器主板的模块(如Option ROMs、MBR等)进行逐级度量,直到服务器操作系统启动,从而构建了完整的信任链。
在信任链建立过程中,度量值采用扩展操作的方式记录到TCM的平台配置寄存器(Platform Configuration Register,PCR)[5],具体是:PCR[ni+1]=SM3(PCR[ni]||被度量模块)(i=0,1,2,…)[6]。即调用TCM的SM3算法对某一模块进行杂凑运算,生成32 B的数据作为摘要值,存储于PCR;之后调用SM3算法对PCR与被度量模块拼接后的数据进行杂凑运算,生成新的32 B摘要值更新到PCR。若某一模块确认不可信,即不满足完整性要求,信任链中断,服务器不会启动。
2 系统架构设计
服务器主板的硬件架构如图2所示,虚线框内为BMC板卡,BMC通过LPC(Low Pin Count)总线挂接到南桥上,作为从设备接受南桥的调度;通过SPI总线与BIOS连接,读取BIOS的资产信息;通过IIC总线与复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)连接,向CPLD发送命令对主板的上电时序进行控制。BMC板卡以FPGA为控制核心,采用的是Cyclone V系列带有ARM Cortex-A9处理器的5CSXFC6D6F31芯片。Cyclone V系列的FPGA设计过程结合了ARM嵌入式开发与电子设计自动化EDA的开发方式,十分灵活。
FPGA的外设包括SDRAM、QSPI Flash、SD卡、RTC等。其中SD卡用于存储U-Boot、Linux、文件系统的镜像,SDRAM作为BMC的内存,ARM将镜像搬移到执行速度快的SDRAM中执行。QSPI Flash是非易失性存储器,在开发阶段为了调试的方便,将镜像文件暂时存储在SD卡中,便于利用读卡器对编译出的不同镜像反复写入SD卡,在产品化阶段出于安全性考虑,将最终的镜像文件固化于QSPI Flash,使镜像不易被恶意篡改。实时时钟RTC用于记录度量时间。
采用国产TCM作为服务器的物理信任根,TCM包括对称算法、非对称算法、杂凑算法等密码功能单元,存储度量值的PCR寄存器,非易失性存储空间NVRAM等。为便于进行设计,采用了SPI总线接口的TCM模块与FPGA进行通信,在FPGA中设计了状态机对TCM进行控制,BMC通过调用TCM的API接口实现对服务器启动过程中模块的度量。
3 关键模块设计
3.1 TCM控制器
位于BMC的TCM控制器采用状态机模型,通过SPI接口与TCM进行交互,实现BMC对TCM的读写操作。图3是TCM控制器与TCM模块的接口图,TCM控制器采用了Verilog语言设计,通过AMBA总线连接到ARM处理器。
在实际工作过程中,ARM通过发送命令字和数据包操作TCM,例如初始化操作、加解密操作等[7],TCM根据命令进行操作,运算完成后的数据再由ARM读取。
该TCM控制器包括3个寄存器和1个RAM区,具体功能如下:
(1)命令寄存器:存放操作TCM的不同命令字,例如TCM初始化、自检、读写PCR寄存器、加解密等命令字。
(2)长度寄存器:存放参与运算的数据长度,单位为字节。
(3)控制寄存器:包括START位和FINISH_FLAG位,START位置1表示启动TCM控制器开始工作,清0表示停止TCM控制器工作;FINISH_FLAG置1表示下达的命令操作完成,清0表示操作未完成。
(4)RAM区:长度为1 KB,作为数据的缓存。
图4是TCM控制器工作的状态机转移图,包括空闲状态IDLE、开始状态BEGIN、写命令字状态WR_CMD、写长度状态WR_LEN、写数据状态WR_DATA、等待状态WAIT、读数据状态RD_DATA和完成状态FINISH。状态机的具体工作过程如下:
(1)系统上电复位后TCM控制器进入IDLE状态,等待ARM处理器下达指令。当ARM设置控制寄存器的START位为1后,启动状态机,进入BEGIN状态;
(2)在BEGIN状态,TCM控制器使SCLK、SDO与SDI信号同步,之后进入WR_CMD状态;
(3)在WR_CMD状态,TCM控制器向命令寄存器写入操作TCM的命令字,之后进入WR_LEN状态;
(4)在WR_LEN状态,TCM控制器向长度寄存器写入参与命令运算的数据长度,单位为字节,之后进入WR_DATA状态;
(5)在WR_DATA状态,TCM控制器根据数据长度把参与运算的具体数据依次写入RAM区,之后进入WAIT状态;
(6)在WAIT状态,TCM控制器根据设置的延时参数,等待TCM运算完成,之后进入RD_DATA状态;
(7)在RD_DATA状态,TCM控制器读取TCM运算完成的数据,把数据写回RAM区,之后进入FINISH状态;
(8)在FINISH状态,TCM控制器清除控制寄存器的START位为0,并设置完成标志位FINISH_FLAG为1,之后由ARM处理器接管控制权,ARM处理器可以再次启动状态机,向TCM发送其他的命令字及数据,过程同步骤(3)~(8)。
3.2 U-Boot度量模块
在BMC引导加载Linux过程中需要对内核zImage镜像、文件系统Ramdisk镜像和设备树FDT镜像进行度量,以此作为BMC固件完整性判断的依据,SD卡存储的镜像文件结构如图5所示,设计的U-Boot可信启动控制过程具体如下:
(1)BMC板卡上电,U-Boot进行初始化后开始引导过程,把位于SD卡中的zImage镜像加载到U-Boot指定的内存地址。
(2)设置标志位first_boot_flag作为BMC第一次启动的标识,当BMC第一次启动,即first_boot_flag为1时需要进行基准值的收集,调用TCM的SM3算法对zImage镜像的内核头信息和镜像长度进行杂凑运算,把生成的摘要值写入TCM的PCR寄存器。
(3)对Ramdisk镜像进行度量,把镜像从SD卡搬移到内存,调用SM3算法对Ramdisk镜像的头信息和镜像长度进行杂凑运算,把生成的摘要值扩展存储到PCR。
(4)对设备树FDT镜像进行度量,把镜像从SD卡搬移到内存,调用SM3算法对FDT镜像的头信息和镜像大小进行杂凑运算,把生成的摘要值扩展存储到PCR,此时PCR存储的就是基准值,之后U-Boot读取RTC时钟并记录日志。
(5)当BMC不是第一次启动,即first_boot_flag标识为0时,在U-Boot启动时需要对zImage、Ramdisk和FDT镜像进行度量,以此判断镜像的完整性。具体获取度量值的过程与步骤(2)~(4)获取基准值的过程一致。
(6)U-Boot将度量值与PCR存储的基准值进行比对,当比对一致时,说明BMC固件是完整和可信的,设置可信标志位trust_flag为1,读取RTC时间并记录日志,之后进行内核的解压和系统的加载。当度量值与基准值比对不一致时,说明镜像的完整性受到了破坏,此时设置标志位trust_flag为0,提示不可信的信息并记录日志,信任链构建过程被终止,需要由BMC管理员进行操作。
(7)当需要更新基准值时,重新对zImage、Ramdisk与FDT镜像进行度量,度量摘要更新至PCR,覆盖之前的基准值。
4 安全性分析
在安全性方面,通过自主研发的BMC板卡代替了国外的BMC产品,杜绝了使用国外芯片存在的安全隐患。基于BMC板卡,开发了FPGA控制TCM的逻辑、U-Boot与Linux的可信功能软件,实现了对BMC的可信引导和BIOS Boot Block的主动度量,同时通过TCM的密码服务为上层应用及访问者提供了验证平台可信的方法[8]。另外基于BMC Web管理界面实现了可信功能的呈现,通过BMC控制CPLD的方式实现了对主板上电时序的控制。利用以上安全措施,为系统平台构建了安全可信的操作环境。
服务器的可信启动过程为:
(1)接通服务器电源,BMC与TCM先上电启动。
(2)BMC向CPLD发送命令,由CPLD控制主板电源电压,不给CPU上电。
(3)进行BMC固件的可信引导,当判定BMC可信后进行BIOS的主动度量;否则,进入BMC Web管理界面进行异常处理,此时CPU不会上电。
(4)进行BIOS的主动度量,当判定BIOS Boot Block可信后,BMC通过CPLD控制CPU上电,之后由BIOS接管控制权,进行主板模块的度量;否则,进入BMC Web进行异常处理,此时CPU不会上电。
表1是测试数据,测试了BMC与BIOS的基准值、度量值以及固件经篡改后的异常值。当度量值与基准值一致时,BMC Web管理界面中的可信状态灯显示绿色,否则可信状态灯显示红色。在Web界面可以进行可信功能开启、基准值更新、特权启动、查看日志等操作。
5 结论
本文研究了可信计算技术在BMC中的应用,基于国产BMC板卡和TCM设计实现了BMC固件的可信引导和BIOS的主动度量,实现了服务器的可信启动控制。研究成果已应用于北京科委项目,有广阔的应用前景。
参考文献
[1] Intel Inc.Intelligent platform management interface specification V2.0[Z].2013-10-01.
[2] 周骅,刘桥.动态可信度量分析的硬件安全机制研究[J].电子技术应用,2015,41(1):115-121.
[3] 赵波,费永康,向騻,等.嵌入式系统的安全启动机制研究与实现[J].计算机工程与应用,2014,50(10):72-77.
[4] Foswiki.Booting from FPGA[EB/OL].[2017-10-18].https://rocketboards.org/foswiki/Documentation/BootFromFPGA140.
[5] Trusted Computing Group.Trusted platform module library part1:architecture[EB/OL].(2014-3-13)[2017-10-18].http://www.trustedcomputinggroup.org/tpm-main-specification/.
[6] 冯登国.可信计算—理论与实践[M].北京:清华大学出版社,2013.
[7] 国民技术有限公司.Z32H320TC trusted cryptography module datasheet[Z].2014.
[8] 张伶俐,张功萱,王天舒,等.嵌入式系统可信虚拟化技术的研究与应用[J].计算机工程与科学,2016,38(8):1654-1660.
作者信息:
苏振宇
(浪潮集团高效能服务器和存储技术国家重点实验室,山东 济南250101)