[BitVisor-devel:104] Re: UEFI/GRUB2の設定(Ubuntu1610 on ThinkPAD T440s)

Hideki EIRAKU hdk @ igel.co.jp
2017年 1月 19日 (木) 11:22:05 JST


イーゲル 榮樂です。

From: k.suzaki <k.suzaki @ aist.go.jp>
Subject: [BitVisor-devel:103] Re: UEFI/GRUB2の設定(Ubuntu1610 on ThinkPAD T440s)
Date: Wed, 18 Jan 2017 19:00:56 +0900

> ただ、
> panic(CPU0) callrealmode_call is not allowed on UEFI systemds:
> d->func=10
> で落ちます。

func=10 は core/callrealmode_asm.h を見ると CALLREALMODE_FUNC_TCGBIOS
のようです。BitVisor では、UEFI 用の TCG BIOS 呼び出しが未実装のため、
UEFI 環境では使わないようになっています。(core/tcg.c の
int1a_TCG_StatusCheck() 関数が常に false を返すようになっています。)

> また、moduleをつけたいのですが、loadvmm.efiではどうやって設定するので
> しょうか。

module は UEFI 環境では使用できません。もともと module が実装された経
緯として、IC カードを用いた認証、および、IC カードからのストレージ暗号
化用共通鍵の取得を実現するために、USB デバイスとの入出力が必要になりま
す。しかし、BIOS には一般的な USB デバイスとの入出力 API がないために、
USB ホストコントローラー用の完全な (para-passthrough でない) デバイス
ドライバーが必要ということになりました。これを、認証の部分だけ既存のオ
ペレーティング・システム (OS) を使用することで実現しようとしたというこ
とになります。

UEFI 環境では状況が異なり、一般的な USB デバイスとの入出力 API が存在
するので、既存の OS を使う必然性がありません。しかも、既存の OS を使用
するためには、ファームウェアによるデバイス制御を終わらせる
ExitBootServices という API を使用しなければならず、そうすると認証後の
OS の起動に UEFI ファームウェアを使うことができなくなるため、既存の OS
を使うこと自体が困難です。そのため、module は使用できません。

なお、BitVisor をストレージ暗号化に用いる場合、BIOS 環境では、
boot/login-simple/ のプログラムにより、ストレージ暗号化用共通鍵を含む
設定を暗号化した状態でストレージに入れておくことができますが、UEFI 環
境用のそのようなプログラムはまだ実装されていません。BIOS 環境では、ファー
ムウェアはセクター単位の低レベルな API を提供するのみで、ファイルシス
テムを解釈しないため、簡単に暗号化を有効にすることができますが、UEFI
環境では、ファームウェアがファイルシステムを解釈するため、ストレージ暗
号化に対応するには、パーティションやファイルシステムを解釈するドライバー
(Disk I/O protocol や Simple File System protocol を提供するドライバー)
をいったん切り離し、暗号化を有効にしたうえで再び接続する必要があると思
われます。UEFI 対応を実装した際、簡単な実験を行ったところでは、そのあ
たりの挙動に機種によって若干の差異があり、今のところ詳しく調べられてい
ない状態です。

boot/login-simple/ に相当する UEFI 環境用の実装を行うとすれば、現在の
loadvmm.efi に起動パラメーターをつけるか何かして、今までの module が起
動される時と同様に、各種 para-passthrough ドライバーの初期化を行わない
状態で開始で BitVisor を開始させるようにし、開始後 loadvmm.efi から、
module の代わりに別の EFI Application を実行して認証を行わせる (その
application が config を作成し VMM 呼び出しで VMM に渡し、その段階で
para-passthrough ドライバーの初期化を開始、実行はそのまま継続) といっ
た形になるのかなと思います。ただし、現在 UEFI 環境では仮想マシン開始後
は画面へのログ出力がされない作りになっているため、そのままではドライバー
初期化時のトラブルを確認することができず、ログ出力にちょっと工夫が必要
になりそうです。

-- 
Hideki EIRAKU <hdk @ igel.co.jp>


BitVisor-devel メーリングリストの案内