你的位置:首頁(yè) > 互連技術(shù) > 正文

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施

發(fā)布時(shí)間:2020-05-26 來(lái)源:新唐MCU 責任編輯:lina

【導讀】微控制器產(chǎn)品在設計之初,就會(huì )設定相應的產(chǎn)品規格以規范產(chǎn)品的執行條件,確保產(chǎn)品可以完成默認的任務(wù)。然而,若執行條件可不完全依照產(chǎn)品規格的情況下,就有可能會(huì )讓系統無(wú)法如預期的方式運作,這樣的特性,經(jīng)常被惡意攻擊者,運用做為尋找系統漏洞的工具,藉此繞過(guò)預設的安全機制或取得受保護的資料。
 
針對 M2351 系列故障注入攻擊的軟件防護措施

微控制器產(chǎn)品在設計之初,就會(huì )設定相應的產(chǎn)品規格以規范產(chǎn)品的執行條件,確保產(chǎn)品可以完成默認的任務(wù)。然而,若執行條件可不完全依照產(chǎn)品規格的情況下,就有可能會(huì )讓系統無(wú)法如預期的方式運作,這樣的特性,經(jīng)常被惡意攻擊者,運用做為尋找系統漏洞的工具,藉此繞過(guò)預設的安全機制或取得受保護的資料。這方法之所以被攻擊者經(jīng)常使用,其根本原因不外乎相關(guān)攻擊設備簡(jiǎn)單、容易取得且成本低廉,并且其攻擊具有一定的效果。本篇文章將介紹常見(jiàn)的故障注入攻擊方式及其原理,并提出在不增加硬件成本下最有效益的軟件防護方法,來(lái)防護這些攻擊。

01 透過(guò)Fault Injection攻擊可以做到什么 以硬件加解密引擎運作為例

當產(chǎn)品的執行條件,超出了原本預設的規范,將使產(chǎn)品的運行出錯,如果能夠限縮這樣的執行條件出現在特定的時(shí)間,且只持續一段極短的時(shí)間,便足以能夠讓產(chǎn)品在執行特定指令的時(shí)候出錯,而其它指令又能夠正常的執行。也就是說(shuō),透過(guò) Fault Injection,可以讓特定指令的執行失效,例如讓加密硬件系統錯誤的執行讀取密鑰的任務(wù),使其加載空白密鑰 (zero key) 來(lái)加密數據,如此一來(lái)只要再使用空白密鑰,就能將密文還原成明文。
 

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施


Figure 1. Skip Instruction Attack

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 2. Zero Key Attack

02 常見(jiàn)且低成本的Fault Injection方式

Fault Injection 攻擊手段通??蓞^分為侵入式攻擊和非侵入式攻擊。
侵入式攻擊所影響的是產(chǎn)品功能永久性的故障和異常,這手段通常是透過(guò)高精密的儀器對產(chǎn)品內部電路或數據做修改和破壞,因此所需的硬件成本和技術(shù)門(mén)坎都很高。
非侵入式攻擊則是在產(chǎn)品運行中,注入攻擊,使其短暫的影響產(chǎn)品當下運作行為,造成異?;蚬δ芄收?,這類(lèi)攻擊手段常見(jiàn)的方式為攻擊產(chǎn)品輸入電壓和頻率。因為這樣的攻擊是針對電壓及頻率且持續時(shí)間短暫,我們稱(chēng)之為 Voltage Glitch 攻擊與 Clock Glitch 攻擊。這兩種攻擊方式,只需具備可以產(chǎn)生對 voltage 和 clock 訊號干擾的硬設備即可達成,因此實(shí)現所需成本比侵入式攻擊低上許多,也更容易取得和實(shí)現。

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 3. Voltage Glitch Attack

因為 Voltage Glitch 和 Clock Glitch 的攻擊都可以造成產(chǎn)品執行時(shí),跳過(guò)某些指令或是影響某些操作的輸出結果, 本章節接下來(lái)將以 Voltage Glitch 攻擊范例來(lái)說(shuō)明常見(jiàn)的 Fault Injection 影響。

03 Voltage Glitch 對TrustZone 配置設定的攻擊

在具備 TrustZone® 技術(shù)的微控制器產(chǎn)品中,都會(huì )具有 Secure Attribution Unit (SAU) 控制單元,用來(lái)將微控制器的所有資源,設置為 Secure 和Non-secure 區域,目的是為了透過(guò)隔離 Secure與 Non-secure 區域的方式,來(lái)保護 Secure 區域中的資源。

