LoginSignup
6
3

More than 3 years have passed since last update.

Armv8-MのTrustZoneを試してみました (第一回)

Last updated at Posted at 2019-07-25

はじめに

IoT機器が増える中、IoT機器への不正操作が問題となっています。
IoT機器へのセキュリティ対策の1つとして有効な最新ArmアーキテクチャArmv8-Mのセキュリティ機能「TrustZone」を実際に使ったデモを作成したときの記録を備忘録を兼ねてまとめてみました。
デモでは外部との通信を行う部分(下図の非セキュア空間)がバッファオーバフローなどで不正プログラムが実行されても、カメラなどのデバイスを制御する部分(下図のセキュア空間)は守られるという使い方を想定しています。
デモ想定図.jpg
Armv8-MのTrustZoneを実際に使ってみたい方のお役に立てればと思い公開しました。
Armv8-MやTrustZoneなどの説明は割愛します。

記事は数回に分けて連載する予定です。第一回は、動作環境とデモ構成について記述します。

動作環境

Armv8-MアーキテクチャのMCUとして、Cortex-M23をコアするNuvotonのM2351を使用しました。
以下の環境でデモを構築し動作させました。

項目 使用した環境
MCU Nuvoton M2351 (Cortex-M23)
評価ボード Nuvoton NuMicro M2351 v1.3
RTOS 富士通コンピュータテクノロジーズ μT-Kernel
IDE IAR EWARM 8.40.1
ホストマシン Microsoft Windows8.1

デモ構成

M2351内をセキュア空間と非セキュア空間に分け、セキュア空間にセキュア用カーネルを、非セキュア空間に非セキュア用カーネルをそれぞれ配置します。

以下の図がデモ構成のイメージです。
デモ構成図.jpg
M2351では各デバイス毎に、セキュアモードで使用するのか、非セキュアモードで使用するのかを設定できます。
デモではセキュア空間に配置するカメラなどに相当するデバイスとしてLEDを使用し、非セキュア空間に配置する外部との通信デバイスとしてUSBを使用します。
LEDを制御するタスクとしてセキュア用カーネル内にLED制御タスクを設け、LED制御タスクは1秒毎にLEDの点滅を繰り返します。
USBを制御して通信を行うタスクとして非セキュア用カーネル内にUSB通信/制御タスクを設け、USB通信/制御タスクはパソコンからのコマンド受信およびその結果の送信を行います。

デモ構成のメモリマップ

セキュア用カーネルが内蔵FlashからXIPで起動し、SRAM上に非セキュア空間を割当て、その非セキュア空間に非セキュア用カーネルを内蔵Flashからロードする仕組みにしています。
M2351には512Kbytesの内蔵Flash, 96KbytesのSRAMが搭載されており、デモでは以下のようなメモリマップで構成します。

アドレス 用途
0x00000000-0x0000ffff セキュアカーネルROM実行空間
0x00010000-0x0001ffff 非セキュアカーネルのロードモジュール置場
0x20000000-0x20007fff セキュアカーネルRAM空間
0x30008000-0x3000ffff 非セキュアカーネルROM実行空間
0x30010000-0x300177ff 非セキュアカーネルRAM空間
0x30017800-0x30017fff 共有メモリ空間

次回(第二回)はセキュアカーネルの作成について記述します。

『各種製品名は、各社の製品名称、商標または登録商標です。本記事に記載されているシステム名、製品名には、必ずしも商標表示((R)、TM)を付記していません。』

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3