Cortex-Mコア内蔵マイコンで、マルウェアに対してセキュリティ(防衛陣)をつくる方法に、「セキュリティアイソレーション」があります。
セキュリティアイソレーションとは、マルウェアに攻撃を受けた場合でもある程度の可用性を維持するため、重要なメモリ領域やペリフェラルをアクセスしにくくする、というアイデアです。Cortex-Mコア内蔵マイコンでセキュリティアイソレーションを実現するための技術の筆頭格はTrustZoneですが、MPUでもセキュリティアイソレーションを実現可能です。図6がMPUでもセキュリティアイソレーションのイメージ図です。
MPUによるセキュリティアイソレーションの実現の要点は下記4つです。
(1)アイソレーションしたいメモリ領域やペリフェラルのアクセス属性をMPUで変更して、特権アクセスのみ許可。
(2)MPUでアイソレーションするメモリやペリフェラルにアクセスするためのシステムコールを作成。
(3)アイソレーションしたメモリやペリフェラルにアクセスするときにSVC命令を実行し、ハンドラモードでシステムコールを呼び出す流れをつくる。
(4)Cortex-Mコアレジスタの1つ「CONTROLレジスタ」のnPRIVビット = 1に設定して、スレッドモードを非特権状態にして、スレッドモード=非特権、ハンドラモード=特権にする。
Cortex-Mにはスレッドモードとハンドラモードの2つの動作モードがあり、割込みや例外が発生するとハンドラモードで動作し、それ以外はスレッドモードで動作します。デフォルトでは、どちらの動作モードでも特権状態で動作します。
Cortex-MコアレジスタビットCONTROL.nPRIV=1にセットすると、スレッドモードでは非特権状態で動作するようになり、下記のようになります。
スレッドモードで動作時 → 非特権状態
ハンドラモードで動作時 → 特権状態
SVC命令を実行すると、任意のタイミングでスーパーバイザーコールによるソフトウェア割込みを発生可能なため、この仕組みを利用して、ソフトウェア割込みによるハンドラモードで、あらかじめ用意してある関数(システムコール)を実行して、特権アクセスのみ許可したメモリ領域やペリフェラルレジスタにアクセスします。
MPUによるセキュリティアイソレーションの詳細な解説と実装例の参考資料は下記をご覧ください。
Cortex-Mマイコンが内蔵するFLASHやSRAMは読み書き両方可能ですが、MPUで「読み出しのみ」に設定できます。ファームウェアの誤動作でFLASHやSRAM上に配置しているデータや命令コードが書き変わることを防ぎたい、という場合にMPUで該当メモリ領域を「読み出しのみ」に設定すると有効な対策になります。図7は、STM32H735マイコンのAXI SRAM領域の一部を読み出しのみに設定する例です。
A-Dコンバーターの4つのトラブル事例と対策
マイコンの低消費UART、普通のUARTと何が違う?
Quad SPIフラッシュメモリの使用上の注意
マイコンの低消費電力モードの使い分け
マイコンのAXIプロトコルって何?
組み込みセキュリティ規格「IEC 62443-4-2」とは?Copyright © ITmedia, Inc. All Rights Reserved.
記事ランキング