(58)【調査した分野】(Int.Cl.,DB名)
前記仮想計算機生成部は、前記第1仮想計算機に基づいて、新たな前記第2仮想計算機を生成する場合において、前記第2仮想計算機に対する記憶領域の割り当てを、前記第1仮想計算機に割り当てられている記憶領域に基づくフォーク方式で行う
ことを特徴とする請求項1記載の仮想計算機システム。
前記ハイパバイザは、前記プロセッサの実行対象となっている前記第1仮想計算機において前記所定のダミープログラムが実行を開始された場合において、前記第2仮想計算機が生成されているときに、前記プロセッサの実行対象となる仮想計算機を、前記第1仮想計算機から前記第2仮想計算機へ変更するための仮想計算機スケジュール部とを有する
ことを特徴とする請求項2記載の仮想計算機システム。
前記仮想計算機スケジュール部は、前記プロセッサの実行対象となっている前記第2仮想計算機において前記所定のアプリケーションプログラムの実行が終了した場合に、前記プロセッサの実行対象となる仮想計算機を、前記第2仮想計算機から前記第1仮想計算機へ変更する
ことを特徴とする請求項3記載の仮想計算機システム。
前記実行制御部は、前記プロセッサに、タイムスライス値を用いて行うマルチタスク実行制御方法で、プログラムの実行制御を実行させるためのマルチタスク実行制御部を有し、
前記マルチタスク実行制御部は、前記プロセッサによって実行される前記実行制御部が、前記プロセッサに、前記所定のアプリケーションプログラムの代わりに、前記所定のダミープログラムを実行させる場合に、前記所定のアプリケーションプログラムに割り当てるタイムスライス値と同じ値のタイムライス値を、前記所定のダミープログラムに割り当て、
前記仮想計算機スケジュール部は、前記第1仮想計算機において、前記所定のダミープログラムが前記プロセッサの実行対象となった時点から、前記所定のダミープログラムに割り当てられているタイムスライス値で示される時間が経過した場合において、前記第2仮想計算機が前記プロセッサの実行対象仮想計算機となっているとき、前記プロセッサの実行対象仮想計算機を、前記第2仮想計算機から前記第1仮想計算機へ変更する
ことを特徴とする請求項5記載の仮想計算機システム。
前記プロセッサによって実行される前記仮想計算機生成部が、前記第2仮想計算機を生成した場合に、前記第2仮想計算機の前記実行制御部に、子仮想計算機である旨の通知を行うための子仮想計算機通知部を有し、
前記実行制御部は、前記第2仮想計算機において、前記子仮想計算機通知部から子仮想計算機である旨を通知されることで、前記プロセッサに、前記第2仮想計算機において、前記所定のアプリケーションプログラムを起動させるための実行開始部を有する
ことを特徴とする、請求項6記載の仮想計算機システム。
前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のアプリケーションプログラムが新たに実行されようとすることを検知して、前記所定のアプリケーションプログラムが新たに実行されようとする旨を、前記実行検知部へ通知する通知部を有し、
前記実行検知部は、前記プロセッサによって実行される前記通知部から、前記所定のアプリケーションプログラムが新たに実行されようとする旨を通知されることで、前記所定のアプリケーションプログラムが新たに実行されようとすることの検知を行う
ことを特徴とする請求項7記載の仮想計算機システム。
前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された場合に、前記仮想計算機スケジュール部に、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された旨を通知するためのダミープログラム実行開始通知部を有し、
前記仮想計算機スケジュール部は、前記プロセッサによって実行される、前記第1仮想計算機の前記ダミープログラム実行開始通知部から、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された旨を通知されることで、前記第1仮想計算機において、前記所定のダミープログラムが実行を開始されたことを検知する
ことを特徴とする請求項7記載の仮想計算機システム。
前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した場合に、前記仮想計算機スケジュール部に、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した旨を通知するための実行終了通知部を有し、
前記仮想計算機スケジュール部は、前記プロセッサによって実行される、前記第2仮想計算機の前記実行終了通知部から、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した旨が通知されることで、前記第2仮想計算機において、前記所定のアプリケーションプログラムの実行が終了したことを検知する
ことを特徴とする請求項7記載の仮想計算機システム。
プロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるためのハイパバイザとを備える仮想計算機システムを制御する仮想計算機制御方法であって、
前記ハイパバイザが、仮想計算機において、所定のアプリケーションプログラムが新たに実行されようとすることを検知する実行検知ステップと、
前記ハイパバイザが、前記プロセッサによって実行される前記実行検知ステップにおいて、第1仮想計算機において、前記所定のアプリケーションプログラムが新たに実行されようとすることを検知した場合に、当該第1仮想計算機に基づいて、前記所定のアプリケーションプログラムを実行するための新たな第2仮想計算機を生成する仮想計算機生成ステップと、
前記プロセッサによって実行制御される複数の仮想計算機のそれぞれが、前記第2仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムを含む特定プログラム群に限って実行させ、前記第1仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムの代わりに、所定のダミープログラムを実行させる実行制御ステップとを含む
ことを特徴とする仮想計算機制御方法。
プロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるためのハイパバイザとを備える仮想計算機システムを制御する仮想計算機制御プログラムであって、
前記ハイパバイザが、仮想計算機において、所定のアプリケーションプログラムが新たに実行されようとすることを検知する実行検知ステップと、
前記ハイパバイザが、前記プロセッサによって実行される前記実行検知ステップにおいて、第1仮想計算機において、前記所定のアプリケーションプログラムが新たに実行されようとすることを検知した場合に、当該第1仮想計算機に基づいて、前記所定のアプリケーションプログラムを実行するための新たな第2仮想計算機を生成する仮想計算機生成ステップと、
前記プロセッサによって実行制御される複数の仮想計算機のそれぞれが、前記第2仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムを含む特定プログラム群に限って実行させ、前記第1仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムの代わりに、所定のダミープログラムを実行させる実行制御ステップとを含む
ことを特徴とする仮想計算機制御プログラム。
【発明を実施するための形態】
【0015】
<実施の形態1>
<概要>
以下、本発明に係る仮想計算機システムの一実施形態として、アプリケーションプログラムを実行するユーザモードと、ユーザモードより上位のスーパバイザモードとの2つのプログラム実行モードを有するプロセッサを備え、プロセッサのスーパバイザモードで実行される複数のオペレーティングシステムを、プロセッサのスーパバイザモードで実行されるハイパバイザが時分割実行制御する仮想計算機システムについて説明する。
【0016】
この仮想計算機システムは、実行中の仮想計算機において、予め定められた、マルウエアによる攻撃からの保護対象となる特定のアプリケーションプログラムが実行されようとする場合に、その実行中の仮想計算機を親仮想計算機として、その特定のアプリケーションプログラムを実行させるための子仮想計算機をフォーク方式(後述)で生成する。そして、生成された子仮想計算機を、その特定のアプリケーションプログラム以外のアプリケーションプログラムが実行されないように設定する。一方、親仮想計算機は、その特定のアプリケーションプログラムの代わりに、ダミーアプリケーションプログラムを実行する。これによって、この仮想計算機システムの実行対象となるアプリケーションプログラムの中に、上記特定のアプリケーションプログラムを攻撃するマルウエアが含まれていたとしても、その特定のアプリケーションプログラムは、マルウエアから攻撃されることがない。
【0017】
以下、本実施の形態1に係る仮想計算機システムの構成について図面を参照しながら説明する。
【0018】
<ハードウエア構成>
図1は、仮想計算機システム100の主要なハードウエア構成を示すブロック図である。
【0019】
同図に示す通り、仮想計算機システム100は、ハードウエアとしてはコンピュータ装置であり、集積回路110と入力装置131と出力装置132とハードディスク装置133とから構成される。
【0020】
集積回路110は、プロセッサ101とROM(Read Only Memory)102とRAM(Random Access Memory)103とタイマ104と内部バス120と第1インタフェース121と第2インタフェース122と第3インタフェース123とを集積した半導体集積回路であって、入力装置131と出力装置132とハードディスク装置133とに接続する。
【0021】
プロセッサ101は、内部バス120に接続され、ROM102又はRAM103に記憶されているプログラムを実行することで、ROM102、RAM103、タイマ104、入力装置131、出力装置132、ハードディスク装置133を制御する機能を有する。
【0022】
図2は、プロセッサ101の備える動作モードを示す動作モード図である。
【0023】
同図に示されるように、プロセッサ101は、アプリケーションプログラム(図中のタスクA231、タスクK232、タスクL233等)を実行するユーザモード230と、オペレーティングシステム(図中の第1OS(Operating System)221、第2OS222、第NOS223等)とハイパバイザ(図中のハイパバイザ211)とを実行する特権モードであるスーパバイザモード220とを有する。
【0024】
ユーザモード230で実行されるアプリケーションプログラムのそれぞれは、スーパバイザモード220で実行されるオペレーティングシステムによって時分割実行制御され、スーパバイザモード220で実行されるオペレーティングシステムのそれぞれは、同じくスーパバイザモード220で実行されるハイパバイザによって時分割実行制御される。
【0025】
再び
図1に戻って、仮想計算機システム100の構成についての説明を続ける。
【0026】
ROM102とRAM103とは、それぞれ、内部バス120に接続され、プロセッサ101の動作を規定するプログラムと、プロセッサ101が利用するデータとを記憶する。
【0027】
タイマ104は、内部バス120に接続され、プロセッサ101によって制御される。
【0028】
内部バス120は、プロセッサ101とROM102とRAM103とタイマ104と第1インタフェース121と第2インタフェース122と第3インタフェース123に接続され、これら接続される回路間の信号を伝達する機能を有する。
【0029】
第1インタフェース121と第2インタフェース122と第3インタフェース123とは、それぞれ内部バス120に接続され、それぞれ内部バス120と入力装置131との間の信号のやり取りを仲介する機能、内部バス120と出力装置132との間の信号のやり取りを仲介する機能、内部バス120とハードディスク装置133との間の信号のやり取りを仲介する機能を有する。
【0030】
入力装置131は、キーボード、マウス、カメラ、センサー等を含み、第1インタフェース121に接続され、プロセッサ101によって制御され、キーボード、マウス、カメラ、センサー等を通じてなされるユーザ操作等に応じたデータを生成し、ユーザ操作等が発生したこと示す通知や、生成したデータをプロセッサ101に送る機能を有する。
【0031】
出力装置132は、ディスプレイ、スピーカー等を含み、第2インタフェース122に接続され、プロセッサ101によって制御され、ディスプレイ、スピーカー等を用いて文字列、画像、音声等を表示、出力する機能を有する。
【0032】
ハードディスク装置133は、プロセッサ101が利用するデータを記憶するハードディスクを内蔵し、第3インタフェース123に接続され、プロセッサ101によって制御され、内蔵するハードディスクにデータを書き込む機能と、内蔵するハードディスクからデータを読み出す機能とを有する。
【0033】
<プログラムモジュール構成>
図3は、ある時刻t0において、プロセッサ101上で実行対象となるプログラムモジュール(以下、単に「モジュール」と呼ぶ。)を示すブロック図である。
【0034】
同図において、モジュール群300は、プロセッサ101において実行対象となっているモジュールの集合であって、モジュール群300に含まれるモジュールのそれぞれは、ROM102又はRAM103の記憶領域に格納されている。
【0035】
タスクA311〜タスクK312、ダミータスク313、タスクL314〜タスクP315、保護タスク316等のそれぞれは、プロセッサ101のユーザモードで実行されるタスクである。
【0036】
第1OS321と第2OS322とは、それぞれ、プロセッサ101のスーパバイザモードにおいて実行されるマルチタスク対応オペレーティングシステムである。
【0037】
ハイパバイザ351は、プロセッサ101のスーパバイザモードで実行されるハイパバイザである。
【0038】
タスクは、予め用意されたオペレーティングステム呼び出しルーチンを呼び出すことで、オペレーティングシステムに対して、予め定められた処理を依頼することができる。また、オペレーティングシステムは、予め用意されたハイパバイザ呼び出しルーチンを呼び出すことで、ハイパバイザに対して、予め定められた処理を依頼することができる。
【0039】
また、仮想計算機システムの実行に際して発生した例外や、入力装置等から発生した割込みは、ハイパバイザで処理し、必要に応じて仮想計算機上のオペレーティングシステムに対して通知される。
【0040】
保護タスク316は、予め定められた保護対象アプリケーションプログラムが、オペレーティングシステム(ここでは第2OS322)によって起動されることで生成されたタスクである。この保護対象アプリケーションプログラムは、マルウエアによる攻撃からの保護対象となるアプリケーションプログラムであって、後述の保護タスク対応表346によって、予め保護対象となることが設定されているものである。
【0041】
保護対象アプリケーションプログラムの一例としては、例えば、個人情報を取り扱うアプリケーションプログラム、金銭情報を取り扱うアプリケーションプログラム、著作権保護の対象となる映像データを取り扱うアプリケーションプログラム等がある。
【0042】
ダミータスク313は、予め定められたダミープログラムが、オペレーティングシステム(ここでは第1OS321)によって起動されることで生成されたタスクである。このダミープログラムは、例えば、NOP(No OPeration)を繰り返す無限ループからなるプログラムであって、新たなタスクを発生させることのないプログラムである。
【0043】
第1OS321は、複数のタスク(ここではタスクA311〜タスクK312とダミータスク313と)を、タイムスライス値を用いて時分割実行制御する。そして、ハイパバイザ351は、第1OS321とタスクA311〜タスクK312とダミータスク313とからなるシステムを仮想計算機301として制御する。
【0044】
第2OS322は、複数のタスク(ここではタスクL314〜タスクP315と保護タスク316と)を、タイムスライス値を用いて時分割実行制御する。そして、ハイパバイザ351は、第2OS322とタスクL314〜タスクP315と保護タスク316とからなるシステムを子仮想計算機302として制御する。
【0045】
ここで、子仮想計算機302は、仮想計算機301を親仮想計算機として、フォーク方式で生成された仮想計算機である。フォーク方式での仮想計算機の生成については後述する。
【0046】
第1OS321は、一般のマルチタスクオペレーティングシステムとしての機能を実現するモジュール群(図示せず)に加えて、内部に、起動要求検知モジュール331と保護タスク生成モジュール332とタスクスケジュール変更モジュール333と保護タスク終了通知モジュール334とダミータスク実行通知モジュール335との5つのモジュールを含み、起動要求検知モジュール331は、内部に、予め定められた保護タスク対応表336を記憶している。
【0047】
図4は、起動要求検知モジュール331及び起動要求検知モジュール341によって記憶される保護タスク対応表400(
図3中では、保護タスク対応表336及び保護タスク対応表346)のデータ構造図である。
【0048】
同図に示されるように、保護タスク対応表400は、アプリケーションプログラムID410と保護対象フラグ420とが対応付けられて構成されている。そして、この保護タスク対応表400は、システム設計時に予め定められたものとなっている。
【0049】
アプリケーションプログラムIDは、アプリケーションプログラムを識別するためのIDである。
【0050】
保護対象フラグ420は、対応するアプリケーションプログラムIDによって識別されるアプリケーションプログラムが、マルウエアからの攻撃に対して保護対象となる保護対象アプリケーションプログラムであるか否かを示す1ビットのフラグである。
【0051】
ここでは、保護対象フラグ420は、論理値“1”の場合に、対応するアプリケーションプログラムIDによって識別されるアプリケーションプログラムが、マルウエアからの攻撃に対する保護対象となる保護対象アプリケーションプログラムであることを示し、論理値“0”の場合に、対応するアプリケーションプログラムIDによって識別されるアプリケーションプログラムが、マルウエアからの攻撃に対する保護対象とならないアプリケーションプログラムであることを示す。
【0052】
この保護対象フラグ420によると、例えば、アプリケーションプログラムID410が“0002”で識別されるアプリケーションプログラムは、保護対象アプリケーションプログラムであることがわかる。
【0053】
再び
図3に戻って、プロセッサ101上で実行対象となるモジュール群の説明を続ける。
【0054】
起動要求検知モジュール331は、内部に、予め定められた保護タスク対応表336を記憶し、以下の2つの機能を有する。
【0055】
機能1:自オペレーティングシステム(ここでは第1OS321)で実行制御されているタスクから、新たなアプリケーションプログラムの起動が要求された場合に、記憶する保護タスク対応表336を参照して、起動が要求されたアプリケーションプログラムが、保護対象アプリケーションプログラムであるか否かを判定する機能。
【0056】
機能2:起動が要求されたアプリケーションプログラムが、保護対象アプリケーションプログラムであった場合に、自オペレーティングシステムに含まれる保護タスク生成モジュール(ここでは保護タスク生成モジュール332)と、ハイパバイザ351に含まれる仮想計算機生成モジュール361(後述)とに、保護対象アプリケーションプログラムの起動が要求された旨の通知を行う機能。
【0057】
保護タスク生成モジュール332は、以下の3つの機能を有する。
【0058】
機能1:ハイパバイザ351に含まれる子仮想計算機通知モジュール362(後述)から、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)が子仮想計算機である旨の通知を受けた場合に、保護対象アプリケーションプログラムを起動して、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)内に、保護タスクを生成する機能。
【0059】
機能2:ハイパバイザ351に含まれる子仮想計算機通知モジュール362(後述)から、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)が子仮想計算機である旨の通知を受けていなかった場合において、自オペレーティングシステムに含まれる起動要求検知モジュール(ここでは起動要求検知モジュール331)から保護対象アプリケーションプログラムの起動が要求された旨の通知が行われたときに、保護対象アプリケーションプログラムの代わりにダミープログラムを起動して、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)内に、ダミータスクを生成する機能。
【0060】
機能3:ダミータスクを生成する場合に、オペレーティングシステムがタスク切替制御に用いるタイムスライス値として、対応する保護タスクに割り当てるタイムスライス値を、ダミータスクに割り当てる機能。
【0061】
タスクスケジュール変更モジュール333は、ハイパバイザ351に含まれる子仮想計算機通知モジュール362(後述)から、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)が子仮想計算機である旨の通知を受けていた場合において、自オペレーティングシステムに含まれる保護タスク生成モジュール(ここでは保護タスク生成モジュール332)によって保護タスクが生成されたとき、自オペレーティングシステム(ここでは第1OS321)によって実行されるタスクを、保護タスクに限定する機能を有する。
【0062】
自オペレーティングシステムによって実行されるタスクを保護タスクに限定するには、例えば、保護タスクの優先度を、他のタスクの優先度よりも高くする、例えば、他のタスクの優先度を、保護タスクの優先度よりも低くする、また、例えば、自オペレーティングシステムが、実行するタスクを、所定のタスクに限定する機能有する場合には、保護タスクをその所定のタスクと設定する等で実現することができる。
【0063】
保護タスク終了通知モジュール334は、自オペレーティングシステム(ここでは第1OS321)で実行制御されている保護タスクの実行が終了したことを検知して、ハイパバイザ351に含まれる仮想計算機スケジューリングモジュール363(後述)に、保護タスクの実行が終了した旨の通知を行う機能を有する。
【0064】
ダミータスク実行通知モジュール335は、以下の2つの機能を有する。
【0065】
機能1:自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)でダミータスクの実行が開始されたことを検知して、ハイパバイザ351に含まれる仮想計算機スケジューリングモジュール363(後述)に、ダミータスクの実行が開始された旨の通知を行う機能。
【0066】
機能2:自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機301)でダミータスクの実行が中断されたことを検知して、ハイパバイザ351に含まれる仮想計算機スケジューリングモジュール363(後述)に、ダミータスクの実行が中断された旨の通知を行う機能。
【0067】
第2OS322は、一般のマルチタスクオペレーティングシステムとしての機能を実現するモジュール群(図示せず)に加えて、内部に、起動要求検知モジュール341と保護タスク生成モジュール342とタスクスケジュール変更モジュール343と保護タスク終了通知モジュール344とダミータスク実行通知モジュール345との5つのモジュールを含み、起動要求検知モジュール331は、内部に、予め定められた保護タスク対応表346を記憶している。
【0068】
これら、起動要求検知モジュール341と保護タスク生成モジュール342とタスクスケジュール変更モジュール343と保護タスク終了通知モジュール344とダミータスク実行通知モジュール345と保護タスク対応表346とは、それぞれ、第1OS321に含まれる、起動要求検知モジュール331と保護タスク生成モジュール332とタスクスケジュール変更モジュール333と保護タスク終了通知モジュール334とダミータスク実行通知モジュール335と保護タスク対応表336と同様の機能を有するものである。よって、ここでは、これらの説明を省略する。
【0069】
但し、これらのうちの、保護タスク生成モジュール342とタスクスケジュール変更モジュール343とは、子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機が子仮想計算機である旨の通知を受けていたか否かに応じて、それぞれ、保護タスク生成モジュール332とタスクスケジュール変更モジュール333とは、互いに異なる動作を行うこととなる。
【0070】
ハイパバイザ351は、内部に、仮想計算機生成モジュール361と子仮想計算機通知モジュール362と仮想計算機スケジューリングモジュール363と仮想計算機消滅モジュール364とを含む。
【0071】
仮想計算機生成モジュール361は、仮想計算機(ここでは仮想計算機301)の起動要求検知モジュール331から、保護対象アプリケーションプログラムの起動が要求された旨の通知が行われた場合に、仮想計算機301を基にして、フォーク方式で新たな子仮想計算機(ここでは子仮想計算機302)を生成する機能を有する。
【0072】
ここで、フォーク方式での仮想計算機の生成とは、親となる仮想計算機に割り当てられている記憶領域と、新たに生成する仮想計算機に割り当てる記憶領域とが、1対1に対応するように、親となる仮想計算機に割り当てられている記憶領域を、新たに生成する仮想計算機の記憶領域にマッピングすることによって、新たな仮想計算機を生成することである。なお、新たに仮想計算機が生成された後は、親となる仮想計算機の記憶領域と、新たに生成された仮想計算機の記憶領域とは、コピーオンライト方式で管理されることとなる。
【0073】
子仮想計算機通知モジュール362は、仮想計算機生成モジュール361が、新たな子仮想計算機(ここでは子仮想計算機302)を生成した場合に、子仮想計算機302上で動作する保護タスク生成モジュール342とタスクスケジュール変更モジュール343とに、仮想計算機が子仮想計算機である旨の通知を行う機能を有する。
【0074】
これらのモジュールに、仮想計算機が子仮想計算機である旨の通知を行う方法の一例としては、例えば、子仮想計算機通知モジュール362が、特定のメモリ領域に子仮想計算機である旨の情報を記録して、仮想計算機に対する割込みを発生し、これらのモジュールに、上述の特定の領域に記録されている情報を参照させる方法、例えば、これらのモジュールが、呼び出されて動作する際に、予め定められた関数をコールすることで、自モジュールが属する仮想計算機が子仮想計算機であることを通知される方法等がある。
【0075】
仮想計算機スケジューリングモジュール363は、以下の3つの機能を有する。
【0076】
機能1:親仮想計算機(ここでは仮想計算機301)が実行対象仮想計算機となっている場合において、ダミータスク実行通知モジュール335から、ダミータスク313の実行が開始された旨の通知が行われるときに、実行対象仮想計算機を、仮想計算機301から、その子仮想計算機(ここでは子仮想計算機302)に切り替える機能。
【0077】
機能2:子仮想計算機(ここでは子仮想計算機302)が実行対象仮想計算機となっている場合において、その親仮想計算機(ここでは仮想計算機301)のダミータスク実行通知モジュール335から、ダミータスク313の実行が中断された旨の通知が行われるときに、実行対象仮想計算機を、子仮想計算機302から、その親仮想計算機(ここでは仮想計算機301)に切り替える機能。
【0078】
機能3:子仮想計算機(ここでは子仮想計算機302)が実行対象仮想計算機となっている場合において、実行中の子仮想計算機302の保護タスク終了通知モジュール344から、保護タスク316の実行が終了した旨の通知が行われるときに、実行対象仮想計算機を、子仮想計算機302から、その親仮想計算機(ここでは仮想計算機301)に切り替えて、仮想計算機301におけるオペレーティングシステム(ここでは第1OS321)に、保護タスク316の実行が終了した旨の通知を行う機能。
【0079】
仮想計算機消滅モジュール364は、子仮想計算機(ここでは子仮想計算機302)が実行対象仮想計算機となっている場合において、仮想計算機スケジューリングモジュール363に、保護タスク終了通知モジュール344から、保護タスク316の実行が終了した旨の通知が行われるときに、仮想計算機スケジューリングモジュール363が、実行対象仮想計算機を、子仮想計算機302から、その親仮想計算機(ここでは仮想計算機301)に切り替えると、子仮想計算機302を消滅させる機能を有する。
【0080】
ここで、仮想計算機を消滅させるとは、対象となる仮想計算機を、時分割実行処理対象から除外し、その仮想計算機に割り当てられている記憶領域を解放することをいう。
【0081】
以下、図面を参照しながら、上記構成の仮想計算機システム100の行う動作について説明する。
【0082】
<動作>
ここでは、仮想計算機システム100の行う動作のうち、特徴的な動作である、子仮想計算機生成処理と子仮想計算機消滅処理と保護タスク実行処理とについて説明する。
【0083】
以下、仮想計算機301は、子仮想計算機通知モジュール362から、子仮想計算機である旨の通知を受けていないものとして説明する。
【0084】
<子仮想計算機生成処理>
子仮想計算機生成処理は、仮想計算機システム100が、保護タスクを実行させるための新たな子仮想計算機を生成する処理である。
【0085】
図5は、子仮想計算機生成処理のフローチャートである。
【0086】
子仮想計算機生成処理は、仮想計算機(ここでは仮想計算機301)において実行制御されているタスクから、その仮想計算機に含まれるオペレーティングシステム(ここでは第1OS321)に対して、保護対象アプリケーションプログラムの起動が要求されることによって開始される。
【0087】
実行制御されているタスクからの保護対象アプリケーションプログラムの起動要求は、例えば、仮想計算機システム100を利用するユーザによって、入力装置131(
図1参照)が操作されること等で発生する。
【0088】
子仮想計算機生成処理が開始されると、起動要求検知モジュール331(
図3参照)は、記憶する保護タスク対応表336を参照して、起動要求されたアプリケーションプログラムが、保護対象アプリケーションプログラムであることを検知する(ステップS500)。
【0089】
すると、起動要求検知モジュール331は、保護タスク生成モジュール332と仮想計算機生成モジュール361とに、保護対象アプリケーションプログラムの起動が要求された旨の通知を行う(ステップS510)。
【0090】
仮想計算機生成モジュール361は、起動要求検知モジュール331から、保護対象アプリケーションプログラムの起動が要求された旨の通知が行われると、仮想計算機301を基にして、フォーク方式で新たな子仮想計算機302を生成する。そして、ハイパバイザ351は、生成された子仮想計算機302を、実行制御対象仮想計算機に追加する(ステップS520)。
【0091】
その後、子仮想計算機通知モジュール362は、子仮想計算機302の保護タスク生成モジュール342とタスクスケジュール変更モジュール343とに、自オペレーティングシステムが属する仮想計算機が子仮想計算機である旨の通知を行う(ステップS530)。
【0092】
一方、仮想計算機301の保護タスク生成モジュール332は、子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機が子仮想計算機である旨の通知を受けていないため、起動要求検知モジュール331から、保護対象アプリケーションプログラムの起動が要求された旨の通知が行われると、ダミープログラムを起動して、仮想計算機301内に、ダミータスク313を生成する(ステップS540)。
【0093】
これに対して、子仮想計算機302の保護タスク生成モジュール342は、子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機が子仮想計算機である旨の通知を行われると、保護対象アプリケーションプログラムを起動して、子仮想計算機302内に、保護タスク316を生成する(ステップS550)。そして、タスクスケジュール変更モジュール343は、保護タスク生成モジュール342が、保護タスク316を生成すると、第2OS322によって実行されるタスクを、保護タスク316に限定する(ステップS560)。
【0094】
ステップS560の処理が終了すると、仮想計算機システム100は、その子仮想計算機生成処理を終了する。
【0095】
<子仮想計算機消滅処理>
子仮想計算機消滅処理は、仮想計算機システム100が、保護タスクを実行させるために生成された子仮想計算機を消滅させる処理である。
【0096】
図6は、子仮想計算機消滅処理のフローチャートである。
【0097】
子仮想計算機消滅処理は、子仮想計算機(ここでは子仮想計算機302)において実行されている保護タスク(ここでは保護タスク316)が、その処理を終えて終了したことを保護タスク終了通知モジュール344が検知することによって開始される。
【0098】
子仮想計算機消滅処理が開始されると、保護タスク終了通知モジュール344は、保護タスク316の実行が終了したことを検知して(ステップS600)、仮想計算機スケジューリングモジュール363に、保護タスクの実行が終了した旨の通知を行う(ステップS610)。
【0099】
仮想計算機スケジューリングモジュール363は、保護タスク終了通知モジュール344から保護タスクの実行が終了した旨が通知されると、実行対象仮想計算機を、子仮想計算機302から、仮想計算機301に切り替えて、第1OS321に、保護タスク316の実行が終了した旨の通知を行う。そして、ハイパバイザ351は、子仮想計算機302を、実行制御対象仮想計算機として管理している仮想計算機群の中から削除する(ステップS620)。
【0100】
仮想計算機消滅モジュール364は、仮想計算機スケジューリングモジュール363が、実行対象仮想計算機を、子仮想計算機302から、仮想計算機301に切り替えると、子仮想計算機302に割り当てられている記憶領域を解放することで、子仮想計算機302を消滅させる(ステップS630)。
【0101】
一方、第1OS321は、仮想計算機スケジューリングモジュール363から、保護タスク316の実行が終了した旨が通知されると、実行するタスクを、ダミータスク313から他のタスクへ切り替えて、ダミータスク313を実行制御対象タスクから削除する(ステップS640)。
【0102】
ステップS640の処理が終了すると、仮想計算機システム100は、その子仮想計算機消滅処理を終了する。
【0103】
<保護タスク実行処理>
保護タスク実行処理は、仮想計算機システム100が、保護タスクを実行する処理である。
【0104】
図7は、保護タスク実行処理のフローチャートである。
【0105】
保護タスク実行処理は、親仮想計算機(ここでは仮想計算機301)において、ダミータスク313が実行を開始されることで開始される。
【0106】
仮想計算機301において、時分割実行制御対象となっているダミータスク313が実行を開始される(ステップS700)と、ダミータスク実行通知モジュール335は、ダミータスクの実行が開始されたことを検知して、仮想計算機スケジューリングモジュール363に、ダミータスクの実行が開始された旨の通知を行う(ステップS710)。
【0107】
仮想計算機スケジューリングモジュール363は、ダミータスク実行通知モジュール335から、ダミータスクの実行が開始された旨の通知が行われると、実行対象仮想計算機を、仮想計算機301から、子仮想計算機302に切り替える(ステップS720)。
【0108】
実行対象仮想計算機が子仮想計算機302に切り替えられると、子仮想計算機302は、保護タスク316のみを実行する(ステップS730)。
【0109】
その後、仮想計算機301において、ダミータスク313の実行が中断される(ステップS740)と、ダミータスク実行通知モジュール335は、ダミータスクの実行が中断されたことを検知して、仮想計算機スケジューリングモジュール363に、ダミータスクの実行が中断された旨の通知を行う(ステップS750)。
【0110】
ここで、仮想計算機301において、ダミータスク313の実行が中断される場合の例としては、例えば、仮想計算機301において、ダミータスク313以外のタスク(ここではタスクA311〜タスクK312)に対する割込みが発生した場合、例えば、仮想計算機301において、ダミータスク313のタイムスライスが完了した場合等がある。タイムスライスの完了は、例えば、タイマ104が、ダミータスク313の実行開始時刻からの経過時間がタイムスライス値を超えた時点で、プロセッサ101に対して割込みを発生させることで検知される。
【0111】
仮想計算機スケジューリングモジュール363は、ダミータスク実行通知モジュール335から、ダミータスクの実行が中断された旨の通知が行われると、実行対象仮想計算機を、子仮想計算機302から、仮想計算機301に切り替える(ステップS760)。
【0112】
一方、仮想計算機301においては、実行するタスクをダミータスク313から、ダミータスク313以外のタスクに切り替えて実行する(ステップS770)。
【0113】
その後、再び、仮想計算機301において、実行するタスクがダミータスク313以外のタスクから、ダミータスク313に切り替えられると(ステップS780)、再びステップS700の処理に戻って、ステップS700以下の処理を繰り返す。
【0114】
図8は、保護タスク実行処理において、仮想計算機システム100で実行されるタスクを模式的に示す模式図である。
【0115】
仮想計算機301において、時刻t1に、実行するタスクがダミータスク313以外のタスクから、ダミータスク313に切り替えられて、ダミータスク313が実行を開始されると(ステップS700)、ダミータスクの実行開始が、仮想計算機スケジューリングモジュール363に通知され(ステップS710)、実行される仮想計算機が、仮想計算機301から子仮想計算機302に切り替えられ(ステップS720)、子仮想計算機302において、保護タスク316のみが実行される(ステップS730)。
【0116】
その後、仮想計算機301において、時刻t2に、ダミータスク313が実行中断となると(ステップS740)、ダミータスクの実行中断が仮想計算機スケジューリングモジュールに通知され(ステップS750)、実行される仮想計算機が、子仮想計算機302から仮想計算機301に切り替えられ(ステップS760)、仮想計算機301において、実行するタスクが、ダミータスク313から、ダミータスク313以外のタスクに切り替えられる(ステップS770)。
【0117】
<複数の保護対象アプリケーションプログラムが起動を要求される場合>
ここまで、起動を要求される保護対象アプリケーションプログラムが1つの場合を中心に説明してきた。しかしながら、保護対象アプリケーションプログラムが複数ある場合には、複数の保護対象アプリケーションプログラムが起動を要求されるときもあり得る。このようなときには、起動を要求される保護対象アプリケーションプログラム毎に、その保護対象アプリケーションプログラムを実行するための子仮想計算機が生成されることとなる。
【0118】
図9は、互いに異なる複数の保護対象アプリケーションプログラムが起動を要求された場合において、ある時刻t5において、プロセッサ101上で実行対象となるモジュールを示すブロック図である。
【0119】
同図は、仮想計算機901において起動を要求された、互いに異なる複数の保護対象アプリケーションプログラムのそれぞれに対応して、保護対象アプリケーションプログラムを実行するための複数の子仮想計算機(ここでは子仮想計算機A902、子仮想計算機B903等)が生成されている状態を示している。
【0120】
同図に示される通り、仮想計算機901において、起動を要求された複数の保護対象アプリケーションプログラムのそれぞれに対応する保護タスク(ここでは保護タスクA917、保護タスクB920等)は、互いに独立する子仮想計算機(ここでは子仮想計算機A902、子仮想計算機B903等)で実行されることとなる。
【0121】
<考察>
以下、具体例を用いて、仮想計算機システム100の動作について考察する。
【0122】
具体例として、タスクA311(
図3参照)に対応するアプリケーションプログラムと、タスクL314に対応するアプリケーションプログラムとのそれぞれに、保護タスク316に対応する保護対象アプリケーションプロプログラムを攻撃するマルウエアが含まれている場合を考える。
【0123】
仮想計算機301において、タスクA311は、実行対象となり得るが、例え、実行中のタスクA311から、保護対象アプリケーションプログラムの起動が要求されても、保護タスク生成モジュール332によって、保護対象アプリケーションプログラムの代わりにダミープログラムが起動されることとなる。これにより、保護対象アプリケーションプログラムは、起動されることがない。
【0124】
従って、仮想計算機301において、保護対象アプリケーションプログラムは、タスクA311から攻撃されることがない。
【0125】
また、子仮想計算機302において、保護対象アプリケーションプログラムが起動されることで、保護タスク316が生成されているが、保護タスク316以外のタスクは、タスクスケジュール変更モジュール343によって、実行対象となることがない。すなわち、子仮想計算機302において、タスクL314は実行されることがない。
【0126】
従って、子仮想計算機302において、保護対象アプリケーションプログラムは、タスクL314から攻撃されることがない。
【0127】
このように、本実施の形態1に係る仮想計算機システム100は、仮想計算機が実行対象とするアプリケーションプログラムの中に、保護対象アプリケーションプログラムを攻撃するマルウエアが含まれてしまっている場合であっても、そのマルウエアによって、保護対象アプリケーションプログラムが攻撃されてしまう危険性を、従来よりも低く抑えることができる。
【0128】
また、本実施の形態1に係る仮想計算機システム100は、親となる仮想計算機では、保護タスク以外のタスクが実行され、子となる仮想計算機では、保護タスクのみが実行されることとなるため、親となる仮想計算機で実行されるタスクと、子となる仮想計算機で実行されるタスクとが重複することがない。
<実施の形態2>
<概要>
以下、本発明に係る仮想計算機システムの一例として、実施の形態1における仮想計算機システム100の一部を変形した変形仮想計算機システムについて説明する。
【0129】
実施の形態2に係る変形仮想計算機システムは、そのハードウエア構成が、実施の形態1に係る仮想計算機システム100と同様の構成のものとなっているが、実行されるソフトウエアの一部が、実施の形態1に係る仮想計算機システム100から変形されている。
【0130】
実施の形態1に係る仮想計算機システム100は、オペレーティングシステム(例えば第1OS321)に含まれるダミータスク実行通知モジュール(例えばダミータスク実行通知モジュール335)が、ダミータスクの実行開始を検知して、仮想計算機スケジューリングモジュール363に通知する構成の例であったが、実施の形態2に係る変形仮想計算機システムは、ダミータスク自身が、自ダミータスクが実行開始された旨を、オペレーティングシステムを介して、仮想計算機スケジューリングモジュールに通知する構成の例である。
【0131】
以下、本実施の形態2に係る変形仮想計算機システムの構成について、実施の形態1に係る仮想計算機システムとの相違点を中心に、図面を参照しながら説明する。
【0132】
<ハードウエア構成>
変形仮想計算機システムは、実施の形態1に係る仮想計算機システム100と同様のハードウエア構成となっている。よって、ここでは説明を省略する。
【0133】
また、以下では、変形仮想計算機システムのハードウエアを構成する各構成要素に係る説明は、実施の形態1に係る仮想計算機システム100のハードウエアを構成する各構成要素と同じ符号を用いて行う。
【0134】
<プログラムモジュール構成>
図10は、ある時刻t0において、プロセッサ101上で実行対象となるモジュールを示すブロック図である。
【0135】
同図において、モジュール群1000は、プロセッサ101において実行対象となっているモジュールの集合であって、モジュール群1000に含まれるモジュールのそれぞれは、ROM102又はRAM103の記憶領域に格納されている。
【0136】
モジュール群1000は、実施の形態1に係るモジュール群300から、ダミータスク313がダミータスク1013に変更され、スケジュールタスク1014が追加され、ダミータスク実行通知モジュール335とダミータスク実行通知モジュール345とが削除され、タスクスケジュール変更モジュール333とタスクスケジュール変更モジュール343と保護タスク生成モジュール332と保護タスク生成モジュール342と仮想計算機スケジューリングモジュール363とが、それぞれ、タスクスケジュール変更モジュール1033とタスクスケジュール変更モジュール1043と保護タスク生成モジュール1032と保護タスク生成モジュール1042と仮想計算機スケジューリングモジュール1063とに変更されたものである。
【0137】
また、タスクスケジュール変更モジュール333と保護タスク生成モジュール332とが、それぞれ、タスクスケジュール変更モジュール1033と保護タスク生成モジュール1032とに変更されたことに伴って、第1OS321が第1OS1021に変形され、タスクスケジュール変更モジュール343と保護タスク生成モジュール342とが、それぞれ、タスクスケジュール変更モジュール1043と保護タスク生成モジュール1042とに変更されたことに伴って、第2OS322が第1OS1022に変形されている。
【0138】
さらに、ダミータスク313がダミータスク1013に変更され、第1OS321が第1OS1021に変更されたことに伴って、仮想計算機301が仮想計算機1001に変形され、スケジュールタスク1014が追加され、第2OS322が第2OS1022に変更されたことに伴って、子仮想計算機302が子仮想計算機1002に変形されている。
【0139】
そして、仮想計算機スケジューリングモジュール363が仮想計算機スケジューリングモジュール1063に変更されたことに伴ってハイパバイザ351がハイパバイザ1051に変更されている。
【0140】
図11(a)は、ダミータスク1013に対応するダミープログラム1113の構成を示すプログラム構成図である。
【0141】
実施の形態1に係るダミータスク313は、対応するダミープログラムが、例えば、NOPを繰り返す無限ループからなるプログラムといった、新たなタスクを発生させることのない、例えば、NOPを繰り返す無限ループからなるプログラムであるとしていた。これに対して、実施の形態2に係るダミータスク1013は、対応するダミープログラム1113が、
図11(a)に示されるように、第1部分1121と第2部分1122とから構成されたものとなっている。
【0142】
第1部分1121は、自ダミープログラムに対応するダミータスク(ここではダミータスク1013)を実行制御するオペレーティングシステム(ここでは第1OS1021)を介して、ハイパバイザ1051に含まれる仮想計算機スケジューリングモジュール1063に、ダミータスクの実行が開始された旨の通知を行う記述。
【0143】
第2部分1122は、自ダミータスクを実行制御するオペレーティングシステム(ここでは第1OS1021)に対して、自ダミータスクに割り当てられているタイムスライスを放棄して、実行するタスクを、自ダミータスクから他のタスクへ切り替えるように要求する記述。
【0144】
図11(b)は、スケジュールタスク1014に対応するスケジュールプログラム1117の構成を示す。
【0145】
スケジュールタスク1014は、対応するスケジュールプログラム1117が、
図11(b)に示されるように、第1部分1131と第2部分1132とから構成されたものとなっている。
【0146】
第1部分1131は、自スケジュールタスクを実行制御するオペレーティングシステム(ここでは第2OS1022)に対して、自スケジュールタスクに割り当てられているタイムスライスを放棄して、実行するタスクを、自スケジュールタスクから他のタスクへ切り替えるように要求する記述。
【0147】
第2部分1132は、自スケジュールプログラムに対応するスケジュールタスク(ここではスケジュールタスク1014)を実行制御するオペレーティングシステム(ここでは第2OS1022)を介して、ハイパバイザ1051に含まれる仮想計算機スケジューリングモジュール1063に、実行対象仮想計算機を、自タスクが属する子仮想計算機(ここでは子仮想計算機1002)から、親である仮想計算機(ここでは仮想計算機1001に)に切り替えるように要求する記述。
【0148】
再び
図10に戻って、プロセッサ101上で実行対象となるモジュール群の説明を続ける。
【0149】
保護タスク生成モジュール1032は、実施の形態1に係る保護タスク生成モジュール332から、機能1が、以下の変形機能1となるように変形されたものである。
【0150】
変形機能1:ハイパバイザ1051に含まれる子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機1001)が子仮想計算機である旨の通知を受けた場合に、保護対象アプリケーションプログラムとスケジュールプログラムとを起動して、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機1001)内に、それぞれ、保護タスク(ここでは保護タスク316)とスケジュールタスク(ここではスケジュールタスク1014)とを生成する機能。
【0151】
タスクスケジュール変更モジュール1033は、実施の形態1に係るタスクスケジュール変更モジュール333から、有する機能が、以下の2つの変形機能となるように変形されたものである。
【0152】
変形機能1:ハイパバイザ1051に含まれる子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機(ここでは仮想計算機1001)が子仮想計算機である旨の通知を受けていた場合において、自オペレーティングシステムに含まれる保護タスク生成モジュール(ここでは保護タスク生成モジュール1032)によって保護タスクとスケジュールタスクとが生成されたとき、自オペレーティングシステム(ここでは第1OS1021)によって実行されるタスクを、保護タスクとスケジュールタスクとに限定する機能。
【0153】
変形機能2:保護タスクとスケジュールタスクとが実行制御対象となっている場合に、先に実行されるタスクを、スケジュールタスクとする機能。
【0154】
仮想計算機スケジューリングモジュール1063は、実施の形態1に係る仮想計算機スケジューリングモジュール363から、機能2が、以下の変形機能2となるように変形されたものである。
【0155】
変形機能2:子仮想計算機(ここでは子仮想計算機1002)が実行対象仮想計算機となっている場合において、その子仮想計算機1002のオペレーティングシステム(ここでは第2OS1022)を介して、スケジュールタスク(ここではスケジュールタスク1014)から、実行対象仮想計算機を、子仮想計算機1002から、親である仮想計算機(ここでは仮想計算機1001)に切り替えるように要求があるときに、実行対象仮想計算機を、子仮想計算機1002から、仮想計算機1001に切り替える機能。
【0156】
<動作>
上記構成の変形仮想計算機システムでは、実施の形態1に係る仮想計算機システム100の行う特徴的な動作のうち、子仮想計算機生成処理と保護タスク実行処理とが変形されて行われることとなる。以下、これらの動作について、実施の形態1に係る仮想計算機システムの行う動作との相違点を中心に、図面を参照しながら説明する。
【0157】
ここでは、以下、仮想計算機1001は、子仮想計算機通知モジュール362から、子仮想計算機である旨の通知を受けていないものとして説明する。
【0158】
<変形子仮想計算機生成処理>
変形子仮想計算機生成処理は、変形仮想計算機システムが、保護タスクを実行させるための新たな子仮想計算機を生成する処理であって、実施の形態1に係る子仮想計算機生成処理の一部が変形されたものである。
【0159】
図12は、変形子仮想計算機生成処理のフローチャートである。
【0160】
変形子仮想計算機生成処理は、実施の形態1に係る子仮想計算機生成処理と同様に、仮想計算機(ここでは仮想計算機1001)において実行制御されているタスクから、その仮想計算機に含まれるオペレーティングシステム(ここでは第1OS1021)に対して、保護対象アプリケーションプログラムの起動が要求されることによって開始される。
【0161】
ステップS1200〜ステップS1240の処理は、実施の形態1に係る子仮想計算機生成処理におけるステップS500〜ステップS540の処理と同様の処理である。よって、ここではこれらのステップの説明を省略する。
【0162】
子仮想計算機1002の保護タスク生成モジュール342は、子仮想計算機通知モジュール362から、自オペレーティングシステムが属する仮想計算機が子仮想計算機である旨の通知を行われると、保護対象アプリケーションプログラムとスケジュールプログラムとを起動して、子仮想計算機1002内に、保護タスク316とスケジュールタスク1014とを生成する(ステップS1250)。そして、タスクスケジュール変更モジュール343は、保護タスク生成モジュール342が、保護タスク316とスケジュールタスク1014とを生成すると、第2OS1022によって実行されるタスクを、保護タスク316とスケジュールタスク1014に限定する(ステップS1260)。
【0163】
ステップS1260の処理が終了すると、変形仮想計算機システムは、その変形子仮想計算機生成処理を終了する。
【0164】
<変形保護タスク実行処理>
変形子仮想計算機生成処理は、変形仮想計算機システムが、保護タスクを実行させるための新たな子仮想計算機を生成する処理であって、実施の形態1に係る子仮想計算機生成処理の一部が変形されたものである。
【0165】
図13は、変形保護タスク実行処理のフローチャートである。
【0166】
変形保護タスク実行処理は、実施の形態1に係る保護タスク実行処理と同様に、親仮想計算機(ここでは仮想計算機1001)において、ダミータスク1013が実行を開始されることで開始される。
【0167】
仮想計算機1001において、時分割実行制御対象となっているダミータスク1013が実行を開始される(ステップS1300)と、ダミータスク1013は、対応するダミープログラム1113の第1部分1121に対応する処理を行い、第1OS1021を介して、ハイパバイザ1051に含まれる仮想計算機スケジューリングモジュール1063に、ダミータスクの実行が開始された旨の通知を行う(ステップS1305)。
【0168】
仮想計算機スケジューリングモジュール1063は、第1OS1021を介して、ダミータスクの実行が開始された旨の通知が行われると、仮想計算機1001の実行を一時中断して、実行対象仮想計算機を、仮想計算機1001から、子仮想計算機1002に切り替える(ステップS1310)。
【0169】
実行対象仮想計算機が子仮想計算機1002に切り替えられると、子仮想計算機1002は、まず、スケジュールタスク1014の実行を開始する(ステップS1315)。
【0170】
スケジュールタスク1014の実行が開始されると、スケジュールタスク1014は、対応するスケジュールプログラム1117の第1部分1131に対応する処理を行い、第2OS1022に対して、自スケジュールタスクに割り当てられているタイムスライスを放棄して、実行するタスクを、自スケジュールタスクから他のタスク(すなわち、ここでは保護タスク316)へ切り替えるように要求する(ステップS1320)。
【0171】
第2OS1022は、実行するタスクの切り替えが要求されると、スケジュールタスク1014の実行を一時中断して、実行するタスクを、スケジュールタスク1014から、保護タスク316へ切り替えて、保護タスク316を実行する(ステップS1325)。
【0172】
その後、第2OS1022は、スケジュールタスク1014に割り当てているタイムスライス値に対応する時間が経過すると(ステップS1330)、実行するタスクを、保護タスク316から、再びスケジュールタスク1014へ切り替えて、中断されていたスケジュールタスク1014の実行を開始する(ステップS1335)。
【0173】
スケジュールタスク1014が再び実行されると、スケジュールタスク1014は、対応するスケジュールプログラム1117の第2部分1132に対応する処理を行い、第2OS1022を介して、ハイパバイザ1051に含まれる仮想計算機スケジューリングモジュール1063に、実行対象仮想計算機を、子仮想計算機1002から、仮想計算機1001に切り替えるように要求する(ステップS1340)。
【0174】
仮想計算機スケジューリングモジュール1063は、第2OS1022を介して、実行対象仮想計算機を、子仮想計算機1002から、仮想計算機1001に切り替えるように要求があると、実行対象仮想計算機を、子仮想計算機1002から、仮想計算機1001に切り替える(ステップS1345)。
【0175】
実行対象仮想計算機が仮想計算機1001に切り替えられると、仮想計算機1001は、中断されていたダミータスク1013の実行を開始する(ステップS1350)。
【0176】
ダミータスク1013が再び実行されると、ダミータスク1013は、対応するダミープログラム1113の第2部分1122に対応する処理を行い、第1OS1021に対して、自ダミータスクに割り当てられているタイムスライスを放棄して、実行するタスクを、自ダミータスクから他のタスクへ切り替えるように要求する(ステップS1355)。
【0177】
第2OS1022は、実行するタスクの切り替えが要求されると、実行するタスクを、ダミータスク1013から、ダミータスク1013以外のタスクへ切り替えて実行する(ステップS1360)。
【0178】
その後、再び、仮想計算機1001において、実行するタスクがダミータスク1013以外のタスクから、ダミータスク1013に切り替えられると(ステップS1365)、再びステップS1300の処理に戻って、ステップS1300以下の処理を繰り返す。
【0179】
図14は、変形保護タスク実行処理において、変形仮想計算機システムで実行されるタスクを模式的に示す模式図である。
【0180】
仮想計算機301において、時刻t1に、実行するタスクがダミータスク1013以外のタスクから、ダミータスク1013に切り替えられて、ダミータスク1013が実行を開始されると(ステップS1300)、仮想計算機スケジューリングモジュール1063に、ダミータスクの実行が開始された旨の通知が行われ(ステップS1305)、実行される仮想計算機が、仮想計算機1001から子仮想計算機1002に切り替えられ(ステップS1310)、子仮想計算機1002において、スケジュールタスク1014が実行される(ステップS1315)。
【0181】
スケジュールタスク1014が実行されると、第2OS1022は、実行するタスクを保護タスク316に切り替えるように要求され(ステップS1320)、保護タスク316の実行を開始する(ステップS1325)。
【0182】
その後、時刻t2に、保護タスクに割り当てられているタイムスライス値に対応する時間が経過すると(ステップS1330)、第2OS1022は、実行するタスクを、スケジュールタスク1014へ切り替えて実行し(ステップS1335)、仮想計算機スケジューリングモジュール1063に、実行対象仮想計算機を、仮想計算機1001に切り替えるように要求が行われ(ステップS1340)、実行される仮想計算機が、子仮想計算機1002から、仮想計算機1001に切り替えられ(ステップS1345)、仮想計算機1001においてダミータスク1013が実行される(ステップS1350)。
【0183】
ダミータスク1013が実行されると、第1OS1021は、実行するタスクを他のタスクに切り替えるように要求され(ステップS1355)、実行するタスクを他のタスクに切り替える(ステップS1360)。
【0184】
<まとめ>
上述の実施の形態2に係る変形仮想計算機システムは、実施の形態1に係る仮想計算機システム100と同様に、仮想計算機が実行対象とするアプリケーションプログラムの中に、保護対象アプリケーションプログラムを攻撃するマルウエアが含まれてしまっている場合であっても、そのマルウエアによって、保護対象アプリケーションプログラムが攻撃されてしまう危険性を、従来よりも低く抑えることができる。
【0185】
また、実施の形態2に係る変形仮想計算機システムは、本実施の形態1に係る仮想計算機システム100と同様に、親となる仮想計算機で実行されるタスクと、子となる仮想計算機で実行されるタスクとが重複することがない。
<補足>
以上、本発明に係る仮想計算機システムの一実施形態として、実施の形態1、実施の形態2において、2つの仮想計算機システムの例について説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りの仮想計算機システムに限られないことはもちろんである。
(1)実施の形態1において、仮想計算機システム100が1つのプロセッサを備える場合の例について説明したが、ハイパバイザが複数の仮想計算機の実行制御をすることができれば、必ずしもプロセッサの数は1つに限られる必要はなく、例えば、2つ、3つといった複数個であっても構わない。プロセッサの数が複数個の場合には、ハイパバイザは、仮想計算機の実行を必ずしも時分割で行う構成である必要はなく、複数の仮想計算機を並列に実行させる構成であっても構わない。
(2)実施の形態1において、プロセッサ101とROM102とRAM103とタイマ104と内部バス120と第1インタフェース121と第2インタフェース122と第3インタフェース123とが1つの集積回路110に集積されている場合の例について説明したが、これらの回路が必ずしも1つの集積回路に集積されている必要はない。例えば、プロセッサ101が第1の集積回路に集積され、その他の回路が第2の集積回路に集積される構成されていても構わないし、例えば、各回路がそれぞれ互いに異なる集積回路に集積される構成であっても構わない。
【0186】
さらには、集積回路110が、製造後に機能のプログラミングが可能なFPGA(Field Programmable Gate Array)によって実現されていても構わないし、機能の再構成が可能なリコンフィギュラブルプロセッサによって実現されていても構わない。
(3)実施の形態1において、プロセッサ101が2つの動作モードを備える構成の場合を例として説明したが、オペレーティングシステムを実行するモードと同等かそれ以上の高い特権モードでハイパバイザを実行することができる構成であれば、必ずしも動作モードの数は2つに限られる必要はなく、例えば、3つ以上であっても構わない。その場合、ハイパバイザを実行する動作モードを、オペレーティングシステムを実行するよりも高い特権モードとすることができる。
(4)実施の形態1において、仮想計算機の生成をフォーク形式で行う構成の場合を例として説明した。これは、仮想計算機の生成をフォーク形式で行うことによって、RAM103の記憶領域が効率的に利用されることとなるためである。
【0187】
しかしながら、RAM103の記憶領域の利用効率の非効率性を許容することができれば、親となる仮想計算機を元にして子仮想計算機を生成する場合に、必ずしもフォーク形式で行う必要はない。
【0188】
一例として、親となる仮想計算機に割り当てられている記憶領域と、新たに生成する仮想計算機に割り当てる記憶領域とが、1対1に対応するように、親となる仮想計算機に割り当てられている記憶領域を、新たに生成する仮想計算機の記憶領域にコピーすることによって、新たな仮想計算機を生成する形式等が考えられる。
【0189】
また、このように、子仮想計算機の記憶領域が親仮想計算機の記憶領域からコピーされたものである場合等には、これらの記憶領域は、必ずしもコピーオンライト方式で管理される必要はなくなる。
(5)実施の形態1において、起動要求検知モジュール(例えば起動要求検知モジュール331)、保護タスク生成モジュール(例えば保護タスク生成モジュール332)、タスクスケジュール変更モジュール(例えばタスクスケジュール変更モジュール333)、保護タスク終了通知モジュール(例えば保護タスク終了通知モジュール334)、ダミータスク実行通知モジュール(例えばダミータスク実行通知モジュール335)は、仮想計算機内のオペレーティングシステム(例えば第1OS321)に含まれている構成の例について説明したが、仮想計算機システム100において、これらのモジュールによって実現される機能と同等の機能が実現されることとなっていれば、これらのモジュールは、必ずしも、仮想計算機内のオペレーティングシステムに含まれている必要はなく、例えば、ハイパバイザ351に含まれている構成であっても構わない。
【0190】
例えば、ダミータスク実行通知モジュール335と同等の機能は、ダミータスク313が、実行されると、書き込み禁止領域となる所定のメモリ領域に書き込みを行うように設定され、ハイパバイザ351が、上記所定のメモリ領域への書き込み違反で発生した例外を補足するモジュールを備える構成とすることで、実現される。
(6)以下、さらに本発明の一実施形態に係る仮想計算機システムの構成及びその変形例と各効果について説明する。
【0191】
(a)本発明の一実施形態に係る仮想計算機システムは、プロセッサと、当該プロセッサ上で実行され、当該プロセッサに複数の仮想計算機の実行制御をさせるためのハイパバイザとを備える仮想計算機システムであって、前記ハイパバイザは、仮想計算機において、所定のアプリケーションプログラムが新たに実行されようとすることを検知するための実行検知部と、前記プロセッサによって実行される前記実行検知部が、第1仮想計算機において、前記所定のアプリケーションプログラムが新たに実行されようとすることを検知した場合に、当該第1仮想計算機に基づいて、前記所定のアプリケーションプログラムを実行するための新たな第2仮想計算機を生成するための仮想計算機生成部とを有し、前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、前記第2仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムを含む特定プログラム群に限って実行させ、前記第1仮想計算機において、前記プロセッサに、前記所定のアプリケーションプログラムの代わりに、所定のダミープログラムを実行させるための実行制御部を有することを特徴とする。
【0192】
上述の構成を備える本実施形態に係る仮想計算機システムによると、認定済アプリケーションプログラムを所定のアプリケーションプログラムとし、未認定アプリケーションプログラムを特定プログラム群に含めないとすることで、認定済アプリケーションが実行される第2仮想計算機では、未認定アプリケーションプログラムが実行されることがなく、さらに、未認定アプリケーションプログラムが実行される可能性のある第1仮想計算機では、認定済アプリケーションプログラムは実行されることがない。
【0193】
従って、仮想計算機が実行対象とするアプリケーションプログラムの中に、認定済アプリケーションプログラムと、未認定アプリケーションプログラムとが混在している場合であっても、未認定アプリケーションプログラムに含まれるマルウエアが実行されてしまうことで、認定済アプリケーションプログラムが攻撃されてしまう危険性を従来よりも低く抑えることができる。
【0194】
図15は、上記変形例における仮想計算機システム1500の構成を示す構成図である。
【0195】
同図に示されるように、仮想計算機システム1500は、プロセッサ1510とハイパバイザ1520とを備える。
【0196】
プロセッサ1510は、ハイパバイザ1520を実行する機能を備える。一例として、実施の形態1におけるプロセッサ101として実現される。
【0197】
ハイパバイザ1520は、プロセッサ1510上で実行されることで、プロセッサ1510に複数の仮想計算機(ここでは、第1仮想計算機1530と第2仮想計算機1540)の実行制御をさせる機能を有する。一例として、実施の形態1におけるハイパバイザ351として実現される。また、このハイパバイザ1520は、実行検知部1521と仮想計算機生成部1522とを有する。
【0198】
実行検知部1521は、仮想計算機において、所定のアプリケーションプログラムが新たに実行されようとすることを検知する機能を有する。一例として、実施の形態1における仮想計算機生成モジュール361のうちの、仮想計算機の起動要求検知モジュール331から、保護対象アプリケーションプログラムの起動が要求された旨の通知を受け付ける機能を実現する部分として実現される。
【0199】
仮想計算機生成部1522は、プロセッサ1510によって実行される実行検知部1521が、第1仮想計算機1530において、所定のアプリケーションプログラムが新たに実行されようとすることを検知した場合に、第1仮想計算機1530に基づいて、所定のアプリケーションプログラムを実行するための新たな第2仮想計算機1540を生成する機能を有する。
【0200】
第1仮想計算機1530は、プロセッサ1510によって実行制御される複数の仮想計算機のうちの1つである。一例として、実施の形態1における仮想計算機301として実現される。また、この第1仮想計算機1530は、実行制御部1531を有する。
【0201】
実行制御部1531は、第2仮想計算機1540において、プロセッサ1510に、前述の所定のアプリケーションプログラムを含む特定プログラム群に限って実行させ、第1仮想計算機1530において、プロセッサ1510に、前述の所定のアプリケーションプログラムの代わりに、所定のダミープログラムを実行させる機能を有する。一例として、実施の形態1における、保護タスク生成モジュール342とタスクスケジュール変更モジュール343とからなるモジュールとして実現される。
【0202】
第2仮想計算機1540は、プロセッサ1510によって実行制御される複数の仮想計算機のうちの1つである。一例として、実施の形態1における子仮想計算機302として実現される。また、この第2仮想計算機1540は、実行制御部1531と同様の機能を有する実行制御部1532を有する。
【0203】
(b)また、前記仮想計算機生成部は、前記第1仮想計算機に基づいて、新たな前記第2仮想計算機を生成する場合において、前記第2仮想計算機に対する記憶領域の割り当てを、前記第1仮想計算機に割り当てられている記憶領域に基づくフォーク方式で行うとしてもよい。
【0204】
このような構成にすることによって、第1仮想計算機と第2仮想計算機とが、利用する記憶領域の一部を共有することとなる。よって、記憶領域を有効利用することができるようになる。
【0205】
(c)また、前記ハイパバイザは、前記プロセッサの実行対象となっている前記第1仮想計算機において前記所定のダミープログラムが実行を開始された場合において、前記第2仮想計算機が生成されているときに、前記プロセッサの実行対象となる仮想計算機を、前記第1仮想計算機から前記第2仮想計算機へ変更するための仮想計算機スケジュール部とを有するとしてもよい。
【0206】
このような構成にすることによって、第1仮想計算機におけるダミープログラムの実行の開始を契機として、実行対象となる仮想計算機を、第1仮想計算機から第2仮想計算機へ切り替えることができるようになる。
【0207】
(d)また、前記仮想計算機スケジュール部は、前記プロセッサの実行対象となっている前記第2仮想計算機において前記所定のアプリケーションプログラムの実行が終了した場合に、前記プロセッサの実行対象となる仮想計算機を、前記第2仮想計算機から前記第1仮想計算機へ変更するとしてもよい。
【0208】
このような構成にすることによって、第2仮想計算機における所定のアプリケーションプログラムの実行の終了を契機として、実行対象となる仮想計算機を、第2仮想計算機から第1仮想計算機へ切り替えることができりようになる。
【0209】
(e)また、前記ハイパバイザは、前記プロセッサの実行対象となっている前記第2仮想計算機において前記所定のアプリケーションプログラムの実行が終了した場合において、前記仮想計算機スケジュール部が、前記プロセッサの実行対象仮想計算機を、前記第2仮想計算機から前記第1仮想計算機へ変更したときに、前記第2仮想計算機を消滅させるための仮想計算機消滅部を有するとしてもよい。
【0210】
このような構成にすることによって、第2仮想計算機における所定のアプリケーションプログラムの実行の終了を契機として、第2仮想計算機を消滅させることができるようになる。
【0211】
(f)また、前記実行制御部は、前記プロセッサに、タイムスライス値を用いて行うマルチタスク実行制御方法で、プログラムの実行制御を実行させるためのマルチタスク実行制御部を有し、前記マルチタスク実行制御部は、前記プロセッサによって実行される前記実行制御部が、前記プロセッサに、前記所定のアプリケーションプログラムの代わりに、前記所定のダミープログラムを実行させる場合に、前記所定のアプリケーションプログラムに割り当てるタイムスライス値と同じ値のタイムライス値を、前記所定のダミープログラムに割り当て、前記仮想計算機スケジュール部は、前記第1仮想計算機において、前記所定のダミープログラムが前記プロセッサの実行対象となった時点から、前記所定のダミープログラムに割り当てられているタイムスライス値で示される時間が経過した場合において、前記第2仮想計算機が前記プロセッサの実行対象仮想計算機となっているとき、前記プロセッサの実行対象仮想計算機を、前記第2仮想計算機から前記第1仮想計算機へ変更するとしてもよい。
【0212】
このような構成にすることによって、第1仮想計算機において、所定のダミープログラムが実行されてから、所定のアプリケーションプログラムに割り当てるタイムスライス値で示される期間経過したことを契機として、実行する仮想計算機を、第2仮想計算機から第1仮想計算機へ切り替えることができるようになる。
【0213】
(g)また、前記プロセッサによって実行される前記仮想計算機生成部が、前記第2仮想計算機を生成した場合に、前記第2仮想計算機の前記実行制御部に、子仮想計算機である旨の通知を行うための子仮想計算機通知部を有し、前記実行制御部は、前記第2仮想計算機において、前記子仮想計算機通知部から子仮想計算機である旨を通知されることで、前記プロセッサに、前記第2仮想計算機において、前記所定のアプリケーションプログラムを起動させるための実行開始部を有するとしてもよい。
【0214】
このような構成にすることによって、第2仮想計算機が生成されると、生成された第2仮想計算機において所定のアプリケーションプログラムが起動されることとなる。
【0215】
(h)また、前記特定プログラム群は、前記所定のアプリケーションプログラムを攻撃するマルウエアを含まないプログラムのみで構成されているとしてもよい。
【0216】
このような構成にすることによって、第2仮想計算機において、マルウエアからの、所定のアプリケーションプログラムに対する攻撃を無くすことができるようになる。
【0217】
(i)また、前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のアプリケーションプログラムが新たに実行されようとすることを検知して、前記所定のアプリケーションプログラムが新たに実行されようとする旨を、前記実行検知部へ通知する通知部を有し、前記実行検知部は、前記プロセッサによって実行される前記通知部から、前記所定のアプリケーションプログラムが新たに実行されようとする旨を通知されることで、前記所定のアプリケーションプログラムが新たに実行されようとすることの検知を行うとしてもよい。
【0218】
このような構成にすることによって、仮想計算機において所定のアプリケーションプログラムが新たに実行されようとしていることを、その仮想計算機において検知できるようになる。
【0219】
(j)また、前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された場合に、前記仮想計算機スケジュール部に、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された旨を通知するためのダミープログラム実行開始通知部を有し、前記仮想計算機スケジュール部は、前記プロセッサによって実行される、前記第1仮想計算機の前記ダミープログラム実行開始通知部から、自仮想計算機において、前記所定のダミープログラムが前記プロセッサによって実行を開始された旨を通知されることで、前記第1仮想計算機において、前記所定のダミープログラムが実行を開始されたことを検知するとしてもよい。
【0220】
このような構成にすることによって、仮想計算機において所定のダミープログラムの実行が開始されたことを、その仮想計算機において検知できるようになる。
【0221】
(k)また、前記プロセッサによって実行制御される複数の仮想計算機のそれぞれは、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した場合に、前記仮想計算機スケジュール部に、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した旨を通知するための実行終了通知部を有し、前記仮想計算機スケジュール部は、前記プロセッサによって実行される、前記第2仮想計算機の前記実行終了通知部から、自仮想計算機において、前記所定のアプリケーションプログラムの実行が終了した旨が通知されることで、前記第2仮想計算機において、前記所定のアプリケーションプログラムの実行が終了したことを検知するとしてもよい。
【0222】
このような構成にすることによって、仮想計算機において所定のアプリケーションプログラムの実行が終了したことを、その仮想計算機において検知できるようになる。