日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> Nuvoton/新唐 >> 【技術(shù)干貨】針對(duì)M2351系列故障注入攻擊的軟件防護(hù)措施

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

關(guān)鍵字:M2351 故障注入攻擊 軟件防護(hù)措施 作者: 來(lái)源: 發(fā)布時(shí)間:2021-12-29  瀏覽:30

針對(duì) M2351 系列

故障注入攻擊的軟件防護(hù)措施



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


01

透過(guò)Fault Injection攻擊可以做到什么

以硬件加解密引擎運(yùn)作為例

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


圖片

Figure 1. Skip Instruction Attack


圖片

Figure 2. Zero Key Attack

02

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

Fault Injection 攻擊手段通?蓞^(qū)分為侵入式攻擊和非侵入式攻擊。

侵入式攻擊所影響的是產(chǎn)品功能永久性的故障和異常,這手段通常是透過(guò)高精密的儀器對(duì)產(chǎn)品內(nèi)部電路或數(shù)據(jù)做修改和破壞,因此所需的硬件成本和技術(shù)門(mén)坎都很高。

非侵入式攻擊則是在產(chǎn)品運(yùn)行中,注入攻擊,使其短暫的影響產(chǎn)品當(dāng)下運(yùn)作行為,造成異常或功能故障,這類(lèi)攻擊手段常見(jiàn)的方式為攻擊產(chǎn)品輸入電壓和頻率。因?yàn)檫@樣的攻擊是針對(duì)電壓及頻率且持續(xù)時(shí)間短暫,我們稱之為 Voltage Glitch 攻擊與 Clock Glitch 攻擊。這兩種攻擊方式,只需具備可以產(chǎn)生對(duì) voltage 和 clock 訊號(hào)干擾的硬設(shè)備即可達(dá)成,因此實(shí)現(xiàn)所需成本比侵入式攻擊低上許多,也更容易取得和實(shí)現(xiàn)。


圖片

Figure 3. Voltage Glitch Attack


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


03

Voltage Glitch 對(duì)

TrustZone 配置設(shè)定的攻擊

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

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

我們以試圖攻擊 M2351 微控制器在配置 SAU 過(guò)程中設(shè)定 Non-secure 區(qū)域?yàn)槔麄(gè) M2351 的 Flash 內(nèi)存大小為 512 KB,如果規(guī)劃其中的 Secure 空間大小為 256 KB,那么剩下的 256 KB 空間,就屬于 Non-secure ,其在內(nèi)存空間中的地址如下圖:


圖片

Figure 4. TrustZone® Secure, Non-secure Partition。


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

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

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

由Figure3可知,Secure區(qū)域跟Non-secure區(qū)域是分開(kāi)的,因此在編譯時(shí),Secure代碼與Non-secure 代碼的RO Base就必定不同,也就是Secure的RO Base必須落在0x0到0x3FFFF的范圍,而Non-secure的RO Base則是要落在0x10040000到0x1007FFFF的范圍內(nèi),這里我們?cè)O(shè)定Secure RO Base為0x0,Non-secure RO base為0x10040000。

 

上述的三種設(shè)置,其中只有SAU的設(shè)置,會(huì)在系統(tǒng)運(yùn)作中進(jìn)行,因而有機(jī)會(huì)被Voltage Glitch攻擊,如果系統(tǒng)在寫(xiě)入SAU區(qū)域設(shè)置時(shí),遭到攻擊,就有可能造成指令執(zhí)行失敗,因而使得SAU的設(shè)置不正確,也就是設(shè)置 SAU Non-secure Region的起始地址 0x10040000這行指令執(zhí)行失敗,這將造成SAU Non-secure Region的實(shí)際設(shè)定為 0x0,則系統(tǒng)的內(nèi)存規(guī)劃將變成如下圖所示:


圖片

Figure 5. Secure, Non-secure Partition after Attack SAU Setting.


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

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

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

因此,單純的攻擊SAU設(shè)置,并無(wú)法為Non-secure code取得額外的權(quán)限,甚至?xí)ピ究梢院艚蠳on-secure callable API權(quán)限,所以即使成功的攻擊了SAU的設(shè)置,也并無(wú)法形成一個(gè)有效的攻擊,不會(huì)有任何Secure區(qū)域信息的泄漏或被Non-secure code取得任何的Secure權(quán)限。


04

Voltage Glitch 對(duì) AES 加密的攻擊

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


圖片

Figure 6. AES Encrypt Procedure.


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


圖片

Figure 7. Zero Key Fault Injection Attack.


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


圖片

Figure 8. Use Fault Injection to get N Encrypted Text for DFA.


05

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

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


圖片

Figure 9. Add Random Delay


圖片

Figure 10. Change Execution Procedure Randomly


但是只要無(wú)法擋住攻擊的來(lái)源,攻擊者總會(huì)達(dá)成他們所要的攻擊目的。如果軟件可以偵測(cè)到系統(tǒng)可能被攻擊, 則可透過(guò)對(duì)應(yīng)的處里程序?qū)⒐魮p害程度降到最低。

本章節(jié)將依據(jù)前一章節(jié)提到的故障攻擊范例來(lái)說(shuō)明軟件解決方案, 并實(shí)現(xiàn)可偵測(cè)出系統(tǒng)是否被攻擊以及對(duì)應(yīng)的處理。


06

