早期的汽車電子是一個封閉的系統(tǒng),不與外界互聯(lián),然而隨著汽車電子智能化和網(wǎng)聯(lián)化的發(fā)展,信息安全正在占據(jù)重要的位置。信息安全ISO21434也隨之出臺,汽車電子對信息安全的要求也越發(fā)的嚴格,相關(guān)的需求日益增多。
安全啟動正是汽車電子信息安全環(huán)節(jié)中的重要一環(huán),安全啟動(secure boot)可以有效防止攻擊者惡意修改軟件,保護用戶的隱私。安全啟動保證啟動的軟件是可信任的軟件,是安全的,沒有被篡改的軟件。目前MCU側(cè)安全啟動的主流技術(shù)方向有以HSM安全硬件支撐的安全啟動方案以及不使用安全硬件的軟件級安全啟動方案。
本文主要講述MCU側(cè)安全啟動機制的原理,簡要介紹了可信根和信任鏈,并簡要介紹軟件安全啟動方案對可信根的論證分析。最后簡要介紹基于安全硬件的安全啟動方案以及使用不使用安全硬件的軟件級安全啟動方案。
MCU如何保證軟件的安全啟動
2.1可信根
不論MCU還是SOC,均有一個“信任根”,“信任根”是信息安全信心的來源。“信任根”是密碼系統(tǒng)中始終可以信任的來源。信任根是一個不可變的過程或身份,用作信任鏈中的第一個實體。因此,沒有祖先實體可以為信任根的初始代碼和數(shù)據(jù)狀態(tài)提供可信任的證明(以摘要或其他方式)。換句話說,嵌入式開發(fā)人員的信任根是一個不可更改的身份和最小的軟件集,可以成功地驗證自己并促進系統(tǒng)上的安全操作。
最終歸納一下:必須有一段程序或者硬件可以看作不會被攻破的一個實體,那么這段程序或硬件被稱為信任根。
2.2信任鏈
如下所示,信任根(Root of Trust)驗證Secure BootLoader是否可信任,本質(zhì)上是驗證Secure BootLoader是否被篡改,專業(yè)術(shù)語為驗證Secure BootLoader的完整性,如果Secure BootLoader可信任,那么信任根和Secure BootLoader均是可信任的,Secure BootLoader驗證Secure App是否是可信的,如果可被信任,那么信任根、Secure BootLoader、Secure App三者均是可信任的,這三者層層相連,下層驗證上層,保證上層可信,組成了一個鏈條,鏈條上的每一個環(huán)節(jié)均是可信的,那么這個可信的鏈條就成為信任鏈。
Root of Trust(RoT)—— Secure BootLoader——Secure App —— User App
信任根——The Root of Trust(RoT)
2.3實現(xiàn)安全啟動的要點
上述分析可知,要實現(xiàn)安全啟動,需要兩點:1.可信根的確定 2.確定驗證方法,形成信任鏈。
2.3.1 可信根的確定
由于MCU一般不直接與網(wǎng)絡(luò)相連接,網(wǎng)絡(luò)很難直接攻擊可信根,因此,MCU側(cè)安全啟動的可信根可分為兩種方案。
方案一:利用芯片的安全模塊或者其他安全硬件。簡單歸納為:利用安全硬件作為可信根。例如英飛凌Tc3xx系列的HSM模塊。這個基本上不用做太多TARA分析,也不用向OEM做過多解釋。當然這種方式屬于土豪方案,軟硬件都需要花錢,優(yōu)點也是很明顯:有獨立的核來保證可信,是真正硬件上的可信?。。。。?!
方案二:根據(jù)ISO21434進行TARA分析,得出使用軟件的最底層BootLoader作為可信根的結(jié)論。這種方案優(yōu)點很明顯:便宜,好擴展。缺點也很明顯:不是硬件可信,是一個純軟件方案,需要得到OEM的確任。
這種方案不是沒有可取之處的。首先MCU在實車上一般不聯(lián)網(wǎng),其次刷新流程是固定的,并且不是所有Pflash的地址均可以被刷新,進一步說,程序也是有模式控制的,工廠模式,開發(fā)模式,運輸模式,下線模式,售后模式,正常模式等等,不同的模式對應(yīng)著不同的軟件,模式的切換(安全刷新)也是可信的(這點一般由TARA分析得出)。此外,一方面,由于部分汽車機械結(jié)構(gòu)的特殊設(shè)計,控制器可能會和機械結(jié)構(gòu)焊死,一旦強拆會導(dǎo)致汽車直接無法正常使用,一般黑客也不會做物理強拆。另外一方面,一般都需要關(guān)閉芯片的debug功能,使得芯片無法連接調(diào)試器,不會在任何模式下被輕易的更改軟件,以英飛凌Tc3xx為例,關(guān)閉芯片debug功能又是由OTP(刷寫一次就不可更新的存儲)保證的,很難被攻破。當然電路上也可以強行做保護,比如說,強行連接調(diào)試器會導(dǎo)致控制器供電直接中斷或者外狗直接復(fù)位軟件進而斷開調(diào)試器連接。
從上述分析,基本可得出一個結(jié)論:機械物理上無法使用debug線連接控制器,即使被拆卸下來,也由于電路保護、debug口的密碼保護,使得調(diào)試器無法正常連接。通信端連接由于安全模式切換以及安全刷新的存在,最底層的BootLoader無法被更新。因此,最底層的BootLoader在開發(fā)、生產(chǎn)、銷售、售后任何一個環(huán)節(jié)等不會被篡改,可作為可信任根。
2.3.2 驗證方法
一般要形成信任鏈,就缺不了密碼學(xué)的參與。其實不管是軟件方案還是硬件方案,本質(zhì)還是靠密碼學(xué)形成信任鏈的。前文說過,驗證方法本質(zhì)上是驗證完整性,因此,安全啟動一般使用MAC校驗。
MAC檢驗是Message Authentication Codes的縮寫,也稱消息認證碼,用于檢查消息的完整性以及身份驗證,保證消息不被篡改。
常見的MAC算法有:HMACMD5、HMACSHA1、HMACSHA256、CMAC-AES128、CMAC-AES256等等。
簡而言之,驗證方法一般是使用MAC校驗保證上層軟件的完整性,從而實現(xiàn)信任鏈。
安全啟動方案詳解
3.1 Tc3xx的芯片啟動流程簡述
Tc3xx芯片手冊中的芯片啟動流程叫SSW,英飛凌的BootRom的啟動核為Cpu0,其他核處于Halt狀態(tài)。BootRom是英飛凌的Boot,跳轉(zhuǎn)到用戶空間的第一條指令是由用戶選擇的啟動配置決定。我們正常用到的啟動模式就是BMI Header,BMI Haeder可以配置在4個位置,分別為0xA0000000,0xA0020000,0xA000FFE0,0xA001FFE0。
整體的流程如下圖所示,BootRom會按照順序查找這四個位置的BMI Header的配置,并檢查其有效性。如果配置有效,則根據(jù)配置跳轉(zhuǎn)到用戶代碼。BMI Header配置信息為: 用戶空間啟動地址,Boot Mode Index信息,Boot Mode Header ID,StartAddress(PFlash的起始地址),EndAddress(PFlash的結(jié)束地址),CRCRange(PFlash的CRC值),CRCRange取反,CRC header(ABM Haeder CRC值),CRC header取反。
設(shè)計多個BMI Header是為了做冗余備份,保證在一個或多個損壞時,芯片仍然可以正常啟動。
在跳轉(zhuǎn)進用戶空間地址后,程序會按照設(shè)計的啟動流程啟動,一般情況下,用戶空間分為BootLoader + BSW兩個層級,英飛凌的BootRom會先跳轉(zhuǎn)進BootLoader,BootLoader運行之后,再跳轉(zhuǎn)進BSW運行,然后初始化外設(shè),啟動Autosar OS。
簡要概括一下英飛凌系列的啟動流程為:
1.啟動時,BootRom會根據(jù)用戶配置,選擇啟動方式,一般是BMI Header方式啟動。
2.BMI Header存在芯片PFlash的4個位置中, BootRom按序?qū)ふ业谝粋€有效的BMI Haeder。
3.尋找到第一個有效的BMI Haeder之后,BootRom跳轉(zhuǎn)進用戶空間的地址。
4.跳轉(zhuǎn)進用戶空間運行BootLoader,檢查BSW有效之后,跳轉(zhuǎn)進BSW。
5.運行BSW,啟動Autosar OS,完成整個控制器啟動。
3.2基于Tc3xx的HSM安全啟動方案
英飛凌Tc3xx系列支持硬件安全模塊HSM,當采用HSM時,啟動流程有了一些變化,英飛凌Tc3xx的BootRom除了正常查詢BMI Header之外,還會等待HSM啟動以及HSM對配置區(qū)域完整性校驗的完成,然后Signal HSM to start user code handling,之后再跳進用戶空間的地址。此外,還需注意一點,Tc3xx的EEPROM會被強制分配一部分到HSM,導(dǎo)致總的EEPROM大小變小,這些EEPROM本質(zhì)上就是HSM的安全存儲所用的空間,完整性校驗預(yù)存的MAC值,就存儲在此處。使用HSM的英飛凌啟動流程如下圖所示,
我們在采用HSM作為安全啟動方案時,我們一般會有兩種選擇:
方案一:英飛凌的BootRom等待HSM完成之后,再跳轉(zhuǎn)進用戶空間地址
方案二:英飛凌的BootRom不等待HSM完成之后,直接跳轉(zhuǎn)進用戶空間地址,在用戶空間檢查HSM的安全校驗是否正常。
HSM對于設(shè)置區(qū)域的完整性校驗和正常的代碼啟動是并行的。正常情況下,采用方案一作為安全啟動的方案,但是某些情況下,基于HSM安全啟動方案的系統(tǒng)魯棒性、降低控制器變磚的可能性以及減少啟動時間,可以選擇方案二。
方案一是標準的安全硬件支持下的安全啟動方案,方案二是有一定的概率被黑客攻擊,修改跳轉(zhuǎn)到用戶空間的地址。
整個HSM在啟動過程中主要流程如下圖所示,主要是對配置的Block區(qū)域即設(shè)定的需要校驗的區(qū)域進行MAC計算,得出的MAC值與預(yù)存在HSM的MAC值比較,若相等則代表驗證成功,否則校驗失敗。
3.3基于Tc3xx的軟件安全啟動方案
基于Tc3xx的軟件啟動方案不使用HSM安全硬件,節(jié)約了一大筆費用。Tc3xx啟動流程還是按照正常的流程啟動,BootRom尋找BMI Header,跳轉(zhuǎn)進用戶空間。但是整個軟件方案需要特殊處理。
Pflash的用途需要特殊劃分,有一塊區(qū)域必須用作信任根,作為永久性ROM固化在控制器中,這是一塊人為劃分的不可刷新區(qū)域,至少對客戶是不開放的,我們稱為Start Boot,作用相當于英飛凌的BootRom。Start Boot需要一小塊EEPROM存放密鑰,預(yù)存的MAC校驗值等等,這塊EEPROM是軟件劃分的產(chǎn)物,實現(xiàn)軟件隔離,從軟件以及驅(qū)動層級無法訪問這塊區(qū)域。Start Boot是控制器用戶空間啟動的起點,在Start Boot中,會初始化電源,初始化必需的外設(shè),初始化EEPROM驅(qū)動等等。
Start Boot啟動校驗的流程和HSM保持一致,本質(zhì)上安全啟動的流程大多大差不差,區(qū)別在于使用了安全硬件還是采用了純軟件方案模擬。然而,作為軟件供應(yīng)商或者自身可以可控的軟件方案,為了適應(yīng)客戶需求,這邊有一些變型的方案,像極了上學(xué)時老師講的變型題。變型的重要需求如下:
1.為了滿足啟動時間的的要求,則縮短安全啟動校驗時間,那么采用部分校驗方案。
2.MAC校驗存儲的EEPROM為非安全存儲,需要對存儲做安全策略。
3.為了滿足整體的安全啟動需求,則將整體軟件的校驗挪至BSW。
上述需求第一和第三點,整體的安全啟動策略變更如圖所示,將安全啟動劃分成兩次完成,第一次計算最為核心代碼區(qū)域的MAC值,計算范圍為0x8110 0000 ~ 0x813F FFFF,計算范圍客戶可自行調(diào)整配置,所得到的MAC值和預(yù)存的MAC1比較,相等則允許跳轉(zhuǎn)。此方案縮短了啟動時間,又保證了軟件是大概率可靠的。跳轉(zhuǎn)到BSW之后,采用周期性校驗法,在軟件平穩(wěn)運行時,分段累積計算MAC值,計算完成后與MAC2相比較,若發(fā)生篡改,則軟件直接復(fù)位停留在Customer Boot等待刷新。
上述需求第二點,對于安全存儲,一般會采用分散存儲,熟稱加鹽。此外還會加密存儲,密鑰一般寫死在代碼中。以2K EEPROM,存儲32字節(jié)的MAC值為例,如下圖所示,每個單元格代表16個字節(jié),MAC值的每個字節(jié)按照一定的自定義算法散布在各個單元格中,每個單元格內(nèi),單字節(jié)的MAC值,又拆分成高字節(jié)和低字節(jié)兩部分,按照頭部加密的信息散布在16字節(jié)中。
總結(jié)
通過TARA分析,可以得出結(jié)論:在不使用的HSM安全硬件的情況下,完全可以通過軟件方案實現(xiàn)安全啟動,實現(xiàn)降本增效。