在針對 TrustZone® 技術(shù)的攻擊中,攻擊者會(huì )企圖透過(guò)讓 SAU 的設置無(wú)效化,來(lái)瓦解這樣的隔離保護機制,此攻擊主要是在系統程序配置 SAU 屬性時(shí)進(jìn)行 Voltage Glitch 的攻擊, 讓系統執行指令出現錯誤,造成 SAU 配置和系統原先規劃的不一致,以期在這當中尋找到可利用的漏洞。

我們以試圖攻擊 M2351 微控制器在配置 SAU 過(guò)程中設定 Non-secure 區域為例,整個(gè) M2351 的 Flash 內存大小為 512 KB,如果規劃其中的 Secure 空間大小為 256 KB,那么剩下的 256 KB 空間,就屬于 Non-secure ,其在內存空間中的地址如下圖:

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 4. TrustZone® Secure, Non-secure Partition。

在這樣的內存配置下, Secure代碼與Non-secure代碼被遠遠的區隔開(kāi)來(lái),實(shí)現了TrustZone®的硬件隔離,而想要進(jìn)行這樣的隔離配置,實(shí)際上所需要的設置有三個(gè)部分,一個(gè)是SAU的配置設定,一個(gè)是Flash Non-secure Boundary的設定,最后則是編譯代碼需要的設置。

SAU的配置,主要在指定Non-secure區域的起始地址與結束地址,這里設定的范圍是由0x10040000到0x1007FFFF,至于其它未定義的區域,則默認為Secure區域。

Flash Non-secure Boundary的設定,是指Flash內存空間中,由哪里開(kāi)始要劃分給Non-secure使用,在這里其設定為0x40000,表示Flash后面的256KB,將劃歸給Non-secure使用,其余則是給Secure使用。Flash Non-secure Boundary的設定,是一出廠(chǎng)就設置好的,不會(huì )再改動(dòng) 。

由Figure3可知,Secure區域跟Non-secure區域是分開(kāi)的,因此在編譯時(shí),Secure代碼與Non-secure 代碼的RO Base就必定不同,也就是Secure的RO Base必須落在0x0到0x3FFFF的范圍,而Non-secure的RO Base則是要落在0x10040000到0x1007FFFF的范圍內,這里我們設定Secure RO Base為0x0,Non-secure RO base為0x10040000。
 
上述的三種設置,其中只有SAU的設置,會(huì )在系統運作中進(jìn)行,因而有機會(huì )被Voltage Glitch攻擊,如果系統在寫(xiě)入SAU區域設置時(shí),遭到攻擊,就有可能造成指令執行失敗,因而使得SAU的設置不正確,也就是設置 SAU Non-secure Region的起始地址 0x10040000這行指令執行失敗,這將造成SAU Non-secure Region的實(shí)際設定為 0x0,則系統的內存規劃將變成如下圖所示:

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 5. Secure, Non-secure Partition after Attack SAU Setting.

注意在Non-secure Region起始地址被竄改成0x0的情況下,0x0至0x0003_FFFF內存的屬性并不會(huì )真的被改成Non-secure,這是因為另一個(gè)固定的屬性設置單元Implementation Defined Attribution Unit (IDAU)所造成的影響,在SAU于0x0到0x0003_FFFF設置為Non-secure的情況下,最終的0x0到0x0003_FFFF的屬性將依照較嚴格的IDAU設置,這表示,即使成功的攻擊SAU,讓Non-secure 起始地址設定為0x0,仍然無(wú)法讓原來(lái)的Secure 區域改變?yōu)镹on-secure區域,而是變成IDAU設置的Non-secure callable 區域,而Non-secure callable區域,其本質(zhì)上仍是屬于Secure區域的一部分。

另外,雖然成功的攻擊SAU后,會(huì )讓大部分的Secure區域,轉變?yōu)镹on-secure callable區域,但是因為這些區域缺乏SG (Secure Gateway)指令的緣故,Non-secure code是無(wú)法任意用Non-secure callable方式呼叫這區域的指令的。

值得注意的是,M2351微控制器SAU最多總共有8個(gè)區域可以設定, 可是這8個(gè)區域的范圍,是不允許重迭的,重迭區域的設定,將導致該重迭區域強制為Secure屬性,也就是說(shuō),若是原來(lái)的設定中,本來(lái)就有劃定0x3F000至0x3FFFF為Non-secure callable區域,而因為此區域跟被攻擊后的SAU區域0x0到0x1007FFFF重迭了,將使得0x3F000至0x3FFFF這個(gè)區域的設定直接成為Secure區域,這將造成所有的Non-secure callable API無(wú)法被Non-secure code呼叫。

