閆華鈺,陳 嵐,佟 鑫,李 瑩
(1.中國科學(xué)院微電子研究所,北京 100029;2.中國科學(xué)院大學(xué),北京 100049)
物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展可實現(xiàn)自動駕駛、智能家居和可穿戴等設(shè)備的互聯(lián),為人們提供更加便捷的生活方式。麥肯錫2019年度研究報告指出,2015年有250億部聯(lián)網(wǎng)設(shè)備,預(yù)計到2025年將超過500億部[1]。物聯(lián)網(wǎng)設(shè)備通常由一個或多個SoC組成,一般包含系統(tǒng)感知和用戶隱私等關(guān)鍵信息。近年來,以RISC-V為代表的開源硬件的提出突破了傳統(tǒng)硬件架構(gòu)授權(quán)的限制,進一步促進了物聯(lián)網(wǎng)設(shè)備的創(chuàng)新和發(fā)展,但由于開源硬件缺少安全保護機制,使其硬件安全隱患更為突出,如硬件木馬可對加密核進行攻擊以獲取密鑰,或?qū)ν庠O(shè)接口進行攻擊,造成外設(shè)接口的功能被破壞[2],尤其是利用運行時條件觸發(fā)的系統(tǒng)級攻擊,很難通過傳統(tǒng)測試方法進行檢測和防御。
目前,雖然已有一些電路硬件安全檢測方法,但其主要集中在設(shè)計制造過程中[3-4],缺乏有效的電路運行時安全檢查方法。片上在線安全檢查是指在芯片設(shè)計時加入安全檢查功能,使其能夠在部署實現(xiàn)后對芯片進行運行時安全檢查,并在發(fā)現(xiàn)安全問題時及時響應(yīng),這對于SoC全周期安全具有重要意義。本文面向物聯(lián)網(wǎng)設(shè)備應(yīng)用,針對片上資源和系統(tǒng)級攻擊的特點,設(shè)計系統(tǒng)級安全策略及可遷移、可擴展和內(nèi)容可配置的檢查架構(gòu),并基于RISC-V的SoC環(huán)境驗證所設(shè)計檢查架構(gòu)的有效性。
傳統(tǒng)運行時檢測方法包括內(nèi)建自測試方法和信息流追蹤方法。內(nèi)建自測試方法通過掃描鏈將測試向量傳輸至檢查模塊驗證模塊功能[5],如將AES中的關(guān)鍵路徑配置為環(huán)形振蕩器,通過檢測振蕩頻率檢查是否有硬件木馬植入[6]。該方法需對邏輯完全了解,且存在測試向量狀態(tài)空間爆炸等問題。信息流追蹤方法通過追蹤檢查功耗、延時、電流等特定信息通路中是否存在安全問題,如利用采集電路中的電流信息[7]與黃金電路邊界作對比以區(qū)分異常電路,但該方法增加了大量的額外邏輯開銷和延遲開銷,并且上述方法均不能實現(xiàn)檢查結(jié)構(gòu)的可擴展及內(nèi)容的可配置,一旦部署就不可更改。
BASAK等人提出一種采用形式化驗證方法檢測硬件威脅的SoC安全架構(gòu),可在不了解電路內(nèi)部邏輯的情況下進行安全檢查[8]。該架構(gòu)由策略引擎和包裝器組成,策略引擎執(zhí)行安全策略,根據(jù)包裝器報告的行為對IP進行檢查。最初的策略引擎設(shè)計采用微處理器,之后為降低資源開銷將策略引擎以狀態(tài)機的形式實現(xiàn),策略引擎基于FPGA,這保證了策略更新的需求[9]。但該架構(gòu)未與應(yīng)用場景相結(jié)合,且其設(shè)計的架構(gòu)并非專門針對系統(tǒng)級檢查,也沒有關(guān)于策略可配置性的描述。本文設(shè)計以此為啟發(fā),對系統(tǒng)級安全策略進行深入研究。
在物聯(lián)網(wǎng)應(yīng)用中,系統(tǒng)芯片經(jīng)常需要對關(guān)鍵信息進行加密傳輸,因此保護關(guān)鍵信息在生成和傳輸過程中的安全性至關(guān)重要。結(jié)合物聯(lián)網(wǎng)應(yīng)用場景,對SoC資源進行分類分析,并研究相應(yīng)的攻擊與系統(tǒng)級安全策略,進而設(shè)計片上安全檢查架構(gòu)和流程。
保護芯片關(guān)鍵信息的難點在于攻擊者有多種攻擊方式,根據(jù)芯片關(guān)鍵信息的獲取方式和難易程度,將攻擊分為以下6類:
1)普通惡意軟件攻擊:主要包括緩沖區(qū)溢出攻擊[10]、代碼注入攻擊、BIOS感染攻擊和面向返回的編程攻擊等,在應(yīng)用軟件層面實施攻擊,獲取或破壞關(guān)鍵信息。
2)系統(tǒng)惡意軟件攻擊:主要包含利用系統(tǒng)漏洞進行攻擊和系統(tǒng)本身執(zhí)行惡意行為,在系統(tǒng)軟件層面實施攻擊,獲取或破壞關(guān)鍵信息。
3)側(cè)信道攻擊:利用側(cè)信道信息推測機密信息,例如差分功耗分析攻擊[11]、差分電磁分析攻擊[12]和時間攻擊。
4)普通硬件攻擊:利用設(shè)備的調(diào)試端口或外設(shè)端口進行攻擊[13],從而獲取機密信息,破壞系統(tǒng)功能,對設(shè)備造成破壞。
5)逆向工程:主要包括芯片級反向工程和IP核功能重構(gòu),攻擊者利用逆向手段獲取機密信息、破壞電路功能和注入惡意功能等。
6)惡意硬件注入攻擊:在電路中植入惡意的硬件電路或固件代碼,達到破壞原始電路功能、降低性能、泄露機密信息或造成拒絕服務(wù)等目的[14],主要包括硬件木馬攻擊、固件惡意代碼攻擊和硬件后門攻擊等,其中以硬件木馬攻擊為主。
本文主要研究對于惡意硬件注入攻擊的檢查策略和檢查架構(gòu)。
安全策略根據(jù)CIA原則可分為機密性、完整性和可用性策略[15]。根據(jù)對惡意硬件注入攻擊的詳細(xì)分析,相應(yīng)的系統(tǒng)級策略類型可分為訪問控制、信息流、生存約束、時效約束和通信策略,下面分類列舉出目前已有的系統(tǒng)級安全策略:
1)訪問控制類:在啟動期間,任何IP都不能訪問加密引擎的內(nèi)部寄存器,該策略保護加密引擎在系統(tǒng)啟動期間的機密數(shù)據(jù)不被泄露,屬于機密性策略;當(dāng)CPU處于高安全模式時,I/O設(shè)備無法更改受保護的內(nèi)存數(shù)據(jù),該策略保護內(nèi)存數(shù)據(jù)不被篡改,屬于完整性策略。
2)信息流類:在系統(tǒng)運行時,除加密引擎外,其他IP不能訪問存儲密鑰種子的固件。該策略保護密鑰種子不被泄露,屬于機密性策略。
3)生存約束類:加密引擎在使用過程中不能出現(xiàn)功能完整性破壞。該策略保護加密引擎的功能正確,不被破壞,屬于完整性策略。
4)時效約束類:IP上的固件經(jīng)過更新,證書需要重新認(rèn)證。該策略保護更新后的IP固件得到認(rèn)證,屬于可用性策略。
5)通信類:從IP A到IP B傳輸?shù)乃矫苄畔⒉荒鼙坏谌絀P訪問。該策略保護數(shù)據(jù)在不同IP間傳輸?shù)陌踩?,屬于機密性策略。
如圖1所示,本文設(shè)計的系統(tǒng)級策略檢查架構(gòu)包括策略引擎和包裝器,策略引擎和包裝器采用輕量級設(shè)計且可配置和升級。策略檢查架構(gòu)不依賴于SoC的原有架構(gòu),采用通用性設(shè)計,方便遷移到其他系統(tǒng)中。

