隨著物聯網、5G 和嵌入式設備成為每個人日常生活的重要組成部分,安全應該成為每個人的心聲。最重要的是,在嵌入式開發中,嵌入式設備的安全性和信任是必不可少的。然而,嵌入式設備并不總是具有良好的安全性,在過去的幾年中,出現了大量引人注目的黑客攻擊。
為什么引導安全很重要?
啟動安全是一個基本的安全層,可確保我們的設備運行我們希望它們運行的軟件。如果沒有啟動安全性,受感染的設備可能會修改其內核或應用程序以運行惡意代碼。如果沒有啟動安全性,即使在重新啟動設備后,它仍然可能受到威脅。在最壞的情況下,未經授權的代碼更改可能會拒絕遠程更新,從而永久破壞設備。這種缺乏安全性可能會給智能燈泡等小型設備帶來不便,或者如果家用電器或汽車等物品受到損害,則可能會造成經濟損失。
什么是嵌入式 Linux 中的安全啟動?
本質上,安全啟動是確保設備使用 OEM 信任的軟件啟動和運行的過程。這很重要,而且令人驚訝的是,這不是你的筆記本電腦或許多物聯網設備的標準配置。安全啟動過程使用加密技術,即公鑰、簽名和散列,以確保最初指定系統的軟件組件。在基本層面上,安全啟動依賴于被稱為“信任鏈”的概念。
引導序列中的信任鏈
嵌入式 Linux 的引導過程由一系列不同的步驟組成。信任鏈的基本概念是流程中的每個步驟在啟動該步驟之前驗證后續步驟是否有效且未經修改。如果任何步驟驗證失敗,啟動過程將失敗,設備將無法完成啟動。
在嵌入式開發中,引導嵌入式 Linux 設備的主要步驟是:執行 ROM 代碼、運行引導加載程序、啟動內核,最后掛載根文件系統。如前所述,每個步驟都負責在繼續之前驗證下一步。
只讀存儲器代碼
ROM 代碼是啟動整個過程的關鍵。電路板制造商提供 ROM 代碼,其工作是驗證和啟動引導加載程序。它在支持安全啟動的板上進行了加密簽名,并且被認為是信任根,因為它是第一步。雖然這個階段通常是安全的,但 ROM 代碼本身存在安全漏洞并非聞所未聞,因此謹慎的開發人員應該了解他們正在開發的電路板當前的關鍵問題狀態。
在安全引導過程中,引導加載程序可執行文件將被簽名。ROM 代碼將有一個公鑰,用于在啟動引導加載程序之前確認它的簽名。引導加載程序公鑰的存儲位置取決于電路板實現,但可以在例如一次性可編程存儲器 (OTP) 或可信平臺模塊硬件 (TPM) 中。一旦 ROM 確認引導加載程序簽名,它將被啟動。
引導加載程序
引導加載程序是安全引導過程信任鏈中的下一步。它的工作是驗證 Linux 內核可執行文件并啟動它。U-Boot 是許多嵌入式 Linux 系統上使用的引導加載程序的一個示例。與信任鏈中的前一個環節一樣,內核是經過簽名的。引導加載程序文件包含用于在啟動內核文件之前驗證內核文件的公鑰。由于 ROM 代碼已經驗證了引導加載程序文件,我們可以確定它的內核公鑰是正確的。一旦內核簽名被驗證,內核就會啟動,否則啟動過程中止。在嵌入式開發中,一個關鍵點是安全引導過程的每個階段只能使用已經驗證的資源,這將引導加載程序限制在自身和設備 ROM 上。
核心
內核當然是 Linux OS 的核心。它在信任鏈中的職責是驗證根文件系統。由于根文件系統通常比引導加載程序文件或內核文件大得多,因此對整個文件系統進行加密簽名是不切實際的。相反,它通常被分解成塊,每個塊都被散列成一棵樹,該樹整體包含部分文件系統的有效性。然后可以在加載塊時根據需要獨立驗證零件。內核模塊 dm-verity (Device Mapper Verity) 經常用于這個角色。
根文件系統
一旦安裝了根文件系統,initrd 進程就可以作為系統中的第一個進程啟動。
安全啟動過程現已完成,系統已啟動并運行。我們現在可以確定,在啟動過程中加載的所有組件都已通過安全啟動信任序列鏈中的上一步驗證。
結語
通過將整個 Linux 系統容器化,Pantavisor 可以輕松實施和強制執行安全啟動過程。所有工件都在簽名狀態配置文件中以聲明方式指定,因此系統的所有組件也可以在運行時進行加密驗證。
Pantavisor 使嵌入式開發人員能夠在嵌入式 Linux 系統上實現容器。利用任何標準 Linux 發行版或專業嵌入式 Linux 發行版之一來創建你的產品,然后使用容器輕松管理跨團隊和產品線的更新和補丁。