(57)【要約】      （修正有）【課題】ホワイトリスト型の実行制御において、ソフトウェアの実行開始に伴う遅延の発生を有効に抑制することができる情報処理装置、情報処理方法およびプログラムを提供する。【解決手段】情報処理装置１０は、事前検証部１１と、実行制御部１４と、を備える。事前検証部１１は、ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストＬ１に登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストＬ２を生成する。実行制御部１４は、ソフトウェアの実行開始が検出されたときに、該ソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されていれば、該ソフトウェアの実行を許可する。【選択図】図１
2020046829.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストに登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストを生成する事前検証部と、
ソフトウェアの実行開始が検出されたときに、該ソフトウェアが実行許可ソフトウェアとして前記実行許可リストに登録されていれば、該ソフトウェアの実行を許可する実行制御部と、
を備える情報処理装置。
【請求項２】
ソフトウェアの書き換えを検知する書き換え検知部と、
書き換えが検知されたソフトウェアが実行許可ソフトウェアとして前記実行許可リストに登録されている場合に、前記実行許可リストにおける該ソフトウェアの実行許可ソフトウェアとしての登録を無効化する無効化部と、をさらに備える
請求項１に記載の情報処理装置。
【請求項３】
前記無効化部は、書き換えが検知されたソフトウェアのエントリを前記実行許可リストから削除することにより、前記実行許可リストにおける該ソフトウェアの実行許可ソフトウェアとしての登録を無効化する
請求項２に記載の情報処理装置。
【請求項４】
前記実行許可リストの各エントリは第１のフラグを備え、
前記事前検証部は、前記実行許可リストのうち、検証に成功したソフトウェアのエントリに付与された前記第１のフラグを有効とし、
前記実行制御部は、前記実行許可リストのうち、実行開始が検出されたソフトウェアのエントリに付与された前記第１のフラグが有効である場合に、該ソフトウェアの実行を許可する
請求項２に記載の情報処理装置。
【請求項５】
前記無効化部は、前記実行許可リストのうち、書き換えが検知されたソフトウェアのエントリに付与された前記第１のフラグを無効とする
請求項４に記載の情報処理装置。
【請求項６】
前記事前検証部は、検証に失敗したソフトウェアを前記実行許可リストに登録し、該ソフトウェアのエントリに付与された前記第１のフラグを無効とする
請求項５に記載の情報処理装置。
【請求項７】
前記実行許可リストに実行許可ソフトウェアとして登録されていないソフトウェアの実行開始が検出された場合は、前記実行制御部が該ソフトウェアの完全性を検証し、検証に成功した場合に該ソフトウェアの実行を許可するとともに、該ソフトウェアを実行許可ソフトウェアとして前記実行許可リストに登録する
請求項４乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
前記実行制御部は、前記第１のフラグの値に基づいて、実行開始が検出されたソフトウェアの完全性の検証を行うか否かを判断する
請求項７に記載の情報処理装置。
【請求項９】
前記事前検証部は、前記ホワイトリストに登録されたソフトウェアのうち、予め定められた条件に該当するソフトウェアを対象として完全性の検証を行う
請求項１乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記ホワイトリストの各エントリは第２のフラグを備え、
前記予め定められた条件は、前記ホワイトリストのうち、前記第２のフラグが有効とされているエントリに登録されているという条件である
請求項９に記載の情報処理装置。
【請求項１１】
前記ソフトウェアの実行開始に依存しないタイミングは、前記事前検証部の起動時である
請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記ソフトウェアの実行開始に依存しないタイミングは、前記ソフトウェアとは異なる特定のソフトウェアの起動時である
請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１３】
前記ソフトウェアの実行開始に依存しないタイミングは、特定の信号を前記事前検証部が受信したときである
請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１４】
前記事前検証部による処理が行われている間に第１のソフトウェアの実行開始が検出された場合は、前記事前検証部が処理を中断し、前記実行制御部が前記第１のソフトウェアの完全性を検証して、検証に成功した場合に前記第１のソフトウェアの実行を許可する
請求項１乃至１３のいずれか一項に記載の情報処理装置。
【請求項１５】
情報処理装置により実行される情報処理方法であって、
ソフトウェアの実行開始に依存しない所定のタイミングで、ホワイトリストに登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストを生成するステップと、
ソフトウェアの実行開始が検出されたときに、該ソフトウェアが実行許可ソフトウェアとして前記実行許可リストに登録されていれば、該ソフトウェアの実行を許可するステップと、
を含む情報処理方法。
【請求項１６】
コンピュータに、
ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストに登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストを生成する事前検証部の機能と、
ソフトウェアの実行開始が検出されたときに、該ソフトウェアが実行許可ソフトウェアとして前記実行許可リストに登録されていれば、該ソフトウェアの実行を許可する実行制御部の機能と、
を実現させるためのプログラム。
【請求項１７】
ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストに登録されたソフトウェアのハッシュ値を計算し、ハッシュ値リストを生成する事前計算部と、
ソフトウェアの実行開始が検出されたときに、該ソフトウェアのハッシュ値が前記ハッシュ値リストに登録されており、かつ、前記ハッシュ値リストに登録されているハッシュ値が前記ホワイトリストと一致する場合に、該ソフトウェアの実行を許可する実行制御部と、
を備える情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
例えば、重要インフラの制御システムに対する攻撃事例の増加などに伴い、システム内で使用するソフトウェアを制限し、システムの安全性を保つことが求められている。システム内で使用するソフトウェアを制限する技術として、予め定められたソフトウェアの実行しか許可しないホワイトリスト型の実行制御技術がある。ホワイトリストは、システム内で使用するソフトウェアを予め登録したリストであり、実行が許可されたソフトウェアのファイル情報とそのソフトウェアのハッシュ値の組が格納されている。システム稼働時には、ソフトウェアの実行開始時にそのソフトウェアのハッシュ値を計算し、ホワイトリストに登録されたソフトウェアのハッシュ値（参照値）と照合することで完全性の検証を行い、検証に成功したソフトウェアのみ実行を許可することで、ソフトウェアの使用制限を実現している。ソフトウェアの完全性を検証する方法としては、ソフトウェアのハッシュ値を用いる方法以外にも、署名検証を行う方法なども提案されている。
【０００３】
従来のホワイトリスト型の実行制御技術では、ソフトウェアの実行開始時にそのソフトウェアのハッシュ値または署名を用いて完全性の検証を行うため、ソフトウェアの実行が開始されるたびに検証のための計算が発生する。このため、稼働中のシステムに処理の遅延が発生しやすく、改善が求められている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２５９１６０号公報
【特許文献２】特開２０１４−４８８６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ホワイトリスト型の実行制御において、ソフトウェアの実行開始に伴う遅延の発生を有効に抑制することができる情報処理装置、情報処理方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、事前検証部と、実行制御部と、を備える。事前検証部は、ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストに登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストを生成する。実行制御部は、ソフトウェアの実行開始が検出されたときに、該ソフトウェアが実行許可ソフトウェアとして前記実行許可リストに登録されていれば、該ソフトウェアの実行を許可する。
【図面の簡単な説明】
【０００７】
【図１】情報処理装置の機能的な構成例を示すブロック図。
【図２】ホワイトリストの一例を示す図。
【図３】実行許可リストの一例を示す図。
【図４】事前検証部の処理手順の一例を示すフローチャート。
【図５】無効化部の処理手順の一例を示すフローチャート。
【図６】実行制御部の処理手順の一例を示すフローチャート。
【図７】ホワイトリストの一例を示す図。
【図８】要検証リストの一例を示す図。
【図９】事前検証部の処理手順の一例を示すフローチャート。
【図１０】実行制御部の処理手順の一例を示すフローチャート。
【図１１】実行許可リストの一例を示すフローチャート。
【図１２】事前検証部の処理手順の一例を示すフローチャート。
【図１３】無効化部の処理手順の一例を示すフローチャート。
【図１４】実行制御部の処理手順の一例を示すフローチャート。
【図１５】情報処理装置のハードウェア構成例を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、添付図面を参照しながら、実施形態に係る情報処理装置、情報処理方法およびプログラムについて詳細に説明する。
【０００９】
＜実施形態の概要＞
本実施形態の情報処理装置は、様々な目的に応じて設計された各種のシステム内でホワイトリスト型の実行制御を行う機能モジュールとして実現される。従来のホワイトリスト型の実行制御では、ホワイトリストに登録されたソフトウェの実行開始時に、そのソフトウェアに対する完全性の検証を行い、検証に成功した場合にそのソフトウェアの実行を許可する。このため、稼働中のシステムに処理の遅延が発生しやすく、遅延が許されないシステムへの適用が困難であった。
【００１０】
これに対し、本実施形態の情報処理装置は、ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストに登録されたソフトウェアの完全性を検証する。そして、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストを生成し、システムの稼働中はこの実行許可リストを保持しておく。その後、ソフトウェアの実行開始が検出されると実行許可リストを参照し、そのソフトウェアが実行許可ソフトウェアとして実行許可リストに登録されていれば、そのソフトウェアの実行を許可する。
【００１１】
このように、本実施形態の情報処理装置は、ホワイトリスト型の実行制御において処理負荷が高く、遅延発生の要因となっていたソフトウェアに対する完全性の検証を事前に行っておき、ソフトウェアの実行開始時には実行許可リストを参照するのみでそのソフトウェアの実行可否を判断できるようにしている。したがって、ソフトウェアの実行開始に伴う遅延の発生を有効に抑制しつつ、ホワイトリスト型の実行制御によるシステムの安全性確保を実現することができる。
【００１２】
なお、本実施形態におけるソフトウェアは、主に、実行ファイルの形式で格納されるプログラムを想定するが、プログラムが参照するデータなどのファイルであってもよい。プログラムが参照するデータなどのファイルは、そのファイルの参照が、ソフトウェアの実行に相当する。
【００１３】
また、本実施形態におけるホワイトリストは、システム内での使用が許可されたソフトウェアを予め登録したリストであり、各エントリに、それらのソフトウェアのファイル情報とハッシュ値の組が格納されている。ここでファイル情報は、そのソフトウェアのファイルを識別可能な情報であり、例えば、そのファイルにアクセスする経路を示すファイルパスである。以下では、ソフトウェアのファイル情報がファイルパスであるものとして説明するが、ファイルを識別可能な他の情報、例えば、ｉｎｏｄｅ番号とデバイス番号の組み合わせなどを用いてもよい。なお、ホワイトリストや実行許可リストへのソフトウェアの登録とは、これらのリストのエントリに少なくともソフトウェアのファイル情報を格納することをいう。
【００１４】
＜第１実施形態＞
図１は、第１実施形態に係る情報処理装置１０の機能的な構成例を示すブロック図である。本実施形態の情報処理装置１０は、図１に示すように、事前検証部１１と、書き換え検知部１２と、無効化部１３と、実行制御部１４とを備える。
【００１５】
事前検証部１１は、検証実行イベントが検出されると、ホワイトリストＬ１に登録されたソフトウェアに対する完全性の検証を行う。そして、事前検証部１１は、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストＬ２を生成する。
【００１６】
ここで、検証実行イベントは、ホワイトリストに登録されたソフトウェアに対する完全性の検証を行うタイミングを決めるイベントであり、予め定められる。例えば、本実施形態の情報処理装置１０あるいは情報処理装置１０を含むシステムの起動開始の処理や、特定のソフトウェアの起動開始、外部からの特定の信号の受信などを、検証実行イベントとして定めることができる。特定のソフトウェアは、例えばシステム管理者が任意のタイミングで実行する検証用ソフトウェアなどである。また、システムのメンテナンスモードなどの非定常動作への移行、ハードウェアリソースの使用量が低い（処理負荷が低い）ことが検知されたこと、ハードウェアリソースの使用量が低いことが想定される時間帯になったことなどを、検証実行イベントに定めてもよい。また、システム管理者が任意のタイミングで実行できる管理者コマンドを定めておき、この管理者コマンドの発行を検証実行イベントに定めてもよい。これらの検証実行イベントが検出されるタイミング、つまり事前検証部１１がホワイトリストＬ１に登録されたソフトウェアに対する完全性の検証を行うタイミングは、システム稼働中のソフトウェアの実行開始に依存しないタイミングである。
【００１７】
図２は、ホワイトリストＬ１の一例を示す図である。ホワイトリストＬ１には、例えば図２に示すように、システム内での使用が許可されたソフトウェアごとに、そのソフトウェアのファイルパスとハッシュ値の組が格納される。ハッシュ値は事前に計算された値であり、ソフトウェアの完全性を検証する際の参照値として利用される。ホワイトリストＬ１は、例えばファイルとしてストレージ装置に格納され、事前検証部１１により読み出される。
【００１８】
事前検証部１１は、ホワイトリストＬ１に登録されたソフトウェアのファイルパスに基づいてファイルを取得し、取得したファイルからハッシュ値を計算する。そして、計算したハッシュ値がホワイトリストＬ１のハッシュ値と一致する場合（つまり、完全性の検証に成功した場合）に、そのソフトウェアを実行許可ソフトウェアとして、実行許可リストＬ２に登録する。
【００１９】
図３は、実行許可リストＬ２の一例を示す図である。実行許可リストＬ２には、例えば図３に示すように、事前検証部１１による完全性の検証に成功したソフトウェアのファイルパスが格納される。本実施形態では、実行許可リストＬ２にファイルパスが格納されたソフトウェアが、実行許可ソフトウェアとして実行許可リストＬ２に登録されたソフトウェアである。実行許可リストＬ２は、例えばＲＡＭなどに保持される。
【００２０】
書き換え検知部１２は、ソフトウェアの書き換えを検知する。ソフトウェアの書き換えは、例えば、ファイルへの書き込みなどを監視することによって検知できる。
【００２１】
無効化部１３は、書き換え検知部１２によってソフトウェアの書き換えが検知された場合に、そのソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されているか否かを確認する。そして、書き換えが検知されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されている場合に、そのソフトウェアの実行許可ソフトウェアとしての登録を無効化する。
【００２２】
実行許可ソフトウェアとしての登録の無効化は、例えば、実行許可リストＬ２からそのソフトウェアのファイルパスが格納されたエントリを削除すればよい。また、実行許可リストＬ２の各エントリに登録の有効／無効を示すフラグを付加しておき、そのフラグを有効値（例えば「１」）から無効値（例えば「０」）に書き換えることにより、実行許可ソフトウェアとしての登録を無効化するようにしてもよい。
【００２３】
また、実行許可ソフトウェアとしての登録の無効化にフラグを用いるとき、事前検証部１１による完全性の検証に失敗したソフトウェアもフラグを無効値に設定した上で実行許可リストＬ２に登録するようにしてもよい。さらに、事前検証部１１は、検証実行イベントの検出時にホワイトリストＬ１の全エントリについてフラグを無効値に設定した上で実行許可リストＬ２に登録するようにしてもよい。また、ホワイトリストＬ１の各エントリに無効値に設定したフラグを追加し、事前検証部１１は検証実行イベント検出時にホワイトリストＬ１を複製することで実行許可リストＬ２を作成してもよい。
【００２４】
実行許可ソフトウェアとしての登録の無効化に用いるフラグには、ソフトウェアの実行を検証せずに実行禁止を行うことを表す値、ソフトウェアの検証に成功した場合でもフラグを有効値としないことを表す値を設定可能にしてもよい。また、無効化部１３は、ソフトウェアの書き換えを検知した場合、書き換えが検知されたソフトウェアのエントリに付与されたフラグを、ソフトウェアの実行を検証せずに実行禁止を行うことを表す値、ソフトウェアの検証に成功した場合でもフラグを有効値としないことを表す値に変更してもよい。
【００２５】
実行制御部１４は、ソフトウェアの実行開始が検出されたときに、そのソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されているか否かに基づいて、そのソフトウェアの実行を制御する。例えば、実行制御部１４は、実行開始が検出されたソフトウェアのファイルパスを抽出し、そのファイルパスが実行許可リストＬ２に格納されたいずれかのファイルパスと一致する場合（上述のフラグが付加されている場合は、さらにフラグの値が有効値の場合）、実行開始が検出されたソフトウェアの実行を許可する。一方、実行開始が検出されたソフトウェアから抽出されたファイルパスが実行許可リストＬ２内のいずれのファイルパスとも一致しない場合は、そのソフトウェアの実行を拒否する。実行開始が検出されたソフトウェアの実行を拒否する場合、実行制御部１４は、異常の発生を示すアラートを出力することが望ましい。
【００２６】
なお、実行開始が検出されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されていない場合や、前記フラグが無効値に設定されて登録されている場合、実行制御部１４は、事前検証部１１と同様の方法によりそのソフトウェアに対する完全性の検証を行い、検証に成功した場合にそのソフトウェアの実行を許可するようにしてもよい。また、このとき、検証に成功したソフトウェアを実行許可ソフトウェアとして実行許可リストＬ２に登録してもよい。
【００２７】
また、実行開始が検出されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されていない場合、実行制御部１４は、異常の発生を示すアラートを出力し、システムの機能の一部に制限を加えた異常モードに移行した上で、そのソフトウェアの実行を許可するようにしてもよい。また、このとき、システム管理者による所定操作に応じて異常モードを通常モードに復帰させるようにしてもよいし、システム管理者による所定操作を条件として、実行開始が検出されたソフトウェアの実行を許可するようにしてもよい。
【００２８】
以下では、図４乃至図６のフローチャートを参照しながら、本実施形態の情報処理装置１０による動作の具体例を説明する。
【００２９】
まず、図４を参照して、事前検証部１１による処理について説明する。図４は、事前検証部１１の処理手順の一例を示すフローチャートである。この図４のフローチャートで示す一連の処理は、上述の検証実行イベントが検出されるたびに実行される。
【００３０】
検証実行イベントが検出されると、事前検証部１１は、まず、実行許可ソフトウェアが何も登録されていない空の実行許可リストＬ２を用意する（ステップＳ１０１）。
【００３１】
次に、事前検証部１１は、ホワイトリストＬ１に登録されているソフトウェアのファイルパスを参照して、そのソフトウェアのファイルを取得する（ステップＳ１０２）。そして、事前検証部１１は、ステップＳ１０２で取得したファイルをもとにそのソフトウェアのハッシュ値を計算する（ステップＳ１０３）。
【００３２】
次に、事前検証部１１は、ステップＳ１０３で計算したハッシュ値をホワイトリストＬ１のハッシュ値と照合し、両者が一致しているか否かを判定する（ステップＳ１０４）。ここで、ステップＳ１０３で計算したハッシュ値がホワイトリストＬ１のハッシュ値と一致する場合（ステップＳ１０４：Ｙｅｓ）、事前検証部１１は、そのソフトウェアのファイルパスを実行許可リストＬ２に追加し（ステップＳ１０５）、次のステップＳ１０６に進む。一方、ステップＳ１０３で計算したハッシュ値がホワイトリストＬ１のハッシュ値と一致しない場合は（ステップＳ１０４：Ｎｏ）、そのままステップＳ１０６に進む。
【００３３】
次に、事前検証部１１は、ホワイトリストＬ１に登録されているソフトウェアが他にあるかどうかを確認する（ステップＳ１０６）。ここで、ホワイトリストＬ１に登録されているソフトウェアが他にある場合は（ステップＳ１０６：Ｙｅｓ）、ステップＳ１０２に戻って以降の処理が繰り返される。そして、ホワイトリストＬ１に登録されているソフトウェアの全てに対してステップＳ１０２以降の処理を行うと（ステップＳ１０６：Ｎｏ）、一連の処理が終了する。
【００３４】
次に、図５を参照して、無効化部１３による処理について説明する。図５は、無効化部１３の処理手順の一例を示すフローチャートである。この図５のフローチャートで示す処理は、書き換え検知部１２によってソフトウェアの書き換えが検知されるたびに実行される。
【００３５】
書き換え検知部１２によりソフトウェアの書き換えが検知されると、無効化部１３は、まず、書き換えが検知されたソフトウェアのファイルパスを抽出する（ステップＳ２０１）。
【００３６】
次に、無効化部１３は、実行許可リストＬ２を参照し、ステップＳ２０１で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ２０２）。そして、ステップＳ２０１で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致する場合（ステップＳ２０２：Ｙｅｓ）、一致するファイルパスを実行許可リストＬ２から削除する（ステップＳ２０３）。これにより、書き換えが検知されたソフトウェアの実行許可ソフトウェアとしての登録が無効化される。
【００３７】
次に、図６を参照して、実行制御部１４による処理について説明する。図６は、実行制御部１４の処理手順の一例を示すフローチャートである。この図６のフローチャートで示す処理は、ソフトウェアの実行開始が検出されるたびに実行される。
【００３８】
ソフトウェアの実行開始が検出されると、実行制御部１４は、まず、そのソフトウェアの実行を一時停止し（ステップＳ３０１）、そのソフトウェアのファイルパスを抽出する（ステップＳ３０２）。
【００３９】
次に、実行制御部１４は、実行許可リストＬ２を参照し、ステップＳ３０２で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ３０３）。そして、ステップＳ３０２で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致する場合（ステップＳ３０３：Ｙｅｓ）、実行制御部１４は、そのソフトウェアの実行を許可し、ステップＳ３０１で一時停止したソフトウェアの実行を再開させる（ステップＳ３０４）。一方、ステップＳ３０２で抽出したファイルパスが実行許可リストＬ２内のファイルパスと一致しない場合（ステップＳ３０４：Ｎｏ）、実行制御部１４は、そのソフトウェアの実行を拒否し（ステップＳ３０５）、例えばアラートの出力などを行う。なお、前述のとおり、ステップＳ３０５は、一時停止したソフトウェアに対する完全性の検証を行い、検証に成功した場合にそのソフトウェアの実行を許可する処理などの別の処理に置き換えられてもよい。
【００４０】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態の情報処理装置１０は、検証実行イベントが検出されたタイミング、つまりソフトウェアの実行開始に依存しないタイミングで、ホワイトリストＬ１に登録されたソフトウェアの完全性を検証し、検証に成功したソフトウェアを実行許可ソフトウェアとして実行許可リストＬ２に登録する。そして、ソフトウェアの実行開始が検出されたときは、実行許可リストＬ２を参照し、実行開始が検出されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されていれば、そのソフトウェアの実行を許可する。このように、本実施形態の情報処理装置１０は、処理負荷が大きいソフトウェアに対する完全性の検証をソフトウェアの実行開始に依存しないタイミングで行っておき、ソフトウェアの実行開始時には実行許可リストＬ２を参照するのみでソフトウェアの実行を許可するか否かを判断できるようにしている。したがって、ソフトウェアの実行開始に伴う遅延の発生を有効に抑制しつつ、ホワイトリスト型の実行制御によるシステムの安全性確保を実現することができる。
【００４１】
また、本実施形態の情報処理装置１０は、書き換えが検知されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されている場合は、そのソフトウェアの実行許可ソフトウェアとしての登録を無効化するようにしているので、ホワイトリストＬ１に登録されたソフトウェアに対して不正な書き換えなどが発生した場合に、そのソフトウェアの実行が許可されてしまうことを有効に防止することができる。
【００４２】
＜第２実施形態＞
次に、第２実施形態について説明する。上述の第１実施形態では、ホワイトリストＬ１に登録された全てのソフトウェアに対して事前検証部１１が完全性の検証を行っていたが、本実施形態では、ホワイトリストＬ１’に登録された一部のソフトウェアに対してのみ、事前検証部１１による完全性の検証を行う。そして、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証部１１による完全性の検証が行われないソフトウェアについては、そのソフトウェアの実行開始が検出されたときに、実行制御部１４が、事前検証部１１と同様の方法により完全性の検証を行う。
【００４３】
なお、情報処理装置１０の基本的な構成は第１実施形態と同様である。また、書き換え検知部１２および無効化部１３の処理は第１実施形態と同様である。以下では、第１実施形態と重複する説明は適宜省略し、本実施形態に特徴的な点についてのみ説明する。
【００４４】
図７は、本実施形態におけるホワイトリストＬ１’の一例を示す図である。この図７に示すホワイトリストＬ１’は、図２に示したホワイトリストＬ１と比較して、各エントリに事前検証フラグが付加されている点が異なる。事前検証フラグは、事前検証部１１による完全性の検証を行うか否かを示すフラグであり、有効値（例えば「１」）であれば事前検証部１１による完全性の検証を行い、無効値（例えば「０」）であれば事前検証部１１による完全性の検証を行わないことを示している。
【００４５】
なお、ホワイトリストＬ１’は、事前検証フラグが有効値のホワイトリストと事前検証フラグが無効値のホワイトリストとに分割してもよい。この場合、分割したホワイトリストにより、事前検証フラグの有効値・無効値を識別できる。このため、これらの分割されたホワイトリストは、事前検証フラグを持たなくてもよい。さらに、事前検証フラグは、ホワイトリストＬ１’ではなく、各エントリに記載されたソフトウェアが持つｉｎｏｄｅ拡張属性などのファイルメタ情報に格納してもよい。
【００４６】
事前検証部１１による完全性の検証を行うソフトウェアは、例えばシステム管理者などが任意に決定することができる。例えば、ホワイトリストＬ１’に登録されたソフトウェアのうち、実行頻度が高いソフトウェア、ファイルサイズが大きいソフトウェア、緊急性の高い処理を行うソフトウェア（実行時の遅延を抑制することが望まれるソフトウェア）などを、事前検証部１１による完全性の検証を行うソフトウェアとして決定するとよい。また、事前検証部１１は事前検証フラグではなく、取得したソフトウェアの実行頻度やファイルサイズなどに基づいて動的に事前検証を行うか決定してもよい。
【００４７】
本実施形態の事前検証部１１は、検証実行イベントが検出されると、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証フラグが有効値とされているソフトウェアを対象として、上述の第１実施形態と同様の方法により完全性の検証を行う。そして、第１実施形態と同様に、検証に成功したソフトウェアを実行許可ソフトウェアとして登録した実行許可リストＬ２（図３参照）を生成する。また、本実施形態の事前検証部１１は、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証フラグが無効値とされているソフトウェアを登録した要検証リストＬ３を生成する。
【００４８】
図８は、要検証リストＬ３の一例を示す図である。要検証リストＬ３には、例えば図８に示すように、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証部１１による完全性の検証が行われていないソフトウェア（事前検証フラグが無効値のソフトウェア）のファイルパスとハッシュ値の組が格納される。要検証リストＬ３は、例えばＲＡＭなどに保持される。
【００４９】
本実施形態の実行制御部１４は、ソフトウェアの実行開始が検出されたときに、第１実施形態と同様に、実行許可リストＬ２を参照し、実行開始が検出されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２に登録されていれば、そのソフトウェアの実行を許可する。実行開始が検出されたソフトウェアが実行許可リストＬ２に登録されていない場合、本実施形態の実行制御部１４は、次に要検証リストＬ３を参照し、実行開始が検出されたソフトウェアが要検証リストＬ３に登録されているかを確認する。そして、実行開始が検出されたソフトウェアが要検証リストＬ３に登録されていれば、事前検証部１１と同様の方法によりそのソフトウェアに対する完全性の検証を行い、検証に合格した場合にそのソフトウェアを実行許可ソフトウェアとして実行許可リストＬ２に登録するとともに、そのソフトウェアの実行を許可する。
【００５０】
また、本実施形態の実行制御部１４は、実行開始が検出されたソフトウェアが要検証リストＬ３に登録されていない場合や、要検証リストＬ３に登録されているが完全性の検証に失敗した場合は、そのソフトウェアの実行を拒否する。また、上述の第１実施形態と同様に、ソフトウェアの実行を拒否する代わりに、異常の発生を示すアラートを出力し、システムの機能の一部に制限を加えた異常モードに移行した上で、そのソフトウェアの実行を許可するようにしてもよい。また、このとき、システム管理者による所定操作に応じて異常モードを通常モードに復帰させるようにしてもよいし、システム管理者による所定操作を条件として、実行開始が検出されたソフトウェアの実行を許可するようにしてもよい。
【００５１】
なお、本実施形態では、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証フラグが無効値とされているソフトウェアを要検証リストＬ３に登録するようにしているが、事前検証部１１による完全性の検証に失敗したソフトウェアも要検証リストＬ３に登録するようにしてもよい。この場合、事前検証部１１による完全性の検証に失敗したソフトウェアの実行開始が検出されたときに、実行制御部１４が、そのソフトウェアに対する完全性の検証を再度行って、検証に成功した場合はそのソフトウェアの実行を許可する。
【００５２】
以下では、図９および図１０のフローチャートを参照しながら、本実施形態の情報処理装置１０による動作の具体例を説明する。
【００５３】
まず、図９を参照して、本実施形態の事前検証部１１による処理について説明する。図９は、本実施形態の事前検証部１１の処理手順の一例を示すフローチャートである。この図９のフローチャートで示す一連の処理は、上述の検証実行イベントが検出されるたびに実行される。
【００５４】
検証実行イベントが検出されると、事前検証部１１は、まず、実行許可ソフトウェアが何も登録されていない空の実行許可リストＬ２と、空の要検証リストＬ３とを用意する（ステップＳ４０１）。
【００５５】
次に、事前検証部１１は、ホワイトリストＬ１’のエントリを１つ選び、そのエントリに付加されている事前検証フラグが有効値か否かを確認する（ステップＳ４０２）。ここで、事前検証フラグが有効値であれば（ステップＳ４０２：Ｙｅｓ）、事前検証部１１は、そのエントリに登録されているソフトウェアのファイルパスを参照して、ソフトウェアのファイルを取得する（ステップＳ４０３）。そして、事前検証部１１は、ステップＳ４０３で取得したファイルをもとにそのソフトウェアのハッシュ値を計算する（ステップＳ４０４）。
【００５６】
次に、事前検証部１１は、ステップＳ４０４で計算したハッシュ値をホワイトリストＬ１’のハッシュ値と照合し、両者が一致しているか否かを判定する（ステップＳ４０５）。ここで、ステップＳ４０４で計算したハッシュ値がホワイトリストＬ１’のハッシュ値と一致する場合（ステップＳ４０５：Ｙｅｓ）、事前検証部１１は、そのソフトウェアのファイルパスを実行許可リストＬ２に追加し（ステップＳ４０５）、ステップＳ４０８に進む。一方、ステップＳ４０４で計算したハッシュ値がホワイトリストＬ１’のハッシュ値と一致しない場合は（ステップＳ４０５：Ｎｏ）、そのままステップＳ４０８に進む。
【００５７】
また、ステップＳ４０２で選んだエントリに付加されている事前検証フラグが無効値であれば（ステップＳ４０２：Ｎｏ）、事前検証部１１は、そのエントリに登録されているソフトウェアのファイルパスとハッシュ値の組を要検証リストＬ３に追加して（ステップ４０７）、ステップＳ４０８に進む。
【００５８】
次に、事前検証部１１は、ホワイトリストＬ１’に登録されているソフトウェアが他にあるかどうかを確認する（ステップＳ４０８）。ここで、ホワイトリストＬ１’に登録されているソフトウェアが他にある場合は（ステップＳ４０８：Ｙｅｓ）、ステップＳ４０２に戻って以降の処理が繰り返される。そして、ホワイトリストＬ１’に登録されているソフトウェアの全てに対してステップＳ４０２以降の処理を行うと（ステップＳ４０８：Ｎｏ）、一連の処理が終了する。
【００５９】
次に、図１０を参照して、本実施形態の実行制御部１４による処理について説明する。図１０は、本実施形態の実行制御部１４の処理手順の一例を示すフローチャートである。この図１０のフローチャートで示す一連の処理は、ソフトウェアの実行開始が検出されるたびに実行される。
【００６０】
ソフトウェアの実行開始が検出されると、実行制御部１４は、まず、そのソフトウェアの実行を一時停止し（ステップＳ５０１）、そのソフトウェアのファイルパスを抽出する（ステップＳ５０２）。
【００６１】
次に、実行制御部１４は、実行許可リストＬ２を参照し、ステップＳ５０２で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ５０３）。そして、ステップＳ５０２で抽出したファイルパスが実行許可リストＬ２内のいずれかのファイルパスと一致する場合（ステップＳ５０３：Ｙｅｓ）、実行制御部１４は、そのソフトウェアの実行を許可し、ステップＳ５０１で一時停止したソフトウェアの実行を再開させる（ステップＳ５０４）。
【００６２】
一方、ステップＳ５０２で抽出したファイルパスが実行許可リストＬ２内のファイルパスと一致しない場合（ステップＳ５０４：Ｎｏ）、実行制御部１４は、次に要検証リストＬ３を参照し、ステップＳ５０２で抽出したファイルパスが要検証リストＬ３内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ５０５）。そして、ステップＳ５０２で抽出したファイルパスが要検証リストＬ３内のいずれかのファイルパスと一致する場合（ステップＳ５０５：Ｙｅｓ）、実行制御部１４は、実行開始が検出されたソフトウェアのハッシュ値を計算する（ステップＳ５０６）。
【００６３】
次に、実行制御部１４は、ステップＳ５０６で計算したハッシュ値を要検証リストＬ３のハッシュ値と照合し、両者が一致しているか否かを判定する（ステップＳ５０７）。ここで、ステップＳ５０６で計算したハッシュ値が要検証リストＬ３のハッシュ値と一致する場合（ステップＳ５０７：Ｙｅｓ）、実行制御部１４は、ステップＳ５０２で抽出したファイルパスを実行許可リストＬ２に追加した後（ステップＳ５０８）、ステップＳ５０４に進み、そのソフトウェアの実行を許可して、ステップＳ５０１で一時停止したソフトウェアの実行を再開させる。
【００６４】
一方、ステップＳ５０６で計算したハッシュ値が要検証リストＬ３のハッシュ値と一致しない場合は（ステップＳ５０７：Ｎｏ）、実行制御部１４は、そのソフトウェアの実行を拒否し（ステップＳ５０９）、例えばアラートの出力などを行う。また、ステップＳ５０２で抽出したファイルパスが実行許可リストＬ２内のファイルパスと一致せず、要検証リストＬ３内のファイルパスとも一致しない場合（ステップＳ５０５：Ｎｏ）も同様に、事前検証部１１は、そのソフトウェアの実行を拒否し、例えばアラートの出力などを行う。
【００６５】
以上説明したように、本実施形態の情報処理装置１０は、ホワイトリストＬ１’に登録されたソフトウェアのうち、例えば実行頻度が高いソフトウェア、ファイルサイズが大きいソフトウェア、緊急性の高い処理を行うソフトウェアなど、予め定めた一部のソフトウェアのみを対象として、事前検証部１１による完全性の検証を行うようにしている。したがって、検証実行イベントが検出されたときの処理負荷を低減し、実行許可リストＬ２を短時間で生成することができる。
【００６６】
なお、以上の説明では、事前検証部１１による検証の対象となるソフトウェアを、ホワイトリストＬ１’の各エントリに付加された要検証フラグの値により識別するものとしたが、これに限らない。例えば、ホワイトリストＬ１’を、事前検証部１１による検証の対象となるソフトウェアが登録された第１リストと、事前検証部１１による検証の対象とならないソフトウェアが登録された第２リストとに分け、事前検証部１１は、検証実行イベントが検出されたときに、第１リストに登録されているソフトウェアを対象として完全性の検証を行うようにしてもよい。この場合、要検証リストＬ３は、第２リストをそのまま複製することで容易に生成できる。
【００６７】
＜第３実施形態＞
次に、第３実施形態について説明する。本実施形態では、上述の第２実施形態と同様にホワイトリストＬ１’に登録された一部のソフトウェアに対してのみ、事前検証部１１による完全性の検証を行うが、事前検証部１１による完全性の検証を行っていないソフトウェアを、実行許可リストＬ２に付加されたフラグの値により識別する点が異なる。なお、情報処理装置１０の基本的な構成は第１実施形態および第２実施形態と同様である。以下では、第１実施形態や第２実施形態と重複する説明は適宜省略し、本実施形態に特徴的な点についてのみ説明する。
【００６８】
図１１は、本実施形態における実行許可リストＬ２’の一例を示す図である。この図１１に示す実行許可リストＬ２’には、ホワイトリストＬ１に登録されたソフトウェアごとに、そのソフトウェアのファイルパスとハッシュ値の組と検証済みフラグの値が格納される。検証済みフラグは、完全性の検証が完了しているか否かを示すフラグであり、有効値（例えば「１」）であれば完全性の検証が完了（検証に合格）していることを示し、無効値（例えば「０」）であれば完全性の検証が完了していないことを示している。本実施形態では、実行許可リストＬ２’内のソフトウェアのうち、検証済みフラグの値が有効値のソフトウェアが、実行許可ソフトウェアとして登録されたソフトウェアである。
【００６９】
図１１に示す実行許可リストＬ２’は、図７に示したホワイトリストＬ１’と同じ形式であるため、ホワイトリストＬ１’を複製してフラグを操作することにより、実行許可リストＬ２’を生成することができる。すなわち、ホワイトリストＬ１’を複製し、ホワイトリストＬ１’における事前検証フラグを検証済みフラグに置き換える（事前検証フラグを検証済みフラグとみなす）ことにより、初期状態の実行許可リストＬ２’を生成する。そして、事前検証部１１による完全性の検証に失敗したソフトウェアに対応する検証済みフラグの値を有効値から無効値に書き換えることで、事前検証部１１による処理を反映した実行許可リストＬ２’を生成できる。
【００７０】
本実施形態の事前検証部１１は、検証実行イベントが検出されると、まず、ホワイトリストＬ１’を複製し、ホワイトリストＬ１’における事前検証フラグを検証済みフラグに置き換えることにより、初期状態の実行許可リストＬ２’を生成する。その後、事前検証部１１は、ホワイトリストＬ１’に登録されたソフトウェアのうち、事前検証フラグが有効値とされているソフトウェアを対象として、上述の第１実施形態と同様の方法により完全性の検証を行う。そして、初期状態の実行許可リストＬ２’内の検証済みフラグを有効値から無効値に書き換えることにより、図１１に示した実行許可リストＬ２’を生成する。
【００７１】
本実施形態の無効化部１３は、書き換え検知部１２によってソフトウェアの書き換えが検知された場合に、そのソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２’に登録されたソフトウェア、つまり、検証済みフラグの値が有効値のソフトウェアか否かを確認する。そして、書き換えが検知されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２’に登録されている場合に、そのソフトウェアの検証済みフラグの値を有効値から無効値に書き換えることにより、実行許可ソフトウェアとしての登録を無効化する。
【００７２】
本実施形態の実行制御部１４は、ソフトウェアの実行開始が検出されたときに、実行許可リストＬ２’を参照し、実行開始が検出されたソフトウェアが実行許可ソフトウェアとして実行許可リストＬ２’に登録されていれば、つまり、実行開始が検出されたソフトウェアが実行許可リストＬ２’内に存在し、かつ、検証済みフラグの値が有効値であれば、そのソフトウェアの実行を許可する。また、実行制御部１４は、実行開始が検出されたソフトウェアが実行許可リストＬ２’内に存在するが、検証済みフラグの値が無効値の場合は、事前検証部１１と同様の方法によりそのソフトウェアに対する完全性の検証を行い、検証に合格した場合に、検証済みフラグの値を無効値から有効値に書き換えるとともに、そのソフトウェアの実行を許可する。
【００７３】
また、本実施形態の実行制御部１４は、実行開始が検出されたソフトウェアが実行許可リストＬ２’内に存在しない場合や、実行許可リストＬ２’内に存在に存在するが検証済みフラグの値が無効値であるために完全性の検証を行った結果、検証に失敗した場合は、そのソフトウェアの実行を拒否する。また、上述の第１実施形態と同様に、ソフトウェアの実行を拒否する代わりに、異常の発生を示すアラートを出力し、システムの機能の一部に制限を加えた異常モードに移行した上で、そのソフトウェアの実行を許可するようにしてもよい。また、このとき、システム管理者による所定操作に応じて異常モードを通常モードに復帰させるようにしてもよいし、システム管理者による所定操作を条件として、実行開始が検出されたソフトウェアの実行を許可するようにしてもよい。
【００７４】
以下では、図１２乃至図１４のフローチャートを参照しながら、本実施形態の情報処理装置１０による動作の具体例を説明する。
【００７５】
まず、図１２を参照して、本実施形態の事前検証部１１による処理について説明する。図１２は、本実施形態の事前検証部１１の処理手順の一例を示すフローチャートである。この図１２のフローチャートで示す一連の処理は、上述の検証実行イベントが検出されるたびに実行される。
【００７６】
検証実行イベントが検出されると、事前検証部１１は、まず、ホワイトリストＬ１’を複製し、ホワイトリストＬ１’における事前検証フラグを検証済みフラグに置き換えることにより、初期状態の実行許可リストＬ２’を生成する（ステップＳ６０１）。
【００７７】
次に、事前検証部１１は、ホワイトリストＬ１’のエントリを１つ選び、そのエントリに付加されている事前検証フラグが有効値か否かを確認する（ステップＳ６０２）。ここで、事前検証フラグが有効値であれば（ステップＳ６０２：Ｙｅｓ）、事前検証部１１は、そのエントリに登録されているソフトウェアのファイルパスを参照して、ソフトウェアのファイルを取得する（ステップＳ６０３）。そして、事前検証部１１は、ステップＳ６０３で取得したファイルをもとにそのソフトウェアのハッシュ値を計算する（ステップＳ６０４）。
【００７８】
次に、事前検証部１１は、ステップＳ６０４で計算したハッシュ値をホワイトリストＬ１’のハッシュ値と照合し、両者が一致しているか否かを判定する（ステップＳ６０５）。ここで、ステップＳ６０４で計算したハッシュ値がホワイトリストＬ１’のハッシュ値と一致しない場合（ステップＳ６０５：Ｎｏ）、事前検証部１１は、実行許可リストＬ２’における対応するエントリの検証済みフラグを有効値から無効値に書き換えて（ステップＳ６０６）、ステップＳ６０７に進む。一方、ステップＳ６０４で計算したハッシュ値がホワイトリストＬ１’のハッシュ値と一致する場合は（ステップＳ６０５：Ｙｅｓ）、そのままステップＳ６０７に進む。
【００７９】
次に、事前検証部１１は、ホワイトリストＬ１’に登録されているソフトウェアが他にあるかどうかを確認する（ステップＳ６０７）。ここで、ホワイトリストＬ１’に登録されているソフトウェアが他にある場合は（ステップＳ６０７：Ｙｅｓ）、ステップＳ６０２に戻って以降の処理が繰り返される。そして、ホワイトリストＬ１’に登録されているソフトウェアの全てに対してステップＳ６０２以降の処理を行うと（ステップＳ６０７：Ｎｏ）、一連の処理が終了する。
【００８０】
次に、図１３を参照して、本実施形態の無効化部１３による処理について説明する。図１３は、無効化部１３の処理手順の一例を示すフローチャートである。この図１３のフローチャートで示す処理は、書き換え検知部１２によってソフトウェアの書き換えが検知されるたびに実行される。
【００８１】
書き換え検知部１２によりソフトウェアの書き換えが検知されると、無効化部１３は、まず、書き換えが検知されたソフトウェアのファイルパスを抽出する（ステップＳ７０１）。
【００８２】
次に、無効化部１３は、実行許可リストＬ２’を参照し、ステップＳ７０１で抽出したファイルパスが実行許可リストＬ２’内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ７０２）。そして、ステップＳ７０１で抽出したファイルパスが実行許可リストＬ２’内のいずれかのファイルパスと一致する場合（ステップＳ７０２：Ｙｅｓ）、無効化部１３は、そのファイルパスが格納されたエントリの検証済みフラグが有効値か否かを確認し（ステップＳ７０３）、検証済みフラグが有効値であれば（ステップＳ７０３：Ｙｅｓ）、検証済みフラグを有効値から無効値に書き換える（ステップＳ７０４）。これにより、書き換えが検知されたソフトウェアの実行許可ソフトウェアとしての登録が無効化される。
【００８３】
次に、図１４を参照して、本実施形態の実行制御部１４による処理について説明する。図１４は、本実施形態の実行制御部１４の処理手順の一例を示すフローチャートである。この図１４のフローチャートで示す一連の処理は、ソフトウェアの実行開始が検出されるたびに実行される。
【００８４】
ソフトウェアの実行開始が検出されると、実行制御部１４は、まず、そのソフトウェアの実行を一時停止し（ステップＳ８０１）、そのソフトウェアのファイルパスを抽出する（ステップＳ８０２）。
【００８５】
次に、実行制御部１４は、実行許可リストＬ２’を参照し、ステップＳ８０２で抽出したファイルパスが実行許可リストＬ２’内のいずれかのファイルパスと一致するか否かを判定する（ステップＳ８０３）。そして、ステップＳ８０２で抽出したファイルパスが実行許可リストＬ２’内のいずれかのファイルパスと一致する場合（ステップＳ８０３：Ｙｅｓ）、実行制御部１４は、そのファイルパスが格納されたエントリの検証済みフラグが有効値か否かを確認し（ステップＳ８０４）、検証済みフラグが有効値であれば（ステップＳ８０４：Ｙｅｓ）、そのソフトウェアの実行を許可し、ステップＳ８０１で一時停止したソフトウェアの実行を再開させる（ステップＳ８０５）。
【００８６】
一方、検証済みフラグが無効値の場合は（ステップＳ８０４：Ｎｏ）、実行制御部１４は、実行開始が検出されたソフトウェアのハッシュ値を計算する（ステップＳ８０６）。そして、実行制御部１４は、ステップＳ８０６で計算したハッシュ値を実行許可リストＬ２’のハッシュ値と照合し、両者が一致しているか否かを判定する（ステップＳ８０７）。ここで、ステップＳ８０６で計算したハッシュ値が実行許可リストＬ２’のハッシュ値と一致する場合（ステップＳ８０７：Ｙｅｓ）、実行制御部１４は、そのソフトウェアに対応するエントリの検証済みフラグを無効値から有効値に書き換えた後（ステップＳ８０８）、ステップＳ８０５に進み、そのソフトウェアの実行を許可して、ステップＳ８０１で一時停止したソフトウェアの実行を再開させる。
【００８７】
一方、ステップＳ８０６で計算したハッシュ値が実行許可リストＬ２’のハッシュ値と一致しない場合は（ステップＳ８０７：Ｎｏ）、実行制御部１４は、そのソフトウェアの実行を拒否し（ステップＳ８０９）、例えばアラートの出力などを行う。また、ステップＳ８０２で抽出したファイルパスが実行許可リストＬ２’内のファイルパスと一致しない場合（ステップＳ８０３：Ｎｏ）も同様に、実行制御部１４は、そのソフトウェアの実行を拒否し、例えばアラートの出力などを行う。
【００８８】
以上説明したように、本実施形態の情報処理装置１０は、ホワイトリストＬ１’を複製してフラグを操作することにより実行許可リストＬ２’を生成し、実行許可リストＬ２’のフラグの値により、事前検証部１１による完全性の検証を行っていないソフトウェアを識別するようにしている。したがって、実行許可リストＬ２’の生成をより簡便に行うことができるとともに、事前検証部１１による完全性の検証を行っていないソフトウェアの識別もより簡便に行うことができる。
【００８９】
なお、以上の説明では、実行許可リストＬ２’の各エントリに付加された検証済みフラグが有効値と無効値の２値を取るものとしたが、有効値と無効値以外に実行不可値を定義してもよい。そして、事前検証部１１による完全性の検証に失敗したソフトウェア、実行制御部１４による完全性の検証に失敗したソフトウェア、無効化部１３により実行許可ソフトウェアとしての登録を無効化するソフトウェアの少なくともいずれかについて、検証済みフラグの値を実行不可値とし、検証済みフラグが実行不可値のソフトウェアは実行制御部１４が実行を許可しない構成としてもよい。
【００９０】
この場合、ホワイトリストＬ１’の事前検証フラグに対して余剰ビットを含めて２ビットを割当てておくことで、上述の例と同様に、ホワイトリストＬ１’を複製して事前検証フラグを検証済みフラグに置き換えることで、初期状態の実行許可リストＬ２’を生成することができる。
【００９１】
＜変形例１＞
上述の各実施形態は、検証実行イベントが検出された場合に、ホワイトリストＬ１（Ｌ１’）に登録された少なくとも一部のソフトウェアに対して完全性の検証を行い、検証に合格したソフトウェアを実行許可ソフトウェアとして実行許可リストＬ２（Ｌ２’）に登録しておくことで、ソフトウェアの実行開始時にそのソフトウェアの実行可否を判断する処理負荷を低減させている。ここで、ソフトウェアの完全性を検証する処理においては、ソフトウェアのハッシュ値を計算する処理の負荷が特に高く、ハッシュ値の照合はさほど負荷がかからない。したがって、検証実行イベントが検出された場合に、つまり、ソフトウェアの実行開始に依存しないタイミングで、ホワイトリストＬ１（Ｌ１’）に登録された少なくとも一部のソフトウェアに対するハッシュ値の計算のみを行って、計算したハッシュ値を保持ハッシュ値リストを生成しておき、ソフトウェアの実行開始時には、そのソフトウェアに対応して保持されたハッシュ値（事前に計算されたハッシュ値リストのハッシュ値）をホワイトリストＬ１（Ｌ１’）のハッシュ値と照合し、両者が一致する場合にそのソフトウェアの実行を許可する構成としてもよい。
【００９２】
＜変形例２＞
上述の各実施形態は、検証実行イベントが検出された場合に、ホワイトリストＬ１（Ｌ１’）に登録された少なくとも一部のソフトウェアに対して完全性の検証を行い、検証に合格したソフトウェアを実行許可ソフトウェアとして実行許可リストＬ２（Ｌ２’）に登録しておくことで、ソフトウェアの実行開始時にそのソフトウェアの実行可否を判断する処理負荷を低減させている。ここで、検証実行イベントが検知された後、事前検証部１１が実行許可リストＬ２（Ｌ２’）を作成中に何らかのソフトウェアの実行開始が検出された場合、実行開始が検出されたソフトウェアに対する実行制御を優先してもよい。
【００９３】
例えば、事前検証部１１および実行制御部１４が参照可能な情報として、新たに事前検査情報を設ける。これは事前検証部１１による事前検証中は有効値、検証中でない場合は無効値を取るフラグであり、事前検証部１１が検証実行イベントを検出した際に有効値に設定し、事前検証終了後や事前検証部１１の起動時には無効値に設定するものとする。ソフトウェアの実行開始が検出された場合、実行制御部１４は、事前検査情報を参照することで現在の状態が事前検証部１１による検証中であるかどうかを判定し、検証中である場合は事前検証部１１の検証処理を中断した上で、実行許可リストＬ２（Ｌ２’）の登録状態に依らず、実行ファイルのハッシュ値計算およびホワイトリストＬ１(Ｌ１’)(第３実施形態３の場合は実行許可リストＬ２’)を参照したハッシュ値の照合に基づく実行制御を行い、その後、事前検証部１１での検証を再開させることにより、実行開始が検出されたソフトウェアの実行制御を優先することができる。
【００９４】
＜補足説明＞
上述の各実施形態の情報処理装置１０は、例えば、一般的なコンピュータを構成するハードウェアと、コンピュータで実行されるプログラム（ソフトウェア）との協働により実現することができる。上述の各実施形態で説明した情報処理装置１０の機能は、例えば、コンピュータが、ＲＯＭ（Read  Only  Memory）などの不揮発メモリに予めファームウェアとして格納されたプログラムを実行することによって実現することができる。
【００９５】
図１５は、情報処理装置１０のハードウェア構成例を示すブロック図である。情報処理装置１０は、例えば図１５に示すように、ＣＰＵ（Central  Processing  Unit）やＧＰＵ（Graphics  Processing  Unit）などのプロセッサ回路１０１と、ＲＡＭ（Random  Access  Memory）やＲＯＭなどのメモリ１０２と、ＨＤＤ（Hard  Disk  Drive）やＳＤＤ（Solid  State  Drive）などのストレージデバイス１０３と、入力デバイス１０６やディスプレイ１０７などの周辺機器を接続するための入出力Ｉ／Ｆ１０４と、外部機器と通信を行う通信Ｉ／Ｆ１０５と、を備えた一般的なコンピュータ（計算機システム）としてのハードウェア構成を採用することができる。そして、例えば、プロセッサ回路１０１がメモリ１０２を利用してファームウェアのプログラムを実行することにより、上述の事前検証部１１、書き換え検知部１２、無効化部１３および実行制御部１４の各部の機能を実現することができる。また、ホワイトリストＬ１（Ｌ１’）は、例えばストレージデバイス１０３に格納し、実行許可リストＬ２（Ｌ２’）や要検証リストＬ３は、例えばメモリ１０２（ＲＡＭ）上に保持する構成とすることができる。
【００９６】
すなわち、上記の各部は、例えば、ファームウェアを構成するプログラムとしてＲＯＭなどに格納されてコンピュータに実装され、コンピュータが備える１以上のプロセッサがＲＯＭからプログラムをＲＡＭ上にロードして実行することにより、上記の各部をＲＡＭ上で生成することができる。
【００９７】
なお、上述の各実施形態の情報処理装置１０の各部を実現するためのプログラムは、ＲＯＭなどの不揮発メモリに予め格納して提供する形態のほか、例えば、インターネットなどのネットワークに接続された他のコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上記プログラムを、インターネットなどのネットワーク経由で提供または配布するようにしてもよい。また、上記プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供するようにしてもよい。
【００９８】
なお、上述の各実施形態の情報処理装置１０の各部は、その一部または全部が、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field-Programmable  Gate  Array）などの専用のハードウェアにより実現される構成であってもよい。
【００９９】
また、上述の各実施形態の情報処理装置１０は、複数台のコンピュータを通信可能に接続したネットワークシステムとして構成し、上述の各部を複数台のコンピュータに分散して実現する構成であってもよい。また、上述の各実施形態の情報処理装置１０は、クラウドシステム上のサーバ装置として構成してもよいし、クラウドシステム上で動作する仮想マシンであってもよい。
【０１００】
以上、本発明の実施形態を説明したが、この実施形態は例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０１】
１０  情報処理装置
１１  事前検証部
１２  書き換え検知部
１３  無効化部
１４  実行制御部
Ｌ１（Ｌ１’）  ホワイトリスト
Ｌ２（Ｌ２’）  実行許可リスト
Ｌ３  要検証リスト
【図１】
2020046829.tif 000003
【図２】
2020046829.tif 000004
【図３】
2020046829.tif 000005
【図４】
2020046829.tif 000006
【図５】
2020046829.tif 000007
【図６】
2020046829.tif 000008
【図７】
2020046829.tif 000009
【図８】
2020046829.tif 000010
【図９】
2020046829.tif 000011
【図１０】
2020046829.tif 000012
【図１１】
2020046829.tif 000013
【図１２】
2020046829.tif 000014
【図１３】
2020046829.tif 000015
【図１４】
2020046829.tif 000016
【図１５】
2020046829.tif 000017