《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 可信計(jì)算在服務(wù)器基板管理控制器中的應(yīng)用
可信計(jì)算在服務(wù)器基板管理控制器中的應(yīng)用
2018年電子技術(shù)應(yīng)用第5期
蘇振宇
浪潮集團(tuán)高效能服務(wù)器和存儲(chǔ)技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山東 濟(jì)南250101
摘要: 研究了可信計(jì)算技術(shù)在服務(wù)器基板管理控制器(BMC)中的應(yīng)用,,利用BMC和國(guó)產(chǎn)可信密碼模塊(TCM)作為信任根,,在服務(wù)器上電啟動(dòng)過(guò)程中實(shí)現(xiàn)了對(duì)自主研發(fā)的BMC板卡固件的可信引導(dǎo),對(duì)BIOS的主動(dòng)度量,,構(gòu)建了完整的信任鏈,。基于BMC板卡開(kāi)發(fā)了FPGA控制TCM的邏輯,,并開(kāi)發(fā)了U-Boot可信功能軟件,。結(jié)果表明,在信任鏈構(gòu)建過(guò)程中可以有效防止固件被惡意篡改,,從而為系統(tǒng)平臺(tái)構(gòu)建了安全可信的環(huán)境,。
中圖分類(lèi)號(hào): TP309
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.174325
中文引用格式: 蘇振宇. 可信計(jì)算在服務(wù)器基板管理控制器中的應(yīng)用[J].電子技術(shù)應(yīng)用,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)是服務(wù)器的重要單元,其利用虛擬的鍵盤(pán),、界面,、鼠標(biāo)、電源等為服務(wù)器提供遠(yuǎn)程管理功能[1],,用戶(hù)登錄BMC的Web管理界面監(jiān)視服務(wù)器的物理特征,如主板各部件的溫度,、電壓,、電源供應(yīng)以及機(jī)箱入侵等。BMC本質(zhì)上是一個(gè)嵌入式系統(tǒng),,在使用過(guò)程中會(huì)面臨程序完整性被破壞,、操作系統(tǒng)被攻擊、Web應(yīng)用被植入惡意代碼等安全風(fēng)險(xiǎn),。此外,,目前國(guó)內(nèi)的服務(wù)器普遍采用國(guó)外的BMC芯片,如ASPEED系列的AST2400,、AST2500型號(hào),,安全性未知,核心技術(shù)受制于人,。因此,,本文基于自主研發(fā)的BMC模塊,研究了BMC的可信啟動(dòng)技術(shù)并且成功地進(jìn)行了應(yīng)用,。

1 信任鏈構(gòu)建

    自主研發(fā)的BMC板卡以現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,,F(xiàn)PGA)為控制核心,以國(guó)產(chǎn)的可信密碼模塊(Trusted Cryptography Module,,TCM)作為信任根,,實(shí)現(xiàn)了BMC的可信引導(dǎo),對(duì)服務(wù)器平臺(tái)的模塊逐級(jí)進(jìn)行度量,,最終構(gòu)建起完整的信任鏈[2],。

    信任鏈模型如圖1所示,信任的建立過(guò)程如下:

qrs2-t1.gif

    (1)BootROM:系統(tǒng)上電后執(zhí)行的第一段代碼,,用于初始化相應(yīng)的硬件模塊,。由于BootROM位于FPGA的片內(nèi)ROM中,外界無(wú)法更改,,因此默認(rèn)BootROM是可信的[3],。BootROM運(yùn)行之后把位于片外SD卡的Preloader鏡像加載到FPGA片內(nèi)RAM執(zhí)行,控制權(quán)交給Preloader[4],。

    (2)Preloader:基于SPL架構(gòu)的引導(dǎo)程序,,初始化SDRAM,、PLL、IO接口等硬件,,屬于U-Boot的一部分,,與U-Boot共享大部分的驅(qū)動(dòng)代碼,設(shè)計(jì)的TCM驅(qū)動(dòng)可被Preloader與U-Boot共同使用,。Preloader把U-Boot鏡像由SD卡加載到SDRAM并對(duì)鏡像進(jìn)行度量,,之后控制權(quán)交給U-Boot。

    (3)U-Boot:初始化操作系統(tǒng)環(huán)境,,在U-Boot中設(shè)計(jì)了TCM驅(qū)動(dòng)與度量程序,,對(duì)設(shè)備樹(shù)鏡像(Flattened Device Tree,F(xiàn)DT),、文件系統(tǒng)Ramdisk鏡像以及Linux內(nèi)核zImage鏡像進(jìn)行度量,,之后把Linux內(nèi)核鏡像由SD卡加載到SDRAM,控制權(quán)交給Linux,。

    (4)Linux Kernel:在嵌入式Linux中實(shí)現(xiàn)了內(nèi)核層的TCM驅(qū)動(dòng)以及度量程序,,度量系統(tǒng)BIOS的啟動(dòng)代碼Boot Block后,控制權(quán)交給BIOS,。

    (5)BIOS:對(duì)服務(wù)器主板的模塊(如Option ROMs,、MBR等)進(jìn)行逐級(jí)度量,直到服務(wù)器操作系統(tǒng)啟動(dòng),,從而構(gòu)建了完整的信任鏈,。

    在信任鏈建立過(guò)程中,度量值采用擴(kuò)展操作的方式記錄到TCM的平臺(tái)配置寄存器(Platform Configuration Register,,PCR)[5],,具體是:PCR[ni+1]=SM3(PCR[ni]||被度量模塊)(i=0,1,,2,,…)[6]。即調(diào)用TCM的SM3算法對(duì)某一模塊進(jìn)行雜湊運(yùn)算,,生成32 B的數(shù)據(jù)作為摘要值,,存儲(chǔ)于PCR;之后調(diào)用SM3算法對(duì)PCR與被度量模塊拼接后的數(shù)據(jù)進(jìn)行雜湊運(yùn)算,,生成新的32 B摘要值更新到PCR,。若某一模塊確認(rèn)不可信,即不滿(mǎn)足完整性要求,,信任鏈中斷,,服務(wù)器不會(huì)啟動(dòng)。

2 系統(tǒng)架構(gòu)設(shè)計(jì)

    服務(wù)器主板的硬件架構(gòu)如圖2所示,,虛線(xiàn)框內(nèi)為BMC板卡,,BMC通過(guò)LPC(Low Pin Count)總線(xiàn)掛接到南橋上,,作為從設(shè)備接受南橋的調(diào)度;通過(guò)SPI總線(xiàn)與BIOS連接,,讀取BIOS的資產(chǎn)信息,;通過(guò)IIC總線(xiàn)與復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)連接,,向CPLD發(fā)送命令對(duì)主板的上電時(shí)序進(jìn)行控制,。BMC板卡以FPGA為控制核心,采用的是Cyclone V系列帶有ARM Cortex-A9處理器的5CSXFC6D6F31芯片,。Cyclone V系列的FPGA設(shè)計(jì)過(guò)程結(jié)合了ARM嵌入式開(kāi)發(fā)與電子設(shè)計(jì)自動(dòng)化EDA的開(kāi)發(fā)方式,,十分靈活。

qrs2-t2.gif

    FPGA的外設(shè)包括SDRAM,、QSPI Flash、SD卡,、RTC等,。其中SD卡用于存儲(chǔ)U-Boot、Linux,、文件系統(tǒng)的鏡像,,SDRAM作為BMC的內(nèi)存,ARM將鏡像搬移到執(zhí)行速度快的SDRAM中執(zhí)行,。QSPI Flash是非易失性存儲(chǔ)器,,在開(kāi)發(fā)階段為了調(diào)試的方便,將鏡像文件暫時(shí)存儲(chǔ)在SD卡中,,便于利用讀卡器對(duì)編譯出的不同鏡像反復(fù)寫(xiě)入SD卡,,在產(chǎn)品化階段出于安全性考慮,將最終的鏡像文件固化于QSPI Flash,,使鏡像不易被惡意篡改,。實(shí)時(shí)時(shí)鐘RTC用于記錄度量時(shí)間。

    采用國(guó)產(chǎn)TCM作為服務(wù)器的物理信任根,,TCM包括對(duì)稱(chēng)算法,、非對(duì)稱(chēng)算法、雜湊算法等密碼功能單元,,存儲(chǔ)度量值的PCR寄存器,,非易失性存儲(chǔ)空間NVRAM等。為便于進(jìn)行設(shè)計(jì),,采用了SPI總線(xiàn)接口的TCM模塊與FPGA進(jìn)行通信,,在FPGA中設(shè)計(jì)了狀態(tài)機(jī)對(duì)TCM進(jìn)行控制,BMC通過(guò)調(diào)用TCM的API接口實(shí)現(xiàn)對(duì)服務(wù)器啟動(dòng)過(guò)程中模塊的度量,。

