文獻標識碼: 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管理界面監(jiān)視服務器的物理特征,如主板各部件的溫度、電壓、電源供應以及機箱入侵等。BMC本質上是一個嵌入式系統(tǒng),在使用過程中會面臨程序完整性被破壞、操作系統(tǒng)被攻擊、Web應用被植入惡意代碼等安全風險。此外,目前國內的服務器普遍采用國外的BMC芯片,如ASPEED系列的AST2400、AST2500型號,安全性未知,核心技術受制于人。因此,本文基于自主研發(fā)的BMC模塊,研究了BMC的可信啟動技術并且成功地進行了應用。
1 信任鏈構建
自主研發(fā)的BMC板卡以現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)為控制核心,以國產的可信密碼模塊(Trusted Cryptography Module,TCM)作為信任根,實現(xiàn)了BMC的可信引導,對服務器平臺的模塊逐級進行度量,最終構建起完整的信任鏈[2]。
信任鏈模型如圖1所示,信任的建立過程如下:
(1)BootROM:系統(tǒng)上電后執(zhí)行的第一段代碼,用于初始化相應的硬件模塊。由于BootROM位于FPGA的片內ROM中,外界無法更改,因此默認BootROM是可信的[3]。BootROM運行之后把位于片外SD卡的Preloader鏡像加載到FPGA片內RAM執(zhí)行,控制權交給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:初始化操作系統(tǒng)環(huán)境,在U-Boot中設計了TCM驅動與度量程序,對設備樹鏡像(Flattened Device Tree,F(xiàn)DT)、文件系統(tǒng)Ramdisk鏡像以及Linux內核zImage鏡像進行度量,之后把Linux內核鏡像由SD卡加載到SDRAM,控制權交給Linux。
(4)Linux Kernel:在嵌入式Linux中實現(xiàn)了內核層的TCM驅動以及度量程序,度量系統(tǒng)BIOS的啟動代碼Boot Block后,控制權交給BIOS。
(5)BIOS:對服務器主板的模塊(如Option ROMs、MBR等)進行逐級度量,直到服務器操作系統(tǒng)啟動,從而構建了完整的信任鏈。
在信任鏈建立過程中,度量值采用擴展操作的方式記錄到TCM的平臺配置寄存器(Platform Configuration Register,PCR)[5],具體是:PCR[ni+1]=SM3(PCR[ni]||被度量模塊)(i=0,1,2,…)[6]。即調用TCM的SM3算法對某一模塊進行雜湊運算,生成32 B的數(shù)據(jù)作為摘要值,存儲于PCR;之后調用SM3算法對PCR與被度量模塊拼接后的數(shù)據(jù)進行雜湊運算,生成新的32 B摘要值更新到PCR。若某一模塊確認不可信,即不滿足完整性要求,信任鏈中斷,服務器不會啟動。
2 系統(tǒng)架構設計
服務器主板的硬件架構如圖2所示,虛線框內為BMC板卡,BMC通過LPC(Low Pin Count)總線掛接到南橋上,作為從設備接受南橋的調度;通過SPI總線與BIOS連接,讀取BIOS的資產信息;通過IIC總線與復雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)連接,向CPLD發(fā)送命令對主板的上電時序進行控制。BMC板卡以FPGA為控制核心,采用的是Cyclone V系列帶有ARM Cortex-A9處理器的5CSXFC6D6F31芯片。Cyclone V系列的FPGA設計過程結合了ARM嵌入式開發(fā)與電子設計自動化EDA的開發(fā)方式,十分靈活。
FPGA的外設包括SDRAM、QSPI Flash、SD卡、RTC等。其中SD卡用于存儲U-Boot、Linux、文件系統(tǒng)的鏡像,SDRAM作為BMC的內存,ARM將鏡像搬移到執(zhí)行速度快的SDRAM中執(zhí)行。QSPI Flash是非易失性存儲器,在開發(fā)階段為了調試的方便,將鏡像文件暫時存儲在SD卡中,便于利用讀卡器對編譯出的不同鏡像反復寫入SD卡,在產品化階段出于安全性考慮,將最終的鏡像文件固化于QSPI Flash,使鏡像不易被惡意篡改。實時時鐘RTC用于記錄度量時間。
采用國產TCM作為服務器的物理信任根,TCM包括對稱算法、非對稱算法、雜湊算法等密碼功能單元,存儲度量值的PCR寄存器,非易失性存儲空間NVRAM等。為便于進行設計,采用了SPI總線接口的TCM模塊與FPGA進行通信,在FPGA中設計了狀態(tài)機對TCM進行控制,BMC通過調用TCM的API接口實現(xiàn)對服務器啟動過程中模塊的度量。
3 關鍵模塊設計
3.1 TCM控制器
位于BMC的TCM控制器采用狀態(tài)機模型,通過SPI接口與TCM進行交互,實現(xiàn)BMC對TCM的讀寫操作。圖3是TCM控制器與TCM模塊的接口圖,TCM控制器采用了Verilog語言設計,通過AMBA總線連接到ARM處理器。
在實際工作過程中,ARM通過發(fā)送命令字和數(shù)據(jù)包操作TCM,例如初始化操作、加解密操作等[7],TCM根據(jù)命令進行操作,運算完成后的數(shù)據(jù)再由ARM讀取。
該TCM控制器包括3個寄存器和1個RAM區(qū),具體功能如下:
(1)命令寄存器:存放操作TCM的不同命令字,例如TCM初始化、自檢、讀寫PCR寄存器、加解密等命令字。
(2)長度寄存器:存放參與運算的數(shù)據(jù)長度,單位為字節(jié)。
(3)控制寄存器:包括START位和FINISH_FLAG位,START位置1表示啟動TCM控制器開始工作,清0表示停止TCM控制器工作;FINISH_FLAG置1表示下達的命令操作完成,清0表示操作未完成。
(4)RAM區(qū):長度為1 KB,作為數(shù)據(jù)的緩存。
圖4是TCM控制器工作的狀態(tài)機轉移圖,包括空閑狀態(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)機的具體工作過程如下:
(1)系統(tǒng)上電復位后TCM控制器進入IDLE狀態(tài),等待ARM處理器下達指令。當ARM設置控制寄存器的START位為1后,啟動狀態(tài)機,進入BEGIN狀態(tài);
(2)在BEGIN狀態(tài),TCM控制器使SCLK、SDO與SDI信號同步,之后進入WR_CMD狀態(tài);
(3)在WR_CMD狀態(tài),TCM控制器向命令寄存器寫入操作TCM的命令字,之后進入WR_LEN狀態(tài);
(4)在WR_LEN狀態(tài),TCM控制器向長度寄存器寫入?yún)⑴c命令運算的數(shù)據(jù)長度,單位為字節(jié),之后進入WR_DATA狀態(tài);
(5)在WR_DATA狀態(tài),TCM控制器根據(jù)數(shù)據(jù)長度把參與運算的具體數(shù)據(jù)依次寫入RAM區(qū),之后進入WAIT狀態(tài);
(6)在WAIT狀態(tài),TCM控制器根據(jù)設置的延時參數(shù),等待TCM運算完成,之后進入RD_DATA狀態(tài);
(7)在RD_DATA狀態(tài),TCM控制器讀取TCM運算完成的數(shù)據(jù),把數(shù)據(jù)寫回RAM區(qū),之后進入FINISH狀態(tài);
(8)在FINISH狀態(tài),TCM控制器清除控制寄存器的START位為0,并設置完成標志位FINISH_FLAG為1,之后由ARM處理器接管控制權,ARM處理器可以再次啟動狀態(tài)機,向TCM發(fā)送其他的命令字及數(shù)據(jù),過程同步驟(3)~(8)。
3.2 U-Boot度量模塊
在BMC引導加載Linux過程中需要對內核zImage鏡像、文件系統(tǒng)Ramdisk鏡像和設備樹FDT鏡像進行度量,以此作為BMC固件完整性判斷的依據(jù),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時間并記錄日志,之后進行內核的解壓和系統(tǒng)的加載。當度量值與基準值比對不一致時,說明鏡像的完整性受到了破壞,此時設置標志位trust_flag為0,提示不可信的信息并記錄日志,信任鏈構建過程被終止,需要由BMC管理員進行操作。
(7)當需要更新基準值時,重新對zImage、Ramdisk與FDT鏡像進行度量,度量摘要更新至PCR,覆蓋之前的基準值。
4 安全性分析
在安全性方面,通過自主研發(fā)的BMC板卡代替了國外的BMC產品,杜絕了使用國外芯片存在的安全隱患?;贐MC板卡,開發(fā)了FPGA控制TCM的邏輯、U-Boot與Linux的可信功能軟件,實現(xiàn)了對BMC的可信引導和BIOS Boot Block的主動度量,同時通過TCM的密碼服務為上層應用及訪問者提供了驗證平臺可信的方法[8]。另外基于BMC Web管理界面實現(xiàn)了可信功能的呈現(xiàn),通過BMC控制CPLD的方式實現(xiàn)了對主板上電時序的控制。利用以上安全措施,為系統(tǒng)平臺構建了安全可信的操作環(huán)境。
服務器的可信啟動過程為:
(1)接通服務器電源,BMC與TCM先上電啟動。
(2)BMC向CPLD發(fā)送命令,由CPLD控制主板電源電壓,不給CPU上電。
(3)進行BMC固件的可信引導,當判定BMC可信后進行BIOS的主動度量;否則,進入BMC Web管理界面進行異常處理,此時CPU不會上電。
(4)進行BIOS的主動度量,當判定BIOS Boot Block可信后,BMC通過CPLD控制CPU上電,之后由BIOS接管控制權,進行主板模塊的度量;否則,進入BMC Web進行異常處理,此時CPU不會上電。
表1是測試數(shù)據(jù),測試了BMC與BIOS的基準值、度量值以及固件經(jīng)篡改后的異常值。當度量值與基準值一致時,BMC Web管理界面中的可信狀態(tài)燈顯示綠色,否則可信狀態(tài)燈顯示紅色。在Web界面可以進行可信功能開啟、基準值更新、特權啟動、查看日志等操作。
5 結論
本文研究了可信計算技術在BMC中的應用,基于國產BMC板卡和TCM設計實現(xiàn)了BMC固件的可信引導和BIOS的主動度量,實現(xiàn)了服務器的可信啟動控制。研究成果已應用于北京科委項目,有廣闊的應用前景。
參考文獻
[1] Intel Inc.Intelligent platform management interface specification V2.0[Z].2013-10-01.
[2] 周驊,劉橋.動態(tài)可信度量分析的硬件安全機制研究[J].電子技術應用,2015,41(1):115-121.
[3] 趙波,費永康,向騻,等.嵌入式系統(tǒng)的安全啟動機制研究與實現(xiàn)[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] 張伶俐,張功萱,王天舒,等.嵌入式系統(tǒng)可信虛擬化技術的研究與應用[J].計算機工程與科學,2016,38(8):1654-1660.
作者信息:
蘇振宇
(浪潮集團高效能服務器和存儲技術國家重點實驗室,山東 濟南250101)