圖1 策略檢查架構(gòu)示意圖Fig.1 Schematic diagram of the policy check architecture
策略引擎是執(zhí)行安全策略的核心,以狀態(tài)機的形式進行安全策略檢查,并根據(jù)包裝器提供的信號判斷待檢查模塊的狀態(tài),當(dāng)條件允許時進行安全檢查,并反饋被檢查模塊是否存在安全問題。策略引擎內(nèi)的策略狀態(tài)機根據(jù)需要進行配置,可在FPGA等可編程硬件上實現(xiàn)以滿足更新需求。
包裝器包裹在IP模塊的外圍,將IP的狀態(tài)信息傳遞給策略引擎。包裝器根據(jù)策略引擎的檢查狀態(tài),靈活地選擇將IP的接口分配給系統(tǒng)總線或者策略引擎檢查總線,協(xié)助策略引擎實現(xiàn)對IP模塊的檢查。
為驗證本文設(shè)計架構(gòu)的可行性,在PULPino系統(tǒng)[16]中嵌入檢查架構(gòu)。PULPino是一款設(shè)計精簡的RISC-V[17]架構(gòu)開源SoC平臺。首先根據(jù)驗證需要,在PULPino系統(tǒng)中添加AES、內(nèi)存和AXI中斷控制器3個功能IP,形成可用于IoT感知設(shè)備的SoC。圖2中白色模塊為PULPino SoC原始組成部分,斜對角線模塊為添加的功能IP,深灰色的SPC模塊即為策略引擎,各個IP上包裹的淺灰色模塊即為包裝器,它們之間通過單獨的連線連接。當(dāng)SPC檢查出錯誤發(fā)生時,會將相應(yīng)的錯誤代碼寫入錯誤寄存器并發(fā)送中斷信號。CPU通過執(zhí)行中斷程序讀取錯誤寄存器中的值并將錯誤代碼輸出。

