IoT 安全基礎知識—第 3 篇:確保安全啟動與韌體更新
資料提供者:DigiKey 北美編輯群
2020-06-18
編者說明:儘管 IoT 裝置數量激增,保護這些裝置的安全問題仍持續受到關注,尤其在工業物聯網 (IIoT) 與關鍵任務應用中,企業和個人資料可能在遭駭時受到竄改,因此安全問題就成為是否決定採用這類連線裝置的障礙點。IoT 應用的保護工作可讓人感到卻步,但實際上,在硬體安全裝置的幫助下,只需幾個相對簡單且直覺的原則,就能奠定 IoT 裝置的安全性。只要遵循完善的安全實務,這些問題即可迎刃而解。此系列文章包含數篇內容,為開發人員提供實用的指南,協助其確保從一開始就遵循最佳做法。第 1 篇探討建構起安全設計的加密演算法。第 2 篇探討私鑰、金鑰管理和安全儲存在安全的 IoT 設計中所扮演的角色。本文屬於第 3 篇,將檢驗內建於安全處理器中,用於減緩 IoT 裝置其他類型威脅的機制。第 4 篇將識別並說明如何在進階處理器中應用安全機制,協助確保已具備所需的隔離,以減緩對 IoT 裝置執行階段環境所進行的攻擊。第 5 篇將說明如何透過更高等級的安全措施,將 IoT 裝置連線到 IoT 雲端資源,延續 IoT 的安全性。
合併使用硬體式加密和安全儲存,可提供實作安全型物聯網 (IoT) 設計所需的基本功能。但部署之後,IoT 裝置將面臨多種威脅,專門破壞這些裝置、發動立即攻擊,或是進行更隱匿和進階的持續性威脅。
本文將說明開發人員如何使用構建於底層安全機制上的信任根,在 Maxim Integrated、Microchip Technology、NXP Semiconductors 及 Silicon Labs 等公司的安全處理器上提供適合執行軟體的受信任環境,以此強化 IoT 裝置的安全性。
信任根是什麼?為什麼需要信任根?
加密方法與安全金鑰是確保任何連線裝置安全的關鍵促進因素。如本系列文章的第 1 篇和第 2 篇所述,兩者提供較高層級協定用來保護資料和通訊所用的基本機制。要保護系統本身,開發人員必須考量各種漏洞,以免在嵌入式系統中影響系統運作以及軟體執行。
在典型的嵌入式系統中,系統會因電源故障或重大的軟體異常而重置,最終導致軟體啟動過程從非揮發性記憶體重新載入韌體映像檔。正常來說,軟體重新啟動是重要的安全機制,能將意外或刻意變得不穩定的系統功能還原。在連線系統中,駭客會使用各種黑帽工具來破壞軟體,而安全專家往往會建議重新啟動來反制會影響軟體執行的入侵行動。例如,FBI 在 2018 年就建議消費者與企業主重新啟動路由器,以反制當時大規模的駭客活動。
實際上,重新啟動並無法保證系統完整性。在韌體映像檔已遭到破壞的情況下,即便重新啟動,系統依然受駭客控制。為了減緩這類威脅,開發人員必須確保軟體在信任鏈上執行,而該信任鏈則是以啟動時建立的信任根為基礎,並延伸到軟體執行環境的所有層級。若想達到此安全級別,關鍵在於確保啟動過程以受信任的韌體啟動。
驗證韌體映像檔達到安全啟動
在嵌入式系統中,主機處理器會將快閃記憶體中的韌體映像檔載入到主記憶體,並開始執行該映像檔 (或是直接在具備晶片內執行 (XIP) 能力的快閃記憶體中執行)。如果駭客破壞了韌體映像檔,啟動過程則會導致系統受損。
為了在啟動前驗證韌體的完整性,開發人員會在供應鏈初期階段就開始採用程式碼簽章程序。在安全設施中,會透過由橢圓曲線數位簽章演算法 (ECDSA) 等強大加密演算法建立的私鑰/公鑰對,對系統的韌體映像檔進行簽章。雖然私鑰絕不會離開設施,但是系統公鑰會隨著系統一起提供。在啟動期間,處理器會先應用此系統公鑰來驗證韌體簽章,然後再使用該映像檔。
當然,上述過程容易讓公鑰本身受到攻擊,而且在擴充時,系統韌體容易因未經授權的替換而受到攻擊。如果公鑰在嵌入式系統中持續未受保護,駭客便可能將公鑰替換成其私自產生的私鑰/公鑰對當中的公鑰。如果駭客用其持有之私鑰所簽署的惡意韌體來替換系統的韌體映像檔,受到破壞的韌體簽章就會通過驗證程序,使啟動程序繼續執行,導致系統受到破壞。
有鑑於此,安全的系統需要有效的公鑰,且由安全設施中的安全元件所佈建。Maxim Integrated 的 DS28C36 和 Microchip Technology 的 ATECC608A 等安全 IC 既能安全儲存傳統安全元件,也能安全執行 ECDSA 等驗證演算法,以便驗證韌體簽章。
例如,在啟動前,主機處理器會透過序列介面將韌體傳送到 DS28C36。DS28C36 隨即會使用先前在安全設施中佈建的系統公鑰,來驗證韌體簽章確實是以相同安全設施中的相關私鑰產生。最後,DS28C36 會將驗證結果傳送給主機處理器,如果簽章有效,處理器便會繼續載入韌體映像檔 (圖 1)。
圖 1:開發人員可使用 Maxim Integrated 的 DS28C36 等安全 IC 來驗證韌體簽章,以避免主機處理器從受到破壞的韌體啟動。(圖片來源:Maxim Integrated)
更安全的啟動過程能保護韌體映像檔,將任何與金鑰和映像檔受破壞的疑慮消除。越來越多的處理器透過安全儲存與加密加速器構建有效的安全啟動能力,其中包括 Silicon Laboratories 的 Gecko 系列 2 處理器、NXP 的 LPC55S69JBD100、Maxim Integrated 的 MAX32520,以及 Microchip Technology 的 ATSAML11D16A 等等。這類安全處理器可利用上述功能提供所需的信任根,以建立受信任的環境,以便執行系統及應用軟體。
透過安全啟動提供信任根
此類安全處理器可提供安全啟動選項,用於確保韌體映像檔在信任根下的完整性。例如,Silicon Laboratories 的 EFR32MG21A 和 EFR32BG22 Gecko 系列 2 處理器將根據各別的硬體安全元件和虛擬安全元件 (VSE),透過多階段啟動過程來建立此信任根 (圖 2)。
圖 2:Silicon Laboratories 的 Gecko 系列 2 EFR32MG21A 處理器在多階段啟動流程的第一階段使用整合式硬體安全元件 (此處所示),而 EFR32BG22 則以虛擬安全元件開始多階段啟動流程。(圖片來源:Silicon Laboratories)
在 EFR32MG21A 中,專用的處理器核心提供加密功能,以及可安全儲存金鑰的硬體安全元件。在此專用功能的支援下,處理器會使用唯讀記憶體 (ROM) 中儲存的程式碼發起啟動流程,以驗證第一階段啟動程式 (FSB) 的程式碼。驗證通過後,就會執行 FSB 程式碼,隨即驗證第二階段啟動程式 (SSB) 的程式碼簽章。啟動序列接著會繼續執行通過驗證的 SSB,隨後再驗證應用程式碼的簽章;此程式碼通常包括系統級程式碼與更高層級的應用程式碼。最後,就會執行通過驗證的應用程式碼,且系統會按照應用程式的要求繼續運作。
由於此流程從 ROM 程式碼開始,而且僅執行經過驗證的 FSB、SSB 和應用程式碼,因此此做法能促成經驗證的信任鏈,以便執行程式碼。由於此信任鏈的第一個連結仰賴無法修改的 ROM 程式碼,因此每一個後續連結都會延續此受信任環境。同時,這個做法能讓開發人員安全地更新應用程式碼,甚至是第一與第二階段啟動程式的程式碼。只要每個程式碼套裝都提供經驗證的簽章,受信任環境便會保持不變。
以信任根提供這種安全啟動的處理器,通常都支援多種模式與選項。例如,Silicon Laboratories 的 Gecko 系列 2 處理器提供更強大的憑證式安全啟動能力。
憑證可用於例行的公鑰基礎架構 (PKI) 交易,其中包含公鑰以及對一個或多個相關憑證的引用,這些憑證最終會指向憑證機構 (CA) 核發的根憑證。該鏈中的每個憑證都可用來驗證其下層的憑證,從而形成以可信任 CA 為基礎的信任鏈。在傳輸層安全 (TLS) 的身份驗證階段,瀏覽器會依賴此信任鏈來確認網路伺服器的身份。同樣地,嵌入式系統會使用憑證來確認啟動程式或應用程式碼來源的身份。此時,多階段啟動流程會依照前述方式進行,只是要額外驗證各階段的相關憑證 (圖 3)。
圖 3:Silicon Laboratories 的 Gecko 系列 2 處理器可在啟動流程各個階段的簽章驗證期間驗證所用公鑰的憑證,從而加強系統的安全性。(圖片來源:Silicon Laboratories)
NXP 的 LPC55S69JBD100 等其他處理器,可支援多個不同的韌體映像檔選項。除了簽署的韌體映像檔,這些處理器還支援採用可信賴運算組織 (Trusted Computing Group) 裝置標識組合引擎 (DICE) 產業標準的啟動映像檔。更有第三個選項,能讓開發人員將映像儲存在支援 PRINCE 密碼的處理器快閃記憶體特殊區域中。此密碼是一種低延遲的區塊密碼,可以達到媲美其他密碼的安全強度,但佔用的矽面積卻縮小許多。PRINCE 密碼實作於 LPC55S69JBD100 中,可對儲存於處理器專用 PRINCE 快閃記憶體區域中的加密程式碼或資料,執行快速解密。由於解密用的私鑰僅能由 PRINCE 加密引擎存取,因此解密過程能保持安全。事實上,這些私鑰由 LPC55S69JBD100 的物理反複製功能 (PUF) 所產生的金鑰加密金鑰 (KEK) 保護。(若要進一步瞭解 PUF 和 KEK 的使用資訊,請參閱第 2 篇。)
此做法能讓開發人員儲存額外的韌體映像,而此能力能讓 IoT 裝置進行韌體空中 (FOTA) 更新,而無需承擔裝置「變磚」的風險。如果處理器能僅使用一個位置來儲存韌體映像,故障的韌體映像會讓處理器進入不確定或鎖定的狀態,從而導致裝置鎖定或變磚。將韌體映像儲存在 LPC55S69JBD100 支援 PRINCE 的快閃記憶體區域,開發人員即可使用後退策略,在新版本啟動後卻進入無法運作的狀態時,復原到先前可運作的韌體版本。
由於這些新的韌體映像皆須通過底層啟動流程所要求的簽章驗證檢查,因此開發人員可以充分利用安全的 FOTA,在不影響系統或其信任鏈的情況下,新增功能或修復錯誤。
結論
要達到系統與應用層級的安全,需要的執行環境,僅可允許授權軟體運作。雖然程式碼簽章驗證是促成此類環境的必要功能,但是安全系統需要使用一套更全面的能力,來打造可確保可信賴軟體執行所需的信任鏈。這些可信賴環境的基礎在於信任根,而信任根則是由安全處理器支援的安全啟動機制提供。使用此類處理器,開發人員就可實作安全的 IoT 裝置以便抵擋攻擊,避免系統軟體執行受阻或整個系統遭到劫持。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。