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