【技術幹貨】針對M2351係列故障注入攻擊的軟件防護措施
發布時間:2020-05-26 來源:新唐MCU 責任編輯:lina
【導讀】weikongzhiqichanpinzaishejizhichu,jiuhuishedingxiangyingdechanpinguigeyiguifanchanpindezhixingtiaojian,quebaochanpinkeyiwanchengmorenderenwu。raner,ruozhixingtiaojiankebuwanquanyizhaochanpinguigedeqingkuangxia,jiuyoukenenghuirangxitongwufaruyuqidefangshiyunzuo,zheyangdetexing,jingchangbeieyigongjizhe,yunyongzuoweixunzhaoxitongloudongdegongju,jiciraoguoyushedeanquanjizhihuoqudeshoubaohudeziliao。
針對 M2351 係列故障注入攻擊的軟件防護措施
weikongzhiqichanpinzaishejizhichu,jiuhuishedingxiangyingdechanpinguigeyiguifanchanpindezhixingtiaojian,quebaochanpinkeyiwanchengmorenderenwu。raner,ruozhixingtiaojiankebuwanquanyizhaochanpinguigedeqingkuangxia,jiuyoukenenghuirangxitongwufaruyuqidefangshiyunzuo,zheyangdetexing,jingchangbeieyigongjizhe,yunyongzuoweixunzhaoxitongloudongdegongju,jiciraoguoyushedeanquanjizhihuoqudeshoubaohudeziliao。這方法之所以被攻擊者經常使用,其根本原因不外乎相關攻擊設備簡單、容rong易yi取qu得de且qie成cheng本ben低di廉lian,並bing且qie其qi攻gong擊ji具ju有you一yi定ding的de效xiao果guo。本ben篇pian文wen章zhang將jiang介jie紹shao常chang見jian的de故gu障zhang注zhu入ru攻gong擊ji方fang式shi及ji其qi原yuan理li,並bing提ti出chu在zai不bu增zeng加jia硬ying件jian成cheng本ben下xia最zui有you效xiao益yi的de軟ruan件jian防fang護hu方fang法fa,來lai防fang護hu這zhe些xie攻gong擊ji。
01 透過Fault Injection攻擊可以做到什麼 以硬件加解密引擎運作為例
dangchanpindezhixingtiaojian,chaochuleyuanbenyushedeguifan,jiangshichanpindeyunxingchucuo,ruguonenggouxiansuozheyangdezhixingtiaojianchuxianzaitedingdeshijian,qiezhichixuyiduanjiduandeshijian,bianzuyinenggourangchanpinzaizhixingtedingzhilingdeshihouchucuo,erqitazhilingyounenggouzhengchangdezhixing。yejiushishuo,touguo Fault Injection,可以讓特定指令的執行失效,例如讓加密硬件係統錯誤的執行讀取密鑰的任務,使其加載空白密鑰 (zero key) 來加密數據,如此一來隻要再使用空白密鑰,就能將密文還原成明文。

Figure 1. Skip Instruction Attack

Figure 2. Zero Key Attack
02 常見且低成本的Fault Injection方式
Fault Injection 攻擊手段通常可區分為侵入式攻擊和非侵入式攻擊。
侵(qin)入(ru)式(shi)攻(gong)擊(ji)所(suo)影(ying)響(xiang)的(de)是(shi)產(chan)品(pin)功(gong)能(neng)永(yong)久(jiu)性(xing)的(de)故(gu)障(zhang)和(he)異(yi)常(chang),這(zhe)手(shou)段(duan)通(tong)常(chang)是(shi)透(tou)過(guo)高(gao)精(jing)密(mi)的(de)儀(yi)器(qi)對(dui)產(chan)品(pin)內(nei)部(bu)電(dian)路(lu)或(huo)數(shu)據(ju)做(zuo)修(xiu)改(gai)和(he)破(po)壞(huai),因(yin)此(ci)所(suo)需(xu)的(de)硬(ying)件(jian)成(cheng)本(ben)和(he)技(ji)術(shu)門(men)坎(kan)都(dou)很(hen)高(gao)。
feiqinrushigongjizeshizaichanpinyunxingzhong,zhurugongji,shiqiduanzandeyingxiangchanpindangxiayunzuoxingwei,zaochengyichanghuogongnengguzhang,zheleigongjishouduanchangjiandefangshiweigongjichanpinshurudianyahepinlv。yinweizheyangdegongjishizhenduidianyajipinlvqiechixushijianduanzan,womenchengzhiwei Voltage Glitch 攻擊與 Clock Glitch 攻擊。這兩種攻擊方式,隻需具備可以產生對 voltage 和 clock 訊號幹擾的硬設備即可達成,因此實現所需成本比侵入式攻擊低上許多,也更容易取得和實現。

