メディア

Arm Cortex-Mのメモリプロテクションユニット(MPU)って何?Q&Aで学ぶマイコン講座(108)(5/5 ページ)

» 2025年10月31日 10時00分 公開
前のページへ 1|2|3|4|5       

セキュリティ

 Cortex-Mコア内蔵マイコンで、マルウェアに対してセキュリティ(防衛陣)をつくる方法に、「セキュリティアイソレーション」があります。

 セキュリティアイソレーションとは、マルウェアに攻撃を受けた場合でもある程度の可用性を維持するため、重要なメモリ領域やペリフェラルをアクセスしにくくする、というアイデアです。Cortex-Mコア内蔵マイコンでセキュリティアイソレーションを実現するための技術の筆頭格はTrustZoneですが、MPUでもセキュリティアイソレーションを実現可能です。図6がMPUでもセキュリティアイソレーションのイメージ図です。

<strong>図6:MPUによるセキュリティアイソレーション</strong> 図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領域の一部を読み出しのみに設定する例です。

<strong>図7:AXI SRAM領域の一部を読出しのみ許可する例</strong> 図7:AXI SRAM領域の一部を読出しのみ許可する例[クリックで拡大]
前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.