圖2 在PULPino SoC上的策略檢查架構(gòu)Fig.2 Policy check architecture on the PULPino SoC
在SoC上的資源主要分為IP核、存儲和接口,系統(tǒng)在執(zhí)行任務(wù)時需要各類資源之間相互配合,因此對SoC進行片上安全檢查就是對片上的資源進行安全檢查。如圖3所示,在物聯(lián)網(wǎng)應(yīng)用中典型場景為感知設(shè)備對采集數(shù)據(jù)進行加密后傳輸,下面針對該過程分析SoC中可能存在的系統(tǒng)級攻擊和配置執(zhí)行的安全策略。
在SoC中對數(shù)據(jù)進行加密傳輸需加密核、內(nèi)存和外設(shè)接口這3類資源配合完成。若在這些資源中存在硬件木馬,將其在運行時觸發(fā)激活后對數(shù)據(jù)進行篡改,則將破壞整個任務(wù)流,甚至某些特定環(huán)節(jié)木馬可修改特定位置數(shù)據(jù),最終破解加密信息。因此,在物聯(lián)網(wǎng)應(yīng)用場景中的安全要素為加密后的采集數(shù)據(jù),需對該任務(wù)流中涉及該要素的加密核、內(nèi)存和外設(shè)接口進行相關(guān)安全檢查。

