s390(IBM Z)保護仮想化のダンプ
概要
VM のダンプは、その内部の問題をデバッグするための不可欠な手段である。 とくに、保護 VM が問題に陥ったときはそうである。実行中は、そのメモリと レジスタに外部からアクセスする方法がないためである。
しかし、保護 VM をダンプするときは、ダンプが VM の所有者の手に渡るまで 機密性を保つ必要がある。所有者だけがその解析を行えるべきだからである。
VM ダンプの機密性は Ultravisor が保証する。Ultravisor は KVM に対して インタフェースを提供し、それを通じて暗号化された CPU とメモリのデータを 要求できる。暗号化は Customer Communication Key に基づく。これは、顧客が 復号できる形で VM データを暗号化するために使う鍵である。
ダンプの手順
ダンプは 3 つの段階で行う:
開始
この段階ではダンプ処理を初期化し、暗号学的なシードを生成し、VM のダンプ データを暗号化するためのダンプ鍵を取り出す。
データ収集
現在、VM から収集できるデータには 2 種類ある。メモリと vCPU の状態である。
vCPU の状態には、その vCPU のすべての重要なレジスタ(汎用、浮動小数点、 ベクター、制御、tod/タイマ)が含まれる。ハイパーバイザの助けを借りて命令を エミュレートしている最中に vCPU をダンプすると、vCPU のダンプに不完全な データが含まれることがある。これはダンプデータのフラグビットで示される。 同じ理由から、暗号化された vCPU の状態だけでなく、ハイパーバイザ側の 暗号化されていない状態も書き出すことが非常に重要である。
メモリの状態は、暗号化されたメモリと、そのメタデータ(暗号化 tweak と ステータスフラグ)に分けられる。暗号化されたメモリは、いったんエクスポート されればそのまま読み出せる。再暗号化は不要なので、エクスポートの時点は 問題にならない。スワップアウトされてエクスポートされたメモリは、特別な 操作なしにスワップから読み出してダンプ先へ書き込める。
エクスポートしたページの tweak/ステータスフラグは、Ultravisor に要求する 必要がある。
終了
終了の段階では、vCPU とメモリのデータを復号するために必要なデータを提供し、 ダンプ処理を終える。この段階が成功裡に完了すると、新たなダンプの開始を 始められる。