《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 可信计算在服务器基板管理控制器中的应用
可信计算在服务器基板管理控制器中的应用
2018年电子技术应用第5期
苏振宇
浪潮集团高效能服务器和存储技术国家重点实验室,山东 济南250101
摘要: 研究了可信计算技术在服务器基板管理控制器(BMC)中的应用,利用BMC和国产可信密码模块(TCM)作为信任根,在服务器上电启动过程中实现了对自主研发的BMC板卡固件的可信引导,对BIOS的主动度量,构建了完整的信任链。基于BMC板卡开发了FPGA控制TCM的逻辑,并开发了U-Boot可信功能软件。结果表明,在信任链构建过程中可以有效防止固件被恶意篡改,从而为系统平台构建了安全可信的环境。
中图分类号: TP309
文献标识码: 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.
The application of trusted computing technology on baseboard management controller platform
Su Zhenyu
National Key Laboratory for High-efficient Server and Storage Technology,INSPUR Co.,Ltd.,Jinan 250101,China
Abstract: This paper researches the application of trusted computing technology on baseboard management controller(BMC) which is important firmware in server. As the trust root of system, BMC and trusted cryptography module(TCM) can measure the firmware of domestic BMC and basic input output system(BIOS) during the boot of server, and the complete trust chain is built finally. In order to communicate with TCM, the logic of the FPGA on the BMC board is designed. Besides, the trusted software is developed in U-Boot. The results show that when the trust chain is built, it can detect if the firmware has been maliciously tampered, so the security and trusted environment of the server is established.
Key words : trusted computing;baseboard management controller(BMC);trusted cryptography module(TCM);trust chain;U-Boot

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所示,信任的建立过程如下:

qrs2-t1.gif

    (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的开发方式,十分灵活。

qrs2-t2.gif

    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处理器。

qrs2-t3.gif

    在实际工作过程中,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)。

qrs2-t4.gif

3.2 U-Boot度量模块

    在BMC引导加载Linux过程中需要对内核zImage镜像、文件系统Ramdisk镜像和设备树FDT镜像进行度量,以此作为BMC固件完整性判断的依据,SD卡存储的镜像文件结构如图5所示,设计的U-Boot可信启动控制过程具体如下:

qrs2-t5.gif

    (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界面可以进行可信功能开启、基准值更新、特权启动、查看日志等操作。

qrs2-b1.gif

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)