因此,單純的攻擊SAU設置,并無(wú)法為Non-secure code取得額外的權限,甚至會(huì )失去原本可以呼叫Non-secure callable API權限,所以即使成功的攻擊了SAU的設置,也并無(wú)法形成一個(gè)有效的攻擊,不會(huì )有任何Secure區域信息的泄漏或被Non-secure code取得任何的Secure權限。

04 Voltage Glitch 對 AES 加密的攻擊

此攻擊方式主要是在代碼執行AES加密相關(guān)處理時(shí),使用Voltage Glitch攻擊其運作,使其產(chǎn)生錯誤的密文。執行AES加密的基本流程如下圖所示, 最終會(huì )產(chǎn)生密文 : 

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 6. AES Encrypt Procedure.

例如在輸入 AES Key操作時(shí)被Voltage Glitch攻擊,可能出現輸入密鑰的動(dòng)作被忽略或是輸入錯誤的密鑰值。如果是輸入密鑰的動(dòng)作因為攻擊而沒(méi)有實(shí)際上的密鑰值輸入,那么接下來(lái)的加密過(guò)程,就會(huì )直接使用其緩存器內原來(lái)的值,通常這會(huì )是一組全部為0的密鑰值,所以對于最后加密過(guò)后的秘文,只要使用全0的密鑰來(lái)解密,就可以還原出正確的原文了。

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 7. Zero Key Fault Injection Attack.

另一種狀況是在原文已知道情況下,攻擊者利用Voltage Glitch造成輸入錯誤的密鑰,然后加密過(guò)后,得到對應的密文,以此重復多次,攻擊者就可以根據原文、正確密鑰加密后的密文、各種錯誤密鑰加密后的密文,經(jīng)過(guò)Differential Fault Analysis (DFA) 差分故障分析方法,就可以還原出正確的密鑰。

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 8. Use Fault Injection to get N Encrypted Text for DFA.

05 如何透過(guò)軟件來(lái)防護這些攻擊

由上述幾個(gè)采用Voltage Glitch攻擊的例子可以發(fā)現,攻擊者需要在正確的時(shí)間點(diǎn),進(jìn)行Fault Injection攻擊,才有一些機會(huì )得到其想要達成的目的,因此讓攻擊者無(wú)法輕易的了解系統內部運作的時(shí)序,將會(huì )是一個(gè)有效的防護,最簡(jiǎn)單的方法就是建立不可預測的系統時(shí)序和處理流程, 讓攻擊者不容易找到合適的攻擊時(shí)間點(diǎn),也不容易持續攻擊到同一個(gè)關(guān)鍵運行點(diǎn),而這可以透過(guò)隨機延遲和隨機變化處理流程的順序來(lái)實(shí)現。

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 9. Add Random Delay

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 10. Change Execution Procedure Randomly

但是只要無(wú)法擋住攻擊的來(lái)源,攻擊者總會(huì )達成他們所要的攻擊目的。如果軟件可以偵測到系統可能被攻擊, 則可透過(guò)對應的處里程序將攻擊損害程度降到最低。
本章節將依據前一章節提到的故障攻擊范例來(lái)說(shuō)明軟件解決方案, 并實(shí)現可偵測出系統是否被攻擊以及對應的處理。

06 關(guān)鍵設置攻擊防護

在先前所舉TrustZone®設定攻擊的例子中,我們知道攻擊者企圖利用跳過(guò)SAU配置指令來(lái)影響Secure與Non-secure區域范圍的設置,企圖擴大Non-secure區域范圍,藉此取得存取Secure資源的機會(huì )。雖然在之前的描述中提到,因為Secure與Non-secure范圍設置,除了SAU,還需要搭配IDAU,所以單純的攻擊SAU,并無(wú)法取得有效的權限,但這里我們仍然為這樣的攻擊提出對應的策略,讓攻擊者連SAU的設置都無(wú)法攻擊成功。

這個(gè)防護最主要原理,是偵測異常的SAU配置,并做復原SAU配置的處理, 讓針對SAU設置的攻擊無(wú)效化。

首先要偵測出異常的SAU設置,可針對所有的SAU設置進(jìn)行冗余檢查。