3 關(guān)鍵模塊設(shè)計(jì)

3.1 TCM控制器

    位于BMC的TCM控制器采用狀態(tài)機(jī)模型,,通過(guò)SPI接口與TCM進(jìn)行交互,,實(shí)現(xiàn)BMC對(duì)TCM的讀寫(xiě)操作。圖3是TCM控制器與TCM模塊的接口圖,,TCM控制器采用了Verilog語(yǔ)言設(shè)計(jì),,通過(guò)AMBA總線(xiàn)連接到ARM處理器。

qrs2-t3.gif

    在實(shí)際工作過(guò)程中,,ARM通過(guò)發(fā)送命令字和數(shù)據(jù)包操作TCM,,例如初始化操作、加解密操作等[7],,TCM根據(jù)命令進(jìn)行操作,,運(yùn)算完成后的數(shù)據(jù)再由ARM讀取。

    該TCM控制器包括3個(gè)寄存器和1個(gè)RAM區(qū),,具體功能如下:

    (1)命令寄存器:存放操作TCM的不同命令字,,例如TCM初始化、自檢,、讀寫(xiě)PCR寄存器,、加解密等命令字。

    (2)長(zhǎng)度寄存器:存放參與運(yùn)算的數(shù)據(jù)長(zhǎng)度,,單位為字節(jié),。

    (3)控制寄存器:包括START位和FINISH_FLAG位,START位置1表示啟動(dòng)TCM控制器開(kāi)始工作,,清0表示停止TCM控制器工作,;FINISH_FLAG置1表示下達(dá)的命令操作完成,清0表示操作未完成,。

    (4)RAM區(qū):長(zhǎng)度為1 KB,,作為數(shù)據(jù)的緩存。

    圖4是TCM控制器工作的狀態(tài)機(jī)轉(zhuǎn)移圖,,包括空閑狀態(tài)IDLE,、開(kāi)始狀態(tài)BEGIN、寫(xiě)命令字狀態(tài)WR_CMD,、寫(xiě)長(zhǎng)度狀態(tài)WR_LEN,、寫(xiě)數(shù)據(jù)狀態(tài)WR_DATA、等待狀態(tài)WAIT,、讀數(shù)據(jù)狀態(tài)RD_DATA和完成狀態(tài)FINISH,。狀態(tài)機(jī)的具體工作過(guò)程如下:

    (1)系統(tǒng)上電復(fù)位后TCM控制器進(jìn)入IDLE狀態(tài),等待ARM處理器下達(dá)指令,。當(dāng)ARM設(shè)置控制寄存器的START位為1后,,啟動(dòng)狀態(tài)機(jī),進(jìn)入BEGIN狀態(tài),;

    (2)在BEGIN狀態(tài),,TCM控制器使SCLK,、SDO與SDI信號(hào)同步,之后進(jìn)入WR_CMD狀態(tài),;

    (3)在WR_CMD狀態(tài),,TCM控制器向命令寄存器寫(xiě)入操作TCM的命令字,之后進(jìn)入WR_LEN狀態(tài),;

    (4)在WR_LEN狀態(tài),,TCM控制器向長(zhǎng)度寄存器寫(xiě)入?yún)⑴c命令運(yùn)算的數(shù)據(jù)長(zhǎng)度,單位為字節(jié),,之后進(jìn)入WR_DATA狀態(tài),;

    (5)在WR_DATA狀態(tài),TCM控制器根據(jù)數(shù)據(jù)長(zhǎng)度把參與運(yùn)算的具體數(shù)據(jù)依次寫(xiě)入RAM區(qū),,之后進(jìn)入WAIT狀態(tài),;

    (6)在WAIT狀態(tài),TCM控制器根據(jù)設(shè)置的延時(shí)參數(shù),,等待TCM運(yùn)算完成,,之后進(jìn)入RD_DATA狀態(tài);

    (7)在RD_DATA狀態(tài),,TCM控制器讀取TCM運(yùn)算完成的數(shù)據(jù),把數(shù)據(jù)寫(xiě)回RAM區(qū),,之后進(jìn)入FINISH狀態(tài),;

    (8)在FINISH狀態(tài),TCM控制器清除控制寄存器的START位為0,,并設(shè)置完成標(biāo)志位FINISH_FLAG為1,,之后由ARM處理器接管控制權(quán),ARM處理器可以再次啟動(dòng)狀態(tài)機(jī),,向TCM發(fā)送其他的命令字及數(shù)據(jù),,過(guò)程同步驟(3)~(8)。

