以下に添付図面を参照して、情報処理装置、情報処理方法、および情報処理プログラムを詳細に説明する。
(第1の実施の形態)
図1は、本実施の形態の情報処理システム1の一例を示す模式図である。
情報処理システム1は、情報処理装置10と、処理装置20と、を備える。情報処理装置10と、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。
処理装置20は、アプリケーションを実行する装置である。アプリケーションは、例えば、産業用システムにおける特定の業務を実現するためのアプリケーションである。本実施の形態では、処理装置20は、処理装置20で実行する対象(実行対象)のプログラムの実行可否の検証を、情報処理装置10へ依頼する。
情報処理装置10は、検証を依頼されたプログラムについて、ホワイトリスト14Aを用いた検証を行う。
情報処理装置10は、処理部12と、ホワイトリスト記憶部14と、を含む。処理部12とホワイトリスト記憶部14は、データや信号を授受可能に接続されている。処理部12は、プログラムの検証処理などを実行する(詳細後述)。ホワイトリスト記憶部14は、ホワイトリスト14Aを記憶する。
ホワイトリスト14Aは、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、を対応付けたリストである。
本実施の形態では、プログラムには、処理装置20で実行対象のプログラムが含まれる。本実施の形態では、プログラムは、例えば、処理装置20で実行対象のexeファイル、共有ライブラリ(dynamic link library:DLL)、および、メモリ上に配置された実行イメージ(以降、メモリ実行イメージと呼ぶ)である。メモリは、例えば主記憶装置として用いられるRAM(Random Access Memory)などである。
プログラム識別子は、プログラムを識別するための識別子である。プログラム識別子は、例えば、exe識別子、dll識別子、および、メモリ実行イメージ識別子である。
exe識別子は、exeファイルを識別するための情報である。exe識別子の形式は、情報処理装置10がexeファイルを識別可能な形式であればよい。例えば、exe識別子の形式は、ホワイトリスト14Aに記載されているプログラム識別子(ここではexe識別子)と同じ形式である。
dll識別子は、dll(共有ライブラリ)を識別するための情報である。dll識別子の形式は、情報処理装置10がdllを識別可能な形式であればよい。例えば、dll識別子の形式は、ホワイトリスト14Aに記載されているプログラム識別子(ここではdll識別子)と同じ形式である。
メモリ実行イメージ識別子は、メモリ実行イメージを識別するための情報である。メモリ実行イメージ識別子の形式は、情報処理装置10がメモリ実行イメージを識別可能な形式であればよい。例えば、メモリ実行イメージ識別子の形式は、ホワイトリスト14Aに記載されているプログラム識別子(ここではメモリ実行イメージ識別子)と同じ形式である。
具体的には、プログラム識別子(exe識別子、dll識別子)は、プログラムの名前、プログラムのパス、システムで使用されているエントリの識別子、物理ストレージデバイスにおけるアドレスなどで表される。エントリの識別子は、例えば、Linux(登録商標)のiノード番号である。また、メモリ実行イメージ識別子は、メモリのアドレス、メモリのアドレスとサイズを組み合わせた情報、一意な番号(例えばLinux等ではディスクリプタ番号である)、および、メモリの領域名などで表される。チェックサム自体が識別子になってもよいし、メモリ実行イメージ自体がプログラム識別子になってもよい。メモリの領域名は必ずしも一意でなくともよい。例えば、すべてのメモリ実行イメージ、または、複数のメモリ実行イメージが同じプログラム識別子を持っていてもよいし、メモリ実行イメージ識別子(メモリの領域名など)は空文字であってもよい。
チェックサムは、対応するプログラムを検証するための検証符号である。チェックサムは、対応するプログラムが変更されない限り、常に一定の値となる。プログラムに変更が施された場合には、異なる値を示す、チェックサムを用いることが好ましい。
チェックサムは、例えば、ハッシュ値、誤り検出符号、ファイルサイズ、アクセス時刻、デジタル署名、メッセージ認証符号(Message Authentication Code: MAC)などである。また、チェックサムは、例えば、対応するプログラムに対して任意の関数を適用することで導出された、数値または文字列であってもよい。
ハッシュ値は、対応するプログラムに対して、暗号学的ハッシュ関数を適用することで得られる。暗号学的ハッシュ関数は、例えば、MD5、SHA−1、SHA−256、SHA−512、SHA−3などである。誤り検出符号は、例えば、巡回冗長符号などである。
なお、ホワイトリスト14Aには、予め、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、が対応付けて登録されている。例えば、ホワイトリスト14Aには、処理装置20で実行される予定の全てのプログラムのプログラム識別子とチェックサムが、情報処理装置10の起動前に予め登録されている。また、ホワイトリスト14Aは、情報処理装置10の停止中に、外部装置などによって、更新されてもよい。
メモリ実行イメージの場合には、プログラム識別子として空文字が許容されるため、ホワイトリスト14Aにプログラムのチェックサムだけが登録されていてもよい。なお、空文字をプログラム識別子としてチェックサムだけが登録される場合は、チェックサムがホワイトリスト14Aに登録されているかにより、検証が行われる。これは、チェックサム自体を識別子とすることと等価である。
本実施の形態では、情報処理装置10は、実行対象のプログラムの検証依頼として、該プログラムのプログラム識別子を、処理装置20から取得する。そして、情報処理装置10は、取得したプログラム識別子によって識別されるプログラムの検証処理を実行する(詳細後述)。そして、情報処理装置10は、検証結果を処理装置20へ出力する。
処理装置20は、ユーザ空間16と、カーネル18と、を有する。
カーネル18は、OS(Operating System:オペレーティングシステム)の中核を構成するソフトウェアである。カーネル18は、アプリケーションの実行に適した単位で分割されたプロセスを生成し、プロセスの動作に必要な資源(CPU:Central Processing Unit、メモリ領域、外部デバイスとのアクセスなど)を管理する。
ユーザ空間16は、OS上で動作するアプリケーションが使用するメモリ領域である。すなわち、ユーザ空間16は、プロセスがアクセス可能なメモリ領域である。
本実施の形態では、カーネル18は、ユーザ空間16で実行対象のプログラムの、実行に必要な処理を行う。本実施の形態では、カーネル18は、実行対象のプログラムの実行可否の検証を情報処理装置10へ依頼する。
カーネル18は、ユーザ空間16の実行呼出プロセス16Bや動的リンカ16Cからの依頼に応じて、実行対象のプログラムのプログラム識別子を情報処理装置10へ送信し、該プログラムの検証を情報処理装置10へ依頼する。
具体的には、実行呼出プロセス16Bは、実行対象のプログラムの実行を新規に開始する。一方、プロセス16Aは、自身のみで処理を実行する。実行呼出プロセス16Bは、exe情報16Eを用いて、実行対象のexeファイル、または、メモリ実行イメージの実行をカーネル18へ依頼する。
exe情報16Eは、exeファイルまたはメモリ実行イメージの実行に必要な情報である。exe情報16Eは、例えば、exeファイルまたはメモリ実行イメージを特定するための情報、exeファイルまたはメモリ実行イメージの挙動を変更するための引数のリスト、および、環境変数の内容、等を含む。exeファイルを特定するための情報は、例えば、exeファイルのファイルパス等である。メモリ実行イメージを特定するための情報は、例えばメモリ実行イメージが配置されたメモリ上のアドレス、メモリ実行イメージのサイズを示すサイズ情報、および、メモリ実行イメージが配置されたメモリにカーネルが割り当てた識別子などである。識別子は、一意な番号であってもよいし、名前などの文字列であってもよい。
カーネル18は、実行対象のexeファイルまたはメモリ実行イメージの検証依頼を、情報処理装置10へ出力する。カーネル18は、受付けた検証結果が“実行可”を示す場合、実行対象のexeファイルまたはメモリ実行イメージに対応する新規プロセス16Dを生成する。
動的リンカ16Cは、ユーザ空間16内のプロセスの1つである。新規プロセス16Dによるアプリケーションの実行に、共有ライブラリ内の関数の実行を要する場合がある。この場合、動的リンカ16Cは、新規プロセス16Dによる共有ライブラリの読込に必要な処理を実行する。具体的には、動的リンカ16Cは、dll情報16Fを用いて、カーネル18に共有ライブラリの読込を依頼する。
dll情報16Fとは、新規プロセス16Dが参照可能なメモリ上の領域に、共有ライブラリを読み込むために、必要な情報である。dll情報16Fは、例えば、ユーザ空間16内でアクセス可能な仮想アドレス、共有ライブラリを特定するための情報、などが含まれる。なお、アクセスする仮想アドレスが事前に決められている場合には、dll情報16Fに仮想アドレスは含まれない。
カーネル18は、動的リンカ16Cからの依頼を受付けると、共有ライブラリの読込の実行可否の検証依頼を、情報処理装置10へ依頼する。カーネル18は、情報処理装置10から受付けた検証結果が、“実行可”を示す場合、共有ライブラリの読込に必要な処理を実行する。
なお、本実施の形態では、処理装置20と情報処理装置10とは、別体として構成された形態を説明する。しかし、処理装置20と情報処理装置10とを一体的に構成してもよい。例えば、処理装置20と情報処理装置10とを同じハードウェア上で実行させてもよい。また、例えば、情報処理装置10は、処理装置20で実行されるプロセス16Aの1つとして存在してもよい。また、情報処理装置10は、カーネル18の機能の一部として存在してもよい。
次に、情報処理システム1が実行する処理の流れを説明する。図2は、情報処理システム1が実行する処理の流れの一例を示す、シーケンス図である。図2では、exeファイルを実行する場合を例に説明するが、メモリ実行イメージを実行する場合も同様の手順を適用できる。この場合、「exeファイル」を「メモリ実行イメージ」と読み替え、「exe識別子」を「メモリ実行イメージ識別子」に読み替えればよい。
まず、実行呼出プロセス16Bが、実行対象のプログラムとして、exeファイルの実行処理を起動する(ステップS1)。すると、実行呼出プロセス16Bは、該exeファイルのexe情報16Eを、カーネル18へ通知する(ステップS2)。
カーネル18は、exe情報16Eを取得すると共に、該exe情報16Eの送信元の実行呼出プロセス16Bの情報を取得する(ステップS3)。
実行呼出プロセス16Bの情報は、例えば、実行呼出プロセス16Bの実行を指示したユーザのユーザ情報、実行対象のexeファイルにアクセス可能なユーザのユーザ情報、実行対象のexeファイルに関する情報、実行対象のexeファイルのファイル形式、実行対象のexeファイルに記載されている動的リンカ16Cのファイルパス名、などである。
カーネル18は、ステップS2で取得したexe情報16Eによって特定される、exeファイルの実行可否を判断する(ステップS4)。例えば、カーネル18は、該exe情報16Eの送信元の実行呼出プロセス16Bが、該exeファイルの実行権限を有するか否かを判断する。この判断は、例えば、実行対象のexeファイルにアクセス可能なユーザのユーザ情報を用いて行う。
ステップS4で実行可と判断した場合、ステップS5へ進む。なお、ステップS4で実行否と判断した場合、カーネル18は、実行不可を示す検証結果を実行呼出プロセス16Bへ出力し、本シーケンスを終了する。
ステップS5では、カーネル18は、ステップS2で取得したexe情報16Eによって特定されるexeファイルの検証依頼を、情報処理装置10へ送信する(ステップS5)。すなわち、カーネル18は、実行対象のプログラムであるexeファイルのexe識別子を、情報処理装置10へ送信する(ステップS6)。
ステップS6の処理によって、情報処理装置10は、実行対象のプログラムのプログラム識別子として、exe識別子を取得する。情報処理装置10は、ステップS6で取得したexe識別子によって識別されるexeファイルについて、ホワイトリスト14Aを用いた検証処理を実行する(ステップS7)。そして、情報処理装置10は、検証結果をカーネル18へ出力する(ステップS8)。なお、ステップS7およびステップS8の処理については、詳細を後述する。
カーネル18は、情報処理装置10から検証結果を取得する(ステップS9)。カーネル18は、ステップS9で取得した検証結果が、実行対象のexeファイルの実行可を示すか否かを判断する(ステップS10)。
ステップS10で実行可を示すと判断した場合、ステップS11へ進む。なお、ステップS10で実行不可を示す判断した場合、カーネル18は、実行不可を示す検証結果を実行呼出プロセス16Bへ出力し、本シーケンスを終了する。
ステップS11では、カーネル18が、新規プロセス16Dを生成する(ステップS11、ステップS12)。新規プロセス16Dは、ステップS1で受付けたexe情報16Eによって特定されるexeファイルに対応する、新規のプロセスである。
次に、カーネル18は、動的リンカ16Cのプロセスを生成する(ステップS13、S14)。動的リンカ16Cは、新規プロセス16Dのアプリケーション実行に要する、共有ライブラリの読込処理を起動し、dll情報16Fをカーネル18へ通知する(ステップS15、S16)。
カーネル18は、動的リンカ16Cの要求を受けて、動的リンカ16Cの情報やdll情報16Fを取得する(ステップS17)。
カーネル18は、取得したdll情報16Fを用いて、共有ライブラリの読込可否を判断する(ステップS18)。例えば、カーネル18は、ステップS2のexe情報の送信元の実行呼出プロセス16Bが、該共有ライブラリの読込権限を有するか否かを、上記ユーザ情報を用いて判断する。ステップS18で読込否と判断した場合、本シーケンスを終了する。一方、ステップS18で読込可と判断した場合、ステップS19へ進む。
ステップS19では、カーネル18が、ステップS17で取得したdll情報16Fによって特定される共有ライブラリの検証依頼を、情報処理装置10へ送信する(ステップS20)。すなわち、カーネル18は、実行対象のプログラムである共有ライブラリのdll識別子を、情報処理装置10へ送信する(ステップS20)。
ステップS20の処理によって、情報処理装置10は、実行対象のプログラムのプログラム識別子として、dll識別子を取得する。情報処理装置10は、取得したdll識別子によって識別されるdll(共有ライブラリ)について、ホワイトリスト14Aを用いた検証処理を実行する(ステップS21)。そして、情報処理装置10は、検証結果をカーネル18へ出力する(ステップS22)。なお、ステップS21およびステップS22の処理については、詳細を後述する。
カーネル18は、情報処理装置10から検証結果を取得する(ステップS23)。カーネル18は、ステップS23で取得した検証結果が、実行対象の共有ライブラリの読込の実行可を示すか否かを判断する(ステップS24)。
ステップS24で実行可を示すと判断した場合、ステップS25へ進む。なお、ステップS24で実行不可を示す判断した場合、カーネル18は、実行不可を示す検証結果を実行呼出プロセス16Bへ出力し、本シーケンスを終了する。
ステップS25では、カーネル18が、実行可と検証された共有ライブラリの読込処理を実行する(ステップS25)。具体的には、カーネル18は、共有ライブラリの内容をメモリ上に展開し、動的リンカ16Cへ処理完了を通知する(ステップS26)。
処理完了の通知を受付けると、動的リンカ16Cは、新規プロセス16Dに共有ライブラリの読込完了を通知する(ステップS27、S28)。新規プロセス16Dは、所定のアプリケーションの実行を開始する(ステップS29)。そして、本シーケンスを終了する。
なお、新規プロセス16Dの実行時に、情報処理システム1が実行する処理の流れは、上記流れに限定されない。
例えば、図2に示すシーケンスでは、カーネル18が情報処理装置10に対して検証依頼(ステップS5、ステップS19)を行う前に、exeファイルの実行可否の判断や共有ライブラリの読込可否の判断を行っている(ステップS4、ステップS18)。
しかし、exeファイルの実行可否の判断や共有ライブラリの読込可否の判断(ステップS4、ステップS18)は、検証結果に基づいた判断時(ステップS10、ステップS24)に纏めて行ってもよい。
また、図2に示すシーケンスでは、カーネル18が動的リンカ16Cを呼び出している(ステップS14)。しかし、カーネル18や新規プロセス16Dが、直接、共有ライブラリの読込処理を実行してもよい。
また、上記では、実行対象として、exeファイルの実行や共有ライブラリの読込を対象としている。しかし、プログラムに対する操作は、実行や読込に限定されない。
例えば、プログラムに対する操作は、新規プログラムの作成、プログラムの書換え、プログラムパス上の位置の移動、プログラムのコピー、プログラムファイル名の変更、外部デバイスに対する書込・読込、などがある。なお、外部デバイスとは、例えば、USBスティック等の外部記憶装置、NIC(ネットワークインターフェースデバイス)等である。
そして、処理装置20のカーネル18は、これらの操作の実行の際に、操作対象のプログラムの識別子を、実行対象のプログラムのプログラム識別子として、情報処理装置10へ送信してもよい。これによって、処理装置20は、これらの操作対象のプログラムの検証を情報処理装置10へ依頼してもよい。
図2に示すように、新規プロセス16Dの実行時に、exeファイルが共有ライブラリを読み込む場合、exeファイルの実行可否の検証に加えて、共有ライブラリの読込可否の検証を行う必要がある。また、1つの実行対象のexeファイルが、複数の共有ライブラリを読み込むことや、複数の他の実行対象のexeファイルを呼び出す場合がある。このため、1つの新規プロセス16Dの実行時に、複数のプログラム(exeファイル、共有ライブラリ)について検証が必要となる場合がある。この場合、情報処理装置10が、逐次チェックサムを計算して検証を行うと、ホワイトリスト記憶部14を用いたプログラムの検証に時間を要する場合があった。
そこで、本実施の形態の情報処理装置10は、特有の情報処理を実行する。
次に、情報処理装置10の機能的構成を説明する。図3は、情報処理装置10の機能的構成の一例を示すブロック図である。
情報処理装置10は、処理部12と、ホワイトリスト記憶部14と、事前計算結果記憶部15と、を備える。処理部12と、ホワイトリスト記憶部14および事前計算結果記憶部15と、は、データや信号を授受可能に接続されている。
処理部12は、取得部30Aと、判断部30Bと、チェックサム計算部30Cと、特定部30Dと、検証部30Eと、推定部30Fと、関連プログラムチェックサム計算部30Gと、保存処理部30Hと、を備える。
上記各部(取得部30A、判断部30B、チェックサム計算部30C、特定部30D、検証部30E、推定部30F、関連プログラムチェックサム計算部30G、および保存処理部30H)は、例えば、1または複数のプロセッサにより実現される。
例えば、上記各部は、CPUなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のIC(Integrated Circuit)などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
取得部30Aは、実行対象のプログラムを識別するプログラム識別子を取得する。上述したように、実行対象のプログラムは、exeファイル、メモリ実行イメージ、および、共有ライブラリ等である。またプログラム識別子は、上述したように、例えば、exe識別子、メモリ実行イメージ識別子、および、dll識別子である。
すなわち、取得部30Aは、実行対象のプログラムを識別するプログラム識別子を、検証依頼として、処理装置20から取得する。取得部30Aは、取得したプログラム識別子を、判断部30Bおよび推定部30Fへ出力する。
判断部30Bは、取得部30Aで取得したプログラム識別子によって識別されるプログラムについて、チェックサムの計算が必要であるか否かを判断する。判断部30Bは、事前計算結果記憶部15に記憶されている事前計算結果リスト15Aを用いて、判断を行う。
事前計算結果記憶部15は、事前計算結果リスト15Aを記憶する。事前計算結果リスト15Aは、関連プログラムを識別する関連識別子と、関連プログラムの計算結果と、を対応づけたリストである。
関連プログラムとは、ホワイトリスト14Aにおける、特定のプログラム識別子によって識別されるプログラムに関連する、他のプログラムである。なお、以下では、特定のプログラム識別子によって識別されるプログラムを、単に、特定のプログラムと称して説明する場合がある。
例えば、関連プログラムは、特定のプログラムと同じ記憶領域に記憶されている他のプログラムである。同じ記憶領域は、例えば、同じディレクトリである。関連プログラムは、特定のプログラムと同じ記憶領域ではなく、メモリ上にのみ置かれるプログラムであってもよい。また、関連プログラムは、特定のプログラムを実行したときに連動して実行される可能性のある、他のプログラムである。また、関連プログラムは、特定のプログラムを実行するアプリケーションによって実行される、他のプログラムである。
特定のプログラム識別子とは、ホワイトリスト14Aに登録されているプログラム識別子の内、何れかのプログラム識別子であればよい。例えば、特定のプログラム識別子は、ホワイトリスト14Aにおける、取得部30Aが取得したプログラム識別子である。また、例えば、特定のプログラム識別子は、ホワイトリスト14Aにおける、取得部30Aが前回取得したプログラム識別子である。
なお、前回とは、直前であることを示す。すなわち、特定のプログラム識別子は、ホワイトリスト14Aにおける、取得部30Aが直前に取得したプログラム識別子であってもよい。
また、例えば、特定のプログラム識別子は、ホワイトリスト14Aにおける、後述する検証部30Eによって前回(直前に)検証されたプログラムのプログラム識別子である。また、例えば、特定のプログラム識別子は、ホワイトリスト14Aにおける、検証部30Eによって前回(直前に)検証されたプログラムであって、実行可を示す検証結果の導出されたプログラムのプログラム識別子である。
なお、特定のプログラム識別子は、ホワイトリスト14Aにおける、前回(直前に)検証または取得したプログラムのプログラム識別子に限定されない。すなわち、特定のプログラム識別子は、ホワイトリスト14Aにおける、検証部30Eによって過去に検証された、または、取得部30Aが過去に取得した、プログラム識別子の何れかであってもよい。
本実施の形態では、特定のプログラム識別子が、取得部30Aが直前に取得したプログラム識別子であり、検証部30Eが直前に検証したプログラムのプログラム識別子である場合を、一例として説明する。
関連プログラムの計算結果とは、関連プログラムに対して何等かの計算処理を施すことで得られる値である。例えば、関連プログラムの計算結果は、関連プログラムのチェックサム、および、ホワイトリスト14Aにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引、の少なくとも一方である。
なお、関連識別子を示すプログラム識別子、または、プログラム識別子を示す関連識別子、とは、関連識別子とプログラム識別子が同じ値(識別子)であることを意味する。
本実施の形態では、関連プログラムの計算結果が、関連プログラムのチェックサムである場合を一例として説明する。このため、事前計算結果リスト15Aは、関連識別子と、チェックサムと、を対応づけたリストである場合を、説明する。
関連識別子および関連プログラムの計算結果(チェックサム)は、後述する推定部30Fおよび関連プログラムチェックサム計算部30Gによって事前に計算され、事前計算結果記憶部15に登録されている。また、事前計算結果リスト15Aは、後述する推定部30F、関連プログラムチェックサム計算部30G、保存処理部30Hによって更新される。
判断部30Bは、取得部30Aで取得したプログラム識別子を示す関連識別子および該関連識別子に対応するチェックサムが、事前計算結果リスト15Aに登録されているか否かを判別する。この判別により、判断部30Bは、チェックサムの計算が必要であるか否かを判断する。
そして、判断部30Bは、チェックサムの計算が必要と判断した場合、取得部30Aから受付けたプログラム識別子を、チェックサム計算部30Cへ出力する。チェックサム計算部30Cは、プログラム識別子を判断部30Bから受け付けると、受付けたプログラム識別子によって識別されるプログラムのチェックサムを計算する。
例えば、チェックサム計算部30Cは、受付けたプログラム識別子によって識別されるプログラムの、ファイルパスを取得する。そして、チェックサム計算部30Cは、取得したファイルパスを用いて、該プログラム識別子によって識別されるプログラムを開く命令を実行する。これにより、チェックサム計算部30Cは、該プログラムの内容をバイナリ文字列として取得する。そして、チェックサム計算部30Cは、このバイナリ文字列を暗号学的ハッシュ関数に入力することで、チェックサムを計算する。
また、例えば、該プログラムファイル、または、該プログラムファイルのバイナリ文字列は、情報処理装置10上ではない外部装置(例えば、処理装置20)から取得してもよい。その際、受付けたプログラム識別子を外部装置に送信し、外部装置で検索された該プログラム、または、該バイナリ文字列を受信する機能を備えていてもよい。
なお、チェックサムの計算に用いるバイナリ文字列は、該プログラムの内容以外のものを含んでいてもよい。例えば、このバイナリ文字列は、受付けたプログラム識別子によって識別されるプログラムのメタ情報を含んでいてもよい。メタ情報は、例えば、ファイルサイズ、アクセス権、タイムスタンプ、などである。
チェックサム計算部30Cは、判断部30Bから受付けたプログラム識別子と、計算したチェックサムと、を検証部30Eへ出力する。
一方、判断部30Bは、チェックサムの計算が不要と判断した場合、取得部30Aから受付けたプログラム識別子を、特定部30Dへ出力する。
特定部30Dは、判断部30Bから受付けたプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト15Aから読取る。これによって、特定部30Dは、受付けたプログラム識別子に対応するチェックサムを特定する。特定部30Dは、判断部30Bから受付けたプログラム識別子と、特定したチェックサムと、を検証部30Eへ出力する。
検証部30Eは、取得したプログラム識別子と、事前計算結果リスト15Aにおける、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト14Aと、に基づいて、実行対象のプログラムの実行の可否を検証する。
上述したように、本実施の形態では、計算結果が、関連プログラムのチェックサムである場合を説明する。このため、検証部30Eは、事前計算結果リスト15Aにおける、取得したプログラム識別子を示す関連識別子に対応するチェックサムと、取得したプログラム識別子と、が対応づけてホワイトリスト14Aに登録されている場合、実行対象のプログラムの実行可を示す検証結果を導出する。
具体的には、検証部30Eは、チェックサム計算部30Cまたは特定部30Dから、プログラム識別子およびチェックサムを受付ける。
検証部30Eは、受付けたプログラム識別子とチェックサムが、対応づけてホワイトリスト14Aに登録されている場合、実行可を示す検証結果を導出する。詳細には、検証部30Eは、特定部30Dまたはチェックサム計算部30Cから受付けたチェックサムと、ホワイトリスト14Aにおける、取得部30Aで取得したプログラム識別子に対応するチェックサムと、が一致する場合、実行可を示す検証結果を導出する。
一方、検証部30Eは、取得部30Aで取得したプログラム識別子がホワイトリスト14Aに登録されていない場合、実行不可を示す検証結果を導出する。また、検証部30Eは、特定部30Dまたはチェックサム計算部30Cから受付けたチェックサムと、ホワイトリスト14Aにおける、取得部30Aで取得したプログラム識別子に対応するチェックサムと、が不一致である場合、実行不可を示す検証結果を導出する。
このように、事前計算結果リスト15Aに、取得部30Aで取得したプログラム識別子を示す関連識別子が登録されている場合、検証部30Eは、事前計算結果リスト15Aから特定されたチェックサムと、ホワイトリスト14Aにおける該プログラム識別子に対応するチェックサムと、を比較することで、検証結果を導出する。このため、情報処理装置10は、チェックサムの計算時間の削減を図ることができる。
一方、推定部30Fは、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。すなわち、推定部30Fは、ホワイトリスト14Aに登録されていることが想定される、特定のプログラム識別子について、関連する関連プログラムを推定する。特定のプログラム識別子、および関連プログラムの定義は、上述したため、ここでは記載を省略する。
例えば、推定部30Fは、取得部30Aが取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。
なお、本実施の形態では、推定部30Fは、取得部30Aで取得されたプログラム識別子に基づいた検証が検証部30Eで実行された後に、推定部30Fが関連識別子の推定処理を行う。
このため、本実施の形態では、推定部30Fは、検証部30Eによる検証処理が終了した後に、取得部30Aから受付けたプログラム識別子を用いて、該プログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。
これにより、推定部30Fは、ホワイトリスト14Aにおける、検証部30Eによって前回(直前に)検証されたプログラムに関連する、関連プログラムを推定する。
なお、推定部30Fは、検証部30Eによる検証結果が実行可を示す場合にのみ、検証されたプログラムに関連する関連プログラムを推定してもよい。
推定部30Fによる関連プログラムの推定方法は、限定されない。例えば、推定部30Fは、取得部30Aで取得したプログラム識別子から、該プログラム識別子によって識別されるプログラムのファイルパスを取得する。そして、推定部30Fは、該ファイルパスに示される場所(例えば、ディレクトリ)に保持されている他のプログラムを、関連プログラムとして特定する。これによって、推定部30Fは、関連プログラムを推定する。
また、例えば、推定部30Fは、取得部30Aで取得したプログラム識別子から、該プログラム識別子によって識別されるプログラムを取得する。そして、該プログラムの内容を解析し、該プログラムが実行または読込むプログラムを、関連プログラムとして特定する。
なお、推定部30Fは、1つのプログラム識別子に対して、1または複数の関連プログラムを推定すればよい。このため、推定部30Fが推定する関連プログラムの数は、1つに限定されない。
推定部30Fは、推定した関連プログラムの関連識別子を、関連プログラムチェックサム計算部30Gへ出力する。
関連プログラムチェックサム計算部30Gは、受け付けた関連識別子によって識別される関連プログラムのチェックサムを計算する。例えば、関連プログラムチェックサム計算部30Gは、受付けた関連識別子を用いて、関連プログラムのファイルパスを取得する。そして、関連プログラムチェックサム計算部30Gは、取得したファイルパスを用いて、該関連識別子によって識別される関連プログラムを開く命令を実行する。これにより、関連プログラムチェックサム計算部30Gは、該関連プログラムの内容をバイナリ文字列として取得する。そして、関連プログラムチェックサム計算部30Gは、このバイナリ文字列を暗号学的ハッシュ関数に入力することで、チェックサムを計算する。
なお、チェックサムの計算に用いるバイナリ文字列は、該プログラムの内容以外のものを含んでいてもよい。例えば、このバイナリ文字列は、受付けた関連識別子によって識別される関連プログラムのメタ情報を含んでいてもよい。メタ情報は、例えば、ファイルサイズ、アクセス権、タイムスタンプ、などである。
関連プログラムチェックサム計算部30Gは、関連識別子と、該関連識別子によって識別される関連プログラムのチェックサムと、を保存処理部30Hへ出力する。
保存処理部30Hは、関連プログラムの計算結果と、関連プログラムを識別する関連識別子と、を対応付けて事前計算結果リスト15Aに登録する。
本実施の形態では、保存処理部30Hは、関連プログラムチェックサム計算部30Gから受付けた、関連識別子およびチェックサムを対応付けて、事前計算結果リスト15Aに登録する。
このため、事前計算結果リスト15Aは、推定部30F、関連プログラムチェックサム計算部30G、および保存処理部30Hによって更新される。すなわち、事前計算結果リスト15Aには、ホワイトリスト14Aに登録されているプログラム識別子の内、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子と、関連プログラムのチェックサムと、が対応づけて登録される。
このため、取得部30Aが新たなプログラム識別子を取得した際には、該プログラム識別子を示す関連識別子およびチェックサムが、既に事前計算結果リスト15Aに登録されている可能性が高い。これは、推定部30Fによって、特定のプログラムに関連する関連プログラムが事前に推定され、該関連プログラムの関連識別子と事前に計算されたチェックサムとが対応づけて事前計算結果リスト15Aに登録されているためである。
よって、取得部30Aが新たに取得したプログラム識別子を示す関連識別子とチェックサムとが対応づけて事前計算結果リスト15Aに既に登録されている場合、処理部12は、チェックサムの計算時間の短縮を図ることができる。このため、本実施の形態の情報処理装置10は、検証時間の短縮を図ることができる。
次に、本実施の形態の情報処理装置10が実行する、情報処理の手順の一例を説明する。図4は、本実施の形態の情報処理装置10が実行する、情報処理の手順の一例を示す、フローチャートである。なお、図4に示すフローチャートは、図2に示すステップS7とステップS8の処理、および、ステップS21とステップS22の処理、の詳細な説明の一例である。
まず、取得部30Aが、実行対象のプログラムを識別するプログラム識別子を取得する(ステップS100)。
次に、判断部30Bが、ステップS100で取得したプログラム識別子によって識別されるプログラムについて、チェックサムの計算が必要であるか否かを判断する(ステップS102)。判断部30Bは、事前計算結果記憶部15に記憶されている事前計算結果リスト15Aを用いて、判断を行う。ステップS102で否定判断すると(ステップS102:No)、ステップS104へ進む。
ステップS104では、特定部30Dが、ステップS100で取得したプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト15Aから読取る。これによって、特定部30Dは、受付けたプログラム識別子に対応するチェックサムを特定する(ステップS104)。そして、ステップS108へ進む。
一方、ステップS102で肯定判断すると(ステップS102:Yes)、ステップS106へ進む。ステップS106では、チェックサム計算部30Cが、ステップS100で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する(ステップS106)。そして、ステップS108へ進む。
ステップS108では、検証部30Eが、ステップS104で特定またはステップS106で計算されたチェックサムと、ステップS100で取得したプログラム識別子と、ホワイトリスト14Aと、を用いて、該プログラム識別子によって識別されるプログラムの実行可否を検証する(ステップS108)。そして、検証部30Eは、実行可または実行不可を示す検証結果を、処理装置20へ出力する(ステップS110)。
次に、推定部30Fが、ステップS100で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する(ステップS112)。
次に、関連プログラムチェックサム計算部30Gは、ステップS112で推定された関連プログラムのチェックサムを計算する(ステップS114)。次に、保存処理部30Hが、ステップS112で推定された関連プログラムの関連識別子と、該関連プログラムについてステップS114で計算されたチェックサムと、を対応づけて事前計算結果リスト15Aへ登録する(ステップS116)。そして、本ルーチンを終了する。
以上説明したように、本実施の形態の情報処理装置10は、推定部30Fと、保存処理部30Hと、取得部30Aと、検証部30Eと、を備える。推定部30Fは、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。保存処理部30Hは、関連プログラムの計算結果と、関連プログラムを識別する関連識別子と、を対応づけて事前計算結果リスト15Aに登録する。取得部30Aは、実行対象のプログラムを識別するプログラム識別子を取得する。検証部30Eは、事前計算結果リスト15Aにおける、取得したプログラム識別子と、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト14Aと、に基づいて、実行対象のプログラムの実行の可否を検証する。
このように、本実施の形態の情報処理装置10では、事前計算結果リスト15Aに、推定された関連プログラムの関連識別子と計算結果とが対応づけて登録される。このため、検証部30Eは、取得したプログラム識別子と、事前計算結果リスト15Aにおける、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト14Aと、を用いて検証を行うことで、ホワイトリスト14Aを用いた、プログラムの検証時間の短縮を図ることができる。
従って、本実施の形態の情報処理装置10は、ホワイトリスト14Aを用いた、プログラムの検証時間の短縮を図ることができる。
また、本実施の形態の情報処理装置10は、ファイルとしての実態を持たず、主記憶装置等のメモリ上に配置されて実行されるプログラム(メモリ実行イメージ)も検証の対象とすることができる。ホワイトリストには実行可能なプログラムのメモリ実行イメージのみが登録されるため、ファイルレスマルウェアなどの不正なプログラムが実行対象とされた場合にも、この不正なプログラムを実行不可と検証することができる。すなわち、ホワイトリストを用いた検証処理をより高精度に実行可能となる。
(変形例)
なお、上記第1の実施の形態では、推定部30Fが、取得部30Aで取得したプログラムによって識別されるプログラムから、関連プログラムを推定する形態を説明した。
しかし、推定部30Fによる関連プログラムの推定方法は、第1の実施の形態に示す方法に限定されない。例えば、推定部30Fは、予め生成された関連プログラムに関するリスト(関連プログラムリスト)を用いて、関連プログラムを推定してもよい。
なお、本変形例において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本変形例において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本変形例の情報処理システム1Aの一例を示す模式図である。
情報処理システム1Aは、情報処理装置10Aと、処理装置20と、を備える。情報処理装置10Aと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Aは、処理部12Aと、ホワイトリスト記憶部14と、を備える。
次に、情報処理装置10Aについて説明する。図5は、本変形例の情報処理装置10Aの機能的構成の一例を示すブロック図である。
情報処理装置10Aは、処理部12Aと、ホワイトリスト記憶部14と、事前計算結果記憶部15と、関連プログラムリスト記憶部22と、を備える。事前計算結果記憶部15、ホワイトリスト記憶部14、および関連プログラムリスト記憶部22と、処理部12Aと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部14および事前計算結果記憶部15は、第1の実施の形態と同様である。
関連プログラムリスト記憶部22は、関連プログラムリスト22Aを記憶する。関連プログラムリスト22Aは、特定のプログラムを識別するプログラム識別子と、特定のプログラムに関連する関連プログラムを識別する関連識別子と、を対応づけたリストである。特定のプログラム、関連プログラム、および関連識別子の定義は、第1の実施の形態と同様である。
関連プログラムリスト記憶部22は、関連プログラムリスト22Aを予め記憶する。例えば、関連プログラムリスト22Aは、ホワイトリスト14Aの作成時や更新時に、生成・更新される。
関連プログラムリスト22Aに登録されているプログラム識別子は、ホワイトリスト14Aに登録されている複数のプログラム識別子の内の、一部である。
例えば、処理部12Aは、ホワイトリスト14Aの生成・更新時に、ホワイトリスト14Aに含まれる複数のプログラム識別子の内の一部を抽出する。そして、処理部12Aは、抽出したプログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子を特定する。例えば、処理部12Aは、抽出したプログラム識別子によって識別されるプログラムから呼び出される、他のプログラムの識別子を、関連識別子として特定する。
そして、処理部12Aは、ホワイトリスト14Aから抽出したプログラム識別子と、プログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子と、を対応づけて関連プログラムリスト22Aに登録する。
次に、処理部12Aについて説明する。処理部12Aは、取得部30Aと、判断部30Bと、チェックサム計算部30Cと、特定部30Dと、検証部30Eと、推定部31Fと、関連プログラムチェックサム計算部30Gと、保存処理部30Hと、を備える。処理部12Aは、推定部30Fに代えて推定部31Fを備える点以外は、第1の実施の形態の処理部12と同様である。
推定部31Fは、関連プログラムリスト22Aから、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。すなわち、推定部31Fは、関連プログラムリスト22Aにおける、特定のプログラム識別子に対応する関連識別子を読取ることで、該関連識別子によって識別される関連プログラムを推定する。
なお、推定部31Fは、関連識別子の読取時に、関連プログラムリスト22Aの加工やデータの追加を行ってもよい。
例えば、推定部31Fは、関連プログラムリスト22Aから読取った、特定のプログラム識別子に対応する関連識別子の各々について、各々の関連識別子を示すプログラム識別子に対応する、他の関連識別子を読取る。そして、推定部31Fは、読取った他の関連識別子を、該特定のプログラム識別子に更に対応づけて登録してもよい。これによって、推定部31Fは、関連プログラムリスト22Aに更なる関連識別子を追加してもよい。
また、例えば、推定部31Fは、関連プログラムリスト22Aから読取った、特定のプログラム識別子に対応する複数の関連識別子から、一定数の関連識別子を選択し、選択した関連識別子を関連プログラムリスト22Aから削除してもよい。
このように、推定部31Fが関連プログラムリスト22Aを用いて関連プログラムを推定することで、本変形例の情報処理装置10Aは、上記第1の実施の形態の効果に加えて、更に、処理部12A全体の処理時間の短縮を図ることができる。
(第2の実施の形態)
なお、上記第1の実施の形態では、関連プログラムの計算結果が、関連プログラムのチェックサムである場合を一例として説明した。
しかし、上記第1の実施の形態で説明したように、関連プログラムの計算結果は、関連プログラムのチェックサム、および、ホワイトリスト14Aにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引、の少なくとも一方であってよい。
本実施の形態では、関連プログラムの計算結果が、ホワイトリスト14Aにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引である場合を説明する。
なお、本実施の形態において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本実施の形態の情報処理システム1Bの一例を示す模式図である。
情報処理システム1Bは、情報処理装置10Bと、処理装置20と、を備える。情報処理装置10Bと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Bは、処理部12Bと、ホワイトリスト記憶部14’と、を備える。
次に、情報処理装置10Bについて説明する。図6は、本実施の形態の情報処理装置10Bの機能的構成の一例を示すブロック図である。
情報処理装置10Bは、処理部12Bと、ホワイトリスト記憶部14’と、事前計算結果記憶部15’と、を備える。事前計算結果記憶部15’およびホワイトリスト記憶部14’と、処理部12Bと、はデータや信号を授受可能に接続されている。
ホワイトリスト記憶部14’は、ホワイトリスト14Aに代えてホワイトリスト14Bを記憶する。
ホワイトリスト14Bは、索引と、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、を対応づけたリストである。
索引は、ホワイトリスト14Bにおける、プログラム識別子の登録箇所を示す。このため、索引は、ホワイトリスト14Bの構造に依存する。
例えば、ホワイトリスト14Bが、ホワイトリスト記憶部14’におけるファイルシステム上に保存されているファイルであり、プログラム識別子とチェックサムとの対が1行ごとに登録されていると仮定する。この場合、索引は、ホワイトリスト14Bにおける、プログラム識別子の登録されている行番号である。
また、例えば、ホワイトリスト14Bが、ホワイトリスト記憶部14’におけるファイルシステム上に保存されているファイルであり、バイナリ形式で、プログラム識別子とチェックサムとの対が記載されていると仮定する。この場合、索引は、プログラム識別子とチェックサムの対の、ファイル上のバイト位置である。
また、例えば、ホワイトリスト14Bが、ホワイトリスト記憶部14’におけるデータベースソフトウェア上に保存されていると仮定する。この場合、索引は、プログラム識別子とチェックサムとの対を検索するための、検索キーや検索クエリである。
また、例えば、ホワイトリスト14Bが、メモリ上に読込まれていると仮定する。この場合、索引は、プログラム識別子とチェックサムの対の、メモリ上の位置を示す仮想/物理アドレスである。
また、索引は、プログラム識別子からハッシュ関数を用いて得られた値であってもよい。
また、プログラム識別子とチェックサムの対が、特定のデータ構造に従って保存されていると仮定する。この場合、索引は、このデータ構造に従った索引であればよい。例えば、特定のデータ構造が、木構造のノードに特定のプログラム識別子を割り当てた構造であると仮定する。この場合、索引は、ルートノードからのパスである。
事前計算結果記憶部15’は、事前計算結果リスト15Aに代えて、事前計算結果リスト15Bを記憶する。事前計算結果リスト15Bは、関連識別子と、索引と、を対応付けたリストである。すなわち、事前計算結果リスト15Bは、事前計算結果リスト15Aにおけるチェックサムに代えて、索引を登録したリストである。
すなわち、本実施の形態では、事前計算結果リスト15Bには、特定のプログラムに関連する関連プログラムの関連識別子と、ホワイトリスト14Bにおける、該関連識別子を示すプログラム識別子の登録箇所を示す索引と、を対応づけて登録したリストである。
次に、処理部12Bについて説明する。処理部12Bは、取得部30Aと、判断部32Bと、チェックサム計算部32Cと、特定部32Dと、索引計算部32Jと、検証部32Eと、推定部30Fと、関連プログラム索引計算部32Gと、保存処理部32Hと、を備える。
上記各部(取得部30A、判断部32B、チェックサム計算部32C、特定部32D、索引計算部32J、検証部32E、推定部30F、関連プログラム索引計算部32G、および保存処理部32H)は、例えば、1または複数のプロセッサにより実現される。
例えば、上記各部は、CPUなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のIC(Integrated Circuit)などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
取得部30Aは、第1の実施の形態と同様である。但し、取得部30Aは、取得したプログラム識別子を、チェックサム計算部32C、判断部32B、および推定部30Fへ出力する。
チェックサム計算部32Cは、取得部30Aから受付けたプログラム識別子によって識別される、プログラムのチェックサムを計算する。チェックサム計算部32Cは、チェックサム計算部30Cと同様にして、チェックサムを計算する。チェックサム計算部32Cは、取得部30Aから受付けたプログラム識別子と、計算したチェックサムと、を検証部32Eへ出力する。
判断部32Bは、取得部30Aから受付けたプログラム識別子によって識別されるプログラムについて、索引の計算が必要であるか否かを判断する。判断部32Bは、事前計算結果記憶部15’に記憶されている事前計算結果リスト15Bを用いて、判断を行う。
判断部32Bは、取得部30Aで取得したプログラム識別子を示す関連識別子および該関連識別子に対応する索引が、事前計算結果リスト15Bに登録されているか否かを判別する。この判別により、判断部32Bは、索引の計算が必要であるか否かを判断する。
そして、判断部32Bは、索引の計算が必要と判断した場合、取得部30Aから受付けたプログラム識別子を、索引計算部32Jへ出力する。
索引計算部32Jは、受付けたプログラム識別子の索引を計算する。例えば、索引計算部32Jは、受付けたプログラム識別子の、ホワイトリスト14Bにおける登録箇所を特定することで、該プログラム識別子の索引を計算する。そして、索引計算部32Jは、プログラム識別子と索引を検証部32Eへ出力する。
一方、判断部32Bは、索引の計算が不要と判断した場合、取得部30Aから受付けたプログラム識別子を、特定部32Dへ出力する。
特定部32Dは、判断部32Bから受付けたプログラム識別子を示す関連識別子に対応する索引を、事前計算結果リスト15Bから読取る。これによって、特定部32Dは、受付けたプログラム識別子に対応する索引を特定する。特定部32Dは、判断部32Bから受付けたプログラム識別子と、特定した索引と、を検証部32Eへ出力する。
検証部32Eは、取得したプログラム識別子と、事前計算結果リスト15Bにおける、取得したプログラム識別子を示す関連識別子に対応する索引と、ホワイトリスト14Bと、に基づいて、実行対象のプログラムの実行の可否を検証する。
詳細には、検証部32Eは、チェックサム計算部32Cから、プログラム識別子とチェックサムを受付ける。また、検証部32Eは、索引計算部32Jまたは特定部32Dから、プログラム識別子と索引を受付ける。
そして、検証部32Eは、受付けた索引を用いてホワイトリスト14Bを検索することで、ホワイトリスト14Bから、該索引に対応するプログラム識別子およびチェックサムを検索する。受付けた索引を用いることで、検証部32Eは、ホワイトリスト14Bからの、プログラム識別子およびチェックサムの検索時間の短縮を図ることができる。
さらに、検証部32Eは、ホワイトリスト14Bから検索したチェックサムと、チェックサム計算部32Cから受付けたチェックサムと、が一致するか否かを検証する。そして、一致する場合、検証部32Eは、取得部30Aで取得したプログラム識別子によって識別されるプログラムについて、実行可を示す検証結果を導出する。
一方、検証部32Eは、取得部30Aで取得したプログラム識別子がホワイトリスト14Bに登録されていない場合、実行不可を示す検証結果を導出する。また、検証部32Eは、チェックサム計算部32Cから受付けたチェックサムと、ホワイトリスト14Bから検索したチェックサムと、が不一致である場合、実行不可を示す検証結果を導出する。
このように、事前計算結果リスト15Bに、取得部30Aで取得したプログラム識別子を示す関連識別子が登録されている場合、検証部32Eは、事前計算結果リスト15Bから特定された索引を用いてホワイトリスト14Bを検索することで、検証処理を行う。このため、情報処理装置10Bは、ホワイトリスト14Bの検索時間の短縮を図ることができる。
一方、推定部30Fは、第1の実施の形態と同様に、ホワイトリスト14Bにおける、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。例えば、第1の実施の形態と同様に、推定部30Fは、取得部30Aから受付けたプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。そして、推定部30Fは、推定した関連プログラムの関連識別子を、関連プログラム索引計算部32Gへ出力する。
関連プログラム索引計算部32Gは、推定部30Fから受付けた関連識別子によって識別される関連プログラムの、索引を計算する。そして、関連プログラム索引計算部32Gは、関連識別子と、該関連識別子に対応する索引と、を保存処理部32Hへ出力する。
保存処理部32Hは、関連プログラム索引計算部32Gから受付けた関連識別子と索引を対応づけて事前計算結果リスト15Bに登録する。
次に、本実施の形態の情報処理装置10Bが実行する、情報処理の手順の一例を説明する。図7は、本実施の形態の情報処理装置10Bが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図7に示すフローチャートは、図2に示すステップS7とステップS8の処理、および、ステップS21とステップS22の処理、の詳細な説明の一例である。
まず、取得部30Aが、実行対象のプログラムを識別するプログラム識別子を取得する(ステップS200)。
次に、判断部32Bが、ステップS200で取得したプログラム識別子によって識別されるプログラムについて、索引の計算が必要であるか否かを判断する(ステップS202)。判断部32Bは、事前計算結果リスト15Bを用いて、判断を行う。ステップS202で否定判断すると(ステップS202:No)、ステップS204へ進む。
ステップS204では、特定部32Dが、ステップS200で取得したプログラム識別子を示す関連識別子に対応する索引を、事前計算結果リスト15Bから読取る。これによって、特定部32Dは、受付けたプログラム識別子に対応する索引を特定する(ステップS204)。そして、ステップS208へ進む。
一方、ステップS202で肯定判断すると(ステップS202:Yes)、ステップS206へ進む。ステップS206では、索引計算部32Jが、受付けたプログラム識別子に対応する索引を計算する(ステップS206)。そして、ステップS208へ進む。
ステップS208では、チェックサム計算部32Cが、ステップS200で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する(ステップS208)。そして、ステップS210へ進む。
ステップS210では、検証部32Eが、ステップS204またはステップS206で導出された索引と、ステップS208で計算されたチェックサムと、ステップS200で取得したプログラム識別子と、ホワイトリスト14Bと、を用いて、該プログラム識別子によって識別されるプログラムの実行可否を検証する(ステップS210)。そして、検証部32Eは、実行可または実行不可を示す検証結果を、処理装置20へ出力する(ステップS212)。
次に、推定部30Fが、ステップS200で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する(ステップS214)。
次に、関連プログラム索引計算部32Gは、ステップS214で推定された関連プログラムの索引を計算する(ステップS216)。次に、保存処理部32Hが、ステップS214で推定された関連プログラムの関連識別子と、該関連プログラムについてステップS216で計算された索引と、を対応づけて事前計算結果リスト15Bへ登録する(ステップS218)。そして、本ルーチンを終了する。
以上説明したように、本実施の形態の情報処理装置10Bは、計算結果として、ホワイトリスト14Bにおけるプログラム識別子の登録箇所を示す索引を用いる。このため、検証部32Eは、検証処理時に、受付けた索引を用いてホワイトリスト14Bを検索することで、検索時間の短縮を図ることができる。
ここで、従来では、ホワイトリスト14Bに登録されているプログラム識別子の数が多くなるほど、プログラムの検証時に、ホワイトリスト14Bからのプログラム識別子の検索に時間を要していた。このため、検証時間が長くなる場合があった。
一方、本実施の形態の情報処理装置10Bは、検証部32Eは、検証処理時に、受付けた索引を用いてホワイトリスト14Bを検索する。このため、情報処理装置10Bは、検証処理時における、ホワイトリスト14Bの検索時間を短縮することができる。
従って、本実施の形態の情報処理装置10Bは、ホワイトリスト14Bを用いた、プログラムの検証時間の短縮を図ることができる。
なお、情報処理装置10Bの構成は、上記構成に限定されない。例えば、情報処理装置10Bの判断部32Bが、第1の実施の形態で説明した判断部30Bの機能を更に備えた構成としてもよい。この場合、事前計算結果リスト15Bは、関連識別子と、チェックサムと、索引と、を対応付けて登録した構成とすればよい。
そして、この場合、判断部32Bは、取得部30Aから取得したプログラム識別子を示す関連識別子に対応するチェックサムおよび索引が事前計算結果リスト15Bに登録されているか否かを判断すればよい。
そして、登録されていると判断した場合、特定部32Dが、該関連識別子に対応するチェックサムおよび索引を、事前計算結果リスト15Bから特定し、検証部32Eへ出力すればよい。そして、検証部32Eは、受付けた索引を用いてホワイトリスト14Bを検索し、索引によって特定される箇所に登録されたプログラム識別子とチェックサムと、特定部32Dから受付けたチェックサムと、を用いて、検証処理を実行すればよい。
これにより、本実施の形態の情報処理装置10Bは、上記効果に加えて更に、ホワイトリスト14Bを用いた検証時間の短縮を図ることができる。
(第3の実施の形態)
上記実施の形態では、検証部30E、32Eは、ホワイトリスト14Aまたはホワイトリスト14Bを用いて、検証処理を行った。
本実施の形態では、事前計算結果リスト15Aおよびホワイトリスト14Aを用いて検証処理を行う形態を説明する。
なお、本実施の形態において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本実施の形態の情報処理システム1Cの一例を示す模式図である。
情報処理システム1Cは、情報処理装置10Cと、処理装置20と、を備える。情報処理装置10Cと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Cは、処理部12Cと、ホワイトリスト記憶部14と、を備える。
次に、情報処理装置10Cについて説明する。図8は、本実施の形態の情報処理装置10Cの機能的構成の一例を示すブロック図である。
情報処理装置10Cは、処理部12Cと、ホワイトリスト記憶部14と、事前計算結果記憶部15と、を備える。事前計算結果記憶部15およびホワイトリスト記憶部14と、処理部12Cと、はデータや信号を授受可能に接続されている。
ホワイトリスト記憶部14および事前計算結果記憶部15は、第1の実施の形態と同様である。すなわち、ホワイトリスト記憶部14は、ホワイトリスト14Aを記憶する。事前計算結果記憶部15は、事前計算結果リスト15Aを記憶する。
次に、処理部12Cについて説明する。処理部12Cは、取得部30Aと、チェックサム計算部33Cと、検証部33Eと、推定部30Fと、保存処理部33Hと、を備える。
上記各部(取得部30A、チェックサム計算部33C、検証部33E、推定部30F、および保存処理部33H)は、例えば、1または複数のプロセッサにより実現される。
例えば、上記各部は、CPUなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のIC(Integrated Circuit)などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
取得部30Aは、第1の実施の形態と同様である。但し、取得部30Aは、取得したプログラム識別子を、チェックサム計算部33Cと推定部30Fへ出力する。
推定部30Fは、第1の実施の形態と同様に、ホワイトリスト14Aにおける、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。例えば、第1の実施の形態と同様に、推定部30Fは、取得部30Aから受付けたプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。
そして、推定部30Fは、推定した関連プログラムの関連識別子を、保存処理部33Hへ出力する。
保存処理部33Hは、推定部30Fから受付けた関連識別子を示すプログラム識別子に対応するチェックサムを、ホワイトリスト14Aから読取る。そして、保存処理部33Hは、推定部30Fから受付けた関連識別子と、ホワイトリスト14Aから読取ったチェックサムと、を対応づけて、事前計算結果リスト15Aに登録する。
ここで、本実施の形態では、事前計算結果リスト15Aに登録されている関連識別子の数は、ホワイトリスト14Aに登録されているプログラム識別子の数より少ない。
本実施の形態では、この関係を維持するように、保存処理部33Hが、事前計算結果記憶部15を更新する。
例えば、保存処理部33Hは、事前計算結果リスト15Aに新たな関連識別子を登録するときに、既に事前計算結果リスト15Aに登録されている複数の関連識別子および該関連識別子に対応するチェックサムの対の一部を削除する。
具体的には、保存処理部33Hは、事前計算結果リスト15Aに登録されている関連識別子の数が予め設定した上限値を超えた場合、事前計算結果記憶部15に登録済の複数の関連識別子の内、所定条件を満たす関連識別子および該関連識別子に対応するチェックサムを、事前計算結果記憶部15から削除する。所定条件を満たす関連識別子は、例えば、事前計算結果記憶部15に登録された日時が最も古いものから順に所定数の関連識別子や、検証部33Eによって所定期間以上検証に用いられていない、所定数の関連識別子などである。
このようにして、保存処理部33Hは、事前計算結果リスト15Aに新たな関連識別子およびチェックサムを登録すると共に、登録されている関連識別子の数がホワイトリスト14Aに登録されているプログラム識別子の数より少なくなるように、調整する。
次に、チェックサム計算部33Cについて説明する。チェックサム計算部33Cは、取得部30Aから受付けたプログラム識別子によって識別される、プログラムのチェックサムを計算する。チェックサム計算部33Cは、チェックサム計算部30Cと同様にして、チェックサムを計算する。チェックサム計算部33Cは、取得部30Aから受付けたプログラム識別子と、計算したチェックサムと、を検証部33Eへ出力する。
検証部33Eは、取得したプログラム識別子によって識別される、実行対象のプログラムの実行の可否を検証する。
本実施の形態では、検証部33Eは、第1検証部33Kと、第2検証部33Lと、を含む。
第1検証部33Kは、事前計算結果リスト15Aを用いて、実行対象のプログラムの実行の可否を検証する。
詳細には、第1検証部33Kは、チェックサム計算部33Cから、プログラム識別子およびチェックサムを受付ける。そして、第1検証部33Kは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト15Aに登録されているか否かを判別する。
取得したプログラム識別子を示す関連識別子が、事前計算結果リスト15Aに登録されていたと仮定する。
この場合、第1検証部33Kは、該プログラム識別子と、該プログラム識別子によって識別されるプログラムの計算結果と、事前計算結果リスト15Aと、に基づいて、実行対象のプログラムの実行の可否を検証する。詳細には、第1検証部33Kは、チェックサム計算部33Cから受付けたプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト15Aから特定する。そして、第1検証部33Kは、チェックサム計算部33Cで計算されたチェックサムと、事前計算結果リスト15Aから特定したチェックサムと、が一致する場合、実行対象のプログラムが実行可であると検証する。
また、第1検証部33Kは、チェックサム計算部33Cから受付けたチェックサムと、事前計算結果リスト15Aから特定したチェックサムと、が不一致である場合、実行対象のプログラムが実行不可であると検証する。
そして、第1検証部33Kは、チェックサム計算部33Cから受付けたプログラム識別子と検証結果を、処理装置20へ出力する。
一方、取得部30Aによって取得されたプログラム識別子を示す関連識別子が、事前計算結果リスト15Aに登録されていなかったと仮定する。この場合、第1検証部33Kは、検証処理を行わず、チェックサム計算部33Cから受付けたプログラム識別子およびチェックサムを、第2検証部33Lへ出力する。そして、第2検証部33Lが、検証処理を行う。
第2検証部33Lは、事前計算結果リスト15Aに、取得したプログラム識別子を示す関連識別子が登録されていない場合に、実行対象のプログラムの実行の可否を検証する。
詳細には、第2検証部33Lは、取得したプログラム識別子と、該プログラム識別子によって識別されるプログラムの計算結果(チェックサム)と、ホワイトリスト14Aと、に基づいて、実行対象の前記プログラムの実行の可否を検証する。
具体的には、第2検証部33Lは、第1検証部33Kから受付けたプログラム識別子に対応するチェックサムを、ホワイトリスト14Aから特定する。そして、第2検証部33Lは、チェックサム計算部33Cで計算されたチェックサムと、ホワイトリスト14Aから特定したチェックサムと、が一致する場合、実行対象のプログラムが実行可であると検証する。
また、第2検証部33Lは、第1検証部33Kから受付けたプログラム識別子がホワイトリスト14Aに登録されていない場合、実行対象のプログラムが実行不可であると検証する。また、第1検証部33Kは、ホワイトリスト14Aにおける該プログラム識別子に対応するチェックサムと、チェックサム計算部33Cから第1検証部33Kを介して受付けたチェックサムと、が不一致である場合、実行対象のプログラムが実行不可であると検証する。
そして、第2検証部33Lは、チェックサム計算部33Cから第1検証部33Kを介して受付けたプログラム識別子と検証結果を、処理装置20へ出力する。
次に、本実施の形態の情報処理装置10Cが実行する、情報処理の手順の一例を説明する。図9は、本実施の形態の情報処理装置10Cが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図9に示すフローチャートは、図2に示すステップS7とステップS8の処理、および、ステップS21とステップS22の処理、の詳細な説明の一例である。
まず、取得部30Aが、実行対象のプログラムを識別するプログラム識別子を取得する(ステップS300)。
次に、チェックサム計算部33Cが、ステップS300で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する(ステップS302)。
次に、第1検証部33Kが、ステップS300で取得したプログラム識別子を示す関連識別子が、事前計算結果リスト15Aに登録されているか否かを判断する(ステップS304)。ステップS304で肯定判断すると(ステップS304:Yes)、第1検証部33Kが、事前計算結果リスト15Aを用いて、ステップS300で取得したプログラム識別子によって識別されるプログラムを検証する(ステップS306)。そして、ステップS310へ進む。
一方、ステップ304で否定判断すると(ステップS304:No)、ステップS308へ進む。ステップS308では、第2検証部33Lが、ホワイトリスト14Aを用いて、ステップS300で取得したプログラム識別子によって識別されるプログラムを検証する(ステップS308)。そして、ステップS310へ進む。
ステップS310では、検証部33E(第1検証部33K、第2検証部33L)が、ステップS306またはステップS308の検証結果と、ステップS300で取得したプログラム識別子と、を処理装置20へ出力する(ステップS310)。
次に、推定部30Fが、ステップS300で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する(ステップS312)。
次に、保存処理部33Hが、ステップS312で推定された関連プログラムのチェックサムを、ホワイトリスト14Aから取得する(ステップS314)。すなわち、保存処理部33Hは、ステップS312で推定された関連プログラムの関連識別子を示すプログラム識別子に対応するチェックサムを、ホワイトリスト14Aから読取る。これにより、保存処理部33Hは、チェックサムをホワイトリスト14Aから取得する。
そして、保存処理部33Hは、ステップS312で推定された関連プログラムの関連識別子と、ステップS314で取得したチェックサムと、を対応づけて事前計算結果リスト15Aへ登録する(ステップS316)。そして、本ルーチンを終了する。
以上説明したように、本実施の形態では、事前計算結果リスト15Aに登録されている関連識別子の数が、ホワイトリスト14Aに登録されているプログラム識別子の数より少ない。そして、第1検証部33Kは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト15Aに登録されている場合、該事前計算結果リスト15Aを用いて、実行対象のプログラムを検証する。一方、第2検証部33Lは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト15Aに登録されていない場合に、ホワイトリスト14Aを用いて、実行対象のプログラムを検証する。
このため、本実施の形態の情報処理装置10Cは、事前計算結果リスト15Aよりデータ量の多いホワイトリスト14Aの検索時間の短縮を図ることができる。
すなわち、事前計算結果リスト15Aに登録されている関連識別子の数は、ホワイトリスト14Aに登録されているプログラム識別子の数より少ない。このため、第1検証部33Kの検証時間は、第2検証部33Lの検証時間に比べて、短い。これは、検索に要する時間が短いためである。そして、本実施の形態の情報処理装置10Cは、事前計算結果リスト15Aに登録されている関連識別子を示すプログラム識別子によって識別されるプログラムについては、第1検証部33Kが、より短時間で検証可能な事前計算結果リスト15Aを用いて、検証処理を行う。
従って、本実施の形態の情報処理装置10Cは、ホワイトリスト14Aを用いた、プログラムの検証時間の短縮を図ることができる。
(第4の実施の形態)
上述の変形例では、推定部31Fが、予め生成された関連プログラムリスト22Aを用いて、関連プログラムを推定する場合を説明した。本実施の形態では、更に、関連プログラムリスト22Aを動的に生成および更新する形態を説明する。
なお、本実施の形態において、上記実施の形態および変形例と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態および変形例と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本実施の形態の情報処理システム1Dの一例を示す模式図である。
情報処理システム1Dは、情報処理装置10Dと、処理装置20と、を備える。情報処理装置10Dと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Dは、処理部12Dと、ホワイトリスト記憶部14と、を備える。
次に、情報処理装置10Dについて説明する。図10は、本実施の形態の情報処理装置10Dの機能的構成の一例を示すブロック図である。
情報処理装置10Dは、処理部12Dと、ホワイトリスト記憶部14と、事前計算結果記憶部15と、関連プログラムリスト記憶部22と、検証結果記憶部24と、を備える。事前計算結果記憶部15、ホワイトリスト記憶部14、関連プログラムリスト記憶部22、および検証結果記憶部24と、処理部12Dと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部14および事前計算結果記憶部15は、第1の実施の形態と同様である。関連プログラムリスト記憶部22は、変形例と同様である。なお、関連プログラムリスト記憶部22は、処理部12Dによって更新される(詳細後述)。
検証結果記憶部24は、検証結果リスト24Aを記憶する。検証結果リスト24Aは、検証部30Eによる検証結果を登録したリストである。具体的には、検証結果リスト24Aは、検証結果と、検証情報と、を対応づけたリストである。
検証情報は、検証部30Eによる検証に関する情報である。検証情報は、例えば、検証部30Eによって検証された順序(検証順と称する)を示す情報である。具体的には、検証情報は、検証時刻、検証部30Eの検証回数を示す通し番号、索引、プログラム識別子、チェックサム、情報処理装置10Dを示す情報、等である。なお、索引の定義は、上記実施の形態と同様である。また、情報処理装置10Dを示す情報は、例えば、情報処理装置10Dの起動時刻、情報処理装置10Dのハードウェア使用状況、情報処理装置10Dを使用するユーザ名、などである。
本実施の形態では、検証情報は、検証時刻と、プログラム識別子と、チェックサムと、を含む場合を、一例として説明する。
検証結果リスト24Aは、処理部12Dによって更新される(詳細後述)。
処理部12Dは、取得部30Aと、判断部30Bと、チェックサム計算部30Cと、特定部30Dと、検証部30Eと、推定部31Fと、関連プログラムチェックサム計算部30Gと、保存処理部30Hと、更新部34Nと、検証結果保存処理部34Mと、を備える。処理部12Dは、更新部34Nおよび検証結果保存処理部34Mを更に備える点以外は、変形例の処理部12Aと同様である。
検証結果保存処理部34Mは、検証部30Eの検証結果を検証結果リスト24Aに登録する。
例えば、検証結果保存処理部34Mは、検証部30Eによってホワイトリスト14Aを用いたプログラムの検証処理が実行される毎に、検証部30Eから、検証結果と検証情報を受付ける。
そして、検証結果保存処理部34Mは、検証結果と、検証情報と、を対応付けて検証結果リスト24Aに登録する。例えば、検証結果保存処理部34Mは、検証結果と、プログラム識別子と、検証時刻と、チェックサムと、を対応づけて検証結果リスト24Aに登録する。
なお、検証結果保存処理部34Mは、検証結果が実行可を示す場合にのみ、これらの情報を検証結果リスト24Aに登録してもよい。
なお、検証結果保存処理部34Mは、更に、検証結果リスト24Aの加工や追加を行ってもよい。例えば、検証結果保存処理部34Mは、検証時刻に基づいて、検証結果リスト24Aに登録されているプログラム識別子に通し番号を生成してもよい。そして、検証結果保存処理部34Mは、生成した通し番号を、検証結果リスト24Aにおけるプログラム識別子に対応づけて更に登録してもよい。
また、検証結果保存処理部34Mは、検証結果リスト24Aに記憶されている検証結果の内、一定期間以上経過した検証結果を、検証結果リスト24Aから削除してもよい。このとき、検証結果保存処理部34Mは、削除対象の検証結果と、該検証結果に対応する検証情報(プログラム識別子、チェックサム、および検証時刻など)を併せて削除する。
また、検証結果保存処理部34Mは、検証結果リスト24Aに登録されているプログラム識別子ごとに、検証部30Eによって検証された検証回数をカウントしてもよい。そして、検証結果保存処理部34Mは、カウントした検証回数を、プログラム識別子に更に対応づけて検証結果リスト24Aに登録してもよい。
更新部34Nは、検証部30Eによる検証結果に基づいて、関連プログラムリスト22Aを更新する。言い換えると、更新部34Nは、検証部30Eによる検証結果に基づいて、関連プログラムリスト22Aを生成および更新する。
詳細には、更新部34Nは、検証結果リスト24Aから関連プログラムリスト22Aを生成し、関連プログラムリスト記憶部22に記憶する。また、更新部34Nは、定期的または検証結果リスト24Aが更新されるごとに、検証結果リスト24Aに基づいて関連プログラムリスト22Aを更新する。
例えば、更新部34Nは、検証結果リスト24Aに記憶されているプログラム識別子の各々について、下記処理を実行する。まず、更新部34Nは、検証結果リスト24Aに記憶されている、所定のプログラム識別子に対応する検証時刻を特定する。そして、更新部34Nは、特定した検証時刻から所定の時間範囲内の検証時刻に対応する、他のプログラム識別子を特定する。そして、更新部34Nは、特定した他のプログラム識別子を、上記所定のプログラム識別子に対する、関連プログラムの関連識別子として特定する。更新部34Nは、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト22Aへ登録する。
また、更新部34Nは、検証結果リスト24Aに記憶されているプログラム識別子の各々について、下記処理を実行する。検証結果リスト24Aに記憶されている、所定のプログラム識別子に対して、このプログラム識別子を、関連プログラムの関連識別子として特定してもよい。そして、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト22Aへ登録してもよい。
また、更新部34Nは、検証結果リスト24Aに記憶されているプログラム識別子の各々について、下記処理を実行する。検証結果リスト24Aに記憶されている、所定のプログラム識別子に対して、該プログラム識別子に対応する検証回数を特定する。なお、この場合、検証結果リスト24Aには、プログラム識別子に対応付けて、更に、検証回数が登録されているものとする。そして、更新部34Nは、特定した検証回数が一定数を超える値である場合に、該プログラム識別子を、関連プログラムの関連識別子として特定してもよい。そして、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト22Aへ登録してもよい。
なお、上記の更新部34Nの処理では、検証結果リスト24Aに記憶されているプログラム識別子の各々について、関連識別子を特定したが、必要なものに限定してもよい。例えば、更新部34Nが処理を行った時刻を記憶しておき、検証結果リスト24Aに記憶されているプログラム識別子のうち、直前の更新部34Nの処理が行われた以降の検証時刻を示すプログラム識別子のみについて、上記処理を実施してもよい。
次に、本実施の形態の情報処理装置10Dが実行する、情報処理の手順の一例を説明する。図11は、本実施の形態の情報処理装置10Dが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図11に示すフローチャートは、図2に示すステップS7とステップS8の処理、および、ステップS21とステップS22の処理、の詳細な説明の一例である。
処理部12Dは、第1の実施の形態の処理部12と同様にして、ステップS400〜ステップS410の処理を実行する。ステップS400〜ステップS410の処理は、第1の実施の形態のステップS100〜ステップS110と同様である(図4参照)。
次に、検証結果保存処理部34Mが、検証部30Eによる検証結果および検証情報を、検証結果リスト24Aに登録する(ステップS412)。
次に、更新部34Nが、検証結果記憶部24に基づいて、関連プログラムリスト22Aを更新する(ステップS414)。
次に、推定部31Fが、関連プログラムリスト22Aを用いて、ステップ400で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する(ステップS416)。
次に、関連プログラムチェックサム計算部30Gおよび保存処理部30Hが、第1の実施の形態と同様にして、ステップS418〜ステップS420の処理を行い、本ルーチンを終了する。なお、ステップS418〜ステップS420の処理は、第1の実施の形態のステップS114〜ステップS116と同様である(図4参照)。
以上説明したように、本実施の形態では、更新部34Nが、検証部30Eによる検証結果に基づいて、関連プログラムリスト22Aを更新する。すなわち、本実施の形態では、更新部34Nが、関連プログラムリスト22Aを動的に生成および更新する。
このため、本実施の形態の情報処理装置10Dは、運用状況の変化に対応した計算結果を、事前計算結果リスト15Aに登録することができる。従って、本実施の形態の情報処理装置10Dでは、上記第1の実施の形態の効果に加えて、更に、検証時間の短縮を図ることができる。
(第5の実施の形態)
本実施の形態では、ホワイトリスト14Aや事前計算結果リスト15Aの変更を監視し、変更されたときに、ホワイトリスト14Aや事前計算結果リスト15Aを更新する形態を説明する。
なお、本実施の形態において、上記実施の形態および変形例と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態および変形例と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本実施の形態の情報処理システム1Eの一例を示す模式図である。
情報処理システム1Eは、情報処理装置10Eと、処理装置20と、を備える。情報処理装置10Eと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Eは、処理部12Eと、ホワイトリスト記憶部14と、を備える。
次に、情報処理装置10Eについて説明する。図12は、本実施の形態の情報処理装置10Eの機能的構成の一例を示すブロック図である。
情報処理装置10Eは、処理部12Eと、ホワイトリスト記憶部14と、事前計算結果記憶部15と、を備える。事前計算結果記憶部15およびホワイトリスト記憶部14と、処理部12Eと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部14および事前計算結果記憶部15は、第1の実施の形態と同様である。
処理部12Eは、取得部30Aと、判断部30Bと、チェックサム計算部30Cと、特定部30Dと、検証部30Eと、推定部30Fと、関連プログラムチェックサム計算部30Gと、保存処理部30Hと、ホワイトリスト監視部35Pと、事前計算結果監視部35Qと、を備える。処理部12Eは、ホワイトリスト監視部35Pおよび事前計算結果監視部35Qを更に備える点以外は、第1の実施の形態の処理部12と同様である。
事前計算結果監視部35Qは、事前計算結果リスト15Aに関する情報の変更を監視する。事前計算結果リスト15Aに関する情報は、例えば、事前計算結果リスト15Aに登録されている関連識別子によって識別される関連プログラムや、該関連プログラムの保存箇所や、関連識別子に対応するチェックサム、などを示す。
事前計算結果監視部35Qは、事前計算結果リスト15Aに関する情報が変更されたときに、該事前計算結果リスト15Aにおける対応箇所を更新する。
例えば、事前計算結果監視部35Qは、事前計算結果リスト15Aに登録されている関連識別子ごとに、対応するチェックサムの変更を監視する。そして、事前計算結果監視部35Qは、チェックサムが変更された場合、事前計算結果リスト15Aに関する情報が変更されたと判別する。
また、例えば、事前計算結果監視部35Qは、事前計算結果リスト15Aに登録されている関連識別子によって識別される関連プログラムの保持されている箇所を特定する。そして、事前計算結果監視部35Qは、特定した箇所に対して書換え操作が行われたか否かを検出する。
そして、事前計算結果監視部35Qは、書換え操作が行われたことを検出した場合、事前計算結果リスト15Aに関する情報が変更されたと判別する。
事前計算結果リスト15Aに関する情報が変更されたと判別した場合、例えば、事前計算結果監視部35Qは、事前計算結果リスト15Aにおける対応箇所を削除する。具体的には、事前計算結果監視部35Qは、書換え操作の行われた箇所に保持されている関連プログラムの関連識別子および対応するチェックサムを、事前計算結果リスト15Aから削除する。
なお、書換え操作の検出には、情報処理装置10Eのカーネルや特定のハードウェアを利用してもよい。例えば、情報処理装置10Eのカーネルに、監視対象となるファイルを通知する。そして、カーネルが、監視対象となるファイルに対する書換え操作の試みを検知した場合に、事前計算結果監視部35Qへ通知するように予め設定すればよい。
また、例えば、書換え操作による状態変化を検出可能な記憶装置(Programmable ROMなど)に監視対象を保持し、記憶装置の状態を読み取ることで、書換え操作を検出してもよい。
ホワイトリスト監視部35Pは、ホワイトリスト14Aの変更を監視する。そして、ホワイトリスト監視部35Pは、ホワイトリスト14Aが変更されたときに、事前計算結果リスト15Aにおける、該変更に対応する情報を更新する。
例えば、ホワイトリスト14Aの変更権限を有するユーザの操作指示によって、ホワイトリスト14Aを変更するプロセスが起動したと仮定する。この場合、ホワイトリスト監視部35Pは、ホワイトリスト14Aの変更を検出する。また、ホワイトリスト監視部35Pは、ホワイトリスト14Aに書換え操作が行われたことを検出した場合、ホワイトリスト14Aの変更を検出する。
そして、ホワイトリスト監視部35Pは、事前計算結果リスト15Aにおける、ホワイトリスト14Aの変更に対応する情報を更新する。
具体的には、ホワイトリスト14Aに記憶されているプログラム識別子に対応するプログラムが変更される場合がある。この場合、該プログラムのチェックサムが再計算され、該プログラム識別子に対応づけてホワイトリスト14Aに再登録される。すると、ホワイトリスト監視部35Pは、事前計算結果リスト15Aにおける、変更されたプログラムのプログラム識別子を示す関連識別子に対応するチェックサムを、再計算後の値に変更する。
なお、事前計算結果監視部35Qとホワイトリスト監視部35Pを同時に動作させる場合、互いに干渉しないように実装しなければならない。例えば、ホワイトリスト監視部35Pによる事前計算結果リスト15Aの変更については、事前計算結果監視部35Qによる書換え検知機能を停止させる。
次に、本実施の形態の情報処理装置10Eが実行する、情報処理の手順の一例を説明する。本実施の形態では、情報処理装置10Eは、第1の実施の形態と同様の手順を実行する(図4参照)。そして、情報処理装置10Eは、図4に示す情報処理の実行中に、図13に示す割込処理を実行する。
図13は、情報処理装置10Eが実行する割込処理の手順の一例を示す、フローチャートである。
まず、ホワイトリスト監視部35Pが、ホワイトリスト14Aが変更されたか否かを判断する(ステップS500)。ステップS500で肯定判断すると(ステップS500:Yes)、ステップS502へ進む。
ステップS502では、ホワイトリスト監視部35Pが、事前計算結果リスト15Aを更新する(ステップS502)。そして、ステップS504へ進む。一方、ステップS500で否定判断した場合も(ステップS500:No)、ステップS504へ進む。
ステップS504では、事前計算結果監視部35Qが、事前計算結果リスト15Aに関する情報の変更を検出したか否かを判断する(ステップS504)。ステップS504で否定判断すると(ステップS504:No)、本ルーチンを終了する。ステップS504で肯定判断すると(ステップS504:Yes)、ステップS506へ進む。
ステップS506では、事前計算結果監視部35Qが、事前計算結果リスト15Aにおける対応箇所を更新する(ステップS506)。そして、本ルーチンを終了する。
以上説明したように、本実施の形態では、ホワイトリスト監視部35Pが、ホワイトリスト14Aが変更されたときに、事前計算結果リスト15Aにおける、該変更に対応する情報を更新する。また、事前計算結果監視部35Qは、事前計算結果リスト15Aに関する情報が変更されたときに、事前計算結果リスト15Aにおける対応箇所を更新する。
このため、本実施の形態の情報処理装置10Eは、上記第1の実施の形態の効果に加えて、ホワイトリスト14Aや事前計算結果リスト15Aの内容の変更によって不具合が生じる事を抑制することができる。
ここで、ホワイトリスト監視部35Pおよび事前計算結果監視部35Qが設けられていない構成の場合、事前計算結果リスト15Aに関連識別子やチェックサムが登録されてから、特定部30Dがチェックサムを特定するまでの間に、チェックサムに関わる情報に変更がなされると、不具合が生じる場合があった。例えば、保存処理部30Hが、関連識別子とチェックサムを対応づけて事前計算結果リスト15Aに登録した直後に、プログラム(関連プログラムも含む)に変更が生じる場合がある。この場合、該プログラムおよび該プログラムのチェックサムは、変更前とは異なる値となる。
この場合、同じプログラム識別子を用いて、チェックサム計算部30Cで計算されたチェックサムと、特定部30Dでと特定されたチェックサムと、に違いが生じる。このため、この場合、検証部30Eによる検証結果に不具合が生じる。
また、ホワイトリスト14Aに変更が生じた場合には、事前計算結果リスト15Aに登録されている関連識別子や計算結果(チェックサムや索引)と、ホワイトリスト14Aにおける該関連識別子を示すプログラム識別子やチェックサムと、の間にずれが生じる。このため、ホワイトリスト14Aを用いたプログラムの検証精度が低下する場合があった。
一方、本実施の形態では、ホワイトリスト監視部35Pが、ホワイトリスト14Aが変更されたときに、事前計算結果リスト15Aにおける、該変更に対応する情報を更新する。また、事前計算結果監視部35Qは、事前計算結果リスト15Aに関する情報が変更されたときに、事前計算結果リスト15Aにおける対応箇所を更新する。
このため、本実施の形態の情報処理装置10Eは、上記第1の実施の形態の効果に加えて、ホワイトリスト14Aや事前計算結果リスト15Aの内容の変更によって不具合が生じる事を抑制することができる。
なお、本実施の形態では、処理部12Eが、ホワイトリスト監視部35Pおよび事前計算結果監視部35Qの双方を備えた構成を説明した。しかし、処理部12Eは、ホワイトリスト監視部35Pおよび事前計算結果監視部35Qの少なくとも一方を更に備えた構成であればよい。このため、処理部12Eは、ホワイトリスト監視部35Pおよび事前計算結果監視部35Qの内、何れか一方のみを備えた構成であってもよい。
ホワイトリスト監視部35Pおよび事前計算結果監視部35Qは、ホワイトリスト14Aおよび事前計算結果リスト15Aの内容を相互に参照し、整合性を確認してもよい。
また、ホワイトリスト監視部35Pおよび事前計算結果監視部35Q以外の機能が、不具合を抑制する機能を更に備えた構成としてもよい。
例えば、判断部30Bは、事前計算結果リスト15Aに取得したプログラム識別子が登録されている場合であっても、一定の確率で、必ずチェックサムの計算が必要と判断してもよい。
また、保存処理部30Hは、時刻情報と、関連識別子と、チェックサムと、を対応付けて事前計算結果リスト15Aに登録してもよい。そして、保存処理部30Hは、事前計算結果リスト15Aにおける、一定期間以上経過した関連識別子を、時刻情報を用いて検索する。そして、保存処理部30Hは、検索した関連識別子と、該関連識別子に対応する時刻情報およびチェックサムを、事前計算結果リスト15Aから削除してもよい。
また、保存処理部30Hは、事前計算結果リスト15Aに記憶されている関連識別子を一定期間ごとに参照し、チェックサム計算部30Cを制御することでチェックサムの再計算を行うように制御し、事前計算結果リスト15Aに再計算後の値を上書きして登録してもよい。
(第6の実施の形態)
上記実施の形態では、取得部が実行対象のプログラムを識別するプログラム識別子を取得した後、言い換えると、例えば実行対象のプログラムの起動時に、推定部以降の処理(事前計算)が実行される。しかし、事前計算を行うタイミングはこれに限定されない。本実施の形態では、特定のイベントの発生時に事前計算が行われる例を説明する。
なお、本実施の形態において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
図1は、本実施の形態の情報処理システム1Fの一例を示す模式図である。
情報処理システム1Fは、情報処理装置10Fと、処理装置20と、を備える。情報処理装置10Fと、処理装置20とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置20は、第1の実施の形態と同様である。情報処理装置10Fは、処理部12Fと、ホワイトリスト記憶部14と、を備える。
次に、情報処理装置10Fについて説明する。図14は、本実施の形態の情報処理装置10Fの機能的構成の一例を示すブロック図である。
情報処理装置10Fは、処理部12Fと、ホワイトリスト記憶部14と、事前計算結果記憶部15と、を備える。事前計算結果記憶部15、ホワイトリスト記憶部14、および、処理部12Fは、データや信号を授受可能に接続されている。ホワイトリスト記憶部14および事前計算結果記憶部15は、第1の実施の形態と同様である。
処理部12Fは、取得部36Aと、特定部30Dと、検証部30Eと、推定部36Fと、関連プログラムチェックサム計算部30Gと、保存処理部30Hと、を備える。処理部12Fは、判断部30Bとチェックサム計算部30Cが削除されたこと、および、取得部36Aと推定部36Fの機能が、第1の実施の形態の処理部12と異なっている。その他の構成は第1の実施の形態の処理部12と同様である。
取得部36Aは、さらに、予め定められた特定のイベントを検出し、検出したイベントを示すイベント情報を出力する点が、第1の実施の形態の取得部30Aと異なっている。なお、取得部36Aを、第1の実施の形態の取得部30Aと、本実施の形態で追加されたイベント検出機能を備える構成部(イベント検出部)とに分離してもよい。
取得部36Aは、特定のイベントの発生を検出し、検出したイベントの内容等を示すイベント情報を推定部36Fに出力する。特定のイベントは、例えば、特定のシステムコールの発行、計算機の負荷が一定割合以下になったこと、プロセッサがデバイス入力待ちの状態になったこと、および、特定のタスク(プログラム)がデバイス入力待ちの状態になったこと、などである。
特定のシステムコールは、例えば、関連プログラムへ識別子を割り当てるシステムコール、および、関連プログラムを実行するためのシステムコールなどである。関連プログラムへ識別子を割り当てるシステムコールは、例えば、ファイルのオープン、共有メモリの生成、共有メモリのオープン、および、メモリ上の特定領域に対する識別子の割り当て、を行うシステムコールである。
このように、特定のイベントは、例えば関連プログラムに関連するイベントであるが、特定のプログラム(特定のプログラム識別子によって識別されるプログラム)に関連するイベントであってもよい。例えば取得部36Aは、特定のプログラムを実行するためのシステムコールの発行を、特定のイベントとして検出してもよい。この場合、取得部36Aは、特定のプログラムのプログラム識別子を含むイベント情報を推定部36Fに出力するとともに、特定のプログラムのプログラム識別子を特定部30Dにも出力する。特定部30Dは、取得部36Aから入力されたプログラム識別子を用いて、上記の処理を実行する。
なお、取得部36Aは、例えば検出したイベントの種類によって、検出したイベントに対応する識別子が、特定のプログラムのプログラム識別子であるか、または、関連プログラムのプログラム識別子(関連識別子)であるかを判断してもよい。
取得部36Aは、イベントを検出したときに、当該イベントに対応する関連プログラム(または特定のプログラム)の関連識別子(またはプログラム識別子)を取得できる場合は、取得した関連識別子(またはプログラム識別子)を含むイベント情報を出力する。例えばイベントとして、特定のメモリ領域に識別子を割り当てるシステムコールを検出する場合、取得部36Aは、このメモリ領域に割り当てられた一意な番号(識別子)を、関連識別子(またはプログラム識別子)として取得する。
関連識別子(プログラム識別子)を取得できない場合は、取得部36Aは、関連識別子(プログラム識別子)を取得(推定)するための情報を含むイベント情報を出力する。例えば、取得部36Aは、関連プログラム(特定のプログラム)のパスなどの、関連プログラム(特定のプログラム)の関連識別子(プログラム識別子)を推定可能な情報を含む、システムコールの引数情報をイベント情報として出力してもよい。
推定部36Fは、イベント情報に基づいて関連プログラムを推定する。例えば推定部36Fは、イベント情報が関連識別子を含む場合、イベント情報に含まれる関連識別子で識別されるプログラムを関連プログラムと推定する。推定部36Fは、イベント情報が特定のプログラムのプログラム識別子を含む場合、第1の実施の形態と同様の方法により、このプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。
取得部36Aが関連識別子(プログラム識別子)を直接取得できない場合、推定部36Fは、取得部36Aから受け取ったイベント情報から、関連識別子(プログラム識別子)を推定してもよい。例えば推定部36Fは、システムコールの引数情報に含まれるパスから、関連プログラムの関連識別子を推定してもよい。
推定部36Fは、関連識別子を含むイベント情報を取得部36Aから受け取った場合は、イベント情報に含まれる関連識別子を関連プログラムチェックサム計算部30Gに出力する。推定部36Fは、特定のプログラムのプログラム識別子を含むイベント情報を取得部36Aから受け取った場合は、第1の実施の形態と同じ方法で、受け取ったプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。そして推定部36Fは、推定した関連プログラムの関連識別子を関連プログラムチェックサム計算部30Gに出力する。
イベントが、計算機の負荷が一定割合以下になったこと、および、プロセッサがデバイス入力待ちの状態になったこと、などの場合、イベントが特定のプログラム(タスク)と直接関係しない場合がある。このような場合は、推定部36Fは、例えば、実行中のプログラムのうち関連プログラムの推定処理を未実施のプログラムを対象として、第1の実施の形態と同じ方法により関連プログラムを推定してもよい。
計算機の負荷が一定割合以下になった、および、プロセッサがデバイス入力待ちの状態になった、などのイベントを契機として事前計算を行うことにより、情報処理装置10の処理負荷の分散、および、プログラム実行時のチェックサムの計算時間の短縮を図ることができる。
取得部36Aがメモリ領域に割り当てられた一意な番号(識別子)を関連識別子として取得した場合、関連プログラムチェックサム計算部30Gは、一意な番号が指すメモリ領域の実データを、チェックサム計算のために取得する必要がある。このため、推定部36Fは、一意な番号からメモリ領域に格納されたデータを取得し、取得したデータを、一意な番号とともに関連プログラムチェックサム計算部30Gに出力する。
あるプログラムを実行する前に必ず特定のイベントが発生する場合などであれば、この特定のイベントを検出したときに、このプログラムを関連プログラムとして事前にチェックサムを計算し、事前計算結果リスト15Aに登録しておくことができる。従って、第1の実施の形態のように、判断部30Bが、関連識別子に対応するチェックサムが事前計算結果リスト15Aに登録されているか否かを判別する必要がない。このため、本実施の形態では、判断部30Bおよびチェックサム計算部30Cを備えないように構成している。
例えば事前にチェックサムを計算できない可能性がある場合等には、第1の実施の形態と同様に、判断部30Bおよびチェックサム計算部30Cを備えるように構成してもよい。
次に、本実施の形態の情報処理装置10Fが実行する情報処理の手順の一例を説明する。図15は、本実施の形態の情報処理装置10Fが実行する、情報処理の手順の一例を示すフローチャートである。なお、図15に示すフローチャートは、図2に示すステップS7とステップS8の処理、および、ステップS21とステップS22の処理、の詳細な説明の一例である。
まず、取得部36Aは、イベントを検出し、検出したイベントを示すイベント情報を出力する(ステップS600)。取得部36Aは、検出したイベントが、特定のプログラムを実行することを示すイベント(実行イベント)であるか否かを判断する(ステップS602)。
検出したイベントが特定のプログラムの実行イベントである場合(ステップS602:Yes)、特定部30Dは、取得部36Aから実行対象のプログラムを識別するプログラム識別子を受け取り、受け取ったプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト15Aから読取る。これによって、特定部30Dは、受付けたプログラム識別子に対応するチェックサムを特定する(ステップS604)。
次に検証部30Eは、ステップS604で特定されたチェックサムと、特定部30Dから出力されるプログラム識別子と、ホワイトリスト14Aと、を用いて、該プログラム識別子によって識別されるプログラムの実行可否を検証する(ステップS606)。そして、検証部30Eは、実行可または実行不可を示す検証結果を、処理装置20へ出力する(ステップS608)。
ステップS602で検出したイベントが特定のプログラムの実行イベントでないと判断された場合(ステップS602:No)、および、ステップS608の実行後、推定部36Fは、イベント情報から関連プログラム(関連識別子)を推定する(ステップS610)。
イベント情報が特定のプログラムのプログラム識別子を含む場合は、推定部36Fは、第1の実施の形態と同様の方法により、このプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。イベント情報が関連プログラムの関連識別子を含む場合は、推定部36Fは、この関連識別子をそのまま関連プログラムチェックサム計算部30Gに出力することができる。イベント情報が関連識別子を推定するための情報を含む場合は、推定部36Fは、この情報から関連識別子を推定し、推定した関連識別子を関連プログラムチェックサム計算部30Gに出力する。
次に、関連プログラムチェックサム計算部30Gは、ステップS610で推定された関連プログラムのチェックサムを計算する(ステップS612)。次に、保存処理部30Hが、ステップS610で推定された関連プログラムの関連識別子と、該関連プログラムについてステップS612で計算されたチェックサムと、を対応づけて事前計算結果リスト15Aへ登録する(ステップS614)。そして、本ルーチンを終了する。
例えばファイルレスマルウェアは、以下のような手順により、ファイルシステムを介さずに実行される。
・メモリ上にプログラムの実行イメージを配置する。
・実行イメージに対する識別子を割り当てる。
・割り当てられた識別子をプロセス実行するためのシステムコールに渡す。
本実施の形態によれば、このような手順で実行されるプログラム(実行イメージ)に対して、メモリ上に配置された実行イメージの実行契機となるシステムコールを捕捉し、メモリ上に配置された実行イメージのチェックサムを、ホワイトリスト用いて検証可能となる。すなわち、ホワイトリストを用いた検証処理をより高精度に実行可能となる。本実施の形態では、メモリ上の実行イメージの実行を一括で拒否するのではなく、許可されたメモリ上の実行イメージは実行可能となる。すなわち、メモリ上の実行イメージを実行するタイプの正規プログラムの実行は拒否されないようにすることができる。
次に、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fの、ハードウェア構成の一例を説明する。図16は、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fのハードウェア構成図の一例である。
上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fは、CPU51などの制御装置と、ROM(Read Only Memory)52やRAM53やHDD(ハードディスクドライブ)などの記憶装置と、各種機器とのインターフェースである通信I/F部54と、各部を接続するバス61とを備えており、通常のコンピュータを利用したハードウェア構成となっている。
上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fでは、CPU51が、ROM52からプログラムをRAM53上に読み出して実行することにより、上記各機能がコンピュータ上で実現される。
なお、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fで実行される上記各処理を実行するためのプログラムは、HDDに記憶されていてもよい。また、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fで実行される上記各処理を実行するためのプログラムは、ROM52に予め組み込まれて提供されていてもよい。
また、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fで実行される上記処理を実行するためのプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、CD−R、メモリカード、DVD(Digital Versatile Disk)、フレキシブルディスク(FD)等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されるようにしてもよい。また、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上記実施の形態および変形例の情報処理装置10、10A、10B、10C、10D、10E、10Fで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワーク経由で提供または配布するようにしてもよい。
なお、上記には、本発明の実施の形態および変形例を説明したが、上記実施の形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施の形態および変形例やこれらの変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。