Figure 3. Voltage Glitch Attack
因為 Voltage Glitch 和 Clock Glitch 的攻擊都可以造成產品執行時,跳過某些指令或是影響某些操作的輸出結果, 本章節接下來將以 Voltage Glitch 攻擊範例來說明常見的 Fault Injection 影響。
03 Voltage Glitch 對TrustZone 配置設定的攻擊
在具備 TrustZone® 技術的微控製器產品中,都會具有 Secure Attribution Unit (SAU) 控製單元,用來將微控製器的所有資源,設置為 Secure 和Non-secure 區域,目的是為了透過隔離 Secure與 Non-secure 區域的方式,來保護 Secure 區域中的資源。
在針對 TrustZone® 技術的攻擊中,攻擊者會企圖透過讓 SAU 的設置無效化,來瓦解這樣的隔離保護機製,此攻擊主要是在係統程序配置 SAU 屬性時進行 Voltage Glitch 的攻擊, 讓係統執行指令出現錯誤,造成 SAU 配置和係統原先規劃的不一致,以期在這當中尋找到可利用的漏洞。
我們以試圖攻擊 M2351 微控製器在配置 SAU 過程中設定 Non-secure 區域為例,整個 M2351 的 Flash 內存大小為 512 KB,如果規劃其中的 Secure 空間大小為 256 KB,那麼剩下的 256 KB 空間,就屬於 Non-secure ,其在內存空間中的地址如下圖:

Figure 4. TrustZone® Secure, Non-secure Partition。
在這樣的內存配置下, Secure代碼與Non-secure代碼被遠遠的區隔開來,實現了TrustZone®的硬件隔離,而想要進行這樣的隔離配置,實際上所需要的設置有三個部分,一個是SAU的配置設定,一個是Flash Non-secure Boundary的設定,最後則是編譯代碼需要的設置。
SAU的配置,主要在指定Non-secure區域的起始地址與結束地址,這裏設定的範圍是由0x10040000到0x1007FFFF,至於其它未定義的區域,則默認為Secure區域。
Flash Non-secure Boundary的設定,是指Flash內存空間中,由哪裏開始要劃分給Non-secure使用,在這裏其設定為0x40000,表示Flash後麵的256KB,將劃歸給Non-secure使用,其餘則是給Secure使用。Flash Non-secure Boundary的設定,是一出廠就設置好的,不會再改動 。
由Figure3可知,Secure區域跟Non-secure區域是分開的,因此在編譯時,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的設置,會在係統運作中進行,因而有機會被Voltage Glitch攻擊,如果係統在寫入SAU區域設置時,遭到攻擊,就有可能造成指令執行失敗,因而使得SAU的設置不正確,也就是設置 SAU Non-secure Region的起始地址 0x10040000這行指令執行失敗,這將造成SAU Non-secure Region的實際設定為 0x0,則係統的內存規劃將變成如下圖所示:

Figure 5. Secure, Non-secure Partition after Attack SAU Setting.
注意在Non-secure Region起始地址被竄改成0x0的情況下,0x0至0x0003_FFFF內存的屬性並不會真的被改成Non-secure,這是因為另一個固定的屬性設置單元Implementation Defined Attribution Unit (IDAU)所造成的影響,在SAU於0x0到0x0003_FFFF設置為Non-secure的情況下,最終的0x0到0x0003_FFFF的屬性將依照較嚴格的IDAU設置,這表示,即使成功的攻擊SAU,讓Non-secure 起始地址設定為0x0,仍然無法讓原來的Secure 區域改變為Non-secure區域,而是變成IDAU設置的Non-secure callable 區域,而Non-secure callable區域,其本質上仍是屬於Secure區域的一部分。
另外,雖然成功的攻擊SAU後,會讓大部分的Secure區域,轉變為Non-secure callable區域,但是因為這些區域缺乏SG (Secure Gateway)指令的緣故,Non-secure code是無法任意用Non-secure callable方式呼叫這區域的指令的。
值得注意的是,M2351微控製器SAU最多總共有8個區域可以設定, 可是這8個區域的範圍,是不允許重迭的,重迭區域的設定,將導致該重迭區域強製為Secure屬性,也就是說,若是原來的設定中,本來就有劃定0x3F000至0x3FFFF為Non-secure callable區域,而因為此區域跟被攻擊後的SAU區域0x0到0x1007FFFF重迭了,將使得0x3F000至0x3FFFF這個區域的設定直接成為Secure區域,這將造成所有的Non-secure callable API無法被Non-secure code呼叫。
因此,單純的攻擊SAU設置,並無法為Non-secure code取得額外的權限,甚至會失去原本可以呼叫Non-secure callable API權限,所以即使成功的攻擊了SAU的設置,也並無法形成一個有效的攻擊,不會有任何Secure區域信息的泄漏或被Non-secure code取得任何的Secure權限。
04 Voltage Glitch 對 AES 加密的攻擊
此攻擊方式主要是在代碼執行AES加密相關處理時,使用Voltage Glitch攻擊其運作,使其產生錯誤的密文。執行AES加密的基本流程如下圖所示, 最終會產生密文 :
Figure 6. AES Encrypt Procedure.
例如在輸入 AES Key操作時被Voltage Glitch攻gong擊ji,可ke能neng出chu現xian輸shu入ru密mi鑰yao的de動dong作zuo被bei忽hu略lve或huo是shi輸shu入ru錯cuo誤wu的de密mi鑰yao值zhi。如ru果guo是shi輸shu入ru密mi鑰yao的de動dong作zuo因yin為wei攻gong擊ji而er沒mei有you實shi際ji上shang的de密mi鑰yao值zhi輸shu入ru,那na麼me接jie下xia來lai的de加jia密mi過guo程cheng,就jiu會hui直zhi接jie使shi用yong其qi緩huan存cun器qi內nei原yuan來lai的de值zhi,通tong常chang這zhe會hui是shi一yi組zu全quan部bu為wei0的密鑰值,所以對於最後加密過後的秘文,隻要使用全0的密鑰來解密,就可以還原出正確的原文了。

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

Figure 8. Use Fault Injection to get N Encrypted Text for DFA.
05 如何透過軟件來防護這些攻擊
由上述幾個采用Voltage Glitch攻擊的例子可以發現,攻擊者需要在正確的時間點,進行Fault Injectiongongji,caiyouyixiejihuidedaoqixiangyaodachengdemude,yinciranggongjizhewufaqingyidelejiexitongneibuyunzuodeshixu,jianghuishiyigeyouxiaodefanghu,zuijiandandefangfajiushijianlibukeyucedexitongshixuhechuliliucheng, 讓rang攻gong擊ji者zhe不bu容rong易yi找zhao到dao合he適shi的de攻gong擊ji時shi間jian點dian,也ye不bu容rong易yi持chi續xu攻gong擊ji到dao同tong一yi個ge關guan鍵jian運yun行xing點dian,而er這zhe可ke以yi透tou過guo隨sui機ji延yan遲chi和he隨sui機ji變bian化hua處chu理li流liu程cheng的de順shun序xu來lai實shi現xian。

Figure 9. Add Random Delay