qrs2-t4.gif

3.2 U-Boot度量模塊

    在BMC引導(dǎo)加載Linux過(guò)程中需要對(duì)內(nèi)核zImage鏡像,、文件系統(tǒng)Ramdisk鏡像和設(shè)備樹(shù)FDT鏡像進(jìn)行度量,,以此作為BMC固件完整性判斷的依據(jù),SD卡存儲(chǔ)的鏡像文件結(jié)構(gòu)如圖5所示,,設(shè)計(jì)的U-Boot可信啟動(dòng)控制過(guò)程具體如下:

qrs2-t5.gif

    (1)BMC板卡上電,,U-Boot進(jìn)行初始化后開(kāi)始引導(dǎo)過(guò)程,把位于SD卡中的zImage鏡像加載到U-Boot指定的內(nèi)存地址,。

    (2)設(shè)置標(biāo)志位first_boot_flag作為BMC第一次啟動(dòng)的標(biāo)識(shí),,當(dāng)BMC第一次啟動(dòng),即first_boot_flag為1時(shí)需要進(jìn)行基準(zhǔn)值的收集,,調(diào)用TCM的SM3算法對(duì)zImage鏡像的內(nèi)核頭信息和鏡像長(zhǎng)度進(jìn)行雜湊運(yùn)算,,把生成的摘要值寫(xiě)入TCM的PCR寄存器,。

    (3)對(duì)Ramdisk鏡像進(jìn)行度量,把鏡像從SD卡搬移到內(nèi)存,,調(diào)用SM3算法對(duì)Ramdisk鏡像的頭信息和鏡像長(zhǎng)度進(jìn)行雜湊運(yùn)算,,把生成的摘要值擴(kuò)展存儲(chǔ)到PCR。

    (4)對(duì)設(shè)備樹(shù)FDT鏡像進(jìn)行度量,,把鏡像從SD卡搬移到內(nèi)存,,調(diào)用SM3算法對(duì)FDT鏡像的頭信息和鏡像大小進(jìn)行雜湊運(yùn)算,把生成的摘要值擴(kuò)展存儲(chǔ)到PCR,,此時(shí)PCR存儲(chǔ)的就是基準(zhǔn)值,,之后U-Boot讀取RTC時(shí)鐘并記錄日志。

    (5)當(dāng)BMC不是第一次啟動(dòng),,即first_boot_flag標(biāo)識(shí)為0時(shí),,在U-Boot啟動(dòng)時(shí)需要對(duì)zImage、Ramdisk和FDT鏡像進(jìn)行度量,,以此判斷鏡像的完整性,。具體獲取度量值的過(guò)程與步驟(2)~(4)獲取基準(zhǔn)值的過(guò)程一致。

    (6)U-Boot將度量值與PCR存儲(chǔ)的基準(zhǔn)值進(jìn)行比對(duì),,當(dāng)比對(duì)一致時(shí),,說(shuō)明BMC固件是完整和可信的,設(shè)置可信標(biāo)志位trust_flag為1,,讀取RTC時(shí)間并記錄日志,,之后進(jìn)行內(nèi)核的解壓和系統(tǒng)的加載。當(dāng)度量值與基準(zhǔn)值比對(duì)不一致時(shí),,說(shuō)明鏡像的完整性受到了破壞,,此時(shí)設(shè)置標(biāo)志位trust_flag為0,提示不可信的信息并記錄日志,,信任鏈構(gòu)建過(guò)程被終止,,需要由BMC管理員進(jìn)行操作。

    (7)當(dāng)需要更新基準(zhǔn)值時(shí),,重新對(duì)zImage,、Ramdisk與FDT鏡像進(jìn)行度量,度量摘要更新至PCR,,覆蓋之前的基準(zhǔn)值,。