圖3 安全策略、系統(tǒng)資源和任務(wù)流的關(guān)系Fig.3 Relationship between security policies,system resources and task flows
4.2.1 硬件木馬設(shè)計
由于現(xiàn)有Trust-Hub等硬件木馬基準(zhǔn)庫中沒有適用的運行時硬件木馬基準(zhǔn)電路,因此參考文獻[2,18]中的高隱蔽性木馬結(jié)構(gòu),并添加運行時觸發(fā)條件,設(shè)計驗證實驗中的攻擊模型。所設(shè)計的硬件木馬由觸發(fā)電路和負(fù)載組成,在運行時通過特定的數(shù)據(jù)條件觸發(fā),激活后破壞電路的正常功能。
1)AES硬件木馬。觸發(fā)電路為升降計數(shù)器[2],在AES中進行特定模式的計算,并且當(dāng)輸入的明文長度大于所設(shè)置的閾值時開始計數(shù),當(dāng)不滿足條件木馬計數(shù)器時清零計數(shù)器。在計數(shù)到閾值后,使能木馬負(fù)載,同時清零計數(shù)器。木馬負(fù)載是位于AES輪加密單元中的異或門,當(dāng)木馬激活后,控制異或門翻轉(zhuǎn)特定位置的加密結(jié)果。
2)內(nèi)存硬件木馬。觸發(fā)電路為條件計數(shù)器,當(dāng)輸入內(nèi)存的數(shù)據(jù)同時滿足地址觸發(fā)條件和數(shù)據(jù)觸發(fā)條件時,計數(shù)器開始計數(shù)[18]。在計數(shù)到閾值后,使能木馬負(fù)載,同時清零計數(shù)器。木馬負(fù)載位于內(nèi)存寫入電路,由篡改電路和選擇器組成,當(dāng)木馬激活后,選擇被篡改的數(shù)據(jù)存入內(nèi)存。
3)UART硬件木馬。觸發(fā)電路為條件計數(shù)器,當(dāng)UART接收到來自總線的數(shù)據(jù)是輸出數(shù)據(jù)并且滿足數(shù)據(jù)條件時,計數(shù)器開始計數(shù)。在計數(shù)到閾值后,使能木馬負(fù)載,同時清零計數(shù)器。木馬負(fù)載位于UART輸出緩存寫入電路,由篡改電路和選擇器組成,當(dāng)木馬激活后,選擇被篡改的數(shù)據(jù)存入輸出緩存。
本文設(shè)計的AES、內(nèi)存和UART中的硬件木馬均為運行時觸發(fā)木馬,但3種木馬觸發(fā)的數(shù)據(jù)條件不同,木馬負(fù)載根據(jù)各模塊的特點,作用的位置不同。
4.2.2 安全策略檢查流程
針對上文提到的攻擊和安全要素,本文制定了具體執(zhí)行的4條安全策略。4條策略分別對加密核、內(nèi)存和外設(shè)接口進行安全檢查,整體構(gòu)成了對SoC場景下任務(wù)流的安全檢查。4條策略的檢查流程如圖4所示。
策略1加密核在系統(tǒng)啟動時不能出現(xiàn)功能完整性破壞,如圖4(a)所示,具體過程為:
1)CPU在boot完成后先進入等待程序,這時策略引擎檢測到CPU boot完成進入檢查狀態(tài),開始對AES進行功能完整性檢查。
2)策略引擎內(nèi)部存儲明文、密鑰和密文對,策略引擎進入檢查狀態(tài),將明文、密鑰數(shù)據(jù)發(fā)送給加密核,并將加密核計算的密文取回。
3)策略引擎根據(jù)存儲的正確密文驗證取回的密文,若驗證結(jié)果正確,通知CPU結(jié)束等待,進入正常狀態(tài);若驗證結(jié)果失敗,策略引擎會將錯誤以錯誤代碼的形式寫入錯誤記錄寄存器,并向CPU發(fā)送中斷信號,CPU結(jié)束等待執(zhí)行中斷程序,讀取錯誤寄存器相應(yīng)位置的值,并將其輸出顯示。
策略2加密核在使用過程中不能出現(xiàn)功能完整性破壞,如圖4(b)所示,具體過程為:
1)加密核包裝器檢測到加密核處于空閑狀態(tài),將其報告給策略引擎。
2)策略引擎內(nèi)部存儲明文、密鑰和密文對,當(dāng)策略引擎發(fā)現(xiàn)加密核處于空閑狀態(tài)時,策略引擎進入檢查狀態(tài),將明文、密鑰數(shù)據(jù)發(fā)送給加密核,并將加密核計算的密文取回。
3)策略引擎根據(jù)存儲的正確密文驗證取回的密文,若驗證結(jié)果正確,則根據(jù)設(shè)定的檢查頻率進行延時等待,在滿足檢查條件時開始下一次檢查;若驗證結(jié)果失敗,策略引擎會將錯誤以錯誤代碼的形式寫入錯誤記錄寄存器,并向CPU發(fā)送中斷信號,CPU執(zhí)行中斷程序,讀取錯誤寄存器相應(yīng)位置的值,并將其輸出顯示。
策略3在運行時內(nèi)存中的數(shù)據(jù)存取不能遭受篡改,如圖4(c)所示,具體過程為:
1)內(nèi)存包裝器檢測到內(nèi)存處于空閑狀態(tài),將其報告給策略引擎。
2)策略引擎進入檢查狀態(tài),采用March C[19-20]算法對內(nèi)存進行檢查。
3)若檢查結(jié)果通過,則根據(jù)設(shè)定的檢查頻率進行延時等待,在滿足檢查條件時開始下一次檢查;若檢查結(jié)果不通過,策略引擎會將錯誤以錯誤代碼的形式寫入錯誤記錄寄存器,同時向CPU發(fā)送中斷信號,CPU執(zhí)行中斷程序,讀取錯誤寄存器相應(yīng)位置的值,將其輸出顯示并進一步禁用內(nèi)存。
策略4外設(shè)接口傳輸?shù)臄?shù)據(jù)不能遭受篡改,如圖4(d)所示,具體過程為:
1)外設(shè)接口為UART,UART包裝器檢測到UART處于空閑狀態(tài),將其報告給策略引擎。
2)策略引擎進入檢查狀態(tài),將檢查數(shù)據(jù)發(fā)送到UART,為驗證UART傳輸數(shù)據(jù)是否正確,UART的輸入串口接到輸出串口,將發(fā)送出的數(shù)據(jù)回收進行驗證。

