MCU的安全保護不僅限於CPU本身,更擴大到了系統匯流排、周邊連接介面、記憶體控制等;在步入物聯網時代後,包括終端裝置、閘道器、雲端伺服器資訊等的安全必須進行通盤而完善的考量與設計。
物聯網環境內終端裝置設計的安全需求等級,可以漏斗型思維做為晶片需求選擇標準,亦即應用場景愈靠近漏斗底部,安全漏洞愈大(圖1),因此MCU的安全級別將愈高;反之,如應用場景並無特別不可預期的資安風險,則可選擇漏斗中上層的MCU產品。這並非冒著風險犧牲安全,而是考量實際應用場景,尋找效能與成本最佳的MCU組合,筆者認為「功能齊備」與「毫無安全漏洞」兩者將相互衝突,另一方面,在物聯網架構下,是否應該只依賴終端裝置來完全確保資安,也是值得探討的課題。
|
圖1 物聯網安全設計思維 |
有一個傳統的MCU應用系統設計課題常被提起,那就是智慧財產權的保護。早期的安全晶片設計著重於關鍵資料的保護,例如Smartcard內部儲存的個人識別與電子交易憑證⋯等資料,可視為使用者資產的資訊。
同樣地,運行於MCU內部的軟體,也是產品開發商的重要資產,特別在步入物聯網時代後,關鍵的資料可以被放到雲端,終端產品不一定需要使用高安全級別MCU保護,但如果產品容易被完全複製(Device Clone),這些偽裝置將輕易連網進入服務系統,造成巨大安全漏洞,衍生問題如癱瘓服務網路、竊取雲端伺服器資訊、竊聽網路內部通訊等,所以智慧財產權的保護,是一嚴肅課題。
如何做到資產保護
參考ARM對MCU應用系統攻擊的分類,大致上可以分成下述三大類:
-中間人攻擊(Man in the Middle, MITM)
-強度弱的隨機亂數產生器(Weak Random Number Generator)
-代碼漏洞(Code Vulnerabilities)
-傳輸層安全協議(Transport Layer Security, TLS)
-緩衝區溢位(Buffer Overflows)
-訊號中斷(Interrupts)
-惡意軟體(Malware)
-故障注入攻擊(Fault Injection)
-旁道攻擊(Side Channel Attacks, SCA)
-探測、聚焦離子束顯微系統(Probing & Focused Ion Beam, FIB)
想當然,ARM也提供了相對應的防範技術(表1),它們分別是:針對通訊攻擊的mbed OS所含的TLS、可防範軟體攻擊的TrustZone、能夠防禦物理攻擊的SecurCore晶片架構(圖2)。筆者認為以物聯網安全為考量的MCU應用,晶片設計業者必須至少能夠兼顧通訊與軟體層級的安全防護,同時還要有足夠的能力保護軟體知識資產。
|
表1 ARM針對MCU應用系統提出的安全防範方案 |
|
圖2 ARM針對MCU應用系統遭受攻擊的主要項目分類 |
TrustZone for ARMv8-M
ARM在2016年10月推出了Cortex-M23與Cortex-M33兩款新的CPU核心,最大的特點就是添加了TrustZone for ARMv8-M技術——以位址的屬性(Memory Address)來區別信任區(Secure World)與非信任區(Non-Secure World)。
由圖3可以進一步了解到TrustZone的導入可以讓晶片內部CPU運行時根據位址屬性之區別做到以下行為:
|
圖3 TrustZone for ARMv8-M安全屬性範例 |
-可將不同區的軟體和資源(主要指硬體)區隔並共用同一CPU
-ARMv8-M並不需要軟體監視程式(Software Monitor),所以程式於不同區的轉換運行程序比起ARMv8-A要簡單,可降低Cortex-M CPU的負擔
-將部分核心軟體演算法放至Secure World(類似secure MCU的配置)
-Non-Secure World的程式要跟Secure World的程式溝通,一定要透過Secure Gateway(類似開白名單的做法)
-將部分機敏資料儲存區與硬體資源固定歸到Secure World
為此,我們可以發現MCU的安全保護不僅限於CPU本身,更擴大到了系統匯流排(System Bus)、周邊連接介面(Peripheral Devices)、記憶體控制(Memory Controller)。這樣的架構並不是簡單導入ARMv8-M的CPU IP就夠了,因此ARM還增加了兩個元件:IDAU(Implementation Defined Attribution Unit)和SAU(Security Attribution Unit)。為了MCU整體系統的順暢運行,業者仍有需要增加如SCU(Secure Configuration Unit)與修改FMC(Flash Memory Controller)的設計才能達到如圖4的安全性。
|
圖4 TrustZone for ARMv8-M的MCU範例架構 |
TrustZone+Execute-Only Memory(XOM)
基本上TrustZone強調的是對Secure World內部資產的保護,然而近年來的MCU應用發展愈來愈多元,加上物聯網興起勢必催生更多的應用產品,這些產品的開發將有賴更多的知識匯集,有時並不是一兩家公司就能完成,在創新需求又得兼顧IP的保護原則下,MCU的應用設計保護一直是個問題。
MCU內部Secure World保護已經解決大部分的問題,但有時候仍有Non-Secure World的需求,畢竟一分為二的TrustZone技術只是不同的CPU狀態,實際的商業合作中可能會遇到Non-Secure不希望讓Secure讀取的情況,這時XOM(圖5)便是一個經濟的搭配TrustZone for ARMv8-M的技術;它不像Java一樣要放個VM增加系統資源需求並會拖累到MCU的效能,還能夠同時保護各個程式區塊的IP,使其不被其他區塊的程式,特別是Secure區塊的惡意程式整包讀取,並且Secure和Non-Secure區域都可以應用XOM技術。
|
圖5 XOM架構功能說明 |
完整的知識產權保護
有了TrustZone與XOM的技術,實際上對MCU內部CPU運行而言應有相當程度的安全保護,但如就實際的MCU應用系統而言仍有相當的不足,誠如先前所提到的兼顧通訊安全與軟體資產的保護,於是我們看到了一些額外的需求,諸如:
檢驗MCU內部Flash Memory內容是否遭竄改,方法為檢驗記憶體內容的MAC值(Message Authentication Code),並提供合法使用者權限允許其對Flash Memory進行更新,以實現Hardware Root of Trust要求。
為了減輕CPU的負擔並增加解密演算法的執行速度,愈來愈多的MCU增添了密碼加速器,常見的種類有AES、DES/3DES、SHA、HMAC及PKI常用的RSA與ECC,另外真實亂數產生器(True Random Number Generator, TRNG)也必須包含在內。
即使有TrustZone與XOM,但如透過MCU外部依然有方法可讀寫Flash Memory資料,所以Flash Memory鎖定(Lock)也是常見的方法。
為了實現並方便鎖定Flash Memory,利用Key Protection ROM(KPROM)儲存管理密碼是一種簡單又安全的方法,這份密碼被設定並存放在晶片內部特定區域後即無法被任何程式讀取,只能經由硬體電路比對。
自從TrustZone問世,傳統的Debug有了一些變化,最基本的需求是Secure World內容願不願意讓Non-Secure World開發者進行追蹤,因為這是屬於MCU外部路徑,可以配合前述Flash Lock進行管理,彈性選擇開放區域進行除錯工作。
使用者可根據使用環境的需求,依據駭客(攻擊破壞者) 需要花費之時間、特殊實驗室設備和專業知識來設計MCU之入侵防範(Anti-tampering)層級:
-System Level:終端產品機構打開入侵
-Device Level:可視為PCB層級,駭客經由產品電路板進行MCU管角訊號分析,進而進行軟體行為分析或關鍵資訊竊取,業界稱為「Semi-Invasive Attack」
-Chip Level:晶片實體入侵,屬於傳統安全MCU的標準設計要求,必須達到防範安全實驗室等級入侵,即「Invasive Attack」
綜上所述,將TrustZone for ARMv8-M Secure MCU的功能與特色以圖6來做簡要闡明。
|
圖6 實用Cortex-M23/33 TrustZone for ARMv8-M架構範例 |
全球第一顆採用ARMv8-M架構的MCU
在今年3月於德國紐倫堡舉行的Embedded World Expo會場中,新唐科技展示了全球第一顆真正採用ARMv8-M架構的NuMicro M2351 MCU,除了搭載了本文介紹的各項安全特色外,更與指紋廠商合作推出內建辨識驗算法、安全保護功能且易於二次開發的指紋辨識方案(Trusted Fingerprint Solution)。
(作者為新唐科技微控制器應用事業群技術經理)