嵌入式系統(tǒng)越來越普遍地采用云技術(shù)來進(jìn)行數(shù)據(jù)采集、事件檢測和軟件更新。這些遠(yuǎn)程物聯(lián)網(wǎng)設(shè)備普遍通過固件完成設(shè)置,這些固件有可能存儲(chǔ)在主機(jī)MCU中,也有可能存儲(chǔ)在外置非易失性存儲(chǔ)器的用戶空間中。而這些非易失性存儲(chǔ)器中的內(nèi)容則是惡意攻擊的主要對象。對于所有全新開發(fā)的物聯(lián)網(wǎng)設(shè)備來說,采取應(yīng)對措施防止非易失性存儲(chǔ)器的非授權(quán)修改,已成為一項(xiàng)基本的設(shè)計(jì)要求。
圖 1 - 作為節(jié)點(diǎn)的互聯(lián)嵌入式系統(tǒng)
本文將對分立閃存存儲(chǔ)器領(lǐng)域開始涌現(xiàn)的加密和安全基礎(chǔ)設(shè)施進(jìn)行介紹,并探討如何將這些新特性用于物聯(lián)網(wǎng)互聯(lián)設(shè)備的安全保障。
新一代安全NOR閃存產(chǎn)品
NOR閃存制造商已經(jīng)開發(fā)出了一些NOR閃存產(chǎn)品,這些產(chǎn)品通過集成加密基礎(chǔ)設(shè)施,能夠提供高水準(zhǔn)安全性。設(shè)備配對(主機(jī)MCU和NOR閃存)與認(rèn)證寫入(編程與擦除)操作已通過使用對稱加密來實(shí)現(xiàn)。這些設(shè)備通常都是基于HMAC引擎和非易失性累加計(jì)數(shù)器。在配置過程中,需要先將對稱密鑰同時(shí)加載到主機(jī)MCU和安全NOR閃存器件中,以便在正常操作時(shí)執(zhí)行經(jīng)認(rèn)證的讀寫操作。
圖 2 - 采用集成加密的新一代NOR閃存器件(使用串行外設(shè)接口)
最近,內(nèi)部NOR閃存基礎(chǔ)設(shè)施的發(fā)展已經(jīng)超出了內(nèi)部狀態(tài)機(jī)實(shí)際管理的范疇。較新型設(shè)備集成了CPU子系統(tǒng)(CPUSS),能夠執(zhí)行透明負(fù)載均衡和壞塊替換等高級功能。一旦CPU子系統(tǒng)成為閃存器件基礎(chǔ)設(shè)施的組成部分,那么增添加密硬件塊和數(shù)據(jù)包緩存的想法就能很快成為現(xiàn)實(shí)。通過使用這種全新的基礎(chǔ)存儲(chǔ)器件,就能夠開發(fā)出一系列安全功能,從而為加密安全提供支持。在NOR閃存領(lǐng)域,用戶存儲(chǔ)陣列的訪問控制和執(zhí)行前的分層代碼驗(yàn)證是得到大量關(guān)注的兩個(gè)特性。
將用戶存儲(chǔ)空間劃分為安全區(qū)域
較新型NOR器件的用戶存儲(chǔ)空間能夠劃分成多個(gè)區(qū)域,每個(gè)區(qū)域可以單獨(dú)配置,用于傳統(tǒng)(非安全)訪問或安全訪問。配置為安全訪問的區(qū)域能夠設(shè)定為受控讀/寫訪問或認(rèn)證訪問。
配置為受控訪問的安全區(qū)域能夠獨(dú)立啟用或禁用讀/寫操作。啟用/禁用設(shè)置由認(rèn)證序列(需要主機(jī)MCU證明其知曉共享密鑰)進(jìn)行管理。在制造過程中,共享密鑰將被同時(shí)加載到主機(jī)MCU和存儲(chǔ)器。試圖訪問禁用區(qū)域的讀或?qū)憣⒃谧x取期間返回未定義數(shù)據(jù),并且寫入嘗試將會(huì)被阻斷。配置為受控訪問狀態(tài)的區(qū)域可以選擇配置成加電讀/寫訪問狀態(tài)。例如,可以將啟動(dòng)區(qū)域配置為加電時(shí)可讀不可寫,而將其余區(qū)域配置為禁用所有讀/寫訪問。
此外,安全區(qū)域也可以配置為只支持經(jīng)認(rèn)證的讀寫訪問。認(rèn)證區(qū)域不支持傳統(tǒng)讀寫。認(rèn)證讀寫操作是通過數(shù)據(jù)包傳輸來執(zhí)行的,其中包含HMAC,表示知曉共享密鑰和非易失性命令累加計(jì)數(shù)器值。在訪問請求中使用命令累加計(jì)數(shù)器能防范重放攻擊。
圖3 - 用戶陣列的安全分區(qū)
軟件層之間的安全性
此外,分層驗(yàn)證軟件也成為安全環(huán)境中的常見做法。可信計(jì)算組織的設(shè)備身份合成引擎(DICE)工作組已發(fā)布一項(xiàng)策略,即每層代碼在釋放控制前都需要向下一層代碼進(jìn)行證實(shí)。當(dāng)主機(jī)MCU無法集成可編程存儲(chǔ)器時(shí),系統(tǒng)級場景會(huì)變得更加復(fù)雜。從NOR閃存CPUSS ROM開始(推定為可信),分立閃存器件開始支持DICE策略的變化。
NOR閃存CPUSS ROM在加電重置(PoR)時(shí)執(zhí)行,在將代碼執(zhí)行移交給CPUSS閃存前,先驗(yàn)證其捕獲的閃存器件啟動(dòng)代碼(在CPUSS閃存內(nèi),未暴露給用戶陣列)是否完整。完成這種DICE 0層復(fù)合器件識別符(CDI)計(jì)算需要結(jié)合使用唯一的器件密鑰(對每個(gè)閃存器件有唯一性),以及對駐留在0層中的閃存器件啟動(dòng)代碼的測量值。
國際標(biāo)準(zhǔn)文檔NIST SP800-56C介紹了在CDI計(jì)算中使用的可接受的加密單向函數(shù)。唯一器件密鑰用于0層CDI計(jì)算。0層CDI驗(yàn)證將計(jì)算值與NOR制造商提供的存儲(chǔ)在片上的預(yù)期值進(jìn)行比較。
在確認(rèn)CPUSS閃存有效后,代碼執(zhí)行就從ROM啟動(dòng)代碼傳遞到(0層)CPUSS閃存器件啟動(dòng)代碼。接下來,NOR器件將驗(yàn)證由系統(tǒng)制造商編程到用戶陣列中的系統(tǒng)級啟動(dòng)代碼。測得的系統(tǒng)級啟動(dòng)代碼值將被用于與器件配置過程中存儲(chǔ)在片上的預(yù)期值進(jìn)行比較。這兩步驗(yàn)證發(fā)生在閃存器件運(yùn)行其PoR序列的過程中,在可供主機(jī)MCU訪問之前。請注意,在整個(gè)啟動(dòng)過程中,務(wù)必確保CDI值不被暴露給更高層的代碼,當(dāng)然還有惡意行為者。
圖4 - 安全軟件分層
在完成閃存器件PoR序列的執(zhí)行后,系統(tǒng)級啟動(dòng)代碼將會(huì)暴露給主機(jī)MCU供其執(zhí)行。在確認(rèn)系統(tǒng)級啟動(dòng)代碼的真實(shí)性后,系統(tǒng)啟動(dòng)流程能夠繼續(xù)運(yùn)行。分層驗(yàn)證策略還能繼續(xù)執(zhí)行,方便主機(jī)CPU對每個(gè)新軟件層的驗(yàn)證工作進(jìn)行管理。
圖4描繪了從閃存啟動(dòng)代碼到用戶應(yīng)用的線性推進(jìn)過程。實(shí)際情況很可能復(fù)雜得多,尤其是在程序控制權(quán)被移交給操作系統(tǒng)后。請注意,一旦系統(tǒng)級啟動(dòng)代碼取得程序控制權(quán),每個(gè)后續(xù)層的證實(shí)值都能夠與本地值(存儲(chǔ)在閃存器件中)進(jìn)行比較,或更理想的話,還能夠與遠(yuǎn)程駐留(可能是云服務(wù)器)值進(jìn)行比較。如果使用DICE規(guī)范中規(guī)定的數(shù)字證書,遠(yuǎn)程驗(yàn)證的安全性還能進(jìn)一步提高。
結(jié)論
片上加密基礎(chǔ)模塊顯著緩解了傳統(tǒng)非易失性存儲(chǔ)器的受到的安全威脅。反克隆問題能夠通過主機(jī)MCU與閃存存儲(chǔ)器之間的設(shè)備配對得到解決。使用陣列分區(qū)和可配置訪問權(quán)限能夠處理非授權(quán)訪問。通過可信計(jì)算組織制定的DICE策略,解決了惡意篡改代碼的檢測和恢復(fù)問題。集成在新型閃存存儲(chǔ)器中的加密功能模塊成功地解決了傳統(tǒng)系統(tǒng)中存在的大量安全漏洞,說明外置Flash架構(gòu)能夠解決未來可能出現(xiàn)的安全問題。