(57)【要約】【課題】ＤＬＬ（動的リンクライブラリ）の機能を呼び出す際のセキュリティを向上させることを目的とする。【解決手段】ＤＬＬ利用プログラム実行部２５１のＤＬＬ隔離ロード判断部２０５は、暗号ライブラリ１０５のロードをＤＬＬ隔離ロードプログラム実行部２５３に指示する。ＤＬＬ隔離ロードプログラム実行部２５３は、指示に従って隔離領域へ暗号ライブラリ１０５をロードする。ＤＬＬ利用プログラム実行部２５１のＤＬＬ呼出部１０７は、隔離領域へロードされた暗号ライブラリ１０５内のコードが実装する機能の呼び出しをＤＬＬ隔離ロードプログラム実行部２５３に指示する。ＤＬＬ隔離ロードプログラム実行部２５３は、指示に従って隔離領域で暗号ライブラリ１０５が実装するコードを実行し、当該実行結果をＤＬＬ利用プログラム実行部２５１に通知する。【選択図】図１
2008234248.tif 000002
【特許請求の範囲】
【請求項１】
特定の機能を実装したコードを含むＤＬＬ（動的リンクライブラリ）を利用するＤＬＬ利用プログラムを処理装置により実行するＤＬＬ利用プログラム実行部と、
前記ＤＬＬ利用プログラム実行部が前記ＤＬＬ利用プログラムの実行中にアクセスする記憶装置の記憶領域への前記ＤＬＬ利用プログラム実行部以外によるアクセスを処理装置により制限するアクセス制限部と、
前記アクセス制限部がアクセスを制限する記憶領域とは別の記憶領域である隔離領域へ前記ＤＬＬをロードするＤＬＬ隔離ロードプログラムを処理装置により実行するＤＬＬ隔離ロードプログラム実行部とを備えるプログラム実行装置であって、
前記ＤＬＬ利用プログラム実行部と前記ＤＬＬ隔離ロードプログラム実行部とは、互いに通信する隔離ＤＬＬ通信部を有し、
前記ＤＬＬ利用プログラム実行部は、前記隔離ＤＬＬ通信部を介して、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へ前記ＤＬＬをロードし、
前記ＤＬＬ利用プログラム実行部は、前記隔離ＤＬＬ通信部を介して、前記隔離領域へロードされたＤＬＬ内のコードが実装する機能の呼び出しを前記ＤＬＬ隔離ロードプログラム実行部に指示し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へロードしたＤＬＬ内のコードを実行し、前記隔離ＤＬＬ通信部を介して、当該実行結果を前記ＤＬＬ利用プログラム実行部に通知することを特徴とするプログラム実行装置。
【請求項２】
前記ＤＬＬ利用プログラム実行部は、前記ＤＬＬ利用プログラムと前記ＤＬＬとの少なくともいずれかの属性に応じて、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示するか、若しくは、前記アクセス制限部がアクセスを制限する記憶領域へ前記ＤＬＬをロードするかを判断することを特徴とする請求項１に記載のプログラム実行装置。
【請求項３】
前記プログラム実行装置は、さらに、
前記ＤＬＬ内のコードを実行するために必要なレベルの権限を前記ＤＬＬ隔離ロードプログラム実行部に設定するＤＬＬ隔離ロードプログラム権限設定部を備えることを特徴とする請求項１に記載のプログラム実行装置。
【請求項４】
前記ＤＬＬ隔離ロードプログラム実行部は、前記隔離領域へロードしたＤＬＬ内のコードを実行中に前記隔離領域とは別の記憶領域へアクセスした場合、前記隔離ＤＬＬ通信部を介して、当該アクセスがあったことを前記ＤＬＬ利用プログラム実行部に通知することを特徴とする請求項１に記載のプログラム実行装置。
【請求項５】
前記アクセス制限部は、記憶装置の一部の記憶領域への特定の操作を制限し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記隔離領域へロードしたＤＬＬ内のコードを実行中に前記アクセス制限部が特定の操作を制限する記憶領域へ当該操作を実施した場合、前記隔離ＤＬＬ通信部を介して、当該操作があったことを前記ＤＬＬ利用プログラム実行部に通知することを特徴とする請求項１に記載のプログラム実行装置。
【請求項６】
前記ＤＬＬ隔離ロードプログラム実行部は、前記隔離領域へロードしたＤＬＬ内のコードを試験として実行し、当該実行中に前記隔離領域とは別の記憶領域へのアクセスがあったかどうかを記憶装置に記憶し、
前記ＤＬＬ利用プログラム実行部は、前記試験中に前記隔離領域とは別の記憶領域へのアクセスがなかったことが記憶装置に記憶されていた場合、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示する代わりに、前記アクセス制限部がアクセスを制限する記憶領域へ前記ＤＬＬをロードすることを特徴とする請求項１に記載のプログラム実行装置。
【請求項７】
前記アクセス制限部は、記憶装置の一部の記憶領域への特定の操作を制限し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記隔離領域へロードしたＤＬＬ内のコードを試験として実行し、当該実行中に前記アクセス制限部が特定の操作を制限する記憶領域への当該操作の実施があったかどうかを記憶装置に記憶し、
前記ＤＬＬ利用プログラム実行部は、前記試験中に前記アクセス制限部が特定の操作を制限する記憶領域への当該操作の実施がなかったことが記憶装置に記憶されていた場合、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示する代わりに、前記アクセス制限部がアクセスを制限する記憶領域へ前記ＤＬＬをロードすることを特徴とする請求項１に記載のプログラム実行装置。
【請求項８】
前記ＤＬＬ利用プログラム実行部と前記ＤＬＬ隔離ロードプログラム実行部とが有する隔離ＤＬＬ通信部は、記憶装置の特定の記憶領域を共有メモリ領域として共有し、互いに通信する際に前記共有メモリ領域を用いることを特徴とする請求項１に記載のプログラム実行装置。
【請求項９】
特定の機能を実装したコードを含むＤＬＬ（動的リンクライブラリ）を利用するＤＬＬ利用プログラムを処理装置により実行するＤＬＬ利用プログラム実行部と、
前記ＤＬＬ利用プログラム実行部が前記ＤＬＬ利用プログラムの実行中にアクセスする記憶装置の記憶領域への前記ＤＬＬ利用プログラム実行部以外によるアクセスを処理装置により制限するアクセス制限部と、
前記アクセス制限部がアクセスを制限する記憶領域とは別の記憶領域である隔離領域へ前記ＤＬＬをロードするＤＬＬ隔離ロードプログラムを処理装置により実行するＤＬＬ隔離ロードプログラム実行部とを備えるコンピュータを用いたプログラム実行方法であって、
前記ＤＬＬ利用プログラム実行部と前記ＤＬＬ隔離ロードプログラム実行部とは、互いに通信する隔離ＤＬＬ通信部を有し、
前記プログラム実行方法は、
前記ＤＬＬ利用プログラム実行部が、前記隔離ＤＬＬ通信部を介して、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示するステップと、
前記ＤＬＬ隔離ロードプログラム実行部が、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へ前記ＤＬＬをロードするステップと、
前記ＤＬＬ利用プログラム実行部が、前記隔離ＤＬＬ通信部を介して、前記隔離領域へロードされたＤＬＬ内のコードが実装する機能の呼び出しを前記ＤＬＬ隔離ロードプログラム実行部に指示するステップと、
前記ＤＬＬ隔離ロードプログラム実行部が、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へロードしたＤＬＬ内のコードを実行し、前記隔離ＤＬＬ通信部を介して、当該実行結果を前記ＤＬＬ利用プログラム実行部に通知するステップとを備えることを特徴とするプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行装置及びプログラム実行方法に関するものである。本発明は、特に、実行コードのセキュリティ向上方法に関するものである。
【背景技術】
【０００２】
オペレーティングシステム開発メーカや、組み込み機器開発メーカは、プリインストールされるソフトウェアに対して、十分試験し、信頼できる状態（システム）で出荷する。試験され、信頼できるシステムに対して、ソフトウェア、特にＣ／Ｃ＋＋言語などで記述され、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）などのハードウェアで直接実行されるソフトウェアの追加・実行を許可すると、悪意のあるソフトウェアの追加や、悪意はなくとも脆弱性のあるソフトウェアの追加により、システムのセキュリティは低下する。
【０００３】
このような問題に対し、例えばソフトウェアを十分試験して、信頼できるとしたものに特定の署名者による電子署名を付与し、その特定の署名者による電子署名を持つソフトウェアのみダウンロード・実行を許可するといった、運用で解決する方法がある。
【０００４】
あるいはまた、例えばインターネットブラウザに対して、ソフトウェアのダウンロード・実行を許可する場合には、特許文献１に記載の発明のように、信頼できない実行コード、即ちダウンロードした実行コードを別の境界領域で実行させてセキュリティの低下を防ぐ方法がある。
【０００５】
あるいはまた、Ｊａｖａ（登録商標）のようなハードウェアで直接実行しない中間言語によるソフトウェアや、Ｐｅｒｌのようなスクリプト言語によるソフトウェアのみ、ダウンロード・実行を許可し、そのような言語でアクセス可能な範囲にセキュリティ問題の影響範囲を限定する方法がある。
【０００６】
あるいはまた、Ｓｙｍｂｉａｎ（登録商標）ＯＳのように（例えば、非特許文献１参照）、プロセスの単位で権限を設定し、オペレーティングシステムの機能の呼び出しにあたって、その機能ごとに特定の権限を有しないプロセスに対してはその機能の利用を拒否することで、セキュリティの低下を防ぐ、あるいはセキュリティ問題が発生した場合の影響範囲を（権限が及ぶ範囲内に）限定する方法がある。
【特許文献１】特表２００１−５１４４１１号公報
【非特許文献１】Ｃｒａｉｇ  Ｈｅａｔｈ，  “Ｓｙｍｂｉａｎ  ＯＳ  Ｐｌａｔｆｏｒｍ  Ｓｅｃｕｒｉｔｙ：  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｕｓｉｎｇ  ｔｈｅ  Ｓｙｍｂｉａｎ  ＯＳ  Ｓｅｃｕｒｉｔｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ”，  Ｗｉｌｅｙ，  Ａｐｒｉｌ  ２００６
【発明の開示】
【発明が解決しようとする課題】
【０００７】
多くのソフトウェアで共通的に利用される機能は、動的リンクライブラリ（Ｄｙｎａｍｉｃ・Ｌｉｎｋ・Ｌｉｂｒａｒｙ；ＤＬＬ）として提供されることがある。ＤＬＬは、プログラム本体のメモリ領域内にロードされ、一体となって動作し、全体として１つのソフトウェアとして完成する。例えば、データベースソフトウェアにおいて、データベース内のデータの暗号化のため、データベースアプリケーションの要求に合った暗号ライブラリを使用することがある。
【０００８】
あるいはまた、Ｊａｖａ（登録商標）やＰｅｒｌのように、ハードウェアで直接実行しない種類の言語で記述されているプログラムに対し、一部機能は性能向上、あるいはＣ／Ｃ＋＋などで記述された既存ソフトウェア資産の活用のため、Ｃ／Ｃ＋＋などのハードウェアで直接実行する種類の言語で記述し、この部分をＤＬＬとして、Ｊａｖａ（登録商標）やＰｅｒｌのプログラム本体から実行時に必要に応じて動的にロードし、実行することがある。
【０００９】
このようにソフトウェアが複数のモジュールにより構成され、主たるモジュールではなく従たるモジュールであるＤＬＬが、必ずしも信頼できるソフトウェアではない場合、主たるモジュールであるプログラム本体を信頼できるとしても、ソフトウェア全体としては信頼できない、セキュリティ上問題のあるものになってしまう。悪意あるいは脆弱性のあるＤＬＬのため、プログラム本体が改竄されることもあり得る。
【００１０】
暗号ライブラリの例のように、多くのソフトウェアにより利用される可能性のあるＤＬＬの場合、セキュリティ問題が発生した場合に非常に深刻な問題となるプログラム（例えば会社の機密情報管理プログラム）からロードされることもあり、多大な影響を及ぼす可能性がある。
【００１１】
Ｊａｖａ（登録商標）やＰｅｒｌのような言語によるプログラムに対して、これらのプログラムから機能拡張などのためにロードされるＤＬＬの追加ダウンロード・実行を許可すると、ＤＬＬと結び付いたＪａｖａ（登録商標）やＰｅｒｌの実行エンジンのセキュリティが低下する。Ｊａｖａ（登録商標）やＰｅｒｌの実行エンジンは、それぞれの言語で記述された様々なプログラムを実行可能なように、多くの機能を有している、あるいは、多くの権限を有していることがあり、１つのＤＬＬのセキュリティの問題が大きな影響を及ぼしかねない。
【００１２】
本発明は、例えば、ＤＬＬの機能を呼び出す際のセキュリティを向上させることを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一の態様に係るプログラム実行装置は、
特定の機能を実装したコードを含むＤＬＬ（動的リンクライブラリ）を利用するＤＬＬ利用プログラムを処理装置により実行するＤＬＬ利用プログラム実行部と、
前記ＤＬＬ利用プログラム実行部が前記ＤＬＬ利用プログラムの実行中にアクセスする記憶装置の記憶領域への前記ＤＬＬ利用プログラム実行部以外によるアクセスを処理装置により制限するアクセス制限部と、
前記アクセス制限部がアクセスを制限する記憶領域とは別の記憶領域である隔離領域へ前記ＤＬＬをロードするＤＬＬ隔離ロードプログラムを処理装置により実行するＤＬＬ隔離ロードプログラム実行部とを備えるプログラム実行装置であって、
前記ＤＬＬ利用プログラム実行部と前記ＤＬＬ隔離ロードプログラム実行部とは、互いに通信する隔離ＤＬＬ通信部を有し、
前記ＤＬＬ利用プログラム実行部は、前記隔離ＤＬＬ通信部を介して、前記ＤＬＬのロードを前記ＤＬＬ隔離ロードプログラム実行部に指示し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へ前記ＤＬＬをロードし、
前記ＤＬＬ利用プログラム実行部は、前記隔離ＤＬＬ通信部を介して、前記隔離領域へロードされたＤＬＬ内のコードが実装する機能の呼び出しを前記ＤＬＬ隔離ロードプログラム実行部に指示し、
前記ＤＬＬ隔離ロードプログラム実行部は、前記ＤＬＬ利用プログラム実行部による指示に従って、前記隔離領域へロードしたＤＬＬ内のコードを実行し、前記隔離ＤＬＬ通信部を介して、当該実行結果を前記ＤＬＬ利用プログラム実行部に通知することを特徴とする。
【発明の効果】
【００１４】
本発明の一の態様によれば、プログラム実行装置において、ＤＬＬ利用プログラム実行部が、隔離ＤＬＬ通信部を介して、ＤＬＬのロードをＤＬＬ隔離ロードプログラム実行部に指示し、ＤＬＬ隔離ロードプログラム実行部が、ＤＬＬ利用プログラム実行部による指示に従って、隔離領域へＤＬＬをロードし、ＤＬＬ利用プログラム実行部が、隔離ＤＬＬ通信部を介して、隔離領域へロードされたＤＬＬ内のコードが実装する機能の呼び出しをＤＬＬ隔離ロードプログラム実行部に指示し、ＤＬＬ隔離ロードプログラム実行部が、ＤＬＬ利用プログラム実行部による指示に従って、隔離領域へロードしたＤＬＬ内のコードを実行し、隔離ＤＬＬ通信部を介して、当該実行結果をＤＬＬ利用プログラム実行部に通知することにより、ＤＬＬの機能を呼び出す際のセキュリティが向上する。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態について、図を用いて説明する。
【００１６】
実施の形態１．
Ｊａｖａ（登録商標）言語を例にとり、本実施の形態を説明する。まず、一般的な例について簡単に説明する。一般に、ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）が提供するＤＬＬ機能は、プログラム本体（Ｗｉｎｄｏｗｓ（登録商標）の場合には“．ｅｘｅ”ファイルで提供される）が必要に応じてＤＬＬプログラム（Ｗｉｎｄｏｗｓ（登録商標）の場合には、一般に“．ｄｌｌ”ファイルで提供される）をロードし、その関数の名前や順番（インデックス）により、プログラム本体からＤＬＬプログラム内の関数の呼び出しが可能となる。
【００１７】
Ｊａｖａ（登録商標）言語の場合には、基本的な機能はＯＳの提供するＤＬＬ機能を使用するが、さらにＪａｖａ（登録商標）に合わせたプログラム本体とＤＬＬプログラムの間のインタフェースを定義している。これを、ＪＮＩ（Ｊａｖａ（登録商標）・Ｎａｔｉｖｅ・Ｉｎｔｅｒｆａｃｅ）と呼ぶ。例えばＪａｖａ（登録商標）言語では、データはオブジェクト単位で管理され、オブジェクトはその内部にフィールドやメソッドを持つ。ＪＮＩのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ・Ｐｒｏｇｒａｍｍｉｎｇ・Ｉｎｔｅｒｆａｃｅ）のＧｅｔＭｅｔｈｏｄＩＤにより、あるオブジェクトのフィールドへのアクセスを行うことができる。また、例えば、ＣａｌｌＤｏｕｂｌｅＭｅｔｈｏｄ・ＡＰＩにより、Ｃ／Ｃ＋＋で記述されるＤＬＬプログラムからＪａｖａ（登録商標）言語で記述されたｄｏｕｂｌｅ型の戻り値を返す実行コードを呼び出すことができる。
【００１８】
図１０に、Ｊａｖａ（登録商標）におけるＤＬＬ利用時の構成を示す。Ｊａｖａ（登録商標）プログラムであるＤＬＬ利用プログラム１０１は、Ｊａｖａ（登録商標）言語で記述され、中間言語にコンパイルされたクラスファイルと呼ばれる形式で提供されるプログラムである。Ｊａｖａ（登録商標）実行エンジン１０２（以下、単に「実行エンジン」という）は、そのＤＬＬ利用プログラム１０１を実行するソフトウェアであり、典型的な実装では中間言語を処理するインタプリタを含み、Ｗｉｎｄｏｗｓ（登録商標）などではｊａｖａ．ｅｘｅという実行ファイルで提供される。暗号ライブラリ１０５がＤＬＬ形式のａｎｇｏｕ．ｄｌｌというＤＬＬファイルで提供されるとする。ｊａｖａ．ｅｘｅ、ａｎｇｏｕ．ｄｌｌにはそれぞれ、プログラム本体、即ち実行エンジン１０２と、ＤＬＬプログラム、即ち暗号ライブラリ１０５内にＪＮＩのためのコードがあり、それぞれホスト側ＪＮＩ１０３、ＤＬＬ側ＪＮＩ１０４と呼ぶ。ＤＬＬ利用プログラム１０１により、ある機能が呼び出され、それが暗号ライブラリ１０５により提供されるものである場合、実行エンジン１０２はホスト側ＪＮＩ１０３のＤＬＬ呼出部１０７により、ＤＬＬ側ＪＮＩ１０４を呼び出し、ＤＬＬ側ＪＮＩ１０４は暗号ライブラリ１０５内の機能（暗号化関数など）を呼び出し、結果を返す。実行エンジン１０２であるｊａｖａ．ｅｘｅは、暗号ライブラリ１０５であるａｎｇｏｕ．ｄｌｌをＪａｖａ（登録商標）プロセスであるＤＬＬ利用プロセス１０６内にロードし、使用する。
【００１９】
図１は、本実施の形態に係るプログラム実行装置１００の構成を示すブロック図である。
【００２０】
プログラム実行装置１００は、ハードウェアとして、メモリなどの記憶装置１５１、ＣＰＵなどの処理装置１５２を備える。プログラム実行装置１００は、その他のハードウェアとして、プログラムをダウンロードしたり、データを入力したりする入力装置、プログラムの実行結果を画面表示したり、データを出力したりする出力装置を備えていてもよい。
【００２１】
また、プログラム実行装置１００は、ＤＬＬ利用プログラム実行部２５１、アクセス制限部２５２、ＤＬＬ隔離ロードプログラム実行部２５３を備える。ＤＬＬ利用プログラム実行部２５１、アクセス制限部２５２、ＤＬＬ隔離ロードプログラム実行部２５３は、例えばＯＳに実装される。
【００２２】
ＤＬＬ利用プログラム実行部２５１は、前述したＤＬＬ利用プログラム１０１をＤＬＬ利用プロセス１０６として処理装置１５２により実行する。ＤＬＬ利用プログラム１０１は、前述した暗号ライブラリ１０５を利用するプログラムである。暗号ライブラリ１０５は、特定の機能を実装したコードを含むＤＬＬの一例であり、例えばデータの暗号化機能を実装したコードを含む。ＤＬＬ利用プログラム実行部２５１は、ＤＬＬ利用プロセス１０６内の実行エンジン１０２に含まれるホスト側ＪＮＩ１０３に、前述したＤＬＬ呼出部１０７に加えて、ＤＬＬ隔離ロード判断部２０５及び隔離ＤＬＬ通信部２０４を有する。
【００２３】
アクセス制限部２５２は、ＤＬＬ利用プロセス１０６がＤＬＬ利用プログラム１０１の実行中にアクセスする記憶装置１５１の記憶領域（「メモリ領域」ともいう）へのＤＬＬ利用プロセス１０６以外のプロセスによるアクセスを処理装置１５２により制限する。そのために、アクセス制限部２５２は、ＯＳなどのメモリ保護機能を利用することができる。
【００２４】
ＤＬＬ隔離ロードプログラム実行部２５３は、ＤＬＬ隔離ロードプログラム２０１をＤＬＬ隔離プロセス２０３として処理装置１５２により実行する。ＤＬＬ隔離ロードプログラム２０１は、アクセス制限部２００がＤＬＬ利用プロセス１０６以外のプロセスによるアクセスを制限する記憶領域とは別の記憶領域である隔離領域へ暗号ライブラリ１０５などのＤＬＬをロードするプログラムであり、例えばｋａｋｕｒｉ．ｅｘｅという実行ファイルに実装される。ＤＬＬ隔離ロードプログラム実行部２５３は、ＤＬＬ隔離ロードプログラム２０１に隔離ＤＬＬ通信部２０２を有する。この隔離ＤＬＬ通信部２０２とホスト側ＪＮＩ１０３の隔離ＤＬＬ通信部２０４とは、互いに通信を行う。
【００２５】
一般に、プロセスとは、プログラムの実行インスタンスだけを指す場合もあるが、プログラムの実行インスタンス及びそのプログラムの実行のために割り当てられたリソースを意味するものである。以下では、ＤＬＬ利用プロセス１０６がＤＬＬ利用プログラム１０１の実行中にアクセスする記憶領域、即ち、アクセス制限部２００がＤＬＬ利用プロセス１０６以外のプロセスによるアクセスを制限する記憶領域を単にＤＬＬ利用プロセス１０６という場合がある。同様に、隔離領域を単にＤＬＬ隔離プロセス２０３という場合がある。例えば、暗号ライブラリ１０５が使用されるときにはａｎｇｏｕ．ｄｌｌが隔離領域にロードされることとなるが、ＤＬＬ隔離プロセス２０３に内包されるともいえる。
【００２６】
図２は、プログラム実行装置１００の外観の一例を示す図である。
【００２７】
図２において、プログラム実行装置１００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶ディスプレイ）の表示画面を有する表示装置９０１、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ装置９０６などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。システムユニット９１０は、コンピュータであり、ＬＡＮ９４２（ローカルエリアネットワーク）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００２８】
図３は、プログラム実行装置１００のハードウェア資源の一例を示す図である。
【００２９】
図３において、プログラム実行装置１００は、プログラムを実行するＣＰＵ９１１（「演算装置」、「マイクロプロセッサ」、「マイクロコンピュータ」、「プロセッサ」ともいう）を備えている。ＣＰＵ９１１は、処理装置１５２の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカードリーダライタなどの記憶媒体が用いられてもよい。
【００３０】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置１５１の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５などは、入力装置の一例である。また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００３１】
通信ボード９１５は、ＬＡＮ９４２に限らず、インターネット９４０、あるいは、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークなどのＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０あるいはＷＡＮなどに接続されている場合、ゲートウェイ９４１は不要となる。
【００３２】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」、「〜手段」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。また、ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として記憶されている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ディスクやメモリなどの記憶媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理（動作）に用いられる。抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００３３】
また、本実施の形態の説明において説明するブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号は、ＲＡＭ９１４などのメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク（ＭＤ）、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）などの記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体により伝送される。
【００３４】
また、本実施の形態の説明において「〜部」、「〜手段」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」、「〜手段」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤなどの記録媒体に記憶される。このプログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【００３５】
以下、本実施の形態に係るプログラム実行方法、即ち、プログラム実行装置１００の動作について説明する。
【００３６】
ＤＬＬ利用プログラム実行部２５１が記録媒体やネットワーク上の暗号ライブラリ１０５を利用するとき、まず、ＤＬＬ利用プログラム実行部２５１のＤＬＬ隔離ロード判断部２０５が、ＤＬＬ利用プログラム１０１と暗号ライブラリ１０５との少なくともいずれかの属性に応じて、暗号ライブラリ１０５のロードをＤＬＬ隔離ロードプログラム実行部２５３に指示するか、若しくは、アクセス制限部２５２がＤＬＬ利用プロセス１０６以外のプロセスによるアクセスを制限する記憶領域（即ち、利用プロセス１０６）へ暗号ライブラリ１０５をロードするかを判断する。前者の判断をした場合、ＤＬＬ利用プログラム実行部２５１のＤＬＬ隔離ロード判断部２０５は、隔離ＤＬＬ通信部２０４を介して、暗号ライブラリ１０５のロードをＤＬＬ隔離ロードプログラム実行部２５３に指示する。ＤＬＬ隔離ロードプログラム実行部２５３は、ＤＬＬ利用プログラム実行部２５１による指示に従って、上記の記録媒体やネットワークから、隔離領域（即ち、ＤＬＬ隔離プロセス２０３）へ暗号ライブラリ１０５をロードする。次に、ＤＬＬ利用プログラム実行部２５１のＤＬＬ呼出部１０７が、隔離ＤＬＬ通信部２０４を介して、隔離領域へロードされた暗号ライブラリ１０５内のコードが実装する機能（例えば、データの暗号化機能）の呼び出しをＤＬＬ隔離ロードプログラム実行部２５３に指示する。ＤＬＬ隔離ロードプログラム実行部２５３は、ＤＬＬ利用プログラム実行部２５１による指示に従って、隔離領域へロードした暗号ライブラリ１０５が実装するコードを実行し、隔離ＤＬＬ通信部２０２を介して、当該実行結果をＤＬＬ利用プログラム実行部２５１に通知する。ＤＬＬ利用プログラム実行部２５１は、通知された実行結果に基づいて、所定の処理を行ったり、当該実行結果を出力装置から出力したりする。
【００３７】
図４に、暗号ライブラリ１０５をロードし、暗号ライブラリ１０５内の機能を呼び出す場合の処理フローを示す。ＤＬＬ利用プログラム１０１が暗号機能の利用のため、暗号ライブラリ１０５の呼び出しを実行エンジン１０２に指示すると、実行エンジン１０２はホスト側ＪＮＩ１０３に対し、暗号ライブラリ１０５を実現するａｎｇｏｕ．ｄｌｌのロードを指示する（前述した一般的な例と同じ）。ホスト側ＪＮＩ１０３は、ＤＬＬ隔離ロード判断部２０５にＤＬＬを隔離してロードすべきか、そのままロードすべきか判断させる（ステップＳ３０１）。ここでは、電子署名が付与されて配布されているＤＬＬに対しては信頼できるソフトウェアであるとする（ＤＬＬは、電子署名が付与されている、又は、付与されていないという属性を持っているものとする）。電子署名がされている場合には、そのままロードすべきとし、ホスト側ＪＮＩ１０３は、ＤＬＬ呼出部１０７によりＯＳのＤＬＬ機能などを利用して、対象ＤＬＬであるａｎｇｏｕ．ｄｌｌをＤＬＬ利用プロセス１０６内にロードする（ステップＳ３０２）。ホスト側ＪＮＩ１０３は、ａｎｇｏｕ．ｄｌｌをＤＬＬ呼出部１０７からロードしたことをＤＬＬ利用プロセス１０６内に記録し、後の使用に備える（ステップＳ３０３）。次にＤＬＬ利用プログラム１０１がロードした暗号ライブラリ１０５の機能の呼び出しを指示した場合、実行エンジン１０２はホスト側ＪＮＩ１０３に同機能の呼び出しを指示し（ステップＳ３０６）、ホスト側ＪＮＩ１０３は、ステップＳ３０３でＤＬＬ利用プロセス１０６内に記録した内容に基づき、暗号ライブラリ１０５をＤＬＬ呼出部１０７によりロードしたか否かを確認する（ステップＳ３０７）。ＤＬＬ呼出部１０７からロードした場合、ＤＬＬ呼出部１０７により対象ＤＬＬの機能をＤＬＬ利用プロセス１０６内で直接呼び出し（ステップＳ３０８）、呼び出し結果を実行エンジン１０２、さらにはＤＬＬ利用プログラム１０１に返す（ステップＳ３１０）。
【００３８】
暗号ライブラリ１０５であるａｎｇｏｕ．ｄｌｌが電子署名をつけて配布されていない場合について説明する。電子署名されていないため（ステップＳ３０１）、ホスト側ＪＮＩ１０３は、隔離ＤＬＬ通信部２０４を介して、対象ＤＬＬであるａｎｇｏｕ．ｄｌｌをロードする（ステップＳ３０４）。このとき、ホスト側ＪＮＩ１０３は、隔離ＤＬＬ通信部２０４を介して、暗号ライブラリ１０５であるａｎｇｏｕ．ｄｌｌをロードするようにＤＬＬ隔離ロードプログラム実行部２５３に指示して、ＤＬＬ隔離ロードプログラム２０１を起動する（ステップＳ３１１）。起動したＤＬＬ隔離ロードプログラム２０１は、ＤＬＬ隔離プロセス２０３を構成し、指示されたＤＬＬであるａｎｇｏｕ．ｄｌｌを自プロセス内にロードし（ステップＳ３１２）、隔離ＤＬＬ通信部２０２を介して、ホスト側ＪＮＩ１０３内の隔離ＤＬＬ通信部２０４にロードが完了したことを通知する（ステップＳ３１３）。ホスト側ＪＮＩ１０３は、隔離ＤＬＬ通信部２０４を介して、ＤＬＬをロードしたことをＤＬＬ利用プロセス１０６内に記録する（ステップＳ３０５）。ＤＬＬ機能の呼び出しに対して（ステップＳ３０７）、ＤＬＬがＤＬＬ隔離プロセス２０３にロードされたため（ステップＳ３０７）、隔離ＤＬＬ通信部２０４を介して対象ＤＬＬの機能を呼び出す（ステップＳ３０９）。即ち、ホスト側ＪＮＩ１０３の隔離ＤＬＬ通信部２０４は、ＤＬＬ隔離ロードプログラム２０１の隔離ＤＬＬ通信部２０２に機能の呼び出しをプロセス間通信などにより指示する。それを受信（ステップＳ３１４）したＤＬＬ隔離ロードプログラム２０１の隔離ＤＬＬ通信部２０２は、ａｎｇｏｕ．ｄｌｌ内のＪＮＩ機能を介して指定されたＤＬＬ機能を呼び出し（ステップＳ３１５）、やはりプロセス間通信などにより呼び出し結果をＤＬＬ利用プロセス１０６に返す（ステップＳ３１６）。
【００３９】
このように信頼できないＤＬＬの実行コードをプログラム本体と別のメモリ領域を持つＤＬＬ隔離プロセス２０３に分離することにより、ＯＳの提供するプロセスのメモリ保護機能などにより、ＤＬＬ隔離プロセス２０３内において、ロードしたＤＬＬがメモリ破壊、実行コード書き換えなどの行為に及んだとしても、その被害はＤＬＬ隔離プロセス２０３内に閉じ込められ、ＤＬＬ利用プロセス１０６には及ばない。また、ＤＬＬ隔離ロードプログラム２０１とホスト側ＪＮＩ１０３の間でＤＬＬ機能呼び出しの変換を行うため、ＤＬＬであるａｎｇｏｕ．ｄｌｌはそのままロードされる場合でも、隔離ロードされる場合でも同じものでよい。
【００４０】
本実施の形態では、ＤＬＬのロードの選択を電子署名の有無（ＤＬＬの属性の一例）で判断したが、その電子署名の署名者（ＤＬＬの属性の一例）により判断する方法もある。例えば、ＯＳメーカや使用している機器メーカが署名者である場合は信用できるものとして隔離せずにそのままロードする。あるいはまた、上記の記録媒体やネットワーク上でＤＬＬとともに記憶される情報から識別可能なＤＬＬの作成者（ＤＬＬの属性の一例）によって判断する。
【００４１】
また、ＤＬＬのロードの選択をプログラム本体の機能や権限（ＤＬＬ利用プログラム１０１の属性の一例）によって判断してもよい。例えばセキュリティチップへのアクセスを行うプログラムには高いセキュリティが求められるため、隔離してＤＬＬをロードする。また、一定以上の高い権限を有するプログラムでは、隔離してＤＬＬをロードする。あるいはまた、プログラム本体とＤＬＬの権限の大小（包含）関係によって判断することも考えられる。例えば、ＤＬＬ実行に必要な権限をすべてプログラム本体が有する場合には、隔離せずにＤＬＬをロードする。あるいはまた、高いセキュリティは要求されていない場合に、高速な呼び出しが必要であるＤＬＬに対しては隔離ロードとせずにそのままロードすることも考えられる。
【００４２】
以上のように、本実施の形態に係るプログラム実行装置１００は、
プログラム実行時にリンク・ロードされ、実行されるソフトウェアモジュール（ＤＬＬ）をロードするプログラム本体（ＤＬＬ利用プログラム１０１）とは別に、ＤＬＬロード用の別プログラム（ＤＬＬ隔離ロードプログラム２０１）を設け、
ＤＬＬ利用プログラム１０１によるＤＬＬロード指示に対して、ＤＬＬをロードするＤＬＬ利用プログラム１０１とは別のメモリ領域（隔離領域）を割り当て、
隔離領域内でＤＬＬ隔離ロードプログラム２０１を実行し、同隔離領域内においてＤＬＬ隔離ロードプログラム２０１は対象ＤＬＬをロードし、
ＤＬＬ利用プログラム１０１及びＤＬＬ隔離ロードプログラム２０１に隔離ＤＬＬ通信部２０２，２０４を設け、
これらの隔離ＤＬＬ通信部２０２，２０４により、ＤＬＬ利用プログラム１０１とＤＬＬ内実行コードの間の呼び出しを、ＤＬＬ利用プログラム１０１とＤＬＬ隔離ロードプログラム２０１の間の呼び出しと、ＤＬＬ隔離ロードプログラム２０１とＤＬＬ内実行コードの間の呼び出しに代替して実行する。
【００４３】
これにより、ＤＬＬの機能を呼び出す際のセキュリティが向上する。
【００４４】
また、プログラム実行装置１００は、
ＤＬＬ利用プログラム１０１及びＤＬＬの機能、権限、作成者などの属性に応じて、ＤＬＬを上記のように隔離してロード・実行するか、通常のようにＤＬＬ利用プログラム１０１のメモリ領域内にロード・実行するかを選択するＤＬＬ隔離ロード判断部２０５を有する。
【００４５】
これにより、信頼性のあるＤＬＬの機能を呼び出す際の実行時間が短縮できる。
【００４６】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【００４７】
図５は、本実施の形態に係るプログラム実行装置１００の構成を示すブロック図である。
【００４８】
本実施の形態では、プログラム実行装置１００は、実施の形態１で図１に示したもののほか、ＤＬＬ隔離ロードプログラム権限設定部２５４を備える。ＤＬＬ隔離ロードプログラム権限設定部２５４は、例えばＯＳに実装される。
【００４９】
ＤＬＬ隔離ロードプログラム権限設定部２５４は、暗号ライブラリ１０５などのＤＬＬ内のコードを実行するために必要なレベルの権限（例えば、ＤＬＬごとに予め設定され、上記の記録媒体やネットワーク上でＤＬＬとともに記憶されている）をＤＬＬ隔離ロードプログラム実行部２５３に処理装置１５２により設定する。即ち、ＤＬＬ隔離プロセス２０３の権限を設定する。ＤＬＬ隔離ロードプログラム権限設定部２５４は、設定した権限を記憶装置１５１に記憶する。記憶装置１５１に記憶された権限は、ＤＬＬ隔離プロセス２０３がＯＳの特定の機能を呼び出したり、記憶装置１５１の特定の記憶領域にアクセスしたりする場合に参照される。
【００５０】
例えば、プロセスに権限を付与する機能を提供するＯＳを使用している場合、ＤＬＬ隔離プロセス２０３に、ロードするＤＬＬに必要な権限のみを与えることにより、ＤＬＬに必要な権限以上の権限を、ＤＬＬをロードするプログラム本体（ＤＬＬ利用プログラム１０１）が有していた場合には、セキュリティ低下の影響範囲を狭めることができる。必要な権限は、ＤＬＬファイル内に格納してもよいし、別途ファイルを用意してそのファイルに格納し、ＤＬＬファイルと権限を格納したファイルをセットで配布してもよい。ＤＬＬファイル内に格納する場合には、ＤＬＬ利用プログラム１０１から直接ロードされる場合の権限と、隔離ロードされる場合の権限の双方を格納してもよい。
【００５１】
以上のように、本実施の形態に係るプログラム実行装置１００は、
プログラムの実行にあたって権限を付与され、権限のある範囲でのみＯＳなどの提供する機能が利用可能である環境において、ＤＬＬ隔離ロードプログラム２０１に対して対象ＤＬＬの実行に必要な権限のみを設定するＤＬＬ隔離ロードプログラム権限設定部２５４を有する。
【００５２】
これにより、ＤＬＬの機能を呼び出す際のセキュリティがさらに向上する。
【００５３】
実施の形態３．
本実施の形態について、主に実施の形態１との差異を説明する。
【００５４】
図６は、本実施の形態に係るプログラム実行装置１００の構成を示すブロック図である。
【００５５】
本実施の形態では、プログラム実行装置１００において、ＤＬＬ利用プログラム実行部２５１は、実施の形態１で図１に示したもののほか、ホスト側ＪＮＩ１０３に、セキュリティ違反記録・通知部４０１を有する。また、ＤＬＬ隔離ロードプログラム実行部２５３は、実施の形態１で図１に示したもののほか、ＤＬＬ隔離ロードプログラム２０１にセキュリティ違反記録・通知部４０２を有する。
【００５６】
ＤＬＬ隔離ロードプログラム実行部２５３のセキュリティ違反記録・通知部４０２は、隔離領域で暗号ライブラリ１０５などのＤＬＬ内のコードを実行中に隔離領域とは別の記憶領域へアクセスした場合、隔離ＤＬＬ通信部２０２を介して、当該アクセスがあったことをＤＬＬ利用プログラム実行部２５１に通知する。ＤＬＬ利用プログラム実行部２５１のセキュリティ違反記録・通知部４０１は、その通知に基づいて、セキュリティ違反に相当するアクセスがあったことを記憶領域に記憶したり、出力装置から出力したりする。
【００５７】
実施の形態１において、暗号ライブラリ１０５は、ＤＬＬ隔離プロセス２０３に隔離され、ＯＳなどのメモリ保護機能により、ＤＬＬ隔離プロセス２０３内でのみメモリアクセスが可能である。ＯＳのメモリ保護機能に違反する、即ちアクセス許可されていないメモリにアクセスしようとすると、ＯＳが定める方法によりその旨がプロセスに通知される。
【００５８】
そこで、上記のように、ＤＬＬ隔離ロードプログラム２０１内に、セキュリティ違反記録・通知部４０２を設けている。ＤＬＬ利用プロセス１０６は、ＯＳによるメモリ保護違反の通知を受信すると、セキュリティ違反記録・通知部４０２を呼び出す。セキュリティ違反記録・通知部４０２は、隔離ＤＬＬ通信部２０２を介してその旨をＤＬＬ利用プロセス１０６側の隔離ＤＬＬ通信部２０４に通知し、ホスト側ＪＮＩ１０３内のセキュリティ違反記録・通知部４０１により、その旨をファイルなどに記録あるいはユーザやシステム管理者に通知する。
【００５９】
セキュリティ違反記録・通知部４０１による記録あるいは通知から、暗号ライブラリ１０５に不具合がある、あるいは不正な動作をしようとしていることがわかり、以降、暗号ライブラリ１０５は使用しないことにより（単にユーザが使用しないようにしてもよいし、プログラム実行装置１００にて暗号ライブラリ１０５の使用を禁止する設定を自動的に行ってもよい）、セキュリティの低下を回避できる。セキュリティ違反記録・通知部４０１，４０２は、ＤＬＬ隔離プロセス２０３及びＤＬＬ利用プロセス１０６を強制終了させることにより、起こりうるセキュリティ被害を未然に防ぐことも可能である。あるいはまた、ＤＬＬ隔離ロード判断部２０５は、セキュリティ違反記録・通知部４０１の記録を参照し、直接行うか、隔離して行うかにかかわらず当該ＤＬＬのロードを拒否することもできる。
【００６０】
実施の形態４．
本実施の形態について、主に実施の形態３との差異を説明する。
【００６１】
本実施の形態に係るプログラム実行装置１００の構成は、実施の形態３で図６に示したものと同様である。
【００６２】
本実施の形態では、アクセス制限部２５２は、記憶装置１５１の一部の記憶領域への特定の操作を制限する。例えば、アクセス制限部２５２は、複数のページのそれぞれについて、ページに対するデータの書き込みやページからのデータの読み込み、といった操作を制限する。ＤＬＬ隔離ロードプログラム実行部２５３のセキュリティ違反記録・通知部４０２は、隔離領域で暗号ライブラリ１０５などのＤＬＬ内のコードを実行中に、アクセス制限部２５２が特定の操作を制限する記憶領域へ当該操作を実施した場合、隔離ＤＬＬ通信部２０２を介して、当該操作があったことをＤＬＬ利用プログラム実行部２５１に通知する。例えば、アクセス制限部２５２により書き込みが制限されているページへＤＬＬ隔離プロセス２０３がデータを書き込んだ場合、その旨がＤＬＬ利用プロセス１０６に通知される。ＤＬＬ利用プログラム実行部２５１のセキュリティ違反記録・通知部４０１は、その通知に基づいて、セキュリティ違反に相当する操作があったことを記憶領域に記憶したり、出力装置から出力したりする。
【００６３】
ＯＳによるメモリ保護機能は、多くの場合、ＯＳの動作するＣＰＵやＭＭＵ（Ｍｅｍｏｒｙ・Ｍａｎａｇｅｍｅｎｔ・Ｕｎｉｔ）のメモリ保護機能により実現する。多くのＣＰＵやＭＭＵでは、例えば４ＫＢごとのページと呼ばれる単位でメモリを確保し、ページに属性を付けることができる。例えば、実行コード用に読み込みのみが可能であるページがアドレス０ｘ１０００から０ｘ２０００に１ページ設定され、データやスタック用に読み書き可能なページが０ｘＣ０００から０ｘＦ０００に３ページ設定されているとする。このとき、あるプログラムが動作するプロセスが、読み込みのみ可能なページに書き込みアクセスを行った場合、ページ保護違反が検知され、ＣＰＵ例外などが発生する。このＣＰＵ例外はＯＳに通知され、ＯＳは実施の形態３で述べたようなメモリ保護違反の通知をする。ＤＬＬ利用プロセス１０６は、このＯＳによる通知を受信すると、セキュリティ違反記録・通知部４０２を呼び出す。セキュリティ違反記録・通知部４０２は、隔離ＤＬＬ通信部２０２を介して、その旨をＤＬＬ利用プロセス１０６側の隔離ＤＬＬ通信部２０４に通知し、ホスト側ＪＮＩ１０３内のセキュリティ違反記録・通知部４０１により、その旨をファイルなどに記録あるいはユーザやシステム管理者に通知する。
【００６４】
以上のように、実施の形態３に係るプログラム実行装置１００は、
隔離領域で実行されるＤＬＬ実行コードの、隔離領域外のメモリのアクセスを検知し、同アクセスをセキュリティ上の警告として記録・通知するセキュリティ違反記録・通知部４０１，４０２を有する。
【００６５】
また、実施の形態４に係るプログラム実行装置１００は、
プログラム本体（ＤＬＬ利用プログラム１０１）とＤＬＬ実行コード間のインタフェースを制限し、その制限の範囲内では不可能なメモリアクセスを検知し、同アクセスをセキュリティ上の警告として記録・通知するセキュリティ違反記録・通知部４０１，４０２を有する。
【００６６】
これにより、過去に利用したＤＬＬを再度利用する際に、そのＤＬＬの信頼性を確認することができる。
【００６７】
さて、ＪＮＩの機能には、例えば指定した実行エンジン１０２内の文字列の内容を読み出すＧｅｔＳｔｒｉｎｇＣｈａｒｓというＡＰＩがあり、その文字列の利用が終了したことを実行エンジン１０２に伝えるＲｅｌｅａｓｅＳｔｒｉｎｇＣｈａｒｓというＡＰＩがある。ＤＬＬからのＧｅｔＳｔｒｉｎｇＣｈａｒｓのＡＰＩ呼び出しに対して、ＤＬＬ側ＪＮＩ１０４は隔離ＤＬＬ通信部２０２，２０４、ホスト側ＪＮＩ１０３を介して、実行エンジン１０２から指定した文字列の内容を暗号ライブラリ１０５に提供する。ここで、ＤＬＬ側ＪＮＩ１０４は文字列の内容をそのまま提供するのではなく、ＯＳの機能などを用いて独立したページに割り当てる。また、ＤＬＬ側ＪＮＩ１０４はＲｅｌｅａｓｅＳｔｒｉｎｇＣｈａｒｓのＡＰＩ呼び出しに対してそのページ割り当てを消去する。消去されたページに後でアクセスするとメモリ保護違反が発生し、ＤＬＬプログラムに不具合あるいは不正な処理があることがわかる。
【００６８】
あるいはまた、ＤＬＬは、実行エンジン１０２から配列オブジェクトを取得する。実行エンジン１０２の典型的な実装では、配列オブジェクトは、配列の内容の型情報、配列の長さ情報などの管理情報に続いて、配列の中身を収容する。Ｊａｖａ（登録商標）言語では、配列の長さは変更できないが、ＤＬＬにおいて配列の長さ部分を書き換えてしまうことが考えられる。このような場合に、ＤＬＬ側ＪＮＩ１０４では配列の管理情報と配列の中身の情報を別のページとし、ＤＬＬ内の実行コードを実行中には管理情報部分はメモリ保護機能により読み込みのみとし、配列の中身は読み書き可能なページとすることができる。この場合、管理情報を書き換えようとすると、メモリ保護違反が発生し、ＤＬＬプログラムに不具合あるいは不正な処理があることがわかる。
【００６９】
あるいはまた、上記配列の例において、配列の中身のアクセスをＪＮＩの提供するＧｅｔＯｂｊｅｃｔＡｒｒａｙＥｌｅｍｅｎｔ、ＳｅｔＯｂｊｅｃｔＡｒｒａｙＥｌｅｍｅｎｔのような配列の中身へのアクセス専用のＡＰＩの呼び出し時にのみ許可し、それ以外の場合にはメモリ保護機能でセキュリティ違反の監視及び検出を行ってもよい。このようにしてセキュリティを向上させることができる。
【００７０】
実施の形態３及び４の変形例として、メモリ保護機能を利用する代わりに、ＤＬＬ実行コードの実行をＣＰＵで直接行うのではなく、ＣＰＵの命令を解釈し実行するインタプリタで実行し、１命令ごとにその処理内容を確認してもよい。この場合、性能が劣化する可能性があるが、後に述べる実施の形態５では試験中のみ性能が劣化するため、問題とはならない。
【００７１】
ここで、他の変形例について説明する。この例では、プログラム実行装置１００は、プログラム本体（ＤＬＬ利用プログラム１０１）において、セキュリティを高くする必要があるデータを指定し、同データあるいは同データが参照するデータへのアクセスを監視し、不要と判断されるアクセスをセキュリティ上の警告として記録・通知するセキュリティ違反記録・通知部４０１，４０２を有する。
【００７２】
例えば、プログラム本体（ＤＬＬ利用プログラム１０１）では、セキュリティチップへのアクセスを行うとする。このようなプログラムに対しては、高いセキュリティが要求される。そこで、そのアクセスに高いセキュリティが要求されるデータを区別する。図７にＪａｖａ（登録商標）オブジェクト４０３（以下、単に「オブジェクト」という）における実現例を示す。典型的な実行エンジン１０２の実装では、あるオブジェクト４０３は、各オブジェクト４０３に共通のデータとオブジェクト４０３ごとに異なるデータを収容する。共通データの例としては、オブジェクト４０３の種類（型）情報や、サイズなどがある。この例では、共通データとして、セキュリティフラグを追加する。ＤＬＬ側ＪＮＩ１０４において、このセキュリティフラグの立ったオブジェクト４０３へのアクセスを検知した場合、セキュリティ違反であると判断することにより、本来アクセスされないはずの、高いセキュリティのデータからの情報漏洩などによるセキュリティ事故を防ぐことができる。
【００７３】
このセキュリティフラグの設定には、Ｊａｖａ（登録商標）ＡＰＩによる方法のほか、特定のＪａｖａ（登録商標）ＡＰＩにより生成されたデータについて自動的に設定する、セキュリティフラグが立っているデータから参照されているデータについて自動的に設定するなどの方法を用いることができる。
【００７４】
実施の形態５．
本実施の形態について、主に実施の形態３との差異を説明する。
【００７５】
本実施の形態では、ＤＬＬ隔離ロードプログラム実行部２５３は、隔離領域で暗号ライブラリ１０５が実装するコードを試験として実行する。ＤＬＬ隔離ロードプログラム実行部２５３のセキュリティ違反記録・通知部４０２は、当該実行中に隔離領域とは別の記憶領域へのアクセスがあったかどうかを記憶装置１５１に記憶する。そして、隔離ＤＬＬ通信部２０２を介して、記憶装置１５１に記憶した内容、即ち、当該アクセスがあったかどうかをＤＬＬ利用プログラム実行部２５１に通知する。ＤＬＬ利用プログラム実行部２５１のセキュリティ違反記録・通知部４０１は、その通知に基づいて、セキュリティ違反に相当するアクセスがあったかどうかを記憶領域に記憶したり、出力装置から出力したりする。ＤＬＬ利用プログラム実行部２５１が暗号ライブラリ１０５を利用するときには、ＤＬＬ利用プログラム実行部２５１のＤＬＬ隔離ロード判断部２０５が、上記試験中に隔離領域とは別の記憶領域へのアクセスがあったことが記憶装置に記憶されていた場合、暗号ライブラリ１０５のロードをＤＬＬ隔離ロードプログラム実行部２５３に指示することを判断する。一方、上記試験中に隔離領域とは別の記憶領域へのアクセスがなかったことが記憶装置に記憶されていた場合、ＤＬＬ利用プロセス１０６へ直接暗号ライブラリ１０５をロードすることを判断する。
【００７６】
実施の形態６．
本実施の形態について、主に実施の形態４との差異を説明する。
【００７７】
本実施の形態では、ＤＬＬ隔離ロードプログラム実行部２５３は、実施の形態５と同様に、隔離領域で暗号ライブラリ１０５が実装するコードを試験として実行する。ＤＬＬ隔離ロードプログラム実行部２５３のセキュリティ違反記録・通知部４０２は、当該実行中に、アクセス制限部２５２が特定の操作を制限する記憶領域への当該操作の実施があったかどうかを記憶装置１５１に記憶する。そして、隔離ＤＬＬ通信部２０２を介して、記憶装置１５１に記憶した内容、即ち、当該操作があったかどうかをＤＬＬ利用プログラム実行部２５１に通知する。ＤＬＬ利用プログラム実行部２５１のセキュリティ違反記録・通知部４０１は、その通知に基づいて、セキュリティ違反に相当する操作があったかどうかを記憶領域に記憶したり、出力装置から出力したりする。ＤＬＬ利用プログラム実行部２５１が暗号ライブラリ１０５を利用するときには、ＤＬＬ利用プログラム実行部２５１のＤＬＬ隔離ロード判断部２０５が、上記試験中にアクセス制限部２５２が特定の操作を制限する記憶領域への当該操作の実施があったことが記憶装置に記憶されていた場合、暗号ライブラリ１０５のロードをＤＬＬ隔離ロードプログラム実行部２５３に指示することを判断する。一方、上記試験中にアクセス制限部２５２が特定の操作を制限する記憶領域への当該操作の実施がなかったことが記憶装置に記憶されていた場合、ＤＬＬ利用プロセス１０６へ直接暗号ライブラリ１０５をロードすることを判断する。
【００７８】
実施の形態１では、ＤＬＬ内の機能の呼び出しは、一般的な同一プロセス内での関数呼び出しではなく、プロセス間通信を使用した呼び出しとなる。これは呼び出しそのものの時間が長くなるほか、大量のデータを処理する場合にはデータの通信時間も必要となり、速度性能が低下する要因となる。そこで、実施の形態５及び６では、ＤＬＬ隔離ロード判断部２０５において、その判断基準にＤＬＬの試験中か否かという情報を加えている。試験中にはＤＬＬを隔離し、セキュリティ違反記録・通知部４０１，４０２などを動作させる。ここでセキュリティ違反が記録・通知されないことを確認し、その他（ＤＬＬが実現する機能そのものなど）の試験が合格であれば、ＤＬＬを隔離せず、ＤＬＬ利用プロセス１０６内にロードする。このようにしてセキュリティを保ちながら、性能の劣化を抑えることができる。
【００７９】
試験に合格したことは、例えば試験が合格した場合には、特定の署名者による電子署名が付与するが、そうでない場合には異なる署名者による電子署名を付与することなどで判断できる。また、試験用に構成された機器ではＤＬＬ利用プログラム実行部２５１が、ＤＬＬを隔離してロードし、製品用に構成された機器ではＤＬＬ利用プログラム実行部２５１が、ＤＬＬをそのままロードするようにしてもよい。
【００８０】
以上のように、実施の形態５及び６に係るプログラム実行装置１００は、
ＤＬＬの試験時には実施の形態３及び４と同様のセキュリティ違反記録・通知部４０１，４０２を使用してセキュリティ違反の有無を確認し、セキュリティ違反が無く試験合格の場合に隔離せずにＤＬＬのロード・実行を許可するＤＬＬ隔離ロード判断部２０５を有する。
【００８１】
これにより、一旦信頼性を確認したＤＬＬの機能を呼び出す際の実行時間が短縮できる。
【００８２】
実施の形態７．
本実施の形態について、主に実施の形態１との差異を説明する。
【００８３】
図８は、本実施の形態に係るプログラム実行装置１００の構成を示すブロック図である。
【００８４】
本実施の形態では、ＤＬＬ利用プログラム実行部２５１とＤＬＬ隔離ロードプログラム実行部２５３とが有する隔離ＤＬＬ通信部２０２，２０４は、記憶装置１５１の特定の記憶領域を共有メモリ５０２（共有メモリ領域）として共有し、互いに通信する際にこの共有メモリ５０２を用いる。また、ＤＬＬ利用プログラム実行部２５１は、ホスト側ＪＮＩ１０３に、共有メモリ５０２を管理する共有メモリ管理部５０１を有する。
【００８５】
前述したように、ＤＬＬの隔離により性能が劣化する可能性がある。性能劣化を改善する方法として、本実施の形態では、ＤＬＬ利用プロセス１０６とＤＬＬ隔離プロセス２０３の間で共有メモリ５０２を設けている。
【００８６】
ＤＬＬが、実行エンジン１０２のどのデータにアクセスするかはわからない。したがって、実行エンジン１０２内の全ての（データ）メモリ領域が潜在的な共有メモリ５０２の対象領域となる。しかし、そのように共有メモリ５０２の対象を拡張すると、セキュリティが低下する。そこで、できる限りそのようなメモリ領域を集中させることで共有対象を限定させることが必要である。
【００８７】
ＪＮＩにおいて、実行エンジン１０２からＤＬＬに渡したことのあるデータ、あるいはＤＬＬから実行エンジン１０２に渡したことのあるデータを今後も共有される可能性のあるデータとして、出来る限り集中させる。共有メモリ管理部５０１は、共有メモリ５０２の設定を行うほか、データアクセスの情報を収集する。Ｊａｖａ（登録商標）言語の場合には、データは一度確保すると場所を動かないのではなく、ガベージコレクションのコンパクションによりデータの位置が移動する。共有メモリ管理部５０１は実行エンジン１０２のガベージコレクタ（メモリ管理機構）にヒント情報として渡し、集中させて欲しいデータをコンパクション実行時に集めてもらうようにする（図９参照）。あるいはまた、ＤＬＬ側が生成したデータははじめから共有メモリ５０２に配置してもよい。このようにすることで、例えばあるＤＬＬの機能の呼び出し中に大きなデータをアクセスするためにメモリを共有化し、そのＤＬＬの機能の呼び出し中にさらに別のメモリにアクセスする場合に、同じページにデータがあれば、既に共有済みとなり、ＤＬＬが本来アクセスすべきでないデータを保護できる可能性が高まる。
【００８８】
上記説明では、同じページにあるデータは保護できないが、前述したようにＪＮＩの特性や制限を利用し、ＪＮＩでアクセスできる範囲外のチェックを行うことが考えられる。即ち、あるページを共有設定するとともに、そのコピーをとる。ＤＬＬ呼び出し終了後に共有を解除し、コピーと比較し、ＪＮＩでアクセスできる範囲外の領域が書き換えられているかチェックする。共有範囲を集中し限定することにより、チェック範囲を狭め、性能劣化を抑えることができる。また、プログラムのソースコードや実行コードの静的解析、試験時の実行ログ取得解析などにより、実行時ではなく、予め共有のために集中させるデータを予測することもできる。
【００８９】
以上のように、本実施の形態に係るプログラム実行装置１００は、
プログラム本体（ＤＬＬ利用プログラム１０１）と隔離領域内のＤＬＬの間に共有メモリ５０２を設定し、
ＤＬＬ実行コードが作成したデータ、ＤＬＬ実行コードがアクセスしたデータ、ＤＬＬ実行コードの同じ関数内でアクセスされたデータを、ＤＬＬ利用プログラム１０１のメモリ管理機構に通知する共有メモリ管理部５０１を有する。
【００９０】
これにより、隔離したＤＬＬの機能を呼び出す際の実行時間が短縮できる。
【００９１】
以上、本発明の実施の形態について説明したが、これらのうち、２つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、１つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、２つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【図面の簡単な説明】
【００９２】
【図１】実施の形態１に係るプログラム実行装置の構成を示すブロック図である。
【図２】実施の形態１に係るプログラム実行装置の外観の一例を示す図である。
【図３】実施の形態１に係るプログラム実行装置のハードウェア資源の一例を示す図である。
【図４】実施の形態１に係るプログラム実行方法を示すフローチャートである。
【図５】実施の形態２に係るプログラム実行装置の構成を示すブロック図である。
【図６】実施の形態３及び４に係るプログラム実行装置の構成を示すブロック図である。
【図７】実施の形態３及び４の変形例におけるオブジェクトの構成を示すブロック図である。
【図８】実施の形態７に係るプログラム実行装置の構成を示すブロック図である。
【図９】実施の形態７におけるメモリ集中化の例を示す概念図である。
【図１０】一般的なＤＬＬの利用例を示す図である。
【符号の説明】
【００９３】
１００  プログラム実行装置、１０１  ＤＬＬ利用プログラム、１０２  実行エンジン、１０３  ホスト側ＪＮＩ、１０４  ＤＬＬ側ＪＮＩ、１０５  暗号ライブラリ、１０６  ＤＬＬ利用プロセス、１０７  ＤＬＬ呼出部、１５１  記憶装置、１５２  処理装置、２０１  ＤＬＬ隔離ロードプログラム、２０２  隔離ＤＬＬ通信部、２０３  ＤＬＬ隔離プロセス、２０４  隔離ＤＬＬ通信部、２０５  ＤＬＬ隔離ロード判断部、２５１  ＤＬＬ利用プログラム実行部、２５２  アクセス制限部、２５３  ＤＬＬ隔離ロードプログラム実行部、２５４  ＤＬＬ隔離ロードプログラム権限設定部、４０１  セキュリティ違反記録・通知部、４０２  セキュリティ違反記録・通知部、４０３  オブジェクト、５０１  共有メモリ管理部、５０２  共有メモリ、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2008234248.tif 000003
【図２】
2008234248.tif 000004
【図３】
2008234248.tif 000005
【図４】
2008234248.tif 000006
【図５】
2008234248.tif 000007
【図６】
2008234248.tif 000008
【図７】
2008234248.tif 000009
【図８】
2008234248.tif 000010
【図９】
2008234248.tif 000011
【図１０】
2008234248.tif 000012