(57)【要約】【課題】ユーザのＰＣ操作に影響を与えることなく、ファイルのハッシュ値を算出する。【解決手段】任意のプログラムからファイルに対する複数のアクセス要求をインターセプトするインターセプト手段と、前記インターセプト手段によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得手段とを有する情報処理装置が提供される。【選択図】図５
2018092281.tif 000002
【特許請求の範囲】
【請求項１】
任意のプログラムからファイルに対する複数のアクセス要求をインターセプトするインターセプト手段と、
前記インターセプト手段によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得手段と
を有することを特徴とする情報処理装置。
【請求項２】
更に、
前記インターセプト手段にてインターセプトされたアクセス要求から、一時ハッシュ値を算出する算出手段と、
前記算出手段にて算出された一時ハッシュ値をリストに記憶する記憶手段と、
を有し、
前記算出手段は、前記インターセプト手段にてインターセプトされた他のアクセス要求から一時ハッシュ値を算出し、前記リストに記憶されている一時ハッシュ値とマージして、当該ファイルのハッシュ値を算出すること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
更に、
前記インターセプト手段にてインターセプトされたアクセス要求から、一時ハッシュ値を算出する算出手段と、
を有し、
前記算出手段は、算出された前記一時ハッシュ値とリストに記憶されている一時ハッシュ値とをマージして、当該ファイルのハッシュ値を算出すること
を特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記取得手段は、前記インターセプト手段にてインターセプトされたアクセス要求から、当該ファイルに関するファイル情報を取得すること
を特徴とする請求項１ないし３に記載の情報処理装置。
【請求項５】
前記取得手段は、前記ファイル情報から、書き込みデータのサイズまたは読み込みデータのサイズを抽出し、抽出されたサイズに基づいて、書き込みデータまたは読み込みデータから、一時ハッシュ値を算出することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記取得手段は、前記ファイル情報からファイルを識別する情報を抽出し、前記ファイルを識別する情報と一時ハッシュ値とを対応付けて、前記リストに記憶することを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
前記インターセプト手段は、
ファイルシステムフィルタドライバ、またはＡＰＩフックであることを特徴とする請求項１ないし６に記載の情報処理装置。
【請求項８】
前記アクセス要求は、前記ファイルに対する書き込み要求、前記ファイルに対する読み込み要求、及び前記ファイルに対する閉じる要求のうちの少なくとも１つである
ことを特徴とする請求項１ないし７に記載の情報処理装置。
【請求項９】
任意のプログラムからファイルに対する複数のアクセス要求をインターセプトするインターセプト工程と、
前記インターセプト工程によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得工程と
を有することを特徴とする情報処理方法。
【請求項１０】
コンピュータを、
任意のプログラムからファイルに対する複数のアクセス要求をインターセプトするインターセプト手段と、
前記インターセプト手段によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得手段として機能させることを特徴とするコンピュータプログラム。
【請求項１１】
複数の情報処理装置と、当該複数の情報処理装置から収集されるファイルのハッシュ値を管理するサーバ装置とを備えたシステムであって、
前記複数の情報処理装置のそれぞれは、
任意のプログラムから前記ファイルに対する複数のアクセス要求をインターセプトするインターセプト手段と、前記インターセプト手段によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得手段と、前記取得されたファイルのハッシュ値を前記サーバ装置に送信する送信手段と
を有し、
前記サーバ装置は、前記複数の情報処理装置から送信された前記ファイルのハッシュ値を受信する受信手段を有すること
を特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法、プログラム、およびシステムに関し、特にファイルのハッシュ値を取得する技術に関する。
【背景技術】
【０００２】
近年、コンピュータやコンピュータ利用者に害を成す不正な動作を行うコンピュータプログラム(以下、マルウェアという)が蔓延している。このような背景によって、マルウェアを検知し駆除する技術が開発されている。
【０００３】
マルウェアを検出する方法には、ファイルのメタ情報（タイムスタンプなど）を比較して行う方法や、ファイルの内容（バイナリーデータ、抽出したテキストデータなど）を比較して行う方法が知られている。また、元のデータを直接比較すると時間がかかるため、MD5（Message Digest Algorithm 5）やSHA（Secure Hash Algorithm）などのアルゴリズムを使用して元のデータからハッシュ値を算出し、ハッシュ値を比較することでマルウェアか否かの識別を行っている。
【０００４】
例えば特許文献１では、画像ファイルの一致性を判断する際、まず、ファイルサイズが一致する画像ファイルを特定し、サイズの一致する画像ファイルが存在すれば、当該画像ファイルの先頭部分を要約した部分ハッシュ値を算出し、これを比較する。そして、部分ハッシュ値が一致すれば、さらに、画像ファイル全体を要約した全ハッシュ値を算出し、これを比較する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２０１８６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ファイルのメタ情報を比較してマルウェアの判断を行う方法は、実際にはマルウェアでないファイルをマルウェアと誤検出する可能性が高い。それに比べてファイルの内容を比較してマルウェアの判断を行う方法は、精度が高い。しかし、ハッシュ値を使用して比較を行うにしても、ファイル全体からハッシュ値を計算すると、ファイル全体を読み込む必要があるためパソコン（以下、ＰＣという）に高負荷がかかり、ユーザのＰＣ操作に影響を与えてしまう、という課題がある。
【０００７】
そこで、本発明は、上記の課題または他の課題のうち少なくとも１つを解決することを目的とする。たとえば、本発明は、ユーザのＰＣ操作に影響を与えることなく、ファイルのハッシュ値を、取得することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、たとえば、
任意のプログラムからファイルに対する複数のアクセス要求をインターセプトするインターセプト手段と、
前記インターセプト手段によりインターセプトされた複数のアクセス要求に基づいて当該ファイルのハッシュ値を取得する取得手段と
を有することを特徴とする情報処理装置を提供する。
【発明の効果】
【０００９】
本発明によれば、ユーザのＰＣ操作に影響を与えることなく、ファイルのハッシュ値を取得することが可能である。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムのブロック図
【図２】クライアント端末装置のハードウェア構成図
【図３】サーバ装置のハードウェア構成図
【図４】ファイルシステムドライバへのアクセス要求を検出するためのプログラム構造を示す図
【図５】書き込み要求発生時の処理を示すフローチャート
【図６】閉じる要求発生時の処理を示すフローチャート
【図７】読み込み要求発生時の処理を示すフローチャート
【図８】閉じる要求発生時の処理を示すフローチャート
【図９】リストの一例を示す図
【図１０】リストの一例を示す図
【図１１】ホワイトリストを設定するための画面例を示す図
【図１２】ハッシュ値の検索を行うための画面例を示す図
【図１３】リストの一例を示す図
【図１４】位置情報の一例を示す図
【発明を実施するための形態】
【００１１】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００１２】
［第一の実施形態］
＜システム構成図＞
先ず、本実施形態に係る情報処理システム構成について、図１のシステム構成図を用いて説明する。図１に示す如く、本実施形態に係る情報処理システムは、コンピュータすなわち情報処理装置１１０、１２０を有しており、それぞれの情報処理装置はＬＡＮやインターネットなどのネットワーク１３０に接続されている。以下、情報処理装置１１０をクライアント端末装置、情報処理装置１２０をサーバ装置と呼称する。なお、クライアント端末装置１１０は複数でもよい。また、クライアント端末装置１１０、サーバ装置１２０は、ＰＣ、携帯端末装置等の、情報処理装置が行うものとして後述する各処理を実行可能な装置であれば、如何なる装置であっても構わない。また、クライアント端末装置１１０はネットワーク１３０を介して接続されているが、ネットワーク１３０を介さないスタンドアローンでもよい。
【００１３】
＜クライアント端末装置１１０＞
本実施形態に係るクライアント端末装置１１０のハードウェア構成について図２を用いて説明する。クライアント端末装置１１０、サーバ装置１２０は何れも同じハードウェア構成を有するもとして説明する。然るに、ハードウェア構成についてはクライアント端末装置１１０を例にとり説明する。ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１は、ＲＡＭ１２やＲＯＭ１３に格納されているコンピュータプログラムやデータを用いて各種の処理を実行することで、本装置全体の動作制御を行うと共に、本装置が行うものとして後述する各処理を実行する。
【００１４】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２は、記憶装置１６からロードされたコンピュータプログラム（セキュリティソフトウェア１１１）やデータを一時的に記憶するためのエリアや、Ｉ／Ｆ（インターフェース）１７を介して外部機器から受信した各種のデータを一時的に記憶するためのエリアを有する。更にＲＡＭ１２は、ＣＰＵ１１が各種の処理を実行する際に用いるワークエリアも有する。このようにＲＡＭ１２は、各種のエリアを適宜提供することができる。ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３には、本装置の設定データやブートプログラムなどが格納されている。
【００１５】
操作部１４は、マウスやキーボードなどにより構成されており、本装置の操作者が操作することで、各種の指示をＣＰＵ１１に対して入力することができる。表示部１５は、ＣＲＴや液晶画面などにより構成されており、ＣＰＵ１１による処理結果を画像や文字などでもって表示することができる。記憶装置１６は、ハードディスクドライブ装置に代表される大容量情報記憶装置である。この記憶装置１６には、ＯＳ（オペレーティングシステム）や、本装置が行うものとして後述する各処理をＣＰＵ１１に実行させるためのコンピュータプログラムやデータが保存されている。このコンピュータプログラムには、セキュリティソフトウェア１１１が含まれている。セキュリティソフトウェア１１１は、クライアント端末１１０のデータやプログラム等の安全を確保するセキュリティ管理のためのプログラムであり、たとえば機器の接続の可否の設定に応じてその機器の接続を制限したり、通信の可否の設定に応じて通信を制限したりする機能を有する。記憶装置１６に保存されているコンピュータプログラムやデータは、ＣＰＵ１１による制御に従って適宜ＲＡＭ１２にロードされ、ＣＰＵ１１による処理対象となる。Ｉ／Ｆ１７は、本装置を上記のネットワーク１２０に接続するためのもので、本装置はこのＩ／Ｆ１７を介してネットワーク１２０に接続されている外部機器とのデータ通信を行うことができる。上記の各部は何れも、バス１８に接続されている。
【００１６】
上記構成において、クライアント端末装置１１０の電源がＯＮになると、ＣＰＵ１１はＲＯＭ１３のブートプログラムにしたがって動作を開始し、記憶装置１６にアクセスし、ＯＳをＲＡＭ１２上にロードする。さらに、操作部１４および表示部１５によるユーザインタフェースが機能し始め、クライアント端末装置１１０が各種の手段として機能することとなる。
【００１７】
なお、このとき、記憶装置１６にインストールされたセキュリティソフト１１１は、ファイルに対するアクセス要求(たとえば、書き込み要求、読み込み要求、閉じる要求) を捕捉するフィルタドライバ４０２、および、アクセス要求を検出してログを作成するログ生成プログラム４０４を起動する。なお、フィルタドライバ４０２、ログ生成プログラム４０４については、後述する。
【００１８】
この結果、クライアント端末装置１１０が備えるファイルシステムへのアクセスの監視とアクセスログの取得、ならびに、予め設定されたネットワーク上のサーバ装置１２０に対し、アクセスログ（操作ログ）の転送が可能となる。  また、以下説明では、後述するファイルシステムドライバ４０３に対して発行される要求をアクセス要求としているが、アクセス要求に対するファイルシステムドライバからの返答（リターン）もアクセス要求に含まれる。
【００１９】
＜サーバ装置１２０＞
サーバ装置１２０のハードウェア構成は、図３に示す如く、上記で説明したクライアント端末装置１１０のハードウェア構成と同様であるとする。即ち、サーバ装置１２０のＣＰＵ１１は、サーバ装置１２０の記憶装置１６に保存されているコンピュータプログラムやデータを用いて、サーバ装置１２０のＩ／Ｆ１７を介して外部機器とのデータ通信を行うと共に、サーバ装置１２０が行うものとして後述する各処理を実行する。このコンピュータプログラムには、ログ処理部１２１が含まれている。ログ処理部１２１は、クライアント端末装置１１０から送信されるアクセスログ含む操作ログを処理、記憶するためのプログラムである。なお、クライアント端末装置１１０から送信されたＰＣの操作ログをサーバ装置１２０の記憶装置１６が一括して処理、記憶する代わりに、それぞれのクライアント端末装置１１０が自身の操作ログを記憶装置１６に記憶し処理しても構わない。然るにこのような場合には、サーバ装置１２０は必須ではない。
【００２０】
＜セキュリティソフトウェア１１１の処理＞
次に、クライアント端末装置１１０の記憶装置１６に保存されている、セキュリティソフトウェア１１１について説明する。
【００２１】
図４は、ファイルシステムドライバへのアクセス要求を検出するためのプログラム構造を示す図である。ファイルシステムは、一般に、論理ドライブごとに存在する。また、アプリケーションプログラム４０１は、ファイルシステムドライバ４０３を介してファイルシステムにアクセスする。ファイルシステムドライバ４０３は、たとえば、「ＮＴＦＳ」や「ＦＡＴ」「ＦＡＴ３２」といったファイルシステムを操作するためのドライバである。
【００２２】
本実施形態では、アプリケーションプログラム４０１とファイルシステムドライバ４０３との間にフィルタドライバ４０２が配置されている。フィルタドライバ４０２は、ファイルシステムドライバ４０３に対して発行されるアクセス要求をすべて監視し、捕捉することができるため、捕捉したアクセス要求に含まれている情報の抽出アクセス要求の改変、アクセス要求の破棄等を行うことができる。通常、フィルタドライバ４０２は、アクセス要求をファイルシステムドライバ４０３に転送する。
【００２３】
フィルタドライバ４０２は、アクセス要求に含まれている情報を抽出し、ログ生成プログラム４０４に転送する。これにより、ログ生成プログラム４０４は、アプリケーションプログラム４０１が、何時、どのようなファイルへアクセスしたか、アクセスしたファイルのハッシュ値等を含むアクセスログを作成することができる。また、ログ生成プログラム４０４は、アクセスログを含む操作ログをサーバ装置１２０に送信する。
【００２４】
図４において、アプリケーションプログラム４０１は、たとえば、文書編集アプリケーション、表計算アプリケーションなどのアプリケーションプログラムであるが、ウイルスプログラムであってもよい。フィルタドライバ４０２は、アプリケーションプログラム４０１からファイルシステムドライバ４０３へのアクセス要求を捕捉（以下、インターセプトという）して、アクセス要求から抽出した情報を処理し、ログ生成プログラム４０４に転送する。ここで、ログ生成プログラム４０４に転送される情報としては、どのアプリケーション（例：プロセス名）から、どのファイルシステムのどのファイル（例：パス名を含むファイル名）にアクセス要求があったかを特定可能な情報である。また、フィルタドライバ４０２は、アクセス要求だけではなく、すべてのファイルシステムの処理を監視し、補足することも可能である。その場合、ログ生成プログラム４０４は、クライアント端末装置１１０における操作のログ（操作ログ）を作成することができる。  ここで、フィルタドライバ４０２がインターセプトするアクセス要求について説明する。たとえば、アプリケーション４０１がファイルＡをコピーしてファイルＢを作成する場合、フィルタドライバ４０２は、ファイルＡを開く／ファイルＢを作成するためのアクセス要求（例：ＩＲＰ＿ＭＪ＿ＣＲＥＡＴＥ）、ファイルＡの内容を読み込むためのアクセス要求（例：ＩＲＰ＿ＭＪ＿ＲＥＡＤ）ファイルＡの内容をファイルＢに書き込むためのアクセス要求（例：ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ）、ファイルＡまたはファイルＢを閉じるためのアクセス要求（例：ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ）等のアクセス要求をインターセプトすることができる。
【００２５】
また、ファイルＡをコピーしてファイルＢを作成する（ファイルのコピー）以外に、ファイルの新規作成、ファイルを開く、ファイルの移動、ファイルの上書き保存等の場合に発生するアクセス要求を、フィルタドライバ４０２はインターセプトすることができる。
【００２６】
たとえば、アプリケーション４０１がファイルを新規作成した場合、フィルタドライバ４０２は、ＩＲＰ＿ＭＪ＿ＣＲＥＡＴ  →  ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ  →  ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ  →  ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ  の順にアクセス要求をインターセプトし、ファイルを閉じるためのアクセス要求（ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ）までに発生した、ファイルに書き込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ）からハッシュ値を算出する。
【００２７】
また、たとえば、アプリケーション４０１がファイルを開いた場合、フィルタドライバ４０２は、ＩＲＰ＿ＭＪ＿ＣＲＥＡＴ  →  ＩＲＰ＿ＭＪ＿ＲＥＡＤ  →  ＩＲＰ＿ＭＪ＿ＲＥＡＤ  →  ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ  の順にアクセス要求をインターセプトし、ファイルを閉じるためのアクセス要求（ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ）までに発生した、ファイルを読み込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＲＥＡＤ）からハッシュ値を算出する。
【００２８】
また、たとえば、ファイルのコピー、ファイルの移動、ファイルの上書き保存の場合、フィルタドライバ４０２は、ＩＲＰ＿ＭＪ＿ＣＲＥＡＴ  →  ＩＲＰ＿ＭＪ＿ＲＥＡＤ  →  ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ  →  ＩＲＰ＿ＭＪ＿ＲＥＡＤ  →  ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ  の順にアクセス要求をインターセプトし、ハッシュ値を算出するために、ファイルを閉じるためのアクセス要求（ＩＲＰ＿ＭＪ＿ＣＬＥＡＮＵＰ）までに発生した、ファイルに書き込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ）、ファイルを読み込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＲＥＡＤ）からハッシュ値を算出する。
【００２９】
なお、上述したアクセス要求は一例であり、読み込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＲＥＡＤ）や書き込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ）は、複数回発生する場合もあるし、１回だけの場合もある。
【００３０】
＜ハッシュ値の取得処理＞
ハッシュ値を取得するために、フィルタドライバ４０２が行う処理について、図５〜図８を用いてより詳しく説明する。
【００３１】
フィルタドライバ４０２は、ファイルのハッシュ値を取得するために、ファイルに書き込むためのアクセス要求（書き込み要求）／ファイルを読み込むためのアクセス要求（読み込み要求）から、ファイルを閉じるためのアクセス要求（閉じる要求）までの間に取得したアクセス要求から一時ハッシュ値を求め、求められた一時ハッシュ値をマージすることで、ファイルのハッシュ値を取得することができる。一時ハッシュ値とは、ファイルの一時的なハッシュ値であり、複数の一時ハッシュ値をマージすることで、ファイルのハッシュ値を求めることができる。すなわち、複数のアクセス要求（書き込み／読み込み要求、閉じる要求）に基づいてファイルのハッシュ値を取得することができる。
【００３２】
また、アクセス要求からファイルのハッシュ値を取得することで、従来のようにファイル全体を読み込んでハッシュ値を取得することに比べて、ユーザのＰＣ操作に影響を与えることがない。また、アクセス要求からファイルのハッシュ値を取得することで、従来のようにファイル全体を読み込んでハッシュ値を取得することに比べて、より早く最新のファイルのハッシュ値を取得することができる。
【００３３】
また、アクセス要求（書き込み要求、読み込み要求、閉じる要求等）は、複数のファイルに対してたえず発行される。そこで、ファイルを識別する情報（ファイル名、ファイルパス等）と対応付けて後述するリスト（９００、１０００、１３００）を参照することで、各ファイルのハッシュ値を取得することができる。
【００３４】
図１３は、書込み要求と読み込み要求から一時ハッシュ値等を保存するリストの一例を示す図である。リスト１３００は、同一ファイルに対し書き込み／読み込み要求が発生する毎に、算出したハッシュ値を一時保存しておくリストである。リスト１３００は、ファイルを識別する情報、たとえば、ファイル名、ファイルパス、ファイルハンドルなどをキーとして一時ハッシュ値と紐づけて記憶されている。また、書き込み／読み込まれたデータ情報、たとえば、書き込み／読み込みを示す情報（アクセス要求）、書き込み／読み込んだデータのサイズ（現在までに書き込み／読み込み要求毎のサイズを足した値）、書き込み／読み込みファイル全体のサイズ、書き込まれた／読み込まれたファイルの行数、書き込み／読み込み位置情報を記憶する。なお、サイズは一例であって、どこまで書き込んだ／読み込んだかがわかる値ならば、バイト数やポインターなどでも構わない。
【００３５】
以下では、一例として、ファイルのハッシュ値を取得するために、
・ファイルを新規作成した場合の処理（書き込み要求から閉じる要求までの処理）
・ファイルを開いた場合の処理（読み込み要求から閉じる要求までの処理）
・ファイルをコピーした場合の処理（書き込み要求と読み込み要求から閉じる要求までの処理）
について説明する。
【００３６】
●ファイルを新規作成した場合の処理（書き込み要求から閉じる要求までの処理）
図５は、フィルタドライバ４０２における書き込み要求発生時の処理を示すフローチャート、図６は、フィルタドライバ４０２における閉じる要求発生時の処理を示すである。
【００３７】
フィルタドライバ４０２は書き込み要求をインターセプトする（Ｓ５０１）。Ｓ５０２で、ＣＰＵ１１は、インターセプトした書き込み要求から、書き込むファイルのファイル情報を取得する。ファイル情報とは、たとえば、書き込み／読み込みを示す情報、書き込み／読み込み位置情報（ファイルの先頭か否かを示す情報）、ファイルを識別する情報（ファイル名、ファイルパス等）、ファイル全体のサイズ、書き込み／読み込みデータ、書き込み／読み込みデータのサイズ等の情報である。
【００３８】
Ｓ５０３で、ＣＰＵ１１は、Ｓ５０２で取得したファイル情報からファイルを識別する情報（ファイルパス）を取得し、後述するリスト（図９）に、同一ファイルに関するレコードが存在するか否かを判定する。同一ファイルに関するレコードが存在しない場合は、その書き込み要求は対象ファイルへの１回目の書き込みである。同一ファイルに関するレコードが存在する場合は、その書き込み要求は対象ファイルへの２回目以降の書き込みである。
【００３９】
図９は、一時ハッシュ値を保存するリストの一例を示す図である。リスト９００は、同一ファイルに対し書き込み要求が発生する毎に、算出したハッシュ値を一時保存しておくリストである。
リスト９００は、ファイルを識別する情報、たとえば、ファイル名、ファイルパス、ファイルハンドルなどをキーとして一時ハッシュ値と紐づけて記憶されている。また、書き込まれたデータ情報、たとえば、書き込んだデータのサイズ（現在までに書き込み要求毎のサイズを足した値）、書き込みファイル全体のサイズ、書き込まれたファイルの行数、位置情報を記憶する。なお、サイズは一例であって、どこまで書き込んだかがわかる値ならば、バイト数やポインターなどでも構わない。Ｓ５０３にて、リスト９００に存在する場合は、Ｓ５０５へ進み、存在しない場合はＳ５０４へ進む。
【００４０】
Ｓ５０５で、ＣＰＵ１１は、Ｓ５０２で取得したファイル情報からファイルを識別する情報（ファイルパス）をもとに、リスト９００から対象のレコードを取得し、Ｓ５０６に進む。
【００４１】
Ｓ５０６で、ＣＰＵ１１は、Ｓ５０２で取得したファイル情報から、ファイルへの書き込み位置情報を取得する。書き込み位置情報とは、これからファイルに書き込む際に、何行目から書き込む、何ビット目から書き込む、ファイルのサイズなどの書き込む位置情報（たとえば、オフセット）である。
ここで、位置情報（書き込み位置情報／読み込み位置情報）の一例を図１４を用いて説明する。たとえば、ファイルに「あいうえおかきくけこさしすせそ…」というような文章が書き込まれているとする。このとき、文章の先頭から、次の行の黒丸の位置まで、ＡとＢを足し合わせた情報が、位置情報の中に含まれている。
【００４２】
Ｓ５０７で、ＣＰＵ１１は、取得した書き込み位置情報がレコードに格納された位置情報と一致するか否かを判断する。一致する場合は、Ｓ５０８へ進み、一致しない場合は、前回の続きではない、または、先頭からの書き込みではない処理(たとえば、ランダムアクセス)ため、フローを終了し、書き込み要求をファイルシステムドライバ４０３へ転送する。
【００４３】
Ｓ５０４で、ＣＰＵ１１は、取得したデータを格納するためのリスト９００中のレコードを初期化し、Ｓ５０２で取得したファイル情報から、ファイルへの書き込み位置情報を取得し、Ｓ５０８に進む。
【００４４】
Ｓ５０８で、ＣＰＵ１１は、Ｓ５０２で取得したファイル情報から書き込みデータのサイズを取得する。Ｓ５０９で、ＣＰＵ１１は、書き込みデータのサイズが「０」か否かを判定し、「０」である場合は、取得した情報や作成したレコードを破棄し、Ｓ５１０以降へは進まず処理を終了し、書き込み要求をファイルシステムドライバ４０３へ転送する。なお、「たとえば、対象ファイルへの書き込みが最終の場合の書き込み要求は、書き込み要求は発生するがデータサイズが「０」となることがあるため「０」である場合は、Ｓ５１０以降の処理（一時ハッシュ値の算出）等は行わない。Ｓ５１０以降の処理を行わないことで、無用なハッシュ値の算出を防ぐことができる。
【００４５】
Ｓ５０９で「０」ではない場合、Ｓ５１０へ進む。Ｓ５１０で、ＣＰＵ１１は、Ｓ５０２で取得したファイル情報から書き込みデータを取得し、書き込みデータから一時ハッシュ値を算出する。
【００４６】
Ｓ５１１で、ＣＰＵ１１は、レコードへの追加／レコードの更新を行い、リスト９００へ追加／リスト９００の更新を行う。具体的には、Ｓ５０４の処理をした場合は、Ｓ５０２で取得したファイル情報からファイルパスや書き込みサイズ、Ｓ５０４で取得した書き込み位置情報、Ｓ５１０で取得した一時ハッシュ値を対応付けてレコードに格納し、リスト９００へ追加する。
【００４７】
また、Ｓ５０５の処理をした場合は、取得したレコードに格納されていた書き込み位置情報に取得した書き込み位置情報を加算、レコードに格納されていた書き込みサイズに取得した書き込みサイズを加算、前回取得した一時ハッシュ値と今回取得した一時ハッシュ値とをマージして算出された一時ハッシュ値をレコードに格納し、リスト９００を更新する。なお、ハッシュ値をマージする演算方法は、従来用いられている演算方法を用いて実施することができる。全ての処理が終了したら、書き込み要求をファイルシステムドライバ４０３へ転送する。
【００４８】
図６は、フィルタドライバ４０２における、閉じる要求発生時の処理を示すフローチャートである。フィルタドライバ４０２は、閉じる要求をインターセプトする（Ｓ６０１）。Ｓ６０２で、ＣＰＵ１１は、閉じる要求からファイル情報を取得する。
【００４９】
Ｓ６０３で、ＣＰＵ１１は、Ｓ６０２で取得したファイル情報からファイルを識別する情報（ファイルパス）を取得し、リスト９００に同一ファイルに関するレコードが存在するか否かを判定する。リスト９００に存在する場合は、Ｓ６０４へ進み、存在しない場合は処理を終了し、閉じる要求をファイルシステムドライバ４０３へ転送する。
【００５０】
Ｓ６０４で、Ｓ６０２で取得したファイル情報から取得したファイルのファイル全体のサイズを取得し、S６０５で、レコードに格納されている書き込みサイズ（現在までのサイズ）と比較する。サイズが一致しない場合は、Ｓ６０７まで進む。一致する場合はＳ６０６へ進む。
【００５１】
Ｓ６０６で、ＣＰＵ１１は、リスト９００に格納されている一時ハッシュ値を従来用いられている演算方法を用いてハッシュ値に形成する。Ｓ６０７で、ＣＰＵ１１は、ハッシュ値をログ生成プログラム４０４に転送する。ログ生成プログラム４０４は、ＰＣの操作履歴（操作ログ）として出力する。この時、ハッシュ値だけではなく、ファイルの操作時刻を示す時刻情報、ファイル名（ファイルパス）、セッションＩＤ、プロセスＩＤ、スレッドＩＤなどが含まれてもよい。
【００５２】
Ｓ６０８で、ＣＰＵ１１は、Ｓ６０２で取得したファイル情報から得たファイルを識別する情報（ファイルパス）と一致するレコードを破棄する。
全ての処理が終了したら、閉じる要求をファイルシステムドライバ４０３へ転送する。
【００５３】
●ファイルを開いた場合の処理（読み込み要求から閉じる要求までの処理）
図７は、フィルタドライバ４０２における読み込み要求発生時の処理を示すフローチャート、図８は、フィルタドライバ４０２における閉じる要求発生時の処理を示す図である。
フィルタドライバ４０２は、読み込み要求をインターセプトする（Ｓ７０１）。Ｓ７０２で、ＣＰＵ１１は、読み込み要求から、読み込みファイルのファイル情報を取得する。ファイル情報とは、たとえば、書き込み／読み込みを示す情報、書き込み／読み込み位置情報（ファイルの先頭か否かを示す情報）、ファイルを識別する情報（ファイル名、ファイルパス）、ファイル全体のサイズ、書き込み／読み込みデータ、書き込み／読み込みデータのサイズ等の情報である。
【００５４】
Ｓ７０３で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報からファイルファイルを識別する情報（ファイルパス）を取得し、後述するリスト１０００に同一ファイルに関するレコードが存在するか否かを判定する。
【００５５】
図１０は、一時ハッシュ値を保存するリストの一例を示す図である。リスト１０００は、同一ファイルに対し読み込み要求が発生する毎に、算出したハッシュ値を一時保存しておくリストである。リスト１０００は、ファイルを識別する情報、たとえば、ファイル名、ファイルパス、ファイルハンドルなどをキーとして一時ハッシュ値と紐づけて記憶されている。また、読み込まれたデータ情報、たとえば、読み込んだデータのサイズ（現在までに読み込み要求毎のサイズを足した値）、読み込みファイル全体のサイズ、読み込まれたファイルの行数、位置情報を記憶する。なお、サイズは一例であって、どこまで読み込んだかがわかる値ならば、バイト数やポインターなどでも構わない。
【００５６】
Ｓ７０３にてレコードが存在する場合は、Ｓ７０５へ進み、存在しない場合はＳ７０４へ進む。Ｓ７０４で、ＣＰＵ１１は、取得したデータを格納するためのレコードを初期化する。Ｓ７０６で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報から読み込みファイル全体のサイズと、ファイルの読み込み位置（読み込み位置情報）を取得する。
【００５７】
Ｓ７０５で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報からファイルを識別する情報（ファイルパス）をもとに、リスト１０００からレコードを取得する。取得後、Ｓ７０７に進む。
Ｓ７０７で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報をもとに、ファイルの読み込み位置（読み込み位置情報）を取得する。読み込み位置とは、これからファイルを読み込む際に、何行目から読んだか、何ビット目から読んだか、ファイルのサイズなどの読み込んだ位置の情報（たとえば、オフセット）である。
【００５８】
Ｓ７０８で、ＣＰＵ１１は、読み込み位置情報がレコードに格納された位置情報と一致するか否かを判定する。一致する場合は、Ｓ７０９へ進み、一致しない場合は、前回の続きではない、または、先頭からの書き込みではない処理(たとえば、ランダムアクセス)のため、フローを終了し、読み込み要求をファイルシステムドライバ４０３へ転送する。
【００５９】
Ｓ７０９で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報から読み込みデータのサイズを取得する。Ｓ７１０で、ＣＰＵ１１は、読み込みデータのサイズが「０」か否かを判定し、「０」である場合は取得した情報や作成したレコードを破棄し、Ｓ７１１以降へは進まず処理を終了し、読み込み要求をファイルシステムドライバ４０３へ転送する。「０」ではない場合、Ｓ７１１へ進む。
【００６０】
Ｓ７１１で、ＣＰＵ１１は、Ｓ７０２で取得したファイル情報から読み込みデータを取得し、読み込みデータを用いて一時ハッシュ値を算出する。Ｓ７１２で、ＣＰＵ１１は、レコードへの追加／レコードの更新を行い、リスト１０００の追加／リストの更新を行う。具体的には、Ｓ７０４の処理をした場合は、Ｓ７０２で取得したファイル情報から取得したファイルを識別する情報（ファイルパス）と、Ｓ７０６で取得した読み込みファイル全体のサイズと、読み込み位置、Ｓ７１１で取得した一時ハッシュ値、をレコードに格納しリストへ追加する。
【００６１】
Ｓ７０５の処理をした場合は、リスト１０００に格納されていた読み込み位置情報に取得した読み込み位置情報を加算、リスト１０００に格納されていた読み込みデータのサイズに取得した読み込みデータのサイズを加算、前回取得した一時ハッシュ値と今回取得した一時ハッシュ値とをマージし算出された一時ハッシュ値をレコードに格納しリストを更新する。全ての処理が終了したら、読み込み要求をファイルシステムドライバ４０３へ転送する。
【００６２】
図８は、フィルタドライバ４０２における、閉じる要求発生時の処理を示すフローチャートである。フィルタドライバ４０２は閉じる要求をインターセプトする（Ｓ８０１）。
【００６３】
Ｓ８０２で、ＣＰＵ１１は、閉じる要求からファイル情報を取得する。Ｓ８０３で、ＣＰＵ１１は、Ｓ８０２で取得したファイル情報からファイルを識別する情報（ファイルパス）を取得し、リスト１０００に同一ファイルに関するレコードが存在するか否かを判定する。リスト１０００に存在する場合は、Ｓ８０４へ進み、存在しない場合は処理を終了し、閉じる要求をファイルシステムドライバ４０３へ転送する。
【００６４】
Ｓ８０４で、レコードに格納されているファイル全体のサイズと、レコードに格納されている読み込んだサイズ（現在までのサイズ）が一致するか否かを判定する。サイズが一致しない場合は、Ｓ８０６に進む。一致する場合はＳ８０５へ進む。
【００６５】
Ｓ８０５で、ＣＰＵ１１は、リストに格納されている一時ハッシュ値を従来用いられている演算方法を用いてハッシュ値に形成する。Ｓ８０６で、ＣＰＵ１１は、ハッシュ値をログ生成プログラム４０４に転送する。ログ生成プログラム４０４は、ＰＣの操作履歴（操作ログ）として出力する。この時、ハッシュ値だけではなく、ファイルの操作時刻を示す時刻情報、ファイルを識別する情報（ファイルパス）、セッションＩＤ、プロセスＩＤ、スレッドＩＤなどが含まれてもよい。
【００６６】
Ｓ８０７で、ＣＰＵ１１は、Ｓ８０２で取得したファイル情報から得たファイルを識別する情報（ファイルパス）と一致するレコードを破棄する。全ての処理が終了したら、閉じる要求をファイルシステムドライバ４０３へ転送する。
【００６７】
●ファイルをコピーした場合の処理（書き込み要求と読み込み要求から閉じる要求までの処理）
書込み要求と読み込み要求発生時の構成／処理の大部分は、図５、図７と共通のため説明を省略し、異なる構成／処理のみ説明する。
図１３は、書込み要求と読み込み要求から一時ハッシュ値等を保存するリストの一例を示す図である。リスト１３００は、同一ファイルに対し書き込み／読み込み要求が発生する毎に、算出したハッシュ値を一時保存しておくリストである。リスト１３００は、ファイルを識別する情報、たとえば、ファイル名、ファイルパス、ファイルハンドルなどをキーとして一時ハッシュ値と紐づけて記憶されている。また、書き込み／読み込まれたデータ情報、たとえば、書き込み／読み込みを示す情報（アクセス要求）、書き込み／読み込んだデータのサイズ（現在までの書き込み／読み込み要求毎のサイズを足した値）、書き込み／読み込みファイル全体のサイズ、書き込まれた／読み込まれたファイルの行数、書き込み／読み込み位置情報を記憶する。なお、サイズは一例であって、どこまで書き込んだ／読み込んだかがわかる値ならば、バイト数やポインターなどでも構わない。
【００６８】
同一ファイルに対して、書き込み要求と読み込み要求が発生した場合、リスト１３００には、同一ファイル名（ファイルパス）の書き込み要求の情報と読み込み要求の情報とが記憶されている。
【００６９】
フィルタドライバ４０２が、閉じる要求をインターセプトすると、リスト１３００にファイルを識別する情報（ファイルパス）が同一の書き込み要求の情報に対するレコードと読み込み要求の情報に対するレコードと、が記憶されていた場合、書き込み要求に対する処理(図６のＳ６０１からＳ６０７の処理)を行う。その場合、読み込み要求の情報に対するレコードは破棄される。
【００７０】
なお、上述した説明では、書き込み要求の情報を優先してハッシュ値を取得しているが、読み込み要求の情報を優先してハッシュ値を取得してもよい。
【００７１】
また、上述した構成では、書き込み／読み込み要求が、ランダムアクセスであると判断された場合（サイズが「０」の場合）は、処理を終了するようにしたが、ランダムアクセスであると判断された場合は、従来技術のように、対象ファイル全体を読み込んで、対象ファイルのハッシュ値を算出するように構成してもよい。
また、本発明の実施形態では、Ｗｉｎｄｏｗｓ（登録商標）を一例として説明した。しかし、本発明は、ファイル操作が実行されるときに特定の複数のアクセス要求が発行されるＯＳであれば、同様に適用できる。また、本発明の実施形態では、複数ログイン環境でも、同様に適用できる。
【００７２】
また、本発明の実施形態では、フィルタドライバ４０２でアクセス要求をインターセプトする手法を一例として説明した。しかし、本発明は、ファイルのアクセス要求が検知可能な技術、例えばＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ Ｉｎｔｅｒｆａｃｅ）フックなどの技術であれば、同様に適用できる。たとえば、ＷｒｉｔｅＦｉｌｅ、ＲｅａｄＦｉｌｅなどのＡＰＩを利用する。その際、ＷｒｉｔｅＦｉｌｅの場合は引数を、ＲｅａｄＦｉｌｅ場合は戻り値を利用する。
【００７３】
＜ハッシュ値の活用例＞ 
取得されたハッシュ値は、たとえば、ホワイトリストの設定（図１１）や、同じハッシュ値を持つファイルがあるか否かの検索（図１２）に活用することができる。
【００７４】
図１１は、ホワイトリストを設定するための画面例を示す図である。取得されたハッシュ値に基づいて、サーバ装置１２０は、クライアント端末１１０にて稼働してもよいプロセスの一覧（ホワイトリスト）を作成し、クライアント端末１１０にてプロセスの一覧に基づく制御を実行させることができる。プロセスの一覧により、サーバ装置１２０で許可されたプロセスのみクライアント端末１１０で動かし、それ以外のプロセスはクライアント端末内で動かせないようにすることができる。このように、本願発明で取得されたハッシュ値を用いてクライアント端末１１０のセキュリティ対策に用いることが可能となる。
【００７５】
図１２は、ハッシュ値の検索を行うための画面例を示す図である。取得されたハッシュ値をサーバ装置１２０にて、ハッシュ値検索を行うことで、たとえば、会社全体で同じファイルがどのＰＣに存在するのかを確認することが可能となる。
【００７６】
また、ウェブでマルウェアのハッシュ値が公開されているので、ハッシュ値検索を行えば、ウィルスソフトにて検知されなかったマルウェアも検索可能となる。また、ファイルをトレースする際にファイルを特定する条件として、ハッシュ値を使用することも可能である。
【００７７】
また、上述した説明は、サーバ装置１２０にて各種処理を行っているが、サーバ装置１２０に限らずクライアント装置１００でも、ホワイトリストの作成、ハッシュ値の検索、トレースを行うことは可能である。
【００７８】
［第二の実施形態］
第一の実施形態では、ファイルを閉じるためのアクセス要求（ＩＲＰ＿ＭＪ＿ＣＲＥＡＮＵＰ）発生のタイミングで、一時ハッシュ値をハッシュ値に形成しているが、本実施形態では、ファイルに書き込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＷＲＩＴＥ）、ファイルを読み込むためのアクセス要求（ＩＲＰ＿ＭＪ＿ＲＥＡＤ）から取得した書き込み／読み込みデータのサイズの合計値と、ファイル全体のサイズが一致することで、一時ハッシュ値をハッシュ値に形成する場合について説明する。なお、第２実施形態の動作の大部分は第１実施形態の動作と共通するため、第１実施形態と異なる構成、動作についてのみ説明し、共通の動作については説明を省略する。
【００７９】
具体的には、図５のＳ５１１、図７のＳ７１２で、レコードへの追加/レコードの更新（リスト９００へ追加／リスト９００の更新）を行った後に、ＣＰＵ１１は、現在までの書き込み／読み込みサイズと、書き込み／読み込みファイル全体のサイズとが一致するか否かを判定する。一致しない場合は、処理を終了する。一致する場合は、リスト９００に格納されている一時ハッシュ値を従来用いられている演算方法を用いてハッシュ値に形成する。ＣＰＵ１１は、ハッシュ値をログ生成プログラム４０４に転送し、リスト９００から対象のレコードを破棄する。全ての処理が終了したら、書き込み／読み込み要求をファイルシステムドライバ４０３へ転送する。
【００８０】
以上のようにして、ファイルに書き込む／ファイルを読み込むためのアクセス要求から取得した書き込み／読み込みデータのサイズの合計値と、ファイル全体のサイズが一致するタイミングにて、ハッシュ値を形成することで、より早くファイルのハッシュ値を取得することができる。
【００８１】
以上説明した２つの実施形態に記載したように、いずれの実施形態に係る発明によっても、ファイルに対するアクセス要求からファイルのハッシュ値を算出することができるので、ユーザのＰＣ操作に影響を与えることなく、ファイルのハッシュ値を算出することができる。
【００８２】
［その他の実施形態］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2018092281.tif 000003
【図２】
2018092281.tif 000004
【図３】
2018092281.tif 000005
【図４】
2018092281.tif 000006
【図５】
2018092281.tif 000007
【図６】
2018092281.tif 000008
【図７】
2018092281.tif 000009
【図８】
2018092281.tif 000010
【図９】
2018092281.tif 000011
【図１０】
2018092281.tif 000012
【図１１】
2018092281.tif 000013
【図１２】
2018092281.tif 000014
【図１３】
2018092281.tif 000015
【図１４】
2018092281.tif 000016