《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 可信計算在服務器基板管理控制器中的應用
可信計算在服務器基板管理控制器中的應用
2018年電子技術應用第5期
蘇振宇
浪潮集團高效能服務器和存儲技術國家重點實驗室,山東 濟南250101
摘要: 研究了可信計算技術在服務器基板管理控制器(BMC)中的應用,利用BMC和國產可信密碼模塊(TCM)作為信任根,在服務器上電啟動過程中實現(xiàn)了對自主研發(fā)的BMC板卡固件的可信引導,對BIOS的主動度量,構建了完整的信任鏈?;贐MC板卡開發(fā)了FPGA控制TCM的邏輯,并開發(fā)了U-Boot可信功能軟件。結果表明,在信任鏈構建過程中可以有效防止固件被惡意篡改,從而為系統(tǒng)平臺構建了安全可信的環(huán)境。
中圖分類號: 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管理界面監(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所示,信任的建立過程如下:

qrs2-t1.gif

    (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ā)方式,十分靈活。

qrs2-t2.gif

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

qrs2-t3.gif

    在實際工作過程中,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)。

qrs2-t4.gif

3.2 U-Boot度量模塊

    在BMC引導加載Linux過程中需要對內核zImage鏡像、文件系統(tǒng)Ramdisk鏡像和設備樹FDT鏡像進行度量,以此作為BMC固件完整性判斷的依據(jù),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時間并記錄日志,之后進行內核的解壓和系統(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界面可以進行可信功能開啟、基準值更新、特權啟動、查看日志等操作。

qrs2-b1.gif

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)

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