Figure 10. Change Execution Procedure Randomly
但是隻要無法擋住攻擊的來源,攻擊者總會達成他們所要的攻擊目的。如果軟件可以偵測到係統可能被攻擊, 則可透過對應的處裏程序將攻擊損害程度降到最低。
本章節將依據前一章節提到的故障攻擊範例來說明軟件解決方案, 並實現可偵測出係統是否被攻擊以及對應的處理。
06 關鍵設置攻擊防護
在先前所舉TrustZone®設定攻擊的例子中,我們知道攻擊者企圖利用跳過SAU配置指令來影響Secure與Non-secure區域範圍的設置,企圖擴大Non-secure區域範圍,藉此取得存取Secure資源的機會。雖然在之前的描述中提到,因為Secure與Non-secure範圍設置,除了SAU,還需要搭配IDAU,所以單純的攻擊SAU,並無法取得有效的權限,但這裏我們仍然為這樣的攻擊提出對應的策略,讓攻擊者連SAU的設置都無法攻擊成功。
這個防護最主要原理,是偵測異常的SAU配置,並做複原SAU配置的處理, 讓針對SAU設置的攻擊無效化。
首先要偵測出異常的SAU設置,可針對所有的SAU設置進行冗餘檢查。
紀錄有效的係統SAU設定值:
1. 係統SAU設定值已預先被定義在partition_M2351.h內,需要將這些設定值預先記錄下來, 可供後續步驟的使用。
2. 計算出有效的係統SAU設定值總和 :
將有效的SAU相關設定例如: RBAR, RLAR和CTRL等設定值全部加起來做運算, 會得到一個Checksum值。
3. 將有效的SAU設定值寫入對應的SAU region :
將partition_M2351.h內定義有效的SAU設定值和屬性寫入各自的SAU區域內。
4. 讀出全部有被寫入SAU region的設定值, 並做加總運算
5. 判斷寫入SAU是否正確 :
在此比對Step 2和Step4計算出來的總和值是否一致,便可得知在寫SAU設定值是否因遭到攻擊而產生異常的設定結果。
上述步驟Step 1,2,4,5是針對偵測攻擊所加的步驟, 而Step 3則是原來沒有加防護代碼時的SAU設置。如下圖所示,

Figure 11. Fault Injection Countermeasure Flow.
接下來,偵測到錯誤後,必須要讓係統能夠自行回複,所以需要重複Step3的步驟再次寫入SAU設定。
07 防護Zero Key攻擊與AES加密攻擊
Zero Key攻擊與SAU設置攻擊類似,都是讓軟件寫入動作失效,也就是讓係統無法寫入正確地密鑰到運算單元中,因而使用默認的空白數據,據此產生使用 空白密鑰的效果。
對AES加密運算的攻擊, 目的是影響密鑰的加載使其加密出錯誤的密文,然後攻擊者透過分析大量不同的錯誤密文和正確密文的關係, 透過DFA分析方法推導出係統內使用的加密密鑰後, 再解密密文, 便可得到明文數據。
因此AES加密攻擊的防護重點是讓軟件可以知道AES加密運算過中有受到攻擊,避免使用到空白或錯誤的密鑰,並且不能將被攻擊後產生的密文回報給攻擊者,使其有機會進行DFA分析。
攻(gong)擊(ji)者(zhe)再(zai)攻(gong)擊(ji)密(mi)鑰(yao)的(de)加(jia)載(zai)前(qian),需(xu)要(yao)先(xian)精(jing)確(que)的(de)定(ding)位(wei)到(dao)特(te)定(ding)的(de)時(shi)間(jian)點(dian),因(yin)為(wei)配(pei)置(zhi)密(mi)鑰(yao)與(yu)輸(shu)入(ru)明(ming)文(wen)的(de)程(cheng)序(xu),是(shi)可(ke)以(yi)互(hu)換(huan)的(de),軟(ruan)件(jian)可(ke)以(yi)在(zai)這(zhe)個(ge)部(bu)分(fen)進(jin)行(xing)隨(sui)機(ji)的(de)次(ci)序(xu)調(tiao)換(huan),如(ru)此(ci)可(ke)以(yi)增(zeng)加(jia)攻(gong)擊(ji)者(zhe)定(ding)位(wei)密(mi)鑰(yao)加(jia)載(zai)時(shi)間(jian)點(dian)的(de)難(nan)度(du)。

