來(lái)源:Microchip 作者:Xavier Bignalet 在當今市場(chǎng)上,嵌入式電子系統種類(lèi)繁多,需要接受的認證也日益增加,如適用于工業(yè)應用的 IEC62443 安全標準,有時(shí)法規也取決于系統工作方式的關(guān)鍵特性。然而,要確保安全性,不僅需要依靠法規,還應該實(shí)施負責任的基本做法。今天我們來(lái)介紹一下小型和受限嵌入式系統的固件驗證。每個(gè)嵌入式系統都基于其執行的代碼(固件、軟件和RTL 等)運行。在本系列的第一部分中,我們將介紹當連接的心臟起搏器、工業(yè)網(wǎng)關(guān)、IoT 嬰兒監視器,甚至工業(yè)機器電機的固件遭到攻擊時(shí),這些設備會(huì )發(fā)生什么。請留意第二部分,我們將在其中介紹如何在各種嵌入式系統上實(shí)現這些用例。 ![]() 很多公司的知識產(chǎn)權(IP)處于產(chǎn)品的代碼中。連接的心臟起搏器的代碼可掌控人的生死,其重要性非同小可。同樣,心臟起搏器也要接受認證。在工業(yè)泵中,代碼可以處理速度和扭矩調整率,提高電機的性能,從而領(lǐng)先競爭對手。工業(yè)網(wǎng)關(guān)代碼的架構能夠以市場(chǎng)領(lǐng)先的速度處理復雜智能工廠(chǎng)網(wǎng)絡(luò )中的海量有效載荷,但網(wǎng)關(guān)背后是一個(gè)覆蓋多個(gè)機器和操作員的工業(yè)網(wǎng)絡(luò ),F在,如果機器操作被更改,很快就會(huì )給工廠(chǎng)中的人員帶來(lái)安全隱患。IoT 嬰兒監視器代碼可確保網(wǎng)絡(luò )連接的穩健性,同時(shí)還能為父母提供與新生兒相關(guān)的隱私信息。我們在下文中介紹了一家公司的代碼對其 IP 至關(guān)重要的四個(gè)原因。公司應該考慮本文提到的各種現有標準所定義的威脅模式: 1. 遠程數字攻擊:漏洞是否在遠程訪(fǎng)問(wèn)代碼,以試圖影響目標或整個(gè)產(chǎn)品群?2. 遠程邏輯攻擊:漏洞是否在重點(diǎn)攻擊代碼中的某個(gè)錯誤,從而幫助黑客將攻擊范圍遠程擴展到整個(gè)網(wǎng)絡(luò )? 3. 本地物理攻擊:如果黑客對產(chǎn)品有物理訪(fǎng)問(wèn)權限,可以對代碼做什么(不一定要利用錯誤)? 4. 本地邏輯攻擊:如果黑客對產(chǎn)品有物理訪(fǎng)問(wèn)權限,可以利用代碼錯誤做什么? 近年來(lái),為了解決上述問(wèn)題,政府和許多行業(yè)已經(jīng)著(zhù)手制定IoT 安全法規以創(chuàng )建相關(guān)標準。例如,在工業(yè)領(lǐng)域,ISA/IEC62443 標準載明了設計工業(yè)產(chǎn)品時(shí)要遵守的安全規范。歐洲的EN303656 標準依據歐洲政府有關(guān)在當地消費市場(chǎng)銷(xiāo)售 IoT 產(chǎn)品的安全法規和指南制定。UL2900 起初主要關(guān)注軟件安全規范,現在大型公司正在將其用于消費市場(chǎng)。在所有的主要標準或法規中,您會(huì )發(fā)現,建議驗證代碼的真實(shí)性是其共同要求。那么,可以采取哪些措施來(lái)保護這些代碼?這些措施各有哪些優(yōu)缺點(diǎn)?代碼將需要通過(guò)加密操作進(jìn)行驗證,以確保其真實(shí)性。驗證可以在嵌入式系統操作過(guò)程中的不同時(shí)間點(diǎn)執行。 何時(shí)驗證代碼的真實(shí)性? 1. 引導時(shí):常見(jiàn)的技術(shù)術(shù)語(yǔ)是安全引導,它有多種實(shí)現方法:可以使用對稱(chēng)密鑰,也可以使用非對稱(chēng)密鑰,可以只驗證摘要、簽名,也可以驗證整個(gè)代碼映像。安全引導過(guò)程是為了確保只有真實(shí)代碼可以在目標嵌入式設計上執行。 2. 運行時(shí):更通用的術(shù)語(yǔ)是 IP 保護。除了安全引導和無(wú)線(xiàn)(OTA)更新之外,固件工程師可以決定在系統運行期間的任何相關(guān)時(shí)間點(diǎn)執行代碼驗證,以確保代碼沒(méi)有被篡改。 3. OTA 更新之后:在 IoT 環(huán)境中,如果通過(guò)網(wǎng)絡(luò )以“無(wú)線(xiàn)”方式推送新的代碼映像來(lái)取代現有的代碼,則在運行此新代碼之前必須先驗證其真偽。 上面描述的三種嵌入式安全功能總體上與代碼驗證規范有關(guān)。 現在,我們來(lái)介紹一下實(shí)現技術(shù),然后再評價(jià)一下各自的優(yōu)缺點(diǎn)。從根本上說(shuō),需要在安全性比較理想的企業(yè)環(huán)境中對代碼進(jìn)行“簽名”,然后在嵌入式系統中對代碼進(jìn)行“驗證”。這些“簽名”和“驗證”操作通過(guò)加密算法和對稱(chēng)或不對稱(chēng)密鑰集實(shí)現。如下圖所示,有四個(gè)主要步驟。第一步關(guān)注的是制造過(guò)程中發(fā)生的情況,以及代碼加密和簽名的處理方式。第二步是如何將代碼加載到嵌入式系統中(安全加載程序)。第三步涉及如何將代碼下載到嵌入式系統中。第四步側重于嵌入式系統制造完成后內部發(fā)生的情況,以確保在目標應用程序上運行的代碼確實(shí)是真實(shí)的。 ![]() 在制造過(guò)程中使用對稱(chēng)密鑰進(jìn)行簽名操作 對稱(chēng)加密基于共享密鑰架構,換言之,兩個(gè)相同的密鑰構成一個(gè)密鑰對(對稱(chēng)密鑰或也稱(chēng)為共享密鑰)。主要缺點(diǎn)是,如果有人可以訪(fǎng)問(wèn)其中一個(gè)密鑰,另一個(gè)共享密鑰也是相同的,系統很容易遭到破壞。此外,基本做法要求為每個(gè)設備使用不同的對稱(chēng)密鑰,這會(huì )產(chǎn)生邏輯悖論:如何在整個(gè)設備群中分配惟一對稱(chēng)密鑰。因此,由于對稱(chēng)密鑰易于實(shí)現和項目進(jìn)度的限制,開(kāi)發(fā)人員會(huì )在整個(gè)設備群中使用相同的對稱(chēng)密鑰,因此這些密鑰暴露的情況變得更加嚴重。接下來(lái)具體分析一下。第一步發(fā)生在公司環(huán)境中。 作為原始終端制造商(OEM),您的代碼將通過(guò)“哈!焙瘮祩鬟f。我們在本文中以 SHA256 為例。此哈希函數的輸出是代碼映像的32 字節摘要。 此哈希使用對稱(chēng)密鑰(用于簽名的 OEM 密鑰)執行。 輸出是“報文驗證代碼”(MAC)。 MAC 提供給合約制造商(CM),合約制造商將在生產(chǎn)基地把MAC 刷寫(xiě)到主控制器上。MAC 和對稱(chēng)密鑰均由 CM 在此階段加載。 請注意,這是供應鏈中容易出現漏洞的環(huán)節,因為無(wú)論是在制造過(guò)程中,還是在單片機中,密鑰都不應該暴露。此時(shí)密鑰會(huì )暴露給工廠(chǎng)內的操作員和將執行MAC(如果 OEM 尚未完成)的設備。 ![]() 圖 1:在 OEM 生產(chǎn)基地進(jìn)行對稱(chēng)簽名 在制造過(guò)程中使用非對稱(chēng)密鑰進(jìn)行簽名操作 這是一種更穩健且可擴展的方法,包括利用非對稱(chēng)密鑰取代對稱(chēng)密鑰。非對稱(chēng)密鑰是由兩個(gè)不同的密鑰構成的一個(gè)密鑰對,但兩個(gè)密鑰通過(guò)某種加密算法在數學(xué)上相關(guān)。我們將以ECC-P256 為例,對于嵌入式系統來(lái)說(shuō),這是最常用,也是最有效的算法之一。私鑰將用于對代碼進(jìn)行簽名,公鑰(根據私鑰計算得出)將用于驗證簽名和/或摘要。 ![]() 圖 2:在 OEM 現場(chǎng)進(jìn)行的非對稱(chēng)代碼簽名 想一想,在生產(chǎn)過(guò)程中,誰(shuí)有密鑰的訪(fǎng)問(wèn)權限? 無(wú)論選擇的是對稱(chēng)架構還是非對稱(chēng)架構,都有幾個(gè)重要的問(wèn)題需要思考。由于需要將加密密鑰加載到嵌入式系統以驗證映像,請想一想: 能否相信掌握保護您已簽名代碼的密鑰的合約制造商?切記,代碼是公司的IP。如果擁有密鑰,他們就可以訪(fǎng)問(wèn)您的代碼。 CM 是否擁有簽名密鑰或用于驗證的密鑰的訪(fǎng)問(wèn)權限?如果您想更換一家或多家合約制造商,密鑰怎么辦? 您是否因合約制造商掌握了密鑰而依賴(lài)他們? 如果雇用了多家合約制造商,如何管理各種密鑰對集? 密鑰在合約制造商那里有哪些保護措施?安全審計的結果會(huì )是什么? 涉及到制造過(guò)程中處理密鑰的物流時(shí),還有許多供應鏈問(wèn)題需要考慮。簽名密鑰永遠是最關(guān)鍵的密鑰,要盡可能地與一切事物和人員隔離,最好是使用HSM。但現在您面臨的情況是代碼驗證成為非常重要的目標,因為它可以決定您對代碼(記住這是公司的IP)的保護程度,F在,密鑰已交給合約制造商,此時(shí)漏洞暴露的可能性會(huì )增加。有幾個(gè)問(wèn)題可能需要您思考一下,包括: 您是否清楚密鑰是否已妥善存儲或在員工之間安全共享? 您的密鑰是否因制造設備的網(wǎng)絡(luò )保護不力,可以從工廠(chǎng)外部遠程訪(fǎng)問(wèn)? 您的員工是否有可能簡(jiǎn)單地使用 U 盤(pán)將驗證密鑰帶出工廠(chǎng)?如何對這種情況進(jìn)行審計和確保員工可信? 如果掌管密鑰的員工從合約制造商離職,密鑰怎么辦? 密鑰位于嵌入式系統中的哪個(gè)位置? 如果將用于驗證固件的公鑰存儲在傳統單片機的閃存內,請慎重考慮。這將使加密成為代碼二進(jìn)制映像的一部分。傳統工程師只是將密鑰(公鑰或對稱(chēng)密鑰)加載到單片機或處理器的閃存中。我們來(lái)介紹一下您應該思考的問(wèn)題和應該全盤(pán)考慮的答案。 密鑰的價(jià)值有多大?攻擊者能用它做什么? 時(shí)至今日,仍有大量設備將密鑰存儲在閃存中。攻擊者的一些基本策略是嘗試使用各種技術(shù)訪(fǎng)問(wèn)設備的存儲器,如利用緩沖區溢出(示例:Heartbleed)、HEX 文件提取或其他方法來(lái)訪(fǎng)問(wèn)位于存儲器中的密鑰。這些都是非常真實(shí)的攻擊,一些公司反映其系統中存在此類(lèi)漏洞。在這種情況下,攻擊者完全有可能開(kāi)始發(fā)起可擴展攻擊。如果每個(gè)密鑰都像在二進(jìn)制映像中一樣容易訪(fǎng)問(wèn),它們就會(huì )變得可更改、可復制,對大型機群進(jìn)行遠程訪(fǎng)問(wèn)的可能性也越來(lái)越高。如果我們對本文前面的內容還有印象,就會(huì )記得對于代碼簽名來(lái)說(shuō),使用對稱(chēng)密鑰并不是最穩健的策略,F在,我們假設用于驗證代碼的密鑰位于控制器的OTP內。OTP 方法是比較合理的初步措施,可以提高系統的穩健性,因為現在密鑰位于不可變的存儲區域。不可變并不意味著(zhù)不可訪(fǎng)問(wèn)或不可讀取,只是意味著(zhù)不可更改。代碼的價(jià)值決定對密鑰的重視程度,具體視代碼的價(jià)值或其中的 IP 含量而定。如果密鑰可訪(fǎng)問(wèn),它就可能被讀取、復制和重復使用,F在任何惡意用戶(hù)都可以合法地使用該密鑰來(lái)驗證他們自己的代碼。 如果是對稱(chēng)密鑰,情況將糟糕至極,特別是如果系統連接到云,更是雪上加霜,F在,當密鑰被訪(fǎng)問(wèn)時(shí),攻擊者可以執行其惡意代碼的MAC,并且由于用于簽名的對稱(chēng)密鑰與用于驗證代碼的對稱(chēng)密鑰相同,他們可以輕而易舉地使用checkMAC 驗證其惡意代碼。更糟糕的是,如果沒(méi)有采取密鑰多樣化措施,那么十分有必要仔細考慮擁有整個(gè)設備群的密鑰的人員名單。所有與嬰兒監視器連接的工業(yè)機器都可能被偽造,所有 OTA 更新都可能遭到破壞,而且情況可能會(huì )惡化。 現在,如果被訪(fǎng)問(wèn)的是控制器閃存甚至是 OTP 中的公鑰,那么惡意用戶(hù)便可以隨意復制和重復使用密鑰以使用戶(hù)授權合法化,并隨后在目標單片機上安裝和運行惡意代碼。 與使用對稱(chēng)密鑰架構相比,使用公鑰架構要更加穩健,因為用于對代碼進(jìn)行簽名的私鑰與用于驗證代碼的公鑰不同,但二者在數學(xué)上相關(guān)。也就是說(shuō),訪(fǎng)問(wèn)公鑰允許攻擊者查看并觸發(fā)代碼驗證,以及在執行之前進(jìn)行解密。此時(shí),問(wèn)題變成了:“現在我看到了代碼,要是我能更改代碼并繞過(guò)公鑰驗證該怎么辦?”要解決這一問(wèn)題,除了適當的加密加速器(如 Microchip 安全元件的 ECC-P256)外,還需要單片機或處理器內的BootROM功能。BootROM 將確?刂破靼l(fā)出驗證命令的存儲區域也是不可變的,無(wú)法被繞過(guò)。然而,公鑰被訪(fǎng)問(wèn)仍然是一個(gè)基本問(wèn)題。 使用對稱(chēng)密鑰與非對稱(chēng)密鑰進(jìn)行固件驗證分別有哪些優(yōu)缺點(diǎn)? ![]() 在第一部分中,我們已經(jīng)詳細介紹了在應用中實(shí)現固件驗證的重要性。應用程序代碼將需要通過(guò)加密操作進(jìn)行驗證,以確保其真實(shí)性。驗證可以在嵌入式系統運行過(guò)程中的不同時(shí)間點(diǎn)執行,如啟動(dòng)時(shí)、運行時(shí)和安全固件升級時(shí)。有許多技術(shù)可以使用非對稱(chēng)和對稱(chēng)的加密算法來(lái)實(shí)現固件驗證。這些技術(shù)都有各自的優(yōu)缺點(diǎn)。在本博客的第二部分,我們將介紹如何使用 Microchip 的安全元件和單片機實(shí)現固件驗證。 |