文獻(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.
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ò)程如下:
(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ā)方式,,十分靈活。
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處理器。
在實(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)。
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ò)程具體如下:
(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)、查看日志等操作,。
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)