2024 年 12 月 24 日
Armv9-A から導入される Realm とは? オープンソースとして公開される成果物も紹介
Realm(レルム)とは従来の TrustZone が構築する Normal World、Secure World の他に新たに加えられた動作環境です。他の 2 つの動作環境と同じくハードウェアレベルで分離されます。Armv9-A から導入される CCA(Confidential Compute Architecture)の機能として、2021 年に ARM から発表されました。現在のところ、Armv9-A が適用されたハードウェアを一般のエンジニアが触れることはできず、発信される Realm の情報は限られています。しかし、発表から数年経過し、世の中の研究機関の調査やオープンソースソフトウェアの開発の成果が一定の水準に達したことで、発表当時よりも鮮明に分かる事柄が徐々に増えてきたように思います。本記事では Realm の基本的な解説と共に、Realm を使用するためのオープンソースソフトウェアの開発状況についても紹介したいと思います。
Realm 紹介
従来の TrustZone との大きな違いとして、Realm は Normal World から制御されます。ARM が提唱する CCA では仮想マシン(VM)の技術をベースとして、Realm をはじめとするハードウェアリソースを管理します。Realm は VM のリソースの一部として、Normal World に配置されたハイバーバイザから制御されます。このハイパーバイザからの制御では、Realm に対する動的なメモリの割り当て、実行、破棄等の操作を行います。その一方で、Normal World 及び Secure World からは Realm のメモリの内容を観測、変更できないことが保証されており、そこで動作する OS とアプリケーションのコード、データを保護します。
以下は分離された各動作環境と制御ソフトウェアの関係を示したものです。Secure World については割愛します。
ARM には EL0〜EL3 までの特権レベルがあり、システムリソースとメモリへのアクセスが制御されます。EL0 はユーザレベルのアプリケーションが実行され、オペレーティングシステムは EL1 で実行されます。ハイパーバイザは EL2 で実行され、最高特権レベルである EL3 は最も高いセキュリティ性が求められるファームウェア向けに用意されています。
Realm は EL2 で動作する RMM(Realm Management Monitor)と Normal World のハイパーバイザが RMI(Realm Management Interface)を利用して通信することで制御されます。RMI の通信は EL3 で動作するモニタを通じて行われます。また、RMM と Realm は RSI(Realm Service Interface)を介して通信し、構成証明レポート(Attestation Report)やホスト側の呼び出し(Host Call)などの機能を利用できます。
これらの通信を利用し、Realm は Normal World で動作するハイパーバイザのバックエンドシステムのような位置づけで動作します。Normal World のユーザ視点では、Realm はハイパーバイザ上で動作する他の VM と同じように動作し、透過的に Realm のメモリ保護機能を利用できます。従来の TrustZone と比較したとき、このように一般ユーザからの利用のしやすさが考慮されていることには理由があります。Secure World で動作する Trusted OS や Trusted アプリケーションは、システムに近い開発を行う SoC ベンダや OEM などが提供するサービスでの利用に限られていました。それに対して、Realm は利用者をシステム開発者に限定せず、一般の開発者からの利用も想定します。これは上位レイヤーのソフトウェアベンダであっても、アプリケーションの動作にハードウェアレベルの堅牢なセキュリティを適用できるようにし、普及を促すためです。
ここで留意すべき点があります。Realm は Normal World のハイパーバイザに制御を委ねます。ハイパーバイザ自体が悪意を持ったソフトウェアから何らかの攻撃にさらされる可能性を考えた場合、Realm の正しい動作は保証されないことを理解しておく必要があります。動作環境が分離されることで機密性と整合性は得られる一方で、Realm 内のソフトウェアの動作が阻害される危険性が生じます。そのため、Secure World で動作する Trusted OS と Trusted アプリケーションに置き換わるものにはならないことを覚えておかなければなりません。要求される信頼性に応じて適切な使い分けが求められます。
Realm Management Extension によるメモリ管理と保護
Realm は Realm Mangement Extention(RME)と呼ばれるハードウェアの機能拡張により実現されます。RME はメモリの管理と保護に関する事柄に重点が置かれます。そのうちの重要な機能の 1 つとして、Realm を含めた各動作環境からアクセスされるメモリの保護機能を提供する Granule Protection Check(GPC)があります。GPC は Memory Management Unit(MMU)に備えられた機能で、現在のセキュリティ状態と特権レベルに応じてアクセス可能な物理アドレス空間を判断します。
従来の TrustZone では Non-secure State と Secure State の 2 つのセキュリティ状態が提供されていました。RME ではこの 2 つに加え、新たに Realm State と Root State が追加されました。Realm State は Realm の動作環境の構築に利用されます。Root State は EL3 に用意されたセキュリティ状態で、EL3 に限ってはそれ以外のセキュリティ状態は割当たっておらず、Root State でのみ実行されます。EL3 ではプラットフォーム全体を管理する目的のコードを実行するため、他のセキュリティ状態全てから信頼される必要があります。隔てられた全ての動作環境に干渉できる特別なセキュリティ状態です。
RME ではセキュリティ状態毎に異なる物理メモリ空間が割り当てられます。各セキュリティ状態からメモリへのアクセス可否は、以下のアクセス制御ポリシーに従います。
Non-secure State は自身のメモリにのみアクセスできます。Realm と Secure State は自身のメモリと Non-secure State のメモリにアクセスできますが、互いのメモリにはアクセスできません。Root State は全てのメモリにアクセスできます。
これらの物理メモリの割り当ては、MMU から参照される Granule Protection Table(GPT)により管理されます。GPT はそれぞれの物理メモリの所属を 4KB の単位で管理します。この 4KB 単位のメモリフレームは Memory Granule と呼ばれ、各 Granule は GPT を更新することにより、セキュリティ状態毎の割り当てを動的に移行できます。Realm はこの機能により、Normal World のハイパーバイザからの動的なメモリ割り当てを可能にしています。Realm を利用するための初期化処理として、Non-secure State の物理メモリを Realm へ移行するこの動作は、関連文書では Memory Delegation(メモリの委任)と表現されます。
RMM 上の OS 及びアプリケーションは、stage-2 transtaion により生成される仮想メモリ上で動作します。stage-2 traslation は 2 段階のアドレス変換機構を持ち、一般の OS がアプリケーションに割り当てる VAS(Virtual Address Space)の他に中間の物理アドレス空間である IPAS(Intermmediate Physical Address Space)を生成します。これらは VAS→IPAS→ PAS(Physical Address Space)の順にアドレス変換されます。RMM 上の OS には IPAS が割り当てらて、通常の PAS だと認識して動作します。複数の VM が起動して Realm が利用されるケースでは、それぞれの OS に異なる IPAS が割れ当てられることで、相互に分離された動作環境が与えられます。stage-2 translation 自体は従来の VM でも用いられてきた仕組みであり、Realm では RMI を介したコマンド実行により操作されます。
QEMU をベースとしたエミュレーション環境の構築
QEMU を利用した Realm の実行方法が Linaro から紹介されています。 ARMv9-A の CPU が QEMU によってエミュレーションされた環境がベースになります。
ソフトウェア構成を見た限りでは、RMM 以外は既存のオープンソースのソフトウェアを拡張した形式が取られています。ハイパーバイザには KVM(Kernel-based Virtual Machine)、EL3 で動作するモニタには従来の TrustZone で用いられてきた Trusted Firmware にそれぞれ変更が加えられて利用されています。これらの開発資産はアップストリームへの提案も実施されているようですが、現状ではマージされるまでには至っていないようです。(2024 年 9 月現在)
実施可能なデモンストレーションとしては、通常起動を試せる他に Attestation Token のテストケースについても紹介されています。
Attestation Token には動作中の ARM CCA のプラットフォームを検証するためのパラメータ一式が記載されます。ハードウェアから採取された識別子、メモリ上に読み込まれたソフトウェアコンポーネントから計算されたハッシュ値等が RMM に要求することで得られます。これらの値を利用することでハードウェアのすり替え、またソフトウェアの改ざん等を検証できます。
Attestation Token のデモンストレーションには、単純な Veraison と連携させた Remote Attestation のテストも用意されています。Veraison は標準ベースの Remote Attestation プロトコルの実装を目指すオープンソースプロジェクトです。
おわりに
Realm は依然として新しく発表された技術として紹介されている情報が多数を占めており、具体的なユースケースを想定したデモンストレーションの検証までには至っていません。ARM、Linaro の開発者のみを主体として開発が進められている現在の段階から進み、世の中の様々な開発者が手に取りアイデアを凝らす段階へ入ったときには、オープンソースプロジェクトとしての特性が生きてより洗練されていく可能性があると思います。AI x IoT 時代を支える重要な一技術となっていくことを望みます。
参考文献
- ARM Ltd. 2023. Learn the architecture - Introducing Arm Confidential Compute Architecture
- ARM Ltd. 2021. Learn the architecture - Realm Management Extension
- ARM Ltd. 2023. Learn the architecture - Arm Confidential Compute Architecture software stack
- Johannes Weidner 2023. ARM Confidential Compute Architecture
- Xupeng Li, Xuheng Li, Christoffer Dall, Ronghui Gu, Jason Nieh, Yousuf Sait, Gareth Stockwell 2023. Enabling Realms with the Arm Confidential Compute Architecture
- ARM Ltd. 2022. Realm Management Monitor specification