引導加載程序是嵌入式系統(tǒng)中一個特別有趣的組件,引導加載程序經(jīng)常被嵌入式開發(fā)團隊忽視并在最后一刻開發(fā),盡管它們通常很難實現(xiàn)并為系統(tǒng)創(chuàng)建關(guān)鍵功能。
什么是安全引導加載程序?
安全引導加載程序不同于標準的普通引導加載程序,因為引導加載程序通常是:
信任鏈的一部分
驗證新的軟件映像
驗證軟件映像的完整性
需要訪問加密算法和加速器
非安全引導加載程序通常只使用校驗和來確保軟件映像是完整的,但在接受并嘗試運行映像之前幾乎沒有做任何其他事情,從安全角度來看這是非常危險的。
安全引導加載程序試圖解決四個主要問題:
防止固件逆向工程
防止未經(jīng)授權(quán)的固件修改
加載未經(jīng)授權(quán)的固件
在未經(jīng)授權(quán)的設(shè)備上加載固件
安全引導加載程序的行為方式有很多種,讓我們快速、高層次地看一下整個過程是如何工作的。
引導加載過程
在嵌入式開發(fā)中,當準備好部署新的固件映像時,公司將生成一個固件簽名,該簽名將伴隨將在現(xiàn)場部署的固件。為新固件生成hash,然后使用公司私鑰對其進行加密以生成簽名。然后通過引導加載程序?qū)⒑灻凸碳?加密或未加密)發(fā)送到嵌入式系統(tǒng)。如果你查看微控制器供應(yīng)商提供的許多安全引導加載程序示例,你通常會發(fā)現(xiàn)安全引導加載程序?qū)⒔邮芗用艿墓碳诚瘢部赡軙l(fā)送未加密的映像,具體取決于引導加載程序的配置方式。即使安全引導加載程序確實接受加密映像,該映像通常在運行中未加密,然后將其本地存儲在閃存中的某個地方(可能是內(nèi)部或外部)。
引導加載程序收到映像后,將使用存儲在系統(tǒng)中的公鑰解密簽名以獲得固件的原始hash。然后,引導加載程序可以散列接收到的未加密圖像,并比較兩者是否相等。如果它們相等,則引導加載程序已驗證固件映像是真實的(來自簽名)并且其完整性沒有受到損害(來自哈希)。此時,引導加載程序可以完成更新固件和引導新軟件映像的過程。
如果黑客決定嘗試將自己的圖像放置在設(shè)備上,他們將需要擁有公司的私鑰才能生成適當?shù)淖C書。如果他們以某種方式可以訪問固件并想要進行更改,他們將再次需要能夠通過簽名對新hash進行身份驗證,而這是他們無法做到的。如果他們試圖向設(shè)備發(fā)送新固件,引導加載程序?qū)⒛軌驒z測到它不是有效的固件,然后會丟棄映像并繼續(xù)運行它已經(jīng)運行的應(yīng)用程序代碼。
微控制器需要硬件支持什么?
開發(fā)安全的引導加載程序可能具有挑戰(zhàn)性。根據(jù)安全級別和所需功能,并非每個微控制器都適用。嵌入式開發(fā)人員通常需要支持以下功能的微控制器:
硬件隔離
硬件加密引擎
內(nèi)存保護單元 (MPU)
真隨機數(shù)生成器 (TRNG)
使引導加載程序不可變的閃存位
安全存儲密鑰的地方
這些只是微控制器實現(xiàn)安全引導加載程序解決方案所需的一些功能。你可以想象,成功在于細節(jié),并且需要對硬件和安全引導加載程序解決方案有專業(yè)的了解。因此,致力于安全嵌入式產(chǎn)品的團隊應(yīng)該盡早開始他們的安全引導加載程序解決方案,而不是等到最后一刻才嘗試實施它!
結(jié)論
安全引導加載程序比傳統(tǒng)的引導加載程序?qū)嵤┥婕案?。他們將更新和運行新應(yīng)用程序映像的能力與驗證和驗證新映像完整性的需要結(jié)合在一起。這要求引導加載程序?qū)崿F(xiàn)加密服務(wù)。嵌入式開發(fā)人員可以利用特定于微控制器的安全引導加載程序解決方案,從而降低團隊實施安全引導加載程序解決方案所需的安全知識。如果這些解決方案還不夠,團隊必須盡快啟動他們的安全引導加載程序解決方案,因為成功構(gòu)建、測試和驗證它需要幾個月的時間。