ブログ

FFRI BLOG

Monthly Research「TrustZoneのユースケースと動向」

 TrustZoneはARMプロセッサで利用可能なセキュリティメカニズムです。
 メモリをSecureな領域と非Secureな領域に分離し、Secureな領域に重要なリソースを隔離し、直接的なアクセスを不可能にすることでリソースを不正なアクセスから保護します。
 主な使用用途としてはNFCや各種認証処理などが想定されており、スマートフォンやIoTデバイスでの利用が想定されています。Android 7.0 では、TrustZone 等を使ったキーストアの実装が必須になっています。
 ARMプロセッサのCortex-A系とCortex-M系でTrustZoneの仕組みは異なりますが、いずれも信頼された実行環境(TEE)を実現することができます。
 今回はTrustZoneのユースケースやTrustZoneを使うTEEのセキュリティについて紹介します。

TrustZoneのユースケース

ARM社は下記のようなTrustZoneの活用例を挙げています。

①モバイルペイメント

  • カード情報や取引情報などをSecureな領域に保存することで、デバイス使用者やカード会社は意図しない決済が発生することを防ぐことができます。

②コンテンツマネジメン

  • コンテンツ提供者はコンテンツに対するユーザーの再生限度やそれをチェックするコード、コンテンツ管理データなどをSecureな領域に保存することで、提供したコンテンツやサービスがデバイスユーザーによって不正利用されることを防ぐことができます。

③認証情報の保持

  • 指紋情報など認証に利用する情報をSecureな領域に保持することで、なりすましを阻止します。

続いてTrustZoneの実装について簡単に説明します。

Cortex-AのTrustZone

 Cortex-Aプロセッサとはモバイルデバイスやネットワーク機器などで利用されているもので、スマートフォンなどもこの系統のプロセッサを利用しています。アーキテクチャはARMv7-A及びARMv8-Aです。
 Cortex-AのTrustZoneではSecure WorldとNormal Worldにメモリが分割され、Secure WorldではTrusted OSが動作します。
 モニターモード によって各領域の分離を行いモニターモードに対するエントリはSMC命令などを利用します。
 詳細はFFRI Monthly Research 2013年3月号を御覧ください。

図 1 Cortex-A系TrustZoneのイメージ

Cortex-MのTrustZone

 Cortex-MではCortex-AのTrustZoneの概念はそのままに低電力チップ向けに最適化された実装をしています。
 メモリ領域はそれぞれSecure State、Non-Secure State、 Non-Secure Callable Stateの3種類のStateが設定され、メモリ空間が分離されています。
 メモリ空間の管理はIDAU(実装定義属性ユニット)かSAU(セキュリティ属性ユニット)によって行われます。

 Non-Secure StateからSecure Stateへの遷移はBL命令でセキュリティゲートウェイを経由する場合とBX命令で呼び出し元のSecure Stateの関数へ戻る場合に可能です。
 一方、SecureからNon-Secureへの遷移は、BXNSやBLXNS命令でNon-Secureのアドレスを呼び出すことで可能です。
 ARMv8-M アーキテクチャから採用されており、公式に対応しているプロセッサとしてはCortex-M23/M33が存在します。
 詳細はFFRI Monthly Research 2016年2月号を御覧ください。

図 2 Cortex-M系TrustZoneのイメージ

TrustZoneを用いたTEE

 TEE (Trusted Execution Environment)とは、TrustZoneなどハードウェアレベルのセキュリティメカニズムを用いて実現される信頼されたソフトウェア実行環境のことです。
 TEEAPI群と実行環境、アプリケーション作成方針等はGlobalPlatform と Trusted Computing Groupによって標準化されています。GlobalPlatformはVisaなどのICカードの標準化組織です。
 TrustZoneを用いてTEEを実現するには、Trusted OSやライブラリの実装が必要です。
 TEEの実装は多数存在しますが、その中で代表的なものをいくつか紹介します。

Trusty TEE

  •  Googleが提供しているAndroid向けのTEE実装で、AOSPにソースコードが公開されています。ただし、現段階ではサードパーティによるTrustedアプリの追加はできないようです。

OP-TEE

  •  STMicroelectronicsとLinaro Security Working Groupが提供しているTEE実装で、GitHubにソースコードが公開されています。
     Cortex-A系プロセッサを搭載する多数のボードをサポートしているのが特徴です。

ARM mbed

  •  ARM社が公開しているIoTデバイス向けのプラットフォームで、ソースコードはmbedの公式サイトに公開されています。
     Cortex-Mを搭載する機器でTEEを実現することができることが特徴です。

TEE実装の脆弱性

 2017年1月24~25日に開催されたMicrosoft主催のセキュリティカンファレンス「BlueHat IL」で、GoogleのGal Beniamini氏がTrustZone TEEs An Attacker’s Perspective という発表を行いました。
 内容は、スマートフォンで利用されているQualcommとTrustonicのTrustZone TEE実装に対する攻撃者視点でのセキュリティ調査結果です。
 いずれのTEE実装もセキュリティメカニズムの実装が不十分であり、脆弱であると指摘されていました。
 具体的にはSecure領域のメモリを確保する際にASLRが有効でない、あるいはエントロピー不足であること、Stack cookieによるバッファオーバーフローの検知が行われないこと、ガードページのないバッファを使用しているなどでした。
 発表者は、調査結果をふまえてプロプライエタリなTEE実装もオープンソース化することを提案しています。

 この調査結果から、TEE実装にはセキュリティメカニズムが不完全なものがあり、そうしたものを利用すると信頼された実行環境が破綻するリスクがあることを示唆しています。  TEEを利用する際は、ASLRやスタック保護等のセキュリティメカニズムが正しく実装されているものを選択するほうが良いでしょう。

まとめ

  • Trust Zoneは、メモリをSecureな領域と非Secureな領域に分離し、Secureな領域に重要なリソースを保持することで信頼された実行環境(TEE)を実現します。
  • TrustZone TEEの実装は複数存在し、代表的なものとしてOP-TEEやTrusty TEEなどがあります。
  • TEE実装にはASLRやスタック保護機構の実装が不完全なものがあります。
  • ASLRやスタック保護が堅実なTEE実装を利用すべきです。


Monthly Researchのダウンロードはこちら(日本語 / English


関連記事

2013-04-05 Monthly Research 「セキュアハードウェアの登場とその分析」

Monthly Research 「ARMv8-M TrustZone:組み込みデバイス向けアーキテクチャとセキュリティ機能」

pagetop