圖4 安全策略檢查流程Fig.4 Procedure of security policy check
3)若檢查結(jié)果通過,則根據(jù)設(shè)定的檢查頻率進行延時等待,在滿足檢查條件時開始下一次檢查;若檢查結(jié)果不通過,策略引擎會將錯誤以錯誤代碼的形式寫入錯誤記錄寄存器,同時向CPU發(fā)送中斷信號,CPU執(zhí)行中斷程序,讀取錯誤寄存器相應(yīng)位置的值,將其輸出顯示并進一步禁用UART。
在各檢查流程中,檢查頻率預(yù)先設(shè)置快速、中速和慢速3個頻次,根據(jù)實際應(yīng)用條件和需要配置檢查頻率的大小。
為驗證實驗結(jié)果,在AES、內(nèi)存和UART中分別植入了所設(shè)計的運行時觸發(fā)惡意硬件木馬,并根據(jù)運行時安全策略分別實現(xiàn)對應(yīng)的策略檢查器。如圖5所示,策略檢查器以狀態(tài)機的方式運行,各策略檢查狀態(tài)機之間并行運行,分別對各模塊進行檢查,在整體上完成了對SoC中數(shù)據(jù)加密傳輸過程的系統(tǒng)級安全檢查。錯誤記錄寄存器中包含3個32位寄存器,分別記錄3個檢查狀態(tài)機的檢查結(jié)果,相應(yīng)的地址和功能定義如表1所示。

