(58)【調査した分野】(Int.Cl.,DB名)
保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットと、
前記プロセッシングユニットの前記セキュアモードで稼働するハイパーバイザーとを有するシステムであって、
前記ハイパーバイザーは、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定する第1の設定ユニットと、
前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定する第2の設定ユニットと、
前記第2のOSに対し前記第1のデバイスを仮想化して提供するエミュレーションユニットとを含み、
前記第1の動作条件および前記第2の動作条件は前記非保安領域に設定された共有のメモリ領域の動作条件を含み、前記共有のメモリ領域の動作条件は、前記第2のOSが前記共有のメモリ領域に書き込むと前記セキュアモードへ移行することを含み、さらに、
前記ハイパーバイザーは、前記共有のメモリ領域に書き込まれたことを前記第1のOSに通知するユニットを含み、
前記第1のOSは、前記共有のメモリ領域に書き込むと割り込みにより前記第2のOSに通知するユニットを含む、システム。
保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSを制御する方法であって、
前記システムは、前記プロセッシングユニットの前記セキュアモードで稼働するハイパーバイザーを含み、
当該方法は、
前記ハイパーバイザーが、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定することと、
前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定することと、
前記第2のOSに対し前記第1のデバイスを仮想化して提供することとを含み、
前記第1の動作条件および前記第2の動作条件は前記非保安領域に設定された共有のメモリ領域の動作条件を含み、
当該方法は、さらに、
前記第2のOSが前記共有のメモリ領域に書き込むと前記セキュアモードへ移行し、前記ハイパーバイザーが、前記共有のメモリ領域に書き込まれたことを前記第1のOSに通知することと、
前記第1のOSが、前記共有のメモリ領域に書き込むと割り込みにより前記第2のOSに通知することとを含む、方法。
保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSの制御を可能とするプログラムであって、
前記プロセッシングユニットの前記セキュアモードでハイパーバイザーを稼働させる命令を含み、
前記ハイパーバイザーが、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定することと、
前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定することと、
前記第2のOSに対し前記第1のデバイスを仮想化して提供することとを実行し、
さらに、前記第1の動作条件および前記第2の動作条件は前記非保安領域に設定された共有のメモリ領域の動作条件を含み、
さらに、前記第2のOSが前記共有のメモリ領域に書き込むと前記セキュアモードへ移行し、前記ハイパーバイザーが、前記共有のメモリ領域に書き込まれたことを前記第1のOSに通知することと、
前記第1のOSが、前記共有のメモリ領域に書き込むと割り込みにより前記第2のOSに通知することとを含む、プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ハードウェアレベルでセキュアドメイン(セキュアモード、セキュアワールド)および低セキュアドメイン(低セキュアモード、低セキュアワールド、ノーマルワールド、典型的には非セキュアモード(ノンセキュアモード))をサポートする機能(支援機能)を備えたデータ処理装置において、さらに安全な仮想化環境を提供することが要望されている。
【課題を解決するための手段】
【0005】
本発明の一態様は、保安領域と非保安領域とを含むメモリの保安領域へのアクセスを禁止する支援機能を含み、支援機能により保安領域へのアクセスが禁止された低セキュアモード(低セキュア環境)、典型的には非セキュアモード(ノンセキュアモード、非安全モード)と、保安領域へのアクセスが許可されたセキュアモード(安全モード、セキュア環境)とを含む実行モード(実行環境)を備えたプロセッシングユニットと、プロセッシングユニットのセキュアモードで稼働するハイパーバイザーとを有するシステムである。ハイパーバイザーは、セキュアモードで稼働する第1のOSに対して保安領域および非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定する第1の設定ユニットと、低セキュアモードで稼働する第2のOSに対して非保安領域に対するアクセスを可能とし、支援機能を用いて保安領域へのアクセスを不可とし、さらに、第1のOSと共用する第1のデバイスに対するアクセスによりセキュアモードに移行することを含む第2の動作条件を設定する第2の設定ユニットと、第2のOSに対し第1のデバイスを仮想化して提供するエミュレーションユニットとを含む。
【0006】
このシステムにおいて、ハイパーバイザーは、外界からのアタックが基本的に防止された安全な実行環境(セキュアワールド)を提供するセキュアモードで稼働する。したがって、低セキュアモードで稼働するリッチOSなどの第2のOSからの干渉や攻撃に晒される可能性が少なく、セキュアモードで稼働するハイパーバイザーにより、さらに安全な仮想化環境(仮想環境)を提供できる。
【0007】
一方、低セキュアモードで稼働する第2のOSの動作で仮想化が必要になると、プロセッシングユニットが低セキュアモードからセキュアモードに切り替わり、処理速度が低下する要因になる。このため、ハイパーバイザーは、セキュアモードで動作する第1のOSの第1の動作条件(第1のコンフィグレーション)を設定する第1の設定ユニットとともに、低セキュアモードで動作する第2のOSの第2の動作条件(第2のコンフィグレーション)を設定する第2の設定ユニットを含み、ハイパーバイザーはセキュアモード(セキュア環境)で動作し、低セキュアモードの第2のOSの動作条件を設定する。
【0008】
第2の動作条件は、非保安領域に対するアクセスを可能とし、支援機能を用いて保安領域へのアクセスを不可とし、さらに、第1のOSと共用する第1のデバイスに対するアクセスによりセキュアモードに移行することを含み、ハイパーバイザーは、セキュアモードにおいて、エミュレーションユニットにより、第2のOSに対し第1のデバイスを仮想化して提供する。この第2の動作条件により、低セキュアモードで稼働する第2のOSは、メモリの非保安領域へセキュアモードに移行せずにアクセス可能となり、また、セキュアモードで稼働するOSと共用しないデバイスに対してもセキュアモードに移行せずにアクセス可能となる。したがって、低セキュアモードで稼働する第2のOSにおいては、稼働中にセキュアモードへ移行するタイミングを削減でき、仮想化による処理速度の低下を抑制できる。一方、セキュアモードで稼働する第1のOSにおいては、第2のOSと共用する第1のデバイスに対するアクセスはセキュアモードにおいて仮想化され、モードの移行に伴う処理速度の低下を抑制できる。このため、リアルタイムOS(RTOS)などの応答速度の低下が問題になるOSをセキュアモードにおいて、信頼性の高い状態で稼働させることができる。
【0009】
第1の動作条件は、低セキュアなコンピュータネットワークを含む非保安デバイスに対するアクセスを不可とすることを含み、第2の動作条件は、非保安デバイスに対するアクセスを可能とすることを含んでもよい。ハイパーバイザーは、第1の動作条件により、セキュアモードで動作する第1のOSがセキュリティ上、重要な非保安デバイスなどのリソースへのアクセスを不可とすることにより、さらに第1のOSの安全性を確保できる。また、第1の動作条件および第2の動作条件により、コンピュータネットワークへのアクセスを、例えば、第2のOSに固定(制約)すること可能となる。
【0010】
ハイパーバイザーが設定する各OSの動作条件により、OS毎にアクセス可能なデバイスを限定することが可能となり、デバイス側から見ると、複数動作するOSの中のいずれかに割り当てられ、割り当てられたOSからのみアクセスされるように、ハイパーバイザーが仮想環境(OSの動作環境)を設定できる。したがって、各OSに対してリソース(デバイス)を固定化でき、固定化することによりデバイスの共有を避け、ハイパーバイザーが共有されたデバイスをエミュレーションする機会を低減することにより、ハイパーバイザーが動作する機会を低減している。このため、本システムは、ハイパーバイザーをセキュアモードで稼働することにより仮想化の安全性を確保できるとともに、低セキュアモードで稼働するOSの処理速度の低下を抑制できる。
【0011】
また、ハイパーバイザーはセキュアモードで稼働する。このため、ハイパーバイザーは、第1のOSおよび第2のOSを含む複数のOSを切り替えるOS切替ユニットを含み、OS切替ユニットは、複数のOSの動作条件および複数のOSのコンテキストをそれぞれ保安領域に格納するユニットを含むことができる。OSを切り替える際のコンテキスト(OSの状態)を、いっそう安全に退避させて、確実に複数のOSを切り替えできる。
【0012】
セキュアモードをサポートする支援機能の一例は、ARM社が提供するトラストゾーン機構(TZ機構)であり、MIPSテクノロジー社が提供するVZ機構であり、インテル社が提供するバーチャライゼーションテクノロジー(VT)機構である。第2のOSの一例は、リナックス(登録商標)、アンドロイドなどの機能の高いリッチで汎用性の高いOSである。セキュアな第1のOS(セキュアOS)の一例は、組み込み制御用ソフトをサポートするリアルタイムOSである。
【0013】
さらに、このシステムは、ハイパーバイザーがOS起動準備ユニットを有していてもよい。ハイパーバイザーはセキュアモードで稼働するので、OS起動準備ユニットは、保安領域に格納された第2のOSのファームウェアを、保安領域に格納された認証情報を用いて認証する第1の認証ユニットと、保安領域に格納された認証済みの第2のOSのファームウェアを非保安領域のブート領域に実行用のインスタンスとして展開する展開ユニットとを含むことができる。ハイパーバイザーは、低セキュアモードで稼働する第2のOSからはアクセスできない(見えない)保安領域に格納された認証情報により認証済みの第2のOSのファームウェアを用いて第2のOSを起動できる。このため、第2のOSのファームウェアが、第2のOSなどの低セキュアモードで稼働するOSおよびアプリケーションにより改変されることを防止できる。
【0014】
さらに、このシステムは、セキュアモードで稼働する更新ユニットを有していてもよい。セキュアモードで稼働するハイパーバイザーが更新ユニットを含んでいてもよい。更新ユニットは、非保安領域にダウンロードされた更新用のファームウェアを保安領域に格納された認証情報を用いて認証する第2の認証ユニットと、非保安領域にダウンロードされた認証済みの更新用のファームウェアを保安領域に格納する格納ユニットとを含む。更新用のファームウェアのダウンロードは第2のOS上で動くアプリケーションで実行してメモリの非保安領域に格納できる。更新ユニットは、セキュアモードで稼働し、第2の認証ユニットにより非保安領域に格納された更新用のファームウェアを認証してから、格納ユニットにより更新用のファームウェアを保安領域に格納する。この処理により、保安領域に格納された認証情報により認証済みのファームウェアを保安領域に格納し、保安領域に格納した状態で使用できる。このため、更新用のファームウェアが第2のOSなどの低セキュアモードで稼働するOSおよびアプリケーションにより改変されることを防止できる。
【0015】
第1の動作条件および第2の動作条件は非保安領域に設定された共有のメモリ領域の動作条件を含んでいる。共有のメモリ領域を非保安領域に設定することにより、第1のOSおよび第2のOSが共有のメモリ領域にアクセスする際にハイパーバイザーが介入する機会を低減でき、OS間通信に要する時間を短縮できる。共有のメモリ領域の動作条件は、第2のOSが共有のメモリ領域に書き込むとセキュアモードへ移行することを含み、ハイパーバイザーは、共有のメモリ領域に書き込まれたことを第1のOSに通知するユニットを含み、第1のOSは、共有のメモリ領域に書き込むと割り込みにより第2のOSに通知するユニットを含む。第1のOSは、ハイパーバイザーを介さずに第2のOSに通知できるので、ハイパーバイザーの応答を待たずにリアルタイムの処理を継続できる。
【0016】
このシステムは、メモリとプロセッシングユニットとが搭載されたシステムオンチップをそなえていてもよい。また、このシステムは、第2のOS上で稼働するアプリケーションと、アプリケーションにより制御される装置とを有していてもよい。ハイパーバイザーにより、非保安なデバイスを含めて多種多様なデバイスとのアクセスが可能であり、多種多様な装置を制御するアプリケーションを第2のOS上で稼働できる。装置は、プリンタ、印刷装置、製本装置、加工機械などの産業用の装置であってもよく、冷蔵庫、洗濯機、電子レンジなどの家庭用の装置であってもよく、エンジン、自動車用の制御装置であってもよい。
【0017】
本発明の他の態様の1つは、保安領域と非保安領域とを含むメモリの保安領域へのアクセスを禁止する支援機能を含み、支援機能により保安領域へのアクセスが禁止された低セキュアモードと、保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSを制御する方法である。このシステムは、プロセッシングユニットのセキュアモードで稼働するハイパーバイザーを含み、当該方法は、以下のステップを含む。
1.ハイパーバイザーが、セキュアモードで稼働する第1のOSに対して保安領域および非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定すること。
2.ハイパーバイザーが、低セキュアモードで稼働する第2のOSに対して非保安領域に対するアクセスを可能とし、支援機能を用いて保安領域へのアクセスを不可とし、さらに、第1のOSと共用する第1のデバイスに対するアクセスによりセキュアモードに移行することを含む第2の動作条件を設定すること。
3.ハイパーバイザーが、第2のOSに対し第1のデバイスを仮想化して提供すること。
【0018】
当該方法は、さらに、ハイパーバイザーが、OSの起動を準備することを含み、OSの起動を準備することは、保安領域に格納された第2のOSのファームウェアを保安領域に格納された認証情報を用いて認証することと、保安領域に格納された認証済みの第2のOSのファームウェアを非保安領域のブート領域に実行用のインスタンスとして展開することとを含んでもよい。
【0019】
当該方法は、さらに、セキュアモードで稼働する更新ユニットが、非保安領域にダウンロードされた更新用のファームウェアを保安領域に格納された認証情報を用いて認証することと、非保安領域にダウンロードされた認証済みの更新用のファームウェアを保安領域に格納することとを含んでもよい。
【0020】
当該方法は、さらに、第2のOSが非保安領域に設定された共有のメモリ領域に書き込むとセキュアモードへ移行し、ハイパーバイザーが、共有のメモリ領域に書き込まれたことを第1のOSに通知することと、第1のOSが、共有のメモリ領域に書き込むと割り込みにより第2のOSに通知することとを含む。
【0021】
本発明のさらに異なる他の態様の1つは、保安領域と非保安領域とを含むメモリの保安領域へのアクセスを禁止する支援機能を含み、支援機能により保安領域へのアクセスが禁止された低セキュアモードと、保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSの制御を可能とするプログラム(プログラム製品)である。このプログラム(プログラム製品)は、コンピュータが読み取り可能な記録媒体に記録して提供することができる。プログラムは、プロセッシングユニットのセキュアモードでハイパーバイザーを稼働させる命令を含み、ハイパーバイザーが、セキュアモードで稼働する第1のOSに対して保安領域および非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定することと、低セキュアモードで稼働する第2のOSに対して非保安領域に対するアクセスを可能とし、支援機能を用いて保安領域へのアクセスを不可とし、さらに、第1のOSと共用する第1のデバイスに対するアクセスによりセキュアモードに移行することを含む第2の動作条件を設定することと、第2のOSに対し第1のデバイスを仮想化して提供することとを実行する。
【発明を実施するための形態】
【0023】
図1に、ハイパーバイザーを備えたシステムの一例を示している。このシステム1は、家電製品、産業機械、プリンタ、自動車などに組み込まれるコンピュータシステムであり、典型的にはSoC(システムオンチップ)である。システム1は、プロセッサユニット11を含むハードウェアプラットフォーム10と、その上で稼働するハイパーバイザー20と、ハイパーバイザー20が提供する仮想化環境で稼働するセキュアOS(第1のOS)30およびリッチOS(第2のOS)41〜43とを含む。
【0024】
プロセッサユニット11は、複数の実行モード(実行環境)を提供するが、本実施形態では、メモリに保安領域を設定し、その保安領域へのアクセスを禁止する支援機能(メモリ保護機能)により実現されるセキュアモード2と、セキュアモード2より保安レベルが低い低セキュアモード(以降では非セキュアモード、ノンセキュアモードまたはノーマルモードと呼ぶ)3との2つの実行モードを想定する。非セキュアモード3においてはプロセッサユニット11の支援機能によりメモリの保安領域へのアクセスが禁止される。
【0025】
システム1は、セキュアモード2で稼働するセキュアOS30の上(セキュアワールド)で動くトラステッドアプリケーション群35と、非セキュアモード3で稼働するリッチOS41〜43の上(非セキュアワールド、ノーマルワールド)で動くクライアントアプリケーション群45とを有する。非セキュアモード3で稼働するリッチOS41〜43などのOSを、以下においては非セキュア(ノンセキュア)なOSまたはノンセキュアOSと記載することがある。
【0026】
IoT(Internet of Things)を構成する組込システムの機能は、システムソフトウェアであるOS(Operating System)およびOS上のアプリケーションによって規定される。ハイパーバイザー20は複数のOS環境を構築できる。本願の出願人が提供するハイパーバイザー「FOXvisor」および「FEXEROX」は、プロセッサ(プロセッサユニット)11がハードウェアとして持つ支援機構12を用いて複数のOSを分離することができるベアメタルタイプ(タイプI)のハイパーバイザーである。
【0027】
支援機能は、ARM系のIPが組み込まれたプロセッサではTrustZone(以下ではTZ機構と呼称)を用いることができ、MIPS系のIPが組み込まれたプロセッサではVZ機構を用いることができ、Intel系のプロセッサではVT機構を用いることができる。支援機能は、仮想化拡張機能を含んでいてもよく、ARM系のIPが組み込まれたプロセッサではバーチャルエクステンション(Virtualization Extension)およびLPAE(Large Physical Address Extension)を挙げることができる。
【0028】
以降においては、支援機能(セキュア支援機能、セキュア支援機構)としてTZ機構12を含んだプロセッサユニット11を参照する。TZ機構12においては、ノーマルワールドのメモリ空間12aとセキュアワールドのメモリ空間12bとが分離でき、ノーマルワールドからセキュアワールドのメモリ空間12bが見えず、アクセスできない(アクセスが禁止された)環境を構築できる。さらに、このプロセッサユニット11においては、メモリ空間に周辺デバイス(ペリフェラルのバッファ)やレジスタを含めたリソースがマップされる。このため、TZ機構12により、デバイスを含めたリソースの特定のアドレスに対するアクセスをトラップしてセキュアモード2に移行することが可能となる。
【0029】
図2に、TrustZones認定のプラットフォーム(SoC)10の構成を示している。プラットフォーム10は、セキュア支援機能を備えたプロセッサ11と、汎用のフラッシュメモリ13mと、汎用RAM18であるDDRメモリとを含む。プロセッサユニット11は、TZ機構を制御する機能を備えたCPU11aと、DDRメモリのコントローラ11bと、TZ機構のアドレス空間を制御するコントローラ11cと、セキュアキーEPROM15と、セキュアブートROM16と、セキュアカーネルRAM17と、スタティックメモリコントローラ13とを含む。プラットフォーム10においては、汎用RAMのDDRメモリ18のアドレス空間のうちの保安領域(セキュア領域)18aは、TZ機構12により非セキュアモード(ノーマルワールド)3ではアクセスできない領域となっている。また、セキュアキーEPROM15、セキュアブートROM16、およびセキュアカーネルRAM17も保安領域であり、TZ機構12により非セキュアモード3ではアクセスできない領域となっている。このプラットフォーム10においては、DDRメモリ18のアドレス空間領域のうちの非保安領域(非セキュア領域)18bに、複数のOSが共通にアクセスできる共有領域18cが設定される。
【0030】
図1に戻って、ハイパーバイザー20は、ハイパーバイザー20の制御により稼働する複数のOSの起動準備を行うOS起動準備ユニット25と、プロセッサユニット11のリソースが不足した場合などにOS切り替えを行うOS切替ユニット26と、仮想デバイスとしての機能を提供するエミュレーションユニット27と、OS間通信をサポートするOS間通信ユニット28とを含む。ハイパーバイザー20は、システム1が起動する際に、セキュアブートROM16に格納されているファームウェア(プログラム、プログラム製品)14hがプロセッサユニット11のブートローダによりロードされて起動する。
【0031】
起動準備ユニット25は、セキュアモード2で稼働する第1のOS(セキュアOS)30の起動に際し、セキュアOS30に対してメモリの保安領域および非保安領域へのアクセスを可能とすることを含む第1の動作条件(第1のコンフィグレーション)21を設定する第1の設定ユニット23を含む。起動準備ユニット25は、さらに、非セキュアモード3で稼働する第2のOS(リッチOS、ノンセキュアOS)41〜43のそれぞれの起動に際し、ノンセキュアOS41〜43のそれぞれに対して非保安領域に対するアクセスを可能とし、支援機能であるTZ機構12を用いて保安領域へのアクセスを不可とする第2の動作条件(第2のコンフィグレーション)22a〜22cを設定する第2の設定ユニット24a〜24cを含む。第2のコンフィグレーション22a〜22cは、さらに、セキュアOS30と共用するデバイス(第1のデバイス)に対するアクセスによりセキュアモード2に移行することを含む。
【0032】
具体的には、第1のコンフィグレーション21は、セキュアOS30のデバイスドライバ36に対応してハードウェアプラットフォーム10のセキュアな資源(デバイス)を割り当て、それらの資源にアクセス可能とする。第2のコンフィグレーション22a〜22cは、ノンセキュアなリッチOS41〜43のそれぞれのデバイスドライバ46に対応してハードウェアプラットフォーム10のノンセキュアな資源(デバイス)を割り当てて、それらにアクセス可能とする。
【0033】
したがって、ハイパーバイザー20が、セキュアOS30に第1のコンフィグレーション21を適用した後に起動することにより、セキュアOS30の上で動くアプリケーション35にはセキュアな動作環境を提供できる。また、ハイパーバイザー20が、ノンセキュアなリッチOS41〜43に第2のコンフィグレーション22a〜22cを適用した後に起動することにより、リッチOS41〜43の上で動くアプリケーション45にはセキュアではないが汎用性の高い動作環境を提供できる。セキュアOS30およびリッチOS41〜43は、切り替えて稼働してもよく、マルチコアのプロセッサユニット11であれば、セキュアOS30およびノンセキュアなリッチOS41〜43をすべて、またはそれらの一部を並列に稼働してもよい。ノンセキュアなOSの一例であるリッチOS(第2のOS)41〜43は、たとえば、リナックス(登録商標)、アンドロイドなどの多種多様なアプリケーションに対応した汎用OSである。
【0034】
第1のコンフィグレーション21は、セキュアOS30に対して、メモリのセキュアな領域(保安領域)であるセキュアキーEPROM15と、セキュアブートROM16と、セキュアカーネルRAM17と、汎用RAMであるDDRメモリ18のセキュア領域18aとを割り当ててアクセスを可能とする。第1のコンフィグレーション21は、さらに、第1のOS30に対して、DDRメモリ18の非セキュア領域(非保安領域)18bも割り当て、ノンセキュア領域18bにアクセス可能とする。セキュアOS30のデバイスドライバ36は、OS間通信を可能とするドライバ36xを含み、第1のコンフィグレーション21は、ドライバ36xに割り当てるOS間通信用の共有メモリ18cのマッピング情報を含む動作条件21xを含む。
【0035】
第1のコンフィグレーション21は、非セキュアなネットワークデバイス19aや、汎用インタフェースデバイス19bなどの非セキュアなリソースをセキュアOS30に割り当てず、セキュアOS30およびセキュアOS30の上で動くトラステッドアプリケーション35からこれらの非セキュアなリソースへの直接的なアクセスは禁止され、許可されない。第1のコンフィグレーション21は、ハイパーバイザー20が提供する仮想デバイスを用い、認証などの所定の安全性を保障する手続きを介して間接的に非セキュアなリソースにアクセスする動作条件を含んでいてもよい。
【0036】
第2のコンフィグレーション22a〜22cのうち、たとえば、第2のコンフィグレーション22aは、汎用でノンセキュアなリッチOS41に対し、DDRメモリ18の非セキュア領域18bの固定されたアドレス領域と、ネットワークデバイス19aと、汎用インタフェースデバイス19bに含まれる特定のデバイスを固定した状態で割り当て、ノンセキュアOS41の上で動くアプリケーション45がこれらのデバイスに、非セキュアモード3で、すなわち、セキュアモード2に移行せずにアクセス可能とする。
【0037】
第2のコンフィグレーション22aは、セキュアOS30と共用するデバイス(第1のデバイス)、例えば、DMAC11xおよびタイマ部11tに対するアクセスによりセキュアモード2に移行する。リッチOS41は、セキュアモード2で稼働するハイパーバイザー20の提供する仮想デバイスとしてこれらのデバイスにアクセスする。プロセッサユニット11は、リッチOS41が共用のデバイスにアクセスする特定のアドレスに対するアクセスをトラップすると、セキュアモード2に移行し、ハイパーバイザー20のエミュレーションユニット27は、アクセスの対象となるデバイス、アクセスしているレジスタ、ゲストOSであるリッチOS41の状態を解析してエミュレーションする内容を決める。
【0038】
リッチOS41のデバイスドライバ46は、OS間通信を可能とするドライバ46xを含み、第2のコンフィグレーション22は、ドライバ46xに割り当てるOS間通信用の共有メモリ18cのマッピング情報を含む動作条件22xを含む。
【0039】
第2のコンフィグレーション22aは、ノーマルワールド(非セキュアモード)で動作する条件(環境)を提供する。第2のコンフィグレーション22aを設定することにより、TZ機構12によりノーマルワールドのメモリ空間12aによりDDRメモリ18のノンセキュア領域18bにアクセスできる。しかしながら、TZ機構12により、セキュアワールドのメモリ空間12bのセキュア領域18aなどのアドレスは見えず、リッチOS41およびこのOS41の上で動作するクライアントアプリケーション45からセキュアキーEPROM15、セキュアブートROM16、セキュアカーネルRAM17、汎用RAMのセキュア領域18aは見えず、これらの領域へのアクセスは許可されない。
【0040】
OS起動準備ユニット25は、さらに、セキュアブート(安全ブート)ユニット50と、更新ユニット(セキュアアップデートユニット)60とを含む。セキュアブートユニット50は、保安領域であるセキュアブートROM16に格納された第2のOS41のファームウェア14fを保安領域であるセキュアキーEPROM15に格納された認証情報15aを用いて認証する第1の認証ユニット51と、保安領域であるセキュアブートROM16に格納された認証済みの第2のOSのファームウェア14fを非保安領域であるDDRメモリ18のノンセキュア領域18bのブート領域18sに展開して実行用のインスタンス14iを形成する展開ユニット52とを含む。
【0041】
実行用のインスタンス14iが用意されると、ハイパーバイザー20は、第2のOS41を起動するための第2のコンフィグレーション22aをセットし、非セキュアモード3に切り替える。プロセッサユニット11のブートローダが非保安領域であるノンセキュア領域18bに形成された実行用のインスタンス14iをロードすることにより、第2のOS41が起動される。
【0042】
プロセッサユニット11がマルチコアであれば、特定のCPUコアの実行モードを非セキュアモード3に切り替えて、第2のコンフィグレーション22aを使用して第2のOS41を起動できる。したがって、プロセッサユニット11の中で、セキュアモード2で稼働するセキュアOS30と、非セキュアモード3で稼働する第2のOS(リッチOS、ノンセキュアOS)41とを並列に稼働させることが可能である。プロセッサユニット11がシングルコアであったり、複数のOSを並列に稼働するためにはリソースが不足する場合には、モードを切り替えてセキュアOS30とノンセキュアOS41とを順番に起動および稼働させることも可能である。他のOS42および43においても同様である。
【0043】
いずれの場合も、非セキュアモード3で稼働する第2のOS41からは、自らを起動するオリジナルのファームウェア14fが格納されているセキュアブートROM16が見えず、また、書き込めない。したがって、ノンセキュアOS41が、何等かの要因により改変されることを防止できる。
【0044】
更新ユニット60は、非保安領域であるノンセキュアなメモリ領域18bにダウンロードされたノンセキュアなリッチOS41の更新用のファームウェア14nを、保安領域であるセキュアキーEPROM15に格納された認証情報15bを用いて認証する第2の認証ユニット61と、非セキュアなメモリ領域18bにダウンロードされた認証済みの更新用のファームウェア14nを、保安領域であるセキュアブートROM16に格納する格納ユニット62とを含む。セキュアブートROM16に格納する際に、あるいは格納後、以前のファームウェア14fを、新たにダウンロードした更新用のファームウェア14nに置き換えることにより、ノンセキュアOS41のブート用のファームウェア14fを安全に更新できる。他のOSのファームウェアについても同様に安全に更新できる。
【0045】
更新ユニット60は、ハイパーバイザー20が稼働するセキュアモード2において、第2のOS41によりダウンロードされた更新用のファームウェア14nを、セキュアブート用のメモリ16に格納する前に、セキュアな環境で、第2のOS41から見えない、書けない状態で、セキュアなメモリ15に格納されたセキュアな認証情報15bを用いて認証できる。したがって、悪意があるコードを含むファームウェアをダウンロードした場合であっても、ブート用のメモリ16に格納するまえにセキュアな状態で確認でき、悪意のあるコードを含むファームウェアを排除できる。
【0046】
OS切替ユニット26は、複数のOSの動作条件(コンフィグレーション)および複数のOSのコンテキスト26xをそれぞれ、メモリの保安領域、例えばDDRメモリ18の保安領域18aに格納するユニット26aを含む。コンテキスト26xは、対応するOSの稼働状態を示す情報であり、具体的には、各CPUコアのレジスタの内容を含むものである。例えば、セキュアOS30からノンセキュアOS41に切り替える場合は、ハイパーバイザー20が稼働するセキュアモード2において、OS切替ユニット26が、セキュアOS30が稼働していたCPUコアのレジスタの内容をコア単位で取得し、コンテキスト26xを生成し、セキュアOS30のコンフィグレーション21とともに保安領域18aに格納する。
【0047】
さらに、OS切替ユニット26は、保安領域18aに格納されていた(一時退避されていた)ノンセキュアOS41のコンテキスト26xをロードし、ロードされたコンテキスト26xに基づきCPUコア毎のレジスタの内容を設定する。その後、コンフィグレーション22aを設定し、ノンセキュアOS41を再開するプログラムカウンタを設定する。プロセッサユニット11は、非セキュアモード3に移行し、設定されたプログラムカウンタから処理を開始することによりノンセキュアOS41を再開できる。他のOSを切り替えるときも同様である。このハイパーバイザー20においては、非セキュアモード3で稼働するOS同士の切り替えであっても、セキュアモード2でOS切替を行うことにより、コンテキスト26xを保安領域18aに格納することができる。したがって、非セキュアモード3でOSが稼働している状態でも、一時的に退避している他のOSの状態が改変されることを防止でき、プロセッサユニット11およびシステム1における処理の信頼性を向上できる。
【0048】
OS間通信ユニット28は、第1のコンフィグレーション21および第2のコンフィグレーション22aにそれぞれ含まれるOS間通信用の動作条件21xおよび22xに基づき行われるOS間通信をセキュアモード2でサポートする。動作条件21xおよび22xにより設定される共有メモリ領域18cは、非保安領域18b内なので、セキュアモード2で稼働するセキュアOS30も、非セキュアモード3で稼働するノンセキュアOS41においてもモードを移行せずにアクセスできる。第2のコンフィグレーション22aに含まれる動作条件22xは、ノンセキュアOS41が共有のメモリ領域18cに書き込むとセキュアモード2へ移行することを含む。セキュアモード2へ移行すると、ハイパーバイザー20は、トラップされた条件を解析し、OS間通信ユニット28が共有のメモリ領域18cに書き込まれたことをセキュアOS30に通知する。これによりセキュアOS30が共有のメモリ領域18cにアクセスする(読みだす)ことによりOS間通信が成立する。
【0049】
セキュアOS30のOS間通信用のデバイスドライバ36xは、共有のメモリ領域18cに書き込むと、セキュアモード2から非セキュアモード3へは割り込みを用いて通知できるので、ノンセキュアOS41が並列に稼働している場合は、割り込み36qによりノンセキュアOS41に通知する。ノンセキュアOS41は、非セキュアモード3で共有メモリ領域18cにアクセスする(読みだす)ことによりOS間通信が成立する。共有のメモリ領域18cを保安領域に設けハイパーバイザー20により完全仮想化してOS間通信を実現することも可能である。しかしながら、共有のメモリ領域18cを非保安領域18bに設けることにより、ハイパーバイザー20がOS間通信に関する処理に関わることを抑制でき、OS間通信に要する処理時間を短縮できる。さらに、セキュアOS30が割り込みを用いて通知することにより、ハイパーバイザー20の通知終了を待つ必要がなくなる。したがって、セキュアOS30のリアルタイム対応を妨げる要素を削減できる。
【0050】
ハイパーバイザー20において仮想デバイスとしての機能を提供するエミュレーションユニット27は、仮想デバイスとして3つのパターン27a、27bおよび27cを用意している。第1のパターン27aは、実デバイスの共有(共用)であり、複数のOSが各々に用意された仮想デバイスに対して行った制御を、ハイパーバイザー20が調停して1つの実デバイスを制御・共有する形態(パターン)である。
【0051】
第2のパターン27bは機能追加である。このパターン27bでは、ハイパーバイザー20は、存在しないデバイス機能を、仮想デバイスを通じて複数のOS(ゲストOS〉に提供する形態(パターン)である。OS間通信や仮想ネットワークが該当し、これらの機能は、実在のハードウェアは存在しないが、ハイパーバイザー20により機能が提供される。
【0052】
第3のパターン27cは、機能拡張である。機能拡張のパターン27cでは、あるデバイスに対してハイパーバイザー20が機能を追加する。例えば、「仮想シリアル」がある。ゲストOSが仮想シリアルに送信したデータを、ハイパーバイザー20や他のゲストOSがTCP/IPに変換してネットワーク上に送信することが可能となる。逆方向のデータ送信も可能であり、ハイパーバイザー20は、ネットワークから送られて来たTCP/IPのデータをゲストOSが仮想シリアルから受信する形でデータを読み込むことを可能にする。仮想シリアルによる、TCP/IP変換を行うハイパーバイザー20へのデータのシリアル送信は、具体的にはOS間通信を用いて行うことができる。
【0053】
セキュアOS30として採用されるRTOSやシンプルな組み込み用OSにはTCP/IPの様な複雑な機能を持たないOSが多く存在する。ハイパーバイザー20やTCP/IP機能を持つ他のゲストOSが仮想シリアルの入出力をTCP/IPの入出力に変換することにより、TCP/IPの様な複雑な機能を持たないOSを改修することなく、ネットワーク対応のシステムを実装することが可能となる。
【0054】
このシステム1においては、OS起動準備、OS切替、OS間通信および仮想デバイスといった仮想化の機能を提供するハイパーバイザー20をセキュアモード2で稼働させる。したがって、仮想化の処理、特に、セキュア側で稼働するOS30と非セキュア側で稼働するゲストOS41とに関連する仮想化の処理をセキュア側で実行することが可能となり、非セキュアな環境で稼働するゲストOS41からの干渉や攻撃の可能性を低減できる。したがって、システム1においては、外界からの干渉や攻撃に強い、安全な仮想化環境を提供できる。
【0055】
一方、ハイパーバイザー20がセキュアモード2で稼働することにより、非セキュアモード3で稼働するゲストOS41の処理のために仮想化が必要になると、非セキュアモード3からセキュアモード2に切り替わり、システム1の処理速度が低下する要因になる。このため、ハイパーバイザー20は、セキュアモード2で動作するセキュアOS30の第1の動作条件(第1のコンフィグレーション)21と、非セキュアモード3で動作するノンセキュアOS41〜43などのゲストOSの第2の動作条件(第2のコンフィグレーション)22a〜22bとを用い、それぞれのOSがアクセスするリソースの範囲(デバイス)を、重複を避けて固定または制約できるようにすることによりハイパーバイザー20が介在する機会を低減し、システム1の処理速度の低下を抑制している。
【0056】
また、非セキュアモード3で稼働するゲストOS41〜43の動作条件を含む第2のコンフィグレーション22a〜22cにおいては、メモリ保護機能であるTZ機構12を用いて保安領域へのアクセスを不可とし、メモリの安全性を確保したうえで、非セキュアモード3におけるハイパーバイザー20の介在の必要性を低減している。一方、第2のコンフィグレーション22a〜22cは、セキュアOS30と共用するデバイスに対するアクセスによりセキュアモード2に移行することを含め、セキュアモード2で稼働するハイパーバイザー20が、共有のデバイスを仮想デバイスとしてそれぞれのOSに提供できるようにしている。
【0057】
このシステム1において、ハイパーバイザー20がセキュアモード2への移行および非セキュアモード3への移行を制御する。セキュアモード2へ移行は、ハイパーバイザー20に対する明示的な切替命令であってもよく、特定のアドレスへのアクセスをトラップすることであってもよく、タイマ部11tや外部ハードウェアモジュールからの割り込み信号を受信したときであってもよい。TZ機構12を提供しているARM社のプロセッサであれば、セキュアモード2への移行を示す明示的な切替命令としてはSMC(Secure Monitor Call)を用いることができる。
【0058】
ハイパーバイザー20がセキュアモード2で稼働することにより、セキュアモード2で稼働するセキュアOS30、特にRTOS30においては、モードの切り替えなしにエミュレーションユニット27により共有のデバイスにアクセスできる。さらに、ハイパーバイザー20は、セキュアモード2において、準仮想化によりRTOS30にリソース(デバイス)、例えばDMAC11xを割り当てることが可能となり、RTOS30のパフォーマンスの低下を抑制できる。
【0059】
図3に、このシステム1においてハイパーバイザー20が複数のOSを制御(管理)する過程をフローチャートにより示している。システム1が起動すると、ステップ101において、まず、セキュアモード2が設定される。次に、ステップ102において、保安領域であるブートROM16に格納されているハイパーバイザーのファームウェア(プログラム、プログラム製品)14hがロードされ、ハイパーバイザー20が起動される。ステップ103において、ハイパーバイザー20が、第1の設定ユニット23によりセキュアOS30用のコンフィグレーション(第1のコンフィグレーション、第1の動作条件)21をブート時のコンフィグレーショとして設定する。ステップ104において、プロセッサユニット11のブートローダが、保安領域であるブートROM16に格納されているセキュアOSのファームウェア14xをロードし、セキュアOS30を起動する。
【0060】
ステップ105において、ハイパーバイザー20のセキュアブートユニット50がノンセキュアなリッチOS41のファームウェア〈インスタンス〉14iをメモリの非保安領域18bのブート領域18sに準備する。ステップ106において、ハイパーバイザー20が、OS起動準備ユニット25の第2の設定ユニット24aによりリッチOS41用のコンフィグレーション(第2のコンフィグレーション、第2の動作条件)22aをブート時のコンフィグレーショとして設定する。ステップ107でプロセッサユニット11の実行モードを非セキュアモード3に移行し、ステップ108において、プロセッサユニット11のブートローダが、非保安領域のブート領域18sに格納されているリッチOS41のファームウェア14iをロードし、非セキュアモード3においてリッチOS41を起動する。他のOS42および43も同様に起動できる。非セキュアモード3において複数のOS41〜43を制御(管理)するために、複数のOS41〜43を起動する前に、非セキュアモード3で稼働する異なるハイパーバイザーを起動してもよい。
【0061】
複数のOS30、41〜43が起動すると、それらのOSの上でアプリケーションが稼働できる状態となり、ステップ109において、システム1は稼働開始となる。稼働中に、ステップ110において、リッチOS41でセキュアOS30との共用デバイスに対するアクセスが発生すると、プロセッサユニット11はステップ111においてセキュアモード2に移行する。ハイパーバイザー20のエミュレーションユニット27は、ステップ112において、共用デバイスに対する処理をエミュレーション(シミュレーション)し、その結果をメモリの適当な、あるいは予め決められた非保安領域18bに格納することにより、共用のデバイスへのアクセスを仮想化環境で実行する。ステップ113で、プロセッサユニット11を非セキュアモード3に移行し、リッチOS41は処理を継続する。
【0062】
ステップ114において、割り込みあるいはスケジューリングなどによりOSの切り替えが発生すると、ステップ115において、プロセッサユニット11をセキュアモード2に移行し、ステップ116において、ハイパーバイザー20のOS切替ユニット26がOS切替処理を行う。具体的には、稼働していたリッチOS41の状態、具体的には各CPUコアのレジスタの内容を含むコンテキスト26xをメモリの保安領域18aに退避する。切り替え後のOSのコンテキスト26xをメモリの保安領域18aからロードし、各CPUコアのレジスタの内容を書き換える。切り替え後のOSが、例えばリッチOS42であれば、ステップ117において、プロセッサユニット11を非セキュアモード3に移行し、リッチOS42を再稼働(再起動)させる。切り替え後のOSが、セキュアOS30であれば、ステップ117のモード切り替えを行わずに、セキュアOSを再稼働する。
【0063】
ステップ118において、OS間通信が必要になると、ステップ119において、メモリの非保安領域18bに設定された共有領域18cを用いてOS間通信処理を行う。この処理については、後でさらに詳しく説明する。
【0064】
ステップ120において、リッチOS41が、非セキュアモード3において、コンピュータネットワークデバイス(ネットワークインターフェイス)19aなどに介してファームウェアの更新があることを検出すると更新データをロードする。ステップ121において、更新ユニット60がファームウェアの更新処理を行う。この処理については、後にさらに詳しく説明する。ステップ122において、システム1が稼働中であれば、上記の処理を繰り返す。
【0065】
図4に、ハイパーバイザー20のセキュアブートユニット50が、汎用でノンセキュアなリッチな第2のOS41を安全に起動(セキュアブート)の準備を行う過程を示している。
図4(a)はフローチャートで起動過程を示し、
図4(b)〜(e)は、ハイパーバイザー20が、ハードウェアがサポートする支援機能、本例では、TZ機構12を用いてメモリ領域へのアクセスを許可および制限する様子を模式的に示している。なお、
図3に示したシステム1の起動過程と重複している箇所はステップの番号をカッコに入れて示している。
【0066】
ステップ54において、システム1が起動すると、プロセッサユニット11では、まず、セキュアモード2がセットされ、ハイパーバイザー20が起動する。ステップ55においては、セキュアモード2の状態で稼働するハイパーバイザー20のOS起動準備ユニット25に設けられたセキュアブートユニット50の認証ユニット51が、保安領域のセキュアROMであるセキュアブートROM16に格納された第2のOS41のファームウェア14fの認証処理を、保安領域のセキュアROMであるセキュアキーEPROM15に格納された認証情報15aを用いて行う(
図4(b))。
【0067】
ステップ56において、セキュアブートユニット50の展開ユニット52が、ステップ55で認証されたファームウェア14fを、非保安領域のDDRメモリ18のノンセキュア領域18bのブート領域18sに展開して復号し、第2のOS41のファームウェアの実行用のインスタンス14iを形成する(
図4(c))。
【0068】
ステップ57において、ハイパーバイザー20が、プロセッサユニット11の状態をセキュアモード2から、非セキュアモード(ノーマルモード)3へ移行する。この環境では、セキュアROM16は見えず、アクセスが不可能になり、ノーマルRAM18bおよびネットワーク19aにアクセスが可能となる(
図4(d))。
【0069】
ステップ58において、第2のOS41の起動処理(ブート)が行われる。ノーマルRAM18bに形成された第2のOS41のファームウェアの実行用のインスタンス14iがプロセッサユニット11のブートローダによりロードされ第2のOS41が起動する(
図4(e))。第2のOS41は、ハイパーバイザー20の第2の設定ユニット24aがブートコンフィグレーションとして設定した第2のコンフィグレーション22aにより定義された環境で起動され、稼働する。したがって、第2のOS41およびその上で動くクライアントアプリケーション45からは、第2ンコンフィグレーション22aでアクセス可能とされているノーマルRAM18bおよびネットワーク19aにアクセスできる。一方、ノーマルモード(非セキュアモード)3で稼働するので、TZ機構12によりセキュアROM16は見えず、アクセスも不可能である。このため、第2のOS41が管理している環境からは自らが起動するファームウェア14fが格納されたセキュアROM16は見えず、書き込むこともできない。したがって、第2のOS41の上で稼働するアプリケーション群45がファームウェア14fを攻撃したり、改変したりすることは不可能であり、第2のOS41の安全性を担保できる。
【0070】
図5に、セキュアモード2で稼働するハイパーバイザー20に含まれる更新ユニット60が、汎用のリッチな第2のOS41を安全に更新(セキュアアップデート)する様子を示している。この更新ユニット60は、セキュアOS30の上で稼働するアプリケーションとして提供することも可能である。
図5(a)は、
図3に示した更新処理121をさらに具体的に示すフローチャートであり、
図5(b)〜(d)は、更新処理中に、ハードウェアがサポートするメモリ保護用の支援機能、本例では、TZ機構12を用いてメモリ領域へのアクセスを許可および制限する様子を模式的に示している。
【0071】
ステップ65はノーマルモード(非セキュアモード)3において行われる処理であり、ノーマルモード状態のプロセッサユニット11で稼働する第2のOS(ノンセキュアOS)41が、ネットワークインターフェイス19aから外部ネットワークにアクセスして第2のOS41の更新用のファームウェア14nがあると、ノーマルRAM18bに更新用のファームウェア14nをダウンロードする。この実行環境では、TZ機構12により第2のOS41からセキュアROM16は見えず、セキュアROM16が外部からの攻撃にさらされることはない(
図5(b))。
【0072】
その後、適当なタイミング、例えば、システム1が起動するとき、システム1がシャットダウンされるとき、その他の要因でプロセッサユニット11の実行モードがセキュアモード2に切り替わったときに(ステップ66)、セキュアモード2でハイパーバイザー20が稼働し、ステップ67において、更新ユニット60の認証ユニット61が、ノーマルRAM18bにダウンロードされているファームウェア14nを、保安領域であるセキュアキーEPROM15に格納されている認証情報15bを用いて認証する(
図5(c))。
【0073】
ノーマルRAM18bの更新用のファームウェア14nが認証されると、ステップ68において、更新ユニット60の格納ユニット62が、ノーマルRAM18bの更新用のファームウェア14nをセキュアROMであるセキュアブートROM16に格納し、必要があれば、セキュアブートROM16に格納されていたファームウェア14fを更新されたファームウェア14nに置き換える(
図5(d))。また、必要があれば、ノーマルRAM18bにダウンロードされた更新用のファームウェア14nを破棄する。
【0074】
更新ユニット60はセキュアモード2で稼働するので、非セキュアなノーマルモード3で稼働するノンセキュアなリッチOSなどの第2のOS41から遮断され、安全性が担保されないネットワークなどの非セキュアなデバイスから攻撃を受けることはない。また、非セキュアモード3ではアクセスされない保安領域のセキュアキーEPROM15に格納されている認証情報15bを用いてダウンロードされたファームウェア14nを認証することにより不法な改変が行われたコンテンツを排除できる。したがって、更新ユニット60により、悪意のあるコンテンツなどでセキュアなメモリ領域が汚染されることを防止できる。このため、安全に保安領域のセキュアブートROM16に格納されている第2のOS41のファームウェアを更新でき、その後、上述したセキュアブートユニット50により安全に、第2のOS41を起動できる。
【0075】
図6に、OS間通信処理119を行うための手続きをタイミングチャートにより示している。2つのOS、たとえば、セキュアOS30と、ノンセキュアOS41とをほぼ同時に起動したことを想定しているが、時間差で起動してもよい。また、
図6に示した処理では、それぞれのOS30およびOS41のそれぞれのコンフィグレーション21および22aに含まれる共有メモリ領域の動作条件21xおよびお22xが参照され、非保安領域に設定された共有メモリ18cを介してOS間通信を行う。
【0076】
ハイパーバイザー20で仮想化された環境で複数のOSが稼働するシステム1においては、マルチOS環境上でのリアルタイム性が要望されており、効率のよいOS間通信を実装することが求められている。ハイパーバイザー20を介して実行されるOS間通信の一例は、ハイパーバイザー20がすべての処理を仲介するものである。本例のハイパーバイザー20がこのような処理レベルのOS間通信を担当することも可能である。OS間通信を実現する上で必要となる基本的な機能は以下の通りである。
・データ送信処理
・データ受信処理
・データ受信通知処理
・データ送信完了通知
【0077】
ハイパーバイザー20がすべての処理を仲介する場合、データの送信は、稼働中のあるOS、たとえば、ゲストOSaが自発的にハイパーバイザー20を呼び出して実行される。送信データを受け取ったハイパーバイザー20は自身が管理する送信先の他のOS、たとえばゲストOSbの受信領域に送信データをコピーする。データ受信通知は、データ送信処理完了後にハイパーバイザー20内で実行され、通知は送信先のゲストOSbに対して特定の割り込みを発生させることで実現する。データ受信処理は、割り込み信号という形でデータ受信を認識したゲストOSbがハイパーバイザー20に対して受信データの取得を依頼する。このとき、ハイパーバイザー20は受信データを依頼元のゲストOSbのメモリ領域に対してコピーを行う(読み出し)。送信先のゲストOSbがデータを受信するとハイパーバイザー20は送信元のゲストOSaに対して送信完了のイベントを通知する。データ受信通知と同様、この通知も割り込み信号を使いゲストOSaへ通知される。本通知を持って送信元のゲストOSaは次のデータが送信可能になったと認識する。
【0078】
このOS間通信処理においては、ハイパーバイザー20がゲストOSから依頼された通信処理を実行している間、通信を依頼したゲストOSはハイパーバイザー20の処理が終わるまで停止状態となる。これはゲストOSとハイパーバイザー20とが同じプロセッサ上で実行されている状況では避けられない仕様となる。ゲストOSが停止状態となる時間は数10マイクロ秒であり、ゲストOSがリナックス(登録商標)やアンドロイドの場合では問題とされることはほとんどない。しかしながら、ゲストOSとしてリアルタイムOS(RTOS)を実行している場合には問題になることが予想される。また、セキュアモード2で稼働するハイパーバイザー20において、非セキュアモード3で稼働するゲストOS41および42の間、非セキュアモード3で稼働するゲストOS41とセキュアモード2で稼働するセキュアOS30との間の通信を行おうとすると、プロセッサユニット11の実行モードをセキュアと非セキュアとに切り替える必要があり、そのために通信に関与するOSの停止時間が長くなる可能性がある。
【0079】
一般的にRTOSは、発生したイベントに対して一定時間内に処理を実行する事が要求されるシステムであり、主な用途として機械制御が挙げられる。この様に時間的な制約が強い制御システムにおいて数十マイクロ秒でも停止することは、致命的な欠陥となる可能性が高い。機械制御を例にすると、OS間通信の処理を実行中に機械の緊急停止が必要となる何らかのイベントが発生した場合、OS間通信処理が完了しないとRTOSは緊急停止処理が実行できない状態となる。
【0080】
本例のシステム1では、ハイパーバイザー20でゲストOS間の通信に共有メモリを設定することにより、ゲストOSが停止しない、あるいは停止する時間が短縮されるOS間通信機能を提供する。このOS間通信機能においては、ハイパーバイザー20の介入は極力制限される。OSの起動時は、ハイパーバイザー20が介入して各OS間の調停や初期化処理を実行し、OS間通信処理においては、起動しているOS(ゲストOS)のみでほとんどの処理を実行し、ハイパーバイザー20は極力介入しない。OSの起動時においてはハイパーバイザー20が介入するためゲストOSの停止状態が発生するが、この状況はシステム1が運用状態に入る前、または対応するOSが運用状態に入る前なので問題としない。
【0081】
OS間通信にハイパーバイザー20の介入を排除することで、OS間通信処理の大部分がゲストOS同士の制御下で実行される。これにより、RTOSではOS間通信処理中に緊急を要する状況が発生したとき、速やかにOS間通信処理を中断して緊急処理を実行することが可能になる。
【0082】
このシステム1において、OS間通信処理を行うために設定される共有メモリ領域18cの情報(マッピング情報を含む)は、動作条件21xおよび22xとしてそれぞれのOS30、41〜43を起動する際のコンフィグレーション21および22a〜22cに含めることができ、ハイパーバイザー20が起動準備を行い、各OS30、41〜43の起動時に割り当てる(マッピングする)ことができる。共有メモリ領域18cは、ハイパーバイザー20が予め設定してもよく、いずれかのOSが設定した情報をハイパーバイザー20がコンフィグレーション21または22a〜22cのいずれかに含めて他のOSが使用可能にしてもよい。
【0083】
OS間通信処理が使用する送受信領域として共有メモリ領域18cを使うことで、非セキュアモード3で稼働するOS同士であれば、または、セキュアモード2で稼働するOS同士であれば初期設定以外に、OS間通信処理に関するハイパーバイザー20の介入を排除、または最小限に止めることができる。非セキュアモード3で稼働する第2のOS、例えばノンセキュアOS41と、セキュアモード2で稼働するセキュアOS30との間の通信では、非セキュア側からセキュア側に通知する際にハイパーバイザー20が関与するが、それ以外はハイパーバイザー20の介入を排除、または最小限に止めることができる。
【0084】
図6は、ハイパーバイザー20が共有メモリ領域18cを用意している場合に、ゲストOSを起動する過程でOS間通信処理の設定を行う手続きを示している。ゲストOSは、たとえば、セキュアモード2で動作するセキュアOS(RTOS)30と、ノンセキュアモード3で動作するノンセキュアOS41とである。ノンセキュアなメモリ領域(非保安領域)18に共有メモリ領域18cを設定することにより、セキュアモード2で動作するOS30と、非セキュアモード3で動作するノンセキュアOS41との両OSから共有メモリ領域18cへアクセスできるので、リアルタイム性の高いOS間通信を実現できる。
【0085】
ハイパーバイザー20は、ステップ71において通信路の初期化処理を行う。この初期化処理では、共有メモリ領域18c、OS間通信に用いる割り込み番号の補足を行い、通信路状態を初期化する。次に、ステップ72において各ゲストOS、この例では、セキュアOS30とノンセキュアOS41とを起動する。これらのOSは同時に起動してもよく、順番に起動してもよい。
【0086】
セキュアOS30においては、ステップ73aにおいてOS間通信ドライバ36xの初期化処理を開始する。ステップ74aにおいて、セキュアOS30はブート時にデバイス情報を取得してハイパーバイザー20に提供し、ハイパーバイザー20から共有メモリ領域情報を含むコンフィグレーション(第1のコンフィグレーション)21を受け取る。ステップ75aにおいて、共有メモリ領域のマッピング、割り込みハンドラの登録を含めたデバイスドライバ36の設定を行い、セキュアOS30の運用を開始する。
【0087】
ノンセキュアOS41においても同様であり、ステップ73bにおいてOS間通信ドライバ46xの初期化処理を開始する。ステップ74bにおいて、デバイス情報を取得してハイパーバイザー20に提供し、ハイパーバイザー20から共有メモリ領域情報を含むコンフィグレーション(第2のコンフィグレーション)22aを受け取る。ステップ75bにおいて、共有メモリ領域のマッピング、割り込みハンドラの登録を含めたデバイスドライバ46の設定を行い、ノンセキュアOS41の運用を開始する。ただし、このケースでは、ノンセキュアOS41はセキュアモード2で稼働するセキュアOS30に対して通知を出力する必要がある。したがって、ステップ75bにおいては、ハイパーバイザー20を介してセキュアOS30に対して通知を出力するように設定する。
【0088】
ハイパーバイザー20は、ステップ76において、全てのゲストOSがOS間通信に関する情報を取得した時点で、通信路を通信可能状態に設定する。これにより、以降は、ノンセキュアOS41からセキュアOS30へ通知するときを除き、ハイパーバイザー20が関与せずに、セキュアOS30およびノンセキュアOS41の間でOS間通信処理が行われる(ステップ77)。ノンセキュアOS41および42の間のOS間通信処理であれば、ハイパーバイザー20が関与せずにOS間通信処理が行われる。
【0089】
共有メモリ領域18cは通信を行うセキュアOS30およびノンセキュアOS41から参照可能であり、セキュアOS30およびノンセキュアOS41では互いの送受信データが直接参照可能である。これにより、ハイパーバイザー20がデータ転送(データ入出力)を含めて介入するOS間通信処理に対し、このOS間通信処理ではデータの入出力をセキュアOS30およびノンセキュアOS41が行い、その部分を各OSに実装することが可能となる。ハイパーバイザー20は、初期化処理の中でセキュアOS30およびノンセキュアOS41に対し、共有メモリ18cに関する情報の提供や、共有メモリ領域を確保/構築する役割を担う。
【0090】
OS間通信処理において、セキュアOS30およびノンセキュアOS41は、データの送受信処理を実行した後、通信先のOSへデータ受信や送信完了を通知する。セキュアOS30からノンセキュアOS41に対する通知は割り込み信号36qを使う。したがって、セキュアOS(RTOS)30は、ハイパーバイザー20の処理の終了を待つ必要がなく、OS間通信処理で停止することなく、処理を継続できる。
【0091】
一方、ノンセキュアOS41からセキュアOS30への通知は非セキュアモード3からセキュアモード2への移行が必要になるのでハイパーバイザー20のOS間通信ユニット28が関与する。したがって、ノンセキュアOS41の処理は、この間停止することになるが、上述したようにノンセキュアOS41において数10マイクロ秒程度の停止が問題となることはない。また、非セキュアモード3で稼働するOS41および42同士であれば、それぞれのOSの割り込みコントローラを直接制御することでハイパーバイザー20の介入が排除可能である。ハイパーバイザー20は、コンフィグレーション21および22a〜22cに共有メモリの動作条件21x、22xを含めて各OS30および41〜43に対し、OS間通信の通知に利用する割り込みの設定や、その情報を各OS30および41〜43へ通知する役割を担う。
【0092】
図7にゲストOSが共有メモリ領域18cを用意する場合を示している。この例では、非セキュアモード3で稼働するノンセキュアOS41が共有メモリ領域18cを用意し、その情報をハイパーバイザー20がセキュアOS30に受け渡してOS間通信を実現する。
【0093】
図6に示した手続きに対し、ハイパーバイザー20がセキュアOS30およびノンセキュアOS41の起動を準備し、それぞれのコンフィグレーション21および22aを提供する処理までは共通するが、初期に設定されるコンフィグレーション21および22aには共有メモリ領域の情報が含まれていない。ノンセキュアOS41は、コンフィグレーション22aに基づいてデバイスドライバ46を設定し、割り込みハンドラの登録も行う(ステップ78b)。さらに、ステップ79において、共有メモリ領域18cを補足後、その共有メモリ領域18cをハイパーバイザー20に対してOS間通信用に登録することを要求する。
【0094】
ハイパーバイザー20は、ステップ80において、共有メモリ領域18cを登録し、通信路を通信可能に設定する。また、ステップ81において、ノンセキュアOS41ら通知された共有メモリ領域18cを他のゲストOSであるセキュアOS30からアクセス可能に設定する。すなわち、共有メモリ領域の情報21xをセキュアOS30に通知する。
【0095】
セキュアOS30においては、ハイパーバイザー20から提供されたコンフィグレーション21により割り込みハンドラを含めたデバイスドライバの設定を行う(ステップ78a)。さらに、ハイパーバイザー20から共有メモリ領域の情報21xが提供されると、ステップ82において、共有メモリ領域18cをマッピングし、共有メモリ領域18cを用いたOS間通信を可能とする。この後、これらのOSの間でOS間通信が可能となる(ステップ77)。
【0096】
上述したように、非セキュアモード3で稼働するゲストOS同士であれば直接割り込みコントローラを制御する。セキュアモード2で稼働するOS30と、非セキュアモード3で稼働するOS41との間の通信においては、セキュリティ面での考慮により、非セキュアモード3のOS41からセキュアモード2のOS30への通知処理のみをハイパーバイザー20に依頼することによりセキュリティを犠牲にすることなく、OS間通信に要する処理時間を短縮できる。
【0097】
上記の例はセキュアな環境を支援するためにTZ機構が組み込まれたプロセッサ11を例に説明したが、VZ機構またはVT機構が組み込まれたプロセッサにおいても同様にセキュアブート、セキュアアップデートを実現できる。VZ機構またはVT機構においては、ルートモード状態がセキュアモード状態に対応し、ゲストモード状態がノーマルモード状態(非セキュアモード状態)に対応する。
【0098】
RTOS30は、セキュアな環境で動作するOSの一例であり、リナックス(登録商標)などのリッチなOSをセキュアな環境で動作させてもよく、その他の埋め込み型のOS、例えば、イベントドリブン型や、ノンプリエンプティブ(non-preemptive)型のスケジューラを持つマルチタスク型の埋め込みOS(multitasking embedded operating system)であってもよい。
【0099】
以上に説明したように、システム1が含むハイパーバイザー20は、セキュアな環境でOS30を起動する第1の動作条件(第1のコンフィグレーション)と、非セキュアな環境でOS41〜43を起動する第2の動作条件(第2のコンフィグレーション)とを含み、複数のOSを異なる環境で動かすことができるベアメタルタイプのハイパーバイザーである。このハイパーバイザー20は、コンパクトで、ハイパーバイザー20の稼働にようするCPU負荷が非常に低く、1%程度あるいはそれ以下を実現でき、CPU(プロセッシングユニット、プロセッサ)の使用効率が良い。したがって、ハイパーバイザー20を備えたシステム、特に、SoCなどの組込システムは、性能がそれほど高くないCPUを用いたシステムであってもセキュアな環境で様々なクライアントアプリケーション45を動かすことができる。このため、ハイパーバイザー20を含む組込システム1によりクライアントアプリケーション45が制御する様々な装置、例えば、スマート家電、ヘルスウェア機器、HEMS,スマートメータ、プリンタなどのコンシューマ向けの周辺機器、さらに車載コンピューティング環境においてセキュアな環境を低コストで提供できる。
【0100】
本明細書には、保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットと、前記プロセッシングユニットの前記セキュアモードで稼働するハイパーバイザーとを有するシステムが開示されている。前記ハイパーバイザーは、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定する第1の設定ユニットと、前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定する第2の設定ユニットと、前記第2のOSに対し前記第1のデバイスを仮想化して提供するエミュレーションユニットとを含む。
【0101】
上記のシステムにおいて、前記第1の動作条件は、低セキュアなコンピュータネットワークを含む非保安デバイスに対するアクセスを不可とすることを含み、前記第2の動作条件は、前記非保安デバイスに対するアクセスを可能とすることを含んでもよい。また、上記のシステムにおいて、前記ハイパーバイザーは、前記第1のOSおよび前記第2のOSを含む複数のOSを切り替えるOS切替ユニットを含み、前記OS切替ユニットは、前記複数のOSの動作条件および前記複数のOSのコンテキストをそれぞれ前記保安領域に格納するユニットを含んでもよい。また、上記システムにおいて、前記ハイパーバイザーは、OS起動準備ユニットを有し、前記OS起動準備ユニットは、前記保安領域に格納された前記第2のOSのファームウェアを前記保安領域に格納された認証情報を用いて認証する第1の認証ユニットと、前記保安領域に格納された認証済みの前記第2のOSのファームウェアを前記非保安領域のブート領域に実行用のインスタンスとして展開する展開ユニットとを含んでもよい。このシステムは、さらに、前記セキュアモードで稼働する更新ユニットを有し、前記更新ユニットは、前記非保安領域にダウンロードされた更新用のファームウェアを前記保安領域に格納された認証情報を用いて認証する第2の認証ユニットと、前記非保安領域にダウンロードされた認証済みの前記更新用のファームウェアを前記保安領域に格納する格納ユニットとを含んでもよい。
【0102】
また、上記システムの、前記第1の動作条件および前記第2の動作条件は前記非保安領域に設定された共有のメモリ領域の動作条件を含んでもよい。前記共有のメモリ領域の動作条件は、前記第2のOSが前記共有のメモリ領域に書き込むと前記セキュアモードへ移行することを含み、前記ハイパーバイザーは、前記共有のメモリ領域に書き込まれたことを前記第1のOSに通知するユニットを含み、前記第1のOSは、前記共有のメモリ領域に書き込むと割り込みにより前記第2のOSに通知するユニットを含んでもよい。
【0103】
上記のシステムは、前記メモリと前記プロセッシングユニットとが搭載されたシステムオンチップを有していてもよく、さらに、前記第2のOS上で稼働するアプリケーションと、前記アプリケーションにより制御される装置とを有していてもよい。
【0104】
また、本明細書には、保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSを制御する方法が開示されている。前記システムは、前記プロセッシングユニットの前記セキュアモードで稼働するハイパーバイザーを含み、当該方法は、前記ハイパーバイザーが、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定することと、前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定することと、前記第2のOSに対し前記第1のデバイスを仮想化して提供することとを含む。
【0105】
この方法は、さらに、前記ハイパーバイザーが、前記第1のOSおよび前記第2のOSを含む前記複数のOSを切り替えることを含み、前記OSを切り替えることは、前記複数のOSの動作条件および前記複数のOSのコンテキストをそれぞれ前記保安領域に格納することを含んでもよい。この方法は、さらに、前記ハイパーバイザーが、OSの起動を準備することを含み、前記OSの起動を準備することは、前記保安領域に格納された前記第2のOSのファームウェアを前記保安領域に格納された認証情報を用いて認証することと、前記保安領域に格納された認証済みの前記第2のOSのファームウェアを前記非保安領域のブート領域に実行用のインスタンスとして展開することとを含んでもよい。
【0106】
さらに、前記システムは、前記セキュアモードで稼働する更新ユニットを含んでもよく、当該方法は、前記更新ユニットが、前記非保安領域にダウンロードされた更新用のファームウェアを前記保安領域に格納された認証情報を用いて認証することと、前記非保安領域にダウンロードされた認証済みの前記更新用のファームウェアを前記保安領域に格納することとを含んでもよい。前記第1の動作条件および前記第2の動作条件は前記非保安領域に設定された共有のメモリ領域の動作条件を含んでもよく、当該方法は、前記第2のOSが前記共有のメモリ領域に書き込むと前記セキュアモードへ移行し、前記ハイパーバイザーが、前記共有のメモリ領域に書き込まれたことを前記第1のOSに通知することと、前記第1のOSが、前記共有のメモリ領域に書き込むと割り込みにより前記第2のOSに通知することとを含んでもよい。
【0107】
また、本明細書には、保安領域と非保安領域とを含むメモリの前記保安領域へのアクセスを禁止する支援機能を含み、前記支援機能により前記保安領域へのアクセスが禁止された低セキュアモードと、前記保安領域へのアクセスが許可されたセキュアモードとを含む実行モードを備えたプロセッシングユニットを有するシステムにおいて複数のOSの制御を可能とするプログラムが開示されている。このプログラムは、前記プロセッシングユニットの前記セキュアモードでハイパーバイザーを稼働させる命令を含み、前記ハイパーバイザーが、前記セキュアモードで稼働する第1のOSに対して前記保安領域および前記非保安領域へのアクセスを可能とすることを含む第1の動作条件を設定することと、前記低セキュアモードで稼働する第2のOSに対して前記非保安領域に対するアクセスを可能とし、前記支援機能を用いて前記保安領域へのアクセスを不可とし、さらに、前記第1のOSと共用する第1のデバイスに対するアクセスにより前記セキュアモードに移行することを含む第2の動作条件を設定することと、前記第2のOSに対し前記第1のデバイスを仮想化して提供することとを実行する。
【解決手段】支援機能12によりメモリの保安領域へのアクセスが禁止された非セキュアモード3と、保安領域へのアクセスが許可されたセキュアモード2とを含む実行モードを備えたプロセッシングユニット11と、セキュアモードで稼働するハイパーバイザー20とを有するシステム1を提供する。ハイパーバイザーは、セキュアモードで稼働する第1のOS30に対してメモリの保安領域および非保安領域へのアクセスを可能とすることを含む第1の動作条件21を設定する第1の設定ユニット23と、非セキュアモードで稼働する第2のOS41に対して非保安領域に対するアクセスを可能とし、支援機能を用いて保安領域へのアクセスを不可とし、さらに、第1のOSと共用する第1のデバイスに対するアクセスによりセキュアモードに移行することを含む第2の動作条件22aを設定する第2の設定ユニット24とを含む。