文獻(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ù)器的重要單元,其利用虛擬的鍵盤、界面、鼠標(biāo)、電源等為服務(wù)器提供遠(yuǎn)程管理功能[1],用戶登錄BMC的Web管理界面監(jiān)視服務(wù)器的物理特征,如主板各部件的溫度、電壓、電源供應(yīng)以及機(jī)箱入侵等。BMC本質(zhì)上是一個(gè)嵌入式系統(tǒng),在使用過程中會(huì)面臨程序完整性被破壞、操作系統(tǒng)被攻擊、Web應(yīng)用被植入惡意代碼等安全風(fēng)險(xiǎn)。此外,目前國內(nèi)的服務(wù)器普遍采用國外的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)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)為控制核心,以國產(chǎn)的可信密碼模塊(Trusted Cryptography Module,TCM)作為信任根,實(shí)現(xiàn)了BMC的可信引導(dǎo),對(duì)服務(wù)器平臺(tái)的模塊逐級(jí)進(jìn)行度量,最終構(gòu)建起完整的信任鏈[2]。
信任鏈模型如圖1所示,信任的建立過程如下:
(1)BootROM:系統(tǒng)上電后執(zhí)行的第一段代碼,用于初始化相應(yīng)的硬件模塊。由于BootROM位于FPGA的片內(nèi)ROM中,外界無法更改,因此默認(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è)備樹鏡像(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)建了完整的信任鏈。
在信任鏈建立過程中,度量值采用擴(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)不可信,即不滿足完整性要求,信任鏈中斷,服務(wù)器不會(huì)啟動(dòng)。
2 系統(tǒng)架構(gòu)設(shè)計(jì)
服務(wù)器主板的硬件架構(gòu)如圖2所示,虛線框內(nèi)為BMC板卡,BMC通過LPC(Low Pin Count)總線掛接到南橋上,作為從設(shè)備接受南橋的調(diào)度;通過SPI總線與BIOS連接,讀取BIOS的資產(chǎn)信息;通過IIC總線與復(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ì)過程結(jié)合了ARM嵌入式開發(fā)與電子設(shè)計(jì)自動(dòng)化EDA的開發(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ǔ)器,在開發(fā)階段為了調(diào)試的方便,將鏡像文件暫時(shí)存儲(chǔ)在SD卡中,便于利用讀卡器對(duì)編譯出的不同鏡像反復(fù)寫入SD卡,在產(chǎn)品化階段出于安全性考慮,將最終的鏡像文件固化于QSPI Flash,使鏡像不易被惡意篡改。實(shí)時(shí)時(shí)鐘RTC用于記錄度量時(shí)間。
采用國產(chǎn)TCM作為服務(wù)器的物理信任根,TCM包括對(duì)稱算法、非對(duì)稱算法、雜湊算法等密碼功能單元,存儲(chǔ)度量值的PCR寄存器,非易失性存儲(chǔ)空間NVRAM等。為便于進(jìn)行設(shè)計(jì),采用了SPI總線接口的TCM模塊與FPGA進(jìn)行通信,在FPGA中設(shè)計(jì)了狀態(tài)機(jī)對(duì)TCM進(jìn)行控制,BMC通過調(diào)用TCM的API接口實(shí)現(xiàn)對(duì)服務(wù)器啟動(dòng)過程中模塊的度量。
3 關(guān)鍵模塊設(shè)計(jì)
3.1 TCM控制器
位于BMC的TCM控制器采用狀態(tài)機(jī)模型,通過SPI接口與TCM進(jìn)行交互,實(shí)現(xiàn)BMC對(duì)TCM的讀寫操作。圖3是TCM控制器與TCM模塊的接口圖,TCM控制器采用了Verilog語言設(shè)計(jì),通過AMBA總線連接到ARM處理器。
在實(shí)際工作過程中,ARM通過發(fā)送命令字和數(shù)據(jù)包操作TCM,例如初始化操作、加解密操作等[7],TCM根據(jù)命令進(jìn)行操作,運(yùn)算完成后的數(shù)據(jù)再由ARM讀取。
該TCM控制器包括3個(gè)寄存器和1個(gè)RAM區(qū),具體功能如下:
(1)命令寄存器:存放操作TCM的不同命令字,例如TCM初始化、自檢、讀寫PCR寄存器、加解密等命令字。
(2)長度寄存器:存放參與運(yùn)算的數(shù)據(jù)長度,單位為字節(jié)。
(3)控制寄存器:包括START位和FINISH_FLAG位,START位置1表示啟動(dòng)TCM控制器開始工作,清0表示停止TCM控制器工作;FINISH_FLAG置1表示下達(dá)的命令操作完成,清0表示操作未完成。
(4)RAM區(qū):長度為1 KB,作為數(shù)據(jù)的緩存。
圖4是TCM控制器工作的狀態(tài)機(jī)轉(zhuǎn)移圖,包括空閑狀態(tài)IDLE、開始狀態(tài)BEGIN、寫命令字狀態(tài)WR_CMD、寫長度狀態(tài)WR_LEN、寫數(shù)據(jù)狀態(tài)WR_DATA、等待狀態(tài)WAIT、讀數(shù)據(jù)狀態(tài)RD_DATA和完成狀態(tài)FINISH。狀態(tài)機(jī)的具體工作過程如下:
(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控制器向命令寄存器寫入操作TCM的命令字,之后進(jìn)入WR_LEN狀態(tài);
(4)在WR_LEN狀態(tài),TCM控制器向長度寄存器寫入?yún)⑴c命令運(yùn)算的數(shù)據(jù)長度,單位為字節(jié),之后進(jìn)入WR_DATA狀態(tài);
(5)在WR_DATA狀態(tài),TCM控制器根據(jù)數(shù)據(jù)長度把參與運(yùn)算的具體數(shù)據(jù)依次寫入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ù)寫回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ù),過程同步驟(3)~(8)。
3.2 U-Boot度量模塊
在BMC引導(dǎo)加載Linux過程中需要對(duì)內(nèi)核zImage鏡像、文件系統(tǒng)Ramdisk鏡像和設(shè)備樹FDT鏡像進(jìn)行度量,以此作為BMC固件完整性判斷的依據(jù),SD卡存儲(chǔ)的鏡像文件結(jié)構(gòu)如圖5所示,設(shè)計(jì)的U-Boot可信啟動(dòng)控制過程具體如下:
(1)BMC板卡上電,U-Boot進(jìn)行初始化后開始引導(dǎo)過程,把位于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)核頭信息和鏡像長度進(jìn)行雜湊運(yùn)算,把生成的摘要值寫入TCM的PCR寄存器。
(3)對(duì)Ramdisk鏡像進(jìn)行度量,把鏡像從SD卡搬移到內(nèi)存,調(diào)用SM3算法對(duì)Ramdisk鏡像的頭信息和鏡像長度進(jìn)行雜湊運(yùn)算,把生成的摘要值擴(kuò)展存儲(chǔ)到PCR。
(4)對(duì)設(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)行度量,以此判斷鏡像的完整性。具體獲取度量值的過程與步驟(2)~(4)獲取基準(zhǔn)值的過程一致。
(6)U-Boot將度量值與PCR存儲(chǔ)的基準(zhǔn)值進(jìn)行比對(duì),當(dāng)比對(duì)一致時(shí),說明BMC固件是完整和可信的,設(shè)置可信標(biāo)志位trust_flag為1,讀取RTC時(shí)間并記錄日志,之后進(jìn)行內(nèi)核的解壓和系統(tǒng)的加載。當(dāng)度量值與基準(zhǔn)值比對(duì)不一致時(shí),說明鏡像的完整性受到了破壞,此時(shí)設(shè)置標(biāo)志位trust_flag為0,提示不可信的信息并記錄日志,信任鏈構(gòu)建過程被終止,需要由BMC管理員進(jìn)行操作。
(7)當(dāng)需要更新基準(zhǔn)值時(shí),重新對(duì)zImage、Ramdisk與FDT鏡像進(jìn)行度量,度量摘要更新至PCR,覆蓋之前的基準(zhǔn)值。
4 安全性分析
在安全性方面,通過自主研發(fā)的BMC板卡代替了國外的BMC產(chǎn)品,杜絕了使用國外芯片存在的安全隱患?;贐MC板卡,開發(fā)了FPGA控制TCM的邏輯、U-Boot與Linux的可信功能軟件,實(shí)現(xiàn)了對(duì)BMC的可信引導(dǎo)和BIOS Boot Block的主動(dòng)度量,同時(shí)通過TCM的密碼服務(wù)為上層應(yīng)用及訪問者提供了驗(yàn)證平臺(tái)可信的方法[8]。另外基于BMC Web管理界面實(shí)現(xiàn)了可信功能的呈現(xiàn),通過BMC控制CPLD的方式實(shí)現(xiàn)了對(duì)主板上電時(shí)序的控制。利用以上安全措施,為系統(tǒng)平臺(tái)構(gòu)建了安全可信的操作環(huán)境。
服務(wù)器的可信啟動(dòng)過程為:
(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通過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)行可信功能開啟、基準(zhǔn)值更新、特權(quán)啟動(dòng)、查看日志等操作。
5 結(jié)論
本文研究了可信計(jì)算技術(shù)在BMC中的應(yīng)用,基于國產(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] 馮登國.可信計(jì)算—理論與實(shí)踐[M].北京:清華大學(xué)出版社,2013.
[7] 國民技術(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ù)國家重點(diǎn)實(shí)驗(yàn)室,山東 濟(jì)南250101)