關(guān)鍵設(shè)置攻擊防護(hù)

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

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

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


  1. 紀(jì)錄有效的系統(tǒng)SAU設(shè)定值:

    系統(tǒng)SAU設(shè)定值已預(yù)先被定義在partition_M2351.h內(nèi),需要將這些設(shè)定值預(yù)先記錄下來(lái), 可供后續(xù)步驟的使用。

  2. 計(jì)算出有效的系統(tǒng)SAU設(shè)定值總和 :

    將有效的SAU相關(guān)設(shè)定例如: RBAR, RLAR和CTRL等設(shè)定值全部加起來(lái)做運(yùn)算, 會(huì)得到一個(gè)Checksum值。

  3. 將有效的SAU設(shè)定值寫(xiě)入對(duì)應(yīng)的SAU region :

    將partition_M2351.h內(nèi)定義有效的SAU設(shè)定值和屬性寫(xiě)入各自的SAU區(qū)域內(nèi)。

  4. 讀出全部有被寫(xiě)入SAU region的設(shè)定值, 并做加總運(yùn)算

  5. 判斷寫(xiě)入SAU是否正確 :

    在此比對(duì)Step 2和Step4計(jì)算出來(lái)的總和值是否一致,便可得知在寫(xiě)SAU設(shè)定值是否因遭到攻擊而產(chǎn)生異常的設(shè)定結(jié)果。


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


圖片

Figure 11. Fault Injection Countermeasure Flow.


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


07

防護(hù)Zero Key攻擊與AES加密攻擊

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

對(duì)AES加密運(yùn)算的攻擊, 目的是影響密鑰的加載使其加密出錯(cuò)誤的密文,然后攻擊者透過(guò)分析大量不同的錯(cuò)誤密文和正確密文的關(guān)系, 透過(guò)DFA分析方法推導(dǎo)出系統(tǒng)內(nèi)使用的加密密鑰后, 再解密密文, 便可得到明文數(shù)據(jù)。

因此AES加密攻擊的防護(hù)重點(diǎn)是讓軟件可以知道AES加密運(yùn)算過(guò)中有受到攻擊,避免使用到空白或錯(cuò)誤的密鑰,并且不能將被攻擊后產(chǎn)生的密文回報(bào)給攻擊者,使其有機(jī)會(huì)進(jìn)行DFA分析。

攻擊者再攻擊密鑰的加載前,需要先精確的定位到特定的時(shí)間點(diǎn),因?yàn)榕渲妹荑與輸入明文的程序,是可以互換的,軟件可以在這個(gè)部分進(jìn)行隨機(jī)的次序調(diào)換,如此可以增加攻擊者定位密鑰加載時(shí)間點(diǎn)的難度。


圖片

Figure 12. Random change the plaintext, Key input procedure.


由于對(duì)AES運(yùn)算的攻擊,重點(diǎn)在于使其密鑰的加載出錯(cuò),無(wú)論是Zero Key或是大量錯(cuò)誤的Key,所以只要在加載密鑰之后,再針對(duì)緩存器中的密鑰做檢查,即可保障密鑰輸入的正確性,而且如果運(yùn)算中有使用到DMA的話,DMA的Source, Destination與Transfer  Count都應(yīng)該也納入檢查。

而加密運(yùn)算使用密鑰時(shí)的攻擊,則可在加密完成后,直接把密文用同一把密鑰解密,并與原來(lái)的明文做比對(duì),即可驗(yàn)證在加密過(guò)程中是否有任何出錯(cuò)。

整個(gè)防護(hù)對(duì)策流程圖如下:


圖片

Figure 13. AES Key Fault Injection Countermeasure Flow.


總結(jié)

對(duì)于微控制器產(chǎn)品而言,F(xiàn)ault Injection確實(shí)是一個(gè)簡(jiǎn)單、有效又低成本的攻擊, 只是要能夠完整的取得有用的成果,攻擊仍然必須能夠精確的定位安全設(shè)定、密鑰加載、加密運(yùn)算的關(guān)鍵時(shí)序,這對(duì)并不熟悉微控制器內(nèi)部運(yùn)行的程序的惡意攻擊已屬不易,而且軟件也可以利用隨機(jī)的延遲與程序交錯(cuò)等方式,更加深定位的困難度。

即使攻擊者精確找到關(guān)鍵位置,只要軟件多一道自我校驗(yàn)程序,就可以讓攻擊的難度急遽增加,因此對(duì)于系統(tǒng)中的關(guān)鍵設(shè)置、密鑰加載部分,增加相應(yīng)的防護(hù)會(huì)是一個(gè)很值得做的事。

編輯:zzy  最后修改時(shí)間:2021-12-29

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

叶城县| 林甸县| 广州市| 莆田市| 寻乌县| 增城市| 梧州市| 方山县| 成安县| 哈尔滨市| 嘉峪关市| 灵石县| 仪征市| 五寨县| 丰城市| 盖州市| 荣昌县| 常熟市| 阿克陶县| 阿克陶县| 西平县| 新疆| 余江县| 黄石市| 和林格尔县| 新巴尔虎右旗| 昌邑市| 昌宁县| 灵石县| 高青县| 凌云县| 山丹县| 榆社县| 车险| 宝山区| 沭阳县| 蓬莱市| 长汀县| 沂南县| 洪泽县| 舒兰市|