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 とメモリのデータを復号するために必要なデータを提供し、 ダンプ処理を終える。この段階が成功裡に完了すると、新たなダンプの開始を 始められる。