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