在當(dāng)今的市場中,嵌入式電子系統(tǒng)種類繁多,并且需要獲得越來越多的認(rèn)證,例如工業(yè)應(yīng)用的IEC62443安全標(biāo)準(zhǔn),或者有時(shí)法規(guī)取決于其操作的關(guān)鍵性質(zhì)。然而,安全性不僅僅是法規(guī),而是關(guān)于實(shí)施基本和負(fù)責(zé)任的實(shí)踐,今天我們將討論小型和受限嵌入式系統(tǒng)的固件驗(yàn)證。每個(gè)嵌入式系統(tǒng)都基于其執(zhí)行的代碼(固件、軟件、RTL 等)運(yùn)行。在本系列的第一部分中,我們將研究如果固件受到攻擊,連接的起搏器、工業(yè)網(wǎng)關(guān)、物聯(lián)網(wǎng)嬰兒監(jiān)視器甚至工業(yè)機(jī)器中的電機(jī)會發(fā)生什么。
產(chǎn)品代碼是公司許多知識產(chǎn)權(quán)(IP)所在的位置。連接起搏器的代碼,控制著人類的生命,變得極其關(guān)鍵。同樣的心臟起搏器也需要認(rèn)證。在工業(yè)泵中,代碼是使電機(jī)性能更好的原因,因?yàn)樗雀偁帉κ指玫靥幚硭俣群团ぞ卣{(diào)節(jié)。工業(yè)網(wǎng)關(guān)代碼旨在以市場上最好的速度處理復(fù)雜的智能工廠網(wǎng)絡(luò)中非常大的有效載荷,但該網(wǎng)關(guān)背后是包含機(jī)器和操作員的工業(yè)網(wǎng)絡(luò)?,F(xiàn)在,如果要改變機(jī)器操作,這很快就會成為工廠中個(gè)人的安全問題。物聯(lián)網(wǎng)嬰兒監(jiān)視器代碼可確保與網(wǎng)絡(luò)的牢固連接,但也為父母提供有關(guān)新生兒的相關(guān)和私人信息。下面,我們分享了為什么公司的代碼對其知識產(chǎn)權(quán)如此珍貴的四個(gè)原因。公司應(yīng)考慮此處提到的各種現(xiàn)有標(biāo)準(zhǔn)中定義的威脅模型:
遠(yuǎn)程數(shù)字攻擊:漏洞是否遠(yuǎn)程訪問代碼以影響目標(biāo)或整個(gè)產(chǎn)品系列?
遠(yuǎn)程邏輯攻擊:漏洞利用是否集中在代碼中的錯(cuò)誤上,該錯(cuò)誤可以幫助黑客在網(wǎng)絡(luò)上遠(yuǎn)程擴(kuò)展攻擊?
本地物理攻擊:如果黑客可以物理訪問產(chǎn)品,可以對代碼執(zhí)行哪些操作,而不一定是利用錯(cuò)誤?
本地邏輯攻擊:如果黑客對產(chǎn)品具有物理訪問權(quán)限,代碼錯(cuò)誤中可以利用什么?
為了解決上述問題,近年來,政府和行業(yè)已開始制定物聯(lián)網(wǎng)安全法規(guī)以創(chuàng)建標(biāo)準(zhǔn)。例如,在工業(yè)市場中,ISA/IEC62443標(biāo)準(zhǔn)記錄了設(shè)計(jì)工業(yè)產(chǎn)品的安全實(shí)踐。來自歐洲的EN303656遵循歐洲政府的安全法規(guī)和指南,在當(dāng)?shù)叵M(fèi)市場銷售物聯(lián)網(wǎng)產(chǎn)品。UL2900 最初非常注重軟件安全實(shí)踐,現(xiàn)在正被大公司視為消費(fèi)者市場。在所有主要標(biāo)準(zhǔn)或法規(guī)中,您會發(fā)現(xiàn)建議驗(yàn)證代碼是否真實(shí)的常見要求。
那么,可以做些什么來保護(hù)這段代碼,需要權(quán)衡什么呢?
代碼需要通過加密操作進(jìn)行驗(yàn)證,以確保它是真實(shí)的。驗(yàn)證可以在嵌入式系統(tǒng)操作期間的不同時(shí)間點(diǎn)執(zhí)行。
何時(shí)驗(yàn)證代碼的真實(shí)性?
啟動(dòng)時(shí):常見的技術(shù)術(shù)語是安全啟動(dòng),它有多種方法可以使用對稱密鑰或非對稱密鑰實(shí)現(xiàn),僅驗(yàn)證摘要、簽名或整個(gè)代碼映像。安全啟動(dòng)過程旨在確保在目標(biāo)嵌入式設(shè)計(jì)上僅執(zhí)行正版代碼。
在運(yùn)行時(shí):這里更通用的術(shù)語是 IP 保護(hù)。固件工程師可以決定在系統(tǒng)運(yùn)行期間的任何相關(guān)點(diǎn)實(shí)施代碼驗(yàn)證,除了安全啟動(dòng)和無線 (OTA) 更新之外,以確保它沒有被篡改。
OTA更新后:在物聯(lián)網(wǎng)世界中,一旦通過網(wǎng)絡(luò)“無線”推送新代碼圖像以替換現(xiàn)有代碼圖像,該新代碼必須在運(yùn)行之前驗(yàn)證為真實(shí)代碼。
上述三個(gè)嵌入式安全功能總體上與代碼驗(yàn)證實(shí)踐相關(guān)。
現(xiàn)在,讓我們看一下實(shí)現(xiàn)技術(shù),然后我們將回顧它們的權(quán)衡。從根本上說,代碼需要在企業(yè)環(huán)境中進(jìn)行“簽名”,這是理想情況下安全的,然后在嵌入式系統(tǒng)中進(jìn)行“驗(yàn)證”。這些“簽名”和“驗(yàn)證”操作由加密算法和對稱或非對稱密鑰集執(zhí)行。有四個(gè)主要步驟,如下圖所示。第一個(gè)是查看制造過程中發(fā)生的情況以及如何處理代碼加密和簽名。第二個(gè)是代碼如何加載到嵌入式系統(tǒng)(安全加載器)中。第三步涉及如何將代碼下載到嵌入式系統(tǒng)中。第四步側(cè)重于嵌入式系統(tǒng)制造后內(nèi)部發(fā)生的情況,以確保在目標(biāo)應(yīng)用程序上運(yùn)行的代碼確實(shí)是真實(shí)的。
使用對稱密鑰在制造過程中對操作進(jìn)行簽名
對稱加密基于共享密鑰體系結(jié)構(gòu),換句話說,一對完全相同的兩個(gè)密鑰(對稱密鑰或也稱為共享密鑰)。主要的缺點(diǎn)是,如果有人訪問一個(gè)密鑰,另一個(gè)共享密鑰是相同的,并且系統(tǒng)很容易被擊敗。此外,基本實(shí)踐要求為每個(gè)設(shè)備使用不同的對稱密鑰,這會產(chǎn)生一個(gè)邏輯悖論:如何將唯一的對稱密鑰配置到整個(gè)設(shè)備隊(duì)列中。因此,由于易于實(shí)施和項(xiàng)目進(jìn)度限制,開發(fā)人員對整個(gè)設(shè)備群使用相同的對稱密鑰,因此對這些密鑰的暴露變得更糟。但是讓我們來看看它。第一步發(fā)生在您的公司環(huán)境中。
作為原始最終制造商 (OEM),您的代碼將通過“哈?!焙瘮?shù)傳遞。我們在這里使用 SHA256 作為示例。此哈希的輸出是代碼圖像的 32 字節(jié)摘要。
該哈希是使用對稱密鑰(簽名 OEM 密鑰)執(zhí)行的。
輸出是“MAC”或消息身份驗(yàn)證代碼。
MAC 提供給合同制造商 (CM),后者將在生產(chǎn)現(xiàn)場刷新主控制器。在此階段,MAC 和對稱密鑰都由 CM 加載。
請注意,這是供應(yīng)鏈漏洞發(fā)生的地方,因?yàn)槊荑€永遠(yuǎn)不應(yīng)該暴露,當(dāng)然不應(yīng)該在制造過程中或微控制器內(nèi)暴露。此時(shí)此刻,密鑰將暴露給工廠內(nèi)的操作員以及如果 OEM 尚未完成將執(zhí)行 MAC 的設(shè)備。
圖 1:OEM 站點(diǎn)的對稱簽名
使用非對稱密鑰在制造期間對操作進(jìn)行簽名
更可靠且可擴(kuò)展的方法包括利用非對稱密鑰而不是對稱密鑰。非對稱密鑰是兩個(gè)密鑰不同但通過加密算法在數(shù)學(xué)上相關(guān)的密鑰對。例如,我們將使用ECC-P256,這是嵌入式系統(tǒng)中最常用和最有效的算法之一。私鑰將對代碼進(jìn)行簽名,公鑰(根據(jù)私鑰計(jì)算)將驗(yàn)證簽名和/或摘要。
圖 2:OEM 站點(diǎn)的非對稱代碼簽名
問問自己,在您的制造過程中,誰可以訪問您的密鑰?
無論您選擇對稱還是非對稱架構(gòu),都有幾個(gè)重要問題要問自己。由于您需要在嵌入式系統(tǒng)中加載加密密鑰以驗(yàn)證映像,因此請問自己:
您能否信任您的合同制造商提供保護(hù)您簽名代碼的密鑰?請記住,您的代碼是您公司的 IP。如果他們有密鑰,則可以訪問您的代碼。
您的 CM 是否有權(quán)訪問簽名密鑰或用于驗(yàn)證的密鑰?當(dāng)您想要更改一個(gè)或多個(gè)合同制造商時(shí),您的密鑰會發(fā)生什么情況?
您是否因?yàn)閾碛忻荑€而依賴您的合同制造商?
如果您雇用多個(gè)合同制造商,您如何管理各種密鑰對集?
合同制造商如何保護(hù)密鑰?安全審核結(jié)果是什么?
當(dāng)涉及到制造中處理鑰匙的物流時(shí),也有很多供應(yīng)鏈問題需要考慮。簽名密鑰始終是與所有可能的人隔離的最關(guān)鍵密鑰,最好使用 HSM。但是現(xiàn)在您處于這樣一種情況,即代碼驗(yàn)證成為一個(gè)非常高的價(jià)值目標(biāo),因?yàn)樗刂浦Wo(hù)代碼的程度(請記住,這是您公司的 IP)。密鑰現(xiàn)在掌握在您的合同制造商手中,這是您的漏洞暴露增加的時(shí)候。您可能想問自己幾個(gè)問題,包括:
您知道您的密鑰是否安全存儲或在員工之間共享嗎?
由于制造設(shè)備網(wǎng)絡(luò)保護(hù)不佳,您的密鑰是否可以從工廠外部遠(yuǎn)程訪問?
您的員工是否可以簡單地使用USB記憶棒離開包含驗(yàn)證密鑰的工廠,以及如何對其進(jìn)行審核和信任?
如果負(fù)責(zé)鑰匙的員工離開合同制造商的工作,鑰匙會怎樣?
您的嵌入式系統(tǒng)中的密鑰在哪里?
如果您有公鑰在傳統(tǒng)微控制器閃存中驗(yàn)證固件,請三思而后行。然后,加密將成為代碼的二進(jìn)制映像的一部分。傳統(tǒng)的工程師只需在微控制器或處理器的閃存中加載密鑰(公共或?qū)ΨQ)。讓我們談?wù)勀銘?yīng)該問自己的問題和你應(yīng)該思考的答案。
此密鑰有多大價(jià)值,攻擊者可以用它做什么?
截至今天,仍然有大量設(shè)備將密鑰存儲在閃存中。攻擊者的一些基本策略是嘗試使用各種技術(shù)訪問設(shè)備的內(nèi)存,例如緩沖區(qū)溢出(例如:Heartbleed)、HEX 文件提取或其他方法來訪問位于內(nèi)存中的密鑰。這些都是非常真實(shí)的攻擊,一些公司正在報(bào)告其系統(tǒng)中的此類漏洞。此時(shí),所有賭注都已關(guān)閉,開始發(fā)起可擴(kuò)展的攻擊。如果每個(gè)密鑰都可以像二進(jìn)制映像中一樣訪問,那么它們就會變得可更改、可重現(xiàn),并且遠(yuǎn)程訪問大型隊(duì)列變得越來越可能。如果我們還記得本文前面的內(nèi)容,使用對稱密鑰并不是最可靠的代碼簽名策略?,F(xiàn)在讓我們假設(shè)驗(yàn)證代碼的密鑰位于控制器內(nèi)的 OTP 內(nèi)。OTP 方法是使您的系統(tǒng)更加健壯的合乎邏輯的第一步,因?yàn)楝F(xiàn)在密鑰位于不可變的內(nèi)存區(qū)域中。不可變并不意味著不可訪問或不可讀,它只是意味著不可更改。根據(jù)代碼中的值或 IP 值,代碼的值是應(yīng)重視密鑰的金額。因此,如果您的密鑰是可訪問的,則可以讀取、復(fù)制和重復(fù)使用?,F(xiàn)在,任何流氓用戶都可以合法地使用該密鑰來驗(yàn)證自己的代碼。
如果是對稱密鑰,那將是最壞的情況,尤其是在系統(tǒng)連接云的情況下。當(dāng)密鑰被訪問時(shí),攻擊者現(xiàn)在可以執(zhí)行其流氓代碼的MAC,并使用checkMAC輕松驗(yàn)證它,因?yàn)楹灻麑ΨQ密鑰與驗(yàn)證代碼的對稱密鑰相同。更糟糕的是,如果沒有使用密鑰多樣化,那么仔細(xì)考慮擁有整個(gè)設(shè)備組密鑰的人員列表非常重要。您所有連接的嬰兒監(jiān)視器工業(yè)機(jī)器都可能被偽造,您的所有 OTA 更新都可能損壞,情況可能會變得更糟。
如果它是控制器閃存中的公鑰,甚至是訪問的 OTP,則流氓用戶現(xiàn)在可以復(fù)制密鑰并隨意重復(fù)使用它以使用戶授權(quán)合法化,然后安裝惡意代碼并在目標(biāo)微控制器上運(yùn)行它。
使用公鑰基礎(chǔ)結(jié)構(gòu)與對稱密鑰體系結(jié)構(gòu)要健壯得多,因?yàn)閷Υa進(jìn)行簽名的私鑰是不同的,但在數(shù)學(xué)上與驗(yàn)證代碼的公共相關(guān)。也就是說,訪問公鑰允許攻擊者查看并觸發(fā)代碼的驗(yàn)證,還可以在執(zhí)行之前進(jìn)行解密。此時(shí),問題就變成了,“現(xiàn)在我看到了代碼,如果我更改代碼并繞過公鑰的驗(yàn)證怎么辦?為了解決這個(gè)問題,除了適當(dāng)?shù)募用芗铀倨鳎ㄈ?a target="_blank">Microchip安全元件的ECC-P256)之外,還需要微控制器或處理器內(nèi)部的BootROM功能。BootROM 將確保控制器發(fā)出驗(yàn)證命令的內(nèi)存區(qū)域也是不可變的,并且無法繞過。然而,訪問公鑰仍然是一個(gè)基本問題。
使用對稱密鑰與非對稱密鑰進(jìn)行固件驗(yàn)證的優(yōu)缺點(diǎn)是什么?
鑰匙 | 親 | 缺點(diǎn) |
對稱 |
少: 簡單加密 基本實(shí)現(xiàn) |
好多: 被盜時(shí)很容易復(fù)制密鑰 可擴(kuò)展攻擊的風(fēng)險(xiǎn)更高 難以部署 管理唯一密鑰隊(duì)列 |
非 對稱 |
好多: 強(qiáng)大的加密技術(shù) 可擴(kuò)展的關(guān)鍵基礎(chǔ)架構(gòu) 使用 ECC 密鑰優(yōu)化內(nèi)存占用 |
一些: 固件驗(yàn)證沒有缺點(diǎn) ECDSA比SHA256更長的時(shí)間 |
在第 1 部分中,我們詳細(xì)討論了在應(yīng)用程序中實(shí)現(xiàn)固件驗(yàn)證的重要性。您的應(yīng)用程序代碼需要使用加密操作進(jìn)行驗(yàn)證,以確保它是真實(shí)的。驗(yàn)證可以在嵌入式系統(tǒng)操作期間的不同時(shí)間點(diǎn)執(zhí)行,例如在啟動(dòng)時(shí)、運(yùn)行時(shí)和安全固件升級期間。有許多技術(shù)可以使用非對稱和對稱加密算法實(shí)現(xiàn)固件驗(yàn)證。這些技術(shù)中的每一種都有自己的優(yōu)勢和權(quán)衡。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5060文章
18980瀏覽量
302260 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2902文章
44122瀏覽量
370432 -
電機(jī)
+關(guān)注
關(guān)注
142文章
8884瀏覽量
144897
發(fā)布評論請先 登錄
相關(guān)推薦
評論