在現(xiàn)代汽車嵌入式系統(tǒng)中,,高度安全的數(shù)據(jù)存儲是必不可少的,,尤其是在面對日益高明的網(wǎng)絡(luò)攻擊時。本文將介紹設(shè)計師正確使用閃存的步驟,。
對電子嵌入式系統(tǒng)的安全和安全保障需求從未有今天這樣強(qiáng)烈。隨著汽車的自動化程度不斷提高,我們需要提高其安全保障水平,,防止它們被黑客攻破。對于采用大量機(jī)器人與物聯(lián)網(wǎng)(IoT)設(shè)備,,需要處理敏感數(shù)據(jù)的工廠來說,,同樣如此。
對所有此類嵌入式系統(tǒng)來說,,非易失性閃存存儲器必不可少,。閃存可用作代碼存儲、文件系統(tǒng)存儲或直接運行代碼的微控制器單元(MCU)存儲器,。如果要實現(xiàn)系統(tǒng)安全性,,必須首先確保系統(tǒng)使用的閃存存儲器是安全的。本文探討閃存存儲器的安全需求,,幫助開發(fā)人員為汽車,、工業(yè)和通信應(yīng)用構(gòu)建安全有保障的嵌入式系統(tǒng),。
閃存存儲器的使用方式
如果我們仔細(xì)觀察現(xiàn)代汽車的電子系統(tǒng),我們會發(fā)現(xiàn)閃存在整車上都得到廣泛使用,。隨著系統(tǒng)的復(fù)雜性增加,,我們需要更大容量的代碼存儲和數(shù)據(jù)存儲。車內(nèi)的所有子系統(tǒng),,包括高級駕駛輔助系統(tǒng)(ADAS),、儀表系統(tǒng)(即將與信息娛樂合并)、傳動和車身系統(tǒng),,都需要嵌入式系統(tǒng)才能實時運行,。
所有這些嵌入式系統(tǒng)都需要某種類型的閃存存儲器,用作代碼存儲和數(shù)據(jù)存儲,。例如,,圖1所示的是一個使用多個NOR閃存器件的ADAS子系統(tǒng)。
圖1.該ADAS子系統(tǒng)使用多個NOR閃存
在當(dāng)今的ADAS應(yīng)用中,,復(fù)雜的算法和人工智能流程依賴在閃存存儲器中存儲的代碼和數(shù)據(jù)來運行,。存儲必須提供故障安全和安全保障,因為系統(tǒng)故障或惡意攻擊可能導(dǎo)致嚴(yán)重的人身傷害乃至身故,。
在工業(yè)和網(wǎng)絡(luò)應(yīng)用中,,也存在對存儲解決方案的類似安全與安全保障需求。在互聯(lián)互通程度不斷提高的大背景下,,黑客能突破任何與互聯(lián)網(wǎng)相連的薄弱實體,,竊取敏感信息,或者將被攻破的設(shè)備當(dāng)作跳板,,在整個網(wǎng)絡(luò)中的其他地方發(fā)起攻擊,。因此,構(gòu)建有安全保障的系統(tǒng),,避免發(fā)生這種類型的攻擊,,變得至關(guān)重要。
有安全保障的閃存存儲
多年來,,閃存存儲器廠商一直提供純粹的數(shù)據(jù)存儲,。對于這些應(yīng)用,耐久度和保持能力是衡量閃存存儲器質(zhì)量的兩大指標(biāo),。安全保障并非是對這類型閃存器件的要求,,這就意味著存儲在閃存上的數(shù)據(jù)要么完全不受保護(hù),要么使用未經(jīng)認(rèn)證的命令進(jìn)行保護(hù),。
例如,,一些閃存器件通過正常命令集提供基本的保護(hù)功能,,例如針對編程或擦除操作對扇區(qū)提供非易失性或易失性保護(hù),、針對編程或讀取操作的密碼保護(hù)等,。這些功能雖是好功能,但不足以抵御手段高明的攻擊,。如果黑客能夠訪問閃存器件的總線接口,,他們就能輕易地提取或修改設(shè)備上的數(shù)據(jù)。
為了保障安全,,閃存器件必須保護(hù)存儲的代碼和數(shù)據(jù)免受多種手段的攻擊,。下面總結(jié)了閃存存儲設(shè)備需要加以防范的幾種攻擊。
● 中間人(MIM)攻擊
MIM攻擊中的黑客常模仿通信信道的發(fā)送方,,發(fā)送命令或消息給另一側(cè),,以竊取或修改數(shù)據(jù)(圖2)。因此,,有必要認(rèn)證主機(jī)和閃存設(shè)備間的每一條消息,。認(rèn)證可通過在主機(jī)和閃存上使用公共密鑰,生成伴隨實際消息的消息認(rèn)證碼(MAC)來實現(xiàn),。接收方可以在對消息采取行動之前先驗證MAC,。
圖2.中間人攻擊常模仿通信的信道發(fā)送方發(fā)送命令或消息,最終目的是竊取或修改數(shù)據(jù)
為了防止在密鑰受損時系統(tǒng)被永久破壞,,通常需要使用臨時密鑰,。臨時密鑰會在一定時間或在一定次數(shù)后失效。這樣做的目的是盡可能避免密鑰被破壞性物理分析(DPA)或其它迭代攻擊等方法進(jìn)行解密,。
另一種中間人攻擊則是在一定時間以后重放截獲的合法消息,。為了防范重放攻擊,主機(jī)和閃存設(shè)備必須使用累加計數(shù)器(值隨每個消息遞增)生成MAC,。由于當(dāng)前的累加計數(shù)器值與上一消息的值不同,。重放相同的消息就不能通過MAC驗證,
● 克隆
一些黑客可以使用先進(jìn)的技術(shù)讀取閃存芯片中的全部內(nèi)容,,通過非法克隆牟利,。為了防范此類攻擊,每個閃存芯片都必須擁有任何人都不能讀取的唯一設(shè)備秘密(UDS),。UDS值具有唯一性,,是每個芯片內(nèi)的真實隨機(jī)值。一個芯片和另一個芯片中的UDS之間毫無關(guān)聯(lián),。
UDS可用于推導(dǎo)復(fù)合設(shè)備標(biāo)識符(CDI),,而這個標(biāo)識符是生成可信計算工作組織(TCG)設(shè)備標(biāo)識符組合引擎(DICE)規(guī)格定義的設(shè)備ID證書的基礎(chǔ)。一般來說,,設(shè)備也在CDI的基礎(chǔ)上,,為所有用主機(jī)導(dǎo)出的密鑰生成別名私鑰公鑰對。這樣就無需暴露設(shè)備ID的私鑰。
有了UDS和DICE流程后,,由于UDS在物理上不可克隆,,因此黑客就無法克隆設(shè)備。
● 竊聽
被動偵聽是另外一種已知的攻擊方式,。攻擊者通過在總線上竊聽,,可從通過總線傳輸?shù)臄?shù)據(jù)中搜集敏感信息或機(jī)密情報。為保護(hù)重要數(shù)據(jù),,用戶可選擇在通過總線將數(shù)據(jù)發(fā)送到閃存設(shè)備,,并存儲數(shù)據(jù)前為數(shù)據(jù)加密。當(dāng)主機(jī)從設(shè)備檢索數(shù)據(jù)時,,也應(yīng)對數(shù)據(jù)進(jìn)行加密處理,,讓潛在的黑客永遠(yuǎn)無機(jī)可乘。
也許有人會說,,加密方法不需要有安全保障的閃存存儲解決方案,,因為主機(jī)可以直接加密數(shù)據(jù)并將其存儲到閃存中。只有主機(jī)才能解密數(shù)據(jù),。
然而,,這樣做也有一定的缺點。其中之一是主機(jī)不能輕易地棄用加密密鑰,。例如,,假設(shè)使用KeyA加密數(shù)據(jù)并將其存儲在閃存中,后來用戶發(fā)現(xiàn)KeyA已被攻破,,就需要在系統(tǒng)上使用不同的密鑰,,即KeyB。
這時,,主機(jī)陷入兩難境地:它不能直接棄用KeyA,,因為它需要保留該密鑰,才能解密從設(shè)備讀取的數(shù)據(jù),。然而,,如果KeyA被攻破,用戶可能不想永久保留它,。如果要使用新的數(shù)據(jù)加密密鑰,,用戶不得不采取更復(fù)雜的措施。先擦除閃存上的原始加密數(shù)據(jù),,再用新加密的數(shù)據(jù)為閃存編程,。這種操作在現(xiàn)場并非易事,且存在一定風(fēng)險,。
另一方面,,如果有安全保障的閃存能夠提供加密和解密功能,,它就能在其有安全保障的存儲中安全地存放明文數(shù)據(jù),并在將數(shù)據(jù)發(fā)回給主機(jī)之前進(jìn)行加密處理,。如果當(dāng)前的加密密鑰被攻破,,主機(jī)可以簡單地與設(shè)備交換新的密鑰。存儲中的數(shù)據(jù)保持完整且有安全保障,,與存儲加密數(shù)據(jù)相比,是一種簡單得多的方法,。
保護(hù)措施
下面介紹開發(fā)安全閃存存儲的各個步驟:
● 提供靈活的存儲器架構(gòu)
在現(xiàn)代的多核嵌入式系統(tǒng)中,,多個MCU或硬件安全模塊(HSM)可能可以訪問同一個閃存存儲。閃存設(shè)備有必要提供一種靈活的存儲器架構(gòu),,可以對其進(jìn)行分區(qū)和配置,,以便通過不同的內(nèi)核管理不同的區(qū)域。這些不同區(qū)域可提供不同水平的安全保障,,或者在完全不需要時,,取消安全保障。
通過了解eMMC標(biāo)準(zhǔn)和UFS標(biāo)準(zhǔn),,我們顯然可以看到支持多個安全區(qū)域的趨勢,。當(dāng)前的eMMC標(biāo)準(zhǔn)規(guī)定了重放保護(hù)內(nèi)存塊(RPMB)。最新的UFS(v3.0)標(biāo)準(zhǔn)可為四個RPMB分區(qū)提供智能支持,,它們由四個不同的密鑰進(jìn)行管理,。這樣的存儲器架構(gòu)靈活性在多核SoC環(huán)境中更加合適。
● 提供快速的安全啟動功能
眾多嵌入式系統(tǒng)都在閃存中存儲啟動代碼,。部分是因為需要快速啟動,,例如汽車子系統(tǒng)需要在加電重置(POR)的100ms內(nèi)處理CAN消息。系統(tǒng)不僅需要安全啟動(即驗證啟動代碼),,還需要快速啟動,。這就給嵌入式設(shè)計師提出更高的挑戰(zhàn)。
一般情況下,,在運行存儲并下載(SnD)模式時,,主機(jī)從閃存讀取引導(dǎo)加載程序并映射給RAM執(zhí)行。然而,,要想安全啟動,,就需要檢查認(rèn)證整個引導(dǎo)加載程序代碼,以確保其可信性,。這個過程需要在MCU上花費時間,。有安全保障的閃存存儲能夠提供引導(dǎo)加載認(rèn)證,大幅度縮短啟動時間,。
安全的閃存設(shè)備能夠使用內(nèi)部安全散列函數(shù)檢查引導(dǎo)加載程序,,并為主機(jī)提供驗證用散列值,。如果散列值未發(fā)生改變,就說明引導(dǎo)加載程序未被篡改,,可以安全地用于啟動,。
● 提供安全的固件無線更新(FOTA)
對于現(xiàn)代的嵌入式應(yīng)用而言,現(xiàn)場升級是必備功能,。通過遠(yuǎn)程升級系統(tǒng)的固件或軟件,,制造商能夠快速解決問題、提供新增特性,、提升用戶體驗,。然而,遠(yuǎn)程升級也會對系統(tǒng)構(gòu)成安全威脅,。沒人希望黑客利用現(xiàn)成的更新通道,,讓系統(tǒng)運行惡意固件或軟件。
除了依靠CPU提供的安全保障,,閃存設(shè)備內(nèi)部的安全引擎也能大幅提高FOTA流程的安全水平(圖3),。采用這樣的安全引擎后,提供啟動代碼存儲的閃存設(shè)備不僅可以用閃存設(shè)備旁邊的主機(jī)認(rèn)證固件提供商,,也可以在遠(yuǎn)程云上進(jìn)行認(rèn)證,。通過這種方式,可以為閃存中的固件更新或軟件更新建立端到端的通道安全,。
圖3.閃存設(shè)備中的安全引擎有助于實現(xiàn)更安全的固件無線更新流程
現(xiàn)代汽車,、工業(yè)、通信使用的嵌入式系統(tǒng)需要有高度安全保障的數(shù)據(jù)存儲,。嵌入式系統(tǒng)設(shè)計師面臨的挑戰(zhàn)是,,如何構(gòu)建能夠抵御網(wǎng)絡(luò)攻擊的安全系統(tǒng)。集成安全保障特性的閃存,,如賽普拉斯的Semper Flash,,通過防范各種針對嵌入式系統(tǒng)的攻擊,提高整體系統(tǒng)的安全性,。