STマイクロエレクトロニクスが、STM32マイコン体験実習(セキュリティ編①~⑤)という動画でCortex-M33 TrustZone解説とSTM32L5(Cortex-M33/110MHz、Flash/256/512KB、RAM/256KB)のセキュリティ実習を行っています。
このセキュリティ編①:31min17secから、IoT MCU向けセキュリティ強化Cortex-M33コアのARM TrustZoneマイコンと、通常Cortex-M0+/M4コアマイコンとの差分を抽出しました。TrustZoneマイコン基礎知識の習得が目的です。
セキュリティ編動画①~⑤概要
①P3(動画①、スライドP3を示します)に、動画①~⑤の概要が示されています。動画①でCortex-M33コアの解説、②でSTM32L5開発環境の準備、後半③~⑤でSTM32L5評価ボード:NUCLEO-L552ZE-Q(¥2,303 Mouser)を使ったセキュリティ演習という構成です。
本稿は、動画①から、ARM TrustZone Cortex-M33コアと通常Cortex-M0+/M4コアとの差分を一覧表にしました。
※ARM公式差分情報を知りたい方は、①P48の参考文献が参考になります。
Cortex-M33とCortex-M0+/M4の差分
オンデマンド動画ですので、好きな個所で止める、再生読度を変えるなどが可能です。動画①は、筆者が経験したTrustZone解説の中で最も分かり易い動画です。
特にP36/P37/P39は、4段階に増えたステート処理内容が具体的に判りTrustZoneマイコン特徴理解に役立ちます。
また、P19は、様々なセキュリティレベルと対応STM32MCUのセキュリティ機能差が一目で判る重要な資料です。
頁 | 要旨(ARM TrustZone Cortex-M33と通常Cortex-M0+/M4差分) |
7 | ソフトウェア攻撃防御策がTrustZone。物理攻撃対策はセキュアマイコン(≠汎用MCU)が有効。 |
12 | Secure呼出し=予め決めた手順で内蔵周辺回路(I2C/SPI/RAMなど)へアクセスする技術 Security Isolation=Secure呼出しを使い通常アクセスと隔離・分離する技術 ARM TrustZone=Security Isolationを対象MCUで柔軟に構成する技術 |
16 | タンパ=物理攻撃を検出→検出後バックアップレジスタやSRAM自動消去 JTAGピン無効化→設定後はGPIOなどで運用 WRP(WRite Protection):数KB単位設定可能 RDP(ReaD Protection):JTAG読出し禁止→読出検出でプログラム実行停止→PORで解除 Secure Memory=起動時のみ読出し可能な領域 |
17 | MPU(Memory Protection Unit):最大16個メモリ領域の読書き、命令実行許可/禁止設定 |
18 | セキュリティは単独では効果が薄く、複数重ね攻撃への敷居を上げ強化(暗号鍵保存例掲載) |
19 | STM32マイコン内蔵セキュリティ機能差一覧。TrustZone対応はSTM32L5のみ(2020/12時点) STM32G0/G4(Cortex-M0+/M4)でもSRAM RDP機能などあり |
22 | TrustZoneは、アドレス空間とバス通信の両方をハードウェア監視しアクセス制御 |
23 | アドレス空間監視=コア内蔵SAU IDAU、バス通信監視=TZ(TrustZone) ControllerとAHBバス |
24 | STM32L5は、内部FlashアクセスにST独自Flashレジスタとオプションバイトで保護 |
26 | TrustZone-aware周辺回路=DMA1&2/GPIO…などAHB接続回路は個別セキュリティ設定要 上記以外がSecurable周辺回路=UART/SPI…などでAHB/APBブリッジがアクセス監視 |
29 | 従来MCUベアメタル開発は、mainループも割込みハンドラも常に特権モード動作の1段階 |
30 | 従来MCUのRTOS開発は、割込みハンドラ/RTOSが特権モード、ユーザタスクは非特権の2段階 |
32 | Secureステート追加TrustZoneは、4段階化→各層の処理配置がTrustZoneソフト設計第一歩 |
35 | Secureソフトと従来ソフトのプロジェクト差一覧 (セキュリティ関連設定はSecureソフトのみ可能でmain関数はあるがmainループなしなど) |
36 | TrustZoneマイコンベアメタル開発の4段階ステート処理配置例(TrustZoneソフト設計例1) |
37 | TrustZoneマイコンRTOS開発の4段階ステート処理配置例(TrustZoneソフト設計例2) |
38 | TrustZoneソフト開発時、Secureソフトと通常ソフトの2プロジェクト作成必要 |
39 | TrustZoneソフトの基本実行フロー(Secureソフトから通常ソフトへの処理内容一覧) |
40 41 42 |
Secureステートと通常ステートのアドレス空間の見え方差まとめ |
44 | 動画①全体まとめ |
45 | STM32L5開発時のキーポイント一覧(全18項目) |
46 | STM32L5開発時のキーポイント演習項目一覧(18項目中9項目を動画③~⑤で演習) |
48 | おすすめARMv8-M(Cortex-M33コア)TrustZone参考文献一覧 |
TrustZoneマイコン開発は工数2倍、スキルも必要
動画①は、他ベンダのARM Cortex-M33 TrustZoneマイコン開発でも基礎知識が得られます(※P24のST独自Flashレジスタとオプションバイト保護は除く)。IoT MCU向けセキュリティ強化Cortex-M33コアで導入されたTrustZoneを活用するには、①の理解は最低限必要です。
従来Cortex-M0+/M4に比べ、Cortex-M33シングルコア開発でもSecureと通常(Normal)ソフトウェアの2プロジェクト必要、メモリ空間と周辺回路のセキュリティ設定必要(メモリ分割損も生じると予想)、JTAGピン無効化など、従来のアプリケーション開発とそのデバッグに加え、ソフトウェア攻撃対策TrustZone導入による工数やその動作確認/解除などの手間が余分に必要になります。
このTrustZone導入オーバーヘッドは、少なくないです(セキュリティ編②~⑤でオーバーヘッド工数が判ります。補足章に動画②~⑤リンク添付)。Cortex-M33コア最高速度が110MHzと他コア比高速で、Flash/RAMも大容量なのは、このオーバーヘッドのハードウェア対策だと思います。
TrustZoneマイコンのソフトウェア開発工数は、同じアプリケーションの通常マイコン開発の2倍程度は必要になると思います。また、TrustZone起因のトラブルに対する分析スキルも必須です。
ソフトウェア攻撃に対する防御壁の高さは、言い換えると、ソフトウェア開発のし難さと等価です。セキュリティレベルが上がるにつれ、開発コストも上がります。
全てのIoT MCUがTrustZone対応MCUである必要は無いと思います。コスト重視の場合は、従来Cortex-M0+/M4コアでセキュリティ強化対応(例えば、関連投稿:STM32G0/G4のRoot of Trust(1)~(3)など)でも使える可能性があります(関連投稿:IoT MCUコア次世代像のIoT MCUコアの3層構造最下層のFront End IoT MCUに相当)。
セキュリティは、強固な方が良いのは当然ですが、それ相応の追加コストも生じます。セキュリティ対コストの観点からIoT MCUの選択が必要となるでしょう。
* * *
セキュリティ対策は、いわば自動車保険のようなものです。保険代金の負担は、開発者かエンドユーザか、エンドユーザがTrustZone導入オーバーヘッドを理解することは難しいと思いますので悩ましい問題です😅。
Cortex-M33 TrustZoneマイコンは、ソフトウェア開発者が記述した処理を攻撃とマイコンが誤認識(正常認識)した場合は、無視、あるいは最悪、マイコンを使用不能にします。見つけにくい無視された処理が、開発者起因か、あるいはTrustZone起因かを分析できるスキル、これが、通常マイコン開発との最大の差分です。
STM32マイコン体験実習は、TrustZone起因スキルを習得できるよく考えられた教材です。
補足
STM32マイコン体験実習(セキュリティ編②)
STM32マイコン体験実習(セキュリティ編③)
STM32マイコン体験実習(セキュリティ編④)
STM32マイコン体験実習(セキュリティ編⑤)
関連投稿:STM HTML版マンスリー・アップデートの見かた4章の全体像リンク集なども役立ちます。
Cortex-M33コア以外でTrustZone技術を用いたマイコンは、Cortex-M35P、Cortex-M23があります。