Arm TrustZone【組込み開発 基本のキ】

MCUセキュリティの2回目は、Arm TrustZoneについて解説します。前稿解説のセキュアブートは、MCU起動ソフトウェアの信頼検証を行います。Arm TrustZoneは、MCU実行中ソフトウェアの改ざん防御技術です。

TrustZoneもベンダやMCU毎にその実装が大きく異なりますので、TrustZone基本知識を解り易く説明後、実装例を示します。

※TrustZoneはセキュアブートも包含します。本稿はセキュアブート以外の内容を解説し、Summaryでまとめます。

Arm TrustZone基本

Arm TrustZone基本
Arm TrustZone基本

セキュアブート同様、Arm TrustZone(以下TrustZone)も専用ハードウェアで実行中MCUソフトウェアの改ざん防御やセキュリティ確保を行います。

TrustZoneは、気密性の高いデータ保存や重要周辺回路、処理ソフトウェアを保存する「セキュア領域」と、それ以外の「ノンセキュア領域」にMCUハードウェアを分離します。そして、ノンセキュア領域のソフトウェアは、予め決めた手続きに従わないと、セキュア領域へのアクセスができません。

つまり、ノンセキュアソフトウェアのセキュア領域直接アクセスが禁止です。これにより、セキュア領域の改ざん防御とセキュリティを確保します。

セキュア領域は、暗号鍵や機密データ、割込みハンドラなどの重要ソフトウェアを保存します。
ノンセキュア領域は、通常の周辺回路やアプリケーションソフトウェアを保存します。

TrustZoneセキュリティ違反検出時は、セキュリティ例外処理を実行します。この処理内容は、システム設計や実装により大きく異なります。例えば、MCU動作停止やセーフモードでの最小機能動作、ネットワーク経由での違反内容通知などがあります。

このようにTrustZoneは、様々なセキュリティレベルに柔軟に対応可能です。TrustZone対応Arm Cortex-Mコア一覧が下記です。Cortex-M33など新しい設計のArmv8-M MCUコアは、TrustZone内蔵です。

TrustZone対応Arm Cortex-M_Processor_Comparison_Tableに加筆(出典:ARM)
TrustZone対応Arm Cortex-M_Processor_Comparison_Tableに加筆(出典:ARM)

※Cortex-M7は、MPUで設計も古いためTrustZoneなし。TrustZone MPUは、Cortex-A35など。

TrustZone実装例

前章でTrustZoneの基本を解説しました。しかし、実際のTrustZoneは、もっと複雑です。

例えば、STマイクロ)STM32L5/U5 MCU(Cortex-M33コア)のTrustZoneウェビナー資料が、コチラからダウンロードできます。

I2C/SPIへのハッカー攻撃例(P10)とその防御(P11)、TrustZone分離例(P20)、セキュリティ違反検出方法(P21~23)、TrustZone初期設定フロー(P29)などが示されています。

また、TrustZoneにJTAGポート無効化やMCUパッケージ開封検出(タンパ検出)などの複数セキュリティ機能を重ね、セキュリティレベルを上げていることも判ります(P17)。

複数セキュリティを重ねセキュリティレベルを上げる(出典:STマイクロSTM32L5/U5 MCU TrustZoneウェビナー資料)
複数セキュリティを重ねセキュリティレベルを上げる(出典:STマイクロSTM32L5/U5 MCU TrustZoneウェビナー資料)

この実装例は、Secure User Memory(P15)格納の暗号鍵を使ってセキュアブート後、I2Cデバイス制御とSPI無線通信制御を重要ソフトウェアセキュア領域へ格納、ハッカー攻撃などセキュリティ違反検出時でも、これらセキュアソフトウェア処理は継続、かつ、セキュリティ違反検出内容を外部無線通知するMCUアプリだと推測します。

※ウェビナー資料でファームウェアと記述の箇所は、本稿のソフトウェアと解釈してください。

TrustZone開発の難しさ

