萬旺,張紅旗,張大宇,張松,王賀
(中國航天宇航元器件工程中心,北京 100094)
近年來,針對硬件木馬[1],提出了諸多測試方法,但大體上可以分為逆向工程[2]、旁路分析[3-4]和邏輯測試[5]等幾類。對于專用集成電路(ASIC)而言,逆向工程可以通過開封、清洗等操作對IC內(nèi)部結(jié)構(gòu)進行分析,旁路分析可以通過分析功耗去檢測,而邏輯測試亦可以通過功能測試去驗證,在特定的情況下,這些方法都能夠?qū)τ布抉R做出適當(dāng)?shù)淖R別。然而,對于現(xiàn)場可編程邏輯門陣列(FPGA:Field Programmable Gate Array)而言,由于其內(nèi)部是大量的邏輯模塊,而其功能是根據(jù)需求進行配置的,所以上述的幾種方法往往很難對FPGA設(shè)計中的硬件木馬做出判斷。對此,也有人提出了門級網(wǎng)表的測試方法[6],然而該方法也只能防止設(shè)計時的隱患,隨著StarBleed漏洞的揭露[7],F(xiàn)PGA中在線運行的設(shè)計被植入硬件木馬的可能性已無法被忽視。而針對這種方式植入的硬件木馬,至今尚沒有提出有效的解決措施。
因此,本文提出基于位流回讀[8-9]的硬件木馬檢測方法,通過位流對比分析,可以有效地檢測出FPGA設(shè)計中植入的硬件木馬。該方法的主要難點在于測試人員必須深入地了解相應(yīng)器件的配置及接口等信息,并通過相應(yīng)的EDA工具進行必要的軟硬件協(xié)同設(shè)計才能夠?qū)崿F(xiàn)該測試過程。本文將對Xilinx系列FPGA的具體配置及接口信息進行分析,并在VC707評估板上進行簡單設(shè)計以驗證該方法的合理性。
FPGA的配置是指將設(shè)計生成的位流加載到FPGA配置存儲器中,實現(xiàn)相應(yīng)的功能。該過程中所涉及的3個關(guān)鍵點是配置模式的選擇、配置幀的格式和配置寄存器的訪問。
Virtex FPGA的配置模式由3個引腳控制,分別為M2、M1和M0,理論上有8種配置模式,但常見的主要有4種,如表1所示。
表1 Virtex FPGA常見的配置模式
其中,主串模式是指上電后,F(xiàn)PGA產(chǎn)生配置時序,自動地從外部存儲器中加載配置位流。而從串模式則相反,F(xiàn)PGA處于從機模式,由CPU、DSP等提供時序,配置位流從硬盤等媒介加載到FPGA中。SelectMAP模式是一種8-bits并行模式。邊界掃描(JTAG)模式是一種調(diào)試模式。作為相應(yīng)的配置接口,SelectMAP接口和JTAG接口都能完成配置和回讀操作,考慮到JTAG接口對資源占用較少且長期激活等特點,本試驗中將通過JTAG接口進行位流的配置與回讀。
聯(lián)合測試行動小組(JTAG:Joint Test Action Group)是IEEE 1149.1標(biāo)準(zhǔn)的常用名稱,該協(xié)議主要由測試訪問接口(TAP)和邊界掃描結(jié)構(gòu)兩個部分組成。通過JTAG接口,測試人員可以靈活地訪問器件的內(nèi)部節(jié)點,對芯片內(nèi)部的模塊進行在線編程和調(diào)試,從而大幅度地提高測試效率。
1.2.1 TAP接口
Virtex系列的FPGA全都支持JTAG接口。根據(jù)IEEE 1149.1標(biāo)準(zhǔn)的描述,TAP控制器包含了4根強制性的專用引腳,分別是TCK、TMS、TDI和TDO,其余一些引腳如復(fù)位引腳都是可選的,如表2所示。
表2 TAP接口控制引腳
其中,TCK與TMS共同作用來控制著TAP控制器的模式選擇,TAP是一個16狀態(tài)的有限狀態(tài)機,TMS引腳是一個上拉引腳,在不驅(qū)動時呈現(xiàn)高電平,在時鐘上升沿的觸發(fā)下,TMS引腳的狀態(tài)將會決定TAP的狀態(tài)序列,對于TAP控制器而言,雖然有多種狀態(tài),但主要只有兩種狀態(tài)變化序列,即數(shù)據(jù)移入數(shù)據(jù)寄存器和命令移入命令寄存器。而對于數(shù)據(jù)寄存器和命令寄存器中的數(shù)據(jù)輸入和輸出,則是通過TDI和TDO引腳串行輸入和輸出來實現(xiàn)的。
1.2.2 邊界掃描結(jié)構(gòu)
JTAG測試得以有效實施的另一依據(jù)便是邊界掃描結(jié)構(gòu),該結(jié)構(gòu)的主要組成部分是一系列被串聯(lián)起來的寄存器所組成的掃描鏈,邊界掃描結(jié)構(gòu)的示意圖如圖1所示。
圖1 邊界掃描結(jié)構(gòu)
如圖1所示,一系列的IOB組成了掃描鏈,該掃描鏈形成了數(shù)據(jù)的輸入與輸出通道。該結(jié)構(gòu)中其余寄存器的作用如表3所示。
表3 邊界掃描寄存器
FPGA的資源主要有IOB、CLB和BRAM,以及互連線資源,這些資源都需要位流進行配置,而配置時,都是以幀為單位對內(nèi)部存儲器進行讀寫。幀是FPGA配置時最小的可尋址單位,如圖2所示,整個配置存儲器可以被分為3段,分別為BRAM0、BRAM1和CLB。
其中,每一段都是由若干幀組成,每一幀都是寬度為1 bit的自上而下的一列資源,BRAM0和BRAM1的幀所包含的資源是塊存儲器中的單元,而CLB中的幀列可以細分為CLB、IO和內(nèi)部互聯(lián)控制等元素。
如之前所說,幀是FPGA配置時最小的可尋址單位,所以在配置或回讀過程中,需要對相應(yīng)的地址進行解析。如圖2的配置內(nèi)存圖中所示,分為3個幀塊,每一幀塊都有一個塊地址,而幀塊中的每一列也有相應(yīng)的列地址,在尋址時通過塊地址、列地址的順序逐層定位到相應(yīng)的幀。對于不同型號的器件,幀的尺寸和數(shù)目是不同的,但其尋址方式保持一致。
配置寄存器是指配置過程中所使用的若干寄存器,這些寄存器在配置命令的作用下完成了如圖3所示的配置流程。
圖3 Virtex FPGA配置流程
對于初始化設(shè)置階段,主要涉及的是模式選擇寄存器,在第一小節(jié)配置模式中已有描述,位流加載過程是整個配置過程中最為關(guān)鍵的環(huán)節(jié),而且整個過程也是對配置寄存器進行讀寫的過程。首先,對于位流而言,是由兩類數(shù)據(jù)包構(gòu)成,如圖4-5所示,給出了兩類數(shù)據(jù)包的包頭:第一類的包頭包含了寄存器的定位等信息,可以獨立地完成寄存器的讀寫,但相應(yīng)地,其所攜帶的包數(shù)據(jù)較少;第二類包頭不含寄存器信息,不能獨立地使用,必須與第一類包頭結(jié)合使用。通常在讀寫幀數(shù)據(jù)時,考慮到字數(shù)較多,所以先發(fā)一個不含包數(shù)據(jù)(字數(shù)為0)的第一類包頭,再發(fā)一個第二類包頭,隨后開始幀數(shù)據(jù)的傳送。
圖4 第一類數(shù)據(jù)包
圖5 第二類數(shù)據(jù)包
其次,位流對于寄存器的讀寫只能通過第一類包進行操作,第一類包所涉及的寄存器如表4所示。
表4 配置寄存器
其中,CMD命令寄存器控制著配置幀數(shù)據(jù)的讀寫和校驗等操作,其常見命令如表5所示。
表5 配置命令
總之,只有正確地使用配置模式、配置接口和配置寄存器才能夠?qū)⒃O(shè)計載入到FPGA中,這是位流回讀的基礎(chǔ)。
Xilin x 7系列FPGA允許用戶通過JTAG、SelectMAP等接口將FPGA內(nèi)部配置數(shù)據(jù)回讀到PC端進行分析,回讀一般分為兩種目的,分別為驗證和捕獲,驗證是將配置內(nèi)存中的數(shù)據(jù)全部回讀,其中包括了用戶的設(shè)計信息和當(dāng)前運行所對應(yīng)的各種狀態(tài)值,而回讀捕獲相當(dāng)于驗證的一個子集,它主要集中于FGPA運行的動態(tài)信息,即捕獲當(dāng)前時刻的各種狀態(tài)。本次試驗探究的是設(shè)計被篡改的情況,所以此處主要就回讀驗證進行介紹。
對于標(biāo)準(zhǔn)的JTAG協(xié)議而言,提供了旁路(Bypass)和邊界(Boundary)寄存器去進行數(shù)據(jù)的交互。而通過JTAG訪問Xilinx 7系列配置信息時則是通過類似的CFG_IN和CFG_OUT寄存器?;刈x指令通過CFG_IN寄存器寫入,配置內(nèi)存中的數(shù)據(jù)則通過CFG_OUT寄存器讀出。
回讀的主要操作集中于對配置寄存器的讀取,盡管并非所有的寄存器都對外開放讀取權(quán)限,但只要具有讀取權(quán)限的配置寄存器,通常都可以利用JTAG接口進行讀取,這里簡要地描述JTAG讀取STAT寄存器的流程,對于其余寄存器的讀取與該過程基本類似。
a)復(fù)位TAP控制器。
b)通過Shift-IR將CFG_IN中的指令移入JTAG的指令寄存器中。
c)通過Shift-DR將數(shù)據(jù)包寫入命令移入CFG_IN寄存器:
1)向器件寫入同步字;
2)寫入數(shù)個空指令;
3)將讀取STAT寄存器的包頭寫入器件;
4)寫入兩個填充字以刷新緩沖區(qū)。
d)通過Shift-IR將CFG_OUT指令移入JTAG的指令寄存器。
e)通過Shift-DR將狀態(tài)寄存器中的32位數(shù)據(jù)移除。
f)重置TAP控制器。
回讀的數(shù)據(jù)流包含了配置幀數(shù)據(jù),但是相比于配置的位流,該數(shù)據(jù)流中不包含配置的指令信息,也沒有CRC校驗信息。簡言之,除了其頭部的一個填充幀以外,其余的回讀數(shù)據(jù)都是FPGA內(nèi)部存儲器的幀數(shù)據(jù)。盡管可以獲得所有幀的數(shù)據(jù),但其驗證過程并不是逐位都需要參與比較,因為其中的一些比特或位置由于特殊用途而不用于比較,對此需要參考相應(yīng)的MASK文件,對比MASK文件,可以從回讀位流中提取出有效的數(shù)據(jù)位。對于回讀驗證而言,會涉及到.bit、.rbt、.rbd、.msk和.msd等文件。其中,bit/rbt文件主要存放的是設(shè)計位流;msk/msd存放的是MASK文件;rbd存放的是回讀位流;而bit、msk文件是二進制文件;rbt、msd和rbd都是ASCII文件。MASK文件和回讀數(shù)據(jù)流的示例如圖6-7所示。
圖6 MSD文件
圖7 回讀的RBD文件
對于同一器件而言,MASK文件中的比特數(shù)目與RBD文件中的比特數(shù)目相一致,但它們中0與1的意義截然不同,對于RBD文件中,每一比特都代表了配置幀中的某一位數(shù)據(jù);而MASK文件則是針對回讀位流而生成的一類文件,其中1代表了遮蓋,即MASK中1出現(xiàn)的位置所對應(yīng)的位流數(shù)據(jù)不參與比較,而0所對應(yīng)的數(shù)據(jù)需要比較。
對于回讀過程,就硬件部分而言,與其配置時采用相同的硬件設(shè)施;而軟件部分,對于Xilinx 7系列FPGA可以使用Vivado IDE軟件進行相應(yīng)的配置設(shè)計和回讀。
Vivado IDE提供了GUI模式和Tcl命令行模式,對于FPGA配置而言,采取其中任何一種方式都可以達到期望的目標(biāo);而對于回讀操作而言,則主要是通過Tcl指令去完成?;刈x操作需要用到的指令,如圖8所示。
圖8 Tcl回讀指令
圖8中,-readback_file用于生成ASCII文件,-bin_file文件用于生成二進制文件,回讀后的文件與配置時生成的msk或msd文件相對照即可得到配置信息。
本次試驗中將以Vivado IDE作為配置設(shè)計和回讀操作的軟件平臺,以Virtex-7 FPGA VC707評估板作為硬件平臺進行相應(yīng)的驗證工作。在試驗中將使用Trust-Hub網(wǎng)站提供的RS232 T100硬件木馬電路[10-11]作為受感染的設(shè)計。
RS232 T100硬件木馬電路的觸發(fā)邏輯與內(nèi)部的19路信號相關(guān),一旦觸發(fā),就將會導(dǎo)致接收準(zhǔn)備信號產(chǎn)生stuck-at-‘0’故障,一般條件下很難觸發(fā)此類木馬;而且,由于該類木馬面積較小,邏輯測試或者側(cè)信道分析的效果并不理想,而在本試驗中,通過位流回讀的方式,可以直接篩選出那些對設(shè)計進行了惡意更改的芯片。如下是本次試驗的流程:
1)RS232接口電路設(shè)計;
2)配置位流生成,同時生成相應(yīng)的msd/msk即金位流(.rbd)文件;
3)通過JTAG接口配置Virtex-7 XCV7X485T FPGA;
4)將RS232 T100注入到配置中(注入木馬的方式較多,這里為了驗證方便,直接用RS232 T100取代原始設(shè)計將其載入FPGA中);
5)通過JTAG回讀,生成回讀位流文件(.rbd);
6)與金位流文件對比,得出結(jié)論。
根據(jù)如上所述的流程開展試驗,得到的結(jié)果如圖9所示。
圖9 位流對比
如圖9所示,原始設(shè)計與RS232-T100的回讀位流存在若干行不一致的情況,表明了原始設(shè)計與硬件木馬感染電路的位流存在著明顯的差異,從而證明了該方法的有效性。
由于FPGA開發(fā)的低成本和便捷等特性,其在航天航空等領(lǐng)域中應(yīng)用廣泛,然而,近年來有關(guān)硬件安全的問題備受關(guān)注,F(xiàn)PGA本身及其設(shè)計的安全性也受到了質(zhì)疑。對于配置之前的設(shè)計,可以通過形式驗證、門級驗證等方式去檢測;而對于配置后設(shè)計乃至在線運行的器件,如何保證其中功能的正確性,卻鮮有討論,尤其是隨著FPGA漏洞的揭漏,該方面問題變得愈發(fā)突出。
本次設(shè)計的基于位流的木馬檢測系統(tǒng),可以對FPGA內(nèi)部配置進行回讀,通過將其與原始設(shè)計相比較,可以有效地提取出受感染的部分,從而有效地防止硬件木馬帶來的危害。該方法的優(yōu)點是相比于旁路分析等方式,其受環(huán)境和工藝影響較??;此外,該方法直接對設(shè)計的每一位進行解析,其檢測率可以完全覆蓋整個設(shè)計。尚不足之處是該方法執(zhí)行過程中對于回讀電路本身的安全性未曾考慮,以及對于加密設(shè)計,該方法需要進一步地優(yōu)化。