組み込み開発

『今月のあなたの支払いは100万円です』~あくいのあるSWからあなたを守るARMのTrustZoneのポリシーの推察

More than 3 years have passed since last update.

『今月のあなたの支払いは100万円です』

あくいのあるSWにより、あなたのクレジットカードの情報が悪い人に知られ、あなたの知らぬ間に利用されてしまう。

こんなケース、心配じゃありませんか。

組み込みの現場ではあくいのあるSWが情報を抜き取らないようセキュリティを意識した開発が行われております。
ところが、その仕組みが分かる形で記入されることが少ないため、ARMのTrustzoneによるセキュリティ保護の仕組みを一事例として紹介してみたいと思います。
※『ARM コンパイラツールチェーン アセンブラリファレンス』のSMC命令を見たら、『SMC システムモニタコールです。』という説明になっていない説明しか書いていなかったのでむしゃくしゃして調べたというのが本音です。

僕たち利用者は通常1つのOS(例えばandroid)でたくさんのSW(アプリ)が動作する状況を想定しています。
グラフィックス1.png

このシステムの場合、あくいのあるSWをユーザがダウンロードしてしまった場合、
あくいのあるSWがユーザの情報を奪い、悪い人に情報を送信してしまう可能性があります。
グラフィックス2.png

そこで、ARMは秘情報を守るために、TrustZoneという考えを導入しました。
TrustZoneとは、安全な人:『Secure』、悪い可能性のある人:『NonSecure』に分け、
秘情報にアクセスできる人をSecureに限るという考え方です。
また、悪い可能性のある人でも、正しい手続きを踏めば秘情報にアクセスできるよう
ユーザーモード、特権モードというモードに分けています。
(正しい手順とは、特権モードにおいてSMC命令を発行して、NonSecure OSが秘情報に正しくアクセスするか監視する番人であるセキュアモニターを通じ、秘情報にアクセスするという手順です)
グラフィックス3.png

このように分けることで、
1.ハードウェア起動時などには最小の動作を実現するSecure OSを動作させ、システム設定を行う
2.最終的な利用者が用いるNonSecure OSを起動
3.アプリなど第三者が開発したソフトはユーザモードでのみしか動作させず、秘情報へのアクセスを不可とする
4.一方、NonSecure OSでも秘情報には正しい手順であれば、秘情報の取り扱いは可能とする
というポリシーを実現しているのだろうと思います。
グラフィックス4.png

※本説明ではSecure OSでもユーザーモードと特権モードがあることを説明の流れ上省いて説明しています。ご了承ください。
※誤りがありましたらご指摘・ご意見お願いします。

参考文献:
『ARM コンパイラツールチェーン アセンブラリファレンス』
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489bj/Cjaeeged.html

『セキュアプラットフォームソフトウェア LiSTEE』
http://www.toshiba.co.jp/tech/review/2014/01/69_01pdf/a08.pdf

『ザイリンクス Zynq-7000 All Programmable SoC でのARM TrustZone アーキテクチャのプログラミングユーザーガイド』
http://japan.xilinx.com/support/documentation/user_guides/j_ug1019-zynq-trustzone.pdf