隨著嵌入式系統開發人員轉向創建連接的物聯網設備,安全性已成為他們面臨的最重要問題之一。 ARMv8-M 處理器確實支持 TrustZone,它為開發人員提供了一種新機制,幫助他們將安全軟件與更通用的用戶軟件隔離開來。 就像使用任何新工具一樣,嵌入式開發人員應該遵循一些提示,以確保他們提高系統安全性。
提示 1 — 執行安全審計以了解安全需求
在嘗試使用 TrustZone 之前,開發人員必須執行安全審核并確定其系統中需要保護的內容。 這可能因應用程序而異,但可能包括:
鑰匙
數據
庫
應用代碼
外圍設備
內存位置
通訊
根據需要保護的資源,將有不同的方法來保護該資源,例如使用加密或隔離。 TrustZone 旨在幫助開發人員隔離他們的設計。
技巧 2 — 使用安全代碼盡量減少對非安全內存的訪問
TrustZone 將微控制器硬件分為兩個區域:安全和不安全。不安全代碼只能訪問安全存儲器以執行“公開”功能。這允許用戶應用程序調用安全功能。但是嘗試訪問這些公開函數之外的任何內容都會導致錯誤。這很好,但對嵌入式開發人員來說一個潛在的問題是安全代碼可以訪問所有非安全內存區域。
開發人員在使用安全代碼訪問非安全內存時需要小心。開發人員可以使用 TT 指令來檢查該區域的權限。這將防止在安全區域中意外執行不安全代碼。開發人員應使用安全代碼來訪問安全代碼,并盡量減少對非安全內存的訪問。
技巧 3 — 從無銀行賬戶的寄存器中清除秘密信息
在 TrustZone 實現中,如果處理器在非安全模式下運行,則存在不可見的安全寄存器。 但是,有一些處理器寄存器在安全模式和非安全模式之間存儲和共享。 這意味著,如果執行了安全操作,并且部分數據存儲在存儲寄存器中,那么該過程將切換到非安全模式。 然后可以通過存儲的寄存器提供安全數據。 為了防止這種情況發生,開發人員需要確保在跳回非安全執行模式之前清除所有使用的未分區寄存器。 否則,這可能成為黑客獲得洞察力甚至訪問安全代碼區域的一種方式。
技巧 4 — 在啟動時驗證非安全映像
當 TrustZone 處理器啟動時,會自動進入安全模式。這為開發人員提供了機會,不僅可以初始化他們的處理器,還可以安全地啟動處理器。嵌入式開發人員可以驗證他們的用戶應用程序,并確保在跳轉到不安全模式并運行用戶應用程序之前一切正常。如果攻擊者設法將他們自己的代碼或應用程序插入內存,安全代碼可以在啟動時檢測到這一點,并采取必要的行動來阻止使用系統的嘗試。這可能會導致開發人員想知道:如果安全代碼區域發生變化會發生什么?安全區域被鎖定,沒有特殊工具無法修改。
技巧 5 - 同時使用非安全和安全 MPU
TrustZone 的另一個非常有趣的特性是它為不安全的內存區域和安全區域提供了一個內存保護單元 (MPU)。這意味著即使在安全內存中,開發人員也可以采取額外的預防措施來保護內存。 MPU 可以設置為監視在 RTOS 中執行的安全任務或檢測溢出任務堆棧的嘗試。這為開發人員在如何實施其安全解決方案方面提供了相當大的靈活性。
結論
對于許多開發團隊來說,為連接的設備增加安全性無疑是一項具有挑戰性的工作。 TrustZone 為開發人員提供了一個額外的工具來幫助提高安全性。 就像任何工具一樣,它需要正確使用才能有效。 我們已經在本文中查看了一些簡單的技巧,但為了保護嵌入式系統,嵌入式開發人員還有很多工作要做。