メモリ保護方法および情報処理装置
【課題】 信頼度が高いと判定された保護領域に対しては直接的なアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への直接的なアクセスを不正アクセスとして抑制するメモリ保護技術を提供する。
【解決手段】 メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスからメモリを保護するメモリ保護方法は、保護領域間の関係を定義する定義工程と、保護領域の間の関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、直接アクセス可能と判定された保護領域に対するアクセスが要求された場合に、直接アクセス可能と判定された保護領域に対する直接的なアクセスを許可し、直接アクセス不可と判定された保護領域への直接的なアクセスを禁止するメモリ管理工程とを有する。
【解決手段】 メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスからメモリを保護するメモリ保護方法は、保護領域間の関係を定義する定義工程と、保護領域の間の関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、直接アクセス可能と判定された保護領域に対するアクセスが要求された場合に、直接アクセス可能と判定された保護領域に対する直接的なアクセスを許可し、直接アクセス不可と判定された保護領域への直接的なアクセスを禁止するメモリ管理工程とを有する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はプログラムによる不正アクセスからメモリを保護するメモリ保護方法および情報処理装置に関する。
【背景技術】
【0002】
従来、プログラムによる不正アクセスからメモリを保護する方法としては、中央処理装置(CPU)の実行モードとメモリ管理装置(MMU)の機能とを連動させることが一般的であった。例えば、特権モードと非特権モード(もしくは複数のレベルを有する特権モード)の実行を区別するCPUを用いて、MMUの機能により特権モード(もしくは高特権モード)でアクセス可能な領域といずれの実行モードでもアクセス可能な領域とを設定する。これにより、非特権モードによる不正アクセスから特権モードでのみ使用することが可能なメモリ領域を設けることが出来る。この方法では、保護される領域を実行モードに依存せずに自由に設定することは出来ないが、組込みソフトウェアはすべてが特権モードで実行されることが多くある。
【0003】
同一の実行モードで実行されるプログラムによる不正アクセスからメモリを保護する方法としては、プログラムを一つ以上のモジュールに分割し、それぞれを固有の仮想アドレス空間に配置する方法が知られている。一般的に、異なる仮想アドレス空間に配置された機能モジュールは別のアドレス空間に配置されたメモリ領域に直接アクセスする(OS等を介さずにアクセスする)ことが出来ない。そのため、アドレス空間に配置されたモジュール間の不正アクセス(unauthorized access)を防ぐことが出来る。一方、この方法ではモジュール間の機能呼び出しに伴い異なるモジュールのデータにアクセスするためにはオペレーティングシステム(OS)の機能を利用する必要がある。OS内部では一般的にデータのコピーが行われるため、別モジュールのデータを直接アクセスする場合と比べて実行効率の面で劣る。
【0004】
単一アドレス空間で不正アクセスからメモリを保護する方法としては、単一アドレス空間を区分した領域とモジュールとの両方に識別子を用いる方法が知られている(例えば、特許文献1)。モジュールは自身の識別子と異なる識別子が付与された領域にはアクセスすることが許されていない。そこで、異なるモジュールにアクセスする際には特殊な空間切り替えプログラムを実行することでアクセス先の識別子をアクセス前にプログラムの識別子に変更する。さらに、アクセス後に元の識別子に復帰させることで機能呼び出し以外のアクセスを制限する。この場合、データへのアクセスはアドレス指定により直接行うことが可能であるが、機能呼び出しにおいて識別子に関する操作が必要なので直接的な関数コールにおけるデータ参照より実行効率の面で劣る。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−189633号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来、メモリ保護機能を利用する場合には、異なる保護領域に含まれるデータにアクセスする際に間接的な機能呼び出しを用いる必要があった。そのため、保護領域が異なる特定のモジュールからのアクセスを信頼できる場合でも、アクセス元のモジュールは間接的な機能呼び出しを用いなければならなかった。間接的な機能呼び出しは直接的な機能呼び出しよりも実行効率が低く、実行効率が低下するという問題があった。
【課題を解決するための手段】
【0007】
本発明はアクセス先のモジュールから信頼度が高いと判定されたモジュールからは直接的な手続き呼び出しおよびアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定されたモジュールからのアクセスは間接的な機能呼び出しを実行していない場合には不正アクセスとして検出し、間接的な機能呼び出しを実行している場合には正当なアクセスとして許可するメモリ保護技術を提供する。
【0008】
本発明の一つの側面にかかるメモリ保護方法は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
保護領域の間の関係を定義する定義工程と、
前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、信頼度が高いと判定された保護領域に対しては直接的なアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への直接的なアクセスを不正アクセスとして抑制するメモリ保護技術の提供が可能になる。
【図面の簡単な説明】
【0010】
【図1A】実施形態1の情報処理装置の構成を説明する図。
【図1B】実施形態1の情報処理装置の構成を説明する図。
【図1C】保護領域間の階層関係を説明するための図。
【図2】(a)単一アドレス空間上の保護領域の配置を説明するための図、(b)アクセス権管理テーブルの初期設定を説明するための図。
【図3】実施形態1における間接的な手続き呼び出しを実現する処理を説明するためのフローチャート。
【図4A】実施形態2の情報処理装置の構成を説明する図。
【図4B】例外時アクセス権管理テーブルの初期設定を示す図。
【図5】実施形態2の例外ハンドラを実行する処理のフローチャート。
【図6A】実施形態3の情報処理装置の構成を説明する図。
【図6B】図7のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する図。
【図7】保護領域以外への手続き呼び出しを間接的な手続き呼び出しに変換する処理を説明するフローチャート。
【図8】(a)保護領域階層関係定義テーブルを説明するための図、(b)例外時アクセス領域定義テーブルが保持する情報を示す図。
【図9A】アクセス識別子を有するアクセス権管理テーブルを説明するための図。
【図9B】アクセス制御ベクタを説明するための図。
【発明を実施するための形態】
【0011】
<実施形態1>
実施形態1における情報処理システムは情報処理装置1および情報処理装置2の二つの情報処理装置から構成される。情報処理装置1では検証対象プログラムから検証対象イメージを生成し、情報処理装置2では検証対象イメージを実行し検証する。
【0012】
図1Aに実施形態1にかかる情報処理装置1の構成を示す。中央処理装置(CPU)101は図1Aの情報処理装置1の全体を制御する。メモリ102は、変更を必要としないプログラムやパラメータを格納するROMや外部装置などから供給されるプログラムやデータを一時記憶するRAMから構成される。入出力インタフェース103は情報処理装置2との接続を確保する。システムバス104はCPU101、メモリ102、および入出力インタフェース103の各ユニットを通信可能に接続する。
【0013】
メモリ102上の検証対象プログラム105は不正アクセスを含む可能性があるプログラムであり、本実施形態ではモジュールA、モジュールB、モジュールC、モジュールDから構成されるとする。不正アクセスはプログラムの欠陥などにより発生するアクセスであり、意図通りに発生するアクセスは正当アクセス(authorized access)とする。検証対象プログラム105では、呼び出し元モジュールを信頼可能な場合の機能呼び出しは直接的な関数コールとして記述されているとする。それ以外の機能呼び出しは後述の間接的な手続き呼び出しとして記述されているとする。また、モジュール間のアクセスは機能呼び出しにおいてのみ必要とされるものとする。テーブル106(保護領域階層関係定義テーブル)は保護領域間の階層関係を定義する。プログラム(検証対象イメージ生成プログラム107)は検証対象イメージを生成する。
【0014】
図1Bに実施形態1にかかる情報処理装置2の構成を示す。情報処理装置2は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスからメモリを保護することが可能である。中央処理装置(CPU)111は情報処理装置2の全体を制御する。メモリ112は、変更を必要としないプログラムやパラメータを格納するROMや情報処理装置1から供給されるプログラムやデータを一時記憶するRAMから構成される。メモリ管理装置としてのメモリ管理ユニット113はCPU101から他のユニットへ要求されたアクセスの正当性を判断する。メモリ管理ユニット113はMemory Management Unit (MMU)あるいはMemory Protection Unit(MPU)であり、CPU111に内蔵されていてもよい。メモリ管理ユニット113はアクセス権管理テーブル119を参照して、CPU111からメモリ112へのアクセスを許可あるいは制限する。アクセス権管理テーブル119はメモリ112上に配置されてもよい。メモリ管理ユニット113は、CPU111からのアクセス要求を受けると、アクセス先アドレスに対応するエントリをアクセス権管理テーブル119から検索し、アクセス可能な保護領域へのアクセスか、アクセス不可の保護領域へのアクセスかを判定する。メモリ管理ユニット113は、制限されたアクセスの要求を検出するとCPU111にその事象を伝達する。入出力インタフェース114は情報処理装置1との接続を確保する。ただし、入出力インタフェース114は検証対象イメージ116の実行中に割り込みを発生させることはない。システムバス115はCPU111、メモリ112、メモリ管理ユニット113、および入出力インタフェース114の各ユニットを通信可能に接続する。
【0015】
メモリ112上の検証対象イメージ116は情報処理装置1から渡される。オペレーティングシステム117はメモリ管理ユニット113の初期設定を行う。初期アクセス権保持テーブル118はアクセス権管理テーブル119の初期設定値を保持する。
【0016】
図1Cに保護領域間の階層関係を概念的に示す。保護領域はモジュールのデータを保護するための領域である。例えば、モジュールA用の保護領域はモジュールAのデータを保護するための領域である。モジュールC用の保護領域はモジュールA用の保護領域とモジュールB用の保護領域とに包含され、モジュールA、B、C、D用の保護領域はオペレーティングシステムの保護領域に包含されているものとする。それ以外の関係(包含関係でない関係)は対等関係であるとする。保護領域が包含関係にある場合、包含する保護領域から被包含保護領域へのアクセスには不正アクセスは含まれないとする。それに対し、被包含保護領域から包含領域へのアクセスや対等関係にある保護領域へのアクセスには不正アクセスが含まれる可能性があるとする。
【0017】
図8(a)は図1Cに示した保護領域間の関係を定義する保護領域階層関係定義テーブル106を例示する図である。保護領域の階層関係を定義するには、保護領域の包含関係のみを保護領域階層関係定義テーブル106に記述する。記述されない保護領域間の関係は対等関係である。例えば、モジュールA用の保護領域とモジュールB用の保護領域の関係は対等関係である。
【0018】
まず、情報処理装置1における処理を説明する。情報処理装置1では検証対象イメージ生成プログラム107が保護領域階層関係定義テーブル106を参照して保護領域間の信頼関係を判定する。保護領域間の関係が包含関係である場合、被包含保護領域から包含保護領域に対しては信頼度が高いと判定し、包含保護領域から被包含保護領域に対しては信頼度が低いと判定する。それに対し、対等関係にある場合(包含関係でない場合)、互いの保護領域に対しては信頼度が低いと判定する。例えば、図1Cにおいては、オペレーティングシステム117用の保護領域121(包含保護領域)は他の全ての保護領域(被包含保護領域)を包含する。したがって、オペレーティングシステム117用の保護領域121は他のすべての保護領域から信頼度が高いと判定される。一方、モジュールA用の保護領域122とモジュールB用の保護領域123は対等関係にある。そのため、モジュールA用とモジュールB用の保護領域は、それぞれから信頼度が低いと判定される。
【0019】
検証対象イメージ生成プログラム107はさらに検証対象プログラム105をコンパイルし、検証対象イメージ116を生成する。コンパイル結果には検証対象イメージ116に関する単一アドレス空間上の配置情報が含まれる。検証対象イメージ、単一アドレス空間上の配置情報、保護領域間の信頼関係に関する判定結果は情報処理装置1から情報処理装置2に入出力インタフェース103および入出力インタフェース114経由で渡される。
【0020】
次に、情報処理装置2における処理を説明する。情報処理装置2では検証対象イメージ116の単一アドレス空間上の配置情報と保護領域の信頼関係の判定結果を、OSの単一アドレス空間上の配置情報と併せて初期アクセス権保持テーブル118に保持する。
【0021】
図2(a)に、オペレーティングシステムおよび検証対象イメージに割り当てられた領域の単一アドレス空間上での配置例を示す。各モジュールの保護領域に割り当てられたアドレス範囲はそれぞれのプログラムに割り当てられたメモリ領域に対応する。例えば、オペレーティングシステム用の保護領域に対するアドレス範囲は0x0000から0x0FFFであり、オペレーティングシステム117に割り当てられたメモリ上の領域はこの範囲のアドレスによってのみアクセス可能である。
【0022】
図2(b)に、初期アクセス権保持テーブル118の例を示す。この初期設定により、信頼度が高いと判定された保護領域と、信頼度が低いと判定された保護領域と、の判定の結果をアクセス権管理テーブル119に格納する。この初期設定によれば、アクセス元のモジュールから信頼度が高いと判定された保護領域からのアクセスが許可され、信頼度が低いと判定された保護領域からのアクセスが制限される。
【0023】
信頼度が低いと判定された保護領域からのアクセスを情報処理装置2において実現するには間接的な手続き呼び出しを用いる。間接的な手続き呼び出しを用いれば、その手続き呼び出しを実行中においてのみ、信頼度が低いと判定された保護領域からのアクセスが可能になる。
【0024】
図3に、間接的な手続き呼び出しを実現する処理を示す。ここでは、モジュールAがモジュールBの手続きを間接的に呼び出す場合を例に処理の流れを説明する。まず、モジュールAの実行において間接的な手続き呼び出しが行われた場合、モジュールAは間接手続き呼び出しの処理としてモジュールA用の保護領域とモジュールB用の保護領域を一時的に融合(結合)する。これはステップS302において、モジュールAがアクセス権管理テーブル119の内容を書き換えることにより実現する。すなわち、アクセス先であるモジュールBの保護領域に割り当てられたアドレス範囲0x2800から0x2FFFに対するモジュールAからのアクセスに対するエントリをアクセス禁止からアクセス許可に書き換える。これによりモジュールAによるモジュールBへのアクセスが許可される。次に、ステップS303において、アクセス先のモジュールBが提供する所望の手続きをモジュールAが関数コールにより直接的に呼び出す。最後に、関数コールからのリターン後に、融合した保護領域をモジュールAが再度融合前の保護領域に分離する。これはステップS304において、アクセス権管理テーブル119を元の設定値に書き戻し、アドレス範囲0x2800から0x2FFFに対するモジュールAからのアクセスを禁止することで実現する。
【0025】
上述の保護領域の融合あるいは分離は、モジュールAに対するアクセス権管理テーブルの有効範囲を変更することで実現してもよい。例として図9Aに示すアクセス権管理テーブル961および図9Bに示すアクセス権制御ベクタ962を有するMMUを利用する場合の実現方法を説明する。アクセス権管理テーブル961はアクセス先のアドレス範囲に対してアクセス識別子を保持し、アクセス識別子とアクセス権制御ベクタ962の組み合わせによりアクセスの可否を判定する。アクセス権制御ベクタ962は32ビットのビット列であり、各ビットがアクセス識別子1から31に対応する。アクセス先のアドレス範囲に付与されたアクセス識別子に対応するビットがアクセス権制御ベクタ962において設定されている場合、そのアドレス範囲へのアクセスが許可される。そうではなく、対応するビットがクリアされている場合にはアクセスが制限される。例えば、モジュールAの実行開始時にはアクセス権制御ベクタ962は0xaになる。間接的な手続き呼び出しにおいて保護領域を融合あるいは分離する場合にはそれぞれアクセス権制御ベクタ962の対応ビットを設定、クリアすることにより実現する。例えば、モジュールAの実行において、モジュールAの保護領域とモジュールBの保護領域を融合するには、アクセス権制御ベクタ962においてアクセス識別子3に対応するビットを設定する。逆に分離するには、アクセス識別子3に対応するビットをクリアする。
【0026】
以上の構成によれば、信頼度が低いと判定された保護領域からの機能呼び出しには間接的な手続き呼び出しが用いられ、信頼度が高いと判定された保護領域からの機能呼び出しには直接的な手続き呼び出しが用いられる。間接的な機能呼び出し以外における信頼度が低いと判定された保護領域からの直接的なアクセスは不正アクセスとして検出される(直接アクセス不可)。一方、信頼度が高いと判定された保護領域からのアクセスは直接的な関数コールにおいても許可される(直接アクセス可能)。直接的な手続き呼び出しは間接的な手続き呼び出しより実行効率が高いため、メモリ保護による実行効率の低下を抑えることが出来る。
【0027】
本実施形態によれば、信頼度が高い保護領域に対しては直接的な手続き呼び出しを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への間接的な手続き呼び出し以外におけるアクセスを不正アクセスとして禁止するメモリ保護技術の提供が可能になる。
【0028】
<実施形態2>
実施形態2の情報処理システムは情報処理装置1および情報処理装置3の二つの情報処理装置から構成され、情報処理装置1は実施形態1のものと同じである。図4Aに実施形態2にかかる情報処理装置3の構成を示す。実施形態2の情報処理装置3のメモリ管理ユニット402は例外時アクセス権管理テーブル406を有する。例外時アクセス権管理テーブル406はメモリ408上にあってもよい。単一アドレス空間上の保護領域の配置および保護領域間の関係は実施形態1と同様である。
【0029】
入出力インタフェース114は、外部記憶装置や情報処理装置3のユーザとのやりとりを実現する入出力機器として機能することが可能である。さらに入出力インタフェース114は外部装置へ接続するネットワーク機器を接続可能にし、CPU401に対して割込みを通知することが可能である。割り込みは検証対象イメージ116の実行中にも発生する可能性がある。CPU401は例外処理を実行するための例外モードとそれ以外の処理を実行するための通常モードとを有し、割込みの入力を受理すると例外モードに遷移する。メモリ管理ユニット402はCPU401の実行モードを認識し、CPU401が通常モードのときはアクセス権管理テーブル405を参照してアクセスの可否を判断する。そして、メモリ管理ユニット402はCPU401が例外モードのときは例外時アクセス権管理テーブル406を参照してアクセスの可否を判断する。アクセス権管理テーブル405および例外時アクセス権管理テーブル406に保持される情報は実施形態1におけるアクセス権管理テーブル119と同じである。
【0030】
メモリ408上の例外時アクセス領域定義テーブル407は情報処理装置3において生成されてもよいし、検証対象イメージ116とともに情報処理装置1から渡されてもよい。図8(b)に例外時アクセス領域定義テーブル407が保持する情報を示す。例外時アクセス領域定義テーブル407は、例外処理ごとにアクセスする可能性のある領域を定義するテーブルである。例えば、例外ハンドラEXP1は0x0000から0x0FFFのアドレス範囲にのみアクセスする可能性があり、例外ハンドラISR2は0x0000から0x0FFFおよび0x3A00から0x37FFのアドレス範囲にアクセスする可能性がある。
【0031】
図4Bに、例外時アクセス権管理テーブル406の初期設定を例示する。この初期設定によれば、CPU401が例外モードに遷移した直後には、オペレーティングシステムに割り当てたアドレス空間0x0000から0x0FFFのみがアクセス可能である。
【0032】
図5に、例外の発生により例外ハンドラを実行する処理を示す。ここでは、ISR2を呼び出す場合の処理を例に処理を説明する。まず、CPUが例外モードになるとOSに制御が移る。OSはステップS502において、例外時アクセス領域定義テーブル407を参照して、例外ハンドラISR2がアクセスする保護領域を特定する。ステップS503では、例外時アクセス権管理テーブル406の設定(図4B)を変更し、例外ハンドラISR2による0x0000から0x0FFFおよび0x3A00から0x3FFFのアドレス範囲に対するアクセスを許可する。次に、ステップS504で例外ハンドラISR2を呼び出す。例外ハンドラISR2の終了後、ステップS505において、例外時アクセス権管理テーブル406の設定を変更し、例外発生前の状態に復帰させる。上記以外の動作は実施形態1と同様である。
【0033】
以上の構成によれば、例外ハンドラの実行において、アクセスを必要としない保護領域のメモリを不正アクセスによる破壊から防ぐことができる。また、例外ハンドラはアクセスを必要とする保護領域に対して間接的な機能呼び出しを用いずに直接的にアクセス可能であるため、メモリ保護による割り込み処理の応答性の低下を抑えることが出来る。
【0034】
<実施形態3>
実施形態3の情報処理システムは情報処理装置2および情報処理装置4の二つの情報処理装置から構成され、情報処理装置2は実施形態1のものと同じである。図6Aに実施形態3にかかる情報処理装置4の構成を示す。実施形態1との違いは、検証対象プログラム605における機能呼び出しが全て直接的な関数コールとして記述されていることである。また、公開手続き一覧テーブル606を有することも、実施形態1と相違する。公開手続き一覧テーブル606は保護領域間で呼び出すことが許可された手続きのシンボル名を列挙したテーブルである。
【0035】
図7に、異なる保護領域への直接的な手続き呼び出しを間接的な手続き呼び出しに変換する処理を示す。検証対象イメージ生成プログラム607は検証対象プログラム605における手続き呼び出しの置換をコンパイル時に行う。まず、ステップS702において、別モジュールから呼び出される手続きのリストを生成する。ステップS703において、ステップS702で生成されたリストから、公開手続き一覧テーブル606に含まれない手続きを削除する。次に、ステップS704において、リストに残ったそれぞれの手続きを図3に示した手順に従って間接的に呼び出す手続きを検証対象プログラム605に追加する。さらに、ステップS705において、ステップS704で追加された手続きのシンボル名を、そこから間接的に呼び出される手続きのシンボル名にプレフィックス__を付与した文字列とする。最後に、ステップS706において、検証対象プログラム605における保護領域をまたぐ手続き呼び出しにおいて、呼び出される手続き名がステップS703で生成したリストに含まれていれば、手続き名にプレフィックス__を付与する。
【0036】
ステップS704で追加された手続きは、それを呼び出すモジュールが直接呼び出せる領域に配置する。例えば、どのモジュールにも割り当てられていない0x3800から0x39FFのアドレス範囲を全てのモジュールからアクセス可能な領域として設定して、そこに追加された手続きを配置すれば全てのモジュールから直接的に呼び出すことが可能になる。
【0037】
図6Bは、図7のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する概念図である。図6Bでは、モジュールA651からモジュールB652に対する直接的な関数コール(procB)が、変換処理において追加された手続き653への呼び出し(_procB)に変換されている。一方、追加された手続き653は直接的な関数コールによりモジュールB652の手続きを呼び出す。その結果、モジュールA651からモジュールB652への機能呼び出しは間接的な手続き呼び出しになる。上記以外の動作は実施形態1と同様である。
【0038】
本発明は、複数の保護領域における包含関係に基づいて直接的なアクセスを禁止するか否かを判定し、判定結果に応じて記述を変えるコンパイラに適用してもよい。
【0039】
以上の構成によれば、検証対象プログラム605を開発者が変更しなくても保護領域間の関係を変更することが可能であり、プログラムを変更する場合と比較して開発効率を向上させることが出来る。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明はプログラムによる不正アクセスからメモリを保護するメモリ保護方法および情報処理装置に関する。
【背景技術】
【0002】
従来、プログラムによる不正アクセスからメモリを保護する方法としては、中央処理装置(CPU)の実行モードとメモリ管理装置(MMU)の機能とを連動させることが一般的であった。例えば、特権モードと非特権モード(もしくは複数のレベルを有する特権モード)の実行を区別するCPUを用いて、MMUの機能により特権モード(もしくは高特権モード)でアクセス可能な領域といずれの実行モードでもアクセス可能な領域とを設定する。これにより、非特権モードによる不正アクセスから特権モードでのみ使用することが可能なメモリ領域を設けることが出来る。この方法では、保護される領域を実行モードに依存せずに自由に設定することは出来ないが、組込みソフトウェアはすべてが特権モードで実行されることが多くある。
【0003】
同一の実行モードで実行されるプログラムによる不正アクセスからメモリを保護する方法としては、プログラムを一つ以上のモジュールに分割し、それぞれを固有の仮想アドレス空間に配置する方法が知られている。一般的に、異なる仮想アドレス空間に配置された機能モジュールは別のアドレス空間に配置されたメモリ領域に直接アクセスする(OS等を介さずにアクセスする)ことが出来ない。そのため、アドレス空間に配置されたモジュール間の不正アクセス(unauthorized access)を防ぐことが出来る。一方、この方法ではモジュール間の機能呼び出しに伴い異なるモジュールのデータにアクセスするためにはオペレーティングシステム(OS)の機能を利用する必要がある。OS内部では一般的にデータのコピーが行われるため、別モジュールのデータを直接アクセスする場合と比べて実行効率の面で劣る。
【0004】
単一アドレス空間で不正アクセスからメモリを保護する方法としては、単一アドレス空間を区分した領域とモジュールとの両方に識別子を用いる方法が知られている(例えば、特許文献1)。モジュールは自身の識別子と異なる識別子が付与された領域にはアクセスすることが許されていない。そこで、異なるモジュールにアクセスする際には特殊な空間切り替えプログラムを実行することでアクセス先の識別子をアクセス前にプログラムの識別子に変更する。さらに、アクセス後に元の識別子に復帰させることで機能呼び出し以外のアクセスを制限する。この場合、データへのアクセスはアドレス指定により直接行うことが可能であるが、機能呼び出しにおいて識別子に関する操作が必要なので直接的な関数コールにおけるデータ参照より実行効率の面で劣る。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−189633号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来、メモリ保護機能を利用する場合には、異なる保護領域に含まれるデータにアクセスする際に間接的な機能呼び出しを用いる必要があった。そのため、保護領域が異なる特定のモジュールからのアクセスを信頼できる場合でも、アクセス元のモジュールは間接的な機能呼び出しを用いなければならなかった。間接的な機能呼び出しは直接的な機能呼び出しよりも実行効率が低く、実行効率が低下するという問題があった。
【課題を解決するための手段】
【0007】
本発明はアクセス先のモジュールから信頼度が高いと判定されたモジュールからは直接的な手続き呼び出しおよびアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定されたモジュールからのアクセスは間接的な機能呼び出しを実行していない場合には不正アクセスとして検出し、間接的な機能呼び出しを実行している場合には正当なアクセスとして許可するメモリ保護技術を提供する。
【0008】
本発明の一つの側面にかかるメモリ保護方法は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
保護領域の間の関係を定義する定義工程と、
前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、信頼度が高いと判定された保護領域に対しては直接的なアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への直接的なアクセスを不正アクセスとして抑制するメモリ保護技術の提供が可能になる。
【図面の簡単な説明】
【0010】
【図1A】実施形態1の情報処理装置の構成を説明する図。
【図1B】実施形態1の情報処理装置の構成を説明する図。
【図1C】保護領域間の階層関係を説明するための図。
【図2】(a)単一アドレス空間上の保護領域の配置を説明するための図、(b)アクセス権管理テーブルの初期設定を説明するための図。
【図3】実施形態1における間接的な手続き呼び出しを実現する処理を説明するためのフローチャート。
【図4A】実施形態2の情報処理装置の構成を説明する図。
【図4B】例外時アクセス権管理テーブルの初期設定を示す図。
【図5】実施形態2の例外ハンドラを実行する処理のフローチャート。
【図6A】実施形態3の情報処理装置の構成を説明する図。
【図6B】図7のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する図。
【図7】保護領域以外への手続き呼び出しを間接的な手続き呼び出しに変換する処理を説明するフローチャート。
【図8】(a)保護領域階層関係定義テーブルを説明するための図、(b)例外時アクセス領域定義テーブルが保持する情報を示す図。
【図9A】アクセス識別子を有するアクセス権管理テーブルを説明するための図。
【図9B】アクセス制御ベクタを説明するための図。
【発明を実施するための形態】
【0011】
<実施形態1>
実施形態1における情報処理システムは情報処理装置1および情報処理装置2の二つの情報処理装置から構成される。情報処理装置1では検証対象プログラムから検証対象イメージを生成し、情報処理装置2では検証対象イメージを実行し検証する。
【0012】
図1Aに実施形態1にかかる情報処理装置1の構成を示す。中央処理装置(CPU)101は図1Aの情報処理装置1の全体を制御する。メモリ102は、変更を必要としないプログラムやパラメータを格納するROMや外部装置などから供給されるプログラムやデータを一時記憶するRAMから構成される。入出力インタフェース103は情報処理装置2との接続を確保する。システムバス104はCPU101、メモリ102、および入出力インタフェース103の各ユニットを通信可能に接続する。
【0013】
メモリ102上の検証対象プログラム105は不正アクセスを含む可能性があるプログラムであり、本実施形態ではモジュールA、モジュールB、モジュールC、モジュールDから構成されるとする。不正アクセスはプログラムの欠陥などにより発生するアクセスであり、意図通りに発生するアクセスは正当アクセス(authorized access)とする。検証対象プログラム105では、呼び出し元モジュールを信頼可能な場合の機能呼び出しは直接的な関数コールとして記述されているとする。それ以外の機能呼び出しは後述の間接的な手続き呼び出しとして記述されているとする。また、モジュール間のアクセスは機能呼び出しにおいてのみ必要とされるものとする。テーブル106(保護領域階層関係定義テーブル)は保護領域間の階層関係を定義する。プログラム(検証対象イメージ生成プログラム107)は検証対象イメージを生成する。
【0014】
図1Bに実施形態1にかかる情報処理装置2の構成を示す。情報処理装置2は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスからメモリを保護することが可能である。中央処理装置(CPU)111は情報処理装置2の全体を制御する。メモリ112は、変更を必要としないプログラムやパラメータを格納するROMや情報処理装置1から供給されるプログラムやデータを一時記憶するRAMから構成される。メモリ管理装置としてのメモリ管理ユニット113はCPU101から他のユニットへ要求されたアクセスの正当性を判断する。メモリ管理ユニット113はMemory Management Unit (MMU)あるいはMemory Protection Unit(MPU)であり、CPU111に内蔵されていてもよい。メモリ管理ユニット113はアクセス権管理テーブル119を参照して、CPU111からメモリ112へのアクセスを許可あるいは制限する。アクセス権管理テーブル119はメモリ112上に配置されてもよい。メモリ管理ユニット113は、CPU111からのアクセス要求を受けると、アクセス先アドレスに対応するエントリをアクセス権管理テーブル119から検索し、アクセス可能な保護領域へのアクセスか、アクセス不可の保護領域へのアクセスかを判定する。メモリ管理ユニット113は、制限されたアクセスの要求を検出するとCPU111にその事象を伝達する。入出力インタフェース114は情報処理装置1との接続を確保する。ただし、入出力インタフェース114は検証対象イメージ116の実行中に割り込みを発生させることはない。システムバス115はCPU111、メモリ112、メモリ管理ユニット113、および入出力インタフェース114の各ユニットを通信可能に接続する。
【0015】
メモリ112上の検証対象イメージ116は情報処理装置1から渡される。オペレーティングシステム117はメモリ管理ユニット113の初期設定を行う。初期アクセス権保持テーブル118はアクセス権管理テーブル119の初期設定値を保持する。
【0016】
図1Cに保護領域間の階層関係を概念的に示す。保護領域はモジュールのデータを保護するための領域である。例えば、モジュールA用の保護領域はモジュールAのデータを保護するための領域である。モジュールC用の保護領域はモジュールA用の保護領域とモジュールB用の保護領域とに包含され、モジュールA、B、C、D用の保護領域はオペレーティングシステムの保護領域に包含されているものとする。それ以外の関係(包含関係でない関係)は対等関係であるとする。保護領域が包含関係にある場合、包含する保護領域から被包含保護領域へのアクセスには不正アクセスは含まれないとする。それに対し、被包含保護領域から包含領域へのアクセスや対等関係にある保護領域へのアクセスには不正アクセスが含まれる可能性があるとする。
【0017】
図8(a)は図1Cに示した保護領域間の関係を定義する保護領域階層関係定義テーブル106を例示する図である。保護領域の階層関係を定義するには、保護領域の包含関係のみを保護領域階層関係定義テーブル106に記述する。記述されない保護領域間の関係は対等関係である。例えば、モジュールA用の保護領域とモジュールB用の保護領域の関係は対等関係である。
【0018】
まず、情報処理装置1における処理を説明する。情報処理装置1では検証対象イメージ生成プログラム107が保護領域階層関係定義テーブル106を参照して保護領域間の信頼関係を判定する。保護領域間の関係が包含関係である場合、被包含保護領域から包含保護領域に対しては信頼度が高いと判定し、包含保護領域から被包含保護領域に対しては信頼度が低いと判定する。それに対し、対等関係にある場合(包含関係でない場合)、互いの保護領域に対しては信頼度が低いと判定する。例えば、図1Cにおいては、オペレーティングシステム117用の保護領域121(包含保護領域)は他の全ての保護領域(被包含保護領域)を包含する。したがって、オペレーティングシステム117用の保護領域121は他のすべての保護領域から信頼度が高いと判定される。一方、モジュールA用の保護領域122とモジュールB用の保護領域123は対等関係にある。そのため、モジュールA用とモジュールB用の保護領域は、それぞれから信頼度が低いと判定される。
【0019】
検証対象イメージ生成プログラム107はさらに検証対象プログラム105をコンパイルし、検証対象イメージ116を生成する。コンパイル結果には検証対象イメージ116に関する単一アドレス空間上の配置情報が含まれる。検証対象イメージ、単一アドレス空間上の配置情報、保護領域間の信頼関係に関する判定結果は情報処理装置1から情報処理装置2に入出力インタフェース103および入出力インタフェース114経由で渡される。
【0020】
次に、情報処理装置2における処理を説明する。情報処理装置2では検証対象イメージ116の単一アドレス空間上の配置情報と保護領域の信頼関係の判定結果を、OSの単一アドレス空間上の配置情報と併せて初期アクセス権保持テーブル118に保持する。
【0021】
図2(a)に、オペレーティングシステムおよび検証対象イメージに割り当てられた領域の単一アドレス空間上での配置例を示す。各モジュールの保護領域に割り当てられたアドレス範囲はそれぞれのプログラムに割り当てられたメモリ領域に対応する。例えば、オペレーティングシステム用の保護領域に対するアドレス範囲は0x0000から0x0FFFであり、オペレーティングシステム117に割り当てられたメモリ上の領域はこの範囲のアドレスによってのみアクセス可能である。
【0022】
図2(b)に、初期アクセス権保持テーブル118の例を示す。この初期設定により、信頼度が高いと判定された保護領域と、信頼度が低いと判定された保護領域と、の判定の結果をアクセス権管理テーブル119に格納する。この初期設定によれば、アクセス元のモジュールから信頼度が高いと判定された保護領域からのアクセスが許可され、信頼度が低いと判定された保護領域からのアクセスが制限される。
【0023】
信頼度が低いと判定された保護領域からのアクセスを情報処理装置2において実現するには間接的な手続き呼び出しを用いる。間接的な手続き呼び出しを用いれば、その手続き呼び出しを実行中においてのみ、信頼度が低いと判定された保護領域からのアクセスが可能になる。
【0024】
図3に、間接的な手続き呼び出しを実現する処理を示す。ここでは、モジュールAがモジュールBの手続きを間接的に呼び出す場合を例に処理の流れを説明する。まず、モジュールAの実行において間接的な手続き呼び出しが行われた場合、モジュールAは間接手続き呼び出しの処理としてモジュールA用の保護領域とモジュールB用の保護領域を一時的に融合(結合)する。これはステップS302において、モジュールAがアクセス権管理テーブル119の内容を書き換えることにより実現する。すなわち、アクセス先であるモジュールBの保護領域に割り当てられたアドレス範囲0x2800から0x2FFFに対するモジュールAからのアクセスに対するエントリをアクセス禁止からアクセス許可に書き換える。これによりモジュールAによるモジュールBへのアクセスが許可される。次に、ステップS303において、アクセス先のモジュールBが提供する所望の手続きをモジュールAが関数コールにより直接的に呼び出す。最後に、関数コールからのリターン後に、融合した保護領域をモジュールAが再度融合前の保護領域に分離する。これはステップS304において、アクセス権管理テーブル119を元の設定値に書き戻し、アドレス範囲0x2800から0x2FFFに対するモジュールAからのアクセスを禁止することで実現する。
【0025】
上述の保護領域の融合あるいは分離は、モジュールAに対するアクセス権管理テーブルの有効範囲を変更することで実現してもよい。例として図9Aに示すアクセス権管理テーブル961および図9Bに示すアクセス権制御ベクタ962を有するMMUを利用する場合の実現方法を説明する。アクセス権管理テーブル961はアクセス先のアドレス範囲に対してアクセス識別子を保持し、アクセス識別子とアクセス権制御ベクタ962の組み合わせによりアクセスの可否を判定する。アクセス権制御ベクタ962は32ビットのビット列であり、各ビットがアクセス識別子1から31に対応する。アクセス先のアドレス範囲に付与されたアクセス識別子に対応するビットがアクセス権制御ベクタ962において設定されている場合、そのアドレス範囲へのアクセスが許可される。そうではなく、対応するビットがクリアされている場合にはアクセスが制限される。例えば、モジュールAの実行開始時にはアクセス権制御ベクタ962は0xaになる。間接的な手続き呼び出しにおいて保護領域を融合あるいは分離する場合にはそれぞれアクセス権制御ベクタ962の対応ビットを設定、クリアすることにより実現する。例えば、モジュールAの実行において、モジュールAの保護領域とモジュールBの保護領域を融合するには、アクセス権制御ベクタ962においてアクセス識別子3に対応するビットを設定する。逆に分離するには、アクセス識別子3に対応するビットをクリアする。
【0026】
以上の構成によれば、信頼度が低いと判定された保護領域からの機能呼び出しには間接的な手続き呼び出しが用いられ、信頼度が高いと判定された保護領域からの機能呼び出しには直接的な手続き呼び出しが用いられる。間接的な機能呼び出し以外における信頼度が低いと判定された保護領域からの直接的なアクセスは不正アクセスとして検出される(直接アクセス不可)。一方、信頼度が高いと判定された保護領域からのアクセスは直接的な関数コールにおいても許可される(直接アクセス可能)。直接的な手続き呼び出しは間接的な手続き呼び出しより実行効率が高いため、メモリ保護による実行効率の低下を抑えることが出来る。
【0027】
本実施形態によれば、信頼度が高い保護領域に対しては直接的な手続き呼び出しを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への間接的な手続き呼び出し以外におけるアクセスを不正アクセスとして禁止するメモリ保護技術の提供が可能になる。
【0028】
<実施形態2>
実施形態2の情報処理システムは情報処理装置1および情報処理装置3の二つの情報処理装置から構成され、情報処理装置1は実施形態1のものと同じである。図4Aに実施形態2にかかる情報処理装置3の構成を示す。実施形態2の情報処理装置3のメモリ管理ユニット402は例外時アクセス権管理テーブル406を有する。例外時アクセス権管理テーブル406はメモリ408上にあってもよい。単一アドレス空間上の保護領域の配置および保護領域間の関係は実施形態1と同様である。
【0029】
入出力インタフェース114は、外部記憶装置や情報処理装置3のユーザとのやりとりを実現する入出力機器として機能することが可能である。さらに入出力インタフェース114は外部装置へ接続するネットワーク機器を接続可能にし、CPU401に対して割込みを通知することが可能である。割り込みは検証対象イメージ116の実行中にも発生する可能性がある。CPU401は例外処理を実行するための例外モードとそれ以外の処理を実行するための通常モードとを有し、割込みの入力を受理すると例外モードに遷移する。メモリ管理ユニット402はCPU401の実行モードを認識し、CPU401が通常モードのときはアクセス権管理テーブル405を参照してアクセスの可否を判断する。そして、メモリ管理ユニット402はCPU401が例外モードのときは例外時アクセス権管理テーブル406を参照してアクセスの可否を判断する。アクセス権管理テーブル405および例外時アクセス権管理テーブル406に保持される情報は実施形態1におけるアクセス権管理テーブル119と同じである。
【0030】
メモリ408上の例外時アクセス領域定義テーブル407は情報処理装置3において生成されてもよいし、検証対象イメージ116とともに情報処理装置1から渡されてもよい。図8(b)に例外時アクセス領域定義テーブル407が保持する情報を示す。例外時アクセス領域定義テーブル407は、例外処理ごとにアクセスする可能性のある領域を定義するテーブルである。例えば、例外ハンドラEXP1は0x0000から0x0FFFのアドレス範囲にのみアクセスする可能性があり、例外ハンドラISR2は0x0000から0x0FFFおよび0x3A00から0x37FFのアドレス範囲にアクセスする可能性がある。
【0031】
図4Bに、例外時アクセス権管理テーブル406の初期設定を例示する。この初期設定によれば、CPU401が例外モードに遷移した直後には、オペレーティングシステムに割り当てたアドレス空間0x0000から0x0FFFのみがアクセス可能である。
【0032】
図5に、例外の発生により例外ハンドラを実行する処理を示す。ここでは、ISR2を呼び出す場合の処理を例に処理を説明する。まず、CPUが例外モードになるとOSに制御が移る。OSはステップS502において、例外時アクセス領域定義テーブル407を参照して、例外ハンドラISR2がアクセスする保護領域を特定する。ステップS503では、例外時アクセス権管理テーブル406の設定(図4B)を変更し、例外ハンドラISR2による0x0000から0x0FFFおよび0x3A00から0x3FFFのアドレス範囲に対するアクセスを許可する。次に、ステップS504で例外ハンドラISR2を呼び出す。例外ハンドラISR2の終了後、ステップS505において、例外時アクセス権管理テーブル406の設定を変更し、例外発生前の状態に復帰させる。上記以外の動作は実施形態1と同様である。
【0033】
以上の構成によれば、例外ハンドラの実行において、アクセスを必要としない保護領域のメモリを不正アクセスによる破壊から防ぐことができる。また、例外ハンドラはアクセスを必要とする保護領域に対して間接的な機能呼び出しを用いずに直接的にアクセス可能であるため、メモリ保護による割り込み処理の応答性の低下を抑えることが出来る。
【0034】
<実施形態3>
実施形態3の情報処理システムは情報処理装置2および情報処理装置4の二つの情報処理装置から構成され、情報処理装置2は実施形態1のものと同じである。図6Aに実施形態3にかかる情報処理装置4の構成を示す。実施形態1との違いは、検証対象プログラム605における機能呼び出しが全て直接的な関数コールとして記述されていることである。また、公開手続き一覧テーブル606を有することも、実施形態1と相違する。公開手続き一覧テーブル606は保護領域間で呼び出すことが許可された手続きのシンボル名を列挙したテーブルである。
【0035】
図7に、異なる保護領域への直接的な手続き呼び出しを間接的な手続き呼び出しに変換する処理を示す。検証対象イメージ生成プログラム607は検証対象プログラム605における手続き呼び出しの置換をコンパイル時に行う。まず、ステップS702において、別モジュールから呼び出される手続きのリストを生成する。ステップS703において、ステップS702で生成されたリストから、公開手続き一覧テーブル606に含まれない手続きを削除する。次に、ステップS704において、リストに残ったそれぞれの手続きを図3に示した手順に従って間接的に呼び出す手続きを検証対象プログラム605に追加する。さらに、ステップS705において、ステップS704で追加された手続きのシンボル名を、そこから間接的に呼び出される手続きのシンボル名にプレフィックス__を付与した文字列とする。最後に、ステップS706において、検証対象プログラム605における保護領域をまたぐ手続き呼び出しにおいて、呼び出される手続き名がステップS703で生成したリストに含まれていれば、手続き名にプレフィックス__を付与する。
【0036】
ステップS704で追加された手続きは、それを呼び出すモジュールが直接呼び出せる領域に配置する。例えば、どのモジュールにも割り当てられていない0x3800から0x39FFのアドレス範囲を全てのモジュールからアクセス可能な領域として設定して、そこに追加された手続きを配置すれば全てのモジュールから直接的に呼び出すことが可能になる。
【0037】
図6Bは、図7のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する概念図である。図6Bでは、モジュールA651からモジュールB652に対する直接的な関数コール(procB)が、変換処理において追加された手続き653への呼び出し(_procB)に変換されている。一方、追加された手続き653は直接的な関数コールによりモジュールB652の手続きを呼び出す。その結果、モジュールA651からモジュールB652への機能呼び出しは間接的な手続き呼び出しになる。上記以外の動作は実施形態1と同様である。
【0038】
本発明は、複数の保護領域における包含関係に基づいて直接的なアクセスを禁止するか否かを判定し、判定結果に応じて記述を変えるコンパイラに適用してもよい。
【0039】
以上の構成によれば、検証対象プログラム605を開発者が変更しなくても保護領域間の関係を変更することが可能であり、プログラムを変更する場合と比較して開発効率を向上させることが出来る。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置の定義手段が、保護領域の間の関係を定義する定義工程と、
前記情報処理装置の判定手段が、前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
前記情報処理装置のメモリ管理手段が、直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、
を有することを特徴とするメモリ保護方法。
【請求項2】
前記判定工程は、前記保護領域の間の前記関係が包含関係でない場合に、互いの保護領域は直接アクセス不可であると判定することを特徴とする請求項1に記載のメモリ保護方法。
【請求項3】
前記判定工程は、前記直接アクセス可能と判定された保護領域と、前記直接アクセス不可と判定された保護領域と、の判定の結果を、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセス不可と判定された保護領域に対するアクセスが要求された場合に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記直接アクセス不可と判定された保護領域への間接的なアクセスを許可することを特徴とする請求項1に記載のメモリ保護方法。
【請求項4】
前記直接アクセス不可と判定された保護領域への間接的なアクセスが終了した後に、前記メモリ管理工程は、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項3に記載のメモリ保護方法。
【請求項5】
前記メモリには、例外処理ごとにアクセスされる可能性のある保護領域を定義する例外時アクセス領域定義テーブルが格納されていることを特徴とする請求項3に記載のメモリ保護方法。
【請求項6】
前記情報処理装置の入力手段が、例外処理として割込み処理の入力を受け付ける入力工程を更に有し、
前記メモリ管理工程は、前記入力工程で前記例外処理として割込み処理の入力が受け付けられた場合に、前記例外時アクセス領域定義テーブルを参照して、前記割込み処理によりアクセスされる可能性のある保護領域を求め、当該保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス可能と判定された保護領域として格納されている場合に、前記アクセスする可能性のある保護領域に対する直接的なアクセスを許可することを特徴とする請求項5に記載のメモリ保護方法。
【請求項7】
前記割込み処理により前記アクセスされる可能性のある保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス不可と判定された保護領域として格納されている場合に、
前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記アクセスされる可能性のある保護領域への間接的なアクセスを許可することを特徴とする請求項6に記載のメモリ保護方法。
【請求項8】
前記割込み処理が終了した後に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項7に記載のメモリ保護方法。
【請求項9】
前記メモリ管理工程はプログラムの記述を生成する工程であって、直接的なアクセスを許可するアクセスは関数コールによって記述され、直接的なアクセスを禁止するアクセスは間接的な手続き呼び出しによって記述されることを特徴とする請求項1に記載のメモリ保護方法。
【請求項10】
前記メモリ管理工程はプログラムを実行する工程であって、直接的なアクセスを許可する場合には関数コールによるアクセスを実行し、直接的なアクセスを禁止する場合には間接的な手続き呼び出しによるアクセスを実行することを特徴とする請求項1に記載のメモリ保護方法。
【請求項11】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置のメモリ管理手段が、信頼度が高いモジュールから前記保護領域へのアクセスに対して関数コールによってアクセスし、信頼度が高くないモジュールから前記保護領域への関数コールによるアクセスを禁止して間接的な手続き呼び出しによってアクセスする工程を有することを特徴とするメモリ保護方法。
【請求項12】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護する情報処理装置であって、
保護領域の間の関係を定義する定義手段と、
前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定手段と、
直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理手段と、
を備えることを特徴とする情報処理装置。
【請求項1】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置の定義手段が、保護領域の間の関係を定義する定義工程と、
前記情報処理装置の判定手段が、前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
前記情報処理装置のメモリ管理手段が、直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、
を有することを特徴とするメモリ保護方法。
【請求項2】
前記判定工程は、前記保護領域の間の前記関係が包含関係でない場合に、互いの保護領域は直接アクセス不可であると判定することを特徴とする請求項1に記載のメモリ保護方法。
【請求項3】
前記判定工程は、前記直接アクセス可能と判定された保護領域と、前記直接アクセス不可と判定された保護領域と、の判定の結果を、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセス不可と判定された保護領域に対するアクセスが要求された場合に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記直接アクセス不可と判定された保護領域への間接的なアクセスを許可することを特徴とする請求項1に記載のメモリ保護方法。
【請求項4】
前記直接アクセス不可と判定された保護領域への間接的なアクセスが終了した後に、前記メモリ管理工程は、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項3に記載のメモリ保護方法。
【請求項5】
前記メモリには、例外処理ごとにアクセスされる可能性のある保護領域を定義する例外時アクセス領域定義テーブルが格納されていることを特徴とする請求項3に記載のメモリ保護方法。
【請求項6】
前記情報処理装置の入力手段が、例外処理として割込み処理の入力を受け付ける入力工程を更に有し、
前記メモリ管理工程は、前記入力工程で前記例外処理として割込み処理の入力が受け付けられた場合に、前記例外時アクセス領域定義テーブルを参照して、前記割込み処理によりアクセスされる可能性のある保護領域を求め、当該保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス可能と判定された保護領域として格納されている場合に、前記アクセスする可能性のある保護領域に対する直接的なアクセスを許可することを特徴とする請求項5に記載のメモリ保護方法。
【請求項7】
前記割込み処理により前記アクセスされる可能性のある保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス不可と判定された保護領域として格納されている場合に、
前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記アクセスされる可能性のある保護領域への間接的なアクセスを許可することを特徴とする請求項6に記載のメモリ保護方法。
【請求項8】
前記割込み処理が終了した後に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項7に記載のメモリ保護方法。
【請求項9】
前記メモリ管理工程はプログラムの記述を生成する工程であって、直接的なアクセスを許可するアクセスは関数コールによって記述され、直接的なアクセスを禁止するアクセスは間接的な手続き呼び出しによって記述されることを特徴とする請求項1に記載のメモリ保護方法。
【請求項10】
前記メモリ管理工程はプログラムを実行する工程であって、直接的なアクセスを許可する場合には関数コールによるアクセスを実行し、直接的なアクセスを禁止する場合には間接的な手続き呼び出しによるアクセスを実行することを特徴とする請求項1に記載のメモリ保護方法。
【請求項11】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置のメモリ管理手段が、信頼度が高いモジュールから前記保護領域へのアクセスに対して関数コールによってアクセスし、信頼度が高くないモジュールから前記保護領域への関数コールによるアクセスを禁止して間接的な手続き呼び出しによってアクセスする工程を有することを特徴とするメモリ保護方法。
【請求項12】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護する情報処理装置であって、
保護領域の間の関係を定義する定義手段と、
前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定手段と、
直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理手段と、
を備えることを特徴とする情報処理装置。
【図1A】
【図1B】
【図1C】
【図2】
【図3】
【図4A】
【図4B】
【図5】
【図6A】
【図6B】
【図7】
【図8】
【図9A】
【図9B】
【図1B】
【図1C】
【図2】
【図3】
【図4A】
【図4B】
【図5】
【図6A】
【図6B】
【図7】
【図8】
【図9A】
【図9B】
【公開番号】特開2011−146030(P2011−146030A)
【公開日】平成23年7月28日(2011.7.28)
【国際特許分類】
【出願番号】特願2010−247843(P2010−247843)
【出願日】平成22年11月4日(2010.11.4)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成23年7月28日(2011.7.28)
【国際特許分類】
【出願日】平成22年11月4日(2010.11.4)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]