Figure 12. Random change the plaintext, Key input procedure.
由於對AES運算的攻擊,重點在於使其密鑰的加載出錯,無論是Zero Key或是大量錯誤的Key,所以隻要在加載密鑰之後,再針對緩存器中的密鑰做檢查,即可保障密鑰輸入的正確性,而且如果運算中有使用到DMA的話,DMA的Source, Destination與Transfer Count都應該也納入檢查。
而(er)加(jia)密(mi)運(yun)算(suan)使(shi)用(yong)密(mi)鑰(yao)時(shi)的(de)攻(gong)擊(ji),則(ze)可(ke)在(zai)加(jia)密(mi)完(wan)成(cheng)後(hou),直(zhi)接(jie)把(ba)密(mi)文(wen)用(yong)同(tong)一(yi)把(ba)密(mi)鑰(yao)解(jie)密(mi),並(bing)與(yu)原(yuan)來(lai)的(de)明(ming)文(wen)做(zuo)比(bi)對(dui),即(ji)可(ke)驗(yan)證(zheng)在(zai)加(jia)密(mi)過(guo)程(cheng)中(zhong)是(shi)否(fou)有(you)任(ren)何(he)出(chu)錯(cuo)。
整個防護對策流程圖如下:

Figure 13. AES Key Fault Injection Countermeasure Flow.
總結
對於微控製器產品而言,Fault Injection確實是一個簡單、有效又低成本的攻擊, 隻是要能夠完整的取得有用的成果,攻擊仍然必須能夠精確的定位安全設定、密鑰加載、加(jia)密(mi)運(yun)算(suan)的(de)關(guan)鍵(jian)時(shi)序(xu),這(zhe)對(dui)並(bing)不(bu)熟(shu)悉(xi)微(wei)控(kong)製(zhi)器(qi)內(nei)部(bu)運(yun)行(xing)的(de)程(cheng)序(xu)的(de)惡(e)意(yi)攻(gong)擊(ji)已(yi)屬(shu)不(bu)易(yi),而(er)且(qie)軟(ruan)件(jian)也(ye)可(ke)以(yi)利(li)用(yong)隨(sui)機(ji)的(de)延(yan)遲(chi)與(yu)程(cheng)序(xu)交(jiao)錯(cuo)等(deng)方(fang)式(shi),更(geng)加(jia)深(shen)定(ding)位(wei)的(de)困(kun)難(nan)度(du)。
即使攻擊者精確找到關鍵位置,隻要軟件多一道自我校驗程序,就可以讓攻擊的難度急遽增加,因此對於係統中的關鍵設置、密鑰加載部分,增加相應的防護會是一個很值得做的事。
(來源:新唐MCU,作者:張紋碩 部經理 )
免責聲明:本文為轉載文章,轉載此文目的在於傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯係小編進行處理。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 具身智能成最大亮點!CITE 2026開幕峰會釋放產業強信號
- 助力醫療器械產業高質量發展 派克漢尼汾閃耀2026 ICMD
- 比異步時鍾更隱蔽的“芯片殺手”——跨複位域(RDC)問題
- 數據之外:液冷技術背後的連接器創新
- “眼在手上”的嵌入式實踐:基於ROS2與RK3576的機械臂跟隨抓取方案
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
ESD
ESD保護
ESD保護器件
ESD器件
Eurotect
Exar
Fairhild
FFC連接器
Flash
FPC連接器
FPGA
Fujitsu
Future
GFIVE
GPS
GPU
Harting
HDMI
HDMI連接器
HD監控
HID燈
I/O處理器
IC
IC插座
IDT
IGBT
in-cell
Intersil
IP監控
iWatt