圖5 安全策略檢查電路整體架構(gòu)Fig.5 Overall architecture of the security policy check circuit

表1 錯誤記錄寄存器功能說明Table 1 Function description of error record registers
AES運行時檢查狀態(tài)機如圖6所示,由于AES在接收明文和密鑰數(shù)據(jù)時就進入busy狀態(tài),因此在加密完成后AES會輸出中斷信號,需CPU或SPC發(fā)送清中斷信號才會恢復(fù)到等待(idle)狀態(tài),否則AES會停留在忙碌(busy)狀態(tài),不能再次工作。根據(jù)狀態(tài)跳轉(zhuǎn)圖進行AES檢查狀態(tài)機模塊的Verilog代碼編寫,在ModelSim[21]中將AES檢查狀態(tài)機和植入了木馬的AES進行聯(lián)合仿真驗證,結(jié)果如圖7所示,檢查頻率配置為慢速,經(jīng)過兩輪檢查發(fā)現(xiàn)問題,實驗結(jié)果表示AES檢查狀態(tài)機可以實現(xiàn)檢查功能。內(nèi)存和UART檢查狀態(tài)機的狀態(tài)跳轉(zhuǎn)圖如圖8、圖9所示,仿真結(jié)果與圖7類似,不再詳細(xì)介紹。將AES、內(nèi)存和UART的策略檢查器添加到PULPino系統(tǒng)中進行仿真驗證,下面以AES檢查為例,展示檢查效果。策略檢查器的仿真波形如圖10所示,策略檢查器發(fā)現(xiàn)錯誤后發(fā)送中斷信號,CPU執(zhí)行中斷響應(yīng)程序,讀取錯誤寄存器的值并輸出顯示,如圖11所示。實驗結(jié)果顯示策略檢查器可以在PULPino系統(tǒng)中正確實現(xiàn)檢查功能,證明了本文所設(shè)計的系統(tǒng)級策略檢查架構(gòu)的正確性與有效性。

圖6 AES運行時檢查狀態(tài)機Fig.6 AES runtime check state machine

圖7 AES策略檢查狀態(tài)機仿真波形Fig.7 Simulation waveforms of AES policy check state machine

圖8 內(nèi)存運行時檢查狀態(tài)機Fig.8 Memory runtime check state machine

圖9 UART運行時檢查狀態(tài)機Fig.9 UART runtime check state machine

圖10 策略檢查器在PULPino系統(tǒng)中的仿真波形Fig.10 Simulation waveforms of the policy checker in the PULPino system

圖11 CPU運行中斷程序結(jié)果Fig.11 Results of CPU running interrupt program
本文分析物聯(lián)網(wǎng)應(yīng)用場景下可能面臨的系統(tǒng)級安全威脅,對系統(tǒng)級安全策略進行分類設(shè)計,構(gòu)建SoC安全檢查架構(gòu),根據(jù)場景需求進行系統(tǒng)級安全策略配置,通過運行策略執(zhí)行任務(wù)方式進行運行時安全檢查。以典型數(shù)據(jù)加密傳輸場景為例,為路徑中的攻擊設(shè)計4條安全策略,并在基于RISC-V的SoC中進行策略檢查架構(gòu)的實現(xiàn)。仿真結(jié)果顯示,運行時策略檢查狀態(tài)機可檢查出加密核、內(nèi)存和UART接口的功能完整性問題并發(fā)送錯誤中斷信號,驗證了本文設(shè)計的SoC安全策略檢查架構(gòu)的正確性與有效性,并且本文研究對建立物聯(lián)網(wǎng)SoC,尤其是采用開源硬件系統(tǒng)的運行時安全評估體系具有一定的理論意義和實用價值。后續(xù)將進一步優(yōu)化策略檢查電路的設(shè)計,搭建基于FPGA的系統(tǒng)原型,并分析安全檢查架構(gòu)對系統(tǒng)性能以及資源功耗開銷的影響。