TrustZoneを使うMCU開発は、通常開発に加え、

  • 想定攻撃、脅威は何か
  • セキュリティ違反の例外処理をどうするか
  • 例外処理デバッグはどう行うか
  • セキュア領域の重要ソフトウェア、周辺回路は何か
  • セキュア/ノンセキュア分離アプリの同時開発

など、多くの課題があります。また、セキュア/ノンセキュア分離前の通常アプリにバグが無いことも必要です。さらに、セキュリティ対策効果とリスク、開発コストに対し、費用対効果を顧客と相談する必要もあります。

TrustZone MCU開発は、高度なスキルが必要になると思います。

Summary:Arm TrustZone基本知識

組込み開発基本のキとして、MCUハードウェアをセキュア領域とノンセキュア領域に分離し、ノンセキュアソフトウェアのセキュア領域直接アクセスを禁止することで、実行中のセキュア領域ソフトウェア改ざん防御とセキュリティ確保を行うArm TrustZoneの基本を示しました。

TrustZoneセキュリティ違反検出時は、セキュリティ例外処理を実行します。この例外処理内容は、システム設計や実装により大きく異なります。このセキュリティレベル多様性理解には、TrustZone基本知識が重要です。

前稿解説セキュアブートは、MCU起動ソフトウェア信頼性の検証を行います。セキュアブートとTrustZoneの併用で、起動/実行中のソフトウェア改ざん防御とセキュリティ確保ができます。TrustZoneが、セキュアブートを包含する理由がこれです。

Arm TrsutZomeまとめ
Arm TrsutZomeまとめ

Afterword1:自転車ロードレース競技中のハッキング

ワイヤレス技術利用制御系の潜在的脆弱性攻撃例が、コチラにあります。350ドル程度のソフトウェア無線機HackRFやRaspberry Piなどでも攻撃可能だそうです。本稿のTrustZone実装例が対策に使われたのかもしれません。ハッキング検出時でも、簡単に動作停止できない(しない)事例です。

Afterword2:MCUセキュリティまとめ

セキュアブートとTrustZoneから、MCUセキュリティを俯瞰したのが下記です。

  • 攻撃対象ソフトをRoot of Trust(RoT)ハードで守るのがMCUセキュリティ
  • RoTハードでセキュリティ違反検出、例外処理ソフトで違反処理
  • セキュリティ実装はアプリや運用で大きく変わる。開発費用対効果の検討必須
  • Armv8-M以後の新しいMCUコアにRoT TrustZone内蔵

費用対効果には、セキュリティ全般知識も必要です。これは、セキュリティ実装開発とは別次元の難しい課題です。対策は、AI PCを使ったセキュリティコンサルタント育成などでしょうか?

ブログ右上検索窓へ「基本のキ」と入力し検索すると、様々なMCU開発者向け基本知識が得られます。ご活用ください。


MCUセキュアブート【組込み開発 基本のキ】

ランサムウェア攻撃による企業活動停止やWindowsブルースクリーン大規模障害など、重大セキュリティインシデントが急増中です。MCU開発者にとっても、他人事ではありません。

そこで、MCUセキュリティの基礎、MCUセキュアブートとArm TrustZoneを2回に分けて解説します。セキュアブート編が本稿です。

MCUセキュリティが判り難い原因は、ベンダ、MCU毎にセキュリティレベルや実装が大きく異なるからです。そこで、個別セキュリティの前に、基本知識としてMCUセキュアブート(本稿)とArm TrustZone(次稿)を解り易く示し、その後、実装例を示す2段構えの方法で解説します。

MCUセキュリティ背景

MCUソフトウェアは、悪意を持つ第3者による改ざんやウイルス感染などで書き換わる可能性があります。一方、改ざんの可能性が無く安全なのは、MCUハードウェアです。

従来のMCU開発は、サイバー攻撃などのソフトウェア書き換えは、想定外でした。

しかし、PCセキュリティトラブルやランサムウェア被害などが増え、MCUも攻撃対象となりました。特にIoT MCUは、ネットにつながるため防御が必須です。この防御全般がIoT MCUセキュリティ(以下MCUセキュリティ)です。