4 安全性分析

    在安全性方面,通過(guò)自主研發(fā)的BMC板卡代替了國(guó)外的BMC產(chǎn)品,,杜絕了使用國(guó)外芯片存在的安全隱患,。基于BMC板卡,開(kāi)發(fā)了FPGA控制TCM的邏輯,、U-Boot與Linux的可信功能軟件,,實(shí)現(xiàn)了對(duì)BMC的可信引導(dǎo)和BIOS Boot Block的主動(dòng)度量,同時(shí)通過(guò)TCM的密碼服務(wù)為上層應(yīng)用及訪問(wèn)者提供了驗(yàn)證平臺(tái)可信的方法[8],。另外基于BMC Web管理界面實(shí)現(xiàn)了可信功能的呈現(xiàn),,通過(guò)BMC控制CPLD的方式實(shí)現(xiàn)了對(duì)主板上電時(shí)序的控制。利用以上安全措施,,為系統(tǒng)平臺(tái)構(gòu)建了安全可信的操作環(huán)境,。

    服務(wù)器的可信啟動(dòng)過(guò)程為:

    (1)接通服務(wù)器電源,BMC與TCM先上電啟動(dòng),。

    (2)BMC向CPLD發(fā)送命令,,由CPLD控制主板電源電壓,不給CPU上電,。

    (3)進(jìn)行BMC固件的可信引導(dǎo),,當(dāng)判定BMC可信后進(jìn)行BIOS的主動(dòng)度量;否則,,進(jìn)入BMC Web管理界面進(jìn)行異常處理,,此時(shí)CPU不會(huì)上電。

    (4)進(jìn)行BIOS的主動(dòng)度量,,當(dāng)判定BIOS Boot Block可信后,,BMC通過(guò)CPLD控制CPU上電,之后由BIOS接管控制權(quán),,進(jìn)行主板模塊的度量,;否則,進(jìn)入BMC Web進(jìn)行異常處理,,此時(shí)CPU不會(huì)上電。

    表1是測(cè)試數(shù)據(jù),,測(cè)試了BMC與BIOS的基準(zhǔn)值,、度量值以及固件經(jīng)篡改后的異常值。當(dāng)度量值與基準(zhǔn)值一致時(shí),,BMC Web管理界面中的可信狀態(tài)燈顯示綠色,,否則可信狀態(tài)燈顯示紅色。在Web界面可以進(jìn)行可信功能開(kāi)啟,、基準(zhǔn)值更新,、特權(quán)啟動(dòng)、查看日志等操作,。

qrs2-b1.gif

5 結(jié)論

    本文研究了可信計(jì)算技術(shù)在BMC中的應(yīng)用,,基于國(guó)產(chǎn)BMC板卡和TCM設(shè)計(jì)實(shí)現(xiàn)了BMC固件的可信引導(dǎo)和BIOS的主動(dòng)度量,實(shí)現(xiàn)了服務(wù)器的可信啟動(dòng)控制,。研究成果已應(yīng)用于北京科委項(xiàng)目,,有廣闊的應(yīng)用前景,。

參考文獻(xiàn)

[1] Intel Inc.Intelligent platform management interface specification V2.0[Z].2013-10-01.

[2] 周驊,劉橋.動(dòng)態(tài)可信度量分析的硬件安全機(jī)制研究[J].電子技術(shù)應(yīng)用,,2015,,41(1):115-121.

[3] 趙波,費(fèi)永康,,向騻,,等.嵌入式系統(tǒng)的安全啟動(dòng)機(jī)制研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,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] 馮登國(guó).可信計(jì)算—理論與實(shí)踐[M].北京:清華大學(xué)出版社,,2013.

[7] 國(guó)民技術(shù)有限公司.Z32H320TC trusted cryptography module datasheet[Z].2014.

[8] 張伶俐,張功萱,,王天舒,,等.嵌入式系統(tǒng)可信虛擬化技術(shù)的研究與應(yīng)用[J].計(jì)算機(jī)工程與科學(xué),2016,,38(8):1654-1660.



作者信息:

蘇振宇

(浪潮集團(tuán)高效能服務(wù)器和存儲(chǔ)技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,,山東 濟(jì)南250101)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。