(57)【要約】【課題】スクリプト形式のモジュールに対するホワイトリスト型の実行制御を実現できる情報処理装置、情報処理方法およびプログラムを提供する。【解決手段】実施形態の情報処理装置は、起動プロセス制御部と、ファイル読込み検知部と、判定部と、ファイル読込み部と、を備える。起動プロセス制御部は、起動されたプロセスのうち少なくとも特定プロセスを識別可能に第１リストに登録する。ファイル読込み検知部は、前記第１リストに登録されている特定プロセスによるファイルの読込みの要求を検知する。判定部は、要求された前記ファイルの読込みを許可するか否かを第１条件に基づいて判定する。ファイル読込み部は、前記判定部の判定結果に従って前記ファイルの読込みを制御する。【選択図】図２
2019159830.tif 000002
【特許請求の範囲】
【請求項１】
起動されたプロセスのうち少なくとも特定プロセスを識別可能に第１リストに登録する起動プロセス制御部と、
前記第１リストに登録されている特定プロセスによるファイルの読込みの要求を検知するファイル読込み検知部と、
要求された前記ファイルの読込みを許可するか否かを第１条件に基づいて判定する判定部と、
前記判定部の判定結果に従って前記ファイルの読込みを制御するファイル読込み部と、
を備える情報処理装置。
【請求項２】
前記判定部は、前記ファイルに特定拡張子が付与されていなければ前記ファイルの読込みを許可し、前記ファイルに前記特定拡張子が付与されている場合に、前記第１条件に基づいて前記ファイルの読込みを許可するか否かを判定する
請求項１に記載の情報処理装置。
【請求項３】
プロセスの複製時に、親プロセスが前記第１リストに登録されている特定プロセスである場合に、子プロセスを前記第１リストに特定プロセスとして登録する複製プロセス制御部をさらに備える
請求項１または２に記載の情報処理装置。
【請求項４】
プロセスの終了時に、終了するプロセスが前記第１リストに登録されている特定プロセスである場合に、該特定プロセスを前記第１リストから削除する終了プロセス制御部をさらに備える
請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記起動プロセス制御部は、起動するプロセスが特定プロセスである場合に、該特定プロセスの起動を許可するか否かを第２条件に基づいて判定し、
前記起動プロセス制御部の判定結果に従って特定プロセスの起動を制御する起動処理部をさらに備える
請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
前記特定プロセスはインタプリタのプロセスであり、
前記起動プロセス制御部は、特定プロセスの起動を許可すると判定した場合に、起動を許可する特定プロセスを前記インタプリタの識別情報に関連付けて前記第１リストに登録する
請求項５に記載の情報処理装置。
【請求項７】
実行可能なスクリプトファイルの一覧を、各スクリプトファイルを実行するインタプリタの識別情報と関連付けたスクリプトホワイトリストを記憶するスクリプトホワイトリスト記憶部をさらに備え、
前記第１条件は、読込みが要求された前記ファイルと、読込みを要求した前記特定プロセスと関連付けて前記第１リストに登録されている前記インタプリタの識別情報との組み合わせが、前記スクリプトホワイトリストに含まれている場合に、前記ファイルの読込みを許可するという条件である
請求項６に記載の情報処理装置。
【請求項８】
インタプリタの識別情報に関連付けて引数解析情報を記憶する引数解析情報記憶部をさらに備え、
前記起動プロセス制御部は、起動する特定プロセスである前記インタプリタの識別情報に関連付けて前記引数解析情報記憶部に記憶された前記引数解析情報に基づいて前記インタプリタが起動時に実行するスクリプトファイルを特定し、
前記第２条件は、前記インタプリタが起動時に実行するスクリプトファイルと前記インタプリタの識別情報との組み合わせが、前記スクリプトホワイトリストに含まれている場合に、前記特定プロセスの起動を許可するという条件である
請求項７に記載の情報処理装置。
【請求項９】
前記起動プロセス制御部は、起動するプロセスが特定プロセス以外である場合は、第３条件に基づいて該プロセスの起動を許可するか否かを判定し、
前記起動処理部は、前記起動プロセス制御部の判定結果に従って特定プロセス以外のプロセスの起動を制御する
請求項５に記載の情報処理装置。
【請求項１０】
前記第１条件に基づく判定結果を含むキャッシュ情報を保持するキャッシュと、
書込みが行われるファイルに関するキャッシュ情報が前記キャッシュに含まれている場合に、該キャッシュ情報を前記キャッシュから削除するファイル書込み制御部と、をさらに備え、
前記判定部は、読込みが要求された前記ファイルに関するキャッシュ情報が前記キャッシュに含まれている場合に、該キャッシュ情報の判定結果に従って、前記ファイルの読込みを許可するか否かを判定する
請求項１乃至９のいずれか一項に記載の情報処理装置。
【請求項１１】
前記第２条件に基づく判定結果を含むキャッシュ情報を保持するキャッシュと、
書込みが行われるファイルに関するキャッシュ情報が前記キャッシュに含まれている場合に、該キャッシュ情報を前記キャッシュから削除するファイル書込み制御部と、をさらに備え、
前記起動プロセス制御部は、前記インタプリタが起動時に実行するスクリプトファイルに関するキャッシュ情報が前記キャッシュに含まれている場合に、該キャッシュ情報の判定結果に従って前記インタプリタの起動を制御する
請求項８に記載の情報処理装置。
【請求項１２】
起動されたプロセスのうち少なくとも特定プロセスを識別可能に第１リストに登録し、
前記第１リストに登録されている特定プロセスによるファイルの読込みの要求を検知し、
要求された前記ファイルの読込みを許可するか否かを第１条件に基づいて判定し、
判定結果に従って前記ファイルの読込みを制御する
情報処理方法。
【請求項１３】
コンピュータに、
起動されたプロセスのうち少なくとも特定プロセスを識別可能に第１リストに登録する機能と、
前記第１リストに登録されている特定プロセスによるファイルの読込みの要求を検知する機能と、
要求された前記ファイルの読込みを許可するか否かを第１条件に基づいて判定する機能と、
判定結果に従って前記ファイルの読込みを制御する機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
情報処理のセキュリティを高める方法として、予め決められたアプリケーションの実行しか許可しないホワイトリスト型の実行制御がある。制御対象となるアプリケーションには、ＣＰＵなどのプロセッサが直接実行できる実行ファイル形式のアプリケーションのほかに、インタプリタが解釈しながら実行するスクリプト形式のアプリケーションがある。また、より安全なホワイトリスト型の実行制御を実現するには、アプリケーション本体だけでなく、アプリケーションの実行中に読込まれるモジュールに対しても実行制御を行うことが望ましい。
【０００３】
スクリプト形式のアプリケーションに対するホワイトリスト型の実行制御としては、インタプリタが実行するスクリプト形式のアプリケーション本体に対してホワイトリスト型の実行制御を行う方法が知られている。しかし、インタプリタがスクリプト形式のアプリケーションを実行している間に読込むスクリプト形式のモジュールに対してホワイトリスト型の実行制御を行う方法は知られていない。スクリプト形式のモジュールに対しては、アプリケーション本体と異なり、ファイルの読込みを制御する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第８１５１１０９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、スクリプト形式のモジュールに対するホワイトリスト型の実行制御を実現できる情報処理装置、情報処理方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、起動プロセス制御部と、ファイル読込み検知部と、判定部と、ファイル読込み部と、を備える。起動プロセス制御部は、起動されたプロセスのうち少なくとも特定プロセスを識別可能に第１リストに登録する。ファイル読込み検知部は、前記第１リストに登録されている特定プロセスによるファイルの読込みの要求を検知する。判定部は、要求された前記ファイルの読込みを許可するか否かを第１条件に基づいて判定する。ファイル読込み部は、前記判定部の判定結果に従って前記ファイルの読込みを制御する。
【図面の簡単な説明】
【０００７】
【図１】情報処理装置の概略構成を示すブロック図。
【図２】第１実施形態に係る情報処理装置の機能的な構成例を示すブロック図。
【図３】プロセス起動時の処理手順の一例を示すフローチャート。
【図４】プロセス複製時の処理手順の一例を示すフローチャート。
【図５】ファイル読込み時の処理手順の一例を示すフローチャート。
【図６】プロセス終了時の処理手順の一例を示すフローチャート。
【図７】変形例１の情報処理装置の機能的な構成例を示すブロック図。
【図８】ファイル読込み時の処理手順の一例を示すフローチャート。
【図９】変形例２の情報処理装置の機能的な構成例を示すブロック図。
【図１０】プロセス起動時の処理手順の一例を示すフローチャート。
【図１１】第２実施形態に係る情報処理装置の機能的な構成例を示すブロック図。
【図１２】プロセス起動時の処理手順の一例を示すフローチャート。
【図１３】ファイル読込み時の処理手順の一例を示すフローチャート。
【図１４】ファイル書込み時の処理手順の一例を示すフローチャート。
【図１５】変形例の情報処理装置の機能的な構成例を示すブロック図。
【図１６】プロセス起動時のＯＳ側の処理手順の一例を示すフローチャート。
【図１７】プロセス起動時の管理プロセス側の処理手順の一例を示すフローチャート。
【図１８】ファイル読込み時のＯＳ側の処理手順の一例を示すフローチャート。
【図１９】ファイル書込み時のＯＳ側の処理手順の一例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施形態の情報処理装置、情報処理方法およびプログラムについて、図面を参照して詳細に説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
【０００９】
＜概要＞
図１は、情報処理装置１０の概略構成を示すブロック図である。情報処理装置１０は、図１に示すように、ＣＰＵなどのプロセッサ（プロセッサ回路）１１ａ、メモリ１１ｂ、ストレージ１１ｃなどのハードウェア１１と、ハードウェア１１の機能を操作するＯＳ１２と、ＯＳ１２の機能を利用して動作するプロセス１３および管理プロセス１４とを有する。ＯＳ１２は１つ以上のプロセス１３と管理プロセス１４が並列・並行動作できるように、ハードウェア１１のプロセッサ１１ａやメモリ１１ｂなどを適切に割り当てて、プロセス１３や管理プロセス１４を管理する。なお、ＯＳ１２とハードウェア１１の間にＸｅｎ、ＫＶＭ、Ｈｙｐｅｒ−ＶなどのＶＭＭ（Virtual  Machine  Monitor）・ハイパーバイザが動作してもよく、ＯＳ１２が管理するハードウェア１１は仮想ハードウェアでもよい。
【００１０】
プロセス１３は、ＯＳ１２からプロセッサ１１ａやメモリ１１ｂなどの割り当てを受けて動作している状態のプログラムをいう。ここでのプログラムには、実行ファイル形式のアプリケーションやインタプリタなどがある。スクリプト形式のアプリケーションは、インタプリタのプロセスにより実行される。これらのプログラムやプログラムの一部であるモジュールは、ファイルとして格納されている。管理プロセス１４は、ＯＳ１２と協働してホワイトリスト型の実行制御を行うための特殊なプロセスである。なお、管理プロセス１４に相当する機能をＯＳ１２の内部で実現する構成であってもよい。
【００１１】
管理プロセス１４は、予め定められたホワイトリストに基づいて、ＯＳ１２が通知するプロセス１３の起動やモジュールの読込みを制御することで、実行ファイル形式のアプリケーションやスクリプト形式のアプリケーションに対するホワイトリスト型の実行制御を実現する。スクリプト形式のアプリケーションを実行するインタプリタには、例えば、Java（登録商標）、Python、Ruby、Perl、JavaScript（登録商標）、PHP、PerlScript、Lua、VBScriptなどがあるが、制御対象となるインタプリタは特に限定されるものではない。
【００１２】
スクリプト形式のアプリケーションは、インタプリタのプロセス起動時の引数に指定される一方、実行中にスクリプト形式のモジュールを読込むことがある。スクリプト形式のモジュールはファイルの読込みにより実行されるため、ファイルの読込みを制御する必要がある。本実施形態では、ファイルの読込みによるオーバヘッドや過剰な制御を回避するため、スクリプト形式のモジュールのみに限定してファイルの読込み制御を行う。これを実現するために、管理プロセス１４上で、スクリプト形式と実行ファイル形式とに分類されるアプリケーションの種別を管理し、ファイルの読込み制御の対象を、スクリプト形式のアプリケーションの実行中に要求されるファイルの読込みに限定する。また、スクリプト形式のアプリケーションの実行中に読込みが要求されるファイルには、スクリプト形式のモジュール以外にも、プログラムコードではない単なるデータとして扱われるファイル（実行されないファイル）もある。このため、管理プロセス１４上で、スクリプト形式のモジュールのファイルとデータとして扱われるファイルとに分類されるファイルの種別を識別し、ファイルの読込み制御の対象をスクリプト形式のモジュールに限定する。
【００１３】
＜第１実施形態＞
図２は、第１実施形態に係る情報処理装置１０の機能的な構成例を示すブロック図であり、主に、ＯＳ１２上で動作する管理プロセス１４の機能を示している。ＯＳ１２は、プロセス１３の管理に関わる機能として、プロセス１３の起動処理を行う起動処理部２１と、プロセス１３の複製処理を行う複製処理部２２と、プロセス１３の終了処理を行う終了処理部２３と、プロセス１３によるファイルの読込みを制御するファイル読込み部２４を備える。
【００１４】
一方、管理プロセス１４は、図２に示すように、起動プロセス制御部１０１と、複製プロセス制御部１０２と、終了プロセス制御部１０３と、ファイル読込み検知部１０４と、判定部１０５とを備える。また、管理プロセス１４は、実行ファイルホワイトリストを記憶する実行ファイルホワイトリスト記憶部１１１と、インタプリタホワイトリストを記憶するインタプリタホワイトリスト記憶部１１２と、スクリプトホワイトリストを記憶するスクリプトホワイトリスト記憶部１１３と、インタプリタ識別情報に関連付けて引数解析情報を記憶する引数解析情報記憶部１１４と、ランタイム制御リスト（第１リスト）を記憶するランタイム制御リスト記憶部１１５と、特定拡張子リストを記憶する特定拡張子リスト記憶部１１６とを備える。
【００１５】
実行ファイルホワイトリスト記憶部１１１が記憶する実行ファイルホワイトリストは、実行ファイル形式のアプリケーションおよびモジュールのホワイトリストである。実行ファイルホワイトリストは、実行を許可する実行ファイルのファイルパス名と、その実行ファイルの完全性を保証するためのハッシュ値とを関連付けて保持している。ファイルパス名は、ｉｎｏｄｅ番号とデバイス番号のセットでもよく、ファイルを一意に特定できる特徴を持つ情報であれば内容・形式は問わない。ハッシュ値は、ファイルのデータを基に生成される。ハッシュ値の生成には、HMAC、MD5、SHA-3、SHA-2、SHA-1などのアルゴリズムを使用してもよく、ファイルの完全性を保証できる特徴を持つ値を生成できるものであれば内容・形式は問わない。
【００１６】
インタプリタホワイトリスト記憶部１１２が記憶するインタプリタホワイトリストは、インタプリタのホワイトリストである。インタプリタホワイトリストは、実行を許可するインタプリタのファイルパス名、インタプリタの完全性を保証するためのハッシュ値、および、インタプリタ識別情報を関連付けて保持している。インタプリタ識別情報は、Java（登録商標）、Python、Ruby、Perl、JavaScript（登録商標）、PHP、PerlScript、Lua、VBScriptなどのインタプリタ名でもよく、インタプリタを識別できる情報であれば内容・形式を問わない。
【００１７】
スクリプトホワイトリスト記憶部１１３が記憶するスクリプトホワイトリストは、スクリプト形式のアプリケーションおよびモジュールのホワイトリストである。スクリプトホワイトリストは、実行を許可するスクリプトファイルのファイルパス名、スクリプトファイルの完全性を保証するためのハッシュ値、および、スクリプトファイルを実行するインタプリタのインタプリタ識別情報を関連付けて保持する。なお、実行を許可するスクリプトファイルをそのスクリプトファイルを実行するインタプリタごとに分類することで、インタプリタ識別情報からそのインタプリタと関連付いたスクリプトファイルを識別可能な構成としてもよい。
【００１８】
実行ファイルホワイトリスト、インタプリタホワイトリスト、スクリプトホワイトリストは１つのホワイトリストにまとめて利用してもよい。このとき、実行ファイルホワイトリストの実行ファイルのパス名に実行ファイルを表すインタプリタ識別情報を関連付けて記録してもよい。
【００１９】
引数解析情報記憶部１１４がインタプリタ識別情報に関連付けて記憶する引数解析情報は、そのインタプリタにおける引数解析方法を示す情報である。例えば、「”-o”引数の次は引数ではない」といった情報や、「”-c”引数の次の次はスクリプトファイルである」といった情報が、引数解析情報に含まれる。また、引数解析情報は、特定の引数がある場合にプロセスの起動を停止するといった定義を含んでもよい。引数解析情報は、インタプリタ起動時の引数にあるスクリプトファイルのみにホワイトリスト実行制御を行うために用いられる。インタプリタ起動時の引数にある全てのファイルにホワイトリスト実行制御を行うのであれば、引数解析情報記憶部１１４を設けなくてもよい。
【００２０】
ランタイム制御リスト記憶部１１５が記憶するランタイム制御リストは、動作中のプロセス１３のうち、特にインタプリタのプロセス（特定プロセスの一例）が登録されるリストである。ランタイム制御リストは、インタプリタのプロセス１３が動作中である場合に、そのプロセス１３を識別するｐｉｄ（プロセス識別子）とインタプリタ識別情報を関連付けて保持する。ＯＳ１２が管理するプロセス１３はｐｉｄにより一意に識別される。ランタイム制御リストが保持する情報は、動作中のインタプリタのプロセス１３を識別できる情報であればよく、ｐｉｄの代わりにｔｉｄ（スレッド識別子）などを用いてもよい。
【００２１】
なお、本実施形態では、特定プロセスであるインタプリタのプロセスのみをランタイム制御リストに登録するものとしているが、特定プロセス以外のプロセスもランタイム制御リストに登録される構成とし、特定プロセスについては、該プロセスが特定プロセスであることを識別できるように登録してもよい。例えば特定プロセスがインタプリタであれば、上述のようにインタプリタ識別情報をｐｉｄと関連付けてランタイム制御リストに登録することで、インタプリタ以外のプロセスがランタイム制御リストに登録されていてもインタプリタを識別できる。
【００２２】
特定拡張子リスト記憶部１１６が記憶する特定拡張子リストは、インタプリタホワイトリストに登録されているインタプリタが定義する特定拡張子のリストである。特定拡張子リストは、インタプリタ識別情報と特定拡張子を関連付けて保持する。特定拡張子はインタプリタごとに定義される。例えば、インタプリタがPerlであれば、pl，pmが特定拡張子となる。特定拡張子が付与されたファイルは、その特定拡張子に対応するインタプリタにより実行されるスクリプトファイルである。
【００２３】
起動プロセス制御部１０１は、ＯＳ１２の起動処理部２１からの通知に基づいて、起動が要求されたプロセス１３である起動プロセスに対するホワイトリスト型の実行制御のための判定を行う。すなわち、起動プロセス制御部１０１は、起動処理部２１からプロセス１３の起動の通知を受け取ると、実行ファイルホワイトリスト、インタプリタホワイトリスト、スクリプトホワイトリストなどを用いて、そのプロセス１３の起動を許可するか否かを判定し、判定結果を起動処理部２１に通知する。起動処理部２１は、起動プロセス制御部１０１の判定結果が起動許可であればそのプロセス１３を起動し、起動禁止であればそのプロセス１３を起動せずに所定のエラー処理を行う。
【００２４】
また、起動プロセス制御部１０１は、起動を許可すると判定したプロセス１３がインタプリタである場合、そのプロセス１３のｐｉｄを、インタプリタ識別情報に関連付けて、ランタイム制御リストに登録する。
【００２５】
複製プロセス制御部１０２は、ＯＳ１２の複製処理部２２からの通知に基づいて、複製されたプロセス１３である複製プロセスのランタイム制御リストへの追加登録の処理を行う。すなわち、複製プロセス制御部１０２は、複製処理部２２から、複製元のプロセス１３である親プロセスのｐｉｄと複製先のプロセス１３である子プロセスのｐｉｄを含むプロセス１３の複製の通知を受け取ると、親プロセスがランタイム制御リストに登録されているインタプリタであるか否かを確認し、親プロセスがランタイム制御リストに登録されているインタプリタであれば、子プロセスのｐｉｄをインタプリタ識別情報に関連付けて、ランタイム制御リストに追加登録する。
【００２６】
終了プロセス制御部１０３は、ＯＳ１２の終了処理部２３からの通知に基づいて、終了するプロセス１３である終了プロセスをランタイム制御リストから削除する処理を行う。すなわち、終了プロセス制御部１０３は、終了処理部２３からプロセス１３の終了の通知を受け取ると、終了するプロセス１３がランタイム制御リストに登録されているインタプリタであるか否かを確認し、終了するプロセス１３がランタイム制御リストに登録されているインタプリタであれば、そのプロセスのｐｉｄとインタプリタ識別情報をランタイム制御リストから削除する。
【００２７】
ファイル読込み検知部１０４は、ＯＳ１２のファイル読込み部２４からの通知に基づいて、ランタイム制御リストに登録されているインタプリタによるファイルの読込みの要求を検知する。すなわち、ファイル読込み検知部１０４は、ファイル読込み部２４から、読込みが要求されたファイルのファイルパス名とファイルの読込みを要求するプロセス１３のｐｉｄを含むファイル読込み通知を受け取ると、そのｐｉｄをランタイム制御リストと照合し、そのｐｉｄがランタイム制御リストに登録されていれば、ファイルの読込み要求がインタプリタによるものと判断する。そして、ファイル読込み検知部１０４は、ファイルの読込みを要求したインタプリタのｐｉｄと関連付けてランタイム制御リストに登録されているインタプリタ識別情報と読込みが要求されたファイルのファイルパス名を判定部１０５に渡し、ファイル読込みを許可するか否かを判定部１０５に問い合わせる。なお、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されていなければ、ファイル読込み検知部１０４からファイル読込み部２４に対してファイルの読込み許可が通知され、ファイルの読込みが行われる。
【００２８】
判定部１０５は、インタプリタが読込みを要求するファイルのうち、特定拡張子リストに含まれる特定拡張子が付与されたファイル、つまり、スクリプト形式のモジュールに対するホワイトリスト型の実行制御のための判定を行う。すなわち、インタプリタが読込みを要求するファイルに特定拡張子が付与されていない場合、そのファイルはプログラムコードではない単なるデータとして扱われるファイル（実行されないファイル）であるため、判定部１０５は、そのファイルの読込みを許可する。また、判定部１０５は、インタプリタが読込みを要求するファイルに特定拡張子が付与されている場合、そのファイルはスクリプト形式のモジュールを格納したスクリプトファイルであるため、判定部１０５は、スクリプトホワイトリストを用いて、そのファイルの読込みを許可するか否かを判定する。判定部１０５の判定結果は、ファイル読込み検知部１０４を介してファイル読込み部２４に通知される。ファイル読込み部２４は、判定部１０５の判定結果に従ってインタプリタによるファイルの読込みを制御する。
【００２９】
次に、本実施形態の情報処理装置１０の動作をフローチャートに沿って説明する。まず、プロセス起動時の処理について説明する。図３は、プロセス起動時の処理手順の一例を示すフローチャートであり、ＯＳ１２の起動処理部２１からプロセス１３の起動が通知された場合に、管理プロセス１４の起動プロセス制御部１０１により実行される処理手順の一例を示している。
【００３０】
ＯＳ１２の起動処理部２１からプロセス１３の起動が通知されると、管理プロセス１４の起動プロセス制御部１０１は、この通知を受け取る（ステップＳ１０１）。この通知には、起動プロセスのファイルパス名、起動プロセスの起動引数、起動プロセスのｐｉｄが含まれる。なお、起動引数は起動処理部２１から直接受け取らず、ＯＳ１２が管理する疑似ファイルシステム、例えばLinux（登録商標）・ＯＳ環境であればprocfsなどから取得してもよい。
【００３１】
次に、起動プロセス制御部１０１は、起動プロセスのファイルからハッシュ値を生成し（ステップＳ１０２）、インタプリタホワイトリストとのマッチングを行う（ステップＳ１０３）。すなわち、起動プロセス制御部１０１は、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、インタプリタホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのうちのいずれかに一致するか否かを確認する。
【００３２】
ここで、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、インタプリタホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれにも一致しない場合（ステップＳ１０３：不一致）、起動プロセス制御部１０１は、次に、実行ファイルホワイトリストとのマッチングを行う（ステップＳ１０４）。すなわち、起動プロセス制御部１０１は、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、実行ファイルホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのうちのいずれかに一致するか否かを確認する。
【００３３】
ここで、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、実行ファイルホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれにも一致しない場合（ステップＳ１０４：不一致）、起動プロセス制御部１０１は、起動プロセスの起動を禁止すると判定し、起動禁止を示す判定結果を起動処理部２１に通知する（ステップＳ１０５）。
【００３４】
一方、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、実行ファイルホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれかに一致する場合（ステップＳ１０４：一致）、起動プロセス制御部１０１は、起動プロセスの起動を許可すると判定し、ステップＳ１１０に進んで起動許可を示す判定結果を起動処理部２１に通知する。
【００３５】
また、起動プロセスのファイルパス名とステップＳ１０２で生成したハッシュ値との組み合わせが、インタプリタホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれかに一致した場合（ステップＳ１０３：一致）、起動プロセス制御部１０１は、そのファイルパス名とハッシュ値に関連付けてインタプリタホワイトリストに登録されているインタプリタ識別情報を基に引数解析情報から引数解析方法を特定し、インタプリタの起動引数により指定されるスクリプトファイルのファイルパス名を取得する（ステップＳ１０６）。そして、起動プロセス制御部１０１は、そのスクリプトファイルからハッシュ値を生成し（ステップＳ１０７）、スクリプトホワイトリストとのマッチングを行う（ステップＳ１０８）。すなわち、起動プロセス制御部１０１は、ステップＳ１０６で取得したスクリプトファイルのファイルパス名とステップＳ１０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのうちのいずれかに一致するか否かを確認する。
【００３６】
ここで、ステップＳ１０６で取得したスクリプトファイルのファイルパス名とステップＳ１０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれにも一致しない場合（ステップＳ１０８：不一致）、起動プロセス制御部１０１は、起動プロセスの起動を禁止すると判定し、起動禁止を示す判定結果を起動処理部２１に通知する（ステップＳ１０５）。
【００３７】
一方、ステップＳ１０６で取得したスクリプトファイルのファイルパス名とステップＳ１０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれかに一致する場合（ステップＳ１０８：一致）、起動プロセス制御部１０１は、起動プロセスであるインタプリタの起動を許可すると判定し、起動プロセスのｐｉｄをランタイム制御リストに登録し（ステップＳ１０９）、起動許可を示す判定結果を起動処理部２１に通知する（ステップＳ１１０）。
【００３８】
次に、プロセス複製時の処理について説明する。図４は、プロセス複製時の処理手順の一例を示すフローチャートであり、ＯＳ１２の複製処理部２２がプロセス１３の複製を管理プロセス１４に通知した場合に、管理プロセス１４の複製プロセス制御部１０２が実行する処理手順の一例を示している。
【００３９】
ＯＳ１２の複製処理部２２からプロセス１３の複製が通知されると、管理プロセス１４の複製プロセス制御部１０２は、この通知を受け取る（ステップＳ２０１）。この通知には、複製元のプロセス１３である親プロセスのｐｉｄと、複製先のプロセス１３である子プロセスのｐｉｄが含まれる。
【００４０】
次に、複製プロセス制御部１０２は、複製処理部２２から受け取った親プロセスのｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ２０２）。そして、親プロセスのｐｉｄがランタイム制御リストに登録されていれば（ステップＳ２０２：Ｙｅｓ）、複製プロセス制御部１０２は、実行中のインタプリタのプロセスが複製されたものと判断し、複製処理部２２から受け取った子プロセスのｐｉｄを、親プロセスと同じインタプリタ識別情報に関連付けて、ランタイム制御リストに追加登録する（ステップＳ２０３）。一方、親プロセスのｐｉｄがランタイム制御リストに登録されていない場合は（ステップＳ２０２：Ｎｏ）、そのまま処理を終了する。
【００４１】
次に、ファイル読込み時の処理について説明する。図５は、ファイル読込み時の処理手順の一例を示すフローチャートであり、ＯＳ１２のファイル読込み部２４からファイルの読込みが通知された場合に、管理プロセス１４のファイル読込み検知部１０４および判定部１０５により実行される処理手順の一例を示している。
【００４２】
ＯＳ１２のファイル読込み部２４からファイルの読込みが通知されると、管理プロセス１４のファイル読込み検知部１０４は、この通知を受け取る（ステップＳ３０１）。この通知には、読込みが要求されたファイルのファイルパス名とファイルの読込みを要求するプロセス１３のｐｉｄが含まれる。
【００４３】
次に、ファイル読込み検知部１０４は、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ３０２）。そして、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されていれなければ（ステップＳ３０２：Ｎｏ）、ファイル読込み検知部１０４は、実行ファイル形式のアプリケーションによるファイルの読込みであると判断し、ファイルの読込み許可をファイル読込み部２４に通知する（ステップＳ３０３）。
【００４４】
一方、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されていれば（ステップＳ３０２：Ｙｅｓ）、ファイル読込み検知部１０４は、インタプリタが実行しているスクリプト形式のアプリケーションによるファイルの読込みであると判断し、読込みが要求されたファイルのファイルパス名と、ランタイム制御リストから取り出したインタプリタ識別情報を判定部１０５に渡し、ファイルの読込みを許可するか否かを判定部１０５に問い合わせる（ステップＳ３０４）。
【００４５】
ファイル読込み検知部１０４からの問い合わせを受けた判定部１０５は、特定拡張子リストから、ファイル読込み検知部１０４から受け取ったインタプリタ識別情報と関連付けられている特定拡張子を取得し、ファイル読込み検知部１０４から受け取ったファイルパス名と照合することで、読込みが要求されたファイルに特定拡張子が付与されているか否かを判定する（ステップＳ３０５）。ここで、読込みが要求されたファイルに特定拡張子が付与されていなければ（ステップＳ３０５：Ｎｏ）、判定部１０５は、読込みが要求されたファイルはプログラムコードではない単なるデータとして扱われるファイル（実行されないファイル）であると判断し、そのファイルの読込み許可を示す判定結果をファイル読込み検知部１０４に返し、ファイル読込み検知部１０４がファイル読込み部２４に対して、ファイルの読込み許可を示す判定結果を通知する（ステップＳ３０６）。
【００４６】
一方、読込みが要求されたファイルに特定拡張子が付与されていなければ（ステップＳ３０５：Ｎｏ）、判定部１０５は、読込みが要求されたファイルはスクリプトファイルであると判断し、そのスクリプトファイルからハッシュ値を生成し（ステップＳ３０７）、スクリプトホワイトリストとのマッチングを行う（ステップＳ３０８）。すなわち、判定部１０５は、ファイル読込み検知部１０４から受け取ったファイルパス名とステップＳ３０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのうちのいずれかに一致するか否かを確認する。
【００４７】
ここで、ファイル読込み検知部１０４から受け取ったファイルパス名とステップＳ３０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれにも一致しない場合（ステップＳ３０８：不一致）、判定部１０５は、そのファイルの読込み禁止を示す判定結果をファイル読込み検知部１０４に返し、ファイル読込み検知部１０４がファイル読込み部２４に対して、ファイルの読込み禁止を示す判定結果を通知する（ステップＳ３０９）。一方、ファイル読込み検知部１０４から受け取ったファイルパス名とステップＳ３０７で生成したハッシュ値との組み合わせが、スクリプトホワイトリストに登録されているファイルパス名とハッシュ値との組み合わせのいずれかに一致する場合（ステップＳ３０８：一致）、判定部１０５は、そのファイルの読込み許可を示す判定結果をファイル読込み検知部１０４に返し、ファイル読込み検知部１０４がファイル読込み部２４に対して、ファイルの読込み許可を示す判定結果を通知する（ステップＳ３０６）。
【００４８】
次に、プロセス終了時の処理について説明する。図６は、プロセス終了時の処理手順の一例を示すフローチャートであり、ＯＳ１２の終了処理部２３からプロセス１３の終了が通知された場合に、管理プロセス１４の終了プロセス制御部１０３により実行される処理手順の一例を示している。
【００４９】
ＯＳ１２の終了処理部２３からプロセス１３の終了が通知されると、管理プロセス１４の終了プロセス制御部１０３は、この通知を受け取る（ステップＳ４０１）。この通知には、終了プロセスのｐｉｄが含まれる。
【００５０】
次に、終了プロセス制御部１０３は、終了処理部２３から受け取った終了プロセスのｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ４０２）。そして、終了プロセスのｐｉｄがランタイム制御リストに登録されていれば（ステップＳ４０２：Ｙｅｓ）、終了プロセス制御部１０３は、そのｐｉｄをランタイム制御リストから削除する（ステップＳ４０３）。一方、終了プロセスのｐｉｄがランタイム制御リストに登録されていない場合は（ステップＳ４０２：Ｎｏ）、そのまま処理を終了する。
【００５１】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態に係る情報処理装置１０は、起動されたプロセスのうち、特定プロセスであるインタプリタのプロセスをランタイム制御リストに登録する起動プロセス制御部１０１と、ランタイム制御リストに登録されているインタプリタのプロセスによるファイルの読込みの要求を検知するファイル読込み検知部１０４と、要求されたファイルの読込みを許可するか否かをスクリプトホワイトリストとのマッチングにより判定する判定部１０５と、判定部１０５の判定結果に従ってファイルの読込みを制御するファイル読込み部２４と、を備えている。したがって、この情報処理装置１０によれば、スクリプト形式のモジュールに対するホワイトリスト型の実行制御を実現することができる。
【００５２】
また、本実施形態に係る情報処理装置１０は、インタプリタが定義する特定拡張子に基づいて、読込みが要求されたファイルがスクリプトファイルか単にデータとして扱われるファイルかを識別し、スクリプト形式のモジュールを格納したスクリプトファイルのみを対象として読込み制御を行うようにしているので、過剰な制御を有効に回避することができる。
【００５３】
（第１実施形態の変形例１）
上述の第１実施形態では、プロセス複製時に親プロセスがランタイム制御リストに登録されていれば子プロセスをランタイム制御リストに追加登録するが、子プロセスのランタイム制御リストへの追加登録を、子プロセスによるファイル読込み時まで遅延するように変更してもよい。
【００５４】
図７は、本変形例の情報処理装置１０の機能的な構成例を示すブロック図である。図３に示した構成例と比較して、ＯＳ１２の複製処理部２２および管理プロセス１４の複製プロセス制御部１０２が省略されている。その代り、ファイル読込み検知部１０４が複製プロセス制御部１０２に相当する機能を持つ。つまり、ファイルの読込みを要求するプロセス１３がランタイム制御リストに登録されたインタプリタの子プロセスである場合に、ファイル読込み検知部１０４が、そのプロセスのｐｉｄをランタイム制御リストに追加登録する処理を行う。
【００５５】
図８は、本変形例におけるファイル読込み時の処理手順の一例を示すフローチャートであり、ＯＳ１２のファイル読込み部２４からファイルの読込みが通知された場合に、管理プロセス１４のファイル読込み検知部１０４および判定部１０５により実行される処理手順の一例を示している。なお、図８のステップＳ５０５からステップＳ５１１までの処理は、図５のステップＳ３０３からステップＳ３０９までの処理と同様であるため、重複した説明を省略する。
【００５６】
ＯＳ１２のファイル読込み部２４からファイルの読込みが通知されると、管理プロセス１４のファイル読込み検知部１０４は、この通知を受け取る（ステップＳ５０１）。この通知には、読込みが要求されたファイルのファイルパス名とファイルの読込みを要求するプロセス１３のｐｉｄのほか、ファイルの読込みを要求するプロセス１３が他のプロセス１３から複製された子プロセスである場合、複製元の親プロセスのｐｉｄも含まれる。
【００５７】
次に、ファイル読込み検知部１０４は、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ５０２）。そして、ファイルの読込みを要求するプロセス１３のｐｉｄがランタイム制御リストに登録されていれなければ（ステップＳ５０２：Ｎｏ）、次に、そのプロセス１３の親プロセスのｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ５０３）。ここで、親プロセスのｐｉｄもランタイム制御リストに登録されていなければ（ステップＳ５０３：Ｎｏ）、ファイル読込み検知部１０４は、実行ファイル形式のアプリケーションによるファイルの読込みであると判断し、ステップＳ５０５に進んでファイルの読込み許可をファイル読込み部２４に通知する。
【００５８】
一方、親プロセスのｐｉｄがランタイム制御リストに登録されていれば（ステップＳ５０３：Ｙｅｓ）、ファイル読込み検知部１０４は、インタプリタが実行しているスクリプト形式のアプリケーションによるファイルの読込みであると判断し、ファイルの読込みを要求するプロセスのｐｉｄをインタプリタ識別情報と関連付けてランタイム制御リストに追加登録し（ステップＳ５０４）、その後、ステップＳ５０６に進んで、読込みが要求されたファイルのファイルパス名とインタプリタ識別情報を判定部１０５に渡し、ファイルの読込みを許可するか否かを判定部１０５に問い合わせる。
【００５９】
以上説明したように、本変形例では、プロセス複製時の処理をファイル読込み時の処理に統合するようにしているので、実行速度のオーバヘッドを軽減する効果が期待できる。
【００６０】
（第１実施形態の変形例２）
上述の第１実施形態では、プロセスの終了時に、終了するプロセスがランタイム制御リストに登録されたインタプリタであれば、そのインタプリタをランタイム制御リストから削除するが、このプロセス終了時の処理をプロセス起動時に一括して行うように変更してもよい。
【００６１】
図９は、本変形例の情報処理装置１０の機能的な構成例を示すブロック図である。図３に示した構成例と比較して、管理プロセス１４の終了プロセス制御部１０３が省略され、その代り、ＯＳ１２に終了プロセス記憶部２５が追加されている。本変形例では、ＯＳ１２の終了処理部２３が、プロセス終了時にプロセス１３の終了を管理プロセス１４に通知する代わりに、終了プロセスのｐｉｄを終了プロセス記憶部２５に一時的に保存する。そして、起動処理部２１が、プロセス起動時に終了プロセス記憶部２５から終了プロセスのｐｉｄを取り出して、この終了プロセスのｐｉｄを起動プロセス制御部１０１に通知する。
【００６２】
図１０は、本変形例におけるプロセス起動時の処理手順の一例を示すフローチャートであり、ＯＳ１２の起動処理部２１からプロセス１３の起動が通知された場合に、管理プロセス１４の起動プロセス制御部１０１により実行される処理手順の一例を示している。なお、図１０のステップＳ６０４からステップＳ６１２までの処理は、図３のステップＳ１０２からステップＳ１１０までの処理と同様であるため、重複した説明を省略する。
【００６３】
ＯＳ１２の起動処理部２１からプロセス１３の起動が通知されると、管理プロセス１４の起動プロセス制御部１０１は、この通知を受け取る（ステップＳ６０１）。この通知には、起動プロセスのファイルパス名、起動プロセスの起動引数、起動プロセスのｐｉｄのほか、起動処理部２１が終了プロセス記憶部２５から取り出した終了プロセスのｐｉｄが含まれる。
【００６４】
次に、起動プロセス制御部１０１は、起動処理部２１から受け取った終了プロセスのｐｉｄがランタイム制御リストに登録されているか否かを判定する（ステップＳ６０２）。そして、終了プロセスのｐｉｄがランタイム制御リストに登録されていれば（ステップＳ６０２：Ｙｅｓ）、起動プロセス制御部１０１は、そのｐｉｄをランタイム制御リストから削除し（ステップＳ６０３）、ステップＳ６０４に進む。一方、終了プロセスのｐｉｄがランタイム制御リストに登録されていない場合は（ステップＳ６０２：Ｎｏ）、そのままステップＳ６０４に進む。
【００６５】
以上説明したように、本変形例では、プロセス終了時の処理をプロセス起動時の処理に統合するようにしているので、実行速度のオーバヘッドを軽減する効果が期待できる。
【００６６】
＜第２実施形態＞
次に、第２実施形態について説明する。第２実施形態は、ホワイトリストとのマッチング結果（ホワイトリストとのマッチングによりプロセス１３の起動やファイルの読込みが許可されたか否か）をキャッシュに保持しておき、繰り返しのマッチング処理を省略することにより、処理負荷の低減を図るものである。
【００６７】
図１１は、第２実施形態に係る情報処理装置１０の機能的な構成例を示すブロック図である。図３に示した第１実施形態の構成例と比較して、図１１では、管理プロセス１４がホワイトリストとのマッチング結果を保持する管理プロセスキャッシュ１１７とファイル書込み制御部１０６を持ち、ＯＳ１２がファイルに対する書込み処理を行うファイル書込み部２６を持つ。
【００６８】
管理プロセスキャッシュ１１７は、例えば、ファイルパス名を基に計算されたハッシュキーと、そのファイルパス名により特定されるファイルとホワイトリストとのマッチング結果と、そのファイルがスクリプトファイルであればさらにそのスクリプトファイルを実行するインタプリタを識別するインタプリタ識別情報とを関連付けて、キャッシュ情報として保持する。ハッシュキーは、ファイルを識別可能な情報から計算できる値であれば内容・形式は問わず、inode番号とデバイス番号の組合せでもよい。マッチング結果については、前回のマッチング結果が許可であるか禁止であるかを識別できる値を保持する。なお、前回のマッチング結果が許可のもののみ、あるいは前回のマッチング結果が禁止のもののみを管理プロセスキャッシュ１１７に保持する構成とする場合は、ファイルパス名を基に計算されたハッシュキーが保持されているか否かによりマッチング結果が許可であったか、あるいはマッチング結果が禁止であったかが分かるので、マッチング結果を示す情報を保持する必要はない。
【００６９】
管理プロセスキャッシュ１１７の置換アルゴリズムは、キャッシュ情報を新しく記録するときに、必要とされない可能性が高いキャッシュ情報を追い出す特徴を持つアルゴリズムであれば内容は問わない。例えば、ＬＲＵ（Least  Recently  Used）、ＭＲＵ（Most  Recently  Used）、ＰＬＲＵ（Pseudo-LRU）、ＬＦＵ（Least  Frequently  Used）、ＡＲＣ（Adaptive  Replacement  Cache）などの置換アルゴリズムを用いてもよい。
【００７０】
ファイル書込み制御部１０６は、ＯＳ１２のファイル書込み部２６からの通知に基づいて、管理プロセスキャッシュ１１７が保持するキャッシュ情報のうち、書込みが要求されたファイルに対応するキャッシュ情報を削除する。すなわち、ファイル書込み制御部１０６は、ファイル書込み部２６から、書込みが要求されたファイルのファイルパス名とファイルの書込みを要求するプロセス１３のｐｉｄを含むファイル書込み通知を受け取ると、ファイルパス名から計算したハッシュキーを基に、管理プロセスキャッシュ１１７に書込みが要求されたファイルに関するキャッシュ情報が保持されているか否かを判定する。そして、書込みが要求されたファイルに関するキャッシュ情報が管理プロセスキャッシュ１１７に保持されていれば、そのキャッシュ情報を削除する。なお、キャッシュ情報に有効／無効を表すステータスフラグを付加し、書込みが要求されたファイルに関するキャッシュ情報のステータスフラグを有効から無効に切り替えるようにしてもよい。この場合、管理プロセスキャッシュ１１７とのマッチング時には、ステータスフラグが有効のキャッシュ情報しか参照しないようにする。書込みが要求されたファイルに関するキャッシュ情報を管理プロセスキャッシュ１１７から削除した後、または、書込みが要求されたファイルに関するキャッシュ情報が管理プロセスキャッシュ１１７に保持されていなかった場合、ファイル書込み制御部１０６は処理の終了をＯＳ１２のファイル書込み部２６に通知する。ファイル書込み部２６は、この通知を受けて、書込みが要求されたファイルに対する書込みを行う。
【００７１】
図１２は、本実施形態におけるプロセス起動時の処理手順の一例を示すフローチャートであり、ＯＳ１２の起動処理部２１からプロセス１３の起動が通知された場合に、管理プロセス１４の起動プロセス制御部１０１により実行される処理手順の一例を示している。なお、図１２のステップＳ７０７からステップＳ７１１までの処理は図３のステップＳ１０２からステップＳ１０６までの処理と同様であり、図１２のステップＳ７１５からステップＳ７１８までの処理は図３のステップＳ１０２からステップＳ１０６までの処理と同様であるため、これらのステップについての詳細な説明は適宜省略する。
【００７２】
本実施形態では、起動プロセス制御部１０１が、起動処理部２１からプロセス起動の通知を受け取ると（ステップＳ７０１）、この通知に含まれる起動プロセスのファイルパス名を基にハッシュキーを生成する（ステップＳ７０２）。そして、起動プロセス制御部１０１は、管理プロセスキャッシュ１１７を参照し、ステップＳ７０２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されているか否かを確認する（ステップＳ７０３）。
【００７３】
ここで、ステップＳ７０２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されている場合は（ステップＳ７０３：Ｙｅｓ）、起動プロセス制御部１０１は、そのキャッシュ情報がインタプリタのファイルに関するものか否かを判定する（ステップＳ７０４）。そして、そのキャッシュ情報がインタプリタのファイルに関するものでない、つまり実行ファイルに関するものである場合（ステップＳ７０４：Ｎｏ）、そのキャッシュ情報に含まれる前回のマッチング結果が禁止を示すものであれば（ステップＳ７０５：Ｎｏ）、ステップＳ７１０に進んで起動禁止を示す判定結果を起動処理部２１に通知し、前回のマッチング結果が許可を示すものであれば（ステップＳ７０５：Ｙｅｓ）、ステップＳ７１８に進んで起動許可を示す判定結果を起動処理部２１に通知する。
【００７４】
一方、ステップＳ７０２で生成したハッシュキーを持つキャッシュ情報がインタプリタのファイルに関するものである場合は（ステップＳ７０４：Ｙｅｓ）、そのキャッシュ情報に含まれる前回のマッチング結果が禁止を示すものであれば（ステップＳ７０６：Ｎｏ）、ステップＳ７１０に進んで起動禁止を示す判定結果を起動処理部２１に通知する。一方、前回のマッチング結果が許可を示すものであれば（ステップＳ７０６：Ｙｅｓ）、ステップＳ７１１に進んで、そのインタプリタの起動引数により指定されるスクリプトファイルのファイルパス名を取得した後、そのスクリプトファイルのファイルパス名を基にハッシュキーを生成する（ステップＳ７１２）。そして、起動プロセス制御部１０１は、ステップＳ７１２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されているか否かを確認する（ステップＳ７１３）。
【００７５】
ここで、ステップＳ７１２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されている場合（ステップＳ７１３：Ｙｅｓ）、そのキャッシュ情報に含まれる前回のマッチング結果が禁止を示すものであれば（ステップＳ７１４：Ｎｏ）、ステップＳ７１０に進んで起動禁止を示す判定結果を起動処理部２１に通知し、前回のマッチング結果が許可を示すものであれば（ステップＳ７１４：Ｙｅｓ）、ステップＳ７１８に進んで起動許可を示す判定結果を起動処理部２１に通知する。
【００７６】
一方、ステップＳ７１２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されていない場合は（ステップＳ７１３：Ｎｏ）、ステップＳ７１５に進んで、以降、第１実施形態と同様にスクリプトホワイトリストとのマッチングおよび起動処理部２１への判定結果の通知を行う。この場合、起動プロセス制御部１０１は、スクリプトホワイトリストとのマッチング結果を、ステップＳ７１２で生成したハッシュキーとインタプリタ識別とに関連付けて、キャッシュ情報として管理プロセスキャッシュ１１７に記録する。
【００７７】
また、上述のステップＳ７０３において、ステップＳ７０２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されていないと判定した場合は（ステップＳ７０３：Ｎｏ）、ステップＳ７０７に進んで、以降、第１実施形態と同様にインタプリタホワイトリストおよび実行ファイルホワイトリストとのマッチング、インタプリタホワイトリストに一致する場合はさらにスクリプトホワイトリストとのマッチングを行い、マッチング結果に応じた判定結果を起動処理部２１に通知する。また、スクリプトホワイトリストとのマッチング結果が許可の場合は、起動プロセスのｐｉｄをランタイム制御リストに登録する。ただし、本実施形態では、スクリプトホワイトリストとのマッチングを行う前に、上述したように、スクリプトファイルに関するキャッシュ情報が管理プロセスキャッシュ１１７に保持されているか否かを確認し、保持されている場合は前回のマッチング結果に応じた判定結果を起動処理部２１に通知する。
【００７８】
また、この場合も起動プロセス制御部１０１は、インタプリタホワイトリストや実行ファイルホワイトリストとのマッチング結果を、ステップＳ７０２で生成したハッシュキーと関連付けて、キャッシュ情報として管理プロセスキャッシュ１１７に記録する。さらに、スクリプトホワイトリストとのマッチングを行った場合は、スクリプトホワイトリストとのマッチング結果を、ステップＳ７１２で生成したハッシュキーとインタプリタ識別とに関連付けて、キャッシュ情報として管理プロセスキャッシュ１１７に記録する。
【００７９】
図１３は、本実施形態におけるファイル読込み時の処理手順の一例を示すフローチャートであり、ＯＳ１２のファイル読込み部２４からファイルの読込みが通知された場合に、管理プロセス１４のファイル読込み検知部１０４および判定部１０５により実行される処理手順の一例を示している。なお、図１３のステップＳ８０１からステップＳ８０６までの処理は図５のステップＳ３０１からステップＳ３０６までの処理と同様であり、図１３のステップＳ８１０からステップＳ８１２までの処理は図５のステップＳ３０７からステップＳ３０９までの処理と同様であるため、これらのステップについての詳細な説明は適宜省略する。
【００８０】
本実施形態では、読込みが要求されたファイルに特定拡張子が付与されている場合（ステップＳ８０５：Ｙｅｓ）、判定部１０５が、そのファイルをスクリプトファイルであると判断して、まず、そのファイルのファイルパス名を基にハッシュキーを生成する（ステップＳ８０７）。そして、判定部１０５は、管理プロセスキャッシュ１１７を参照し、ステップＳ８０７で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されているか否かを確認する（ステップＳ８０８）。
【００８１】
ここで、ステップＳ８０７で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されている場合（ステップＳ８０８：Ｙｅｓ）、判定部１０５は、そのキャッシュ情報に含まれる前回のマッチング結果が許可を示すものか否かを確認する（ステップＳ８０９）。そして、前回のマッチング結果が許可を示すものであれば（ステップＳ８０９：Ｙｅｓ）、判定部１０５は、そのファイルの読込み許可を示す判定結果をファイル読込み検知部１０４に返し、ファイル読込み検知部１０４がファイル読込み部２４に対して、ファイルの読込み許可を示す判定結果を通知する（ステップＳ８０６）。一方、前回のマッチング結果が禁止を示すものであれば（ステップＳ８０９：Ｎｏ）、判定部１０５は、そのファイルの読込み禁止を示す判定結果をファイル読込み検知部１０４に返し、ファイル読込み検知部１０４がファイル読込み部２４に対して、ファイルの読込み禁止を示す判定結果を通知する（ステップＳ８１２）。
【００８２】
また、ステップＳ８０７で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されていない場合は（ステップＳ８０８：Ｎｏ）、ステップＳ８１０に進んで、以降、第１実施形態と同様にスクリプトホワイトリストとのマッチングおよびファイル読込み部２４への判定結果の通知を行う。この場合、判定部１０５は、ステップＳ８０７で生成したハッシュキーと、スクリプトホワイトリストとのマッチング結果と、インタプリタ識別とを関連付けて、キャッシュ情報として管理プロセスキャッシュ１１７に記録する。
【００８３】
図１４は、本実施形態におけるファイル書込み時の処理手順の一例を示すフローチャートであり、ＯＳ１２のファイル書込み部２６からファイルの書込みが通知された場合に、管理プロセス１４のファイル書込み制御部１０６により実行される処理手順の一例を示している。
【００８４】
ＯＳ１２のファイル書込み部２６からファイルの書込みが通知されると、管理プロセス１４のファイル書込み制御部１０６は、この通知を受け取る（ステップＳ９０１）。この通知には、書込みの対象となるファイルのファイルパス名とファイルの書込みを要求するプロセス１３のｐｉｄが含まれる。
【００８５】
次に、ファイル書込み制御部１０６は、ファイル書込み部２６から受け取ったファイルパス名を基にハッシュキーを生成し（ステップＳ９０２）、生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されているか否かを確認する（ステップＳ９０３）。そして、ステップＳ９０２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されていれば（ステップＳ９０３：Ｙｅｓ）、ファイル書込み制御部１０６は、そのキャッシュ情報を管理プロセスキャッシュ１１７から削除する（ステップＳ９０４）。一方、ステップＳ９０２で生成したハッシュキーを持つキャッシュ情報が管理プロセスキャッシュ１１７に保持されていなければ（ステップＳ９０３：Ｎｏ）、そのまま処理を終了する。
【００８６】
以上説明したように、本実施形態に係る情報処理装置１０によれば、前回のホワイトリストとのマッチング結果を管理プロセスキャッシュ１１７に保持し、同じファイルに繰り返しアクセスする場合は管理プロセスキャッシュ１１７を参照して、前回のマッチング結果に応じた実行制御を行うようにしている。したがって、繰り返しのマッチング処理を省略することができ、処理負荷の低減を図ることができる。
【００８７】
（第２実施形態の変形例）
上述の第２実施形態では、ホワイトリストとのマッチング結果を保持するキャッシュを管理プロセス１４側に設けたが、このようなキャッシュをＯＳ１２側に設けるように構成してもよい。
【００８８】
図１５は、本変形例の情報処理装置１０の機能的な構成例を示すブロック図である。図３に示した第１実施形態の構成例と比較して、ファイルに対する書込み処理を行うファイル書込み部２６と、ホワイトリストとのマッチング結果を保持するＯＳキャッシュ２７とがＯＳ１２に追加されている。ＯＳキャッシュ２７は、上述の管理プロセスキャッシュ１１７と同様に、ファイルパス名を基に計算されたハッシュキーと、そのファイルパス名により特定されるファイルとホワイトリストとのマッチング結果と、そのファイルがスクリプトファイルであればさらにそのスクリプトファイルを実行するインタプリタを識別するインタプリタ識別情報とを関連付けて、キャッシュ情報として保持する。
【００８９】
図１６は、本変形例におけるプロセス起動時のＯＳ１２側の処理手順の一例を示すフローチャートであり、プロセス１３の起動が要求された場合に、ＯＳ１２の起動処理部２１により実行される処理手順の一例を示している。
【００９０】
ＯＳ１２の起動処理部２１は、プロセス１３の起動が要求されると、まず起動プロセスのファイルパス名を基にハッシュキーを生成し（ステップＳ１００１）、生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されているか否かを確認する（ステップＳ１００２）。そして、ステップＳ１００１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていれば（ステップＳ１００２：Ｙｅｓ）、起動処理部２１は、そのキャッシュ情報に含まれる前回のマッチング結果が許可を示すものか否かを確認する（ステップＳ１００３）。そして、前回のマッチング結果が禁止を示すものであれば（ステップＳ１００３：Ｎｏ）、起動処理部２１は、要求されたプロセス１３の起動を禁止して所定のエラー処理を行う（ステップＳ１００４）。
【００９１】
一方、キャッシュ情報に含まれる前回のマッチング結果が許可を示すものであれば（ステップＳ１００３：Ｙｅｓ）、起動処理部２１は、次に、キャッシュ情報にインタプリタ識別情報が含まれているか否かを確認することにより、起動プロセスがインタプリタか否かを判定する（ステップＳ１００５）。そして、起動プロセスがインタプリタであれば（ステップＳ１００５：Ｙｅｓ）、そのインタプリタが実行するスクリプトファイルの起動判定のために、管理プロセス１４の起動プロセス制御部１０１に対して、インタプリタ制御処理を通知する（ステップＳ１００６）。一方、起動プロセスがインタプリタでない場合は（ステップＳ１００５：Ｎｏ）、起動処理部２１は、プロセス１３の起動処理を行う（ステップＳ１００７）。
【００９２】
起動プロセス制御部１０１に対してインタプリタ制御処理を通知した場合、起動処理部２１は、起動プロセス制御部１０１から通知される判定結果に応じて、プロセス１３の起動処理を行う。すなわち、起動プロセス制御部１０１から起動許可を示す判定結果が通知されると、起動処理部２１は、起動が要求されたプロセス１３の起動処理を行う。一方、起動プロセス制御部１０１から起動禁止を示す判定結果が通知されると、起動処理部２１は、起動が要求されたプロセス１３の起動を禁止し、所定のエラー処理を行う。
【００９３】
また、ステップＳ１００１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていない場合（ステップＳ１００２：Ｎｏ）、起動処理部２１は、管理プロセス１４の起動プロセス制御部１０１に対して、プロセス１３の起動を通知する（ステップＳ１００８）。この場合、起動処理部２１は、起動プロセス制御部１０１から通知される判定結果に応じて、プロセス１３の起動処理とＯＳキャッシュ２７へのキャッシュ情報の記録を行う。すなわち、起動プロセス制御部１０１から起動許可を示す判定結果が通知されると、起動処理部２１は、ステップＳ１００１で生成したハッシュキーと、許可を示すマッチング結果と、起動プロセスがインタプリタであれば管理プロセス１４から受け取ったインタプリタ識別情報とを関連付けて、キャッシュ情報としてＯＳキャッシュ２７に記録するとともに、起動が要求されたプロセス１３の起動処理を行う。一方、起動プロセス制御部１０１から起動禁止を示す判定結果が通知されると、起動処理部２１は、ステップＳ１００１で生成したハッシュキーと、禁止を示すマッチング結果と、起動プロセスがインタプリタであれば管理プロセス１４から受け取ったインタプリタ識別情報とを関連付けて、キャッシュ情報としてＯＳキャッシュ２７に記録するとともに、起動が要求されたプロセス１３の起動を禁止し、所定のエラー処理を行う。
【００９４】
図１７は、本変形例におけるプロセス起動時の管理プロセス１４側の処理手順の一例を示すフローチャートであり、ＯＳ１２の起動処理部２１からインタプリタ制御処理またはプロセス１３の起動が通知された場合に、ＯＳ１２の起動処理部２１により実行される処理手順の一例を示している。なお、図１７のステップＳ１１０３からステップＳ１１１１までの処理は、図３のステップＳ１０２からステップＳ１１０までの処理と同様であるため、これらのステップについての詳細な説明は適宜省略する。
【００９５】
ＯＳ１２の起動処理部２１からインタプリタ制御処理またはプロセス１３の起動が通知されると、管理プロセス１４の起動プロセス制御部１０１は、この通知を受け取る（ステップＳ１１０１）。そして、受け取った通知がインタプリタ制御処理の通知であれば（ステップＳ１１０２：Ｙｅｓ）、ステップＳ１１０７に進んで、以降、第１実施形態と同様にスクリプトホワイトリストとのマッチングおよび起動処理部２１への判定結果の通知を行う。なお、スクリプトホワイトリストのマッチング処理を高速化するために、管理プロセス１４に、スクリプトホワイトリストとのマッチング結果を保持するキャッシュ（上述の管理プロセスキャッシュ１１７の一部）を管理プロセス１４側に設けるようにしてもよい。
【００９６】
一方、起動処理部２１から受け取った通知がプロセス１３の起動の通知であれば（ステップＳ１１０２：Ｎｏ）、ステップＳ１１０３に進んで、以降、第１実施形態と同様にインタプリタホワイトリストおよび実行ファイルホワイトリストとのマッチング、インタプリタホワイトリストに一致する場合はさらにスクリプトホワイトリストとのマッチングを行い、マッチング結果に応じた判定結果を起動処理部２１に通知する。また、スクリプトホワイトリストとのマッチング結果が許可の場合は、起動プロセスのｐｉｄをランタイム制御リストに登録する。
【００９７】
図１８は、本変形例におけるファイル読込み時のＯＳ１２側の処理手順の一例を示すフローチャートであり、プロセス１３によりファイルの読込みが要求された場合に、ＯＳ１２のファイル読込み部２４により実行される処理手順の一例を示している。
【００９８】
ＯＳ１２のファイル読込み部２４は、プロセス１３によりファイルの読込みが要求されると、まず、読込みが要求されたファイルのファイルパス名を基にハッシュキーを生成し（ステップＳ１２０１）、生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されているか否かを確認する（ステップＳ１２０２）。そして、ステップＳ１２０１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていれば（ステップＳ１２０２：Ｙｅｓ）、ファイル読込み部２４は、そのキャッシュ情報に含まれる前回のマッチング結果が許可を示すものか否かを確認する（ステップＳ１２０３）。そして、ファイル読込み部２４は、前回のマッチング結果が許可を示すものであれば（ステップＳ１２０３：Ｙｅｓ）、読込みが要求されたファイルの読込み処理を行い（ステップＳ１２０４）、前回のマッチング結果が禁止を示すものであれば（ステップＳ１２０３：Ｎｏ）、読込みが要求されたファイルの読込みを禁止する（ステップＳ１２０５）。
【００９９】
また、ステップＳ１２０１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていない場合は（ステップＳ１２０２：Ｎｏ）、ファイル読込み部２４は、管理プロセス１４のファイル読込み検知部１０４に対し、ファイルの読込みを通知する（ステップＳ１２０６）。この場合、ファイル読込み部２４は、ファイル読込み検知部１０４からファイルの読込み許可が通知されると、読込みが要求されたファイルの読込み処理を行う。また、ファイル読込み検知部１０４から判定部１０５の判定結果が通知されると、通知された判定結果に応じて、ファイルの読込み処理とＯＳキャッシュ２７へのキャッシュ情報の記録を行う。すなわち、判定部１０５の判定結果がファイルの読込み許可を示すものであれば、ファイル読込み部２４は、ステップＳ１２０１で生成したハッシュキーと、許可を示すマッチング結果と、管理プロセス１４から受け取ったインタプリタ識別情報とを関連付けて、キャッシュ情報としてＯＳキャッシュ２７に記録するとともに、読込みが要求されたファイルの読込み処理を行う。一方、判定部１０５の判定結果がファイルの読込み禁止を示すものであれば、ファイル読込み部２４は、ステップＳ１２０１で生成したハッシュキーと、禁止を示すマッチング結果と、管理プロセス１４から受け取ったインタプリタ識別情報とを関連付けて、キャッシュ情報としてＯＳキャッシュ２７に記録するとともに、読込みが要求されたファイルの読込みを禁止する。
【０１００】
図１９は、本変形例におけるファイル書込み時のＯＳ１２側の処理手順の一例を示すフローチャートであり、プロセス１３によりファイルの書込みが要求された場合に、ＯＳ１２のファイル書込み部２６により実行される処理手順の一例を示している。
【０１０１】
ＯＳ１２のファイル書込み部２６は、プロセス１３によりファイルの書込みが要求されると、まず、書込みが要求されたファイルのファイルパス名を基にハッシュキーを生成し（ステップＳ１３０１）、生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されているか否かを確認する（ステップＳ１３０２）。そして、ステップＳ１３０１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていれば（ステップＳ１３０２：Ｙｅｓ）、ファイル書込み部２６は、そのキャッシュ情報をＯＳキャッシュ２７から削除し（ステップＳ１３０３）、要求されたファイルの書込み処理を行う。一方、ステップＳ１３０１で生成したハッシュキーを持つキャッシュ情報がＯＳキャッシュ２７に保持されていなければ（ステップＳ１３０２：Ｎｏ）、そのまま要求されたファイルの書込み処理を行う。
【０１０２】
以上説明したように、本変形例では、ＯＳ１２側にＯＳキャッシュ２７を設け、同じファイルに繰り返しアクセスする場合はＯＳキャッシュ２７を参照して、前回のマッチング結果に応じた実行制御を行うようにしているので、管理プロセス１４側に管理プロセスキャッシュ１１７を設けた場合と同様に、繰り返しのマッチング処理を省略することができ、処理負荷の低減を図ることができる。
【０１０３】
＜補足説明＞
上述した各実施形態の情報処理装置１０におけるＯＳ１２や管理プロセス１４の機能は、例えば、ハードウェア１１として情報処理装置１０に搭載されたプロセッサにより実行されるソフトウェアなどのプログラムとして実現することができる。このとき、上述した各実施形態の情報処理装置１０は、上記のプログラムをあらかじめインストールすることでＯＳ１２や管理プロセス１４の機能を実現してもよいし、記録媒体に記録あるいはネットワークを介して配布された上記プログラムを適宜インストールすることでＯＳ１２や管理プロセス１４の機能を実現してもよい。
【０１０４】
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０５】
１０  情報処理装置
１１  ハードウェア
１２  ＯＳ
１３  プロセス
１４  管理プロセス
２１  起動処理部
２２  複製処理部
２３  終了処理部
２４  ファイル読込み部
２５  終了プロセス記憶部
２６  ファイル書込み部
２７  ＯＳキャッシュ
１０１  起動プロセス制御部
１０２  複製プロセス制御部
１０３  終了プロセス制御部
１０４  ファイル読込み検知部
１０５  判定部
１０６  ファイル書込み制御部
１１１  実行ファイルホワイトリスト記憶部
１１２  インタプリタホワイトリスト記憶部
１１３  スクリプトホワイトリスト記憶部
１１４  引数解析情報記憶部
１１５  ランタイム制御リスト記憶部
１１６  特定拡張子リスト記憶部
１１７  管理プロセスキャッシュ
【図１】
2019159830.tif 000003
【図２】
2019159830.tif 000004
【図３】
2019159830.tif 000005
【図４】
2019159830.tif 000006
【図５】
2019159830.tif 000007
【図６】
2019159830.tif 000008
【図７】
2019159830.tif 000009
【図８】
2019159830.tif 000010
【図９】
2019159830.tif 000011
【図１０】
2019159830.tif 000012
【図１１】
2019159830.tif 000013
【図１２】
2019159830.tif 000014
【図１３】
2019159830.tif 000015
【図１４】
2019159830.tif 000016
【図１５】
2019159830.tif 000017
【図１６】
2019159830.tif 000018
【図１７】
2019159830.tif 000019
【図１８】
2019159830.tif 000020
【図１９】
2019159830.tif 000021