説明

ハイパバイザを有する計算機システム

【課題】クライアントから利用される仮想計算機に割り当てられている記憶空間に格納された全てのコード群をスキャンできるようにする。
【解決手段】ハイパバイザを有する計算機システムが、クライアントから利用される第一種の仮想計算機の外部に、第一種の仮想計算機に割り当てられている記憶空間からコード群を読み出しそのコード群をスキャンするスキャナを有する。具体的には、例えば、ハイパバイザの管理対象として、第一種の仮想計算機の他に、クライアントに対して隠蔽される第二種の仮想計算機が用意される。スキャナが、第一種の仮想計算機の記憶空間からコード群を読み出すアシストと、読み出されたコード群をスキャンするエンジンとで構成される。エンジンが、第二種の仮想計算機で実行され、アシストが、ハイパバイザで実行される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハイパバイザを有する計算機システムに関する。
【背景技術】
【0002】
計算機システムとして、例えば、複数の仮想計算機を管理するハイパバイザを有した計算機システムが知られている(例えば特許文献1)。
【0003】
【特許文献1】特開2000−259434号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
一般に、仮想計算機は、クライアントに利用される。例えば、仮想計算機は、サーバとして、クライアントからの要求を処理する。
【0005】
計算機システムのセキュリティは高い方が好ましい。一つのセキュリティ対策として、ウィルススキャナを実行する方法がある。ウィルススキャナは、通常、OS(オペレーティングシステム)上で動作する。このため、この方法を、ハイパバイザを有する計算機システムに適用した場合、各仮想計算機のOS上でウィルススキャナが実行される。この場合、仮想計算機では、仮想計算機に割り当てられているメモリ空間からOS経由でファイルがスキャンされる。それ故、メモリ空間に存在するコード群のうち、OSが管理するファイルを構成するコード群をスキャンすることはできるが、それ以外のコード群をスキャンすることはできない。
【0006】
別のセキュリティ対策として、計算機システムの外部に、通信ネットワークを経由して計算機システムに入力されるコード群をスキャンするセキュリティ装置を設置する方法が考えられる。しかし、この方法では、通信ネットワークを非経由で計算機システムに入力されるコード群(例えば、コンピュータプログラムのインストール或いは開発途中で入り込むコード群)をスキャンすることはできない。
【0007】
従って、本発明の目的は、クライアントから利用される仮想計算機に割り当てられている記憶空間に格納された全てのコード群をスキャンできるようにすることにある。
【課題を解決するための手段】
【0008】
ハイパバイザを有する計算機システムが、クライアントから利用される第一種の仮想計算機の外部に、第一種の仮想計算機に割り当てられている記憶空間からコード群を読み出しそのコード群をスキャンするスキャナを有する。具体的には、例えば、ハイパバイザの管理対象として、第一種の仮想計算機の他に、クライアントに対して隠蔽される第二種の仮想計算機が用意される。スキャナが、第一種の仮想計算機の記憶空間からコード群を読み出すアシストと、読み出されたコード群をスキャンするエンジンとで構成される。エンジンが、第二種の仮想計算機で実行され、アシストが、ハイパバイザで実行される。
【0009】
例えば、第二種の仮想計算機に割り当てられた第二のメモリ空間内のMMIO(Memory Mapped I/O)空間に、仮想デバイスが割り当てられる。エンジンが、その仮想デバイスへのMMIOアクセスを行うことで、第一のメモリ空間から読み出されたコード群を取得する。
【発明を実施するための最良の形態】
【0010】
以下、図面を参照して、本発明の幾つかの実施形態を説明する。
【実施例1】
【0011】
図1は、本発明の第一実施形態の概要の説明図である。
【0012】
計算機システム100で、複数のLPAR(Logical PARtition)101、102の管理などを行うコンポーネントであるハイパバイザ104が実行される。
【0013】
LPARは、仮想計算機(例えば仮想サーバ)である。LPARとして、一つ以上(例えば二つ)の一般LPAR101A及び101Bの他に、特殊LPAR102がある。一般LPAR101は、クライアント(クライアント計算機)50に利用されるLPAR(例えば、クライアント50から通信ネットワーク51を介してI/O(Input/Output)コマンドを受け付け、そのI/Oコマンドを処理するLPAR)である。一方、特殊LPAR102は、ハイパバイザ104によりクライアント50に対して隠蔽されるLPAR(つまりクライアント50からは利用されないLPAR)である。
【0014】
特殊LPAR102で、セキュリティエンジン(以下、単に「エンジン」と言う)1021が実行され、ハイパバイザ104で、エンジン1021のアシストをするセキュリティアシスト(以下、単に「アシスト」と言う)1041が実行される。アシスト1041は、一般LPAR101A及び101Bにそれぞれ割り当てられている記憶空間(例えば、値が設定される仮想レジスタ、及び/又は、オペレーティングシステム等のコード群が格納されるメモリ空間)1011A及び1011B内からコード群をそれぞれ読み出す。エンジン1021は、読み出されたコード群をスキャンしセキュリティリスク(例えばコンピュータウィルス)の有無を判断する。記憶空間1011A及び1011B内のコード群のエンジン1021への転送方式として、本実施形態では、コピー方式とマッピング方式の一方を採用することが可能である。各転送方式については後に説明する。
【0015】
特殊LPAR102に、セキュリティコミュニケータ(以下、単に「コミュニケータ」と言う)103が割り当てられる。コミュニケータ103は、ハイパバイザ104が特殊LPAR102にのみ見せる仮想デバイスである。具体的には、図4に示すように、特殊LPAR102に割り当てられたメモリ空間(仮想メモリ)内のMMIO(Memory Mapped I/O)空間に、仮想デバイスであるコミュニケータ103が割り当てられる。エンジン1021は、コミュニケータ103(厳密には、後述のイニシエータ空間10351)へのMMIOアクセスにより、アシスト1041によって読み出されたコード群を取得することができる。本実施形態において、「MMIOアクセス」とは、MMIO空間内の、コミュニケータ103が割り当てられている空間(以下、コミュニケータ空間)1031に対するアクセスである。コミュニケータ空間1031は、ヘッダ部1032とデータ部1033とを有する。ヘッダ部1032には、記憶空間1011A又は1011Bにおける要求メモリアドレス(読出し元アドレス)とその要求メモリアドレスに対応したマップ先メモリアドレス(ターゲットアドレス)とを含んだヘッダ情報が格納される。データ部1033には、マッピング方式が採用された場合には、要求メモリアドレスがマッピングされる。及び/又は、データ部1033には、コピー方式が採用された場合には、要求メモリアドレスが表す記憶空間1011又は1011Bから読み出されたコード群がコピーされる。
【0016】
エンジン1021とアシスト1041間のインタフェースとしては、特殊命令(ハイパバイザ呼出し命令)を使用したハイパバイザ呼出し方式が採用される。具体的には、例えば、エンジン1021は、仮想レジスタ5022に、記憶空間1011Aの要求メモリアドレスを含んだ取得要求を設定し、ハイパバイザ呼出し命令を発行する。ハイパバイザ104が、そのハイパバイザ呼出し命令によって呼び出される。ハイパバイザ104は、呼出し元が特殊LPAR102の場合、引数を、アシスト1041に渡す。引数は、例えば、仮想レジスタ5022に設定された取得要求である。アシスト1041は、その引数を基に特定された取得要求に応答して、要求メモリアドレスとマップ先メモリアドレスを含んだヘッダ情報をヘッダ部1032に格納する。ハイパバイザ104が、戻り値(例えば、そのヘッダ情報の格納先アドレス)を、仮想レジスタ5022に設定する。エンジン1021は、その戻り値を基に、マップ先メモリアドレスを特定し、特定したマップ先メモリアドレスが表す空間部分に対してMMIOアクセスを行う。これにより、エンジン1021は、要求メモリアドレスが表す記憶空間1011Aから読み出されたコード群を取得し、そのコード群をスキャンすることができる。なお、記憶空間1011A内のコード群は、ハイパバイザ権限のプロセスで読み出される(つまり、一般LPAR101Aのプロセスに実行させる等の介入はされない)。
【0017】
以下、本実施形態を詳細に説明する。
【0018】
図2は、計算機システム100でのハードウェア仮想化方式の一例を示す。なお、図2では、図1に示した一般LPAR101A及び101Bのうち101Aを代表的に示しており、101Bの図示を省略している。
【0019】
計算機システム100は、例えば、サーバシャーシに搭載された複数のブレードサーバ(物理的なサーバ)で構成されたサーバシステムである。計算機システム100の物理ハードウェア資源1800には、例えば、複数の物理プロセッサ1804、物理PCI(Peripheral Component Interconnect)デバイス1803、物理メモリ1802及び物理BMC(Baseboard Management Controller)1801が含まれる。この物理ハードウェア資源1800上で、ハイパバイザ104が実行される。ハイパバイザ104によって、物理ハードウェア資源1800が、タイムスライスにより時分割、もしくは論理分割されることにより、仮想ハードウェア資源1820(1810)を備えたLPAR101A、102が作成される。仮想ハードウェア資源182(1810)には、例えば、仮想プロセッサ1024(201A)、仮想PCIデバイス2225(1225)、仮想メモリ(仮想メモリ本体)1026(203A)、及び仮想BMC2235(1235)が含まれる。LPAR102(101)では、仮想ハードウェア資源1820(1810)上で、OS1022(1013)が走行し、そのOS1022(1013)で、エンジン1021(アプリケーション1012)が実行される。OS1022(1013)は、例えば、Windows(登録商標)、Linux(登録商標)である。なお、特殊LPAR102にはOS1022が無くても良い。また、一般LPAR101A(101B)と特殊LPAR102を実行する物理プロセッサ1804は区別されていても良い(つまり、或る以上の物理プロセッサでは、特殊LPAR102のみが実行され、一般LPAR101A(101B)などは実行されなくても良い)。
【0020】
図3は、一般LPAR101、特殊LPAR102及びハイパバイザ104の構成の概念図である。
【0021】
一般LPAR101A(101B)に、アプリケーション1012A(1012B)、OS1013A(1013B)、仮想プロセッサ201A(201B)、仮想メモリ本体203A(203B)の他に、ページテーブル202A(202B)が備えられる。同様に、特殊LPAR102に、エンジン1021、OS1022、仮想プロセッサ1024、仮想メモリ本体1026の他に、ページテーブル1025が備えられる。ページテーブル202A(202B)、1025は、OS1012A(1012B)、1022によって作成されるテーブルであり、仮想メモリ本体203A(203B)、1026を含んだアドレス空間を管理するためのテーブルである。例えばページテーブル1025では、図4に示したメモリ空間(仮想メモリ本体1026を含んだアドレス空間)が管理される。このテーブル1025を用いたメモリ管理機能によって、図4に示したMMIO空間が用意することができる。仮想メモリ本体203A(203B)、1026が、例えば仮想的なRAM(Random Access Memory)として使用される空間である。なお、「ページ」とは、メモリ空間を構成するサブメモリ空間(例えば4KB(キロバイト)或いは2MB(メガバイト))である。複数のページで、メモリ空間が構成される。コード群の読出しは、種々の単位、例えば、ページ単位、或いは、ページ単位よりも小さい単位(例えばページ配下の1バイト単位)で行われる。
【0022】
コミュニケータ103は、仮想デバイス部1035とデバイスエミュレータ部1036とで構成される。仮想デバイス部1035は特殊LPAR102に割り当てられ、デバイスエミュレータ部1036がハイパバイザ104で実行される。仮想デバイス部1035に、架空の空間であるイニシエータ空間10351が用意されており、デバイスエミュレータ部1036に、実体としての空間であり、イニシエータ空間10351と対をなすターゲット空間10361が用意される。イニシエータ空間10351とターゲット空間10361は、実質的に同一の空間であり、これらの空間10351、10361が、前述したコミュニケータ空間(MMIO空間部分)1031である。
【0023】
ターゲット空間10361は、図1に示したヘッダ部1032及びデータ部1033を有する空間である。具体的には、例えば、ターゲット空間10361は、後述のコピー方式でのコード群のコピー先領域、仮想レジスタのデータ格納先、及び、公開鍵の格納領域のうちの少なくとも一つとして利用される。より具体的には、例えば、コピー方式の場合、コピー対象のコード群がターゲット空間10361(データ部1033)に格納され、イニシエータ空間10351に対するMMIOアクセスが、ハイパバイザ104で捕捉されて、デバイスエミュレータ1036によって、ターゲット空間10361へのアクセスに置き換えられる。つまり、MMIOアクセスで指定されるアドレスと、ターゲット空間10361内のアドレスとが紐付けられる。また、コピー方式及びマッピング方式のいずれでも、保存したレジスタ情報が、このターゲット空間10361のレジスタ用領域に保存され、エンジン1021が、MMIOアクセスを使って、ターゲット空間10361から値を取り出すことができる。また、マッピング方式では、アシスト1041が、シャドウページテーブル1043A(1043B)などを使って、メモリ203A(203B)から実体(アドレス)を引き当て、その結果をターゲット空間10361にコピーしないでエンジン1021に見せるだけになるので、イニシエータ空間10351へのMMIOアクセスは、転じて、メモリ203A(203B)へのアクセスに置き換えられる。マッピング方式では、コピー方式のようにコピーされたコード群が実際にターゲット空間10361に格納されていなくても、そのコード群は他の場所(メモリ203A(203B))にあるため、コピー先の領域を不要とする分、ターゲット空間10361全体の容量を節約することができる。さらに、メモリ203A(203B)へのアクセスに置き換えつつ、ターゲット空間10361(ヘッダ部1032及びデータ部1033)へのアクセスに置き換えることも可能であり、故に、公開鍵やヘッダ情報の取得のために、ターゲット空間10361にアクセスさせることも可能である。
【0024】
なお、イニシエータ空間10351とターゲット空間10361は、前述したように、実質的に同一の空間であり、故に、これらの空間10351、10361が、コミュニケータ空間(MMIO空間部分)1031となる。従って、以下の説明では、説明の冗長を避けるために、MMIOアクセスは、コミュニケータ空間1031に対して行われるとする。
【0025】
特殊LPAR102で、コミュニケータドライバ1023が実行される。コミュニケータドライバ1023は、仮想デバイス部1035を操作するためのドライバソフトウェアである。エンジン1021は、コミュニケータドライバ1023経由で、コミュニケータ空間1031に対するMMIOアクセスを行う。
【0026】
ハイパバイザ104で、仮想プロセッサ201A(201B)、1024に対応するプロセッサエミュレータ1042A(1042B)、1044が実行される。仮想プロセッサ201A(201B)、1024は、物理プロセッサ1804からLPAR101A(101B)、102に割り当てられたプロセッサ資源である。プロセッサエミュレータ1042A(1042B)、1044は、仮想プロセッサ201A(201B)、1024のプログラムの一つである。
【0027】
OS1013A(1013B)、1022(又は、アプリケーション1012A(1012B、エンジン1012)からは、仮想プロセッサ201A(201B)、1024は、物理プロセッサのように見える。例えば、ハイパバイザ104(プロセッサエミュレータ1044)が、命令の実行処理をエミュレートすることで、あたかもハイパバイザ呼出し命令が物理プロセッサで実行されたように見える。
【0028】
なお、仮想プロセッサ201A(201B)、1024とプロセッサエミュレータ1042A(1042B)、1044は同一と考えられても良い。なぜなら、仮想プロセッサ201A(201B)、1024は、LPAR101A(101B)、102上のOS1013A(1013B)、1022(又は、アプリケーション1012A(1012B、エンジン1012)からは物理プロセッサのように見え、ハイパバイザ104から見れば、ソフトウェア(エミュレータ)であるからである。ちなみに、LPAR101A(101B)、102での仮想レジスタは、仮想プロセッサ201A(201B)、1024が有している仮想的なレジスタである。仮想レジスタは、エミュレートを行うために備えられ、実体は、ハイパバイザ104で管理されているデータである。
【0029】
また、ハイパバイザ104では、ページテーブル202A(202B)、1025とそれぞれ同期したシャドウページテーブル1043A(1043B)、1045が管理される。ハイパバイザ104は、シャドウページテーブル1043A(1043B)、1045を参照することで、LPAR101A(101B)、102内のメモリ空間(仮想メモリ本体203A(203B)、1026を含んだ空間)の管理を行うことができる。
【0030】
アシスト1041は、要求受理部10413と、認証部10415と、マッピング変換部10412と、データ取得部10411と、レスポンス生成部10414とを有する。
【0031】
要求受理部10413は、ハイパバイザ104がハイパバイザ呼出し命令で呼び出されたときに、プロセッサエミュレータ1044から呼び出される。要求受理部10413は、プロセッサエミュレータ1024から渡された仮想レジスタ1024(エンジン1021からの要求)から、どのような要求が発行されたかを解析し、その要求に応じたモジュール10411、10412又は10415に処理を依頼する機能を有する。
【0032】
認証部10415は、適切なエンジン1021及びコミュニケータ103を有したLPARからの要求であることを認証する機能を有する。また、認証部10415は、取得要求の発行元LPARが認証済みであることをチェックする機能も有する。
【0033】
マッピング変換部10412は、図5に示すような、要求メモリアドレスとマップ先メモリアドレスとの対応関係を表す変換テーブルを保持し、変換テーブルを更新する機能を有する。
【0034】
データ取得部10411は、プロセッサエミュレータ1042A(1042B)に問い合わせることで、仮想レジスタに設定された値を取得する機能を有する。また、データ取得部10411は、シャドウページテーブル1043A(1043B)に問い合わせることで、一般メモリ空間内の仮想メモリ本体203A(203B)からコード群を読み出す機能を有する。その読出しは、リードオンリー方式で行われる。ここで、「リードオンリー方式」とは、ページテーブル202A(202B)の改変が行われない、データの読み出しのみを実行する読出し方式、具体的には、ページテーブル202A(202B)、シャドウページテーブル1043A(1043B)(後述のダーティビットを含む)、仮想プロセッサ201A(201B)などで管理されている情報が一切変更されないような読出し方式である。言い換えれば、アシスト1041からは、シャドウページテーブル1043A(1043B)に対して、読み出しだけが許可されており、書き込みは許可されていない。
【0035】
レスポンス生成部10414は、リクエスト受理、コード群の読出し及び/又はマッピング変換等の処理の完了後に、特殊LPAR102に戻される戻り値の設定を行う機能を有する。また、レスポンス生成部10414は、デバイスエミュレータ部1036を利用して、コミュニケータ空間1031のヘッダ部1032にヘッダ情報を書き込む機能を有する。
【0036】
なお、前述した特殊命令(ハイパバイザ呼出し命令)とは、ハイパバイザ104を意識した命令であり、ハイパバイザ104を意識しない命令である一般命令とは異なる。
【0037】
具体的には、例えば、OS1013A、1013B及び1022やアプリケーション1012A、1012Bは、プロセッサエミュレータ1042A、1042B及び1044を、エミュレータとしてではなく物理プロセッサとして認識している。従って、OS1013A、1013B及び1022やアプリケーション1012A、1012Bからは、物理プロセッサに対して命令が発行された場合、その命令の実行によって実はハイパバイザ104が呼び出されていて、処理が化かされている、という事実はわからない。このような、ハイパバイザ104を意識しない命令を、本実施形態では「一般命令」と呼ぶ。一般命令は、プロセッサエミュレータ1042A、1042B、1044で実行されることもあれば、プロセッサエミュレータ1042A、1042B、1044で実行されず物理プロセッサ1804に実行されることがある。どちらで実行されるかは、ハイパバイザ104によって制御される。一方、ハイパバイザ104を意図的に呼び出しそれに見合った処理結果をハイパバイザ104に要求する命令を、一般命令に対して、本実施形態では「特殊命令」と呼ぶ。
【0038】
図6は、エンジン1021の機能ブロック図を示す。
【0039】
エンジン1021は、命令発行部10211と、戻り値解析部10212と、MMIOアクセス部10213と、スキャン部10214と、暗号化部10215とを有する。
【0040】
命令発行部10211は、要求を仮想レジスタ5022に設定し、ハイパバイザ呼出し命令を発行する。
【0041】
戻り値解析部10212は、発行されたハイパバイザ呼出し命令に対してハイパバイザ104から仮想レジスタ5022に設定された戻り値を解析する。
【0042】
MMIOアクセス部10213は、戻り値を基に特定されたマップ先メモリアドレスを指定したMMIOアクセスを行う。
【0043】
スキャン部10214は、MMIOアクセスの結果として受け取ったコード群をスキャンする。
【0044】
暗号化部10215は、エンジン1021が保有する認証識別子を、ハイパバイザ104の公開鍵で暗号化することにより暗号文を生成し、生成した暗号文をコミュニケータ空間1031に書き込む。
【0045】
図7は、エンジン1021からアシスト1041への要求発行方式の説明図である。図8は、要求の発行から戻り値の受領までの流れを示す。以下、図7及び図8を参照して、要求の発行と戻り値の受領の流れを説明する。
【0046】
エンジン1021の命令発行部10211が、要求を決定し(S401)、要求(具体的には、例えば、要求メモリアドレスなど、要求に関する値)を仮想プロセッサ1024の仮想レジスタ5022に設定する(S402)。そして、命令発行部10211は、ハイパバイザ呼出し命令を発行する(S403)。
【0047】
ハイパバイザ呼出し命令によって呼び出されたハイパバイザ104が、呼出しの理由を検索する(S404)。「呼出しの理由」としては、例えば、一般命令のエミュレータ呼び出し、メモリアクセスの捕捉、I/Oアクセスの捕捉、割り込み、障害の検知などがあるが、このS404では、ハイパバイザ呼出し命令による呼び出しであるかどうかが検索される。呼出しの理由が、エンジン1021によるハイパバイザ呼出し命令発行によるものであった場合、仮想レジスタ5022の情報が、プロセッサエミュレータ1044に渡され、命令の処理として扱われる(S405)。プロセッサエミュレータ1044から、要求受理部10413へ処理が依頼される(S406)。要求受理部10413がその依頼に応答して、仮想レジスタ5022に設定された要求(値)を受け取ると、その要求に対応する処理が、アシスト1041で行われる(S407)。レスポンス生成部10414が、プロセッサエミュレータ1044の仮想レジスタ5022に、戻り値を設定する(S408)。プロセッサエミュレータ1044が完了し、特殊LPAR102に処理が移行する(S409)。S409は、具体的には、例えば、物理プロセッサ1804のレジスタに、仮想プロセッサ1024の仮想レジスタの値が読み込まれ、処理モードを特殊LPAR102へと移す特別な命令をハイパバイザ104が実行することにより、行われる。
【0048】
特殊LPAR102では、エンジン1021の戻り値解析部10212が、仮想プロセッサ1024の仮想レジスタ5022から戻り値を読み出し、解析する(S410)。
【0049】
以上の説明において、プロセッサエミュレータ1044が使用される場合、ハイパバイザ104は、物理プロセッサから物理レジスタの情報を読み出して仮想レジスタ5022にコピーする。そして、プロセッサエミュレータ1044を実行して処理を終えるとき(特殊LPAR102に処理が戻るとき)、ハイパバイザ104は、仮想レジスタ5022の値を物理レジスタに書き戻す。これによって、エミュレーションが成立する。このため、エンジン1021が仮想レジスタ5022に値を書き込み、ハイパバイザ呼出し命令を使ってハイパバイザ104を呼び出すということは、別の言い方をすれば、ハイパバイザ104が持っている仮想プロセッサ1024の管理データ群(仮想レジスタ)に引数などの値が書き込まれるということになる。
【0050】
エンジン1021から発行された要求が、要求メモリアドレスが表す一般メモリ空間からのコード群の読出しである取得要求の場合、マッピング方式及びコピー方式のいずれかの方式で、コード群の読出しが行われる。マッピング方式及びコピー方式のいずれが行われるかは、例えば、エンジン1021及びアシスト1041間で予め決まっていても良いし、エンジン1021とアシスト1041のどちらが決定しても良いし、要求LPAR番号(取得要求の発行先の一般LPARの番号)によって決定されても良いし、計算機システム100の負荷に応じて決定されても良い。
【0051】
マッピング方式を、図9乃至図11を参照して説明し、コピー方式を、図12乃至図14を参照して説明する。
【0052】
図9は、マッピング方式の概要の説明図である。
【0053】
ヘッダ部1032に、複数のヘッダテーブル501が用意されている。1件の取得要求についてのヘッダ情報が、1つのヘッダテーブル501に格納される。ヘッダテーブル501に格納されるヘッダ情報には、シーケンス番号、要求LPAR番号、要求メモリアドレス、マップ先メモリアドレス、データ長、取得時刻及びレジスタデータ格納アドレスなどが含まれる。
【0054】
シーケンス番号は、要求が発行される都度に割り振られる、要求のID(識別子)である。
【0055】
要求LPAR番号は、要求の発行先の一般LPARの番号、言い換えれば、コード群の読出し元となるメモリ空間の割当て先となっている一般LPARの番号である。
【0056】
マップ先メモリアドレスは、コミュニケータ空間1031のデータ部1033内の領域を表すアドレスである。マップ先メモリアドレスは、特殊LPAR102が有するページテーブル1025から特定される。マッピング方式では、マップ先メモリアドレスが表すメモリ空間部分(一又は複数のページで構成された空間)にはコード群は格納されず、そのメモリ空間部分に、要求メモリアドレスがマッピングされる。従って、マップ先メモリアドレスを指定したMMIOアクセスがハイパバイザ104で捕捉された場合、MMIOアクセスに従い、そのマップ先メモリアドレスが表すメモリ空間部分(データ部1033の一部分)にマッピングされている要求メモリアドレスが表すメモリ空間部分に、アクセスされる。MMIOアクセスは、コミュニケータ空間1031の範囲へのアクセス(例えば、エンジン1021からドライバ1023を経由した、コミュニケータ空間1031の読み取りのためのアクセス)であり、ハイパバイザ104に処理を移行させることができる機能である。従って、ハイパバイザ104は、アクセスで指定されたアドレスが、コミュニケータ空間1031の範囲内のアドレスであることを検出した場合に、MMIOアクセスを捕捉したことになる。
【0057】
データ長は、読出し元のメモリ空間部分(要求メモリアドレスが表す空間部分)のサイズ(容量)である。
【0058】
取得時刻は、読出し元のメモリ空間部分からコード群が読み出された時刻を表す。取得時刻は、例えば、いつどこから取得されたかをロギングすることに使用される。また、後に説明する第二実施形態のように、ダーティページの変化の時系列観測のために、ヘッダ部1032に格納された取得時刻が利用される。
【0059】
レジスタデータ格納アドレスは、仮想レジスタに記憶されているデータ(コード群)のコピー先のアドレス(データ部1033の一部分を表すアドレス)である。マッピング方式では、レジスタデータ格納アドレスは無効値である。
【0060】
マッピング方式では、以下の(9−1)乃至(9−7)の処理、
(9−1)エンジン1021が、要求LPAR番号及び要求メモリアドレスを含んだ取得要求を仮想レジスタ5022に設定して、ハイパバイザ呼出し命令を発行する、
(9−2)アシスト1041が、データ部1033内の空間部分(以下、図9乃至図11の説明において「空間部分TM」と言う)に、要求メモリアドレスをマッピングする、
(9−3)アシスト1041が、要求LPAR番号、要求メモリアドレス及びマップ先メモリアドレス(空間部分TMのアドレス)を含んだヘッダ情報をヘッダテーブル501に格納する、
(9−4)ハイパバイザ104から特殊LPAR102に処理が移行する、
(9−5)エンジン1021が、マップ先メモリアドレスを指定したMMIOアクセスを発行する、
(9−6)ハイパバイザ104でMMIOアクセスが捕捉された場合に、アシスト1041が、マップ先メモリアドレスが表す空間部分にマッピングされている要求メモリアドレスが表す空間部分(一般メモリ空間内の空間部分)から、リードオンリー方式でコード群を読み出す、
(9−7)MMIOアクセスの結果として、読み出されたコード群がエンジン1021に受け取られる、
が行われる。
【0061】
以下、図10及び図11を参照して、マッピング方式で行われるコード群取得の詳細な流れを説明する。
【0062】
図10に示すように、エンジン1021の命令発行部10211が、仮想レジスタ5022に、取得要求を設定する(S601)。設定される取得要求には、例えば、要求種別を表す値(取得要求であることを表す値)、要求メモリアドレス及び要求LPAR番号などが含まれる。命令発行部10211が、ハイパバイザ呼出し命令を発行する(S602)。
【0063】
ハイパバイザ104におけるプロセッサエミュレータ1044が、ハイパバイザ呼出し命令を受け取り(S603)、要求受理部10413を呼び出す(S604)。要求受理部10413が、取得要求の発行元LPAR102が認証済みか否かを認証部10415に問い合わせる(S605)。認証済みとの回答が来た場合、要求受理部10413が、取得要求を解析し(S606)、マッピング変換部10412を呼び出す(S607)。マッピング変換部10412が、要求先LPAR101A(又は101B)に対応したシャドウページテーブル1043A(又は1043B)に、要求メモリアドレスの存在を問合せ(S608)、その問合せに対する回答から、その要求メモリアドレスが取得可能であることを確認する(S609)。マッピング変換部10412が、シャドウページテーブル1045を基に、コミュニケータ空間1031のうちの使用可能な範囲を検索する(S610)。マッピング変換部10412は、S610で見つかった範囲に属するアドレス(マップ先メモリアドレス)に要求メモリアドレスをマッピングするよう、変換テーブル(図5参照)を更新する(S611)。レスポンス生成部10414が、マップ先メモリアドレスを、S601で設定された取得要求に対応するヘッダテーブル501に格納する(S612)。レスポンス生成部10414は、エンジン1021への通知情報(例えば、S612でのマップ先メモリアドレスの格納先テーブル501のアドレスを含んだ情報)を、仮想レジスタ5022に設定する(S613)。通知情報が、前述した戻り値となる。ハイパバイザ104が、取得要求の発行元(特殊LPAR102)に処理を移行する(S614)。
【0064】
特殊LPAR102において、エンジン1021の戻り値解析部10212が、仮想レジスタ5022から通知情報を取り出す(S615)。戻り値解析部10212が、通知情報から特定されるヘッダテーブル501から、例えばMMIOアクセス部10213呼出しMMIOアクセスを実行させることで、マップ先メモリアドレスを取得する(S616)。MMIOアクセス部10213が、コミュニケータドライバ1023を利用して、そのマップ先メモリアドレスを指定したMMIOアクセスを行う(S617)。
【0065】
図11に示すように、ハイパバイザ104が、MMIOアクセスを捕捉し(S618)、デバイスエミュレータ部1036を呼び出す(S619)。デバイスエミュレータ部1036が、マップ先メモリアドレスが表す空間部分内のコード群をマッピング変換部10412に問い合わせる(S620)。マッピング変換部10412が、変換テーブルを基に、マッピング先メモリアドレスに対応した要求メモリアドレスを特定し、データ取得部10411が、その要求メモリアドレスを、要求LPAR番号に対応したシャドウページテーブル1043A(又は1043B)に問い合わせることで、その要求メモリアドレスが表す空間部分(一般メモリ空間内の空間部分)に記憶されているコード群を取得する(S621)。データ取得部10411が、コード群の取得をレスポンス生成部10414に通知し、レスポンス生成部10414が、プロセッサエミュレータ1044に問い合わせて、仮想レジスタ5022内の領域を獲得する(S622)。データ取得部10411が、取得されたコード群を、レスポンス生成部10414に送る(S623)。レスポンス生成部10414が、デバイスエミュレータ部1036の結果に、取得されたコード群を含める(S624)。ハイパバイザ104が、取得要求の発行元(特殊LPAR102)に処理を移行する(S625)。
【0066】
特殊LPAR102において、エンジン1021が、MMIOアクセスの結果として、コード群を受け取る(S626)。スキャン部10214が、そのコード群をスキャンする(S627)。
【0067】
以上が、マッピング方式の説明である。次に、コピー方式を説明する。
【0068】
図12は、コピー方式の概要の説明図である。以下、図9との相違点を主に説明し、図9との共通点については説明を省略或いは簡略する。
【0069】
マップ先メモリアドレスは、要求メモリアドレスが表す空間部分から読み出されたコード群のコピー先の空間部分(データ部1033内の空間部分)を表すアドレスである。
【0070】
また、レジスタデータ格納アドレスは、有効な値である。レジスタデータ格納アドレスは、一般LPAR101A(101B)が利用可能な仮想レジスタから読み出されたデータ(コード群)のコピー先の空間部分(データ部1033内の空間部分)を表すアドレスである。
【0071】
コピー方式では、以下の(12−1)乃至(12−6)の処理、
(12−1)エンジン1021が、要求LPAR番号及び要求メモリアドレスを含んだ取得要求を仮想レジスタ5022に設定して、ハイパバイザ呼出し命令を発行する、
(12−2)アシスト1041が、要求メモリアドレスが表す空間部分(一般メモリ空間内の空間部分)から、リードオンリー方式でコード群を読み出し、そのコード群を、要求メモリアドレスに対応付けられるマップ先メモリアドレスが表す空間部分(以下、図8乃至図10の説明において「コピー先空間」と言う)にコピーする、
(12−3)アシスト1041が、要求LPAR番号、要求メモリアドレス及びマップ先メモリアドレス(コピー先空間のアドレス)を含んだヘッダ情報をヘッダテーブル501に格納する、
(12−4)ハイパバイザ104から特殊LPAR102に処理が移行する、
(12−5)エンジン1021が、マップ先メモリアドレスを指定したMMIOアクセスを発行する、
(12−6)ハイパバイザ104でMMIOアクセスが捕捉された場合に、マップ先メモリアドレスが表す空間部分に記憶されているコード群が、MMIOアクセスの結果として、エンジン1021に受け取られる、
が行われる。ターゲット空間は、デバイスエミュレータ部1036用のメモリ空間である。
【0072】
以下、図13及び図14を参照して、マッピング方式で行われるコード群取得の詳細な流れを説明する。その際、図10及び図11との相違点を主に説明し、図10及び図11との共通点については説明を簡略する。
【0073】
図13に示すように、図10のS601乃至S605と同様の処理が行われる(S911乃至S915)。
【0074】
認証済みとの回答が来た場合、要求受理部10413が、取得要求を解析し(S916)、データ取得部10411を呼び出す(S917)。データ取得部10411が、要求先LPAR101A(又は101B)に対応したシャドウページテーブル1043A(又は1043B)に、要求メモリアドレスの存在を問合せ(S918)、その問合せに対する回答から、その要求メモリアドレスが取得可能であることを確認する(S919)。マッピング変換部10412が、シャドウページテーブル1045を基に、コミュニケータ空間1031のうちの使用可能な範囲を検索する(S920)。データ取得部10411が、要求メモリアドレスを、要求LPAR番号に対応したシャドウページテーブル1043A(又は1043B)に問い合わせることで、その要求メモリアドレスが表す空間部分(一般メモリ空間内の空間部分)に記憶されているコード群を取得し、そのコード群を、S920で見つかった範囲に属するターゲット空間(データ部1033内の空間部分)にコピーする(S921)。レスポンス生成部10414が、プロセッサエミュレータ1044に問い合わせて、仮想レジスタ5022内の領域を獲得し、且つ、コピー先空間のアドレス(すなわち、マップ先メモリアドレス)を、S911で設定された取得要求に対応するヘッダテーブル501に格納し、エンジン1021への通知情報(例えば、マップ先メモリアドレスの格納先テーブル501のアドレスを含んだ情報)を、仮想レジスタ5022に設定する(S922)。ハイパバイザ104が、取得要求の発行元(特殊LPAR102)に処理を移行する(S923)。
【0075】
特殊LPAR102において、エンジン1021の戻り値解析部10212が、仮想レジスタ5022から通知情報を取り出す(S924)。戻り値解析部10212が、通知情報から特定されるヘッダテーブル501から、マップ先メモリアドレスを取得する(S925)。MMIOアクセス部10213が、コミュニケータドライバ1023を利用して、そのマップ先メモリアドレスを指定したMMIOアクセスを行う(S926)。
【0076】
図14に示すように、ハイパバイザ104が、MMIOアクセスを捕捉し(S927)、デバイスエミュレータ部1036を呼び出す(S928)。デバイスエミュレータ部1036が、マップ先メモリアドレスが表すターゲット空間10361に記憶されているコード群を、デバイスエミュレータ部1036の呼び出し結果に含める(S929)。ハイパバイザ104が、取得要求の発行元(特殊LPAR102)に処理を移行する(S933)。その後、図11のS626及びS627と同様の処理が行われる(S934及びS935)。
【0077】
以上が、コピー方式の説明である。
【0078】
さて、本実施形態では、前述したように、適切なエンジン1021及びコミュニケータ103を有したLPARからの要求であることの認証処理が行われる。
【0079】
図15は、認証処理の概要の説明図である。
【0080】
コミュニケータ103の割当てが鍵とされ、その鍵を使って、エンジン1021及びアシスト1041間の認証が行われる。具体的には、ハイパバイザ104の公開鍵1101が、コミュニケータ空間1031に格納される。エンジン1021が、所定の認証識別子を、その公開鍵1101で暗号化してコミュニケータ空間1031に格納し、暗号文(暗号化された認証識別子)の格納先アドレスを含んだ認証要求を仮想レジスタ5022に設定して、ハイパバイザ呼出し命令を発行する。アシスト1041の認証部10415が、認証要求に応答して、その暗号化されている認証識別子(暗号文)を、公開鍵1101とペアになっている秘密鍵1103で復号化し、復号化された認証識別子が所定の認証識別子であるかどうかの判断を行う。
【0081】
この判断の結果が肯定的の場合に、特殊LPAR102が認証済みとなり、以後、その特殊LPAR102がハイパバイザ呼出し命令を発行した場合に、その命令が実行される。逆に、この判断の結果が否定的となってしまうと、特殊LPAR102が認証済みとならず、以後、その特殊LPAR102がハイパバイザ呼出し命令を発行しても、その命令の実行は不可となる(命令実行不可を表す戻り値がハイパバイザ104から特殊LPAR102に送られる)。
【0082】
図16は、特殊LPARの生成から認証完了(認証済み)となるまでの詳細な流れを示す。
【0083】
ハイパバイザ104が、内部に認証識別子(認証用のデータ)を有したエンジン1021が実行される特殊LPAR102を生成する(S1201)。
【0084】
ハイパバイザ14が、特殊LPAR102の特殊メモリ空間内のMMIO空間に、コミュニケータ103を割り当て、アシスト1041が、生成された特殊LPAR102の番号を認証部10415に設定する(S1202)。アシスト1041が、コミュニケータ空間1031(具体的には例えばヘッダ部1032)に、ハイパバイザ104の公開鍵1101を格納する(S1203)。アシスト1041が、生成された特殊LPAR102の状態を、アクティベイトに切り替える(特殊LPAR102の電源をターンオンする)(S1204)。なお、公開鍵の格納先は、所定の領域であっても良いし、ランダム値初期化によって決定された領域(つまり、ランダムに決定された領域)であっても良い。公開鍵の格納先が所定の領域の場合、暗号化部10215は、予め、公開鍵の格納先を知っており、公開鍵の格納先の領域がランダムで決定された場合、ハイパバイザ104がエンジン1021に、格納先の領域のアドレスを通知しても良い。
【0085】
アクティベイトにされた特殊LPAR102では、OS1022が起動し(S1205)、割り当てられているコミュニケータ103が初期化される(S1206)。次に、コミュニケータドライバ1023が初期化される(S1207)。次に、エンジン1021が起動される(S1208)。
【0086】
エンジン1021の暗号化部10215(図6参照)が、公開鍵1101をコミュニケータ空間1031からMMIOアクセスにより取得する(S1209)。暗号化部10215が、エンジン1021の内部にある認証識別子を公開鍵1101で暗号化する(S1210)。暗号化部10125が、コミュニケータ空間1031(具体的には例えばデータ部1033)に、公開鍵1101で暗号化された認証識別子(暗号文)を格納し、暗号文の格納先アドレスを含んだ認証要求を仮想レジスタ5022に設定し、ハイパバイザ呼出し命令を発行する(S1211)。
【0087】
プロセッサエミュレータ1044が、ハイパバイザ呼出し命令を受理し、その命令の受理を要求受理部10413に通知する(S1212)。要求受理部10413は、仮想レジスタ5022から認証要求を特定し、認証部10415を呼出し、認証部10415が、S1202で設定されたLPAR番号と、ハイパバイザ呼出し命令の発行元の特殊LPAR102の番号が等しいか否かの判断を行う(S1213)。この判断の結果が否定的であれば、後述のS1214以降の処理は行われない(例えば、認証失敗を表す戻り値が、ハイパバイザ呼出し命令の発行元の特殊LPAR102に返却される)。
【0088】
認証部10415は、S1213での判断の結果が肯定的の場合に、仮想レジスタ5022から取得された認証要求に含まれている格納先アドレスが表すコミュニケータ空間部分から、暗号文を取得する(S1214)。認証部10415は、アシスト1041が予め保持している秘密鍵1103を用いて、その暗号文を復号化する(S1215)。認証部10415は、復号化により得られた認証識別子が特定の規則に従う認証識別子であるか否か(例えば、予め保持している認証識別子と等しいか否か)の判断を行い、その判断の結果が肯定的の場合に、S1202で設定されたLPAR番号に、認証済みを表すフラグを紐付ける(S1216)。この後、認証完了が、レスポンス生成部10414及び仮想レジスタ5022経由で、エンジン1021に通知される。
【0089】
以上の一連の流れにより、アシスト1041とエンジン1021の両方で、認証済みが認識される。
【0090】
以上、上述した第一実施形態によれば、ハイパバイザ104が、一般LPAR101の他に、クライアントに対して隠蔽したLPARである特殊LPAR102を管理する。特殊メモリ空間内のMMIO空間に、仮想デバイス(コミュニケータ103)が割り当てられる。特殊LPAR102で、エンジン1021が実行され、ハイパバイザ104で、エンジン1021をアシストするアシスト1041が実行される。エンジン1021は、一般メモリ空間におけるアドレス(要求メモリアドレス)を指定した取得要求を発行したり、MMIO空間内のデータ部1033におけるアドレス(マップ先メモリアドレス)を指定したMMIOアクセスを行ったり、MMIOアクセスの結果として受け取られたコード群(要求メモリアドレスが表す空間部分から読み出されたコード群)をスキャンしたりする。アシスト1041は、取得要求に応答してマップ先メモリアドレスをMMIO空間内のヘッダ部1032に格納したり、シャドウページテーブル1043A(1043B)を利用して要求メモリアドレスが表す空間部分からコード群をリードオンリー方式で読み出したり、MMIOアクセスがハイパバイザ104で捕捉された場合にMMIOアクセスの結果に上記読み出されたコード群を含めたりする。以上の構成により、一般メモリ空間(及び、一般LPAR101A(101B)が利用可能な仮想レジスタ)に記憶されている全てのコード群をスキャンすることが可能となる。
【0091】
また、上述した第一実施形態によれば、認証済みとなっていない特殊LPAR102がハイパバイザ呼出し命令を発行しても、その命令の実行は不可となる(例えば、命令実行不可を表す戻り値がハイパバイザ104から特殊LPAR102に送られる)。これにより、例えば、或るLPARが、不正に、一般メモリ空間内のコード群を取得しようとしても、認証済みとなっていなければ、一般メモリ空間内のコード群を取得することはできない(例えば、図10のS605及び図13のS915で、認証済みが確認できないと、ハイパバイザ呼出し命令の実行は不可とされる)。これは、セキュリティ向上の貢献となる。
【実施例2】
【0092】
以下、本発明の第二実施形態を説明する。その際、本発明の第一実施形態との相違点を主に説明し、第一実施形態との共通点については説明を省略或いは簡略する。
【0093】
第二実施形態では、一般メモリ空間(厳密にはそのうちの仮想メモリ本体)に、更新の生じたページ(以下、ダーティページ)があるかどうかが検出され、検出されたダーティページのみから、スキャンされるコード群が読み出される。言い換えれば、第二実施形態では、一般メモリ空間から全てのコード群が読み出される必要がない。ダーティページの変化の時系列観測のために、ヘッダ部1032に格納された取得時刻が利用される。
【0094】
図17を参照して、ダーティページの検出のための機構を説明する。
【0095】
一般LPARで管理されるページテーブルは、複数の階層(図17の例では4つの階層)がある。上位から下位にかけて、PML4(Page Map Level 4 table entry)、PDP(Page Directory Pointer table entry)、PDE(Page Directory Entry)、PTE(Page Table Entry)である。PML4、PDP、PDE及びPTEと辿った先で、物理メモリページ(仮想メモリ本体に対応した物理メモリ1802(図2参照)のページ)のアドレスと、そのページに格納されているコード群(データ)を得ることができる。
【0096】
ここで、PTEには、複数のページにそれぞれ対応した複数のビットで構成されたビットマップがある。更新があったページに対応するビットが、例えば一般LPAR101A(101B)内のOS1013A(1013B)によって、オン(“1”)とされる(つまりダーティビットとされる)。そのビットマップを含んだページテーブル201A(201B)に対応したシャドウページテーブル1043A(1043B)を参照することで、アシスト1041が、どれがダーティページであるか(ダーティビットに対応したページ)を検出することができる。
【0097】
具体的には、例えば、エンジン1021が、定期的に、差分検出要求を仮想レジスタに設定してハイパバイザ呼出し命令を出す。ハイパバイザ104内のアシスト141が、シャドウページテーブル1043A(1043B)を参照することで、メモリ203A(203B)においてダーティページがあるか否かの差分検索を行い、その差分検索の結果を、エンジン1021に返す。エンジン1021は、差分検索の結果が、差分有りの場合、その結果から特定されるターディページに対応したアドレスを指定したMMIOアクセスを行うことで、ダーティページからコード群を読み出し、一方、差分検索の結果が、差分無しの場合、MMIOアクセスを利用したコード群読出しを非実行とする。これにより、不要なコード群(つまり一度スキャンされたコード群)の読出し処理を避けることができる。
【0098】
なお、ダーティビットのリセットは、ページテーブルもしくはシャドウページテーブルの本来のタスクとしてOSなどによって実施され、アシスト1041からは行われない。
【0099】
図18は、本発明の第二実施形態でのダーティページ検出の流れを示す。
【0100】
エンジン1021が、コミュニケータ空間に各一般メモリ空間(仮想メモリ本体)を対応させる(S1701)。エンジン1021の命令発行部10211が、要求LPAR番号を含んだ差分検出要求を仮想レジスタ5022に設定し、ハイパバイザ呼出し命令を発行する(S1702)。
【0101】
ハイパバイザ104におけるプロセッサエミュレータ1044が、ハイパバイザ呼出し命令を受け取り(S1703)、要求受理部10413を呼び出す(S1704)。要求受理部10413が、差分検出要求の発行元LPAR102が認証済みか否かを認証部10415に問い合わせる(S1705)。認証済みとの回答が来た場合、要求受理部10413が、取得要求を解析し(S1706)、データ取得部10411(又はマッピング変換部10412)を呼び出す(S1707)。データ取得部10411が、要求先LPAR番号に対応したシャドウページテーブル1043A(又は1043B)に問い合わせ、そのシャドウページテーブル1043A(又は1043B)のPTEを検索し(S1707)、そのPTE内の各ビットの状態(“オン”或いは“オフ”)を取得する(S1708)。コピー方式が採用されている場合には、データ取得部10411が、コミュニケータ空間1031内のデータ部1033における、“オン”のビットに対応したページのコピー先領域に、そのページ内のコード群をコピーする(S1709)。レスポンス生成部10414が、差分検索の結果を表す戻り値を仮想レジスタ5022に設定し(S1710)、差分検出要求に対応するヘッダテーブル501内の取得時刻を現在の時刻に更新する(S1711)。ハイパバイザ104が、特殊LPAR102に処理を移行する(S1712)。
【0102】
エンジン1021は、戻り値が表す差分検索の結果が、差分有りの場合、差分が検出されたページアドレス(つまりダーティページのアドレス)を要求メモリアドレスとして取得要求を発行することで、ダーティページからのみコード群を取得してスキャンを実行する(S1713)。具体的には、例えば、エンジン1021は、その読み出されたコード群(以下、コード群1)に対応した取得時刻(以下、取得時刻1)よりも前の取得時刻(以下、取得時刻2)を、MMIOアクセスを行うことによりヘッダ部1032から特定する。エンジン1021は、特定された取得時刻2に対応するコード群(以下、コード群2)を、MMIOアクセスによりデータ部1033から読み出し、コード群1とコード群2との比較に基づくセキュリティスキャンを行う(具体的には、例えば、コード群1のうち、コード群2との差分についてのみスキャンを行う)。これにより、例えば、取得時刻2と取得時刻1との間に、不正なコード(例えば、悪意を持って改竄されたシステムの実行コード)がメモリ203(又は203B)に埋め込まれた可能性を検査することができる。これにより、例えば、書き換えられるはずのない領域などを定点観測することで、セキュリティリスクの検出を期待することができる。
【0103】
なお、本実施形態では、取得要求が発行されても、その取得要求に対応したシーケンス番号は更新されない(前述の第一実施形態では、取得要求が発行される都度にシーケンス番号が更新される)。
【0104】
以上が、ダーティページ検出の流れである。なお、本実施形態では、以下の処理が行われても良い。すなわち、アシスト1041が、要求メモリアドレスを含んだ取得要求を受けたときに、PTEを検索し、ダーティページを検出した場合に、そのダーティページのアドレスに対応したマップ先メモリアドレスをヘッダ部1032に格納し、ダーティページを検出しなかった場合に、スキャン不要を表す戻り値を設定しても良い。つまり、エンジン1021は、差分検出要求の発行が不要で、第一の実施形態と同様に取得要求を発行すれば、アシスト1041が、ダーティページを検出した場合のみ、コード群を取得し、ダーティページが無い場合には、スキャン不要をエンジン1021に返す。
【0105】
以上、本発明の幾つかの実施形態を説明したが、本発明は、これらの実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【図面の簡単な説明】
【0106】
【図1】本発明の第一実施形態の概要の説明図である。
【図2】本発明の第一実施形態に係る計算機システムでのハードウェア仮想化方式の一例を示す。
【図3】一般LPAR、特殊LPAR及びハイパバイザの構成の概念図である。
【図4】特殊LPARに割り当てられた仮想メモリのマップの一例を示す。
【図5】マッピング変換部が保持する変換テーブルの一例を示す。
【図6】セキュリティエンジンの機能ブロック図を示す。
【図7】エンジンからアシストへの要求発行方式の説明図である。
【図8】要求の発行から戻り値の受領までの流れを示す。
【図9】マッピング方式の概要の説明図である。
【図10】マッピング方式で行われるコード群取得の詳細な流れの一部分を示す。
【図11】マッピング方式で行われるコード群取得の詳細な流れの残りの部分を示す。
【図12】コピー方式の概要の説明図である。
【図13】コピー方式で行われるコード群取得の詳細な流れの一部分を示す。
【図14】コピー方式で行われるコード群取得の詳細な流れの残りの部分を示す。
【図15】認証処理の概要の説明図である。
【図16】特殊LPARの生成から認証完了(認証済み)となるまでの詳細な流れを示す。
【図17】本発明の第二の実施形態におけるダーティページ検出機構の概要の説明図である。
【図18】本発明の第二実施形態でのダーティページ検出の流れを示す。
【符号の説明】
【0107】
101…クライアントLPAR 102…特殊LPAR 103…セキュリティコミュニケータ 104…ハイパバイザ 1021…セキュリティエンジン 1031…MMIO空間(Memory Mapped I/O) 1041…セキュリティアシスト

【特許請求の範囲】
【請求項1】
クライアントから利用される第一種の仮想計算機を管理するハイパバイザと、
前記第一種の仮想計算機に割り当てられている記憶空間から、コード群を読み出し、読み出された前記コード群をスキャンする、前記第一種の仮想計算機の外部に設けられたスキャナと
を備える計算機システム。
【請求項2】
前記記憶空間は、前記第一種の仮想計算機で稼働する第一のOS(オペレーティングシステム)が管理し前記第一種の仮想計算機に割り当てられている第一のメモリ空間であり、
前記ハイババイザが、前記第一種の仮想計算機の他に、前記クライアントに対して隠蔽されている第二種の仮想計算機を制御し、
前記第一種の仮想計算機が、前記第一のメモリ空間を構成する各ページを前記第一のOSが管理するための第一のページテーブルを管理し、
前記第二種の仮想計算機が、前記第二種の仮想計算機に割り当てられている第二のメモリ空間を構成する各ページを管理するための第二のページテーブルを管理し、
前記ハイババイザが、前記第一のページテーブルと同期した第一のシャドウページテーブルと、前記第二のページテーブルと同期した第二のシャドウページテーブルとを管理し、前記第二のシャドウページテーブルを基に特定された、前記第二のメモリ空間内のMMIO(Memory Mapped I/O)空間に、仮想デバイスを割り当て、
前記仮想デバイスに、架空の空間であるイニシエータ空間が用意されており、
前記スキャナが、エンジンとアシストで構成されており、
前記第二種の仮想計算機が、前記エンジンを実行し、
前記ハイパバイザが、前記アシストと、実体としての空間であり前記イニシエータ空間と対をなすターゲット空間が用意された仮想デバイスエミュレータとを実行し、
前記エンジンが、
前記第一のメモリ空間内の読出し元アドレスを含んだ取得要求を仮想レジスタに設定し、前記ハイパバイザを意識しない命令である一般命令と異なり前記ハイパバイザを意識した特殊な命令であるハイパバイザ呼出し命令を発行する命令発行部と、
前記ハイパバイザ呼出し命令に対して前記ハイパバイザから前記仮想レジスタに設定された戻り値を解析する戻り値解析部と、
前記戻り値を基に特定されたターゲットアドレスを指定したMMIOアクセスを行うMMIOアクセス部と、
前記MMIOアクセスの結果として受け取ったコード群をスキャンするスキャン部と
を有し、
前記アシストが、
前記仮想レジスタに設定されている前記取得要求を受理する要求受理部と、
前記取得要求の受理に応答して、前記第二のシャドウページテーブルを基に、前記ターゲット空間のうちの使用可能なメモリアドレスを検索する検索部と、
前記読出し元アドレスが表す前記第一のメモリ空間から、前記第一のページテーブルの改変を起こさない方式であるリードオンリー方式でコード群を読み出すデータ取得部と、
前記ハイパバイザによって前記MMIOアクセスが捕捉された場合に、前記仮想デバイスエミュレータを呼び出し、前記MMIOアクセスの結果に前記読み出されたコード群を含めるレスポンス生成部と
を有し、
前記MMIOアクセスとは、前記イニシエータ空間に対するアクセスであり、
前記ターゲットアドレスは、前記検索部により見つけられたメモリアドレスである、
請求項1記載の計算機システム。
【請求項3】
前記ハイパバイザが、前記第二種の仮想計算機を作成し、前記作成した第二種の仮想計算機に割り当てられた前記第二のメモリ空間内の前記MMIO空間に、前記仮想デバイスを割り当て、
前記アシストが、前記ターゲット空間に、前記ハイパバイザの公開鍵を格納し、
前記エンジンが、
前記公開鍵が格納されている領域に対応したメモリアドレスを指定した前記MMIOアクセスにより、前記ターゲット空間から前記公開鍵を取得し、所定の認証情報を前記公開鍵で暗号化することにより暗号文を生成し、前記生成した暗号文を前記MMIOアクセスにより前記ターゲット空間に書き込む暗号化部、を有し、
前記命令発行部が、前記暗号文が格納されている領域に対応したメモリアドレスである暗号文アドレスを含んだ認証要求を前記仮想レジスタに設定して、前記ハイパバイザ呼出し命令を発行し、
前記要求受理部が、前記仮想レジスタに設定されている前記認証要求を受理し、
前記アシストが、
前記公開鍵とペアになっている秘密鍵と、
前記認証要求の受理に応答して、前記暗号文アドレスから特定される、前記ターゲット空間内の領域、に格納されている前記暗号文を、前記秘密鍵で復号化し、前記復号化により得られた認証情報が正当か否かの第一の判断を行う認証部と
を有し、
前記ハイパバイザ呼出し命令を前記ハイパバイザが受けた場合、前記ハイパバイザ呼出し命令の発行元が、前記認証部で前記第一の判断の結果が否定的となった仮想計算機であれば、前記ハイパバイザ呼出し命令の実行が不可である、
請求項2記載の計算機システム。
【請求項4】
前記ハイパバイザが、前記作成した第二種の仮想計算機のIDを前記認証部に設定し、
前記認証部は、前記認証要求の発行元の第二種の仮想計算機のIDが前記設定されたIDに適合するか否かの第二の判断を行い、前記第二の判断の結果が肯定的の場合に、前記第一の判断を行い、前記第二の判断の結果が否定的の場合に、前記第一の判断を非実行とする、
請求項3記載の計算機システム。
【請求項5】
前記アシストが、マッピング変換部を有し、
前記マッピング変換部は、前記第一のメモリ空間のメモリアドレスと前記ターゲットイニシエータ空間内のメモリアドレスとの対応関係を表す変換テーブルを保持し、前記読出し元アドレスに対して、前記見つけられたメモリアドレスである前記ターゲットアドレスがマッピングされるよう前記変換テーブルを更新し、
前記データ取得部が、前記ハイパバイザによって前記MMIOアクセスが捕捉された場合に、前記更新後の変換テーブルを基に特定された、前記ターゲットアドレスに対応したメモリアドレスが表す、前記第一のメモリ空間内の領域から、前記リードオンリー方式でコード群を読み出す、
請求項2乃至4のうちのいずれかに記載の計算機システム。
【請求項6】
前記データ取得部が、前記読出し元アドレスが表す前記第一のメモリ空間から前記リードオンリー方式で読み出したコード群を、前記見つけられたメモリアドレスが表す、前記ターゲット空間内のコピー先領域にコピーし、
前記MMIOアクセスの結果に含まれる、前記読み出されたコード群は、前記コピー先領域から取得されるコード群である、
請求項2乃至4のうちのいずれかに記載の計算機システム。
【請求項7】
前記ターゲット空間は、ヘッダ部とデータ部とを有し、
前記ヘッダ部に、前記読出し元アドレス及び前記ターゲットアドレスを含んだヘッダ情報が格納され、
前記ターゲットアドレスは、前記データ部のメモリアドレスである、
請求項2乃至6のうちのいずれか1項に記載の計算機システム。
【請求項8】
前記第一のページテーブルでは、前記第一のメモリ空間を構成する複数のページのうちのどのページが更新されたコード群を含んだダーティページであるかが管理されており、
前記データ取得部は、前記読出し元アドレスが表すページのうちダーティページからのみ前記リードオンリー方式でコード群を読み出す、
請求項2乃至7のうちのいずれか1項に記載の計算機システム。
【請求項9】
前記ハイパバイザが、前記第一種の仮想計算機の他に、前記クライアントに対して隠蔽されている第二種の仮想計算機を管理し、
前記スキャナが、前記記憶空間からコード群を読み出すアシストと、前記読み出されたコード群をスキャンするエンジンとで構成されており、
前記エンジンが、前記第二種の仮想計算機で実行され、
前記アシストが、前記ハイパバイザで実行される、
請求項1記載の計算機システム。
【請求項10】
前記第二種の仮想計算機に割り当てられた第二のメモリ空間内のMMIO(Memory Mapped I/O)空間に、仮想デバイスが割り当てられており、
前記エンジンが、前記仮想デバイスへのMMIOアクセスを行うことで、前記第一のメモリ空間から読み出されたコード群を取得する、
請求項9記載の計算機システム。
【請求項11】
前記エンジンが、以下の(11E−1)乃至(11E−4)を実行し、
(11E−1)前記第一のメモリ空間内の読出し元アドレスを含んだ取得要求を仮想レジスタに設定し、前記ハイパバイザを意識しない命令である一般命令と異なり前記ハイパバイザを意識した特殊な命令であるハイパバイザ呼出し命令を発行する、
(11E−2)前記ハイパバイザ呼出し命令に対して前記ハイパバイザから前記仮想レジスタに設定された戻り値を解析する、
(11E−3)前記戻り値を基に特定されたターゲットアドレスを指定したMMIOアクセスを行う、
(11E−4)前記MMIOアクセスの結果として受け取ったコード群をスキャンする、
前記アシストが、以下の(11A−1)乃至(11A−4)を実行し、
(11A−1)前記仮想レジスタに設定されている前記取得要求に応答して、前記MMIO空間に対応したメモリアドレスのうちの使用可能なメモリアドレスを検索する、
(11A−2)前記読出し元アドレスが表す第一のメモリ空間からコード群を読み出す、
(11A−3)前記ハイパバイザによって前記MMIOアクセスが捕捉された場合に、前記MMIOアクセスの結果に前記読み出されたコード群を含める、
前記MMIOアクセスとは、前記MMIO空間に対するアクセスであり、
前記ターゲットアドレスは、前記検索部により見つけられたメモリアドレスである、
請求項10記載の計算機システム。
【請求項12】
前記MMIO空間は、ヘッダ部とデータ部とを有し、
前記ヘッダ部に、前記読出し元アドレス及び前記ターゲットアドレスを含んだヘッダ情報が格納され、
前記ターゲットアドレスは、前記データ部のメモリアドレスである、
請求項11記載の計算機システム。
【請求項13】
前記ヘッダ情報には、前記第一のメモリ空間からコード群が読み出された時刻を表す情報が含まれる、
請求項12記載の計算機システム。
【請求項14】
前記エンジンが、所定の認証情報を前記ハイパバイザの公開鍵で暗号化することにより暗号文を生成し、
前記アシストが、前記公開鍵とペアになっている秘密鍵を保持しており、前記暗号文を前記秘密鍵で復号化し、前記復号化により得られた認証情報が正当か否かの第一の判断を行い、
ハイパバイザ呼出し命令を前記ハイパバイザが受けた場合、前記ハイパバイザ呼出し命令の発行元が、前記認証部で前記第一の判断の結果が否定的となった仮想計算機であれば、前記ハイパバイザ呼出し命令の実行が不可である、
請求項9乃至13のうちのいずれかに記載の計算機システム。
【請求項15】
前記ハイパバイザが、前記第二種の仮想計算機を作成し、前記作成した第二種の仮想計算機のIDを前記アシストに設定し、
前記アシストは、前記要求の発行元の第二種の仮想計算機のIDが前記設定されたIDに適合するか否かの第二の判断を行い、前記第二の判断の結果が肯定的の場合に、前記第一の判断を行い、前記第二の判断の結果が否定的の場合に、前記第一の判断を非実行とする、
請求項14記載の計算機システム。
【請求項16】
前記第一種の仮想計算機では、前記第一のメモリ空間を構成する複数のページのうちのどのページが更新されたコード群を含んだダーティページであるかが管理されており、
前記アシストは、前記読出し元アドレスが表すページのうちダーティページからのみコード群を読み出す、
請求項9乃至15のうちのいずれかに記載の計算機システム。
【請求項17】
クライアントに利用される第一種の仮想計算機の他に、前記クライアントに対して隠蔽される第二種の仮想計算機を管理し、
第一種の仮想計算機に割り当てられている記憶空間から、前記第二種の仮想計算機においてエンジンによってスキャンされるコード群を読み出す、前記エンジンについてのアシストを有する、
ハイパバイザ。
【請求項18】
前記第二種の仮想計算機を生成し、
前記生成した第二種の仮想計算機に割り当てられた第二のメモリ空間内のMMIO(Memory Mapped I/O)空間に、仮想デバイスを割り当て、
前記仮想デバイスのエミュレータを有し、
前記エンジンからの前記仮想デバイスへのMMIOアクセスを捕捉し、前記アシストにより前記仮想デバイスエミュレータが呼び出され、前記MMIOアクセスの結果に前記読み出されたコード群を含める、
請求項17記載のハイパバイザ。
【請求項19】
公開鍵を前記MMIO空間に格納し、
前記公開鍵とペアになっている秘密鍵を有し、
前記アシストが、前記エンジンにより前記公開鍵で所定の認証情報が暗号化された暗号文を前記MMIO空間から取得し、前記暗号文を前記秘密鍵で復号化し、前記復号化により得られた認証情報が正当か否かの第一の判断を行い、
ハイパバイザ呼出し命令を前記第二種の仮想計算機からハイパバイザが受けた場合、前記ハイパバイザ呼出し命令の発行元が、前記アシストで前記第一の判断の結果が否定的となった仮想計算機であれば、前記ハイパバイザ呼出し命令の実行を不可とする、
請求項18記載のハイパバイザ。
【請求項20】
前記記憶空間は、第一のメモリ空間であり、
前記第一種の仮想計算機では、前記第一のメモリ空間を構成する複数のページのうちのどのページが更新されたコード群を含んだダーティページであるかが管理されており、
前記アシストは、ダーティページからのみコード群を読み出す、
請求項17乃至19のうちのいずれかに記載のハイパバイザ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2010−55318(P2010−55318A)
【公開日】平成22年3月11日(2010.3.11)
【国際特許分類】
【出願番号】特願2008−218639(P2008−218639)
【出願日】平成20年8月27日(2008.8.27)
【出願人】(000005108)株式会社日立製作所 (27,607)
【出願人】(000233295)日立情報通信エンジニアリング株式会社 (195)
【出願人】(000233491)日立電子サービス株式会社 (394)
【Fターム(参考)】