(57)【要約】  アプリケーションプロセスによる特権命令及びライブラリ関数の不正な使用を防止する。セキュリティゲートという概念を設け、ＲＯＭ等の容易に改ざんされない高信頼メモリエリアに配置したライブラリ関数の先頭にセキュリティゲート進入をＯＳに要求する命令を、ライブラリ関数の最後にセキュリティゲート退出をＯＳに要求する命令を配置し、アプリケーションプロセスがセキュリティゲート進入状態にある時のみ、セキュリティレベルをより高次なものに変更し、一時的に特権命令を実行できるようにする。
2007040228.tif 000002
【特許請求の範囲】
【請求項１】
自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持する記憶部と、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御部と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理部と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理部と
を備えた情報処理装置。
【請求項２】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である請求の範囲１記載の情報処理装置。
【請求項３】
前記特権命令実行制御部は、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲２記載の情報処理装置。
【請求項４】
前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である請求の範囲１記載の情報処理装置。
【請求項５】
前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する請求の範囲４記載の情報処理装置。
【請求項６】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む請求の範囲１記載の情報処理装置。
【請求項７】
前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲６記載の情報処理装置。
【請求項８】
前記セキュリティゲート侵入処理部は、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更するものであり、
前記セキュリティゲート退出処理部は、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻すものであり、
前記特権命令実行制御部は、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲６記載の情報処理装置。
【請求項９】
前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す請求の範囲６記載の情報処理装置。
【請求項１０】
セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理部を備えた請求の範囲７、８または９記載の情報処理装置。
【請求項１１】
前記セキュリティゲート侵入処理部によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理部によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理部による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理部による変更後の値に戻すセキュリティゲート一時退出処理部を備えた請求の範囲１記載の情報処理装置。
【請求項１２】
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更するものである請求の範囲２、３、６〜１０の何れか１項に記載の情報処理装置。
【請求項１３】
セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理部は、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更するものである請求の範囲２、３、６〜１０の何れか１項に記載の情報処理装置。
【請求項１４】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録されるものである請求の範囲４〜１０の何れか１項に記載の情報処理装置。
【請求項１５】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される請求の範囲４〜１０の何れか１項に記載の情報処理装置。
【請求項１６】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項１７】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項１８】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項１９】
前記予め定められたアドレス範囲が、ＲＯＭ領域内のアドレス範囲である請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２０】
前記予め定められたアドレス範囲が、ＲＯＭ領域からＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２１】
前記予め定められたアドレス範囲が、信頼できるファイルシステムからＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２２】
前記予め定められたアドレス範囲が、ファイルシステムからＲＡＭ領域へロードされた信頼できるライブラリ関数のＲＡＭ領域上でのアドレス範囲である請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２３】
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かのチェックに加えて、前記第１の特定の命令のアドレスがプログラムエリアであるか否かのチェックを行うものである請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２４】
前記第１の特定の命令と前記第２の特定の命令は、それぞれセキュリティゲート侵入要求、退出要求をオペレーティングシステムに対して発行するシステムコール命令である請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２５】
前記ライブラリ関数は、基本ライブラリ関数とサービスＡＰＩライブラリ関数とを含む請求の範囲１〜１１の何れか１項に記載の情報処理装置。
【請求項２６】
前記基本ライブラリ関数は、特権命令として共有メモリ操作システムコール命令とセマフォ操作システムコール命令とを含み、
前記サービスＡＰＩライブラリ関数は、前記共有メモリ操作システムコール命令とセマフォ操作システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む請求の範囲２５記載の情報処理装置。
【請求項２７】
前記基本ライブラリ関数は、Ｘサーバと通信を行うために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む請求の範囲２５記載の情報処理装置。
【請求項２８】
前記基本ライブラリ関数は、ＤＲＭ管理対象コンテンツを含むファイルをオープンするために特権命令としてファイルオープンシステムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＤＲＭ処理を行い、且つ、前記ファイルオープンシステムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む請求の範囲２５記載の情報処理装置。
【請求項２９】
前記基本ライブラリ関数は、外部のサーバと通信するために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＨＴＴＰ処理を行い、且つ、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む請求の範囲２５記載の情報処理装置。
【請求項３０】
情報処理装置にて、自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持し、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御処理と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理とを実行する情報処理方法。
【請求項３１】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である請求の範囲３０記載の情報処理方法。
【請求項３２】
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲３１記載の情報処理方法。
【請求項３３】
前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である請求の範囲３０記載の情報処理方法。
【請求項３４】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する請求の範囲３３記載の情報処理方法。
【請求項３５】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む請求の範囲３０記載の情報処理方法。
【請求項３６】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲３５記載の情報処理方法。
【請求項３７】
前記セキュリティゲート侵入処理では、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更し、
前記セキュリティゲート退出処理では、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻し、
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲３５記載の情報処理方法。
【請求項３８】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す請求の範囲３５記載の情報処理方法。
【請求項３９】
前記情報処理装置は、
セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理を行う請求の範囲３６、３７または３８記載の情報処理方法。
【請求項４０】
前記情報処理装置は、
前記セキュリティゲート侵入処理によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中に、シグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理による変更後の値に戻すセキュリティゲート一時退出処理を行う請求の範囲３０記載の情報処理方法。
【請求項４１】
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更する請求の範囲３１、３２、３５〜３９の何れか１項に記載の情報処理方法。
【請求項４２】
前記コンピュータは、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理では、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更する請求の範囲３１、３２、３５〜３９の何れか１項に記載の情報処理方法。
【請求項４３】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録される請求の範囲３３〜３９の何れか１項に記載の情報処理方法。
【請求項４４】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される請求の範囲３３〜３９の何れか１項に記載の情報処理方法。
【請求項４５】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている請求の範囲３０〜４０の何れか１項に記載の情報処理方法。
【請求項４６】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている請求の範囲３０〜４０の何れか１項に記載の情報処理方法。
【請求項４７】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである請求の範囲３０〜４０の何れか１項に記載の情報処理方法。
【請求項４８】
自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持するコンピュータ読み取り可能な記録媒体を有するコンピュータに、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御処理と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理とを実行させるためのプログラム。
【請求項４９】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である請求の範囲４８記載のプログラム。
【請求項５０】
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲４９記載のプログラム。
【請求項５１】
前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である請求の範囲４８記載のプログラム。
【請求項５２】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する請求の範囲５１記載のプログラム。
【請求項５３】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む請求の範囲４８記載のプログラム。
【請求項５４】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲５３記載のプログラム。
【請求項５５】
前記セキュリティゲート侵入処理では、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更し、
前記セキュリティゲート退出処理では、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻し、
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する請求の範囲５３記載のプログラム。
【請求項５６】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す請求の範囲５３記載のプログラム。
【請求項５７】
前記コンピュータに、
セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理を行わせる請求の範囲５４、５５または５６記載のプログラム。
【請求項５８】
前記コンピュータに、
前記セキュリティゲート侵入処理によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中に、シグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理による変更後の値に戻すセキュリティゲート一時退出処理を行わせる請求の範囲４８記載のプログラム。
【請求項５９】
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更する請求の範囲４９、５０、５３〜５７の何れか１項に記載のプログラム。
【請求項６０】
前記コンピュータは、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理では、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更する請求の範囲４９、５０、５３〜５７の何れか１項に記載のプログラム。
【請求項６１】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録される請求の範囲５１〜５７の何れか１項に記載のプログラム。
【請求項６２】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される請求の範囲５１〜５７の何れか１項に記載のプログラム。
【請求項６３】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている請求の範囲４８〜５８の何れか１項に記載のプログラム。
【請求項６４】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている請求の範囲４８〜５８の何れか１項に記載のプログラム。
【請求項６５】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである請求の範囲４８〜５８の何れか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプロセスが特権命令を実行した際、そのアプリケーションプロセスの属性値に基づいて特権命令の実行可否を制御する情報処理装置に関する。
【背景技術】
【０００２】
情報処理装置の中には、オーバヘッドの軽減などを目的として、オペレーティング（ＯＳ）と一般アプリケーションプロセスとの全てを特権レベルで動作させるものがある。このような情報処理装置では、特権命令を使用して実現された豊富な機能のライブラリ関数が用意されている。【０００３】
他方、近年においては情報処理装置のセキュリティ確保が重要な課題になっている。それに伴いＳＥ−Ｌｉｎｕｘのようにアプリケーションプロセス毎にセキュリティレベルを設定可能にしたセキュアＯＳが開発されている。ここで、セキュリティレベルとは、アプリケーションプロセスの属性の一つであり、当該アプリケーションプロセスが利用する機能やリソースのアクセス制御の判断に用いられる属性であり、例えば、一般ユーザ権限、ルート権限といった属性値や、信頼できるプロセス（トラステッド）、信頼できるか不明なプロセス（アントラステッド）といった属性値がある。【０００４】
このようなアプリケーションプロセス毎にセキュリティレベルを設定するＯＳの下では、アプリケーションプロセス全てを特権レベルで動作させることを前提に開発されたライブラリ関数は有効利用できない。その理由は、特権レベルでないアプリケーションプロセスが呼び出したライブラリ関数に特権レベルを必要とする命令が含まれていると、特権命令違反としてエラーが発生するからである。勿論、アプリケーションプロセスの全てを特権レベルに設定すればライブラリ関数の利用上は問題なくなるが、アプリケーションプロセス毎にセキュリティレベルを設定可能にするセキュアＯＳを使用するメリットがなくなってしまう。【０００５】
そこで、ユーザレベルで動作するアプリケーションプロセスが特権命令を利用できるようにするために、ユーザレベルでアプリケーションプロセスを実行しているときに、特権命令の実行による例外処理が発生した場合、当該特権命令のアドレスがＲＯＭ領域なら、例外処理で当該特権命令を実行して例外処理から復帰し、ＲＡＭ領域なら原則として特権命令違反としてエラーにする技術が提案されている。このような従来技術は、例えば、特開２００３−２２３３１７号公報に記載さている。【０００６】
その他、関連する背景技術としては、以下のものがある。特開２００１−２４９８４８号公報に記載された「先行特権レベルに基づく特権昇格」の発明は、コンピュータシステムであって、プロセッサと、特権昇格命令を格納する第１のメモリページを含む複数のメモリページを有するメモリと、前記メモリに格納され、前記プロセッサ及び前記メモリを制御する、オペレーティングシステムとを備える。前記プロセッサは、システムリソースへのアクセス可能性を制御することにより該コンピュータシステムにおけるアプリケーション命令の実行を制御するカレント特権レベルを有すると共に先行特権レベル状態を有する。前記メモリは、該第１のメモリページが第１の特権レベルにあるアプリケーション命令による書き込みが不可能である、メモリである。前記オペレーティングシステムは、前記先行特権レベル状態を読み出し、該読み出した先行特権レベル状態を前記カレント特権レベルと比較し、前記先行特権レベル状態に前記カレント特権レベルと同じか又はそれよりも低い特権が付与されている場合に、前記カレント特権レベルを前記第１の特権レベルよりも高位の第２の特権レベルへと昇格させる、という処理により前記特権昇格命令を実行する。【０００７】
特許第２６７７４５８号公報に記載された「システムコール実行装置」の発明においては、システムコール処理をする第１の手段は、システム管理を行う特権タスクとユーザータスクからタスクが構成される。ユーザータスク処理から特権タスク処理に移行する場合、特権タスクが使用していたＣＰＵモード（演算結果フラグ）とインストラクションポインタとメモリエリアあるいはレジスタエリア内のデータ待避をするか、もしくは前記データ待避を全く行わないで特権タスクに制御を移行するかを切り替え可能に構成される。さらに、ユーザータスク上でのシステムコール発行時に、このシステムコール発行がシステムコールオペコードと特権バンクの実行インストラクションの開始アドレスが格納されているアドレステーブルの値で構成されるシステムコール命令を実行する。分岐処理をする第２の手段は、ユーザータスク上での分岐命令の実行時に、この分岐命令が分岐命令オペコードと特権バンクの実行インストラクションの開始アドレスが格納されているアドレステーブルを指定する。これにより、間接的に前記インストラクションの開始アドレスを指定可能な２重間接アドレスで構成される分岐命令を実行する。割込み処理をする第３の手段は、割込みの実行時に、割込み処理要因毎に指定される割込み処理開始アドレスが格納されているアドレステーブルにより割込み処理をする。前記３つの手段のいずれかによる実行時に、特権タスクへの移行と、待避処理を行うかどうかをアドレステーブル自身のアドレスにより判断する。かつ、ユーザータスク処理から特権タスク処理に移行したときにソフトウェアの介入なしでＣＰＵを特権モードに切り替える手段を備えた。【０００８】
特開平５−１００９５７号公報に記載された「情報処理装置」の発明においては、プログラム実行レベルレジスタは、実行されるプログラムの特権度を示す複数段階の実行レベルを格納する。メモリ部は、複数段階のアクセス実行レベルがそれぞれ指定された複数のメモリエリアを備える。メモリアクセス実行レベルレジスタは、このメモリ部の各メモリエリアのアクセス実行レベルと対応する実行レベルを格納する。比較器は、前記プログラム実行レベルレジスタからの現在実行中のプログラムの実行レベルと前記メモリアクス実行レベルレジスタからのこのプログラムにより指定された前記メモリ部のメモリエリアのアクセス実行レベルとを比較し一致したとき一致信号を出力する。命令シーケンサは、前記一致信号により前記実行中のプログラムに対するこのプログラムの指定する前記メモリ部のメモリエリアへのアクセスを許可する。【０００９】
特開２００２−３４２１６６号公報に記載された「情報処理装置及びアクセスレベル制御方法」は、プロセス毎にアクセスレベルが変更可能とされた情報処理装置における発明である。アクセス検出部は、前記処理部からの所定のアドレスへのアクセスを検出する。アクセス部は、前記アクセス検出部で前記所定のアドレスへのアクセスが検出されたときには、アクセスレベルを変更可能とする。
【発明の開示】
【００１０】
上記した特開２００３−２２３３１７号公報によると、ユーザレベルで動作するアプリケーションプロセスに対し、ＲＯＭ領域という改ざんが困難なメモリ領域内に配置された特権命令については実行を許可するため、特権命令を含むライブラリ関数をＲＯＭ領域に保持しておけば、ライブラリ関数の機能をアプリケーションプロセスに提供することが可能になる。また、ＲＡＭ領域という改ざんが容易なメモリ領域内に配置された特権命令については、ユーザレベルで動作するアプリケーションプロセスによる実行を禁止することができるため、アプリケーションコード内での特権命令の不正な使用を防止できる。
【００１１】
しかしながら、アプリケーションプロセスがＲＯＭ領域に配置されたライブラリ関数内の特権命令に直接ジャンプするような攻撃に対しては耐性がない。その理由は、ジャンプ先の特権命令の実行によって例外処理が発生しても、その特権命令のアドレスはＲＯＭ領域内であるため、例外処理で当該特権命令が実行されてしまうからである。本来、ライブラリ関数は、基本的に入口から出口までに至る処理のすべてを実行することを前提に作られているため、その一部の処理だけを実行するような不正な攻撃が行われると、不測の事態を招いてしまうことになる。
【００１２】
本発明はこのような事情に鑑みて提案されたものであり、その目的は、アプリケーションプロセスによる特権命令の不正な使用を防止することにある。
【００１３】
本発明の別の目的は、アプリケーションプロセスによるライブラリ関数の不正な使用を防止することにある。
【００１４】
本発明の請求の範囲１記載の情報処理装置は、
自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持する記憶部と、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御部と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理部と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理部とを備えた。
【００１５】
本発明の請求の範囲２記載の情報処理装置は、請求の範囲１記載の情報処理装置において、前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である。
【００１６】
本発明の請求の範囲３記載の情報処理装置は、請求の範囲２記載の情報処理装置において、前記特権命令実行制御部は、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００１７】
本発明の請求の範囲４記載の情報処理装置は、請求の範囲１記載の情報処理装置において、前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である。
【００１８】
本発明の請求の範囲５記載の情報処理装置は、請求の範囲４記載の情報処理装置において、前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する。
【００１９】
本発明の請求の範囲６記載の情報処理装置は、請求の範囲１記載の情報処理装置において、前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む。
【００２０】
本発明の請求の範囲７記載の情報処理装置は、請求の範囲６記載の情報処理装置において、前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００２１】
本発明の請求の範囲８記載の情報処理装置は、請求の範囲６記載の情報処理装置において、前記セキュリティゲート侵入処理部は、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更するものであり、
前記セキュリティゲート退出処理部は、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻すものであり、
前記特権命令実行制御部は、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００２２】
本発明の請求の範囲９記載の情報処理装置は、請求の範囲６記載の情報処理装置において、前記特権命令実行制御部は、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す。
【００２３】
本発明の請求の範囲１０記載の情報処理装置は、請求の範囲７、８または９記載の情報処理装置において、セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理部を備えた。
【００２４】
本発明の請求の範囲１１記載の情報処理装置は、請求の範囲１記載の情報処理装置において、前記セキュリティゲート侵入処理部によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理部によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理部による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理部による変更後の値に戻すセキュリティゲート一時退出処理部を備えた。
【００２５】
本発明の請求の範囲１２記載の情報処理装置は、請求の範囲２、３、６〜１０の何れか１項に記載の情報処理装置において、前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更するものである。
【００２６】
本発明の請求の範囲１３記載の情報処理装置は、請求の範囲２、３、６〜１０の何れか１項に記載の情報処理装置において、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理部は、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更するものである。
【００２７】
本発明の請求の範囲１４記載の情報処理装置は、請求の範囲４〜１０の何れか１項に記載の情報処理装置において、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録されるものである。
【００２８】
本発明の請求の範囲１５記載の情報処理装置は、請求の範囲４〜１０の何れか１項に記載の情報処理装置において、セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される。
【００２９】
本発明の請求の範囲１６記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている。
【００３０】
本発明の請求の範囲１７記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている。
【００３１】
本発明の請求の範囲１８記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである。
【００３２】
本発明の請求の範囲１９記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記予め定められたアドレス範囲が、ＲＯＭ領域内のアドレス範囲である。
【００３３】
本発明の請求の範囲２０記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記予め定められたアドレス範囲が、ＲＯＭ領域からＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である。
【００３４】
本発明の請求の範囲２１記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記予め定められたアドレス範囲が、信頼できるファイルシステムからＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である。
【００３５】
本発明の請求の範囲２２記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記予め定められたアドレス範囲が、ファイルシステムからＲＡＭ領域へロードされた信頼できるライブラリ関数のＲＡＭ領域上でのアドレス範囲である。
【００３６】
本発明の請求の範囲２３記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かのチェックに加えて、前記第１の特定の命令のアドレスがプログラムエリアであるか否かのチェックを行うものである。
【００３７】
本発明の請求の範囲２４記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記第１の特定の命令と前記第２の特定の命令は、それぞれセキュリティゲート侵入要求、退出要求をオペレーティングシステムに対して発行するシステムコール命令である。
【００３８】
本発明の請求の範囲２５記載の情報処理装置は、請求の範囲１〜１１の何れか１項に記載の情報処理装置において、前記ライブラリ関数は、基本ライブラリ関数とサービスＡＰＩライブラリ関数とを含む。
【００３９】
本発明の請求の範囲２６記載の情報処理装置は、請求の範囲２５記載の情報処理装置において、前記基本ライブラリ関数は、特権命令として共有メモリ操作システムコール命令とセマフォ操作システムコール命令とを含み、
前記サービスＡＰＩライブラリ関数は、前記共有メモリ操作システムコール命令とセマフォ操作システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む。
【００４０】
本発明の請求の範囲２７記載の情報処理装置は、請求の範囲２５記載の情報処理装置において、前記基本ライブラリ関数は、Ｘサーバと通信を行うために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む。
【００４１】
本発明の請求の範囲２８記載の情報処理装置は、請求の範囲２５記載の情報処理装置において、前記基本ライブラリ関数は、ＤＲＭ管理対象コンテンツを含むファイルをオープンするために特権命令としてファイルオープンシステムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＤＲＭ処理を行い、且つ、前記ファイルオープンシステムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む。
【００４２】
本発明の請求の範囲２９記載の情報処理装置は、請求の範囲２５記載の情報処理装置において、前記基本ライブラリ関数は、外部のサーバと通信するために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＨＴＴＰ処理を行い、且つ、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む。
【００４３】
本発明の請求の範囲３０記載の情報処理方法は、情報処理装置にて、自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持し、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御処理と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理とを実行する。
【００４４】
本発明の請求の範囲３１記載の情報処理方法は、前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である。
【００４５】
本発明の請求の範囲３２記載の情報処理方法は、請求の範囲３１記載の情報処理方法において、前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００４６】
本発明の請求の範囲３３記載の情報処理方法は、請求の範囲３０記載の情報処理方法において、前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である。
【００４７】
本発明の請求の範囲３４記載の情報処理方法は、請求の範囲３３記載の情報処理方法において、前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する。
【００４８】
本発明の請求の範囲３５記載の情報処理方法は、請求の範囲３０記載の情報処理方法において、前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む。
【００４９】
本発明の請求の範囲３６記載の情報処理方法は、請求の範囲３５記載の情報処理方法において、前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００５０】
本発明の請求の範囲３７記載の情報処理方法は、請求の範囲３５記載の情報処理方法において、前記セキュリティゲート侵入処理では、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更し、
前記セキュリティゲート退出処理では、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻し、
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する。
【００５１】
本発明の請求の範囲３８記載の情報処理方法は、請求の範囲３５記載の情報処理方法において、前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す。
【００５２】
本発明の請求の範囲３９記載の情報処理方法は、請求の範囲３６、３７または３８記載の情報処理方法において、前記情報処理装置は、セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理を行う。
【００５３】
本発明の請求の範囲４０記載の情報処理方法は、請求の範囲３０記載の情報処理方法において、前記情報処理装置は、前記セキュリティゲート侵入処理によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中に、シグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理による変更後の値に戻すセキュリティゲート一時退出処理を行う。
【００５４】
本発明の請求の範囲４１記載の情報処理方法は、請求の範囲３１、３２、３５〜３９の何れか１項に記載の情報処理方法において、前記セキュリティゲート侵入処理では、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更する。
【００５５】
本発明の請求の範囲４２記載の情報処理方法は、請求の範囲３１、３２、３５〜３９の何れか１項に記載の情報処理方法において、前記コンピュータは、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理では、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更する。
【００５６】
本発明の請求の範囲４３記載の情報処理方法は、請求の範囲３３〜３９の何れか１項に記載の情報処理方法において、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録される。
【００５７】
本発明の請求の範囲４４記載の情報処理方法は、請求の範囲３３〜３９の何れか１項に記載の情報処理方法において、セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される。
【００５８】
本発明の請求の範囲４５記載の情報処理方法は、請求の範囲３０〜４０の何れか１項に記載の情報処理方法において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている。
【００５９】
本発明の請求の範囲４６記載の情報処理方法は、請求の範囲３０〜４０の何れか１項に記載の情報処理方法において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている。
【００６０】
本発明の請求の範囲４７記載の情報処理方法は、請求の範囲３０〜４０の何れか１項に記載の情報処理方法において、前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである。
【００６１】
『作用』
本発明において、アプリケーションプロセスがライブラリ関数を呼び出すと、そのライブラリ関数で行われる処理のうち、実行を保証する部分の実行前に、第１の特定の命令が実行され、内部割り込みが発生する。この内部割り込みにかかる例外処理において、セキュリティゲート侵入処理部により、第１の特定の命令のアドレスが許容アドレス範囲内であるか否かがチェックされ、許容アドレス範囲内であれば、アプリケーションプロセスの属性値が特権命令を実行できるように変更され、許容アドレス範囲内でなければそのような属性値の変更は行われない。この後、呼び出されたライブラリ関数の後続の処理が実行され、それに伴い実行を保証する部分が実行される。そして、ライブラリ関数の処理が特権命令の箇所に進むと、その特権命令の実行により内部割り込みが発生し、その内部割り込みにかかる例外処理において、特権命令実行制御部により、アプリケーションプロセスの属性値に基づいて特権命令の実行可否が制御される。従って、特権命令の実行が許されていないアプリケーションプロセスが特権命令へ直接ジャンプした場合、第１の特定の命令が実行されないので、属性値は特権命令を実行できない状態のままであるのに対し、第１の特定の命令が許容アドレス範囲内に存在する正規なライブラリ関数を呼び出した場合には、第１の特定の命令の実行によって特権命令が使用できるように属性値が変更されているため、特権命令の実行が可能となる。またこの場合、第１の特定の命令の後に配置された、実行を保証する部分が必ず実行されることになる。そして、ライブラリ関数から呼び出し元のアプリケーションプロセスに戻る前に、アプリケーションプロセスが第２の特定の命令を実行すると、内部割り込みが発生し、この内部割り込みにかかる例外処理において、セキュリティゲート退出処理部により、アプリケーションプロセスの属性値が特権命令を実行できない元の状態に戻される。これにより、正規のライブラリ関数に含まれる特権命令以外の特権命令の実行が防止される。
【００６２】
本発明によれば、アプリケーションプロセスに設定された属性値では実行許可のない特権命令を含むライブラリ関数を、アプリケーションプロセスに提供することができる。その理由は、アプリケーションプロセスに提供する正規のライブラリ関数については、それに含まれる第１の特定の命令が存在するアドレス範囲を許容アドレス範囲として設定しておくことにより、アプリケーションプロセスがライブラリ関数を呼び出した場合に、第１の特定の命令の実行時にそのアドレスが許容アドレス範囲内であることがチェックされ、アプリケーションプロセスの属性値が変更されて特権命令の実行が可能となるからである。
【００６３】
また本発明によれば、実行を保証する部分をパスして特権命令を含む残りの部分を実行するようなライブラリ関数の不正な利用を防止することができる。その理由は、アプリケーションプロセスが、ライブラリ関数内の実行を保証する部分をパスして途中の箇所へ直接ジャンプするような不正を行えば、第１の特定の命令が実行されず属性値が変更されないため、特権命令の実行時点でエラーとなるからである。
【００６４】
また本発明によれば、アプリケーションプロセスによる特権命令の不正な使用を防止することができる。その理由は、ライブラリ関数からアプリケーションプロセスに戻る前に第２の特定の命令によって属性値が元に戻されるため、アプリケーションプロセスの属性値が特権命令を実行できる状態になっているのは、ライブラリ関数の実行中だけに限定されるからである。
【図面の簡単な説明】
【００６５】
【図１】本発明の情報処理装置のハードウェア構成の一例を示すブロック図である。
【図２】本発明の第１の実施の形態のブロック図である。
【図３】本発明の第２の実施の形態のブロック図である。
【図４】本発明の第２の実施の形態の変形例のブロック図である。
【図５】本発明の第３の実施の形態のブロック図である。
【図６】本発明の第１の実施の形態の実施例１のブロック図である。
【図７】本発明の第１の実施の形態の実施例１の動作を示すフロー図である。
【図８】本発明の第１の実施の形態の実施例１の動作を示すフロー図である。
【図９】本発明の第１の実施の形態の実施例１の動作を示すフロー図である。
【図１０】本発明の第１の実施の形態の実施例１におけるアプリケーションプログラム、ＡＰＩライブラリプログラムおよび基本ライブラリプログラムの内容例を示す図である。
【図１１】本発明の第１の実施の形態の実施例１の具体的な適用例１を示すブロック図である。
【図１２】本発明の第１の実施の形態の実施例１の具体的な適用例２を示すブロック図である。
【図１３】本発明の第１の実施の形態の実施例１の具体的な適用例３を示すブロック図である。
【図１４】本発明の第１の実施の形態の実施例１の具体的な適用例４を示すブロック図である。
【図１５】本発明の第１の実施の形態の実施例２のブロック図である。
【図１６】本発明の第１の実施の形態の実施例２の動作を示すフロー図である。
【図１７】本発明の第１の実施の形態の実施例２の動作を示すフロー図である。
【図１８】本発明の第１の実施の形態の実施例２の動作を示すフロー図である。
【図１９】本発明の第１の実施の形態の実施例２の変形例のブロック図である。
【図２０】本発明の第１の実施の形態の実施例３のブロック図である。
【図２１】本発明の第１の実施の形態の実施例３の動作を示すフロー図である。
【図２２】本発明の第１の実施の形態の実施例４のブロック図である。
【図２３】本発明の第１の実施の形態の実施例４の動作を示すフロー図である。
【図２４】本発明の第２の実施の形態の実施例１のブロック図である。
【図２５】本発明の第２の実施の形態の実施例１におけるスタック改変処理の説明図である。
【図２６】本発明の第３の実施の形態の実施例１のブロック図である。
【図２７】本発明の第３の実施の形態の実施例１の動作を示すフロー図である。
【発明を実施するための最良の形態】
【００６６】
以下、本発明を実施するための最良の形態について図面を参照して詳細に説明する。【００６７】
＜本発明の情報処理装置のハードウェア構成例＞
図１を参照すると、本発明の情報処理装置のハードウェア構成の一例は、ＣＰＵ１、ＲＯＭ２、ＲＡＭ３、表示部４、入力操作部５、ファイルシステム６およびこれらを相互に接続するバス７から構成されている。ＲＯＭ２は、読み取り専用のメモリであり、ＣＰＵ１で実行されるオペレーティングシステム（ＯＳ）、ライブラリ関数および固定データなどを記憶する。ＲＡＭ３は、読み書き可能なメモリであり、ＣＰＵ１で実行されるアプリケーションプロセスおよび演算データなどを一時的に記憶する。表示部４は、ＬＣＤなどで構成され、アプリケーション画面などを表示する。入力操作部５はキーボードなどで構成され、ユーザからのデータや指示を入力する。ファイルシステム６は、ハードディスクやＳＤカードなどで構成され、アプリケーションプログラムや各種データを記憶する。このようなハードウェア構成を有する情報処理装置の例としては、パーソナルコンピュータなどの一般的なコンピュータ、ゲート端末、携帯電話などがある。【００６８】
＜第１の実施の形態＞
図２を参照すると、本発明の第１の実施の形態は、ＯＳ１１、ライブラリ関数１２、アプリケーションプロセス１３、属性値１４および第１の特定の命令の許容アドレス範囲１５を、コンピュータ読み取り可能な記録媒体に保持している。【００６９】
ライブラリ関数１２は、自関数で行われる処理のうち実行を保証する部分２１の実行前に第１の特定の命令２２が実行され、且つ呼び出し元に戻る前に第２の特定の命令２３が実行されるようになっている。典型的には、関数の先頭部分に第１の特定の命令２２が配置され、呼び出し元に戻る直前の部分に第２の特定の命令２３が配置される。ライブラリ関数１２には、１以上の特権命令２４が含まれる。第１の特定の命令２２、第２の特定の命令２３および特権命令２４はシステムコール命令であり、その実行時に内部割り込みが発生し、制御がＯＳ１１に移される。また、第１の特定の命令２２の許容アドレス範囲１５が事前に設定され、第１の特定の命令２２の実行による内部割り込み時に、ＯＳ１１により参照される。【００７０】
アプリケーションプロセス１３は、ライブラリ関数１２を呼び出すコール命令４１、ライブラリ関数１２内の特権命令２４に直接ジャンプするジャンプ命令４２、および特権命令４３を実行する。【００７１】
ＯＳ１１は、例えば、アプリケーションプロセス１３毎にセキュリティレベルを設定可能なセキュアＯＳである。ＯＳ１１は、アプリケーションプロセス１３毎の属性値１４を管理している。属性値１４は、アプリケーションプロセス１３が利用する機能やリソースのアクセス制御の判断に用いられる１以上の属性値である。属性値１４の具体例としては、セキュリティレベルを示す属性値、セキュリティゲート侵入状態を示す属性値がある。また、第１の特定の命令２２、第２の特定の命令２３および特権命令２４、４３の実行によって内部割り込みが発生した際、それらに対応する例外処理として、セキュリティゲート侵入処理３１、セキュリティゲート退出処理３２および特権命令実行制御３３を行う機能を持つ。【００７２】
特権命令実行制御３３では、アプリケーションプロセス１３がライブラリ関数１２を呼び出してその特権命令２４を実行した際、および、アプリケーションコード上の特権命令４３を実行した際、アプリケーションプロセス１３の属性値１４に基づいて特権命令２４、４３の実行可否を制御する。【００７３】
セキュリティゲート侵入処理３１では、アプリケーションプロセス１３が第１の特定の命令２２を実行した際、第１の特定の命令２２のアドレスが許容アドレス範囲１５内であるか否かをチェックし、許容アドレス範囲１５内であれば、アプリケーションプロセス１３の属性値１４を変更する。【００７４】
セキュリティゲート退出処理３２では、アプリケーションプロセス１３が第２の特定の命令２３を実行した際、アプリケーションプロセス１３の属性値１４を元に戻す。【００７５】
次に本実施の形態の動作を説明する。ここで、アプリケーションプロセス１３の属性値１４は、特権命令を実行することができない値になっているものとする。また、許容アドレス範囲１５には、正規のライブラリ関数１２が配置されているメモリ（例えば図１のＲＯＭ２）のメモリアドレス範囲が設定されているものとする。【００７６】
アプリケーションプロセス１３がコール命令４１によってライブラリ関数１２を呼び出すと、その先頭部分に配置された第１の特定の命令２２がまず実行され、ＯＳ１１のセキュリティゲート侵入処理３１により、アプリケーションプロセス１３の属性値１４が変更される。例えば、特権命令の実行可否をセキュリティレベルで制御する場合にはセキュリティレベルが変更され、特権命令の実行可否をセキュリティゲート侵入状態で制御する場合にはセキュリティゲート侵入の有無を示す属性値が変更される。なお、この時点ではセキュリティゲート侵入状態を示す属性値を変更しておき、特権命令実行制御３３の時点でセキュリティゲート侵入状態か否かを判定し、セキュリティゲート侵入状態であればセキュリティレベルを変更してから特権命令の実行可否をセキュリティレベルに基づいて判断し、再びセキュリティレベルを元に戻すような処理を行うことも可能である。【００７７】
続いて、処理を保証する部分２１が実行された後、特権命令２４がアプリケーションプロセス１３によって実行されると、ＯＳ１１の特権命令実行制御３３により、アプリケーションプロセス１３の属性値１４に基づいて特権命令の実行可否が判定され、実行可であれば特権命令２４の実行が行われ、制御が呼び出し元に戻される。【００７８】
続いて、ライブラリ関数１２の処理が進み、呼び出し元に戻る直前に第２の特定の命令２３が実行されると、ＯＳ１１のセキュリティゲート退出処理３２により、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入前の状態に戻される。【００７９】
その後、アプリケーションプロセス１３が、ライブラリ関数１２の特権命令２４に直接ジャンプする命令４２を実行すると、ジャンプ先の特権命令２４が実行されることにより、制御がＯＳ１１の特権命令実行制御３３に移るが、第１の特定の命令が実行されていないのでアプリケーションプロセス１３の属性値１４は特権命令を実行できるように変更されていないため、特権命令実行制御３３では、特権命令を実行せずにエラーとする。【００８０】
また、アプリケーションプロセス１３が特権命令４３を直接に実行すると、制御がＯＳ１１の特権命令実行制御３３に移るが、この場合も第１の特定の命令が実行されていないのでアプリケーションプロセス１３の属性値１４は特権命令を実行できるように変更されていないため、特権命令実行制御３３では、特権命令を実行せずにエラーとする。【００８１】
このようにして本実施の形態によれば、アプリケーションプロセス１３による特権命令２４、４３およびライブラリ関数１２の不正な使用を防止することができる。【００８２】
＜第２の実施の形態＞
図３を参照すると、本発明の第２の実施の形態は、ライブラリ関数１２内に第２の特定の命令２３が配置されておらず、その代わりに、呼び出し元に戻る前に第２の特定の命令２３を含む関数１６を経由するようにアプリケーションプロセス１３のスタック１７を改変（更新）する命令列２５が配置されている点で、第１の実施の形態と相違する。ここで、命令列２５の配置場所は、第１の特定の命令２２が配置された箇所以降で必ず実行される経路上であれば、任意の場所で良い。【００８３】
次に本実施の形態の動作を第１の実施の形態との相違点を中心に説明する。【００８４】
アプリケーションプロセス１３がコール命令４１によってライブラリ関数１２を呼び出すと、その先頭部分に配置された第１の特定の命令２２がまず実行され、ＯＳ１１のセキュリティゲート侵入処理３１により、アプリケーションプロセス１３の属性値１４が変更される。続いて、命令列２５がアプリケーションプロセス１３によって実行されることにより、アプリケーションプロセス１３に戻る前に関数１６を経由するようにスタック１７が改変される。続いて、処理を保証する部分２１が実行された後、特権命令２４がアプリケーションプロセス１３によって実行されると、ＯＳ１１の特権命令実行制御３３により、アプリケーションプロセス１３の属性値１４に基づいて特権命令の実行可否が判定され、実行可であれば、特権命令２４の実行が行われて、制御が呼び出し元に戻される。続いて、ライブラリ関数１２の処理が進み、呼び出し元の情報を得るためにスタック１７をポップすると、関数１６の情報が得られるため、関数１６が呼び出され、その中の第２の特定の命令２３が実行される。これにより、ＯＳ１１のセキュリティゲート退出処理３２が実行され、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入前の状態に戻される。【００８５】
アプリケーションプロセス１３が、ライブラリ関数１２の特権命令２４に直接ジャンプする命令４２を実行した場合と特権命令４３を実行した場合の動作は、第１の実施の形態と同じである。【００８６】
このようにして本実施の形態によれば、アプリケーションプロセス１３による特権命令２４、４３およびライブラリ関数１２の不正な使用を防止することができる。また、ライブラリ関数１２から呼び出し元のアプリケーションプロセス１３に戻る出口が複数存在する場合、ライブラリ関数１２内に第２の特定の命令を配置する方法では、それらすべての出口の前に第２の特定の命令を配置する必要があるが、本実施の形態では、１つの命令列２５を配置しておくだけで済む利点がある。【００８７】
＜第２の実施の形態の変形例＞
図４を参照すると、本発明の第２の実施の形態の変形例は、ライブラリ関数１２内に第２の特定の命令２３が配置されておらず、その代わりに、ＯＳ１１のセキュリティゲート侵入処理３１に、ライブラリ関数１２からアプリケーションプロセス１３に戻る前に第２の特定の命令２３を含む関数１６を経由するようにアプリケーションプロセス１３のスタック１７を改変（更新）する処理が追加されている点で、第１の実施の形態と相違する。【００８８】
次に本実施の形態の動作を第１の実施の形態との相違点を中心に説明する。【００８９】
アプリケーションプロセス１３がコール命令４１によってライブラリ関数１２を呼び出すと、その先頭部分に配置された第１の特定の命令２２がまず実行され、ＯＳ１１のセキュリティゲート侵入処理３１により、アプリケーションプロセス１３の属性値１４が変更され、且つ、ライブラリ関数１２からアプリケーションプロセス１３に戻る前に関数１６を経由するようにスタック１７が改変される。続いて、処理を保証する部分２１が実行された後、特権命令２４がアプリケーションプロセス１３によって実行されると、ＯＳ１１の特権命令実行制御３３により、アプリケーションプロセス１３の属性値１４に基づいて特権命令の実行可否が判定され、実行可であれば、特権命令２４の実行が行われて、制御が呼び出し元に戻される。続いて、ライブラリ関数１２の処理が進み、呼び出し元の情報を得るためにスタック１７をポップすると、関数１６の情報が得られるため、関数１６が呼び出され、その中の第２の特定の命令２３が実行される。これにより、ＯＳ１１のセキュリティゲート退出処理３２が実行され、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入前の状態に戻される。【００９０】
アプリケーションプロセス１３が、ライブラリ関数１２の特権命令２４に直接ジャンプする命令４２を実行した場合と特権命令４３を実行した場合の動作は、第１の実施の形態と同じである。【００９１】
このようにして本実施の形態によれば、アプリケーションプロセス１３による特権命令２４、４３およびライブラリ関数１２の不正な使用を防止することができる。また、ライブラリ関数１２から呼び出し元のアプリケーションプロセス１３に戻る出口が複数存在する場合、ライブラリ関数１２内に第２の特定の命令を配置する方法では、それらすべての出口の前に第２の特定の命令を配置する必要があり、第２の実施の形態では１つの命令列２５を配置する必要があるが、本実施の形態ではそれらが不要となる。【００９２】
＜第３の実施の形態＞
図５を参照すると、本発明の第３の実施の形態は、セキュリティゲート侵入処理３１によってアプリケーションプロセス１３の属性値１４を変更した後、セキュリティゲート退出処理３４によってアプリケーションプロセス１３の属性値１４を元に戻すまでのアプリケーションプロセス１３の走行中に、シグナルまたは割り込み２６が発生した際、アプリケーションプロセス１３のシグナル／割り込みハンドラ４４を呼び出す前にアプリケーションプロセス１３の属性値１４をセキュリティゲート侵入処理３１による変更前の値に戻し、シグナル／割り込みハンドラ４４による処理が終わったときにセキュリティゲート侵入処理３１による変更後の値に戻すセキュリティゲート一時退出処理３４をＯＳ１１が実行するようにした点で、第１の実施の形態と相違する。【００９３】
次に本実施の形態の動作を第１の実施の形態との相違点を中心に説明する。【００９４】
アプリケーションプロセス１３がコール命令４１によってライブラリ関数１２を呼び出すと、その先頭部分に配置された第１の特定の命令２２がまず実行され、ＯＳ１１のセキュリティゲート侵入処理３１により、アプリケーションプロセス１３の属性値１４が変更される。続いて、処理を保証する部分２１が実行された後、特権命令２４がアプリケーションプロセス１３によって実行されると、ＯＳ１１の特権命令実行制御３３により、アプリケーションプロセス１３の属性値１４に基づいて特権命令の実行可否が判定され、実行可であれば、特権命令２４の実行が行われて、制御が呼び出し元に戻される。その後、シグナルまたは割り込み２６が発生すると、内部割り込みが発生して制御がＯＳ１１に移り、セキュリティゲート一時退出処理３４が実行され、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入処理３１による変更前の値に戻された後、アプリケーションプロセス１３のシグナル／割り込みハンドラ４４が呼び出される。そして、シグナル／割り込みハンドラ４４による処理が終了すると、制御がＯＳ１１のセキュリティゲート一時退出処理３４に戻り、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入処理３１による変更後の値に戻された後、ライブラリ関数１２の前記シグナルまたは割り込み２６で中断した箇所に制御が戻される。そして、ライブラリ関数１２の処理が進み、呼び出し元に戻る直前に第２の特定の命令２３が実行されると、ＯＳ１１のセキュリティゲート退出処理３２により、アプリケーションプロセス１３の属性値１４がセキュリティゲート侵入前の状態に戻される。【００９５】
アプリケーションプロセス１３が、ライブラリ関数１２の特権命令２４に直接ジャンプする命令４２を実行した場合と特権命令４３を実行した場合の動作は、第１の実施の形態と同じである。【００９６】
このようにして本実施の形態によれば、第１の実施の形態に比べてより確実に、アプリケーションプロセス１３による特権命令２４、４３およびライブラリ関数１２の不正な使用を防止することができる。【００９７】
（実施例）
次に、本発明の実施例について図面を参照して詳細に説明する。【００９８】
＜第１の実施の形態の実施例１＞
図６を参照すると、本発明の第１の実施の形態の実施例１は、プログラム制御により動作するコンピュータ１００からなり、コンピュータ１００は、通常メモリエリア１１０と高信頼メモリエリア１２０を具備する。また、コンピュータ１００では、基本プログラムであるＯＳ１３０が動作している。【００９９】
通常メモリエリア１１０には、アプリケーションプログラム１１１が配置される。高信頼メモリエリア１２０には、信頼できるサービスＡＰＩライブラリ１２１と基本ライブラリ１２２とが配置される。ここで、高信頼メモリエリア１２０とは、記憶されている情報が改竄されている可能性が低く信頼度が高いメモリエリアのことであり、通常メモリエリア１１０とはその逆のメモリエリアのことである。また、基本ライブラリ１２２は、ファイル操作機能、文字列操作機能、通信機能など、いろいろなアプリケーションプログラム１１０あるいはライブラリプログラムから利用される基本的な機能を提供するライブラリ（例えばｌｉｂｃ）である。サービスＡＰＩライブラリ１２１は、アプリケーションプログラム１１０に提供しているサービスをアプリケーションプログラムが利用する際に直接呼び出すＡＰＩ関数を含むライブラリである。【０１００】
本実施例の場合、サービスＡＰＩライブラリ１２１には、第１の特定の命令１２３と第２の特定の命令１２４とが配置される。また、サービスＡＰＩライブラリ１２１もしくは基本ライブラリ１２２は、特権処理システムコール１２５を含む。【０１０１】
ＯＳ１３０には、セキュリティゲート進入処理部１３１と、セキュリティゲート退出処理部１３２と、メモリ種別判断処理部１３３と、セキュリティレベル変更部１３４と、セキュリティレベル変更ポリシデータベース１３５と、権限チェック処理部１３６と、特権処理システムコール処理部１３７と、プロセス状態管理データベース１３８とが設けられている。ＯＳ１３０は、例えばLinuxであるが、それ以外の種類のＯＳであってもかまわない。【０１０２】
通常メモリエリア１１０は、ＲＡＭ等により実現され、アプリケーションプログラム１１１から自由に利用することができる。【０１０３】
アプリケーションプログラム１１１は、製品の工場出荷時には含まれず、後から追加したような、信頼できるか不明なプログラムとする。一般にアプリケーションプログラム１１１は、ＯＳ１３０によってファイルシステム等の不揮発ストレージから通常メモリエリア１１０にロードされ、アプリケーションプロセスとして実行される。【０１０４】
高信頼メモリエリア１２０は、アプリケーションプロセスから容易には改ざんされない特性を持つメモリエリアである。最も一般的な実現方法は、ＲＯＭによる実装であるが、ＯＳ１３０の管理下の元、アプリケーションプロセスから容易に改ざんされない設定をされたＲＡＭ、つまり、アプリケーションプログラムからの書き込み権限が設定されていないメモリ空間として割り当てられたＲＡＭでも良い。この場合、ＯＳ１３０が、高信頼メモリエリア１２０に、ＲＯＭやファイルシステムよりサービスＡＰＩライブラリ１２１および基本ライブラリ１２２をロードすることによって配置される。なお、例えば、Linuxでは、プログラムコードが格納されているメモリ空間は書き込み禁止に設定されるので、そのようなメモリ空間が該当する。【０１０５】
サービスＡＰＩライブラリ１２１は、アプリケーションプログラム１１１に対して様々なライブラリ機能を提供するものであり、アプリケーションプログラム１１１がその機能を利用する際に呼び出すＡＰＩ関数を複数持つ。【０１０６】
第１の特定の命令１２３は、特定のシステムコール命令として実装され、前記ＡＰＩ関数の先頭に配置される。アプリケーションプロセスがこの命令１２３を呼び出すと、内部割り込みが発生し、ＯＳ１３０のセキュリティゲート進入処理部１３１が呼び出される。【０１０７】
第２の特定の命令１２４も、特定のシステムコール命令として実装され、前記ＡＰＩ関数処理の末尾に配置される。アプリケーションプロセスがこの命令１２４を呼び出すと、内部割り込みが発生し、ＯＳ１３０のセキュリティゲート退出処理部１３２が呼び出される。【０１０８】
基本ライブラリ１２２は、サービスＡＰＩライブラリ１２１等が利用する、よりベーシックな機能を提供するライブラリである。【０１０９】
特権処理システムコール１２５は、サービスＡＰＩライブラリ１２１もしくは基本ライブラリ１２２の機能を実現する為に、ＯＳ１３０の機能を呼び出すものであり、信頼できるか不明なアプリケーションプロセスのセキュリティレベルでは実行権が与えられていないものとする。なお、特権処理システムコール１２５をアプリケーションプロセスが呼び出すと、内部割り込みが発生し、ＯＳ１３０内の権限チェック処理部１３６が呼び出される。アプリケーションプロセスのセキュリティレベルは、本実施例の場合、”Ｌｏｗ”（非特権レベル）と”Ｈｉｇｈ”（特権レベル）の２レベルとする。勿論、３レベル以上のレベルを持つコンピュータや、或る種の携帯電話機のように、装置製造者レベル、通信事業者レベル、信頼できるアプリケーションベンダレベル、信頼できるか不明なレベルの４レベルのセキュリティレベルを持つ端末にも適用可能である。【０１１０】
セキュリティゲート進入処理部１３１は、第１の特定の命令１２３が正規に実行されたかどうかを、メモリ種別判断処理部１３３の結果を元に判断し、正規に実行されたものである場合には、セキュリティレベル変更部１３４を用いて当該アプリケーションプロセスのセキュリティレベルをより高次なものに切り替える。他方、第１の特定の命令１２３が不正に実行されたものである場合には、セキュリティレベルの切り替えは行わない。【０１１１】
メモリ種別判断処理部１３３は、実行された第１の特定の命令１２３が、高信頼メモリエリア１２０にあるかどうかを判断する。具体的には、高信頼メモリエリア１２０のアドレス範囲を許容アドレス範囲として保持し、実行された第１の特定の命令１２３のアドレスと許容アドレス範囲とを比較し、第１の特定の命令１２３のアドレスが許容アドレス範囲内であれば、高信頼メモリ１２０にあると判断し、それ以外は通常メモリエリア１１０にあると判断する。また、メモリ種別判断処理部１３３は、さらに、高信頼メモリエリアであることが確認された第１の特定の命令の存在するメモリアドレスが、プログラムコードエリアであって、データエリアではないことをＯＳ１３０が管理するデータを参照することで確認しても良く、そうすればデータエリアの偶然のパターン一致による判断ミスを防ぐことができる。【０１１２】
上記の許容アドレス範囲の設定は、以下のａ）、ｂ）のように行う。【０１１３】
ａ）高信頼メモリエリア１２０がＲＯＭ領域であれば、そのＲＯＭ領域のアドレス範囲を許容アドレス範囲とする。【０１１４】
ｂ）ファイルシステムまたはＲＯＭ中にある信頼できるサービスＡＰＩライブラリプログラムをＲＡＭ領域にロードして実行するコンピュータの場合、そのロードされたメモリアドレス範囲を許容アドレス範囲とする。なお、ロードされるサービスＡＰＩライブラリプログラムが信頼できるかどうかの判断は、ロード元のファイルシステムやＲＯＭそのものが信頼できるかどうかの情報をあらかじめ保持しておき、これを参照して判断する方法、信頼できるサービスＡＰＩライブラリプログラムのリストをあらかじめ保持しておき、これを参照して判断する方法、信頼できるサービスＡＰＩライブラリプログラム自身にあらかじめ印（署名など）をつけておき、ロード時に確認する方法等を利用することができる。【０１１５】
セキュリティゲート退出処理部１３２は、セキュリティレベル変更部１３４を用いて、当該アプリケーションプロセスのセキュリティレベルを元の状態に戻す。【０１１６】
プロセス状態管理データベース１３８は、アプリケーションプロセスを一意に識別するプロセスＩＤとセキュリティレベルとの組を保持する。【０１１７】
セキュリティレベル変更部１３４は、セキュリティゲート進入処理部１３１の要求により、当該アプリケーションプロセスのセキュリティレベルを変更すべく、プロセス状態管理データベース１３８の当該アプリケーションプロセスのセキュリティレベルを表す部分を変更する。この際、元に戻せるように、変更前の値をプロセス状態管理データベース１３８に保持しておく。【０１１８】
ここで、変更ルールを保持するセキュリティレベル変更ポリシデータベース１３５を設け、セキュリティレベル変更部１３４がこのデータベース１３５に保持された変更ルールに則って、アプリケーションプロセスのセキュリティレベルを変更するようにしても良い。例えば、アプリケーションの種類、素性、元のセキュリティレベルによって、どのレベルまでセキュリティレベルを上げるかを記述した変更ルールや、装置（コンピュータ）の状態によって、どのレベルまでセキュリティレベルを上げるかを記述した変更ルールを用いれば、より柔軟なセキュリティレベル変更が可能になる。【０１１９】
また、セキュリティレベル変更部１３４は、セキュリティゲート退出処理部１３２の要求により、当該アプリケーションプロセスのセキュリティレベルを元に戻す処理を行う。【０１２０】
権限チェック処理部１３６は、ＯＳ１３０に対して要求された特権処理システムコールが、要求元のアプリケーションプロセスの現在のセキュリティレベルで実行する権限があるかどうかを、プロセス状態管理データベース１３８の情報を参照して判断し、権限がある場合は特権処理システムコール処理部１３７を用いて処理を行う。権限が無いときには要求されたシステムコールの実行を行わず、エラーとする。【０１２１】
特権処理システムコール処理部１３７は、要求された特権処理システムコールの処理を行う。【０１２２】
次に、図６及び図７から図９のフローチャートを参照して本実施例の動作について詳細に説明する。【０１２３】
まず、ＯＳ１３０によって、アプリケーションプログラム１１１が通常メモリエリア１１０にロードされ、アプリケーションプロセス（プロセスID=nnn）として実行される。この時、アプリケーションプロセスは信頼できるかどうか不明であり、セキュリティレベルは“Ｌｏｗ”で動作するものとする。アプリケーションプロセスは、必要に応じてサービスＡＰＩライブラリ１２１が提供するＡＰＩ関数を呼び出し、ＡＰＩ関数の先頭に配置された、第１の特定の命令１２３が実行される（図７のステップＳ１０１）。【０１２４】
第１の特定の命令１２３が実行されると、ＯＳ１３０内にあるセキュリティゲート進入処理部１３１が呼び出される。セキュリティゲート進入処理部１３１では、呼び出される原因となった第１の特定の命令１２３が存在するメモリエリアの種別をメモリ種別判断処理部１３３を用いて求める（図７のステップＳ１０２）。求めたメモリエリアの種別が高信頼メモリエリア１２０である場合に限り、セキュリティレベル変更部１３４を用いてアプリケーションプロセスのセキュリティレベルをより高次なものに変更する（図７のステップＳ１０３及びＳ１０４）。これにより、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティレベルに関するデータが例えば“Ｌｏｗ”から“Ｈｉｇｈ”に変更されることになる。アプリケーションプロセスのセキュリティレベルの変更が完了したら、第１の特定の命令１２３の処理を完了する（図７のステップＳ１１４）。ステップＳ１０３で、メモリエリアの種別が高信頼メモリエリア１２０でなければ、アプリケーションプロセスのセキュリティレベルを変更せずに、第１の特定の命令１２３の処理を完了する（図７のステップＳ１１４）。【０１２５】
その後、アプリケーションプロセスは、サービスＡＰＩライブラリ１２１の処理やサービスＡＰＩライブラリ１２１がさらに呼び出す基本ライブラリ１２２が提供するプログラムを実行し、この過程で、特権処理システムコール１２５が実行されることになる。【０１２６】
特権処理システムコール１２５が実行されると（図８のステップＳ１１１）、ＯＳ１３０内の権限チェック処理部１３６が呼び出される。権限チェック処理部１３６では、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティレベルを参照し、“Ｈｉｇｈ”状態にあるならば、特権処理システムコール処理部１３７を用いて特権処理を行い（図８のステップＳ１１２およびＳ１１３）、処理を終了する（図８のステップＳ１１４）。アプリケーションプロセスのセキュリティレベルが“Ｌｏｗ”の場合は、特権処理を行わず、特権モードエラーを返し（図８のステップＳ１１５）、処理を終了する（図８のステップＳ１１４）。【０１２７】
その後、アプリケーションプロセスで、サービスＡＰＩライブラリ１２１の処理が完了し、アプリケーションプログラム１１１に処理が戻る直前で、第２の特定の命令１２４が実行される（図９のステップＳ１２１）。【０１２８】
第２の特定の命令１２４が実行されると、ＯＳ１３０内にあるセキュリティゲート退出処理部１３２が呼び出される。セキュリティゲート退出処理部１３２では、セキュリティレベル変更部１３４を用いて、当該アプリケーションプロセスのセキュリティレベルを元に戻す（図９のステップＳ１２２）。ここで、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティレベルに関するデータが“Ｌｏｗ”に戻ることになる。【０１２９】
次に図１０を参照して、アプリケーションプログラム１１１、サービスＡＰＩライブラリ１２１および基本ライブラリ１２２の具体例を説明する。なお、ＯＳはLinuxである。【０１３０】
図１０を参照すると、アプリケーションプログラム１１１には、そのアプリケーションプログラムが実現したい処理が書かれている。ＡＰＩライブラリプログラム１２１は、シャッター音を鳴らして写真を撮る処理をアプリケーションプログラム１１１に提供する。このシャッター音を鳴らす処理はその実行を保証する部分でもある。基本ライブラリプログラム１２２は、デバイスファイルに対するオープン、クローズ、リード、ライトの機能を提供する。また、アプリケーションプログラム１１１は通常メモリエリア１１０に、ＡＰＩライブラリプログラム１２１および基本ライブラリプログラム１２２は高信頼メモリエリア１２０に配置される。さらに、アプリケーションプロセスにはデバイスファイルに対して操作する権限が与えられていないものとし、セキュリティゲート侵入時に変更されるセキュリティレベルになって初めて、デバイスファイルに対して操作できる権限が与えられる設定になっている。【０１３１】
アプリケーションプログラム１１１に対応するアプリケーションプロセスが生成されると、アプリケーションプログラム１１１のステップＡ０１のmain()関数から処理を開始する。アプリケーションプロセスは処理の途中で写真撮影を行うために、ＡＰＩライブラリプログラム１２１が提供するCamera_TakePicture関数を呼び出す（ステップＡ０４）。Camera_TakePicture関数の先頭で第１の特定の命令であるところのセキュリティゲート侵入システムコールを呼び出し（ステップＢ０４）、アプリケーションプロセスのセキュリティレベルを変更する。その後、シャッター音を鳴らすために、サウンドデバイスファイルのオープン関数を呼び出し（ステップＢ０６）、そのファイルへシャッター音を書き込むことでシャッター音を発生させ（ステップＢ０７）、クローズ関数を呼び出して、サウンドデバイスファイルをクローズする（ステップＢ０８）。引き続き写真を撮るために、カメラデバイスのオープン関数を呼び出し（ステップＢ１０）、そのファイルへ撮影コマンドを書き込むことで写真撮影を行い（ステップＢ１１）、得られた画像を取得するためにリード関数を呼び出した後（ステップＢ１２）、クローズ関数を呼び出してカメラデバイスファイルをクローズしている（ステップＢ１３）。ここで、元々のアプリケーションプロセスでは、デバイスファイルに対する操作の権限がなかったが、セキュリティゲートを通過したことによってセキュリティレベルが変更されているので、本デバイスファイルに対する操作は正常に処理される。ＡＰＩライブラリプログラム１２１は、その後、Camera_TakePicture関数の末尾で第２の特定の命令であるところのセキュリティゲート退出システムコールを呼び出し（ステップＢ１５）、アプリケーションプロセスのセキュリティレベルを元々のレベルに戻した後、アプリケーションプロセスに戻る。【０１３２】
このようにして、アプリケーションプロセスがサービスＡＰＩ関数である、Camera_TakePicture関数を実行している間のみ、デバイスファイルに対する操作が可能になる。アプリケーションプログラム中からデバイスファイルを直接操作するために、基本ライブラリプログラム１２２内の例えばオープン関数（ステップＣ０１）を呼び出したとしても、セキュリティゲートに侵入していない（つまり第１の特定の命令を実行していない）ので、エラーとなる。また、ステップＣ０５に直接ジャンプしても同様にエラーとなる。また、ステップＣ０５の命令（syscall(OPEN,path,fd）)をアプリケーションプログラム１１１が模倣しても同様にエラーとなる。さらに、ステップＢ０４の命令（syscall(SEC_GATE_IN）)をアプリケーションプログラム１１１が模倣して不正にセキュリティレベルを変更しようとしても、本命令が高信頼メモリエリアに無いことから、これもエラーとなる。【０１３３】
以上の結果、アプリケーションプロセスはＡＰＩライブラリプログラム１２１を正しく利用しなければ、基本ライブラリプログラム１２２が提供するカメラ機能を利用することができない。そして、ＡＰＩライブラリプログラム１２１を正しく利用すると、必ずシャッター音を鳴らす処理が実行されることになり、その処理の実行を保証することができる。例えば、携帯電話のカメラ撮影時には必ずシャッター音を鳴らすことになっているため、図１０のＡＰＩライブラリプログラム１２１のように、音を鳴らす処理の実行を保証したＡＰＩライブラリプログラムを介してアプリケーションプログラム１１１にカメラデバイスに対するアクセスを許可すれば、音を鳴らさずにシャッターを操作するといった不正行為を防止することができることになる。【０１３４】
このようにして本実施例によれば、信頼できるか不明なアプリケーションプロセスに対して、アプリケーションプロセスに設定されたセキュリティレベルでは実行許可のないプログラムコードを含むライブラリ関数を安全に提供することが可能になる。以下、具体的な適用例を幾つか挙げて、本実施例の効果を具体的に説明する。【０１３５】
＜適用例１＞
図１１を参照すると、本適用例では、基本ライブラリ１２２としてｌｉｂｃを配置し、ｌｉｂｃ内部に共有メモリ操作システムコール命令とセマフォ操作システムコール命令のプログラムコードがある。サービスＡＰＩライブラリ１２１中のサービスＡＰＩ関数の処理の中には、ｌｉｂｃ中の共有メモリ操作システムコール命令やセマフォ操作システムコール命令を利用するプログラムコードがある。アプリケーションプロセスには、これらの、悪用されるとシステム全体に深刻な悪影響を及ぼす可能性のあるシステムコールを利用する権限は与えられていない。【０１３６】
本発明の仕組みを使えば、アプリケーションプロセスがサービスＡＰＩ関数を実行している間のみ、セマフォ操作や共有メモリ操作が可能になり、アプリケーションプログラム中から直接ｌｉｂｃの提供するセマフォ操作システムコール命令や共有メモリ操作システムコール命令を呼び出しても、エラーとなる。このため、アプリケーションプログラムの勝手なセマフォや共有メモリの操作を禁止しつつ、これらの操作を利用するサービスＡＰＩ関数は提供できることになる。【０１３７】
＜適用例２＞
図１２を参照すると、本適用例のコンピュータは、アプリケーションプログラム１１１に提供するＧＵＩシステムとして、Ｘサーバ／クライアントを提供している。このコンピュータでは、基本ライブラリ１２２としてｌｉｂｃを配置し、ｌｉｂｃ内部にｓｏｃｋｅｔ通信システムコール命令のプログラムコードがある。また、サービスＡＰＩライブラリ１２１として、Ｘクライアントライブラリ(ｘｌｉｂ)を配置し、この中でｌｉｂｃ中のｓｏｃｋｅｔ通信システムコール命令を含む関数を呼び出している。アプリケーションプロセスには、ｓｏｃｋｅｔ通信システムコール命令によるＸサーバとの通信を行う権限は与えられていない。【０１３８】
本発明の仕組みを使えば、アプリケーションプロセスは、高信頼メモリエリア１２０にあるｘｌｉｂライブラリを介した時のみ、Ｘサーバと通信を行うことが可能となる。このようにすることで、アプリケーションプログラムがｘｌｉｂを介さず、Ｘサーバとの通信を勝手に行い、Ｘサーバに悪影響を及ぼすことを阻止することが可能となる。【０１３９】
＜適用例３＞
図１３を参照すると、本適用例のコンピュータは、ＤＲＭ（Digital Rights Management）による利用権限管理の元で画像や音楽、動画等のコンテンツサービスを提供している。このコンピュータでは、基本ライブラリ１２２としてｌｉｂｃを配置し、ｌｉｂｃ内部にファイルオープンシステムコール命令のプログラムコードがある。また、サービスＡＰＩライブラリ１２１としてＤＲＭライブラリを配置し、この中でＤＲＭ処理を行い、さらにｌｉｂｃ内のファイルオープンシステムコール命令を含む関数を呼び出している。また、コンピュータ内部には、ＤＲＭ管理対象のコンテンツを含むファイルシステムがある。アプリケーションプロセスには、このＤＲＭ管理対象のコンテンツをオープンする権限は与えられていない。【０１４０】
本発明の仕組みを使えば、アプリケーションプロセスが、ＤＲＭライブラリを介して適切にＤＲＭ処理がなされた場合のみ、ＤＲＭ管理対象コンテンツをオープンすることが可能になる。アプリケーションプログラム中で勝手にＤＲＭ管理対象コンテンツをオープンしようとしても、これを防ぐことが可能になるため、従来必要であった、ＤＲＭ管理対象コンテンツの暗号化を不要とする効果も期待できる。【０１４１】
＜適用例４＞
図１４を参照すると、本適用例のコンピュータは、コンピュータ外のシステム（サーバ）と通信を行うサービスを提供している。このコンピュータでは、基本ライブラリ１２２としてｌｉｂｃを配置し、ｌｉｂｃ内にｓｏｃｋｅｔ通信システムコール命令のプログラムコードがある。また、サービスＡＰＩライブラリ１２１として、ＨＴＴＰ通信ライブラリを配置し、この中でＨＴＴＰ処理を行い、さらにｌｉｂｃ内のｓｏｃｋｅｔ通信システムコールを発行する関数を呼び出している。アプリケーションプロセスにはｓｏｃｋｅｔ通信システムコールを行う権限は与えられていない。【０１４２】
本発明の仕組みを使えば、アプリケーションプロセスが、ＨＴＴＰ通信ライブラリを介した場合のみ、外部のサーバと通信できるように設定することが可能になる。このように設定することで、アプリケーションプログラム中で勝手に外部のサーバと通信を行うことを防ぐことができ、アプリケーションプロセスが、想定外のプロトコルで外部のサーバと通信を行うことや、アプリケーションプログラム独自のＨＴＴＰ処理による不正なパラメータを使用したＨＴＴＰ通信等を防ぐことが可能になる。【０１４３】
＜第１の実施の形態の実施例２＞
図１５を参照すると、本発明の第１の実施の形態の実施例２は、アプリケーションプロセスの新たな属性値としてセキュリティゲート侵入状態を示す属性値を追加し、プロセス状態管理データベース１３８がプロセスＩＤとセキュリティレベルと前記属性値に対応するセキュリティゲート通過フラグとの組を保持し、このプロセス状態管理データベース１３８内のセキュリティゲート通過フラグを変更する機能を持つセキュリティゲート侵入状態記録処理部１３８を備え、アプリケーションプロセスがセキュリティゲートに侵入した時点ではそのセキュリティレベルを変更せずに、セキュリティゲート侵入状態にあることをセキュリティゲート通過フラグで管理しておき、権限チェック処理部１３６による特権命令実行の権限チェック時に一時的にセキュリティレベルを変更するようにした点で、実施例１と相違する。【０１４４】
次に、図１５及び図１６から図１８のフローチャートを参照して本実施例の動作について詳細に説明する。【０１４５】
まず、ＯＳ１３０によって、アプリケーションプログラム１１１が通常メモリエリア１１０にロードされ、アプリケーションプロセス（プロセスID=nnn）として実行される。この時、アプリケーションプロセスは信頼できるかどうか不明であり、セキュリティレベルは“Ｌｏｗ”で動作するものとする。また、セキュリティゲート通過フラグは“０”である。アプリケーションプロセスは、必要に応じてサービスＡＰＩライブラリ１２１が提供するＡＰＩ関数を呼び出し、ＡＰＩ関数の先頭に配置された、第１の特定の命令１２３が実行される（図１６のステップＳ２０１）。【０１４６】
第１の特定の命令１２３が実行されると、ＯＳ１３０内にあるセキュリティゲート進入処理部１３１が呼び出される。セキュリティゲート進入処理部１３１では、呼び出される原因となった第１の特定の命令１２３が存在するメモリエリアの種別をメモリ種別判断処理部１３３を用いて求める（図１６のステップＳ２０２）。求めたメモリエリアの種別が高信頼メモリエリア１２０である場合に限り、セキュリティゲート進入状態記録処理部１３９を用いて、アプリケーションプロセスがセキュリティゲート侵入状態であることを記録する（図１６のステップＳ２０３及びＳ２０４）。これにより、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグが例えば“０”から“１”に変更されることになる。アプリケーションプロセスのセキュリティゲート通過フラグの変更が完了したら、第１の特定の命令１２３の処理を完了する（図１６のステップＳ２０５）。他方、第１の特定の命令１２３が存在するメモリエリアが高信頼メモリエリア１２０でなければ（図１６のステップＳ２０３でＮＯ）、アプリケーションプロセスのセキュリティゲート通過フラグを変更せずに、第１の特定の命令１２３の処理を完了する（図１６のステップＳ２０５）。【０１４７】
その後、アプリケーションプロセスは、サービスＡＰＩライブラリ１２１の処理やサービスＡＰＩライブラリ１２１がさらに呼び出す基本ライブラリ１２２が提供するプログラムを実行し、この過程で、特権処理システムコール命令１２５が実行されることになる。【０１４８】
特権処理システムコール命令１２５が実行されると（図１７のステップＳ２１１）、ＯＳ１３０内の権限チェック処理部１３６が呼び出される。権限チェック処理部１３６では、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグを参照し、“１”状態にあるならばセキュリティレベル変更部１３４を用いて当該アプリケーションプロセスのセキュリティレベルを”Ｈｉｇｈ”に変更する（図１７のステップＳ２１２及びＳ２１３）。次に、変更されたセキュリティレベルを元に、当該アプリケーションプロセスが特権処理システムコール命令を処理する権限を保持しているかどうかをチェックし、権限を保持している場合、特権処理システムコール処理部１３７を用いて特権処理を行う（図１７のステップＳ２１４及びＳ２１５）。権限を保持していない場合は、特権処理を行わず、特権モードエラーとする（図１７のステップＳ２１８）。その後、再びセキュリティレベル変更部１３４を用いて当該アプリケーションプロセスのセキュリティレベルを“Ｌｏｗ”に戻し、特権処理システムコール処理を終了する（図１７のステップＳ２１６及びＳ２１７）。【０１４９】
その後、アプリケーションプロセスが、サービスＡＰＩライブラリ１２１の処理が完了し、アプリケーションプログラム１１１に処理が戻る直前で、第２の特定の命令１２４が実行される（図１８のステップＳ２２１）。【０１５０】
第２の特定の命令１２４が実行されると、ＯＳ１３０内にあるセキュリティゲート退出処理部１３２が呼び出される。セキュリティゲート退出処理部１３２では、セキュリティゲート進入状態記録処理部１３９を用いて、当該アプリケーションプロセスのセキュリティゲート通過フラグを元に戻す（図１８のステップＳ２２２）。これにより、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグが“０”に戻ることになる。【０１５１】
このように第１の実施の形態の実施例２によれば、第１の実施の形態の実施例１に比べて、アプリケーションプロセスのセキュリティレベルを“Ｈｉｇｈ”の状態にする区間を短く限定できるため、より安全に運用することが可能になる。【０１５２】
また、セキュリティレベル変更ポリシデータベース１３５には、特権処理システムコール単位でセキュリティレベル変更ポリシを保持することが可能になるため、より柔軟なセキュリティレベル変更が可能になる。例えば、セキュリティゲートに侵入してから退出するまでに複数種類の特権処理システムコール命令が現れ、そのうちの幾つかは如何なる場合であっても正体不明なアプリケーションプロセスには利用させてはならない特別な命令（例えば電源リセット等）がある場合、その特別な命令の場所のみをセキュリティレベル変更の対象から除外することも可能になる。【０１５３】
＜第１の実施の形態の実施例２の変形例＞
なお、本実施例では、アプリケーションプロセスがセキュリティゲート侵入状態であるかどうかを、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス状態管理データベースに設けたフラグで管理したが、例えば図１９に示されるように、セキュリティゲート侵入状態のアプリケーションプロセスのプロセスＩＤ一覧を管理するセキュリティゲート侵入中プロセスＩＤデータベース１５０を設けるようにしても良い。この場合、セキュリティゲート侵入状態記録処理部１３９は、セキュリティゲート侵入処理部１３１から要求されたアプリケーションプロセスのプロセスＩＤをデータベース１５０に記録し、セキュリティゲート退出処理部１３２から要求されたアプリケーションプロセスのプロセスＩＤをデータベース１５０から削除する処理を行う。また、権限チェック処理部１３６は、権限チェックの対象となるアプリケーションプロセスのプロセスＩＤがデータベース１５０に記録されているか否かを検索することにより、当該アプリケーションプロセスがセキュリティゲート侵入状態か否かを判断する。【０１５４】
＜第１の実施の形態の実施例３＞
図２０を参照すると、本発明の第１の実施の形態の実施例３は、図１５に示した第１の実施の形態の実施例２における構成から、セキュリティレベル変更部１３４及びセキュリティレベル変更ポリシデータベース１３５を省略し、権限チェック処理部１３６は、アプリケーションプロセスがセキュリティゲート侵入状態にある場合、アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、アプリケーションプロセスがセキュリティゲート侵入状態にない場合、アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行し、特権命令を実行する権限がないときは特権命令違反としてエラーを発生させるようにした点で、前記実施例２と相違する。【０１５５】
次に、図２０及び図２１のフローチャートを参照して本実施例の動作について詳細に説明する。【０１５６】
まず、ＯＳ１３０によって、アプリケーションプログラム１１１が通常メモリエリア１１０にロードされ、アプリケーションプロセス（プロセスID=nnn）として実行される。この時、アプリケーションプロセスは信頼できるかどうか不明であり、セキュリティレベルは“Ｌｏｗ”で動作するものとする。アプリケーションプロセスは、必要に応じてサービスＡＰＩライブラリ１２１が提供するＡＰＩ関数を呼び出し、ＡＰＩ関数の先頭に配置された、第１の特定の命令１２３が実行される。このときの動作は図１５の実施例２と同じであり、その結果、第１の特定の命令１２３が存在するメモリエリアが高信頼メモリエリア１２０である場合に限り、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグが例えば“０”から“１”に変更される。【０１５７】
その後、アプリケーションプロセスは、サービスＡＰＩライブラリ１２１の処理やサービスＡＰＩライブラリ１２１がさらに呼び出す基本ライブラリ１２２が提供するプログラムを実行し、この過程で、特権処理システムコール命令１２５が実行されることになる。【０１５８】
特権処理システムコール命令１２５が実行されると（図２１のステップＳ３０１）、ＯＳ１３０内の権限チェック処理部１３６が呼び出される。権限チェック処理部１３６では、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグを参照し、“１”状態にあるならば、セキュリティレベルによる権限チェックをパスして、特権処理システムコール処理部１３７を用いて特権処理を行い、特権処理システムコール処理を終了する（図２１のステップＳ３０２、Ｓ３０４、Ｓ３０５）。他方、セキュリティゲート通過フラグが“０”状態であれば（図２１のステップＳ３０２でＮＯ）、当該アプリケーションプロセスのセキュリティレベルを元に、当該アプリケーションプロセスが特権処理システムコール命令を処理する権限を保持しているかどうかをチェックし、権限を保持している場合、特権処理システムコール処理部１３７を用いて特権処理を行い、特権処理システムコール処理を終了する（図２１のステップＳ３０３からＳ３０５）。しかし、権限を保持していない場合は、特権処理を行わず、特権モードエラーとする（図２１のステップＳ３０３、Ｓ３０６）。【０１５９】
その後、アプリケーションプロセスが、サービスＡＰＩライブラリ１２１の処理が完了し、アプリケーションプログラム１１１に処理が戻る直前で、第２の特定の命令１２４が実行されると、図１５の実施例２と同様に、プロセス状態管理データベース１３８内にある、当該アプリケーションプロセスのセキュリティゲート通過フラグが“０”に戻される。【０１６０】
このように第１の実施の形態の実施例３によれば、第１の実施の形態の実施例１および実施例２に比べて、セキュリティレベル変更に関する処理が行われないため、きめ細かな制御はできなくなる一方で構成が単純になり、実装が容易になり、処理速度も向上する効果がある。【０１６１】
なお、本実施例では、アプリケーションプロセスがセキュリティゲート侵入状態であるかどうかを、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス状態管理データベースに設けたフラグで管理したが、図１９に示した実施例と同様に、セキュリティゲート侵入状態のアプリケーションプロセスのプロセスＩＤ一覧を管理するセキュリティゲート侵入中プロセスＩＤデータベース１５０を設けるようにしても良い。【０１６２】
＜第１の実施の形態の実施例４＞
図２２を参照すると、本発明の第１の実施の形態の実施例４は、図１５に示した第１の実施の形態の実施例２における構成から、セキュリティレベル変更部１３４、セキュリティレベル変更ポリシデータベース１３５及びプロセス状態管理データベース１３８を省略する一方、セキュリティゲート侵入状態のアプリケーションプロセスのプロセスＩＤ一覧を管理するセキュリティゲート侵入中プロセスＩＤデータベース１５０を追加し、権限チェック処理部１３６は、アプリケーションプロセスがセキュリティゲート侵入状態にあるか否かによって、特権命令の実行可否を制御するようにして点で、前記実施例２と相違する。【０１６３】
次に、図２２及び図２３のフローチャートを参照して本実施例の動作について詳細に説明する。【０１６４】
まず、ＯＳ１３０によって、アプリケーションプログラム１１１が通常メモリエリア１１０にロードされ、アプリケーションプロセス（プロセスID=nnn）として実行される。本実施例の場合、アプリケーションプロセスへのセキュリティレベルの設定は必須でないため、任意のセキュリティレベルを設定して良い。アプリケーションプロセスは、必要に応じてサービスＡＰＩライブラリ１２１が提供するＡＰＩ関数を呼び出し、ＡＰＩ関数の先頭に配置された、第１の特定の命令１２３が実行される。このときの動作は図１９の実施例２の変形例と同じであり、その結果、第１の特定の命令１２３が存在するメモリエリアが高信頼メモリエリア１２０である場合に限り、セキュリティゲート侵入中プロセスＩＤデータベース１５０に、当該アプリケーションプロセスのプロセスＩＤが登録される。【０１６５】
その後、アプリケーションプロセスは、サービスＡＰＩライブラリ１２１の処理やサービスＡＰＩライブラリ１２１がさらに呼び出す基本ライブラリ１２２が提供するプログラムを実行し、この過程で、特権処理システムコール命令１２５が実行されることになる。【０１６６】
特権処理システムコール命令１２５が実行されると（図２３のステップＳ４０１）、ＯＳ１３０内の権限チェック処理部１３６が呼び出される。権限チェック処理部１３６では、セキュリティゲート侵入中プロセスＩＤデータベース１５０に当該アプリケーションプロセスのプロセスＩＤが登録されているか否かを調べ、登録されていれば、特権処理システムコール処理部１３７を用いて特権処理を行い、特権処理システムコール処理を終了する（図２３のステップＳ４０２からＳ４０４）。他方、登録されていなければ（図２３のステップＳ４０２でＮＯ）、特権処理を行わず、特権モードエラーとする（図２３のステップＳ３０５）。【０１６７】
その後、アプリケーションプロセスが、サービスＡＰＩライブラリ１２１の処理が完了し、アプリケーションプログラム１１１に処理が戻る直前で、第２の特定の命令１２４が実行されると、図１９の実施例２の変形例と同様に、セキュリティゲート侵入中プロセスＩＤデータベース１５０から当該アプリケーションプロセスのプロセスＩＤが削除される。【０１６８】
このように第１の実施の形態の実施例４によれば、第１の実施の形態の実施例１および実施例２に比べて、セキュリティレベルに関する処理が行われないため、きめ細かな制御はできなくなる一方で構成がより単純になり、実装が容易になり、処理速度も向上する効果がある。【０１６９】
なお、本実施例では、アプリケーションプロセスがセキュリティゲート侵入状態であるかどうかを、セキュリティゲート侵入中プロセスＩＤデータベース１５０で管理したが、第１の実施の形態の実施例２と同様に、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス状態管理データベースに設けたフラグで管理するようにしても良い。【０１７０】
＜第２の実施の形態の実施例１＞
図２４を参照すると、第２の実施の形態の実施例１は、サービスＡＰＩライブラリ１２１に存在する各ＡＰＩ関数の処理の末尾に配置される第２の特定の命令１２４を省略する代わりに、第１の特定の命令１２３を実行する際に、アプリケーションプログラムに戻る直前に必ず第２の特定の命令１２４を含む関数を経由するようにアプリケーションプロセスのスタックを改変する命令列であるところのスタック改変処理部１２６を各ＡＰＩ関数に付加するようにした点で、第１の実施の形態の実施例１と相違する。【０１７１】
次に、図２４及び図２５を参照して本実施例の動作について詳細に説明する。【０１７２】
まず、ＯＳ１３０によって、アプリケーションプログラム１１１が通常メモリエリア１１０にロードされ、アプリケーションプロセス（プロセスID=nnn）として実行される。この時、アプリケーションプロセスは信頼できるかどうか不明であり、セキュリティレベルは“Ｌｏｗ”で動作するものとする。アプリケーションプロセスは、必要に応じてサービスＡＰＩライブラリ１２１が提供するＡＰＩ関数を呼び出し、ＡＰＩ関数の先頭に配置された、第１の特定の命令１２３が実行される。これにより、第１の実施の形態の実施例１と同様に、第１の特定の命令１２３が存在するメモリエリアの種別が高信頼メモリエリア１２０である場合に限り、セキュリティレベル変更部１３４を用いてアプリケーションプロセスのセキュリティレベルが例えば“Ｌｏｗ”から“Ｈｉｇｈ”に変更される。続いて、スタック改変処理部１２６が実行され、当該アプリケーションプロセスのスタック情報を改変し、図２５に示すように、サービスＡＰＩライブラリ内ＡＰＩ関数のスタック情報と、アプリケーションプログラム内関数のスタック情報との間に、第２の特定の命令を実行する関数のスタック情報を挿入する。このようにスタック情報を改変することで、当該アプリケーションプロセスがサービスＡＰＩライブラリ内ＡＰＩ関数の処理を終え、アプリケーションプログラム内関数に処理が戻る前に、必ず第２の特定の命令１２４を実行する関数が呼び出されることになる。【０１７３】
第２の特定の命令１２４を実行する関数が呼び出され、その第２の特定の命令１２４が実行されると、第１の実施の形態の実施例１と同様に、セキュリティレベル変更部１３４を用いてアプリケーションプロセスのセキュリティレベルが“Ｌｏｗ”に戻される。そして、スタック情報に従って、アプリケーションプログラムに制御が戻される。【０１７４】
このように第２の実施の形態の実施例１によれば、スタック改変処理により、アプリケーションプロセスがサービスＡＰＩライブラリ内ＡＰＩ関数の処理を終え、アプリケーションプログラム内関数に処理が戻る前に、必ず第２の特定の命令１２４を実行する関数が呼び出されることになるため、第２の特定の命令１２４の配置ミスによる特権レベルの不正流出を防止することができる。【０１７５】
なお、本実施例と同様にスタック改変処理により第２の特定の命令１２４をもれなく実行させるようにする仕組みは、第１の実施の形態の実施例１以外の他の実施例にも適用することができる。また、第２の実施の形態の変形例で説明したように、スタック改変処理をＯＳ１３０の一機能として提供し、第１の特定の命令１２３の実行時に呼び出されるセキュリティゲート侵入処理部１３１でスタック改変処理を実行するようにしても良い。【０１７６】
＜第３の実施の形態の実施例１＞
図２６を参照すると、第３の実施の形態の実施例１は、第１の実施の形態の実施例１の構成に、シグナル／割り込みハンドラ１１２と、シグナル／割り込み処理部１４０と、セキュリティゲート一時退出処理部１４１とが追加されている。また、プロセス状態管理データベース１３８は、アプリケーションプロセスのプロセスＩＤと、現在のセキュリティレベルと、プロセス生成時に元々割り当てられていたセキュリティレベル（初期レベル）と、セキュリティレベルの保存域との組を格納する。【０１７７】
シグナル／割り込みハンドラ１１２は、アプリケーションプログラム１１１内に存在し、アプリケーションプロセスが走行している間に発生したシグナルや割り込みに対応する処理を行う。【０１７８】
シグナル／割り込み処理部１４０は、ＯＳ１３０内に存在し、アプリケーションプロセスが走行している間にシグナルや割り込みが発生した時に、それまでの処理を中断し、セキュリティゲート一時退出処理部１４１を経由して、アプリケーションプログラム内のシグナル／割り込みハンドラ１１２を呼び出す処理を行う。【０１７９】
セキュリティゲート一時退出処理部１４１は、シグナル／割り込み処理部１４０がアプリケーションプログラム内のシグナル／割り込みハンドラ１１２を呼び出す前に、当該アプリケーションプロセスのセキュリティレベルを一時的に元に戻す処理を行う。【０１８０】
次に、図２６及び図２７のフローチャートを参照して本実施例の動作について詳細に説明する。【０１８１】
第１の実施の形態の実施例１で説明した処理動作にてコンピュータ１００が動作している場合において、アプリケーションプロセスが処理を行っている間にシグナルや割り込みが発生すると、ＯＳ１３０はアプリケーションプロセスの処理を一時中断し、シグナル／割り込み処理部１４０を用いてアプリケーションプログラム１１１内にあるシグナル／割り込みハンドラ１１２を呼び出そうとする。この時、もしもアプリケーションプロセスの状態が、セキュリティゲート進入処理部１３１を通過している状態で、アプリケーションプロセスが特権状態にある場合、このままでは、特権状態のまま、アプリケーションプログラム内のプログラムコードを実行することになり、セキュリティ的に危険な状態となる。そこで本実施例では、これを防ぐため、シグナル／割り込み処理部１４０がシグナル／割り込みハンドラ１１２を呼び出す前に、セキュリティゲート一時退出処理部１４１を用いて、以下のように、当該アプリケーションプロセスのセキュリティレベルを一時的に元に戻す処理を行う。【０１８２】
アプリケーションプロセスの処理中にシグナルや割り込みが発生すると（図２７のステップＳ５０１）、シグナル／割り込み処理部１４０は、セキュリティゲート一時退出処理部１４１を呼び出す。セキュリティゲート一時退出処理部１４１は、当該アプリケーションプロセスの現在のセキュリティレベルをプロセス状態管理データベース１３８の保存域に記録する（図２７のステップＳ５０２）。次に当該プロセスのセキュリティレベルをプロセス生成時に元々割り当てられていたセキュリティレベルに変更する（図２７のステップＳ５０３）。その後、アプリケーションプログラム１１１中にあるシグナル／割り込みハンドラ１１２を呼び出す（図２７のステップＳ５０４）。【０１８３】
シグナル／割り込みハンドラ１１２の処理が終わると、制御がセキュリティゲート一時退出処理部１４１に戻され、セキュリティゲート一時退出処理部１４１は、当該アプリケーションプロセスのセキュリティレベルを、プロセス状態管理データベース１３８の保存域に記録したセキュリティレベルに戻す（図２７のステップＳ５０５）。その後、制御がシグナル／割り込み処理部１４０に戻され、シグナル／割り込み処理が終了する（図２７のステップＳ５０６）。【０１８４】
このように本実施例によれば、セキュリティゲートを通過した特権状態のアプリケーションプロセスにシグナルや割り込みが発生して、アプリケーションプログラム内にあるハンドラを実行する場合でも、当該アプリケーションプロセスのセキュリティレベルをアプリケーションプロセスに元々割り当てられていた状態に一時的に戻すことが可能になるため、特権状態の不正な流出を防ぐことができる。【０１８５】
なお、本実施例と同様に、シグナル／割り込みハンドラ１１２の実行中のアプリケーションプロセスのセキュリティレベルを一時的に元に戻すようにする仕組みは、第１の実施の形態の実施例１以外の他の実施例および第１の実施の形態以外の他の実施の形態にも適用することができる。【０１８６】
本発明によれば、信頼できるか不明なアプリケーションプログラムを情報処理装置に安全に追加するといった用途に適用できる。ここで、情報処理装置はパーソナルコンピュータのようなものから、携帯電話やＰＤＡ等の移動体通信端末等の組み込みコンピュータ、ゲーム機器、及び多機能複写機等に至るまで適用できる。
【図１】
2007040228.tif 000003
【図２】
2007040228.tif 000004
【図３】
2007040228.tif 000005
【図４】
2007040228.tif 000006
【図５】
2007040228.tif 000007
【図６】
2007040228.tif 000008
【図７】
2007040228.tif 000009
【図８】
2007040228.tif 000010
【図９】
2007040228.tif 000011
【図１０】
2007040228.tif 000012
【図１１】
2007040228.tif 000013
【図１２】
2007040228.tif 000014
【図１３】
2007040228.tif 000015
【図１４】
2007040228.tif 000016
【図１５】
2007040228.tif 000017
【図１６】
2007040228.tif 000018
【図１７】
2007040228.tif 000019
【図１８】
2007040228.tif 000020
【図１９】
2007040228.tif 000021
【図２０】
2007040228.tif 000022
【図２１】
2007040228.tif 000023
【図２２】
2007040228.tif 000024
【図２３】
2007040228.tif 000025
【図２４】
2007040228.tif 000026
【図２５】
2007040228.tif 000027
【図２６】
2007040228.tif 000028
【図２７】
2007040228.tif 000029
【手続補正書】
【提出日】平成19年3月22日(2007.3.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持する記憶部と、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御部と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理部と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理部と
を備えた情報処理装置。
【請求項２】
前記実行を保証する部分は、
パラメータチェックや、必要な前処理を実施することで、その後のクリティカルな処理の安全な実行を保証する部分である
請求の範囲１記載の情報処理装置。
【請求項３】
前記属性値が、
前記アプリケーションプロセスのセキュリティレベルを示す属性値である
請求の範囲１又は２記載の情報処理装置。
【請求項４】
前記特権命令実行制御部は、
前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲３記載の情報処理装置。
【請求項５】
前記属性値が、
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である
請求の範囲１又は２記載の情報処理装置。
【請求項６】
前記特権命令実行制御部は、
前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する
請求の範囲５記載の情報処理装置。
【請求項７】
前記属性値が
前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む
請求の範囲１又は２記載の情報処理装置。
【請求項８】
前記特権命令実行制御部は、
前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲７記載の情報処理装置。
【請求項９】
前記セキュリティゲート侵入処理部は、
セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更するものであり、
前記セキュリティゲート退出処理部は、
セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻すものであり、
前記特権命令実行制御部は、
前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲７記載の情報処理装置。
【請求項１０】
前記特権命令実行制御部は、
前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す
請求の範囲７記載の情報処理装置。
【請求項１１】
キュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理部を備えた
請求の範囲８〜１０いずれか１項に記載の情報処理装置。
【請求項１２】
前記セキュリティゲート侵入処理部によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理部によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理部による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理部による変更後の値に戻すセキュリティゲート一時退出処理部を備えた
請求の範囲１又は２記載の情報処理装置。
【請求項１３】
前記セキュリティゲート侵入処理部は、
前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更するものである
請求の範囲３、４、７〜１１の何れか１項に記載の情報処理装置。
【請求項１４】
セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理部は、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更するものである
請求の範囲３、４、７〜１１の何れか１項に記載の情報処理装置。
【請求項１５】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録されるものである
請求の範囲５〜１１の何れか１項に記載の情報処理装置。
【請求項１６】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される
請求の範囲５〜１１の何れか１項に記載の情報処理装置。
【請求項１７】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項１８】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項１９】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２０】
前記予め定められたアドレス範囲が、ＲＯＭ領域内のアドレス範囲である
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２１】
前記予め定められたアドレス範囲が、ＲＯＭ領域からＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２２】
前記予め定められたアドレス範囲が、信頼できるファイルシステムからＲＡＭ領域へロードされたライブラリ関数のＲＡＭ領域上でのアドレス範囲である
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２３】
前記予め定められたアドレス範囲が、ファイルシステムからＲＡＭ領域へロードされた信頼できるライブラリ関数のＲＡＭ領域上でのアドレス範囲である
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２４】
前記セキュリティゲート侵入処理部は、前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かのチェックに加えて、前記第１の特定の命令のアドレスがプログラムエリアであるか否かのチェックを行うものである
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２５】
前記第１の特定の命令と前記第２の特定の命令は、それぞれセキュリティゲート侵入要求、退出要求をオペレーティングシステムに対して発行するシステムコール命令である
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２６】
前記ライブラリ関数は、基本ライブラリ関数とサービスＡＰＩライブラリ関数とを含む
請求の範囲１〜１２の何れか１項に記載の情報処理装置。
【請求項２７】
前記基本ライブラリ関数は、特権命令として共有メモリ操作システムコール命令とセマフォ操作システムコール命令とを含み、
前記サービスＡＰＩライブラリ関数は、前記共有メモリ操作システムコール命令とセマフォ操作システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む
請求の範囲２６記載の情報処理装置。
【請求項２８】
前記基本ライブラリ関数は、Ｘサーバと通信を行うために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む
請求の範囲２６記載の情報処理装置。
【請求項２９】
前記基本ライブラリ関数は、ＤＲＭ管理対象コンテンツを含むファイルをオープンするために特権命令としてファイルオープンシステムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＤＲＭ処理を行い、且つ、前記ファイルオープンシステムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む
請求の範囲２６記載の情報処理装置。
【請求項３０】
前記基本ライブラリ関数は、外部のサーバと通信するために特権命令としてソケット通信システムコール命令を含み、
前記サービスＡＰＩライブラリ関数は、ＨＴＴＰ処理を行い、且つ、前記ソケット通信システムコール命令を含む基本ライブラリ関数を利用するプログラムコードを含む
請求の範囲２６記載の情報処理装置。
【請求項３１】
情報処理装置にて、自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持し、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御処理と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理とを実行する
情報処理方法。
【請求項３２】
前記実行を保証する部分は、
パラメータチェックや、必要な前処理を実施することで、その後のクリティカルな処理の安全な実行を保証する部分である
請求の範囲３１記載の情報処理方法。
【請求項３３】
前記属性値が、
前記アプリケーションプロセスのセキュリティレベルを示す属性値である
請求の範囲３１又は３２記載の情報処理方法。
【請求項３４】
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲３３記載の情報処理方法。
【請求項３５】
前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である
請求の範囲３１又は３２記載の情報処理方法。
【請求項３６】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する
請求の範囲３５記載の情報処理方法。
【請求項３７】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む
請求の範囲３１又は３２記載の情報処理方法。
【請求項３８】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲３７記載の情報処理方法。
【請求項３９】
前記セキュリティゲート侵入処理では、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更し、
前記セキュリティゲート退出処理では、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻し、
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲３７記載の情報処理方法。
【請求項４０】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す
請求の範囲３７記載の情報処理方法。
【請求項４１】
前記情報処理装置は、
セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理を行う
請求の範囲３８〜４０いずれか１項に記載の情報処理方法。
【請求項４２】
前記情報処理装置は、
前記セキュリティゲート侵入処理によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中に、シグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理による変更後の値に戻すセキュリティゲート一時退出処理を行う
請求の範囲３１又は３２記載の情報処理方法。
【請求項４３】
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更する
請求の範囲３３、３４、３７〜４１の何れか１項に記載の情報処理方法。
【請求項４４】
前記コンピュータは、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理では、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更する
請求の範囲３３、３４、３７〜４１の何れか１項に記載の情報処理方法。
【請求項４５】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録される
請求の範囲３５〜４１の何れか１項に記載の情報処理方法。
【請求項４６】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される
請求の範囲３５〜４１の何れか１項に記載の情報処理方法。
【請求項４７】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている
請求の範囲３１〜４２の何れか１項に記載の情報処理方法。
【請求項４８】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている
請求の範囲３１〜４２の何れか１項に記載の情報処理方法。
【請求項４９】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである
請求の範囲３１〜４２の何れか１項に記載の情報処理方法。
【請求項５０】
自関数で行われる処理のうち実行を保証する部分の実行前に第１の特定の命令が実行され且つ呼び出し元に戻る前に第２の特定の命令が実行されるようにしたライブラリ関数、アプリケーションプロセス、その属性値、及び、前記第１の特定の命令の許容アドレス範囲を保持するコンピュータ読み取り可能な記録媒体を有するコンピュータに、
前記アプリケーションプロセスが特権命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値に基づいて特権命令の実行可否を制御する特権命令実行制御処理と、
前記アプリケーションプロセスが第１の特定の命令を実行して内部割り込みが発生した際、前記第１の特定の命令のアドレスが前記許容アドレス範囲内であるか否かをチェックし、前記許容アドレス範囲内であれば、前記アプリケーションプロセスの前記属性値を変更するセキュリティゲート侵入処理と、
前記アプリケーションプロセスが第２の特定の命令を実行して内部割り込みが発生した際、前記アプリケーションプロセスの前記属性値を元に戻すセキュリティゲート退出処理とを実行させるためのプログラム。
【請求項５１】
前記実行を保証する部分は、
パラメータチェックや、必要な前処理を実施することで、その後のクリティカルな処理の安全な実行を保証する部分である
請求の範囲５０記載のプログラム。
【請求項５２】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値である
請求の範囲５０又は５１記載のプログラム。
【請求項５３】
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲５２記載のプログラム。
【請求項５４】
前記属性値が、前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値である
請求の範囲５０又は５１記載のプログラム。
【請求項５５】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、特権命令を実行する
請求の範囲５４記載のプログラム。
【請求項５６】
前記属性値が、前記アプリケーションプロセスのセキュリティレベルを示す属性値と前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値とを含む
請求の範囲５０又は５１記載のプログラム。
【請求項５７】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを省略して特権命令を実行し、前記アプリケーションプロセスがセキュリティゲート侵入状態にない場合、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲５６記載のプログラム。
【請求項５８】
前記セキュリティゲート侵入処理では、セキュリティゲート侵入状態となったアプリケーションプロセスのセキュリティレベルを変更し、
前記セキュリティゲート退出処理では、セキュリティゲート退出状態となったアプリケーションプロセスのセキュリティレベルを元に戻し、
前記特権命令実行制御処理では、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する
請求の範囲５６記載のプログラム。
【請求項５９】
前記特権命令実行制御処理では、前記アプリケーションプロセスがセキュリティゲート侵入状態にある場合、前記アプリケーションプロセスのセキュリティレベルを更新した後、前記アプリケーションプロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行した後にセキュリティレベルを元の値に戻す
請求の範囲５６記載のプログラム。
【請求項６０】
前記コンピュータに、
セキュリティゲート侵入状態にある前記アプリケーションプロセスの走行中にシグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスのセキュリティレベルをセキュリティゲート侵入前の値に戻し、前記シグナル／割り込み／ハンドラによる処理が終わったとき若しくは終わった後にセキュリティゲート侵入後の値に戻すセキュリティゲート一時退出処理を行わせる
請求の範囲５７〜５９いずれか１項に記載のプログラム。
【請求項６１】
前記コンピュータに、
前記セキュリティゲート侵入処理によって前記アプリケーションプロセスの前記属性値を変更した後、前記セキュリティゲート退出処理によって前記アプリケーションプロセスの前記属性値を元に戻すまでの前記アプリケーションプロセスの走行中に、シグナルまたは割り込みが発生した際、前記アプリケーションプロセスのシグナル／割り込みハンドラを呼び出す前に前記アプリケーションプロセスの前記属性値を前記セキュリティゲート侵入処理による変更前の値に戻し、前記シグナル／割り込みハンドラによる処理が終わったとき若しくは終わった後に前記セキュリティゲート侵入処理による変更後の値に戻すセキュリティゲート一時退出処理を行わせる
請求の範囲５０又は５１記載のプログラム。
【請求項６２】
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスのセキュリティレベルを特権レベルに変更する
請求の範囲５２、５３、５６〜６０の何れか１項に記載のプログラム。
【請求項６３】
前記コンピュータは、セキュリティレベル変更ルールを保持するセキュリティレベル変更ポリシデータベースを備え、前記セキュリティゲート侵入処理では、前記セキュリティレベル変更ルールに基づいて前記アプリケーションプロセスのセキュリティレベルを変更する
請求の範囲５２、５３、５６〜６０の何れか１項に記載のプログラム。
【請求項６４】
前記アプリケーションプロセスのセキュリティゲート侵入状態を示す属性値は、各アプリケーションプロセスのプロセスＩＤに対応して少なくともセキュリティレベルを保持しているプロセス管理用データベースの１つのフラグとして記録される
請求の範囲５４〜６０の何れか１項に記載のプログラム。
【請求項６５】
セキュリティゲート侵入状態のアプリケーションプロセスの一覧を管理するデータベースを備え、該データベースにプロセスＩＤが記録されているか否かによってアプリケーションプロセスのセキュリティゲート侵入状態を示す属性値が決定される
請求の範囲５４〜６０の何れか１項に記載のプログラム。
【請求項６６】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、呼び出し元に戻る出口の前に第２の特定の命令が配置されている
請求の範囲５０〜６１の何れか１項に記載のプログラム。
【請求項６７】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置され、第１の特定の命令が配置された箇所以降で必ず実行される経路上に、呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変する命令列が配置されている
請求の範囲５０〜６１の何れか１項に記載のプログラム。
【請求項６８】
前記ライブラリ関数は、実行を保証する処理記述の前に第１の特定の命令が配置されており、
前記セキュリティゲート侵入処理では、前記アプリケーションプロセスの前記属性値を変更した場合、前記アプリケーションプロセスが呼び出し元に戻る前に第２の特定の命令を含む関数を経由するように前記アプリケーションプロセスのスタックを改変するものである
請求の範囲５０〜６１の何れか１項に記載のプログラム。
【国際調査報告】
2007040228.tif 000030
2007040228.tif 000031
2007040228.tif 000032