(57)【要約】【課題】信頼性の高いコンピュータシステムを提供し、特にオペレーティングシステムのカーネルを保護する方法を提供する。【解決手段】プロセッサ101、メモリ108、システムレジスタ群111、メモリ108へのアクセスを制御するメモリ保護機構を備え、システムレジスタ群111は、動作モード格納レジスタ201、命令位置納レジスタ202、動作モード格納レジスタ203、命令位置格納レジスタ204を有し、メモリ108のメモリ区画はアクセス属性を設定でき、アクセス属性はハイパーバイザプログラムによって保護でき、プロセッサ101は、ハイパーバイザプログラムの実行、アクセス属性を設定し、割込要求を受付け、終了時の復帰を行い、受付前の動作モードをレジスタ201に格納し、受付直前に実行プログラム再開命令位置をレジスタ202に格納する際に、ハイパーバイザプログラムを実行し、復帰時に実行を行い、実行によりプロセッサ動作モードが遷移されるコンピュータ。【選択図】図１
2009009232.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、ハイパーバイザプログラムを格納するメモリと、システムレジスタ群と、前記メモリへのアクセスを制御するメモリ保護機構とを備え、
前記システムレジスタ群は、動作モードする動作モード保存レジスタと、命令位置を格納する再開位置保存レジスタと、動作モードを格納する動作モード指示レジスタと、命令位置を格納する再開位置指示レジスタとを有し、
前記メモリは、１つ以上のメモリ区画を有し、前記メモリ区画はアクセス属性を設定でき、前記アクセス属性は前記ハイパーバイザプログラムによって保護でき、
前記プロセッサは、前記ハイパーバイザプログラムの実行、前記メモリ区画のアクセス属性を設定するアクセス設定、割り込み要求を受け付け、及び割り込み処理の終了時の復帰を行い、割り込み要求を受け付ける直前の動作モードを前記動作モード保存レジスタに格納し、割り込み要求を受け付ける直前に実行していたプログラムを再開するための命令位置を前記再開位置保存レジスタに格納する際に、前記ハイパーバイザプログラムを実行し、復帰時に前記ハイパーバイザプログラムの実行を行い、前記ハイパーバイザプログラムの実行によりプロセッサ動作モードが遷移されることを特徴とするコンピュータ。
【請求項２】
請求項１記載のコンピュータにおいて、
前記プロセッサは、ハイパーバイザモードとＯＳモードとに区分されるプロセッサ動作モードを有し、前記ハイパーバイザプログラムの実行により、前記ハイパーバイザモードとなり、オペレーティングシステムの動作から保護され、前記割り込み要求の受付時に、最初に前記ハイパーバイザモードに遷移し、復帰時に、最初に前記プロセッサをハイパーバイザモードに遷移し、前記ハイパーバイザプログラムの実行により、前記ハイパーバイザモードから前記ＯＳモードへ遷移することを特徴とするコンピュータ。
【請求項３】
請求項１記載のコンピュータにおいて、
前記プロセッサは、カーネルモードとユーザとに区分されるプロセッサ動作モードを有し、前記ハイパーバイザプログラムの実行により、前記カーネルモードを利用して自プログラムを保護し、オペレーティングシステムを前記ユーザモードで動作させ、前記オペレーティングシステムが実行するカーネルモードが要求される操作を前記ハイパーバイザプログラムに肩代わりさせることを特徴とするコンピュータ。
【請求項４】
請求項１記載のコンピュータにおいて、
前記プロセッサは、前記メモリ区画のアクセス属性として、書き込み許可と書き込み禁止とを表す書き込み属性と、読み込み許可と読み込み禁止とを表す読み込み属性とを設定でき、前記メモリ区画と書き込み属性および読み込み属性とを対応づけるアクセス許可属性テーブルと、前記メモリ区画と書き込み属性および読み込み属性とを対応づけるアクセス禁止属性テーブルとを前記メモリに記憶させ、前記アクセス許可時に、前記アクセス許可属性テーブルを参照して前記メモリ区画のアクセス属性を設定し、前記アクセス禁止時に、前記メモリ区画のアクセス属性を前記アクセス禁止属性テーブルを参照して設定することを特徴とするコンピュータ。
【請求項５】
割り込みハンドラとして動作する割り込み処理開始ステップと、メモリが有するメモリ区画のアクセス属性をアクセス許可に設定するアクセス許可ステップと、ＯＳモードに遷移しオペレーティングシステムの割り込みハンドラを実行する実行ステップと、割り込み終了時の復帰の実行を行う復帰介入ステップと、復帰時に指定された復帰先が前記メモリ区画に含まれるかどうかを判断する入れ子判定ステップと、前記入れ子判定ステップにおいて復帰先が前記メモリ区画に含まれると判断された場合に、前記メモリ区画のアクセス属性をアクセス禁止に設定するアクセス禁止ステップと、復帰時に与えられた動作モードに遷移し、復帰時に与えられた位置から実行を継続する復帰ステップとを含むことを特徴とするコンピュータのオペレーティングシステムのカーネル保護方法。
【請求項６】
請求項５記載のカーネル保護方法において、
前記アクセス許可ステップは、前記メモリのメモリ区画の書き込み属性を書き込み許可に設定するステップであり、前記アクセス禁止ステップは、前記メモリ区画の書き込み属性を書き込み禁止に設定するステップであることを特徴とするカーネル保護方法。
【請求項７】
請求項５記載のカーネル保護方法において、
前記アクセス許可ステップは、前記メモリが有するアクセス許可属性テーブルを参照して前記メモリ区画のアクセス属性を設定し、前記アクセス禁止ステップは、前記メモリが有するアクセス禁止属性テーブルを参照して前記メモリ区画のアクセス属性を設定することを特徴とするカーネル保護方法。
【請求項８】
請求項５記載のカーネル保護方法において、
前記アクセス許可ステップは、前記メモリが有する拡張アクセス許可属性テーブルを参照して前記メモリ区画のアクセス属性を設定し、前記アクセス禁止ステップは、前記メモリが有するアクセス禁止属性テーブルを参照して前記メモリ区画のアクセス属性を設定することを特徴とするカーネル保護方法。
【請求項９】
請求項５記載のカーネル保護方法において、
前記復帰ステップの前に、前記メモリが有するコマンドバッファのコマンドに従って処理を行う任意アクセス適用ステップを実行することを特徴とするカーネル保護方法。
【請求項１０】
請求項５記載のカーネル保護方法において、
前記指示に与えられたコマンドに従って、メモリ区画を決定し、前記コマンドを参照して前期メモリ区画の書き込み属性および読み込み属性を設定する応答ステップをさらに備え、前記応答ステップは前記割り込み実行時から復帰時までの期間のみ機能することを特徴とするカーネル保護方法。
【請求項１１】
前記プロセッサは、割り込みハンドラとして動作する割り込み受付、前記メモリ区画のアクセス属性をアクセス許可に設定するアクセス許可、オペレーティングシステムの割り込みハンドラを実行する割り込みハンドラ実行、復帰時に実行され、その際指定された復帰先が前記メモリ区画に含まれるかどうかを判断する復帰介入、前記復帰介入において復帰先が前記メモリ区画に含まれると判断された場合に、前記メモリ区画のアクセス属性をアクセス禁止に設定するアクセス禁止、及び復帰時に与えられた動作モードに遷移し、復帰時に与えられた位置から実行を継続する復帰を行うようコンピュータに機能させるプログラムであるコンピュータソフトウエア。
【請求項１２】
請求項１１記載のコンピュータソフトウエアにおいて、
前記アクセス許可は、前記メモリ区画のアクセス属性を書き込み許可に設定し、前記アクセス禁止は、前記メモリ区画のアクセス属性を書き込み禁止に設定するよう、コンピュータを機能させることを特徴とするコンピュータソフトウエア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータとカーネル保護方法並びにコンピュータソフトウエアに関し、特にハイパーバイザを利用してオペレーティングシステムのカーネルを保護するためのカーネル保護装置およびカーネル保護方法およびカーネル保護プログラムに関する。
【背景技術】
【０００２】
コンピュータでは、コンピュータの資源を効率よく使用するなどのために、オペレーティングシステムが利用される。オペレーティングシステムを使用することによって、複数のアプリケーションプログラムを効率よく動作させることができ、マルチタスキング環境においては、多数のプログラムが並行動作する。しかしながら、アプリケーションプログラムには、バグが含まれることが多く、バグの中にはオペレーティングシステムの動作に影響を与えるものもある。また、コンピュータウイルスなど、故意にオペレーティングシステムに干渉することによって、システムの制御を奪うことを目的とするプログラムも存在する。
【０００３】
そこで、オペレーティングシステムは、プロセッサの「動作モード」を利用して、オペレーティングシステム自身を保護することが一般的である。動作モードには大きく分けて２種類あり、ひとつは、オペレーティングシステム、特にその中核プログラムであるカーネルを保護するための「カーネルモード」、もうひとつはアプリケーションプログラムなど、システム全体に関わる操作を禁止されるべきプログラムを実行するための「ユーザモード」である。
【０００４】
カーネルモードとユーザモードによって、単独のオペレーティングシステムを保護することはできるが、近年、カーネル自体が複雑化した結果、カーネルモードのプログラムにバグが含まれる事例が増加している。これはセキュリティホールなどとして顕在化するため、解決策としてカーネルモードで動作するプログラムを小さくするマイクロカーネル方式や、従来はカーネルモードでしか動作しなかったデバイスドライバをユーザモードで動作させる技術が存在する。これらは、ひとつだけを適用すればオペレーティングシステムを完全にするものではなく、複合的に用いることによって、オペレーティングシステムの信頼性をより高めることができる。
【０００５】
一方、従来は１つのコンピュータには１つのオペレーティングシステムが動作することが一般的であったが、近年、１つのコンピュータ上で異種のオペレーティングシステムを複数並行に動作させることが可能になった。このようなシステムでは、オペレーティングシステムとプロセッサとの間に、ハイパーバイザと呼ばれるプログラムが配置される。ハイパーバイザは、コンピュータの物理的な環境を仮想化し、複数のオペレーティングシステムそれぞれに対して独立した仮想マシンを与えることによって、オペレーティングシステムをハイパーバイザ環境下で動作させる。仮想マシン間の干渉はハイパーバイザによって阻止されるため、仮想マシン内で動作するオペレーティングシステムは別のオペレーティングシステムから保護される。
【０００６】
ハイパーバイザが動作する環境では、ハイパーバイザをオペレーティングシステムから保護するために、プロセッサの動作モードに「ハイパーバイザモード」が加えられる場合がある。ハイパーバイザモードによって、移植性や性能を損なうことなく、ハイパーバイザをシステムに導入することができるようになる。一方で、ハイパーバイザモードを備えないプロセッサにおいても、ハイパーバイザがカーネルモードを利用して自分自身を保護し、さらにオペレーティングシステムをユーザモードで動作させ、オペレーティングシステムが実行するカーネルモードが要求される操作をハイパーバイザが肩代わりすることによって、仮想的にハイパーバイザモードとカーネルモード、およびユーザモードを作り出すことができる。この場合は、プロセッサがハイパーバイザモードを備える場合に比べ多少の性能低下が認められるものの、実用上は十分な性能が発揮でき、プロセッサがハイパーバイザモードを備えた場合と同等の機能性を実現できる。
【０００７】
したがって、ハイパーバイザを利用する場合のプロセッサの動作モードは、ハイパーバイザモードと「ＯＳモード」（非ハイパーバイザモード）に分類できる。ＯＳモードについて、オペレーティングシステムが必要とするのであれば、さらにカーネルモードとユーザモードとに分類できる。オペレーティングシステムがカーネルモードとユーザモードの別を必要としない場合には、ユーザモードを利用する必要性はないために、ＯＳモードを単にカーネルモードで代表させることができる。
【０００８】
プロセッサがハイパーバイザモードで動作しているとき、実行中のプログラムはプロセッサのすべての機能を利用できる。プロセッサがＯＳモードで動作しているとき、実行中のプログラムはハイパーバイザモードで動作するソフトウェアに影響を与える虞のあるプロセッサの機能を利用することができない。たとえば、ＯＳモードで禁止される機能には、メモリ保護機構の操作や、割り込み処理プログラムの指定、外部記憶装置への入出力などが含まれる。
【０００９】
動作モードが変化することを、動作モードの遷移という。動作モードの遷移は、プロセッサによって自動的に行われる場合と、プログラムによって行われる場合とがある。プログラムによって動作モードを遷移させようとするときは、次のような制約がある。
【００１０】
ハイパーバイザモードのプログラムは、その実行コンテキストを維持したまま、プロセッサの動作モードをＯＳモードへ遷移させることができる。（ＯＳモードが複数の動作モードから成り立つ場合には、任意のモードに遷移できる。）実行コンテキストを維持するとは、動作モードを変更した後に実行される命令列を、動作モードの変更前に実行されていた命令列によって決定できるということである。実行コンテキストを維持して動作モードを変更する手段として、たとえばレジスタへの設定が挙げられる。一方、実行コンテキストを維持できない方法として、割り込みによって動作モードが遷移する場合があげられる。
【００１１】
ＯＳモードのプログラムは、その実行コンテキストを維持したまま、プロセッサの動作モードをハイパーバイザモードへ遷移させることはできない。また、ＯＳモードが複数の動作モードから成り立つとき、その動作モード間の遷移に制約があることが一般的であるが、本発明の理解には必要でないため説明は省略する。
【００１２】
本発明の理解のために、一般的なプロセッサの実装に合わせて、ハイパーバイザモードとＯＳモードを用いて説明するが、それらは必ずしもプロセッサによって実現されたものでなくてもよい。
【００１３】
また、動作モードの実装はプロセッサに依存するが、前記ハイパーバイザモードおよびＯＳモードは、対象のプロセッサおよびシステムにおいて、必ずしもプロセッサの動作モードとして実施される必要はなく、たとえば、プロセッサがセキュアモードとノンセキュアモードを持ち、さらにセキュアモードにおいてハイパーバイザの支援を追加のハードウェアによって行うことで、ハイパーバイザモードを実現するなどしても構わない。
【００１４】
プロセッサの例として、Ｉｎｔｅｌ  ＶＴ−ｘ技術を搭載したＩＡ−３２アーキテクチャのプロセッサが存在する。ＶＴ−ｘ技術を搭載したプロセッサは動作モードとしてＶＭＸ  ｒｏｏｔモードとＶＭＸ  ｎｏｎｒｏｏｔモードがあり、さらに４レベルの「ｒｉｎｇ」と呼ばれる状態がある。ＶＴ−ｘにおけるＶＭＸ  ｒｏｏｔモードが本発明に係るカーネル保護装置のハイパーバイザモードに相当し、ＶＴ−ｘにおけるＶＭＸ  ｎｏｎ−ｒｏｏｔモードが本発明に係るカーネル保護装置のＯＳモードに相当する。
【００１５】
また、プロセッサの別の例として、ＳＨ−４Ａアーキテクチャのプロセッサが存在する。ＳＨ−４Ａアーキテクチャの動作モードは特権モードとユーザモードだけであり、ＳＨ−４Ａの特権モードが本発明に係るカーネル保護装置のハイパーバイザモードに相当し、ＳＨ−４Ａのユーザモードが本発明に係るカーネル保護装置のＯＳモードに相当する。ＳＨ−４Ａアーキテクチャにおいて、ＯＳモードをカーネルモードとユーザモードなど、さらに分割する必要がある場合には、ＳＨ−４Ａの特権モードで動作するハイパーバイザの支援によって、カーネルモードなどに必要な機能を提供する必要がある。
【００１６】
プロセッサは、不正なアクセスからメモリを保護するために、メモリへのアクセスを制御する機構（メモリ保護機構）を備えていることが一般的である。メモリ保護機構は、メモリ空間の少なくとも１つ以上の部分に対して、書き込み許可または書込み禁止と、読み込み許可または読み込み禁止とに設定することができ、禁止されている操作がメモリに実行されることを防ぐ。メモリ保護機構の例としてＭＭＵ（メモリ管理ユニット）がある。
【００１７】
メモリ保護機構は、ハイパーバイザモードのプログラムから操作可能である。そのほかの動作モードのプログラムからは操作できないか、操作に制限があり、ハイパーバイザモードのプログラムに影響しない。
【００１８】
また、プロセッサは、割り込みと呼ばれる、実行中の処理より優先度の高い処理に即時に対処するための仕組みを備えている。割り込みにおいては、割り込みを発生される事象（割り込み要因）が発生すると、プロセッサに割り込みを受け付けさせるために、プロセッサに対して割り込み要求が伝えられる。
【００１９】
割り込み要求を伝えられたプロセッサは、割り込みを受け付け可能な状態であれば割り込みを受け付け、割り込み要因ごとに予め設定された動作モード（普通はハイパーバイザモード）へ遷移し、予め設定された割り込み処理を行うプログラム（割り込みハンドラ）を実行する。割り込み処理が正常に行われない場合はシステムに重大な影響を及ぼす可能性があるため、プロセッサは割り込みハンドラを指定する部分をＯＳモードから操作できないようにし、オペレーティングシステムの動作からハイパーバイザを含むシステム全体を保護する。
【００２０】
「割り込みハンドラ」とは、割り込みを処理するプログラム全般を意味することもあるが、ここではプロセッサによって直接実行が開始されることを想定したプログラムを指すものとする。また、割り込みハンドラによって実行が開始され、各々の割り込み要因に対応した割り込み処理を行うプログラムのことを、ＩＳＲ（割り込みサービスルーチン）と呼ぶことにする。
【００２１】
割り込みハンドラはプロセッサから直接実行されるため、「呼び出し元」は存在しない。したがって、通常のサブルーチンにあるような「呼び出し元へ戻る」といったことはせず、代わりに、割り込みハンドラの最後の処理において、割り込みによって割り込まれたプログラムを再開するという動作を行うのが一般的である。ただし、必ずしも割り込まれたプログラムを再開する必要はなく、たとえば、マルチタスクオペレーティングシステムにおいては、複数のプログラムを並行動作させるために、任意のプログラムを再開することもできる。この再開する動作によって、割り込みの処理から通常の状態に戻ることから、割り込みの最後に行われる処理を「復帰」と呼ぶことがある。
【００２２】
プロセッサにおいては、割り込みから復帰するために通常用いられる、プロセッサアーキテクチャ依存の手段があることが一般的である。そのような手段においては、復帰した後の動作モードと、復帰する命令の位置を、前記手段にパラメタとして与える。たとえばＩＡ−３２アーキテクチャにおいては、ＩＲＥＴという割り込みから復帰するための命令が用意されており、前記ＩＲＥＴ命令は、そのときのスタックに積んである値を前記動作モードと命令位置として使用する。また、ＳＨ−４Ａアーキテクチャにおいては、ＲＴＨという割り込みから復帰することを主な目的とする命令があり、ＳＳＲレジスタとＳＰＣレジスタに格納されている値を、前記動作モードおよび前記命令位置として使用する。本発明においては、これら「割り込みから復帰するために通常用いられる手段」のことを、本発明では「復帰手段」と呼ぶことにする。
【００２３】
復帰手段は、割り込みハンドラまたはＩＳＲによって用いられることが一般的である。割り込みハンドラとＩＳＲのどちらで用いられるかはオペレーティングシステムの実装により異なるが、たとえば、Ｌｉｎｕｘオペレーティングシステムでは、ＩＳＲが割り込みハンドラに「戻る」ように作られており、ＩＳＲの実行から割り込みハンドラに戻った後に、割り込みハンドラが復帰手段を用いる。この場合には、割り込みの開始処理と終了処理を割り込みハンドラに一元化できるため、復帰手段などアーキテクチャ依存部分を割り込みハンドラに局在化できるという利点がある。
【００２４】
割り込み処理がオペレーティングシステムにとって処理の契機であることに着目し、割り込み処理の前後で動的なメモリ領域のアクセス設定を行うことによってプログラムの保護を行う方法が特許文献１などで開示されており、これによってカーネルの一部が誤動作した場合の悪影響を抑え込むことができる。
【００２５】
オペレーティングシステム上で動作するアプリケーションプログラムの保護に関する技術として、アプリケーションプログラムを複数のプロセスに分割し、オペレーティングシステムがプロセス間の干渉を禁止することによって、プロセス単位で保護を行う方法が従来から存在している。特に、メモリに関しては、プロセスが、各々独自のメモリ空間（仮想アドレス空間）を持つことによって、他のプロセスのメモリ領域にアクセスできないようにしている。
【００２６】
オペレーティングシステムは、プロセスごとに独立した仮想アドレス空間を割り当てるために、メモリ管理機構を利用することが一般的である。メモリ管理機構を操作することはオペレーティングシステムの動作に影響するため、アプリケーションプログラムから操作できないようになっている。
【特許文献１】特開２００５−２０９１７８号公報
【発明の開示】
【発明が解決しようとする課題】
【００２７】
オペレーティングシステムは、主にカーネルによって提供される機能によって自分自身を保護しているが、近年カーネル自体が複雑化したことにより、カーネルによる保護が破れてしまう場合がある。
【００２８】
また、オペレーティングシステムは、カーネルモードとユーザモードによってアプリケーションプログラムからカーネルを保護するが、性能上の理由などからアプリケーションプログラムを前記カーネルモードで動作させる場合があり、そうした場合にはアプリケーションプログラムからカーネルが保護されなくなるという課題があった。また、オペレーティングシステムのなんらかの不都合によって、アプリケーションプログラムが不正に前記カーネルモードで動作してしまった場合にも、オペレーティングシステムのあらゆる権限がアプリケーションプログラムに奪われる可能性があり、そうなった場合にはオペレーティングシステムの動作に関して一切の保証ができなくなる。
【００２９】
また、オペレーティングシステムにおいて、前記カーネルモードで動作する前記オペレーティングシステムのカーネルの動作は、前記オペレーティングシステムの範囲内で制限されないため、前記カーネルが誤作動した場合の影響範囲を限定することができず、前記カーネルの誤作動による影響が前記オペレーティングシステム全体に及んでしまう。
【００３０】
ハイパーバイザは仮想マシンを作り出すことによって、オペレーティングシステムを保護する。これによってシステムや他の仮想マシンに影響するような操作を阻止できるものの、仮想マシン内部で許される動作については、ハイパーバイザによって制御できない。たとえば、悪性プログラムがカーネルモードで動作し、カーネルの不正な書き換えを行った場合でも、ハイパーバイザからは仮想マシンの内部でカーネルモードのプログラムが書き込みをしているとしか判断できないために、そのような悪性プログラムの動作からカーネルを保護することはできない。
【００３１】
もちろん、ハイパーバイザをオペレーティングシステムに合わせて開発し、オペレーティングシステムと密に連携するようにすれば、ハイパーバイザによってカーネルを保護することも可能であると考えられる。しかしながら、オペレーティングシステムは一般にハイパーバイザの存在を想定せずに作られるため、カーネルの構造はオペレーティングシステムに固有であり、実行時の振る舞いは単純ではない。したがって、複雑なカーネルを保護するハイパーバイザも複雑になる虞があり、その場合にはハイパーバイザ自体の信頼性を維持する方法が必要になってしまう。また、オペレーティングシステムに合わせて作られたハイパーバイザは、当然ながら対象のオペレーティングシステムに固有になってしまう。
【００３２】
ハイパーバイザとオペレーティングシステムは密に連携して動作するが、しかしながら、ソフトウェアの構造を単純にするなどのために、ハイパーバイザはなるべくオペレーティングシステムと独立であるほうが好ましい。
【００３３】
一方、メモリ保護機構を用いてプロセスを保護する方法では、メモリ保護機構を操作するオペレーティングシステムのプログラムに不都合が含まれている場合に、プロセスの保護が破れてしまう虞がある。したがって、オペレーティングシステムの完全性を保証するには、前記オペレーティングシステムの前記カーネルモードに関連する部分全てに不都合がないことを保証する必要があるが、前記カーネルモードに関連する部分は一般にカーネル全体に及び、不都合がないことを保証することは非常に難しい。
【００３４】
また、メモリ管理機構を用いてプロセスを保護する方法に代わり、プロセス間の保護をハイパーバイザによって為すことも考えられる。しかし、プロセスはオペレーティングシステムによって作り出される概念であるため、ハイパーバイザがプロセスに関する処理を直接行うためには、オペレーティングシステムのプロセスに関する状態をハイパーバイザが認識する必要がある。
【００３５】
しかしながら、オペレーティングシステムがプロセスを管理する方法はオペレーティングシステムごとに固有であるから、ハイパーバイザがオペレーティングシステムのプロセスに関する状態を直接認識できるようにすると、ハイパーバイザがオペレーティングシステムに依存してしまう。これは、ハイパーバイザの移植性を損なう。
【００３６】
ところで、ハイパーバイザとオペレーティングシステムが「対話」する方法として、ソフトウェア例外などによるシステムコールに似た方法が用いられる。これによって、オペレーティングシステムがアプリケーションプログラムにシステムコールを提供するのと同様に、ハイパーバイザはオペレーティングシステムに安全に機能を公開できる。しかしながら、ソフトウェア例外など、ハイパーバイザを呼び出すための手続きは通常の呼び出し処理よりも多くの計算量を必要とするため、多数回の呼び出しを行うと性能が低下する虞がある。
【００３７】
本発明は、前記従来の課題を解決するためになされたもので、ハイパーバイザが過度にオペレーティングシステムに依存することなく、ハイパーバイザによってオペレーティングシステムのカーネルを保護するコンピュータとカーネル保護方法並びにコンピュータソフトウエアを提供することを目的とするものである。
【課題を解決するための手段】
【００３８】
本発明は、プロセッサと、ハイパーバイザプログラムを格納するメモリと、システムレジスタ群と、前記メモリへのアクセスを制御するメモリ保護機構とを備え、前記システムレジスタ群は、動作モードを格納する動作モード保存レジスタと、命令位置を格納する再開位置保存レジスタと、動作モードを格納する動作モード指示レジスタと、命令位置を格納する再開位置指示レジスタとを有し、前記メモリは、１つ以上のメモリ区画を有し、前記メモリ区画はアクセス属性を設定でき、前記アクセス属性は前記ハイパーバイザプログラムによって保護でき、前記プロセッサは、前記ハイパーバイザプログラムの実行、前記メモリ区画のアクセス属性を設定するアクセス設定、割り込み要求を受け付け、及び割り込み処理の終了時の復帰を行い、割り込み要求を受け付ける直前の動作モードを前記動作モード保存レジスタに格納し、割り込み要求を受け付ける直前に実行していたプログラムを再開するための命令位置を前記再開位置保存レジスタに格納する際に、前記ハイパーバイザプログラムを実行し、復帰時に前記ハイパーバイザプログラムの実行を行い、前記ハイパーバイザプログラムの実行によりプロセッサ動作モードが遷移されるコンピュータである。
【発明の効果】
【００３９】
本発明によれば、ハイパーバイザとオペレーティングシステムとの独立性を維持したまま、ハイパーバイザによってカーネルメモリ領域への書き込みと読み込みを制御するので、カーネルモードで動作するプログラムの誤動作や悪意のあるプログラムからカーネルを保護することができる。
【発明を実施するための最良の形態】
【００４０】
本発明を実施するための最良の形態を説明する。
本発明に係るカーネル保護装置は、ハイパーバイザを備え、動作モードを格納できることを特徴とする動作モード保存レジスタを備え、命令位置を格納できることを特徴とする再開位置保存レジスタを備え、動作モードを格納できることを特徴とする動作モード指示レジスタを備え、命令位置を格納できることを特徴とする再開位置指示レジスタを備え、メモリ領域を備え、前記メモリ領域は少なくとも１つ以上のメモリ区画を含み、前記メモリ区画はアクセス属性を設定できることが特徴であり、前記メモリ区画のアクセス属性は前記ハイパーバイザが保護できることが特徴であり、前記メモリ区画のアクセス属性には、アクセス許可とアクセス禁止とを表すアクセス属性を設定できることが特徴であり、前記メモリ区画のアクセス属性を設定するアクセス設定手段と、割り込み要求を受け付ける受付手段と、前記受付手段は割り込み要求を受け付ける直前の動作モードを前記動作モード保存レジスタに格納し、割り込み要求を受け付ける直前に実行していたプログラムを再開するための命令位置を前記再開位置保存レジスタに格納し、前記ハイパーバイザを実行することが特徴であり、割り込み処理の終了時に用いられる復帰手段と、前記復帰手段は前記ハイパーバイザを実行することが特徴であり、前記プロセッサの動作モードを遷移させる遷移手段を備える。
【００４１】
これによれば、プロセッサが割り込みを受け付け、前記割り込みを処理する割り込みハンドラとしてハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性をアクセス許可に設定し、オペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラは固有の割り込み処理を行った後、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、前記アクセス許可に設定した前記メモリ区画のアクセス属性をアクセス禁止に設定する。そして、復帰しようとする位置に関わらず、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００４２】
したがって、前記オペレーティングシステムの割り込みハンドラを実行している間のみ、前記メモリ区画のアクセスが許可されるので、前記メモリ区画にカーネルを配置しておき、前記メモリ区画へアクセスが必要な機能を前記オペレーティングシステムの割り込みハンドラ部分で実現することによって、オペレーティングシステムの詳細な実装について前記ハイパーバイザが知ることなく、前記ハイパーバイザが前記カーネルの保護を支援できる。
【００４３】
また、上記のカーネル保護装置において、さらに前記プロセッサはハイパーバイザモードとＯＳモードに区分される動作モードを持ち、さらに前記ハイパーバイザは前記ハイパーバイザモードによってオペレーティングシステムの動作から保護され、前記受付手段は前記プロセッサをハイパーバイザモードに遷移させることが特徴であり、前記復帰手段は前記プロセッサをハイパーバイザモードに遷移させることが特徴であり、前記プロセッサの動作モードをハイパーバイザモードからＯＳモードへ遷移させることを特徴とする前記遷移手段を備えることが好ましい。
【００４４】
これによれば、プロセッサが割り込みを受け付け、ハイパーバイザモードへ遷移し、前記割り込みを処理する割り込みハンドラとしてハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性をアクセス許可に設定し、前記プロセッサの動作モードをＯＳモードにし、オペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラは固有の割り込み処理を行った後、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記プロセッサはハイパーバイザモードへ遷移し、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、前記アクセス許可に設定した前記メモリ区画のアクセス属性をアクセス禁止に設定する。そして、復帰しようとする位置に関わらず、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００４５】
したがって、前記オペレーティングシステムの割り込みハンドラを実行している間のみ、前記メモリ区画のアクセスが許可され、さらに、前記ハイパーバイザは前記ハイパーバイザモードによってオペレーティングシステムの動作から保護されるので、前記メモリ区画にカーネルを配置しておき、前記メモリ区画へ書き込みが必要な機能を前記オペレーティングシステムの割り込みハンドラ部分で実現することによって、カーネルモードで動作するアプリケーションプログラムや悪意のあるプログラムから前記カーネルを強固に保護できる。
【００４６】
また、本発明に係るカーネル保護プログラムは、動作モードを格納できることを特徴とする動作モード保存レジスタを備え、命令位置を格納できることを特徴とする再開位置保存レジスタを備え、動作モードを格納できることを特徴とする動作モード指示レジスタを備え、命令位置を格納できることを特徴とする再開位置指示レジスタを備え、メモリ領域を備え、前記メモリ領域は少なくとも１つ以上のメモリ区画を含み、前記メモリ区画はアクセス属性を設定できることが特徴であり、前記メモリ区画のアクセス属性は前記ハイパーバイザが保護できることが特徴であるカーネル保護装置において、割り込みハンドラとして動作する割り込み受付部と、前記メモリ区画のアクセス属性をアクセス許可に設定するアクセス許可部と、カーネルモードに遷移しオペレーティングシステムの割り込みハンドラを実行する割り込みハンドラ実行部と、復帰手段が用いられたときに実行され、前記復帰手段に指定された復帰先が前記メモリ区画に含まれるかどうかを判断する復帰介入部と、前記復帰介入部において復帰先が前記メモリ区画に含まれると判断された場合に、前記メモリ区画のアクセス属性をアクセス禁止に設定するアクセス禁止部と、前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた位置から実行を継続する復帰部として、コンピュータを機能させる。
【００４７】
これによれば、プロセッサが割り込みを受け付けときに割り込みハンドラしてハイパーバイザが実行されるように構成されたカーネル保護装置において、割り込みが発生した場合に、割り込みを処理する割り込みハンドラとして前記ハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性をアクセス許可に設定し、オペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラでは固有の割り込み処理を行った後、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記プロセッサはハイパーバイザモードへ遷移し、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、前記アクセス許可に設定した前記メモリ区画のアクセス属性をアクセス禁止に設定する。そして、復帰しようとする位置に関わらず、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００４８】
したがって、前記オペレーティングシステムの割り込みハンドラを実行している間のみ、前記メモリ区画のアクセスが許可されるので、前記メモリ区画にカーネルを配置しておき、前記メモリ区画へアクセスが必要な機能を前記オペレーティングシステムの割り込みハンドラ部分で実現することによって、カーネルモードで動作するアプリケーションプログラムや悪意のあるプログラムから前記カーネルを保護できる。
【００４９】
また、上記のカーネル保護装置において、前記アクセス属性は書き込み属性と読み込み属性を設定できることを特徴とし、前記メモリ区画と書き込み属性および読み込み属性とを対応づけることが特徴であるアクセス許可属性テーブルをさらに記憶し、前記メモリ区画と書き込み属性および読み込み属性とを対応づけることが特徴であるアクセス禁止属性テーブルをさらに記憶し、前記アクセス許可手段は、前記メモリ区画のアクセス属性を前記アクセス許可属性テーブルを参照して設定するようにし、前記アクセス禁止手段は、前記メモリ区画のアクセス属性を前記アクセス禁止属性テーブルを参照して設定するようにすることが好ましい。
【００５０】
これによれば、プロセッサが割り込みを受け付け、前記割り込みを処理する割り込みハンドラとしてハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性をアクセス許可属性テーブルを参照してアクセス許可に設定し、前記ハイパーバイザがオペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラは割り込み処理を行った後、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、アクセス禁止属性テーブルを参照して前記アクセス許可に設定した前記メモリ区画のアクセス属性を設定する。そして、復帰しようとする位置に関わらず、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００５１】
したがって、オペレーティングシステムの割り込みハンドラを実行する前に、前記メモリ区画ごとにアクセス許可属性テーブルを参照してアクセス属性が設定されるため、たとえば前記カーネルを複数のセクションに分け、それらセクションを前記メモリ区画と対応して配置することによって、前記カーネルを前記セクション単位で書き込み属性と読み込み属性とを設定でき、前記オペレーティングシステムの割り込みハンドラを実行しているときに書き込み許可かつ読み込み許可であるメモリ区画を提供できる。
【００５２】
また、オペレーティングシステムの割り込みハンドラが割り込み処理を終えた後に、前記メモリ区画ごとにアクセス禁止属性テーブルを参照してアクセス属性が設定されるため、たとえば前記カーネルを複数のセクションに分け、それらセクションを前記メモリ区画と対応させることによって、前記カーネルを前記セクション単位で書き込み属性と読み込み属性とを設定でき、前記オペレーティングシステムの割り込みハンドラの割り込み処理が終わり、通常のプログラムが実行されているときに書込み禁止かつ読み込み許可であるメモリ区画を提供できる。
【００５３】
また、上記のカーネル保護装置において、前記アクセス許可テーブルに代わり拡張アクセス許可テーブルを記憶し、前記拡張アクセス許可テーブルは、割り込み要因およびメモリ区画と書き込み属性および読み込み属性とを対応付けることが特徴であり、前記アクセス許可手段は、メモリ区画の書き込み属性および読み込み属性を、前記拡張アクセス許可テーブルのうち、割り込み要因が処理中の割り込み要因と一致する部分を参照して、設定することが好ましい。
【００５４】
これによれば、プロセッサが割り込みを受け付け、前記割り込みを処理する割り込みハンドラとしてハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性を拡張アクセス許可属性テーブルを参照してアクセス許可に設定し、前記ハイパーバイザがオペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラは固有の割り込み処理を行った後、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、アクセス禁止属性テーブルを参照して前記アクセス許可に設定した前記メモリ区画のアクセス属性を設定する。そして、復帰しようとする位置に関わらず、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００５５】
したがって、割り込み要因に応じて、前記メモリ区画に対して書き込み属性と読み込み属性とを設定できる。これによって、たとえば周期タイマーが割り込み要因のときには書き込み許可で、その他の割り込み要因のときは書き込み禁止であるメモリ区画を提供できる。
【００５６】
また、上記のカーネル保護装置において、ハイパーバイザを他のプログラムから呼び出すための呼出手段をさらに備え、ハイパーバイザがコマンドに従ってメモリ区画の書き込み属性と読み込み属性とを設定する設定手段をさらに備え、前記コマンドはメモリ範囲と書き込み属性と読み込み属性とを含むことが特徴であってもよい。
【００５７】
これにおいて、実行時に前記呼出手段を用いて、前記カーネルが前記ハイパーバイザを呼び出し、前記ハイパーバイザがコマンドに従ってメモリ保護機構を操作する。前記コマンドは前記カーネルが動的に生成できるため、したがって、前記カーネルの状態に応じた柔軟なメモリ保護を行う手段を提供できる。
【００５８】
また、上記のカーネル保護装置において、前記ＯＳモードから書き込み可能であり、前記ハイパーバイザから読み込み可能であることを特徴とするコマンドバッファをさらに備え、前記コマンドバッファはメモリ区画およびアクセス属性を指定する情報を含むコマンドがゼロまたは１つ以上格納されることが特徴であり、前記コマンドバッファのコマンドに従って処理を行う任意アクセス適用手段をさらに備えてもよい。
【００５９】
これによれば、プロセッサが割り込みを受け付け、前記割り込みを処理する割り込みハンドラとしてハイパーバイザが実行され、前記ハイパーバイザがメモリ区画のアクセス属性を拡張アクセス許可属性テーブルを参照してアクセス許可に設定し、前記ハイパーバイザがオペレーティングシステム固有の割り込み処理のためにオペレーティングシステムの割り込みハンドラを実行する。前記オペレーティングシステムの割り込みハンドラは固有の割り込み処理を行っているときに、前記コマンドバッファにゼロまたは複数のコマンドを書き込み、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に遷移するべき動作モードと、当該オペレーティングシステムの割り込みハンドラの実行が終了した後に実行されるべき命令位置とともに復帰手段を用いる。復帰手段が用いられると、前記ハイパーバイザに制御が移る。そして、前記復帰手段によって前記メモリ区画以外の位置に復帰しようとしているのであれば、アクセス禁止属性テーブルを参照して前記アクセス許可に設定した前記メモリ区画のアクセス属性を設定する。そして、復帰しようとする位置に関わらず、前記コマンドバッファに書き込まれた複数のコマンドを解釈して処理し、プロセッサの動作モードを前記復帰手段に与えられた動作モードに遷移し、前記復帰手段に与えられた命令位置から実行を継続する。
【００６０】
したがって、前記ハイパーバイザは、ハイパーバイザ呼び出しの手間を掛けることなく、前記オペレーティングシステムの割り込みハンドラから一度に複数のコマンドを受け取ることができる。これによって、複数回のハイパーバイザが呼び出しに掛かるオーバーヘッドをなくし、処理を効率化する手段を提供できる。また、たとえばカーネルを本発明などによって保護し、さらに前記メモリ区画にユーザプログラムを配置しておくことによって、前記カーネルからの指示に基づいた前記ユーザプログラムを保護する手段を提供できる。
【００６１】
以下、本発明のコンピュータとカーネル保護方法並びにコンピュータソフトウエアの一実施の形態によるカーネル保護装置、カーネル保護方法及びカーネル保護プログラムについて図面を参照しながら説明する。
【００６２】
（実施の形態１）
図１は、本発明の実施の形態１におけるカーネル保護装置の構成を示す図である。ここでは、ＶＴ−ｘ技術を搭載したＩＡ−３２アーキテクチャのプロセッサ（以下ＶＴ−ｘプロセッサと呼ぶ）とＬｉｎｕｘオペレーティングシステムの場合を例に説明する。なお、本発明は、ＳＨ−４Ａアーキテクチャのプロセッサなど、ＶＴ−ｘプロセッサ以外のプロセッサに用いてもよい。また、本発明は、ＵＮＩＸ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）やトロン（登録商標）など、Ｌｉｎｕｘ以外のオペレーティングシステムに用いてもよい。
【００６３】
図１に示すカーネル保護装置は、プロセッサ１０１としてＶＴ−ｘプロセッサ、メモリ１０８、メモリ保護機構１１２としてメモリ管理ユニットおよびシステムレジスタ群１１１を備えて構成される。メモリ１０８としては、例えばＲＡＭ（ランダムアクセスメモリ）やフラッシュメモリのような任意の方式のメモリを使用することができる。また、メモリ１０８は、単一のメモリモジュールで構成されている必要はなく、同種の複数のメモリ又はＲＯＭ（読み込み専用メモリ）を含む、異なる種類のメモリの組み合わせであってもよい。プロセッサ１０１とメモリ１０８とメモリ保護機構１１２とは、相互にデータを送受信することが可能である。システムレジスタ群１１１はプロセッサ１０１とデータを送受信することができる。
【００６４】
メモリ１０８には、カーネルが使用するカーネルメモリ領域１０９が割り当てられている。Ｌｉｎｕｘにおいては、一般に仮想アドレス空間における２ＧＢ以上の領域がカーネル領域である。ただし、必ずしも全域を保護する必要はなく、本発明によって保護したい部分を対象とすればよい。また、メモリ１０８にはカーネルメモリ領域１０９以外のメモリ領域が含まれてもよく、たとえば、Ｌｉｎｕｘにおいては２ＧＢ以下の空間はユーザプロセスに供されるのが一般的である。
【００６５】
カーネルメモリ領域１０９は、書き込み属性情報１１０を備えている。書き込み属性情報１１０は、カーネルメモリ領域１０９に対する書き込みが許可されているのか禁止されているのかを表わす情報である。例えば、メモリ保護機構としてページング機構を持つメモリ管理ユニットを用いる場合は、カーネルメモリ領域１０９に対応するページエントリのアクセス設定が書き込み属性情報となる。なお、本発明の実施はページング方式以外にも、セグメント方式や、またはメモリ管理ユニットと別に追加のメモリを保護する装置によって実現してもよい。
【００６６】
メモリ保護機構１１２は、カーネルメモリ領域１０９への書き込みの管理を行う。カーネルメモリ領域１０９への書き込みが行われると、メモリ保護機構１１２は、書き込み属性情報１１０に基づいて書き込みを制御する。例えば、書き込み属性情報１１０が書き込み許可に設定されているとき書き込みが行われると、書き込みを許可し、書き込み属性情報１１０が書き込み禁止に設定されているとき書き込みが行われると、エラーを発生する。たとえば、メモリ保護機構１１２としてメモリ管理ユニットを利用する場合には、アクセスをページ単位で制御でき、禁止された操作が行われた場合には、プロセッサで例外が発生する。
【００６７】
システムレジスタ群１１１は、図２が示すように、動作モード保存レジスタ２０１、再開位置保存レジスタ２０２、動作モード指定レジスタ２０３、再開位置指定レジスタ２０４から構成される。
【００６８】
動作モード保存レジスタ２０１は、プロセッサ１０１が割り込みを受け付けたときに、それまでの動作モードを保存する記憶域である。再開位置保存レジスタ２０２は、プロセッサ１０１が割り込みを受け付けたときに、それまで実行していたプログラムを再開するための、それまで実行していたプログラムの命令位置を保存するための記憶域である。たとえば、ＶＴ−ｘプロセッサの場合は、ＶＭＣＳ（仮想マシン制御構造）と呼ばれるデータ中に、割り込み受け付け時点での動作モードと命令アドレスを格納する領域があり、本発明の動作モード保存レジスタ２０１、再開位置保存レジスタ２０２に相当する。
【００６９】
動作モード指定レジスタ２０３は、復帰手段に対して、復帰後の動作モードを指定する記憶域である。再開位置指定レジスタ２０４は、復帰手段に対して、復帰後のプログラム実行アドレスを指定する記憶域である。たとえば、ＶＴ−ｘプロセッサ場合、割り込み処理からの復帰にはＩＲＥＴ命令が通常使用されるが、ＩＲＥＴ命令はスタックに積んである値を復帰後の動作モードおよび実行位置として使用するため、前記スタックが動作モード指定レジスタ２０３および再開位置指定レジスタ２０４に相当する。
【００７０】
動作モード保存レジスタ２０１および再開位置保存レジスタ２０２は、必ずしもメモリに存在する必要はなく、レジスタとしてハードウェアで構成してもよい。
【００７１】
プロセッサ１０１は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているカーネル保護プログラムが実行されることによって、割り込み受付部１０２、書き込み許可設定部１０３、カーネル実行部１０４、復帰介入部１０５、書き込み禁止設定部１０６および割り込み処理完了部１０７として機能する。
【００７２】
割り込み受付部１０２は、プロセッサ１０１に対して割り込み要求があるときに、当該割り込み要求を受け付け、ハイパーバイザモードへ遷移し、割り込み受け付け前の動作モードを動作モード保存レジスタ２０１に格納し、そのとき実行中のプログラムを再開するためのアドレスを再開位置保存レジスタ２０２に格納し、割り込みハンドラを呼び出す。割り込みハンドラは、ハイパーバイザに含まれるルーチンであり、予め設定されている。なお、ＶＴ−ｄプロセッサにおいては、ＶＭＸ  ｒｏｏｔモードがハイパーバイザモードに相当する。
【００７３】
書き込み許可設定部１０３は、書き込み属性情報１１０を書き込み許可に設定し、カーネル実行部１０４を呼び出す。たとえば、メモリ管理ユニットをメモリ保護機構１１２として利用している場合には、カーネル空間に対するページテーブルエントリの内容を書き込み許可に設定する。したがって、ハイパーバイザは、カーネルを保護するために、「どのページテーブルエントリを操作するべきか」は予め与えられている必要があるが、保護の対象となるカーネルの詳細を認識する必要はない。
【００７４】
カーネル実行部１０４は、プロセッサ１０１の動作モードをカーネルモードに遷移させるとともに、オペレーティングシステムの割り込みハンドラへ制御を移す。ＶＴ−ｘプロセッサにおいては、イベントインジェクション（ＥｖｅｎｔＩｎｊｅｃｔｉｏｎ）と呼ばれる機能を用いて、処理中の割り込みを「再現」するか、またはイベントインジェクションに代わる処理をソフトウェアで実現してもよい。一般に、ハイパーバイザから別のプログラムを実行する方法はいくつもあり、本発明では任意の方法を用いてよい。なお、ＶＴ−ｄプロセッサにおいては、ＶＭＸ  ｎｏｎ−ｒｏｏｔモードのｒｉｎｇ  ０がカーネルモードに相当する。
【００７５】
復帰介入部１０５は、プロセッサ１０１の動作モードをハイパーバイザモードへ遷移させ、書き込み禁止設定部を実行する。ＶＴ−ｘプロセッサにおいては、ＩＲＥＴ命令が相当する。ＶＴ−ｘプロセッサにおけるＩＲＥＴ命令は、通常、割り込み処理の最後に実行され、ハイパーバイザが呼び出されるため、本発明における復帰手段および復帰介入部に相当する機能を持つ。
【００７６】
書き込み禁止設定部１０６は、再開位置指定レジスタ２０４に格納されている位置がカーネルメモリ領域１０９に含まれない場合には、書き込み属性情報１１０を書き込み禁止に設定し、割り込み処理完了部１０７を呼び出す。再開位置指定レジスタ２０４に格納されている位置がカーネルメモリ領域１０９に含まれる場合には、単に割り込み処理完了部１０７を呼び出す。たとえば、ＶＴ−ｘプロセッサとメモリ管理ユニットを利用し、Ｌｉｎｕｘカーネルを保護する場合には、ＩＲＥＴ命令のパラメタである、Ｌｉｎｕｘカーネルのスタック上の値が再開位置指定レジスタ２０４に相当するため、その値がＬｉｎｕｘカーネルを指しているかを判断し、Ｌｉｎｕｘカーネルを指している場合にはカーネル領域に対応するページテーブルエントリを書き込み許可に設定する。
【００７７】
割り込み処理完了部１０７は、動作モード指定レジスタ２０３に格納されている動作モードへプロセッサ１０１を遷移させ、再開位置指定レジスタ２０４に格納されている位置のプログラムから動作を再開する。たとえば、ＶＴ−ｘプロセッサにおいて、動作モード指定レジスタ２０３および再開位置指定レジスタ２０４に相当するのは、ＩＲＥＴ命令のパラメタであるＬｉｎｕｘカーネルのスタック上の値であり、ＶＴ−ｘのＶＭＥＮＴＥＲ命令を用いて、実行を再開する。再開時の動作モードと再開時の命令アドレスは、前記Ｌｉｎｕｘカーネルのスタックに積まれている値を用いる。
【００７８】
次に、本発明の実施の形態１におけるカーネル保護装置の動作について説明する。図３と図４は、本発明の実施の形態１におけるカーネル保護装置の処理手順について説明するためのフローチャートである。ユーザプログラムからのシステムコールや外部装置からの入出力完了になどよる割り込み要求がプロセッサ１０１に対して行われた場合に、本発明の実施の形態１におけるカーネル保護装置は、図３に示す割り込み処理を開始する。
【００７９】
プロセッサ１０１は、割り込み受付部（割り込み受付部１０２）が割り込み要求を受け付け（ステップＳ３００）ると、ハイパーバイザ用のモードへ遷移（ステップＳ３０１）し、当該割り込みを受け付ける前のプロセッサ１０１の動作モードを動作モード保存レジスタに格納（ステップＳ３０２）し、当該割り込みを受け付ける前に実行していたプログラムを再開するための位置を再開位置保存レジスタに格納（ステップＳ３０３）し、カーネルメモリ領域１０９の書き込み属性情報１１０を書き込み許可に設定（ステップＳ３０４）し、カーネル用のモードに遷移しカーネルのＩＳＲを実行（ステップＳ３０５）する。
【００８０】
その後、前記ＩＳＲの処理が終了したとき、復帰手段が用いられる。復帰手段は復帰処理を開始（ステップＳ４００）し、プロセッサ１０１をハイパーバイザ用のモードへ遷移（ステップＳ４０５）し、再開位置保存レジスタ２０２の内容がカーネルメモリ領域内か判断（ステップＳ４０１）し、領域内でない場合には、カーネルメモリ領域の書き込み属性を書込み禁止に設定（ステップＳ４０２）し、動作モード保存レジスタ２０１に格納されている動作モードに遷移（ステップＳ４０３）し、再開位置保存レジスタ２０２に格納されている位置から実行を続ける（ステップＳ４０４）。一方、カーネルメモリ領域内か判断（ステップＳ４０１）した結果がカーネルメモリ領域内であった場合には、ステップＳ４０２を実行せず、格納されている動作モードに遷移（ステップＳ４０３）し、再開位置保存レジスタ２０２に格納されている位置から実行を続ける（ステップＳ４０４）。
【００８１】
次に、正常にカーネルメモリ領域が使用される場合を説明する。説明のために、最初にアプリケーションプログラムが実行中であるものとする。このとき、プロセッサ１０１はユーザモードで動作しており、メモリにはカーネルとアプリケーションプログラムが記憶されているものの、メモリ管理ユニットによって、カーネルメモリ領域へのアクセスは禁止されているため、アプリケーションプログラムのメモリ空間にカーネルは存在しない。アプリケーションプログラムはプロセスに割り当てられたメモリ領域だけを使用して処理を行っている。
【００８２】
ここで外部デバイス、たとえば周期タイマーから割り込みが発生したとする。このとき、ＶＴ−ｘプロセッサは、ハイパーバイザモードに遷移し、予め設定されたハイパーバイザの割り込みハンドラを実行する。前記割り込みハンドラは、周期タイマーの割り込みをカーネルに処理させるために、まずカーネルメモリ領域に対応するページテーブルエントリの書き込み属性を書き込み許可に設定し、カーネルメモリ領域への書き込みを可能にする。その後、カーネルのＩＳＲを実行し、周期タイマーの割り込みを処理させる。
【００８３】
カーネルのＩＳＲの処理の中には、当然カーネルメモリ領域に対する書き込み操作が含まれていると考えられるが、この時点でカーネルメモリ領域に対する書き込みは許可されており、正常に実行できる。ここでは、実行中に、割り込みによってプログラムの実行が中断されなかったとする。カーネルのＩＳＲは割り込み処理を終えると、通常実行される割り込み復帰手段として、ＩＲＥＴ命令を実行する。このとき、カーネルのスタックには、ＩＲＥＴ命令のために、動作モード指定レジスタ２０３と、セグメントとして再開位置指定レジスタ２０４とが記憶されている。ここでは、説明のために、アプリケーションプログラムの実行を再開するように動作モードと命令位置が指定されたものとし、具体的には、動作モードとしてユーザモードと、命令位置として２ＧＢ以下のアドレス、つまりカーネルメモリ領域以外が指定されたとする。
【００８４】
ＩＲＥＴ命令が実行されると、ＶＴ−ｘプロセッサは、ＩＲＥＴ命令を復帰手段および復帰介入部として機能させ、ハイパーバイザを実行する。ハイパーバイザは、前記カーネルのスタックから、動作モードと命令位置の情報を得る。この例では、前記命令位置がカーネルメモリ領域内にないため、ハイパーバイザはカーネルメモリ領域の書き込み属性を書込み禁止にする。最後に、ハイパーバイザは、前記動作モードに遷移し、前記命令位置の命令を実行することで、アプリケーションプログラムの実行が再開する。
【００８５】
次に、アプリケーションプログラムがなんらかの原因によりカーネルモードで動作し、カーネルメモリ領域に書き込もうとする場合を説明する。説明のために、アプリケーションプログラムはすでにカーネルモードで動作しているものとする。
【００８６】
しかしながら、本発明の実施の形態１においては、カーネルメモリ領域が可能かどうかは、オペレーティングシステムではなくハイパーバイザが割り込みに介入したときに決定される。したがって、カーネルモードで動作したからといって、カーネルメモリ領域に書き込み可能になるわけではなく、アプリケーションプログラムが書き込みを行ったときには例外が発生する。
【００８７】
ここで外部デバイス、たとえば周期タイマーから割り込みが発生したとする。このとき、ＶＴ−ｘプロセッサは、ハイパーバイザモードに遷移し、予め設定されたハイパーバイザの割り込みハンドラを実行する。前記割り込みハンドラは、周期タイマーの割り込みをカーネルに処理させるために、まずカーネルメモリ領域に対応するページテーブルエントリの書き込み属性を書き込み許可に設定し、カーネルメモリ領域への書き込みを可能にする。その後、カーネルのＩＳＲを実行し、周期タイマーの割り込みを処理させる。
【００８８】
カーネルのＩＳＲは割り込み処理を終えると、前記カーネルモードで動作しているアプリケーションプログラムを再開するために、ＩＲＥＴ命令を実行する。ＩＲＥＴ命令が実行されると、ＶＴ−ｘプロセッサは、ＩＲＥＴ命令を復帰手段および復帰介入部として機能させ、ハイパーバイザを実行する。ハイパーバイザは、再開する命令位置がカーネルメモリ領域内にないため、カーネルメモリ領域の書き込み属性を書込み禁止にする。
【００８９】
ハイパーバイザがカーネルメモリ領域を書き込み許可に設定し、カーネルのＩＳＲを実行してから、復帰手段によってハイパーバイザが再び実行され、カーネルメモリ領域が書込み禁止になるまでの間、前記カーネルモードで動作しているアプリケーションプログラムが介入することはできない。したがって、アプリケーションプログラムが、カーネルメモリ領域が書き込み許可の間に、カーネルメモリ領域に対して書き込みを行うことは不可能であり、もし書き込みを行った場合にはメモリ管理ユニットによる例外が発生する。
【００９０】
また、アプリケーションプログラムがカーネルモードで動作しているときに、メモリ管理ユニットを直接操作して、カーネルメモリ領域に対応するページテーブルエントリを書き換えることができれば、カーネルメモリ領域へ書き込むことが可能になる。しかしながら、メモリ管理ユニットはハイパーバイザによって管理されるものであるため、たとえカーネルモードであっても直接操作することはできず、操作しようとした場合には、その操作の検証のためにハイパーバイザが実行される。したがって、ハイパーバイザは、カーネルメモリ領域に対応するページテーブルエントリの書き換えを検査することができ、カーネル以外からの操作を禁止できる。さらに、Ｌｉｎｕｘのように、カーネルが利用するメモリ領域は固定されている場合には、カーネルメモリ領域に対応するページテーブルエントリへの操作を、ハイパーバイザが一律に禁止することによって、より強い保護を実現できる。
【００９１】
本発明の実施の形態１におけるカーネル保護装置は、カーネルの割り込みハンドラが実行されている間のみ、メモリ管理ユニットを操作してカーネルメモリ領域を書き込み可能にする。たとえばＶＴ−ｄプロセッサとＬｉｎｕｘオペレーティングシステムにおいては、割り込みが発生してから、カーネルのＩＳＲによってＩＲＥＴ命令が実行されるまでの間のみ、カーネルメモリ領域が書き込み許可になる。アプリケーションプログラムがカーネルメモリ領域に書き込もうとした場合には、メモリ保護機構によって阻止される。
【００９２】
従来技術では、ハイパーバイザによって、ハイパーバイザをオペレーティングシステムから保護したり、複数のオペレーティングシステム間で干渉しないように保護したりすることは実現されていた。しかしながら、オペレーティングシステムの内部の動作にハイパーバイザが関係することはないため、オペレーティングシステムが実施するカーネルの保護手段が一度破られると、カーネルが信頼できなくなってしまうという課題があった。
【００９３】
本発明の実施の形態１におけるカーネル保護装置は、ハイパーバイザがカーネルの保護を行う。したがって、オペレーティングシステムによるカーネルの保護が破られた場合でも、カーネルを信頼して実行することができる。
【００９４】
一方で、オペレーティングシステムの内部構造にあわせてハイパーバイザを開発し、オペレーティングシステムの動作にあわせてハイパーバイザが動作することで、ハイパーバイザがオペレーティングシステムのカーネルのみ保護することは実現できると考えられる。しかしながら、そのようなハイパーバイザはオペレーティングシステム固有になり移植性が損なわれ、また、複雑なカーネルの構造と動作にハイパーバイザを合わせることで、ハイパーバイザを複雑にし、結果としてハイパーバイザ自体の信頼性を損なう虞があり、システム全体の信頼性を損なってしまう。
【００９５】
本発明の実施の形態１におけるカーネル保護装置では、ハイパーバイザがカーネルについて必要な情報はカーネルメモリ領域（メモリ管理ユニットを利用する場合はページテーブルエントリ）についてのみである。カーネルの内部構造や、動作について、ハイパーバイザが知る必要はない。また、カーネルにおいては、カーネルメモリ領域として保護する範囲にも依存するが、ハイパーバイザのために構造を大きく改変する必要がない。
【００９６】
また、カーネル以外がメモリ管理ユニットを直接操作できれば、カーネルメモリ領域へ書き込むことが可能になってしまうが、メモリ管理ユニットおよびページテーブルは、ハイパーバイザの基本的な動作のためにハイパーバイザが管理しており、そのようなカーネルメモリ領域への書き込みの虞のある操作を行われた場合には、その操作を禁止できる。また、カーネルメモリ領域を、オペレーティングシステムにおいて操作しないのであれば、ハイパーバイザはカーネルメモリ領域に対応するページテーブルエントリへの操作を一律に禁止してもよい。
【００９７】
したがって、ハイパーバイザがカーネルに依存することなく、カーネルメモリ領域を保護することができ、オペレーティングシステムの堅牢性を高めることができる。
【００９８】
（実施の形態２）
ここでは、ＩＴＲＯＮ仕様オペレーティングシステムの場合を例に説明する。なお、構成や動作は本発明の実施の形態１と同じであるため、省略する。
【００９９】
ＩＴＲＯＮ仕様オペレーティングシステムにおいては、カーネルとタスク（アプリケーションプログラム）が明確に区別されない。具体的には、カーネルとタスクは共通のメモリ空間で動作し、タスクはカーネルモードで動作することが一般的であり、カーネルとタスクのプログラムは同一のバイナリイメージにまとめられる。したがって、カーネルだけを抽出して保護することが難しい。
しかしながら、コンパイラの機能などによって、特定の命令列やデータ領域を一箇所のメモリ領域にカーネルメモリ領域相当としてまとめ、本発明によって保護することによって、前記メモリ領域が割り込み処理部分以外で書き換えられないことを保証できる。たとえば、ウォッチドッグタイマなどを保護しておくことによって、オペレーティングシステムの信頼性を高めることができる。なお、本実施例の対象となる命令列およびデータは、独立性の高い部分に限らず、利用者にとって有用である任意の情報に適用できる。
【０１００】
（実施の形態３）
図５は、本発明の実施の形態３におけるカーネル保護装置の構成を示す図である。図５に示すカーネル保護装置は、プロセッサ１０１、メモリ１０８、メモリ保護機構１１２およびシステムレジスタ群１１１を備えて構成される。
【０１０１】
図５において、図１と同じ構成要素については同じ符号を用い、説明を省略する。図５において、図１と異なる個所は、プロセッサ１０１に含まれるアクセス許可設定部５０１、アクセス禁止設定部５０２と、メモリ１０８に含まれるメモリ区画＃１（５０３）、メモリ区画＃２（５０４）、メモリ区画＃Ｎ（５０５）、アクセス属性情報＃１（５０６）、アクセス属性情報＃２（５０７）、およびアクセス属性情報＃Ｎ（５０８）である。
【０１０２】
プロセッサ１０１は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているカーネル保護プログラムが実行されることによって、割り込み受付部１０２、アクセス許可設定部５０１、カーネル実行部１０４、復帰介入部１０５、アクセス禁止設定部５０２および割り込み処理完了部１０７として機能する。
【０１０３】
メモリ区画＃１（５０３）は、メモリ領域の一部であり、メモリ区画＃２（５０４）からメモリ区画＃Ｎ（５０５）までも同様である。また、アクセス属性情報＃１（５０６）は、メモリ区画＃１（５０３）と対応し、書き込み許可か書込み禁止かと、読み込み許可か読み込み禁止かとを表し、アクセス属性情報＃２（５０７）からアクセス属性情報＃Ｎ（５０８）までも同様である。
【０１０４】
アクセス許可設定部５０１は、図６に示すアクセス許可属性テーブル１４０１の情報に基づき、アクセス許可属性＃１の内容をアクセス属性情報＃１（５０６）に設定し、同様にアクセス許可属性＃２からアクセス許可属性＃Ｎについても、それぞれアクセス属性情報＃２（５０７）からアクセス属性情報＃Ｎ（５０８）に設定する。
【０１０５】
アクセス禁止設定部５０２は、図６に示すアクセス許可属性テーブル１４０１の情報に基づき、アクセス禁止属性＃１の内容をアクセス属性情報＃１（５０６）に設定し、同様にアクセス禁止属性＃２からアクセス禁止属性＃Ｎについても、それぞれアクセス属性情報＃２（５０７）からアクセス属性情報＃Ｎ（５０８）に設定する。
【０１０６】
次に、本発明の実施の形態３におけるカーネル保護装置の動作について説明する。図７および図８は、本発明の実施の形態３におけるカーネル保護装置の処理手順について説明するためのフローチャートである。図７および図８において、図３および図４と同じ構成要素については同じ符号を用い、説明を省略する。図７において、図３と異なる個所は、ステップＳ６０１である。図８において、図４と異なる個所は、ステップＳ７０１である。
【０１０７】
本発明の実施の形態３におけるカーネル保護装置は、ステップＳ６０１において、図６に示すアクセス許可属性テーブル１４０１の情報に基づき、アクセス許可属性＃１の内容をアクセス属性情報＃１（５０６）に設定し、同様にアクセス許可属性＃２からアクセス許可属性＃Ｎについても、それぞれアクセス属性情報＃２（５０７）からアクセス属性情報＃Ｎ（５０８）に設定する。
【０１０８】
本発明の実施の形態３におけるカーネル保護装置は、ステップＳ７０１において、図６に示すアクセス許可属性テーブル１４０１の情報に基づき、アクセス禁止属性＃１の内容をアクセス属性情報＃１（５０６）に設定し、同様にアクセス禁止属性＃２からアクセス禁止属性＃Ｎについても、それぞれアクセス属性情報＃２（５０７）からアクセス属性情報＃Ｎ（５０８）に設定する。
【０１０９】
本発明の実施の形態３におけるカーネル保護装置は、図７のステップＳ６０１で、メモリ区画ごとにアクセス属性を設定する。このため、たとえば、カーネルのＩＳＲの実行中において、読み込みを許可し、書き込みを禁止する区画を提供することができる。このような区画に適切な例として、命令列や定数を記憶する区画などがある。特に命令列については、不正に書き換えられた場合の影響が大きいため、本発明の実施の形態３によって厳密に保護するほうが好ましい。
【０１１０】
また、本発明の実施の形態３におけるカーネル保護装置は、図８のステップＳ７０１で、メモリ区画ごとにアクセス属性を設定する。このため、たとえば、カーネルのＩＳＲの処理が終了し、アプリケーションプログラムが動作しているときに、アプリケーションプログラムから書き込み禁止で読み込み可能なメモリ区画を提供できる。このような区画として適切な例として、時刻情報などを記録するメモリ領域がある。時刻情報を読み込みのみ許可された領域に記録しておくことで、当該領域を書き込みから保護しながら、アプリケーションプログラムが当該領域から時刻を直接取得することができる。一般に、カーネルの情報を取得するためにシステムコールが使用されるが、システムコールは処理量が多いため、本発明の実施の形態３におけるカーネル保護装置によって提供される、システムコールを経ずに情報を取得する方法を利用することで、プログラムを高速化できる。
【０１１１】
また、本発明の実施の形態３におけるカーネル保護装置は、図８のステップＳ７０１で、メモリ区画ごとにアクセス属性を設定する。このため、たとえば、カーネルのＩＳＲの処理が終了し、アプリケーションプログラムが動作しているときに、アプリケーションプログラムから書き込みも読み込みも禁止であるメモリ区画を提供できる。このような区画として適切な例として、カーネルが保持するセキュリティに関するメモリ領域、たとえばパスワードを格納したメモリなどがある。そのような領域は、正規の手順に拠らずにアプリケーションプログラムが読み込めるべきではなく、本発明の実施の形態３によって保護されることが好ましい。
【０１１２】
従来は、カーネルモードで動作するアプリケーションプログラムは、カーネルが保持するデータを制限なく読み込むことが可能だった。そのため、カーネルモードで動作することが許されたアプリケーションプログラムが、ウイルスなど悪性プログラムに制御を奪われた場合は、カーネルの重要な情報が悪性プログラムから利用可能になってしまっていた。本発明の実施の形態３によるカーネル保護装置によれば、アプリケーションプログラムの動作中に完全にアクセスを禁止する領域を提供することかでき、その領域に重要な情報を格納しておくことによって、やむを得ずカーネルモードで動かしたアプリケーションプログラムが悪性プログラムに制御を奪われた場合であっても、カーネルのデータを保護できる。
【０１１３】
本発明の実施の形態３におけるアクセス許可属性テーブル１４０１は、割り込み要因に関係なくアクセス属性情報を格納するものであるが、これを図９のように拡張し、割り込み要因ごとにアクセス許可属性テーブルを切り替えてもよい。
【０１１４】
この構成によれば、割り込み要因ごとにメモリ区画のアクセス属性情報を設定することができるため、たとえば、割り込み要因＃１では書き込み許可されている必要があるが、割り込み要因＃２では書き込み許可が不要であるメモリ区画について、割り込み要因＃２のときに書き込みを禁止することができる。
【０１１５】
たとえば、あるオペレーティングシステムではタイマー割り込みとソフトウェア例外でのみプロセス管理を行う場合、プロセス情報をあるメモリ区画Ａに集約し、タイマー割り込みとソフトウェア例外でのみメモリ区画Ａへの書き込みを許可することによって、プロセス情報を書き換えるプログラム部分を大幅に縮小することができ、したがって、プロセス管理の信頼性を高めることができる。
【０１１６】
（実施の形態４）
図１２は、本発明の実施の形態４におけるカーネル保護装置の構成を示す図である。図１２に示すカーネル保護装置は、プロセッサ１０１、メモリ１０８、メモリ保護機構１１２およびシステムレジスタ群１１１を備えて構成される。
【０１１７】
プロセッサ１０１は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているカーネル保護プログラムが実行されることによって、割り込み受付部１０２、書き込み許可設定部１０３、カーネル実行部１０４、復帰介入部１０５、アクセス適用部８０１、書き込み禁止設定部１０６および割り込み処理完了部１０７として機能する。図１２において、図５と同じ構成要素については同じ符号を用い、説明を省略する。図１２において、図５と異なる個所は、プロセッサ１０１に含まれるアクセス適用部８０１と、メモリ１０８に含まれるコマンドバッファ８０２である。
【０１１８】
メモリ区画＃１（５０３）は、メモリ１０８内の任意の領域であり、メモリ区画＃２（５０４）からメモリ区画＃Ｎ（５０５）までも同様である。
【０１１９】
コマンドバッファ８０２は、カーネルによって書き込み可能なメモリ領域であり、アクセス適用部８０１へのコマンドがゼロ個以上格納される。コマンドとは、たとえばメモリ区画の開始アドレス、メモリ区画の終了アドレス、およびアクセス属性情報などを含むデータである。
アクセス適用部８０１は、コマンドバッファ８０２の内容に従って、アクセス属性情報＃１（５０６）からアクセス属性情報＃Ｎ（５０８）までを設定する手段を備える。
【０１２０】
次に、本発明の実施の形態４におけるカーネル保護装置の動作について説明する。図１３は、本発明の実施の形態４におけるカーネル保護装置の処理手順について説明するためのフローチャートである。図１３において、図４と同じ構成要素については同じ符号を用い、説明を省略する。図１３において、図４と異なる個所は、ステップＳ９０１である。
【０１２１】
本発明の実施の形態４におけるカーネル保護装置は、ステップＳ９０１において、コマンドバッファ８０２に含まれるコマンドに従ってアクセス属性を設定し、ステップＳ４０４に移行する。
【０１２２】
本発明の実施の形態４におけるカーネル保護装置では、ステップＳ９０１で、カーネルの指示に基づいてアクセス属性を設定するため、本発明に係るメモリ保護装置の設定を前記カーネルが柔軟に制御することができる。これによって、たとえば、プロセスに関する情報を本発明の実施の形態４におけるカーネル保護装置に予め記憶させることなく、プロセスが使用するメモリ領域について保護できる。ただし、保護が正しいとするためには、カーネルが本発明の実施の形態４におけるカーネル保護装置に与える前記コマンドバッファに書かれたコマンドが正しい必要があるが、本発明の実施の形態３などによって、プロセス管理に関わるプログラム部分が十分に分離され、その品質が確保されていれば、前記カーネルが本発明の実施の形態４におけるカーネル保護装置に与えるコマンドは正しいとすることができ、したがって、本発明の実施の形態４におけるカーネル保護装置によって、プロセスの保護が支援できる。
【０１２３】
プロセス分離の従来技術として、オペレーティングシステムがプロセスを配置するメモリ領域を、２種類のセキュア領域とノンセキュア領域に区分し、セキュア領域で動作するプロセスに対してハイパーバイザなどが保護を実施することが容易に考えられる。しかしながら、カーネルの保護が破られた場合、セキュア領域に何を配置するかを決定するカーネルのプログラムが改変されている虞があり、セキュア領域に悪性プログラムが進入することも可能になってしまう。つまり、この例では少なくともセキュア領域およびノンセキュア領域を管理する部分と、プロセスを管理する部分とが本発明などによって保護されていることが必要である。
【０１２４】
また、本発明の実施の形態４におけるカーネル保護装置では、プログラムに指示を与える前記呼び出しの代わりとしてコマンドバッファ８０２を利用するため、複数の指示を一括して処理することができる。これによって、カーネルからハイパーバイザを呼び出す、一般に処理量が大きい処理を複数回行うことを避けることで、処理量を低減し、効率を高めることができる。
【０１２５】
（実施の形態５）
図１０は、本発明の実施の形態５におけるカーネル保護装置の構成を示す図である。図１０に示すカーネル保護装置は、プロセッサ１０１、メモリ１０８、メモリ保護機構１１２、およびシステムレジスタ群１１１を備えて構成される。
【０１２６】
次に、本発明の実施の形態５におけるカーネル保護装置の動作について説明する。図１１は、本発明の実施の形態５におけるカーネル保護装置の処理手順について説明するためのフローチャートである。図１１において、図３と同じ構成要素については同じ符号を用い、説明を省略する。図１１において、図３と異なる個所は、ステップＳ１２０１である。
【０１２７】
プロセッサ１０１は、ステップＳ３０３のあと、当該割り込みが復帰要求か否かを判断（ステップＳ１２０１）し、当該割り込みが復帰要求でない場合には、書き込み許可に設定（ステップＳ３０４）に移行する。ステップＳ１２０１において、当該割り込みが復帰要求である場合には、復帰処理を開始（ステップＳ４００）する。
【０１２８】
また、プロセッサ１０１は、ステップＳ４０３に代わり、退避レジスタに格納されている動作モードに遷移（ステップＳ１３０１）し、ステップＳ４０４に代わり、退避レジスタに格納されている位置から実行を続ける（ステップＳ１３０２）。
【０１２９】
本発明の実施の形態５におけるカーネル保護装置では、復帰手段の代替手段を提供する。これは、プロセッサにおいて通常用いられる復帰手続きが、本発明の復帰手段として適格でない場合に、より汎用的なソフトウェア例外などを用いて復帰手段を提供することで、より広い対象で本発明を利用可能にするものである。
【０１３０】
本発明に係るカーネル保護装置において、メモリへのアクセスを保護する手段は、メモリ管理ユニットに限らない。たとえば、メモリへのアクセスを制御する、ハイパーバイザからのみ操作可能な装置をメモリモジュールに付加することで、メモリアクセス制御を実現してもよい。
【０１３１】
本発明にかかるカーネル保護装置、カーネル保護方法及びカーネル保護プログラムは、ハイパーバイザを利用してカーネルの保護ができ、特に信頼性を必要とする組み込み機器などのシステムに有用である。
【０１３２】
また、本発明に係るカーネル保護装置、カーネル保護方法及びカーネル保護プログラムは、物理的なハードウェアで全て実現される必要はなく、たとえば仮想マシン環境などにおいては、仮想マシンを実現するソフトウェアに本発明に係るカーネル保護装置の機能を組み込み、ゲストオペレーティングシステムのカーネルを保護することもできる。
【０１３３】
また、本発明に係るカーネル保護装置、カーネル保護方法及びカーネル保護プログラムにおいて、ハイパーバイザとオペレーティングシステムは必ずしも分離されて提供される必要はなく、オペレーティングシステムの信頼性向上のために、本発明に係るハイパーバイザに相当するソフトウェアをオペレーティングシステムの一部として提供しても構わない。
【０１３４】
また、本発明に係るカーネル保護装置、カーネル保護方法及びカーネル保護プログラムは、コンピュータのみならず、各種家電機器、情報処理機器、携帯電話、又は産業機器などでも利用可能である。
【図面の簡単な説明】
【０１３５】
【図１】実施の形態１におけるカーネル保護装置の構成を示す図である。
【図２】実施の形態１におけるカーネル保護装置のシステムレジスタ群の構成を示す図である。
【図３】実施の形態１におけるカーネル保護装置の割り込み受付処理の手順を説明するフローチャートである。
【図４】実施の形態１におけるカーネル保護装置の割り込み復帰処理の手順を説明するフローチャートである。
【図５】実施の形態３におけるカーネル保護装置の構成を示す図である。
【図６】実施の形態３におけるアクセス許可属性テーブルとアクセス禁止属性テーブルを示す図である。
【図７】実施の形態３におけるカーネル保護装置の割り込み受付処理の手順を説明するフローチャートである。
【図８】実施の形態３におけるカーネル保護装置の割り込み復帰処理の手順を説明するフローチャートである。
【図９】実施の形態３における拡張アクセス許可属性テーブルを示す図である。
【図１０】実施の形態５におけるカーネル保護装置の構成を示す図である。
【図１１】実施の形態５におけるカーネル保護装置の割り込み受付処理の手順を説明するフローチャートである。
【図１２】実施の形態４におけるカーネル保護装置の構成を示す図である。
【図１３】実施の形態４におけるカーネル保護装置の割り込み復帰処理の手順を説明するフローチャートである。
【符号の説明】
【０１３６】
１０１  プロセッサ
１０２  割り込み受付部
１０３  書き込み許可設定部
１０４  カーネル実行部
１０５  復帰介入部
１０６  書き込み禁止設定部
１０７  割り込み処理完了部
１０８  メモリ
１０９  カーネルメモリ領域
１１０  書き込み属性情報
１１１  システムレジスタ群
１１２  メモリ保護機構
２０１  動作モード保存レジスタ
２０２  再開位置保存レジスタ
２０３  動作モード指定レジスタ
２０４  再開位置指定レジスタ
５０１  アクセス許可設定部
５０２  アクセス禁止設定部
５０３  メモリ区画１
５０４  メモリ区画２
５０５  メモリ区画Ｎ
５０６  アクセス属性情報１
５０７  アクセス属性情報２
５０８  アクセス属性情報Ｎ
８０１  アクセス適用部
８０２  コマンドバッファ
１４０１  アクセス許可属性テーブル
１４０２  アクセス禁止属性テーブル
１５０１  拡張アクセス許可属性テーブル
【図１】
2009009232.tif 000003
【図２】
2009009232.tif 000004
【図３】
2009009232.tif 000005
【図４】
2009009232.tif 000006
【図５】
2009009232.tif 000007
【図６】
2009009232.tif 000008
【図７】
2009009232.tif 000009
【図８】
2009009232.tif 000010
【図９】
2009009232.tif 000011
【図１０】
2009009232.tif 000012
【図１１】
2009009232.tif 000013
【図１２】
2009009232.tif 000014
【図１３】
2009009232.tif 000015