全体ミーティング 2009/6/24 D3 西川 賀樹 発表内容 ٥ 現在行っている研究について ٥ 研究テーマは完全仮想化によるARM向け仮 想マシンモニタの設計と実装 研究の背景 ٥ 携帯端末等のモバイル機器における性能の向上 ٥ 多くの機器がネットワーク接続も可能となり、高機能化・ 多様化が進んでいる ٥ モバイル機器へ汎用OSが導入されるようになって きている ٥ 単純なRTOSでは多様なアプリケーションに対応できない ٥ 汎用OSを用いることにより、汎用計算機で用いられてい る既存アプリケーションの移植が容易になる ٥ しかしこれにより起こりうる問題も考えられる モバイル機器の高機能化に伴う問題 ٥ セキュリティリスクの増大 ٥ ネットワーク接続を行うことにより、マルウェア等 に感染するリスクが増大 ٥ 汎用OSを用いることにより、汎用計算機におけ る既存の攻撃手法が使用可能 ٥ リアルタイム処理における問題 ٥ 多くの汎用OSはリアルタイム性の確保が不十分 目的 ٥ モバイル機器向けの仮想マシンモニタを開発 ٥ 組み込みにおいて最も普及しているARMアーキテクチャ を対象とする ٥ リアルタイム性の向上 ٥ RTOSと汎用OSを同時に動作させることができ、リアルタ イム処理をRTOSで優先的に実行可能 ٥ セキュリティの向上 ٥ 各OSをVM上で動作させることで、汎用OSでのマルウェ ア感染時等にRTOSへの影響を防げる 本研究の仮想マシンモニタ(VMM) ٥ Type-1での完全仮想化による実装 ٥ ゲストOSの修正が必要ない ٥ 汎用OSに比べて組み込みOSは種類が多く、各OSに対して修正 を加えることはコストが大きい ٥ ソースが公開されていないOSについても対応可能 ٥ 現在完全仮想化により実装されたVMMは存在しない ٥ Type-2に比べ実行速度が高速 ٥ リアルタイム性を考慮したVMスケジューリング ٥ VMに実行優先度をつけ、RTOSを動作させる場合は最 優先で実行する 関連研究 ٥ 擬似仮想化によるVMM(Trango、VirtualLogix、Xen on ARM) ٥ 完全仮想化に比べ高速だが、ゲストOSの修正が必要 ٥ Xen on ARMはSEDFスケジューラを用いており、リアルタ イム性が考慮されていない ٥ Type-2 VMM(WB-VRT) ٥ ホスト・ゲストOS共に修正が必要であり、プラットフォームが 限られる ٥ Type-1に比べ実行速度が劣る ٥ リアルタイム性においては有利 本VMMの設計 ٥ CPU ٥ 時計 ٥ VMスケジューリング ٥ 例外・割り込み ٥ 割り込みコントローラ ٥ メモリ CPU ٥ 対象とするCPUはARM1136(ARMv6) ٥ ユーザモード・特権モードの二つの動作モードを持つ ٥ 特権モードはさらに以下のような6つのプロセッサ モードを持つ ٥ アボート、未定義、FIQ、IRQ、スーパーバイザ (この5種類を例外モードと呼ぶ) ٥ システム ٥ R0-15、CPSR、SPSR(例外モードのみ)のレジスタ を持つ ٥ 各例外モードはバンクレジスタを持つ レジスタの構成 CPU仮想化 ٥ VMMを特権モード、ゲストカーネル・アプリケーションをユーザ モードで動作させる ٥ 各VM毎に仮想的なマシン状態を維持し、その状態に応じた処 理を行う必要がある ٥ CPU、メモリ、割り込みコントローラ等 ٥ そのためにセンシティブ命令を確実に検知し、その動作をエ ミュレーションしなければならない ٥ センシティブ命令はマシン状態を変更したり、マシン状態によって動作 が変わる命令 ٥ ゲストカーネルがマシン状態を変更しようとした場合は、VMMが同様に 仮想マシン状態を変更する ٥ ゲストカーネルが特権モードとユーザモードで動作が変化するような命 令を実行した場合、VMMがその動作をエミュレーションし結果を返す ARMにおけるセンシティブ命令 ٥ 4種類のセンシティブ命令 ٥ MSR・MRS命令 ٥ CPSR・SPSRレジスタの操作を行う ٥ SPSRがCPSRへコピーされる可能性がある命令 ٥ R15をデスティネーションレジスタとする算術命令・論理命令・LDM(3) ٥ MCR・MRC命令 ٥ コプロセッサのレジスタへの操作を行う ٥ ユーザモードレジスタにアクセスする命令 ٥ LDM(2)、STM(2) センシティブ命令実行時の動作 (マニュアルにおける記述) ٥ MSR・MRS命令 ٥ CPSRの特権ビット(割り込み制御ビット・モードビット)への操作は無視 ٥ SPSRへの操作は予測不能 ٥ SPSRがCPSRへコピーされる可能性がある命令 ٥ 予測不能 ٥ MCR・MRC命令 ٥ v5までは全て未定義例外が発生 ٥ v6以降は一部の操作に限りユーザモードで実行可能 ٥ ユーザモードレジスタにアクセスする命令 ٥ 予測不能 センシティブ命令実行時の動作 (N810での実験結果) ٥ 発生した例外を特定できるようにカーネルを修正し、N810で 実際に予測不能とされるセンシティブ命令を実行して動作を 確認した ٥ MSR・MRS命令によるSPSRへの操作 ٥ 例外は発生しない ٥ SPSRがCPSRへコピーされる可能性がある命令 ٥ 例外は発生しない ٥ ユーザモードレジスタにアクセスする命令 ٥ 例外は発生しない センシティブ命令のエミュレーション ٥ 予測不能なセンシティブ命令はプラットフォーム 依存の可能性も考えられる ٥ そのため全てのセンシティブ命令を動的に例外 が発生する命令に書き換える ٥ その後、例外ハンドラにおいてエミュレーションコード を実行 センシティブ命令の処理 ٥ カーネルモード実行時のみ仮想PCから1ブロックの命令を読 み込み、解析を行う ٥ ブロックは条件分岐命令までの区間、もしくは一定最大区間 ٥ 該当するセンシティブ命令を検知し、SWI命令に書き換える ٥ 各センシティブ命令に対して、SWI命令の下位24ビットの値を設定 ٥ Linux(OABI)では下位24ビットが”0x900000+システムコール番号” と設定されるのでその範囲は使用しない ٥ Linux(EABI)では下位24ビットは常に0であり使用されない ٥ ゲストカーネルを実行させ、ソフトウェア割り込みが発生する と下位24ビットの値から対応するエミュレーション処理を判 断・実行する ٥ 後の例外処理の部分でモード変更を例として具体的に説明 します 時計 ٥ ゲストOSに仮想タイマ割り込みを発生させる ٥ 時刻の補正にCCNT(サイクルカウンタ)が使 用されるのでそのエミュレーションを行う ٥ タイマ割り込みハンドラの縮退によるずれ ٥ VMMがCCNTの値を取得し、それをゲスト OSに返す ٥ CCNTは特権命令であるMCR命令により値を取 得するため VMスケジューリング ٥ RTOSを同時に動作させる場合はリアルタイ ム性を考慮する必要がある ٥ 割り込みが発生した場合、直ちにRTOSが動 作するVMに実CPUを割り当てる ٥ 汎用OSはRTOSがアイドル状態になった場 合にのみ実CPUを割り当て実行させる ٥ アイドル状態の判定はWFIモードへの移行を検 知して行う 例外・割り込み ٥ 例外・割り込みが発生すると自動的に各例外モードにプロ セッサモードが変更 ٥ レジスタも各例外モードのバンクレジスタに切り替わる ٥ LR_bankには”例外が発生した命令+4もしくは+8”が代入 ٥ SPSR_bankには例外発生前のCPSRが代入 ٥ 各例外ベクタから実行が開始される ٥ 例外ベクタは0x00000000~0x00000020 ٥ HIVECSを有効にしている場合は0xFFFF0000~0xFFFF0020 ٥ 通常ハンドラ実行後、PCをRdとしたMOVSやSUBS等の命 令で復帰(SPSR_bankがCPSRにコピーされる) 例外ベクタ 例外処理の流れ ٥ SP_usr、LR_usrをVSP_svc、VLR_svcもしくはVSP_usr、 VLR_usrに保存 ٥ SPSRをVSPSR_bankに保存 ٥ CPSRをVCPSR、SPSRにコピー ٥ ゲストの例外ハンドラの開始アドレスから1ブロック読み込み 解析・センシティブ命令の書き換え ٥ VSP_bankをSPにロード ٥ ユーザモードにモード変更し仮想例外を発生させる ٥ SPSRをユーザモードに更新し、ゲストの仮想ベクタアドレスをPCに ロード 例外処理の例(データアボート) ゲストアプリケーションがデータアボートが発生するような命令を実行 ゲストアプリケーション ゲストカーネル VMM 例外処理の例(データアボート) ゲストアプリケーション ゲストカーネル VMM データアボート例外発生 SP、LR、SPSRがバンクレジスタに切り替わる SP_usr、LR_usrをVSP_usr、VLR_usrに保存 SPSRをVSPSR_abtに保存 CPSRをVCPSR、SPSRにコピー データアボートのハンドラ開始アドレスから命令を1ブロック読み込み センシティブ命令の解析・書き換え SPにVSP_abtをセット SPSRをユーザモードに更新し、ゲストのハンドラをロード 例外処理の例(データアボート) ゲストアプリケーション 仮想データアボート例外発生 データアボートのハンドラを実行 普通ユーザモードのレジスタの保存等をしてスーパーバイザモードに移行 (本当のLinuxのハンドラコードは違いますが、ここではMSR命令でモードフラグを変更し移行したとする) ゲストカーネル VMM 例外処理の例(データアボート) ゲストアプリケーション ゲストカーネル VMM ソフトウェア割り込み発生(センシティブ命令エミュレーション) SP、LR、SPSRがバンクレジスタに切り替わる SP_usr、LR_usrをVSP_abt、VLR_abtに保存 SPSRをVCPSRにコピーし、VCPSRをスーパーバイザモードに更新 LRを保存 SP、LRにVSP_svc、VLR_svcをセット 保存したLRをPCにセット(SPSRがCPSRにコピーされる命令で) 例外処理の例(データアボート) ゲストアプリケーション データアボートのハンドラを実行終了 ユーザモードへ移行(ここでは ”SUBS PC,LR,#4”実行したとする) ゲストカーネル VMM 例外処理の例(データアボート) ゲストアプリケーション ゲストカーネル VMM ソフトウェア割り込み発生(センシティブ命令エミュレーション) SP、LR、SPSRがバンクレジスタに切り替わる SP_usr、LR_usrをVSP_svc、VLR_svcに保存 VSPSR_svcをVCPSRにコピー SP、LR、SPSRにVSP_usr、VLR_usr、VSPSR_svcをセット VLR_svc-4をPCにセット(SPSRがCPSRにコピーされる命令で) 例外処理の例(データアボート) ゲストアプリケーションが実行を再開 ゲストアプリケーション ゲストカーネル VMM 割り込みコントローラ ٥ ARMは2種類の割り込みコントローラを提供 ٥ Vectored Interrupt Controller(VIC) ٥ Generic Interrupt Controller(GIC) ٥ この2種類以外にも実際のチップ製造メーカーが提 供する独自割り込みコントローラが多数ある ٥ ARM1136ではVICのPL192がサポートされて おり、そのエミュレーションを行う PL192 ٥ PL192の特徴 ٥ 32個の割り込みベクタを持つ ٥ 各割り込みベクタに優先度・マスクを設定可能 ٥ ハードウェアで最も優先度の高い割り込みソースのサービスルーチ ンをロード ٥ 0xFFFFF000(HIVECSが有効な時は0xFFFEF000)をベー スアドレスとしてメモリにマップ ٥ IRQ・FIQハンドラのアドレスからVICADDRESSに1命令でアクセス できるようにするため ٥ VICポートを用いる場合はVICADDRESSは使用されないのでレイテ ンシには影響ない PL192のレジスタ(1) PL192のレジスタ(2) ・ ・ ・ ・ ・ ・ PL192のレジスタ(3) PL192のエミュレーション ٥ ゲストOSがPL192の仮想レジスタを直接管理 ٥ VMMはその仮想レジスタの値を見て、優先度・マス クから発生させる仮想割り込みを決定する ٥ マルチプロセッサ上だと一時的にこのページをread only にする、ただシングルプロセッサ上での実装を前提 ٥ 仮想VICADDRESSレジスタにサービスルーチンの アドレスをロード ٥ VEを有効にしている(VICポートを使用)場合はゲストOS にサービスルーチンアドレスから実行を再開させる メモリ ٥ 仮想化 ٥ シャドウページテーブルを用いる ٥ ページアロケータによって物理ページの割り当て・回収 ٥ 保護 ٥ ゲストカーネル・アプリケーションが同じユーザモードで動 作するため、動作モードによる保護ができない ٥ ARMのドメインを用いてゲストカーネル・アプリケーション の保護を行う シャドウページテーブル ٥ シャドウページテーブルの2通りの管理方式 ٥ 1つのシャドウページテーブルを用いる ٥ ゲストページテーブルが切り替わる度にシャドウページテーブルをフラッシュ ٥ 管理が簡単であり実装は容易 ٥ シャドウページテーブル更新のコストが非常に大きい ٥ 複数のシャドウページテーブルを用いる ٥ 各ゲストページテーブル毎にシャドウページテーブルを用意 ٥ シャドウページテーブルをフラッシュする必要がなく、更新のコストが少ない ٥ 全てのゲストページテーブルにシャドウページテーブルを用意するとメモリ使 用量が非常に多くなる ٥ メモリ使用量を抑えるためには、一定量のメモリを使用するとページテーブ ルを解放し再利用する必要があり管理が複雑になる 本VMMのシャドウページテーブル ٥ 複数のシャドウページテーブルによる管理 ٥ ゲスト切り替えの度にシャドウページテーブルをフラッ シュするのはあまりにコストが大きい ٥ ARMのTLBはASIDを持つので、各ゲストページテーブ ルとASIDを対応づければTLBのフラッシュの必要もなく なる ٥ ただし、組み込みのメモリ量は多くないので、シャドウ ページテーブルに使用するメモリを一定量に制限する ドメイン ٥ ARMにはドメインを用いたアクセス制御機構がある ٥ 16個のドメイン ٥ ページテーブル・TLBエントリには所属するドメイン のフィールドがある ٥ DACRに16個の各ドメインに対してアクセス不可、ク ライアント、マネージャのいずれかを設定する ٥ クライアントはAPビットによるチェック、マネージャは 常にアクセス許可 ドメインによる保護 D0をVMM、D1をゲストカーネル、D2をゲストアプリケーションとする D0 D1 D2 VMM クライアント マネージャ マネージャ ゲストカーネル クライアント マネージャ マネージャ ゲストアプリケーション クライアント アクセス不可 マネージャ このようにすることでゲストアプリケーションからゲストカーネル のメモリ領域を保護することができる
© Copyright 2024 ExpyDoc