紀錄有效的系統SAU設定值:
1. 系統SAU設定值已預先被定義在partition_M2351.h內,需要將這些設定值預先記錄下來(lái), 可供后續步驟的使用。
2. 計算出有效的系統SAU設定值總和 :
將有效的SAU相關(guān)設定例如: RBAR, RLAR和CTRL等設定值全部加起來(lái)做運算, 會(huì )得到一個(gè)Checksum值。
3. 將有效的SAU設定值寫(xiě)入對應的SAU region :
將partition_M2351.h內定義有效的SAU設定值和屬性寫(xiě)入各自的SAU區域內。
4. 讀出全部有被寫(xiě)入SAU region的設定值, 并做加總運算
5. 判斷寫(xiě)入SAU是否正確 :
在此比對Step 2和Step4計算出來(lái)的總和值是否一致,便可得知在寫(xiě)SAU設定值是否因遭到攻擊而產(chǎn)生異常的設定結果。

上述步驟Step 1,2,4,5是針對偵測攻擊所加的步驟, 而Step 3則是原來(lái)沒(méi)有加防護代碼時(shí)的SAU設置。如下圖所示,

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 11. Fault Injection Countermeasure Flow.

接下來(lái),偵測到錯誤后,必須要讓系統能夠自行回復,所以需要重復Step3的步驟再次寫(xiě)入SAU設定。

07 防護Zero Key攻擊與AES加密攻擊

Zero Key攻擊與SAU設置攻擊類(lèi)似,都是讓軟件寫(xiě)入動(dòng)作失效,也就是讓系統無(wú)法寫(xiě)入正確地密鑰到運算單元中,因而使用默認的空白數據,據此產(chǎn)生使用 空白密鑰的效果。

對AES加密運算的攻擊, 目的是影響密鑰的加載使其加密出錯誤的密文,然后攻擊者透過(guò)分析大量不同的錯誤密文和正確密文的關(guān)系, 透過(guò)DFA分析方法推導出系統內使用的加密密鑰后, 再解密密文, 便可得到明文數據。
因此AES加密攻擊的防護重點(diǎn)是讓軟件可以知道AES加密運算過(guò)中有受到攻擊,避免使用到空白或錯誤的密鑰,并且不能將被攻擊后產(chǎn)生的密文回報給攻擊者,使其有機會(huì )進(jìn)行DFA分析。
攻擊者再攻擊密鑰的加載前,需要先精確的定位到特定的時(shí)間點(diǎn),因為配置密鑰與輸入明文的程序,是可以互換的,軟件可以在這個(gè)部分進(jìn)行隨機的次序調換,如此可以增加攻擊者定位密鑰加載時(shí)間點(diǎn)的難度。

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 12. Random change the plaintext, Key input procedure.

由于對AES運算的攻擊,重點(diǎn)在于使其密鑰的加載出錯,無(wú)論是Zero Key或是大量錯誤的Key,所以只要在加載密鑰之后,再針對緩存器中的密鑰做檢查,即可保障密鑰輸入的正確性,而且如果運算中有使用到DMA的話(huà),DMA的Source, Destination與Transfer  Count都應該也納入檢查。
而加密運算使用密鑰時(shí)的攻擊,則可在加密完成后,直接把密文用同一把密鑰解密,并與原來(lái)的明文做比對,即可驗證在加密過(guò)程中是否有任何出錯。
整個(gè)防護對策流程圖如下:

【技術(shù)干貨】針對M2351系列故障注入攻擊的軟件防護措施
Figure 13. AES Key Fault Injection Countermeasure Flow.

總結
對于微控制器產(chǎn)品而言,Fault Injection確實(shí)是一個(gè)簡(jiǎn)單、有效又低成本的攻擊, 只是要能夠完整的取得有用的成果,攻擊仍然必須能夠精確的定位安全設定、密鑰加載、加密運算的關(guān)鍵時(shí)序,這對并不熟悉微控制器內部運行的程序的惡意攻擊已屬不易,而且軟件也可以利用隨機的延遲與程序交錯等方式,更加深定位的困難度。
即使攻擊者精確找到關(guān)鍵位置,只要軟件多一道自我校驗程序,就可以讓攻擊的難度急遽增加,因此對于系統中的關(guān)鍵設置、密鑰加載部分,增加相應的防護會(huì )是一個(gè)很值得做的事。
(來(lái)源:新唐MCU,作者:張紋碩 部經(jīng)理  )
 
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問(wèn)題,請聯(lián)系小編進(jìn)行處理。
 
 
推薦閱讀:
電子換向為交流和直流風(fēng)扇應用提供更佳的節能效果
1+1>2!這樣同時(shí)實(shí)現高精度與高功率
矢量信號與射頻信號源的區別在哪?
DC-AC轉換器“逆變器”的幾種詳解
如何讓電路的心臟——“電源”更可靠
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索
?

關(guān)閉

?

關(guān)閉

久久无码人妻精品一区二区三区_精品少妇人妻av无码中文字幕_98精品国产高清在线看入口_92精品国产自产在线观看481页