セキュリティリスクを下げるには、開発コストが上がる。MCU開発者は、費用対効果バランスも考える必要がある。
セキュリティリスクを下げるには、開発コストが上がる。MCU開発者は、費用対効果バランスも考える必要がある。

今後のMCU開発では、MCUセキュリティ対策が望まれます。しかし、ソフトウェアのみでは対処できないため、セキュリティレベルに応じた追加ハードウェアが必要です。また、セキュリティオーバーヘッドのため、通常のセキュリティ無しソフトウェアに比べ処理能力も低下します。

MCUセキュリティ開発は費用対効果、つまり、これら追加効果とセキュリティリスク、セキュリティ開発コストのバランスを、どう解決するかがポイントです。

実装セキュリティがベンダやMCU毎に異なるのは、このポイントにバラツキがあるためです。顧客が、起きるか起きないか判らないMCUセキュリティインシデントに対し、どの程度開発コストを負担するか不明なのと同じです。

MCUセキュアブート基本

セキュアブート解説の前に、通常のMCUブートを簡単に説明します。

通常のMCUブートは、リセット→動作クロック設定→RAMゼロクリア→RAM初期値設定などを経て、Flash格納ユーザアプリケーションを起動します。格納ソフトウェアに、ハッカー攻撃などの改ざんが無いことが大前提です。

関連投稿3章に通常ブート説明。

MCUセキュアブートと通常ブート
MCUセキュアブートと通常ブート

一方セキュアブートでは、最初にFlash格納ソフトウェアに改ざんが無いことを、暗号化技術を使って検証します。このため暗号化アクセラレータや暗号鍵の専用ストレージが必要になります。

検証失敗時は、動作停止、またはリカバリーモードへ移行し、検証成功時のみ通常ブートを行います。つまり、起動ソフトウェアの信頼検証をハードウェアのみで行うのが、MCUセキュアブートです。

通常ブートと比べると、事前に改ざんソフトウェアの実行が防げますが、検証時間が余分に掛かります。このセキュアブートハードウェアをRoot of Trustと呼び、専用ハードウェアとしてMCUに内蔵されます。例えば、Arm Cortex-M33コアMCUなどがこれに相当します。

Root of Trust(RoT)は、最も基本的なセキュリティ領域の保証概念。ここが信頼できることを前提にセキュリティが構築されるため、信頼根と呼ばれる。

高度車載セキュアブート実装例

前章でMCUセキュアブートの基本を解説しました。しかし、実際のセキュアブートは、もっと複雑です。

例えば、ルネサス車載MCU RH850セキュアブートが、コチラです。

高度なセキュリティレベルが求められる車載MCUのセキュアブート例で、豊富な図を使って解説しています。セキュリティ専門用語も多いため、用語や略称集も添付されています。

しかし、前章基本を理解していれば、高度車載MCUセキュアブートでも掲載図だけで概ね把握できると思います。

車載ソフトウェアイメージ検証(出典:ルネサスRH850セキュアブート)
車載ソフトウェアイメージ検証(出典:ルネサスRH850セキュアブート)

Summary:MCUセキュアブート基本知識

MCUセキュリティの実装は、セキュリティ対策効果とリスク、その開発コストにより大きく変わります。Root of Trustを持つCortex-M33コアの汎用MCUでさえ、アプリケーションや顧客要求に応じ実装セキュリティは変わります。

例えばセキュアブートは、MCU起動時処理のため常時運用など再起動が少ない場合は効果も期待薄です。

MCU開発者のセキュリティ実装を困難にする原因の1つが、この多様性です。

そこで、組込み開発基本のキを示す本稿は、MCUセキュリティ基本知識として、起動時ソフトウェア信頼検証をハードウェアのみで行うMCUセキュアブートと、そのセキュアブート実現基盤のRoot of Trustを解説しました。

基本知識があれば、様々なセキュリティ実装開発にも対応できるからです。

次回は、MCU運用中セキュリティを確保するArm TrustZoneを解説します。

Afterword:Windowsブルースクリーン記事

Windowsブルースクリーン記事や解説が、ITmediaにまとまっています。業務の合間などリフレッシュを兼ねて目を通してはいかがでしょうか?