(57)【特許請求の範囲】
【請求項１】
実行ファイルを実行する第一の計算機のメモリ領域のうち前記実行ファイルを実行するための第一のプロセス用に確保された第一のメモリ領域の内容を表す第一のメモリイメージを取得する第一のメモリイメージ取得部と、
不正なプログラムコードを生成するマルウェアに感染していない第二の計算機に前記実行ファイルを実行させ、前記第二の計算機のメモリ領域のうち前記実行ファイルを実行するための第二のプロセス用に確保された第二のメモリ領域の内容を表す第二のメモリイメージを取得する第二のメモリイメージ取得部と、
前記第一のメモリイメージから抽出されるオペコードのリストである第一のリストと前記第二のメモリイメージから抽出されるオペコードのリストである第二のリストとの類似度を表す距離に基づいて、前記第一のメモリ領域に含まれているが前記第二のメモリ領域に含まれていないプログラムコードである注入コードを検出する注入コード検出部と
を備えることを特徴とするプロセス検査装置。
【請求項２】
前記第一のリストは、前記第一のメモリイメージが表す前記第一のメモリ領域のうち前記第一の計算機による前記実行ファイルの実行中に確保された第一の動的メモリ領域から抽出されるオペコードのリストであり、
前記第二のリストは、前記第二のメモリイメージが表す前記第二のメモリ領域のうち前記第二の計算機による前記実行ファイルの実行中に確保された第二の動的メモリ領域から抽出されるオペコードのリストである
ことを特徴とする請求項１記載のプロセス検査装置。
【請求項３】
前記注入コード検出部は、
前記第一の動的メモリ領域から、実行が許可された連続するメモリ領域である第一の実行可能ブロックを抽出し、前記第二の動的メモリ領域から、実行が許可された連続するメモリ領域である第二の実行可能ブロックを抽出し、
第一の実行可能ブロック毎に第一の実行可能ブロックからオペコードを抽出して前記第一のリストを生成し、第二の実行可能ブロック毎に第二の実行可能ブロックからオペコードを抽出して前記第二のリストを生成し、前記第一のリストと前記第二のリストとの組毎の距離を算出し、
前記第一のリストと前記第二のリストとの組毎の距離に基づいて、いずれの第二の実行可能ブロックとも類似しない第一の実行可能ブロックである非類似の実行可能ブロックを特定し、
特定した前記非類似の実行可能ブロックに記憶されているプログラムコードを前記注入コードとする
ことを特徴とする請求項２記載のプロセス検査装置。
【請求項４】
前記第一のリストと前記第二のリストとの組毎の距離は、ハミング距離またはレーベンシュタイン距離である
ことを特徴とする請求項３記載のプロセス検査装置。
【請求項５】
前記第一のメモリイメージ取得部は、前記第一のプロセスを特定するための情報としてポート番号が指定され、指定された前記ポート番号によって識別されるポートを使用しているプロセスを前記第一のプロセスとして特定する
ことを特徴とする請求項１記載のプロセス検査装置。
【請求項６】
前記第一の計算機に前記実行ファイルとしてインストールされている第一の実行ファイルと前記第二の計算機に前記実行ファイルとしてインストールされている第二の実行ファイルとが同じ実行ファイルでない場合、前記第一の実行ファイルと同じ実行ファイルを前記第二の計算機にインストールする第二の計算機更新部を備える
ことを特徴とする請求項１記載のプロセス検査装置。
【請求項７】
前記第二の計算機更新部は、前記第二の実行ファイルの名称とバージョンとパスとメッセージダイジェストとの少なくともいずれかが前記第一の実行ファイルと異なる場合に前記第一の実行ファイルと前記第二の実行ファイルとが同じ実行ファイルでないと判定することを特徴とする請求項６記載のプロセス検査装置。
【請求項８】
前記不正なプログラムコードの条件を示す検査ルールに基づいて、前記注入コードが前記不正なプログラムコードであるか否かを検査する注入コード検査部を備える
ことを特徴とする請求項１記載のプロセス検査装置。
【請求項９】
前記第二の計算機が仮想マシンであることを特徴とする請求項１記載のプロセス検査装置。
【請求項１０】
実行ファイルを実行する第一の計算機のメモリ領域のうち前記実行ファイルを実行するための第一のプロセス用に確保された第一のメモリ領域の内容を表す第一のメモリイメージを取得する第一のメモリイメージ取得処理と、
不正なプログラムコードを生成するマルウェアに感染していない第二の計算機に前記実行ファイルを実行させ、前記第二の計算機のメモリ領域のうち前記実行ファイルを実行するための第二のプロセス用に確保された第二のメモリ領域の内容を表す第二のメモリイメージを取得する第二のメモリイメージ取得処理と、
前記第一のメモリイメージから抽出されるオペコードのリストである第一のリストと前記第二のメモリイメージから抽出されるオペコードのリストである第二のリストとの類似度を表す距離に基づいて、前記第一のメモリ領域に含まれているが前記第二のメモリ領域に含まれていないプログラムコードである注入コードを検出する注入コード検出処理と
をコンピュータに実行させるためのプロセス検査プログラム。
【請求項１１】
第一のメモリイメージ取得部と、第二のメモリイメージ取得部と、注入コード検出部とを備えるプロセス検査装置を用いるプロセス検査方法であって、
第一のメモリイメージ取得部が、実行ファイルを実行する第一の計算機のメモリ領域のうち前記実行ファイルを実行するための第一のプロセス用に確保された第一のメモリ領域の内容を表す第一のメモリイメージを取得し、
第二のメモリイメージ取得部が、不正なプログラムコードを生成するマルウェアに感染していない第二の計算機に前記実行ファイルを実行させ、前記第二の計算機のメモリ領域のうち前記実行ファイルを実行するための第二のプロセス用に確保された第二のメモリ領域の内容を表す第二のメモリイメージを取得し、
注入コード検出部が、前記第一のメモリイメージから抽出されるオペコードのリストである第一のリストと前記第二のメモリイメージから抽出されるオペコードのリストである第二のリストとの類似度を表す距離に基づいて、前記第一のメモリ領域に含まれているが前記第二のメモリ領域に含まれていないプログラムコードである注入コードを検出する
ことを特徴とするプロセス検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行ファイルを実行するためのプロセス用に確保されたメモリ領域を検査する技術に関するものである。
【背景技術】
【０００２】
ウィルスまたはトロイの木馬など、マルウェアと呼ばれる不正なプログラムによって、企業内の機密情報が企業内のコンピュータから外部のコンピュータへ送信されるセキュリティ事故（インシデント）が多発している。
マルウェアを早期に発見するために、アンチウィルスベンダが提供するウィルス対策ソフトを導入している企業は多い。
また、通信データの中に不正なプログラムまたは機密情報が含まれていないことを確認することによって、マルウェアの感染および機密情報の漏洩を防止する対策も導入されている。【０００３】
しかし、ウィルス対策ソフトは、マルウェアに含まれるプログラムコードの既知のパターンを基にマルウェアの検出を行うため、パッキングされたマルウェア、つまり、圧縮または暗号化されたマルウェアを検出することができない。
また、マルウェアが通信データを暗号化する場合、マルウェアによって生成されるデータまたはコンピュータに記憶されている機密情報を含む通信データを検出することは困難である。【０００４】
さらに、多くのマルウェアは、早期に検知されないように、正規のプログラムになりすましている。
例えば、（ａ）正規のプログラムの実行ファイル名を利用する方法、（ｂ）正規のプログラムの実行ファイルを不正なプログラムの実行ファイルに置き換える方法、（ｃ）正規のプログラムのプロセス用のメモリ領域を利用する方法などのなりすまし方法がある。以下、プロセス用のメモリ領域を単に「メモリ領域」という。【０００５】
一方、マルウェアを検知するための従来技術がある。
この従来技術は、正規のプログラムの静的な情報をあらかじめ登録し、登録した静的な情報と検査対象のプログラムの静的な情報とを比較し、検査対象のプログラムがマルウェアであるか否かを判定する、というものである。静的な情報は、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）およびＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ）に関する情報、プログラムのサイズ、プログラムコードのハッシュ値などの情報である。これらの静的な情報はハードディスクに保存される。
しかし、この従来技術では、上記（ａ）（ｂ）の方法によって正規のプログラムになりすますマルウェアを検知することはできても、上記（ｃ）の方法によって正規のプログラムになりすますマルウェアを検知することはできない。上記（ｃ）の方法の場合、ハードディスクに保存される静的な情報が改ざんされないため、ハードディスクに保存される静的な情報が正規のプログラムの静的な情報と一致するためである。【０００６】
また、上記（ｃ）の方法に対処することが可能な従来技術がある。
この従来技術は、正規のプログラムのプロセスが利用するＡＰＩおよびＤＬＬをあらかじめ登録し、登録したＡＰＩおよびＤＬＬと検査対象のプログラムのプロセスが利用しているＡＰＩおよびＤＬＬとを比較し、検査対象のプログラムがマルウェアであるか否かを判定する、というものである。
しかし、この従来技術では、正規のプログラムと異なるＡＰＩまたはＤＬＬを動的に利用するマルウェアを検知することはできても、正規のプログラムと同じＡＰＩおよびＤＬＬを動的に利用するマルウェアを検知することはできない。【０００７】
その他に、以下のような従来技術がある。
この従来技術は、正規のプログラムのプロセス用のメモリ領域に記憶されるプログラムコードをあらかじめ登録し、登録したプログラムコードと検査対象のプログラムのメモリ領域に記憶されたプログラムコードとを比較し、マルウェアによって検査対象のプログラムのメモリ領域に注入される不正なプログラムコードを検知する、というものである。以下、マルウェアによってメモリ領域に注入される不正なプログラムコードを「不正コード」という。
しかし、動的に確保されるメモリ領域（以下、「動的なメモリ領域」という）に不正コードが注入される場合、従来技術ではこの不正コードを検知することはできない。動的なメモリ領域のアドレスはメモリ領域が確保されるたびに異なるので、動的なメモリ領域を特定することができず、動的なメモリ領域の比較ができないためである。
また、プログラムコードを動的に書き換える正規のプログラム（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ  Ｃｏｍｐｉｌｅｒ）が存在するため、メモリ領域に記憶されるプログラムコードを比較した際に不正コードを誤って検知する可能性がある。【０００８】
マルウェアが引き起こすセキュリティ事故によってどのような被害があったのかを早急に報告するため、マルウェア解析者は、メモリ領域に注入された不正コードを素早く特定し、特定した不正コードがどのような機能を有するかを解析する必要がある。
また、多くの従来技術では、正規のプログラム（またはそのプロセス）の静的な情報および動的な情報（プロセスが利用しているＡＰＩおよびＤＬＬ）をリストアップしたテンプレートを予め用意する必要がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２１２７４号公報
【非特許文献】
【００１０】
【非特許文献１】Ｃ．  Ｍ．  Ｌｉｎｎ，  Ｍ．  Ｒａｊａｇｏｐａｌａｎ，  Ｓ．  Ｂａｋｅｒ，  Ｃ．  Ｃｏｌｌｂｅｒｇ，  Ｓ．  Ｋ．  Ｄｅｂｒａｙ，  Ｊ．  Ｈ．  Ｈａｒｔｍａｎ，  “Ｐｒｏｔｅｃｔｉｎｇ  Ａｇａｉｎｓｔ  Ｕｎｅｘｐｅｃｔｅｄ  Ｓｙｓｔｅｍ  Ｃａｌｌｓ”，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２００５  Ｕｓｅｎｉｘ  Ｓｅｃｕｒｉｔｙ  Ｃｏｎｆｅｒｅｎｃｅ，  Ａｕｇｕｓｔ  ２００５
【非特許文献２】Ｄａｖｉｄ  Ｗａｇｎｅｒ，  Ｄｒｅｗ  Ｄｅａｎ，  Ｉｎｔｒｕｓｉｏｎ  ｄｅｔｅｃｔｉｏｎ  ｖｉａ  ｓｔａｔｉｃ  ａｎａｌｙｓｉｓ，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ２００１  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｐｒｉｖａｃｙ．
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明は、例えば、マルウェアによってメモリ領域に生成された可能性があるプログラムコード（注入コード）を検出できるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
本発明のプロセス検査装置は、
実行ファイルを実行する第一の計算機のメモリ領域のうち前記実行ファイルを実行するための第一のプロセス用に確保された第一のメモリ領域の内容を表す第一のメモリイメージを取得する第一のメモリイメージ取得部と、
不正なプログラムコードを生成するマルウェアに感染していない第二の計算機に前記実行ファイルを実行させ、前記第二の計算機のメモリ領域のうち前記実行ファイルを実行するための第二のプロセス用に確保された第二のメモリ領域の内容を表す第二のメモリイメージを取得する第二のメモリイメージ取得部と、
前記第一のメモリイメージと前記第二のメモリイメージとに基づいて、前記第一のメモリ領域に含まれているが前記第二のメモリ領域に含まれていないプログラムコードである注入コードを検出する注入コード検出部とを備える。
【発明の効果】
【００１３】
本発明によれば、例えば、マルウェアによってメモリ領域に生成された可能性があるプログラムコード（注入コード）を検出することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１におけるプロセス検査装置１００の機能構成図である。
【図２】実施の形態１におけるプロセス検査方法を示すフローチャートである。
【図３】実施の形態１における検査メモリ抽出部１１０の機能構成図である。
【図４】実施の形態１における検査メモリ抽出処理（Ｓ１１０）を示すフローチャートである。
【図５】実施の形態１における実行ファイル情報１０３の一例を示す図である。
【図６】実施の形態１における実行ファイル情報１０３の一例を示す図である。
【図７】実施の形態１におけるテンプレートメモリ抽出部１２０の機能構成図である。
【図８】実施の形態１におけるテンプレートメモリ抽出処理（Ｓ１２０）を示すフローチャートである。
【図９】実施の形態１におけるインストールリスト１０４の一例を示す図である。
【図１０】実施の形態１におけるインストールリスト１０４の一例を示す図である。
【図１１】実施の形態１における注入コード検出部１３０の機能構成図である。
【図１２】実施の形態１における静的メモリ領域比較部１３１による注入コード検出処理（Ｓ１３０）を示すフローチャートである。
【図１３】実施の形態１におけるアドレスリスト１３９の一例を示す図である。
【図１４】実施の形態１における注入コードリスト１９３Ｓの一例を示す図である。
【図１５】実施の形態１における動的メモリ領域比較部１３２による注入コード検出処理（Ｓ１３０）を示すフローチャートである。
【図１６】実施の形態１におけるペアリスト１３８の一例である。
【図１７】実施の形態１における注入コードリスト１９３Ｄの一例を示す図である。
【図１８】実施の形態１における検査ルールリスト１９４の一例を示す図である。
【図１９】実施の形態１における不正コードリスト１９５の一例を示す図である。
【図２０】実施の形態１におけるテンプレートシステム更新部１６０の機能構成図である。
【図２１】実施の形態１におけるテンプレートシステム更新部１６０によるテンプレートシステム更新処理を示すフローチャートである。
【図２２】実施の形態１における実行ファイルリスト１６９の一例を示す図である。
【図２３】実施の形態１におけるプロセス検査装置１００のハードウェア構成の一例を示す図である。
【図２４】実施の形態２におけるプロセス検査システム２００の構成図である。
【図２５】実施の形態２におけるプロセス検査サーバ２２０の機能構成図である。
【図２６】実施の形態２におけるプロセス検査方法を示すフローチャートである。
【発明を実施するための形態】
【００１５】
実施の形態１．
マルウェアによってメモリ領域に生成された不正なプログラムコードを検出する形態について説明する。
【００１６】
図１は、実施の形態１におけるプロセス検査装置１００の機能構成図である。
実施の形態１におけるプロセス検査装置１００の機能構成について、図１に基づいて説明する。
【００１７】
プロセス検査装置１００は、マルウェアによってメモリ領域に生成された不正なプログラムコードを検出するコンピュータである。
【００１８】
プロセス検査装置１００は、検査メモリ抽出部１１０（第一のメモリイメージ取得部の一例）、テンプレートメモリ抽出部１２０（第二のメモリイメージ取得部の一例）、注入コード検出部１３０および注入コード検査部１４０を備える。
プロセス検査装置１００は、検査結果出力部１５０、テンプレートシステム更新部１６０（第二の計算機更新部の一例）、検査ルール更新部１７０、テンプレートシステム制御部１８０および装置記憶部１９０を備える。
【００１９】
まず、装置記憶部１９０について説明する。
装置記憶部１９０は、プロセス検査装置１００が使用または生成するデータを記憶する。
例えば、装置記憶部１９０は、以下のようなデータを記憶する。
【００２０】
プロセス指定情報１０１は、検査対象である計算機（または計算機システム）によって実行されているプロセスのうちの検査対象であるプロセスを特定するために指定された情報である。
以下、検査対象である計算機（または計算機システム）を「対象システム」という。また、検査対象であるプロセスを「対象プロセス」という。
【００２１】
実行プロセスリスト１０２は、検査対象である対象システムによって実行されているプロセスのリストである。
【００２２】
実行ファイル情報１０３は、対象プロセスの元となっている実行ファイルを示す情報である。実行ファイルは実行形式のプログラムである。
以下、対象プロセスの元になっている実行ファイルを「対象実行ファイル」という。対象実行ファイルは、対象プロセス用に割り当てられるハードウェア資源（ＣＰＵ、メモリ領域など）を用いて実行される。対象プロセスは、対象実行ファイルが実行されるときにＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）によって生成される。
【００２３】
インストールリスト１０４は、マルウェアに感染していない計算機（または計算機システム）にインストールされている実行ファイルのリストである。
以下、マルウェアに感染していない計算機（または計算機システム）を「テンプレートシステム」という。
【００２４】
検査メモリイメージ１９１（第一のメモリイメージの一例）は、対象システム（第一の計算機の一例）のメモリ領域のうちの対象プロセス用に確保されたメモリ領域の内容を表すデータである。
【００２５】
テンプレートメモリイメージ１９２（第二のメモリイメージの一例）は、テンプレートシステム（第二の計算機の一例）のメモリ領域のうち対象プロセスに相当するプロセス用に確保されたメモリ領域の内容を表すデータである。
対象プロセスに相当するプロセスとは、テンプレートシステムによって実行されているプロセスのうちの対象実行ファイルを実行するためのプロセスである。
【００２６】
注入コードリスト１９３は、検査メモリイメージ１９１が表すメモリ領域に含まれているがテンプレートメモリイメージ１９２が表すメモリ領域に含まれていないプログラムコード（以下、注入コードという）を特定するための情報のリストである。
【００２７】
検査ルールリスト１９４は、検査ルールのリストである。
検査ルールとは、マルウェアによってメモリ領域に生成される不正なプログラムコード（以下、不正コードという）が満たすルールである。
【００２８】
不正コードリスト１９５は、不正コードのリストである。
【００２９】
次に、装置記憶部１９０以外の機能構成について説明する。
検査メモリ抽出部１１０は、プロセス指定情報１０１と実行プロセスリスト１０２とに基づいて、検査メモリイメージ１９１と実行ファイル情報１０３とを生成する。
テンプレートメモリ抽出部１２０は、実行ファイル情報１０３とインストールリスト１０４とに基づいて、テンプレートメモリイメージ１９２を生成する。
注入コード検出部１３０は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とに基づいて、注入コードリスト１９３を生成する。
注入コード検査部１４０は、注入コードリスト１９３と検査ルールリスト１９４とに基づいて、不正コードリスト１９５を生成する。
検査結果出力部１５０は、不正コードリスト１９５に基づいて、検査結果ファイル１９６を生成する。
【００３０】
テンプレートシステム更新部１６０は、定期的に以下のように動作する。
テンプレートシステム更新部１６０は、実行ファイル情報１０３とインストールリスト１０４とに基づいて、対象システムにはインストールされているがテンプレートシステムにはインストールされていない実行ファイルを特定する。
テンプレートシステム更新部１６０は、特定した実行ファイルをテンプレートシステムにインストールし、インストールリスト１０４を更新する。
【００３１】
検査ルール更新部１７０は、ユーザの指定に従って検査ルールリスト１９４を更新する。
【００３２】
テンプレートシステム制御部１８０は、テンプレートシステムとして機能する仮想マシンを動作させる。
【００３３】
プロセス検査装置１００は、対象システムおよびテンプレートシステムとして機能すると共に、対象システムの対象プロセスを検査するコンピュータである。
【００３４】
図２は、実施の形態１におけるプロセス検査方法を示すフローチャートである。
実施の形態１におけるプロセス検査方法について、図２に基づいて説明する。
【００３５】
まず、プロセス検査方法の概要について説明する。
検査メモリ抽出部１１０は、プロセス指定情報１０１に基づいて、対象システムのメモリから検査メモリイメージ１９１を抽出する（Ｓ１１０）。
テンプレートメモリ抽出部１２０は、検査メモリイメージ１９１に対応するテンプレートメモリイメージ１９２をテンプレートシステムから抽出する（Ｓ１２０）。
注入コード検出部１３０は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とを比較し、注入コードリスト１９３を生成する（Ｓ１３０）。
注入コード検査部１４０は、注入コードリスト１９３と検査ルールリスト１９４とに基づいて、不正コードリスト１９５を生成する（Ｓ１４０）。
検査結果出力部１５０は、不正コードリスト１９５に基づいて、検査結果ファイル１９６を生成する（Ｓ１５０）。
次に、プロセス検査方法の詳細について説明する。
【００３６】
Ｓ１１０において、ユーザはプロセス指定情報１０１をプロセス検査装置１００に入力する。
検査メモリ抽出部１１０は、プロセス指定情報１０１に基づいて、対象システムのメモリから検査メモリイメージ１９１を抽出する。
Ｓ１１０の後、処理はＳ１２０に進む。
【００３７】
以下に、検査メモリ抽出部１１０による検査メモリ抽出処理（Ｓ１１０）の詳細について説明する。
【００３８】
図３は、実施の形態１における検査メモリ抽出部１１０の機能構成図である。
図３に示すように、検査メモリ抽出部１１０は、プロセス監視部１１１と、メモリイメージ抽出部１１２とを備える。
プロセス監視部１１１は、プロセス指定情報１０１と実行プロセスリスト１０２とに基づいて、対象プロセスのプロセスＩＤを特定する。プロセスＩＤはプロセスを識別する識別子の一例である。例えば、プロセスＩＤはプロセス名に置き換えても構わない。プロセス監視部１１１は実行プロセスリスト１０２を用いずに対象プロセスのプロセスＩＤを特定しても構わない。
メモリイメージ抽出部１１２は、プロセス監視部１１１によって特定されたプロセスＩＤに基づいて、対象システムのメモリから検査メモリイメージ１９１を抽出する。また、メモリイメージ抽出部１１２は、実行ファイル情報１０３を生成する。
【００３９】
図４は、実施の形態１における検査メモリ抽出処理（Ｓ１１０）を示すフローチャートである。
実施の形態１における検査メモリ抽出処理（Ｓ１１０）について、図４に基づいて説明する。
【００４０】
Ｓ１１１において、プロセス監視部１１１は、プロセス指定情報１０１がポート番号とプロセスＩＤとのいずれを示しているか判定する。
プロセス指定情報１０１は、検査対象である対象プロセスを特定するために指定された情報である。
プロセス指定情報１０１がポート番号を示している場合、処理はＳ１１２に進む。
プロセス指定情報１０１がプロセスＩＤを示している場合、処理はＳ１１３に進む。
【００４１】
Ｓ１１２において、プロセス監視部１１１は、プロセス指定情報１０１が示すポート番号に基づいて、そのポート番号によって識別されるポートを利用して通信を行っているプロセスのプロセスＩＤを取得する。
例えば、プロセス監視部１１１は、ｎｅｔｓｔａｔ、Ｐｒｏｃｅｓｓ  ＭｏｎｉｔｏｒまたはＴＣＰ  Ｖｉｅｗなどを実行することによって、プロセスＩＤを取得する。ｎｅｔｓｔａｔはＷｉｎｄｏｗｓの機能であり、Ｐｒｏｃｅｓｓ  ＭｏｎｉｔｏｒおよびＴＣＰ  ＶｉｅｗはＷｉｎｄｏｗｓが提供するツールである。「Ｗｉｎｄｏｗｓ」は登録商標である（以下同様）。
例えば、実行プロセスリスト１０２は実行プロセス毎にプロセスＩＤとポート番号とを対応付けて含み、プロセス監視部１１１は該当するポート番号に対応付けられたプロセスＩＤを実行プロセスリスト１０２から取得する。
Ｓ１１２の後、処理はＳ１１３に進む。
【００４２】
Ｓ１１３において、メモリイメージ抽出部１１２は、プロセス指定情報１０１が示すプロセスＩＤまたはＳ１１２で取得されたプロセスＩＤに基づいて、対象システムのメモリから検査メモリイメージ１９１を抽出する。
検査メモリイメージ１９１は、対象システムのメモリ領域のうち対象プロセス用に確保されたメモリ領域の内容を表すデータである。
検査メモリイメージ１９１は、該当するメモリ領域の用途情報および保護情報を含む。また、検査メモリイメージ１９１は、対象プロセスのＰＥヘッダを含む。
メモリ領域の用途情報は、メモリ領域を構成するプログラム領域、データ領域、スタック領域およびヒープ領域などのアドレスの範囲を示す。プログラム領域およびデータ領域は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がプログラム（実行ファイル）をロードする際にプロセスに割り当てるメモリ領域である。プログラム領域、データ領域およびスタック領域は、実行ファイルの実行の開始時に確保される静的メモリ領域の一例である。ヒープ領域は、実行ファイルの実行中に確保される動的メモリ領域の一例である。
メモリ領域の保護情報は、メモリ領域の保護属性をアドレス単位毎（例えば、４バイト毎）に示す。読み取りが許可される「読み取り可能」、書き込みが許可される「書き込み可能」および実行が許可される「実行可能」は保護属性の一例である。
ＰＥヘッダは、プログラム（実行ファイル）がロードされた後にＯＳによって書き換えられるものである。
【００４３】
例えば、メモリイメージ抽出部１１２は、ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ、ＶｏｌａｔｉｌｉｔｙまたはＬｏａｄＰＥなどを実行することによって、検査メモリイメージ１９１を抽出する。ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙは、Ｗｉｎｄｏｗｓが提供するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）である。ＶｏｌａｔｉｌｉｔｙまたはＬｏａｄＰＥはフリーで公開されているメモリダンプツールである。
例えば、実行プロセスリスト１０２は実行プロセス毎にプロセスＩＤとメモリイメージとを対応付けて含み、メモリイメージ抽出部１１２は該当するプロセスＩＤに対応付けられたメモリイメージ（検査メモリイメージ１９１）を実行プロセスリスト１０２から取得する。
Ｓ１１３の後、処理はＳ１１４に進む。
【００４４】
Ｓ１１４において、メモリイメージ抽出部１１２は、プロセス指定情報１０１が示すプロセスＩＤまたはＳ１１２で取得されたプロセスＩＤに基づいて、実行ファイル情報１０３を生成する。
実行ファイル情報１０３は、対象プロセスの元となっている対象実行ファイルを示す情報である。
実行ファイル情報１０３は、対象実行ファイルの名前、パス、バージョン、メッセージダイジェストなどを含む（図５参照）。なお、メモリイメージ抽出部１１２は、ＭＤ５、ＳＨＡ１またはＳＨＡ２５６などのハッシュ関数を演算することによって、メッセージダイジェストを算出する。
対象実行ファイルが実行される際に共有ライブラリ（例えば、ＤＬＬ：Ｄｙｎａｍｉｃ
Ｌｉｎｋ  Ｌｉｂｒａｒｙ）が起動される場合、実行ファイル情報１０３は対象実行ファイル（．ｅｘｅ）の情報の他に共有ライブラリ（．ｄｌｌ）の情報を含む（図６参照）。以下、これらの共有ライブラリも対象実行ファイルと呼ぶ。
図５、図６は、実施の形態１における実行ファイル情報１０３の一例を示す図である。
Ｓ１１４の後、検査メモリ抽出処理（Ｓ１１０）は終了する。
【００４５】
図２に戻り、Ｓ１２０から説明を続ける。
【００４６】
Ｓ１２０において、テンプレートメモリ抽出部１２０は、検査メモリイメージ１９１に対応するテンプレートメモリイメージ１９２を、テンプレートシステムのメモリから抽出する。
Ｓ１２０の後、処理はＳ１３０に進む。
【００４７】
以下に、テンプレートメモリ抽出部１２０によるテンプレートメモリ抽出処理（Ｓ１２０）の詳細について説明する。
【００４８】
図７は、実施の形態１におけるテンプレートメモリ抽出部１２０の機能構成図である。
図７に示すように、テンプレートメモリ抽出部１２０は、インストール部１２１と、プロセス実行部１２２と、メモリイメージ抽出部１２３とを備える。
インストール部１２１は、実行ファイル情報１０３とインストールリスト１０４とに基づいて、対象実行ファイルがテンプレートシステムにインストールされているか否かを判定する。対象実行ファイルがテンプレートシステムにインストールされていない場合、インストール部１２１は、テンプレートシステムに対象実行ファイルをインストールし、インストールリスト１０４を更新する。
プロセス実行部１２２は、対象実行ファイルをテンプレートシステムに実行させる。このとき、テンプレートシステムは対象実行ファイルを実行するためにプロセスを生成する。以下、テンプレートシステムによって生成されるプロセスを「テンプレートプロセス」という。
メモリイメージ抽出部１２３は、テンプレートプロセス用に確保されたメモリ領域の内容を表すテンプレートメモリイメージ１９２をテンプレートシステムのメモリから抽出する。
【００４９】
図８は、実施の形態１におけるテンプレートメモリ抽出処理（Ｓ１２０）を示すフローチャートである。
実施の形態１におけるテンプレートメモリ抽出処理（Ｓ１２０）について、図８に基づいて説明する。
【００５０】
Ｓ１２１において、インストール部１２１は、実行ファイル情報１０３とインストールリスト１０４とに基づいて、対象実行ファイルがテンプレートシステムにインストールされているか否かを判定する。つまり、インストール部１２１は、テンプレートシステムに対象実行ファイルをインストールする必要があるか否かを判定する。
【００５１】
実行ファイル情報１０３と同じ情報がインストールリスト１０４に含まれている場合、インストール部１２１は、対象実行ファイルがテンプレートシステムにインストールされていると判定する。例えば、図９に示すインストールリスト１０４は、図５に示す実行ファイル情報１０３と同じ情報（名前、パス、バージョン、メッセージダイジェスト）を含んでいる。この場合、インストール部１２１は、対象実行ファイル（ｃａｌｃ．ｅｘｅ）がテンプレートシステムにインストールされていると判定する。
実行ファイル情報１０３と同じ情報がインストールリスト１０４に含まれていない場合、インストール部１２１は、対象実行ファイルがテンプレートシステムにインストールされていないと判定する。例えば、図１０に示すインストールリスト１０４は、図５に示す実行ファイル情報１０３と一部の情報（バージョン、メッセージダイジェスト）が異なる情報を含んでいるが、実行ファイル情報１０３と同一の情報を含んでいない。この場合、インストール部１２１は、対象実行ファイル（ｃａｌｃ．ｅｘｅ）がテンプレートシステムにインストールされていないと判定する。
図９、図１０は、実施の形態１におけるインストールリスト１０４の一例を示す図である。
【００５２】
対象実行ファイルがテンプレートシステムにインストールされている場合、つまり、テンプレートシステムに対象実行ファイルをインストールする必要が無い場合、処理はＳ１２６に進む。
対象実行ファイルがテンプレートシステムにインストールされていない場合、つまり、テンプレートシステムに対象実行ファイルをインストールする必要が有る場合、処理はＳ１２２に進む。
【００５３】
Ｓ１２２において、インストール部１２１は、実行ファイル情報１０３に基づいて、対象実行ファイルと同じ実行ファイルを取得する。例えば、インストール部１２１は、インターネットを介してファイルサーバから対象実行ファイルと同じ実行ファイルを取得する。
Ｓ１２２の後、処理はＳ１２３に進む。
【００５４】
Ｓ１２３において、インストール部１２１は、Ｓ１２２で取得した実行ファイルに対してウィルス検査を行い、その実行ファイルがウィルスに感染しているか否かを判定する。
例えば、インストール部１２１は、フリーまたは市販のアンチウィルスソフトを実行することによって、ウィルス検査を行う。
実行ファイルがウィルスに感染していると判定した場合、インストール部１２１は、テンプレートシステムにインストールすべき実行ファイルがウィルスに感染していることを知らせる警告を出力する。そして、テンプレートメモリ抽出処理（Ｓ１２０）は終了する。また、プロセス検査装置１００は、テンプレートメモリ抽出処理（Ｓ１２０）の後の処理を行わず、プロセス検査方法の処理を終了する。
実行ファイルがウィルスに感染していないと判定した場合、処理はＳ１２４に進む。
【００５５】
Ｓ１２４において、インストール部１２１は、Ｓ１２２で取得した実行ファイルをテンプレートシステムにインストールする。
但し、Ｓ１２２で取得した実行ファイルと同じ名前の実行ファイル（同名ファイル）がテンプレートシステムにインストールされている場合、インストール部１２１はその同名ファイルをアンインストールした後に、取得した実行ファイルをインストールする。
テンプレートシステムとして機能する仮想マシンのＯＳ（ゲストＯＳ）を制御することによって、テンプレートシステムに実行ファイルをインストールすることができる。例えば、プロセス検査装置１００のＯＳ（ホストＯＳ）を介してＶＭｗａｒｅ  Ｓｅｒｖｅｒのｖｍｒｕｎ．ｅｘｅにスクリプトを読ませることによって、ホストＯＳからゲストＯＳを制御することができる。
Ｓ１２４の後、処理はＳ１２５に進む。
【００５６】
Ｓ１２５において、インストール部１２１は、Ｓ１２４でインストールした実行ファイルの情報を追加または上書きすることによって、インストールリスト１０４を更新する。
例えば、図１０のインストールリスト１０４に含まれる実行ファイル「ｃａｌｃ．ｅｘｅ」の情報を上書きすることによって、図９のインストールリスト１０４が得られる。
Ｓ１２５の後、処理はＳ１２６に進む。
【００５７】
Ｓ１２６において、プロセス実行部１２２は、対象実行ファイルをテンプレートシステムに実行させる。つまり、プロセス実行部１２２は、対象実行ファイルを実行するためのプロセス（テンプレートプロセス）をテンプレートシステムに実行させる。
Ｓ１２６の後、処理はＳ１２７に進む。
【００５８】
Ｓ１２７において、メモリイメージ抽出部１２３は、Ｓ１２６で実行されたテンプレートプロセスのプロセスＩＤを特定する。
そして、メモリイメージ抽出部１２３は、特定したプロセスＩＤに基づいて、テンプレートプロセス用に確保されたメモリ領域の内容を表すテンプレートメモリイメージ１９２をテンプレートシステムのメモリから抽出する。
テンプレートメモリイメージ１９２の抽出方法は、検査メモリイメージ１９１の抽出方法（図４のＳ１１３）と同様である。
テンプレートメモリイメージ１９２は、検査メモリイメージ１９１と同様に、該当するメモリ領域の用途情報および保護情報を含む。また、テンプレートメモリイメージ１９２は、テンプレートプロセスのＰＥヘッダを含む。
Ｓ１２７の後、テンプレートメモリ抽出処理（Ｓ１２０）は終了する。
【００５９】
図２に戻り、Ｓ１３０から説明を続ける。
【００６０】
Ｓ１３０において、注入コード検出部１３０は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とを比較し、注入コードリスト１９３を生成する。
Ｓ１３０の後、処理はＳ１４０に進む。
【００６１】
以下に、注入コード検出部１３０による注入コード検出処理（Ｓ１３０）の詳細について説明する。
【００６２】
図１１は、実施の形態１における注入コード検出部１３０の機能構成図である。
図１１に示すように、注入コード検出部１３０は、静的メモリ領域比較部１３１と、動的メモリ領域比較部１３２とを備える。
静的メモリ領域比較部１３１は、検査メモリイメージ１９１が表す静的メモリ領域とテンプレートメモリイメージ１９２が表す静的メモリ領域とを比較し、静的メモリ領域の注入コードリスト１９３を生成する。静的メモリ領域とは、実行ファイルの実行の開始時に確保されるメモリ領域である。
動的メモリ領域比較部１３２は、検査メモリイメージ１９１が表す動的メモリ領域とテンプレートメモリイメージ１９２が表す動的メモリ領域とを比較し、動的メモリ領域の注入コードリスト１９３を生成する。動的メモリ領域とは、実行ファイルの実行中に確保されるメモリ領域である。
注入コードリスト１９３は、検査メモリイメージ１９１が表すメモリ領域のうち注入コードが記憶されている連続するメモリ領域（以下、注入コードブロックという）の情報を示すリストである。
【００６３】
図１２は、実施の形態１における静的メモリ領域比較部１３１による注入コード検出処理（Ｓ１３０）を示すフローチャートである。
静的メモリ領域比較部１３１による注入コード検出処理（Ｓ１３０）について、図１２に基づいて説明する。
【００６４】
Ｓ１３１１において、静的メモリ領域比較部１３１は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とのベースアドレス（先頭アドレス）を揃える。
Ｓ１３１１の後、処理はＳ１３１２に進む。
【００６５】
Ｓ１３１２において、静的メモリ領域比較部１３１は、検査メモリイメージ１９１に含まれる用途情報に基づいて、検査メモリイメージ１９１が表すメモリ領域のうちの静的メモリ領域を特定する。
そして、静的メモリ領域比較部１３１は、特定した静的メモリ領域の先頭アドレスをポインタＰに設定する。
以下、ポインタＰが示すアドレス単位（例えば、１バイトまたは４バイト）の静的メモリ領域を「静的メモリ領域［Ｐ］」と記す。
Ｓ１３１２の後、処理はＳ１３１３に進む。
【００６６】
Ｓ１３１３において、静的メモリ領域比較部１３１は、検査メモリイメージ１９１に含まれる保護情報に基づいて、検査メモリイメージ１９１のうちの静的メモリ領域［Ｐ］が実行可能なメモリ領域（実行可能領域）であるか否かを判定する。
検査メモリイメージ１９１のうちの静的メモリ領域［Ｐ］が実行可能領域である場合、処理はＳ１３１４に進む。
検査メモリイメージ１９１のうちの静的メモリ領域［Ｐ］が実行可能領域でない場合、処理はＳ１３１６に進む。
【００６７】
Ｓ１３１４において、静的メモリ領域比較部１３１は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とのそれぞれの静的メモリ領域［Ｐ］の内容を比較する。つまり、静的メモリ領域比較部１３１は、検査メモリイメージ１９１のうちの静的メモリ領域［Ｐ］のバイナリコードと、テンプレートメモリイメージ１９２のうちの静的メモリ領域［Ｐ］のバイナリコードとを比較する。
検査メモリイメージ１９１とテンプレートメモリイメージ１９２とのそれぞれの静的メモリ領域［Ｐ］の内容が同じである場合、処理はＳ１３１６に進む。
検査メモリイメージ１９１とテンプレートメモリイメージ１９２とのそれぞれの静的メモリ領域［Ｐ］の内容が異なる場合、処理はＳ１３１５に進む。
【００６８】
Ｓ１３１５において、静的メモリ領域比較部１３１は、ポインタＰが示すアドレス、つまり、検査メモリイメージ１９１が表す静的メモリ領域のうちテンプレートメモリイメージ１９２と内容が異なる静的メモリ領域のアドレスをアドレスリスト１３９に設定する（図１３参照）。
図１３は、実施の形態１におけるアドレスリスト１３９の一例を示す図である。図１３のアドレスリスト１３９は「アドレス」と「コード」とを対応付けて含んでいる。「アドレス」はポインタＰが示したアドレスを示し、「コード」はアドレス単位の静的メモリ領域の内容（プログラムコード）を示す。
Ｓ１３１５の後、処理はＳ１３１６に進む。
【００６９】
Ｓ１３１６において、静的メモリ領域比較部１３１は、検査メモリイメージ１９１に含まれる用途情報に基づいて、ポインタＰが示すアドレスが検査メモリイメージ１９１のうちの静的メモリ領域の最終アドレスであるか否かを判定する。
ポインタＰが示すアドレスが検査メモリイメージ１９１のうちの静的メモリ領域の最終アドレスである場合、処理はＳ１３１８に進む。
ポインタＰが示すアドレスが検査メモリイメージ１９１のうちの静的メモリ領域の最終アドレスでない場合、処理はＳ１３１７に進む。
【００７０】
Ｓ１３１７において、静的メモリ領域比較部１３１は、ポインタＰに設定されているアドレスを次のアドレスに更新する。
例えば、静的メモリ領域比較部１３１は、ポインタＰに設定されている現在のアドレス「４９２０Ｂ８」をカウントアップすることによって、ポインタＰが示すアドレスを次のアドレス「４９２０Ｂ９」に更新する。
Ｓ１３１７の後、処理はＳ１３１３に戻る。
【００７１】
Ｓ１３１８において、静的メモリ領域比較部１３１は、アドレスリスト１３９に基づいて注入コードリスト１９３Ｓを生成する。ここで、静的メモリ領域の注入コードリスト１９３を「注入コードリスト１９３Ｓ」と記す。
注入コードリスト１９３Ｓは、検査メモリイメージ１９１が表す静的メモリ領域のうちアドレスリスト１３９によって特定される静的メモリ領域のリストである。つまり、注入コードリスト１９３Ｓは、検査メモリイメージ１９１が表す静的メモリ領域には含まれるがテンプレートメモリイメージ１９２が表す静的メモリ領域には含まれないプログラムコード（注入コード）を特定するためのリストである。
例えば、静的メモリ領域比較部１３１は、図１３のアドレスリスト１３９に基づいて、図１４の注入コードリスト１９３Ｓを生成する。
図１４の注入コードリスト１９３Ｓは、注入コードブロックの「ブロック番号」「開始アドレス」「サイズ」を示している。
図１４は、実施の形態１における注入コードリスト１９３Ｓの一例を示す図である。
Ｓ１３１８の後、静的メモリ領域比較部１３１による注入コード検出処理（Ｓ１３０）は終了する。
【００７２】
図１５は、実施の形態１における動的メモリ領域比較部１３２による注入コード検出処理（Ｓ１３０）を示すフローチャートである。
動的メモリ領域比較部１３２による注入コード検出処理（Ｓ１３０）について、図１５に基づいて説明する。
【００７３】
Ｓ１３２１において、動的メモリ領域比較部１３２は、検査メモリイメージ１９１に含まれる用途情報に基づいて、検査メモリイメージ１９１が表すメモリ領域のうちの動的メモリ領域を特定する。
動的メモリ領域比較部１３２は、検査メモリイメージ１９１に含まれる保護情報に基づいて、検査メモリイメージ１９１が表すメモリ領域のうちの実行可能なメモリ領域（実行可能領域）を特定する。
そして、動的メモリ領域比較部１３２は、検査メモリイメージ１９１が表す動的メモリ領域のうちの連続する実行可能領域を示す情報のリストＬａを生成する。
以下、動的メモリ領域のうちの連続する実行可能領域を「実行可能ブロック」という。
【００７４】
動的メモリ領域比較部１３２は、検査メモリイメージ１９１の実行可能ブロックのリストＬａと同様に、テンプレートメモリイメージ１９２の実行可能ブロックのリストＬｂを生成する。
Ｓ１３２１の後、処理はＳ１３２２に進む。
【００７５】
Ｓ１３２２において、動的メモリ領域比較部１３２は、検査メモリイメージ１９１のリストＬａから未選択の実行可能ブロックＢａを一つ選択する。ここで、リストＬａが示す実行可能ブロックを「実行可能ブロックＢａ」と記す。
例えば、動的メモリ領域比較部１３２は、リストＬａの先頭から順番に実行可能ブロックＢａを選択する。
Ｓ１３２２の後、処理はＳ１３２３に進む。
【００７６】
Ｓ１３２３からＳ１３２７は、Ｓ１３２２で選択された実行可能ブロックＢａ毎に実行される。
【００７７】
Ｓ１３２３において、動的メモリ領域比較部１３２は、テンプレートメモリイメージ１９２のリストＬｂから未選択の実行可能ブロックＢｂを一つ選択する。ここで、リストＬｂが示す実行可能ブロックを「実行可能ブロックＢｂ」と記す。
例えば、動的メモリ領域比較部１３２は、リストＬｂの先頭から順番に実行可能ブロックＢｂを選択する。
Ｓ１３２３の後、処理はＳ１３２４に進む。
【００７８】
Ｓ１３２４において、動的メモリ領域比較部１３２は、Ｓ１３２２で選択した実行可能ブロックＢａに含まれるプログラムコードからオペコードを抽出し、抽出したオペコードのリストを生成する。
動的メモリ領域比較部１３２は、Ｓ１３２３で選択した実行可能ブロックＢｂに含まれるプログラムコードからオペコードを抽出し、抽出したオペコードのリストを生成する。
そして、動的メモリ領域比較部１３２は、実行可能ブロックＢａから抽出したオペコードのリストと実行可能ブロックＢｂから抽出したオペコードのリストとの距離Ｄを算出する。
距離Ｄは、実行可能ブロックＢａから抽出したオペコードのリストと実行可能ブロックＢｂから抽出したオペコードのリストとの類似度を表す。距離Ｄが小さいほど類似度は高い。
距離Ｄの一例として、ハミング距離およびレーベンシュタイン距離（編集距離ともいう）が挙げられる。
Ｓ１３２４の後、処理はＳ１３２５に進む。
【００７９】
Ｓ１３２５において、動的メモリ領域比較部１３２は、Ｓ１３２４で算出した距離Ｄと、あらかじめ決められた類似度の閾値θとを比較する。
距離Ｄが閾値θ以下である場合、処理はＳ１３２６に進む。
距離Ｄが閾値θより大きい場合、処理はＳ１３２７に進む。
【００８０】
Ｓ１３２６において、動的メモリ領域比較部１３２は、Ｓ１３２２で選択した実行可能ブロックＢａの情報と、Ｓ１３２３で選択した実行可能ブロックＢｂの情報と、Ｓ１３２４で算出した距離Ｄとをペアリスト１３８に設定する。
【００８１】
但し、Ｓ１３２２で選択した実行可能ブロックＢａの情報が既にペアリスト１３８に設定されている場合、動的メモリ領域比較部１３２は以下のように動作する。ここで、Ｓ１３２２で選択した実行可能ブロックＢａと共にペアリスト１３８に設定されている実行可能ブロックＢｂの情報および距離Ｄを「実行可能ブロックＢｂ’の情報」「距離Ｄ’」と記す。
動的メモリ領域比較部１３２は、ペアリスト１３８に設定されている距離Ｄ’とＳ１３２４で算出した距離Ｄとを比較する。
距離Ｄが距離Ｄ’より小さい場合、動的メモリ領域比較部１３２は、ペアリスト１３８に設定されている実行可能ブロックＢｂ’の情報を、Ｓ１３２３で選択した実行可能ブロックＢｂの情報に更新する。また、動的メモリ領域比較部１３２は、ペアリスト１３８に設定されている距離Ｄ’を、Ｓ１３２４で算出した距離Ｄに更新する。
距離Ｄが距離Ｄ’以上である場合、動的メモリ領域比較部１３２は、ペアリスト１３８に設定されている実行可能ブロックＢｂ’の情報および距離Ｄ’を更新しない。つまり、動的メモリ領域比較部１３２は、Ｓ１３２３で選択した実行可能ブロックＢｂの情報およびＳ１３２４で算出した距離Ｄをペアリスト１３８に設定しなくてよい。
【００８２】
図１６は、実施の形態１におけるペアリスト１３８の一例である。
例えば、動的メモリ領域比較部１３２は、図１６に示すようなペアリスト１３８を生成する。
図１６のペアリスト１３８は、実行可能ブロックＢａを識別するブロック番号と、実行可能ブロックＢｂを識別するブロック番号と、実行可能ブロックＢａと実行可能ブロックＢｂとの距離Ｄとを示している。
Ｓ１３２６（図１５参照）の後、処理はＳ１３２７に進む。
【００８３】
Ｓ１３２７において、動的メモリ領域比較部１３２は、Ｓ１３２２で選択した実行可能ブロックＢａについて、Ｓ１３２３で選択していない実行可能ブロックＢｂが有るか否かを判定する。
選択していない実行可能ブロックＢｂが有る場合、処理はＳ１３２３に戻る。
選択していない実行可能ブロックＢｂが無い場合、処理はＳ１３２３に進む。
【００８４】
Ｓ１３２３において、動的メモリ領域比較部１３２は、Ｓ１３２２で選択していない実行可能ブロックＢａが有るか否かを判定する。
選択していない実行可能ブロックＢａが有る場合、処理はＳ１３２２に戻る。
選択していない実行可能ブロックＢａが無い場合、処理はＳ１３２９に進む。
【００８５】
Ｓ１３２９において、動的メモリ領域比較部１３２は、検査メモリイメージ１９１のリストＬａとペアリスト１３８とに基づいて、注入コードリスト１９３Ｄを生成する。ここで、動的メモリ領域の注入コードリスト１９３を「注入コードリスト１９３Ｄ」と記す。
注入コードリスト１９３Ｄは、検査メモリイメージ１９１のリストＬａに含まれる実行可能ブロックＢａの情報のうち、ペアリスト１３８に設定されていない実行可能ブロックＢａの情報を示す。つまり、注入コードリスト１９３Ｄは、検査メモリイメージ１９１に含まれる実行可能ブロックＢａのうちテンプレートメモリイメージ１９２に含まれるいずれの実行可能ブロックＢｂとも類似しない非類似の実行可能ブロックＢａを特定するためのリストである。
例えば、動的メモリ領域比較部１３２は、図１６のペアリスト１３８に基づいて、図１７の注入コードリスト１９３Ｄを生成する。
図１７の注入コードリスト１９３Ｄは、非類似の実行可能ブロックＢａ（注入コードブロック）の「ブロック番号」「開始アドレス」「サイズ」を示している。
図１７は、実施の形態１における注入コードリスト１９３Ｄの一例を示す図である。
Ｓ１３２９の後、動的メモリ領域比較部１３２による注入コード検出処理（Ｓ１３０）は終了する。
【００８６】
図２に戻り、Ｓ１４０から説明を続ける。
【００８７】
Ｓ１４０において、注入コード検査部１４０は、注入コードリスト１９３に基づいて、検査メモリイメージ１９１が表すメモリ領域から注入コードを抽出する。
注入コード検査部１４０は、抽出した注入コード毎に、注入コードが検査ルールリスト１９４に含まれる少なくともいずれかの検査ルールに合致するか否か、つまり、注入コードがマルウェアによって生成された不正なプログラムコード（不正コード）であるか否かを判定する。
そして、注入コード検査部１４０は、不正コードを特定するための不正コードリスト１９５を生成する。
ここで、注入コードは注入コードブロックと読み替えることができ、不正コードは不正コードブロックと読み替えることができる。注入コードブロックは注入コードが記憶されている連続するメモリ領域の内容を意味し、不正コードブロックは不正コードが記憶されている連続するメモリ領域の内容を意味する。
【００８８】
図１８は、実施の形態１における検査ルールリスト１９４の一例を示す図である。
実施の形態１における検査ルールリスト１９４の一例について、図１８に基づいて説明する。
検査ルールリスト１９４は、検査ルールを識別する「ルール番号」と、「検査ルール」の内容とを示している。
ルール番号「１」の検査ルールは、ルール（１）とルール（２）とルール（３）との全てのルールに合致する注入コードが不正コードであることを意味する。
例えば、ルール（１）からルール（３）は以下のようなルールである。
ルール（１）は、実行ファイルを削除するプログラムコードを含むという特徴を意味する。
ルール（２）は、記憶されているファイルを網羅的に検索するプログラムコードを含むという特徴を意味する。
ルール（３）は、インターネットにファイルをアップロードするプログラムコードを含むという特徴を意味する。
ルール（１）からルール（３）のそれぞれが意味するプログラムコードは通常の動作を行うものであるが、これらのプログラムコードを全て含む抽入コードは不正コードである可能性が高い。
【００８９】
図１９は、実施の形態１における不正コードリスト１９５の一例を示す図である。
実施の形態１における不正コードリスト１９５の一例について、図１９に基づいて説明する。
不正コードリスト１９５は、不正コードブロックの「コード番号」「開始アドレス」「サイズ」を示し、不正コードブロックが該当する検査ルールの「ルール番号」を示している。
Ｓ１４０（図２参照）の後、処理はＳ１５０に進む。
【００９０】
Ｓ１５０において、検査結果出力部１５０は、不正コードリスト１９５に基づいて検査結果ファイル１９６を生成し、生成した検査結果ファイル１９６を出力する。例えば、検査結果出力部１５０は、検査結果ファイル１９６の内容を表示装置に表示する。
検査結果ファイル１９６は、プロセス指定情報１０１によって指定された対象プロセスのプロセスＩＤ、対象プロセスに不正コードが含まれるか否かを示す情報、対象プロセスに含まれる不正コードの情報などを含む。
Ｓ１５０の後、プロセス検査方法の処理は終了する。
【００９１】
図２０は、実施の形態１におけるテンプレートシステム更新部１６０の機能構成図である。
実施の形態１におけるテンプレートシステム更新部１６０の機能構成について、図２０に基づいて説明する。
【００９２】
テンプレートシステム更新部１６０は、実行ファイルリスト生成部１６１と、インストールリスト確認部１６２と、実行ファイル取得部１６３と、インストール部１６４とを備える。
実行ファイルリスト生成部１６１は、対象システムにインストールされている実行ファイルのリストを生成する。以下、対象システムにインストールされている実行ファイルのリストを「実行ファイルリスト１６９」という。
インストールリスト確認部１６２は、実行ファイルリスト１６９とインストールリスト１０４とに基づいて、対象システムにインストールされているがテンプレートシステムにインストールされていない実行ファイルを特定する。
実行ファイル取得部１６３は、インストールリスト確認部１６２によって特定された実行ファイルを取得する。
インストール部１６４は、実行ファイル取得部１６３によって取得された実行ファイルをテンプレートシステムにインストールし、インストールリスト１０４を更新する。
【００９３】
図２１は、実施の形態１におけるテンプレートシステム更新部１６０によるテンプレートシステム更新処理を示すフローチャートである。
テンプレートシステム更新部１６０は、図２１に示すテンプレートシステム更新処理を定期的に実行する。
【００９４】
Ｓ１６１において、実行ファイルリスト生成部１６１は、対象システムにインストールされている実行ファイルの情報を示す実行ファイルリスト１６９を生成する。
実行ファイルリスト１６９は、対象システムにインストールされている実行ファイルの名前、パス、バージョン、メッセージダイジェストなどを含む（図２２参照）。なお、実行ファイルリスト生成部１６１は、ＭＤ５、ＳＨＡ１またはＳＨＡ２５６などのハッシュ関数を演算することによって、メッセージダイジェストを算出する。
図２２は、実施の形態１における実行ファイルリスト１６９の一例を示す図である。
Ｓ１６１の後、処理はＳ１６２に進む。
【００９５】
Ｓ１６２において、インストールリスト確認部１６２は、実行ファイルリスト１６９に含まれる実行ファイルのうち、インストールリスト１０４に含まれない実行ファイルを特定する。
【００９６】
例えば、図２２の実行ファイルリスト１６９と図１０のインストールリスト１０４とを比較した場合、実行ファイルリスト１６９とインストールリスト１０４との両方に実行ファイル「ｃａｌｃ．ｅｘｅ」「ｎｅｔｅｐａｄ．ｅｘｅ」「ｅｘｐｌｏｒｅｒ．ｅｘｅ」「ｕｓｅｒ３２．ｄｌｌ」「ｋｅｒｎｅｌ３２．ｄｌｌ」が含まれる。
但し、実行ファイルリスト１６９に含まれる「ｃａｌｃ．ｅｘｅ」とインストールリスト１０４に含まれる「ｃａｌｃ．ｅｘｅ」とはバージョンおよびメッセージダイジェストが異なる。
したがって、インストールリスト確認部１６２は、インストールリスト１０４に含まれない実行ファイルとして、実行ファイルリスト１６９に含まれる実行ファイル「ｃａｌｃ．ｅｘｅ」を特定する。
Ｓ１６２の後、処理はＳ１６３に進む。
【００９７】
Ｓ１６３において、実行ファイル取得部１６３は、Ｓ１６２で特定された実行ファイルを取得する。例えば、実行ファイル取得部１６３は、インターネットを介してファイルサーバから実行ファイルを取得する。
Ｓ１６３の後、処理はＳ１６４に進む。
【００９８】
Ｓ１６４において、インストール部１６４は、Ｓ１６３で取得された実行ファイルに対してウィルス検査を行い、その実行ファイルがウィルスに感染しているか否かを判定する。
例えば、インストール部１６４は、フリーまたは市販のアンチウィルスソフトを実行することによって、ウィルス検査を行う。
実行ファイルがウィルスに感染していると判定した場合、インストール部１６４は、テンプレートシステムにインストールすべき実行ファイルがウィルスに感染していることを知らせる警告を出力する。そして、テンプレートシステム更新処理は終了する。
実行ファイルがウィルスに感染していないと判定した場合、処理はＳ１６５に進む。
【００９９】
Ｓ１６５において、インストール部１６４は、Ｓ１６３で取得された実行ファイルをテンプレートシステムにインストールする。
但し、Ｓ１６３で取得された実行ファイルと同じ名前の実行ファイル（同名ファイル）がテンプレートシステムにインストールされている場合、インストール部１２１はその同名ファイルをアンインストールした後に、取得された実行ファイルをインストールする。
テンプレートシステムとして機能する仮想マシンのＯＳ（ゲストＯＳ）を制御することによって、テンプレートシステムに実行ファイルをインストールすることができる。例えば、プロセス検査装置１００のＯＳ（ホストＯＳ）を介してＶＭｗａｒｅ  Ｓｅｒｖｅｒのｖｍｒｕｎ．ｅｘｅにスクリプトを読ませることによって、ホストＯＳからゲストＯＳを制御することができる。
Ｓ１６５の後、処理はＳ１６６に進む。
【０１００】
Ｓ１６６において、インストール部１６４は、Ｓ１６５でインストールした実行ファイルの情報を追加または上書きすることによって、インストールリスト１０４を更新する。
例えば、図１０のインストールリスト１０４に含まれる実行ファイル「ｃａｌｃ．ｅｘｅ」の情報を上書きすることによって、図９のインストールリスト１０４が得られる。
Ｓ１６６の後、テンプレートシステム更新処理は終了する。
【０１０１】
図２３は、実施の形態１におけるプロセス検査装置１００のハードウェア構成の一例を示す図である。
実施の形態１におけるプロセス検査装置１００のハードウェア構成の一例について、図２３に基づいて説明する。
【０１０２】
プロセス検査装置１００は、演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５を備えるコンピュータである。
演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５はバス９０９に接続している。
【０１０３】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
補助記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリまたはハードディスク装置である。
主記憶装置９０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、有線または無線でインターネット、ＬＡＮ（ローカルエリアネットワーク）、電話回線網またはその他のネットワークを介して通信を行う。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【０１０４】
プログラムは、通常は補助記憶装置９０２に記憶されており、主記憶装置９０３にロードされ、演算装置９０１に読み込まれ、演算装置９０１によって実行される。
例えば、オペレーティングシステム（ＯＳ）が補助記憶装置９０２に記憶される。また、「〜部」として説明している機能を実現するプログラム（プロセス検査プログラムの一例）が補助記憶装置９０２に記憶される。そして、ＯＳおよび「〜部」として説明している機能を実現するプログラムは主記憶装置９０３にロードされ、演算装置９０１によって実行される。「〜部」は「〜処理」「〜工程」と読み替えることができる。
【０１０５】
「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等の処理の結果を示す情報、データ、信号値または変数値が主記憶装置９０３または補助記憶装置９０２にファイルとして記憶される。また、プロセス検査装置１００が使用するその他のデータが主記憶装置９０３または補助記憶装置９０２に記憶される。
【０１０６】
また、図２３は実施の形態１におけるプロセス検査装置１００のハードウェア構成の一例を示すものであり、プロセス検査装置１００のハードウェア構成は図２３に示す構成と異なる構成であってもよい。
なお、実施の形態１に係る方法（プロセス検査方法の一例）は、フローチャート等を用いて説明している手順、または、それとは一部異なる手順によって実現することができる。
【０１０７】
実施の形態１において、例えば、以下のようなプロセス検査装置１００について説明した。
プロセス検査装置１００は、検査メモリイメージ１９１とテンプレートメモリイメージ１９２とを比較することによって、対象システムのメモリ領域（動的メモリ領域を含む）に生成された注入コードを特定する。
プロセス検査装置１００は、検査ルールリスト１９４に基づいて注入コードを解析することによって、不審な注入コードのみを不正コードとして特定し、不正コードの誤検知を減らすことができる。
プロセス検査装置１００は、テンプレートシステム更新部１６０によってテンプレートシステムを定期的に更新するため、実行ファイルを実行するためのプロセスに関する正しい属性情報が不要である。
【０１０８】
実施の形態２．
実施の形態１では、プロセス検査装置１００が対象システムおよびテンプレートシステムとして機能する形態について説明した。
実施の形態２では、対象システムとして機能する装置と、テンプレートシステムとして機能する装置とが異なる形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【０１０９】
図２４は、実施の形態２におけるプロセス検査システム２００の構成図である。
実施の形態２におけるプロセス検査システム２００の構成について、図２４に基づいて説明する。
【０１１０】
プロセス検査システム２００は、プロセス検査クライアント２１０とプロセス検査サーバ２２０（プロセス検査装置の一例）とを備える。
プロセス検査クライアント２１０およびプロセス検査サーバ２２０は、ネットワーク２０１を介して互いに通信を行う。インターネットまたは社内ＬＡＮ（ローカルエリアネットワーク）はネットワーク２０１の一例である。
【０１１１】
プロセス検査クライアント２１０は、対象システムとして機能するコンピュータである。
プロセス検査クライアント２１０は、検査メモリ抽出部１１０と、プロセス検査要求部２１１と、クライアント記憶部２１９とを備える。
検査メモリ抽出部１１０は、実施の形態１で説明したプロセス検査装置１００の機能構成と同じものである。
プロセス検査要求部２１１は、検査メモリ抽出部１１０によって生成される検査メモリイメージ１９１および実行ファイル情報１０３をプロセス検査サーバ２２０へ送信し、プロセス検査サーバ２２０から検査結果ファイル１９６を受信する。
クライアント記憶部２１９は、プロセス検査クライアント２１０の記憶部である。
【０１１２】
図２５は、実施の形態２におけるプロセス検査サーバ２２０の機能構成図である。
実施の形態２におけるプロセス検査サーバ２２０の機能構成について、図２５に基づいて説明する。
【０１１３】
プロセス検査サーバ２２０（プロセス検査装置の一例）は、テンプレートシステムとして機能するコンピュータである。
プロセス検査サーバ２２０は、実施の形態１で説明したプロセス検査装置１００の機能構成（検査メモリ抽出部１１０、装置記憶部１９０を除く）の他に、プロセス検査受付部２２１とサーバ記憶部２２９とを備える。
プロセス検査受付部２２１（第一のメモリイメージ取得部の一例）は、プロセス検査クライアント２１０から検査メモリイメージ１９１と実行ファイル情報１０３とを受信し、検査結果ファイル１９６をプロセス検査サーバ２２０へ送信する。
サーバ記憶部２２９は、プロセス検査サーバ２２０の記憶部である。
【０１１４】
図２６は、実施の形態２におけるプロセス検査方法を示すフローチャートである。
実施の形態２におけるプロセス検査方法について、図２６に基づいて説明する。
【０１１５】
図２６のフローチャートは、実施の形態１（図２参照）で説明した処理に加えて、Ｓ２１０からＳ２４０を備える。
【０１１６】
Ｓ１１０において、プロセス検査クライアント２１０の検査メモリ抽出部１１０は、検査メモリイメージ１９１および実行ファイル情報１０３を生成する。
検査メモリイメージ１９１および実行ファイル情報１０３の生成方法は実施の形態１で説明した通りである。
Ｓ１１０の後、処理はＳ２１０に進む。
【０１１７】
Ｓ２１０において、プロセス検査クライアント２１０のプロセス検査要求部２１１は、検査メモリイメージ１９１および実行ファイル情報１０３をプロセス検査サーバ２２０へ送信する。
Ｓ２１０の後、処理はＳ２２０に進む。
【０１１８】
Ｓ２２０において、プロセス検査サーバ２２０のプロセス検査受付部２２１は、プロセス検査クライアント２１０から検査メモリイメージ１９１および実行ファイル情報１０３を受信する。
Ｓ２２０の後、処理はＳ１３０に進む。
【０１１９】
Ｓ１３０からＳ１５０において、プロセス検査サーバ２２０は検査結果ファイル１９６を生成する。
検査結果ファイル１９６の生成方法は実施の形態１で説明した通りである。
Ｓ１５０の後、処理はＳ２３０に進む。
【０１２０】
Ｓ２３０において、プロセス検査サーバ２２０のプロセス検査受付部２２１は、検査結果ファイル１９６をプロセス検査クライアント２１０へ送信する。
Ｓ２３０の後、処理はＳ２４０に進む。
【０１２１】
Ｓ２４０において、プロセス検査クライアント２１０のプロセス検査要求部２１１は、プロセス検査サーバ２２０から検査結果ファイル１９６を受信し、受信した検査結果ファイル１９６を出力する。例えば、プロセス検査要求部２１１は、検査結果ファイル１９６の内容を表示装置に表示する。
Ｓ２４０の後、プロセス検査方法の処理はする。
【０１２２】
実施の形態２により、遠隔に存在するクラウド（プロセス検査サーバ２２０）でプロセス検査を行うことができる。つまり、一台のプロセス検査サーバ２２０によって複数台のプロセス検査クライアント２１０のプロセスを検査することができる。また、テンプレートシステムの管理に要するコストを削減することができる。
例えば、社内システムのコンピュータの環境が統一されている場合、社内システムに１台のテンプレートシステム（プロセス検査サーバ２２０）を設けることにより、社内システムの複数のコンピュータのプロセスを検査することができる。コンピュータの環境とは、ＯＳのバージョン、パッチの導入状態、インストールされるアプリケーションなどを意味する。
【０１２３】
各実施の形態は、プロセス検査装置１００およびプロセス検査システム２００の形態の一例である。
つまり、プロセス検査装置１００およびプロセス検査システム２００は、各実施の形態で説明した機能または構成の一部を備えなくても構わない。
また、プロセス検査装置１００およびプロセス検査システム２００は、各実施の形態で説明していない機能または構成を備えても構わない。
さらに、各実施の形態は、矛盾が生じない範囲で一部または全てを組み合わせても構わない。
【符号の説明】
【０１２４】
１００  プロセス検査装置、１０１  プロセス指定情報、１０２  実行プロセスリスト、１０３  実行ファイル情報、１０４  インストールリスト、１１０  検査メモリ抽出部、１１１  プロセス監視部、１１２  メモリイメージ抽出部、１２０  テンプレートメモリ抽出部、１２１  インストール部、１２２  プロセス実行部、１２３  メモリイメージ抽出部、１３０  注入コード検出部、１３１  静的メモリ領域比較部、１３２  動的メモリ領域比較部、１３８  ペアリスト、１３９  アドレスリスト、１４０  注入コード検査部、１５０  検査結果出力部、１６０  テンプレートシステム更新部、１６１  実行ファイルリスト生成部、１６２  インストールリスト確認部、１６３  実行ファイル取得部、１６４  インストール部、１６９  実行ファイルリスト、１７０  検査ルール更新部、１８０  テンプレートシステム制御部、１９０  装置記憶部、１９１  検査メモリイメージ、１９２  テンプレートメモリイメージ、１９３  注入コードリスト、１９４  検査ルールリスト、１９５  不正コードリスト、１９６  検査結果ファイル、２００  プロセス検査システム、２０１  ネットワーク、２１０  プロセス検査クライアント、２１１  プロセス検査要求部、２１９  クライアント記憶部、２２０  プロセス検査サーバ、２２１  プロセス検査受付部、２２９  サーバ記憶部、９０１  演算装置、９０２  補助記憶装置、９０３  主記憶装置、９０４  通信装置、９０５  入出力装置、９０９  バス。
【図１】
0006000465.tif 000002
【図２】
0006000465.tif 000003
【図３】
0006000465.tif 000004
【図４】
0006000465.tif 000005
【図５】
0006000465.tif 000006
【図６】
0006000465.tif 000007
【図７】
0006000465.tif 000008
【図８】
0006000465.tif 000009
【図９】
0006000465.tif 000010
【図１０】
0006000465.tif 000011
【図１１】
0006000465.tif 000012
【図１２】
0006000465.tif 000013
【図１３】
0006000465.tif 000014
【図１４】
0006000465.tif 000015
【図１５】
0006000465.tif 000016
【図１６】
0006000465.tif 000017
【図１７】
0006000465.tif 000018
【図１８】
0006000465.tif 000019
【図１９】
0006000465.tif 000020
【図２０】
0006000465.tif 000021
【図２１】
0006000465.tif 000022
【図２２】
0006000465.tif 000023
【図２３】
0006000465.tif 000024
【図２４】
0006000465.tif 000025
【図２５】
0006000465.tif 000026
【図２６】
0006000465.tif 000027