(57)【特許請求の範囲】
【請求項１】
プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知するプロセス間通信検知手段と、
プロセスによる前記リソース内のデータへのアクセスイベントを順次検知するアクセス検知手段と、
前記アクセス検知手段により検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録する記録手段と、
前記記録手段により記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する解析手段と、
を有するデータ依存関係解析装置。
【請求項２】
前記プロセス間通信検知手段は、プロセス間通信で使用されるプロトコルの種類と、該プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知する、請求項１に記載のデータ依存関係解析装置。
【請求項３】
前記記録手段は、前記アクセス対象データの容量を前記アクセスイベントに更に対応付けて記録し、
前記解析手段は、前記コピー元のデータと前記コピー先のデータとに対応付けられた前記容量に基づいて前記依存関係の度合いを更に定める、請求項１又は２に記載のデータ依存関係解析装置。
【請求項４】
前記解析手段は、前記プロセス間通信検知手段より検知された前記プロセス間通信における通信先のプロセスにより、リソースへ書き出されたデータを検索して前記コピー先のデータとし、該プロセス間通信における通信元のプロセスにより、該コピー先のデータが書き出されるより前にリソースから読み出されたデータを検索して前記コピー元のデータとする、請求項１乃至３のいずれか１項に記載のデータ依存関係解析装置。
【請求項５】
リソースへデータを書き出すプロセスにより呼び出される書き出しシステムコールと、該書き出しシステムコールにおいて受け渡し元のデータが設定される引数とを定義した定義情報を更に有し、
前記記録手段は、前記定義情報に基づいて、前記書き出しシステムコールがプロセスにより呼び出されたとき、前記引数に設定された前記受け渡し元のデータを、前記アクセス対象のデータに対応づけて更に記憶し、
前記解析手段は、前記プロセス間通信検知手段より検知された前記プロセス間通信における通信先のプロセスにより、リソースへ書き込まれたデータを検索して前記コピー先のデータとし、該コピー先のデータに対応付けられた前記受け渡し元のデータを前記コピー元のデータとする、請求項１乃至３のいずれか１項に記載のデータ依存関係解析装置。
【請求項６】
前記リソースには、機密性の高さを示すセキュリティレベルが設定されており、
前記リソースからデータが読み出されたとき、該リソースに設定されたセキュリティレベルを取得するセキュリティレベル取得手段を更に有し、
前記記録手段は、前記セキュリティレベル取得手段により取得された前記セキュリティレベルを前記アクセ対象データに更に対応付けて記録し、
前記解析手段は、所定値より高い前記セキュリティレベルが対応づけられたアクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索する、請求項１乃至５のいずれか１項に記載のデータ依存関係解析装置。
【請求項７】
前記セキュリティレベル取得手段は、データをリソースへ書き出すとき、該リソースに設定されたセキュリティレベルを更に取得し、
読み出し元のリソースから読み出したデータを書き出し先のリソースへ書き出すとき、該書き出し先のリソースについて前記セキュリティレベル取得手段により取得されたセキュリティレベルが、該読み出し元のリソースについて前記セキュリティレベル取得手段により取得されたセキュリティレベルより低ければ、該データを書き出す書き出し手段を更に有する、請求項６に記載のデータ依存関係解析装置。
【請求項８】
リソースへデータを書き出すとき、該リソースに設定されたセキュリティレベルを取得し、該セキュリティレベルが所定値以上であれば、該データを暗号化して該リソースへ書き出す暗号化手段と、
前記暗号化手段により書き出された前記データを前記リソースから読み出すとき、該リソースに設定された前記セキュリティレベルを取得し、該セキュリティレベルに基づいて該データを復号する復号手段と、
請求項６に記載のデータ依存関係解析装置。
【請求項９】
プロセス間通信検知手段が、プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知し、
アクセス検知手段が、プロセスによる前記リソース内のデータへのアクセスイベントを順次検知し、
記録手段が、前記アクセス検知手段により検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録し、
解析手段が、前記記録手段により記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する、データ依存関係解析方法。
【請求項１０】
コンピュータに、
プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知するプロセス間通信検知手順、
プロセスによる前記リソース内のデータへのアクセスイベントを順次検知するアクセス検知手順、
前記アクセス検知手順で検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録する記録手順、及び
前記記録手順で記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する解析手順、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの流れを監視又は管理するための技術に関する。
【背景技術】
【０００２】
ＩＴ（Information  Technology）システム上では多くの情報がやりとりされており、それらの情報の機密度に応じて、適切に情報の流れを監視または管理することがセキュリティ上重要である。【０００３】
データの流れの監視等が不十分だと、情報漏洩が生じ得る。例えば、ＵＳＢ（Universal  Serial  Bus）メモリによれば、情報を簡便にやり取りできるが、ＵＳＢメモリ紛失時などに情報漏洩が生じる可能性がある。【０００４】
このような、情報漏洩を防ぐために、非特許文献１に記載の、いわゆるＤＬＰ（Data  Loss  Prevention）ツールは、やりとりされるデータの類似度に基づいて情報漏洩を監視する。詳細には、ＤＬＰツールを使用するシステムは、予め機密性の高い情報の特徴をポリシーに記述しておき、その特徴を持つデータがＵＳＢメモリに書き出されたり、メールに添付されて信頼できない宛先に送信されたりすることを検知して、情報漏洩を防止している。【０００５】
非特許文献２では、システムコールをフックし、ファイル入出力・ネットワークＩ／Ｏ（Input/Output）だけでなく、メモリマップを利用したプロセス間通信も追跡する方法が提案されている。【０００６】
また、特許文献１に記載のアクセス管理システムは、ＰＣ（Personal  Computer）上で生じるファイル入出力やネットワーク入出力の事象（イベント）をログとして収集する。このログには、プロセスによるファイルの入出力、ファイル名の変更、ＵＳＢメモリへの書き出し、ネットワーク通信といった動作が、時刻やプロセス名・ユーザ名と関連付けて記録される。このログを調べることにより、アクセス管理システムは、ＵＳＢメモリに書き出されたファイルの元の名前や、そのファイルがどこからコピーされたかなどを追跡し、情報漏洩を監視または防止できる。【０００７】
特許文献２には、コンピュータがアプリケーションソフトウェアに対するユーザの操作を監視するためのフィルタプログラムを読み込み、アプリケーション間データ転送を検出して不正なプロセス間通信を防止する方法が開示されている。この方法を用いると、コンピュータは、アプリケーション間でデータを転送するプロセス間通信のみについて、転送されるデータ間の依存関係を求めることができる。但し、この方法では、コンピュータは、アプリケーションソフトウェアごとにフィルタプログラムを作成しておく必要がある。【０００８】
ここで、データ間の依存関係とは、あるデータの全部または一部が他のデータの全部または一部をコピーしたものである場合における、これらのデータ間の関係をいう。【０００９】
特許文献３には、アプリケーションに対するユーザの操作を監視し、かつアプリケーションソフトウェアの状態を検出して、両者を組み合わせて分析する方法が開示されている。この方法を使用することにより、コンピュータは、プロセス間通信だけでなく、プロセス内部の情報の流れも比較的正確に追跡することができ、正確なデータの依存関係を求めることができる。但し、この方法では、コンピュータは、アプリケーションソフトウェアごとの状態検出ルールを記述したファイルを取得しておく必要がある。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】「”ついうっかり”で情報は外部に漏れる」、２００８年８月、p58-p69、日経ＮＥＴＷＯＲＫ
【非特許文献２】SAMUEL  T.  KING  and  PETER  M.  CHEN,  "Backtracking  Intrusions",  ACM  Transactions  on  Computer  Systems,  Vol.  23,  No.  1,  February  2005
【特許文献】
【００１１】
【特許文献１】特表２００６−５２５５６２号公報
【特許文献２】特開２００６−０９２１４９号公報
【特許文献３】特開２００６−１５５４１６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかし、非特許文献１、非特許文献２、または特許文献１に記載の方法では、過剰な依存関係が取得されやすい。【００１３】
ここで、過剰な依存関係とは、データのコピーが生じていないにもかかわらず、依存関係があると判断された場合をいう。【００１４】
例えば、Windows（登録商標）ではドラッグ＆ドロップの最中（ドラッグ中）に、ドラッグ元のプロセスと、現在マウスカーソルの下にあるプロセスとの間で断続的にプロセス間通信（ＩＰＣ:Inter  Process  Communication）が行われる。しかし、これはマウスカーソルの形状をどのようにするかを判定するための通信であり、このＩＰＣにおいては、実質的な情報が流れない。【００１５】
非特許文献１、非特許文献２、または特許文献３に記載の方法では、ＩＰＣの内容に関わらず依存関係を生成するため、このような場合にも依存関係があると判断する。この結果、過剰な依存関係が多く取得されてしまい、データを的確に追跡できないという問題があった。【００１６】
特許文献２および３に記載のコンピュータは、アプリケーションソフトウェアごとにフィルタプログラムまたは状態検出ルールを作成しておく必要がある。このため、これらの技術では、データ追跡に手間と時間がかかり、データの流れを追跡することが困難であった。また、フィルタプログラム等で検出できないデータもあり、データの流れの追跡が困難であるという問題があった。【００１７】
本発明は、データの流れを容易かつ的確に追跡することを可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記目的を達成するために、本発明のデータ依存関係解析装置は、プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知するプロセス間通信検知手段と、プロセスによる前記リソース内のデータへのアクセスイベントを順次検知するアクセス検知手段と、前記アクセス検知手段により検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録する記録手段と、前記記録手段により記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する解析手段と、を有する。【００１９】
本発明のデータ依存関係解析方法は、プロセス間通信検知手段が、プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知し、アクセス検知手段が、プロセスによる前記リソース内のデータへのアクセスイベントを順次検知し、記録手段が、前記アクセス検知手段により検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録し、解析手段が、前記記録手段により記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する、方法である。【００２０】
本発明のプログラムは、コンピュータに、プロセス間通信における処理内容に基づいて、リソース間でコピーされるデータを受け渡すプロセス間通信を検知するプロセス間通信検知手順、プロセスによる前記リソース内のデータへのアクセスイベントを順次検知するアクセス検知手順、前記アクセス検知手順で検知された前記アクセスイベント毎に、該アクセスイベントにおけるアクセス対象のデータを記録する記録手順、及び前記記録手順で記録された前記アクセス対象のデータのうち、前記プロセス間通信検知手段により検知された前記プロセス間通信において受け渡された前記データのコピー元とコピー先に該当するデータを検索し、検索したデータ間に依存関係を付与する解析手順、を実行させるためのプログラムである。
【発明の効果】
【００２１】
本発明によれば、データ依存関係解析装置は、処理内容に基づいて、リソース間でコピーされたデータを受け渡すプロセス間通信を検知するので、アプリケーション毎に個別にフィルタプログラムや状態検出ルールを作成するような煩雑な作業をしなくてもデータのコピーを検出することができ、データ流れの追跡が容易となる。また、検知したプロセス間通信において受け渡されたデータのコピー先とコピー元とに該当するデータ間の依存関係を付与するので、データの流れを的確に追跡することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態のコンピュータの構成を示すブロック図である。
【図２】本発明の第１の実施形態のログの内容をまとめた表である。
【図３】本発明の第１の実施形態の解析結果の内容をまとめた表である。
【図４】本発明の第１の実施形態のコンピュータの動作を示すフローチャートである。
【図５】本発明の第１の実施形態の通信内容取得処理を示すフローチャートである。
【図６】本発明の第１の実施形態のコンピュータを動作させるためのコンピュータプログラムの一例である。
【図７】本発明の第１の実施形態の解析処理を示すフローチャートである。
【図８】（ａ）ユーザのファイル操作を示す図である。（ｂ）ユーザのファイル操作を示す図である。
【図９】（ａ）ユーザのファイル操作を示す図である。（ｂ）ユーザのファイル操作を示す図である。
【図１０】ユーザのファイル操作を示す図である。
【図１１】本発明の第２の実施形態のログの内容をまとめた表である。
【図１２】本発明の第２の実施形態の解析結果の内容をまとめた表である。
【図１３】本発明の第２の実施形態のコンピュータの動作を示すフローチャートである。
【図１４】本発明の第２の実施形態のコンピュータを動作させるためのコンピュータプログラムの一例である。
【図１５】本発明の第２の実施形態の解析処理を示すフローチャートである。
【図１６】本発明の第３の実施形態のコンピュータの構成を示すブロック図である。
【図１７】本発明の第３の実施形態の定義情報の内容をまとめた表である。
【図１８】本発明の第３の実施形態のログの内容をまとめた表である。
【図１９】本発明の第３の実施形態のコンピュータの動作を示すフローチャートである。
【図２０】本発明の第３の実施形態の解析処理を示すフローチャートである。
【図２１】本発明の第４の実施形態のコンピュータの構成を示すブロック図である。
【図２２】本発明４の実施形態のログの内容をまとめた表である。
【図２３】本発明の第４の実施形態のコンピュータの動作を示すフローチャートである。
【図２４】本発明の第４の実施形態の解析処理を示すフローチャートである。
【図２５】本発明の第５の実施形態のコンピュータの動作を示すフローチャートである。
【図２６】本発明の第６の実施形態のコンピュータの構成を示すブロック図である。
【図２７】本発明の第６の実施形態のコンピュータの動作を示すフローチャートである。
【図２８】本発明の第６の実施形態のＩＯ仲介処理を示すフローチャートである。
【図２９】本発明の第７の実施形態のコンピュータの構成を示すブロック図である。
【図３０】本発明の第７の実施形態のＩＯ仲介処理を示すフローチャートである。
【図３１】本発明の第７の実施形態の復号処理を示すフローチャートである。
【図３２】本発明の第７の実施形態の暗号化処理を示すフローチャートである。
【図３３】本発明の変形例のコンピュータおよび解析装置の構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
本発明を実施するための形態について図面を参照して詳細に説明する。
【００２４】
図１は、本実施形態のコンピュータ１の構成を示すブロック図である。コンピュータ１は、データ間の依存関係を解析し、データの流れを追跡するための装置である。同図を参照すると、コンピュータ１は、監視部１５、記憶部１７、および解析部１９を有する。
【００２５】
監視部１５は、ＩＰＣ監視部１５１、ＩＰＣ分析部１５３、ＩＯ監視部１５５、およびログ作成部１５７を有する。例えば、監視部１５は、オペレーティングシステム（ＯＳ）の一部に組み込まれる。より具体的には、監視部１５は、デバイスドライバやシステムコールフックのようなＯＳのカーネルを拡張する手法で実現できる。監視部１５が、カーネルモードではなくＡＰＩフックのようにユーザモード上で動作するように実現してもよい。
【００２６】
ＩＰＣ監視部１５１は、プロセス間通信（以下、「ＩＰＣ」という。）を監視（検知）する。プロセス間通信は、例えば、名前つきパイプ、ＬＰＣ（Local  Procedure  Call）、または、共有メモリである。ＩＰＣ監視部１５１は、名前つきパイプやＬＰＣ、共有メモリなどをオープンしたり、それらにデータを送信したり、それらからデータを受信するシステムコールを仲介することにより、ＩＰＣを監視する。ＩＰＣ監視部１５１は、検知したＩＰＣのプロトコルの種類と、その処理内容をＩＰＣ分析部１５３へ通知する。
【００２７】
ＩＰＣ分析部１５３は、検知されたＩＰＣが、リソース間でコピーされるデータを受け渡すものであるか否かを判断する。
【００２８】
リソース間でコピーされるデータを受け渡すＩＰＣを求める方法について詳細に説明する。ＩＰＣ分析部１５３は、ＩＰＣで使用される通信プロトコルの種類と、そのプロトコルにおけるＩＰＣの処理内容とを取得する。ＩＰＣには、そのプロトコルの種類や処理内容により、データがコピーされないものがあり、全てのＩＰＣについてデータの依存関係を求めると、過剰な依存関係が取得されてしまうためである。
【００２９】
ＩＰＣ分析部１５３は、ＩＰＣのチャネル内を流れるデータを、プロトコルの種類および処理内容に基づく判定ルールを使用して分析することにより、リソース間でデータのコピーが生じるか否かを判断する。この判定ルールは、プロセス間で共通的に用いられるＩＰＣの通信元と通信先の間で明示的な情報フローが存在するかどうかをエキスパートが判定して記述したものである。
【００３０】
ここで、リソースとは、コンピュータ１内において、ユーザの操作によって情報を入出力可能なデバイスを表し、例えば、ハードディスクやリムーバブルメディア上のファイル、ネットワークの接続を含む。ネットワーク接続には、例えば、ＦＴＰ（File  Transfer  Protocol）やＨＴＴＰ（Hyper  Text  Transfer  Protocol）やＳＭＴＰ(Send  Mail  Transfer  Protocol)によるデータの送信が含まれる。
【００３１】
ＩＰＣ分析部１５３は、例えば、古典的な通信プロトコルの場合、そのプロトコル内で送信されるコマンドの種類、コマンドの引数など（処理内容）に基づいて依存関係を判定する。また、ＩＰＣ分析部１５３は、ＩＰＣのプロトコルがＲＰＣ（Remote  Procedure  Call）である場合はプロシージャ名とその引数など（処理内容）に基づいて依存関係を判定する。あるいは、ＩＰＣ分析部１５３は、ＩＰＣのプロトコルがＣＯＭ(Component  Object  Model)のメソッド呼び出しである場合は、インタフェース名とメソッド名とその引数など（処理内容）に基づいて依存関係を判定する。
【００３２】
処理内容を取得する場合、ＩＰＣ分析部１５３は、ＩＰＣ関連のシステムコールの呼び出しがあるたびに、それらを一時的に記憶しておく。ある機能を持った一つのＩＰＣが複数回の一連のシステムコール呼び出しによって実現される場合があるためである。そして、ＩＰＣ分析部１５３は、ある機能を持った一つのＩＰＣが完了したときに、そのＩＰＣの処理内容（通信内容）を一時的な記憶から再構成して取得する。
【００３３】
例えば、名前つきパイプによる通信はクライアントサーバ型の通信であり、あるひとつの機能を持ったＩＰＣが複数回の名前つきパイプによる通信で実現される場合がある。その場合、ＩＰＣ分析部１５３は、一連の名前つきパイプ通信の内容を一時的に記憶する。
【００３４】
また、ＬＰＣはWindows（登録商標）に実装されているＩＰＣの機構の一つであり、名前つきパイプと同様にクライアントサーバ型の通信である。この場合も、ＩＰＣ分析部１５３は、一連の名前つきパイプ通信の内容を一時的に記憶する。特にＬＰＣでは、送信するデータのサイズに制限があり、サイズの大きなデータを送信する場合は、共有メモリを併用してデータを送信する。このような場合、ＩＰＣ分析部１５３は、ＩＰＣ通信内容を再構成する際には、ＬＰＣ通信内容と共有メモリの内容とを併せて再構成する。
【００３５】
ＩＯ監視部１５５は、プロセスによる、リソースへのアクセスを監視する。例えば、ＩＯ監視部１５５は、ファイルやネットワークソケットをオープンするシステムコールを仲介したり、ＯＳカーネルからファイルシステムドライバやネットワークドライバへの通信を仲介したりすることによって、アクセスを検知する。
【００３６】
ログ作成部１５７は、ＩＯ監視部１５５によって検出されたリソースへのアクセスイベントと、ＩＰＣ分析部１５３により検知されたＩＰＣイベントを、記録したログを作成する。ログの記録内容の詳細については、後述する。
【００３７】
記憶部１７には、ログ作成部１５７が作成したログ１７１が格納される。記憶部１７は、例えばハードディスク等の記憶媒体である。公知のログ改竄防止技術を用いて、ユーザによるログ１７１の改竄を防止してもよい。
【００３８】
解析部１９は、ログ１７１の記録内容から、各アクセスイベントでアクセス対象となったデータ間の依存関係を解析する。言い換えれば、解析部１９は、各アクセスイベントでターゲット（アクセス対象）とされたデータが、どのアクセスイベントでターゲットとされたデータに依存するかを求める。
【００３９】
より詳細には、解析部１９は、アクセスイベントのターゲットのうち、いずれかのファイル（データ）を調査対象とする。解析部は、その調査対象ファイルをターゲットとするイベントであって、種類が「write」のイベントを全て検索する。この条件を満たすイベントをイベントＺとする。
【００４０】
該当するイベントＺが１つもないときは、解析部１９は、調査対象ファイルに依存するファイルはないと判断する。
【００４１】
該当するイベントＺがあれば、解析部１９は、イベントＺより前の時刻に生じたイベントであって、イベントＺと同じプロセス名をもつ「read」イベント（以下、「イベントＷ」という）を全て検索する。
【００４２】
そして、解析部１９は、イベントＺより前の時刻に生じたイベントで、イベントＺのプロセス名をターゲットとするＩＰＣイベントがあるか否かを判断する。この条件を満たすイベントをイベントＷとする。
【００４３】
イベントＷがあれば、解析部１９は、イベントＷより前の時刻に生じたイベントであって、イベントＷと同じプロセス名をもつ「read」イベント（Ｗ）を全て検索する。解析部１９は、検索したＷのイベントのターゲットに依存すると判断する。
【００４４】
このようにして、解析部１９は、ログに記載の全てのファイル（データ）について、依存関係を調査し、データ間の依存関係を記載した解析結果１９１を出力する。
【００４５】
図２は、ログ１７１の内容をまとめた表である。同図を参照すると、ログ１７１には、イベントの「種類」、「プロセス名」、および「ターゲット」が、時系列順に記録される。
【００４６】
「種類」は、ＩＯ監視部１５５、またはＩＰＣ分析部１５３により、検出されたイベントの種類である。ＩＯ監視部１５５により検出されるイベントは、リソースへのアクセスイベントであり、リソースからの読み出し（「read」など）、またはリソースへの書き込み（「write」など）である。ＩＯ監視部１５５により検出されたイベントは、コピーされたデータを受け渡すＩＰＣイベント（「ipc」）である。
【００４７】
「プロセス名」は、そのイベントで処理されたプロセスに一意に割り当てられた識別子である。検出されたイベントがＩＰＣイベントである場合、通信元のプロセスの名称が記録される。
【００４８】
「ターゲット」は、アクセスイベントの場合、アクセス対象のデータであり、ＩＰＣイベントの場合、通信先のプロセスである。
【００４９】
図３は、解析結果１９１の内容をまとめた表である。同図を参照すると、解析結果１９１には、調査対象のデータ（「調査対象ファイル」）と、その依存元のデータ（「依存元」）とが対応付けて記載される。
【００５０】
次に、本実施形態のコンピュータ１の動作について説明する。図４は、コンピュータ１の動作を示すフローチャートである。この動作は、所定のアプリケーションが実行されたときに開始する。同図を参照すると、ＩＰＣ監視部１５１は、検知したＩＰＣにおけるプロトコルの種類を取得する（ステップＳ５）。ＩＰＣ監視部１５１は、通信内容取得処理を実行する（ステップＳ７）、ＩＰＣ分析部１５３は、プロトコルの種類とＩＰＣの処理内容とに基づいて、リソース間でコピーされたデータを受け渡すＩＰＣを検知する（ステップＳ９）。
【００５１】
ＩＯ監視部１５５は、リソースへのアクセスイベントを検知する（ステップＳ１１）。ログ作成部１５７は、リソースへのアクセスイベントと、データがコピーされるＩＰＣイベントを、記録したログ１７１を作成し、記憶部１７に格納する（ステップＳ１３）。
【００５２】
解析部１９は、ログ１７１を読み出し、解析処理を実行する（ステップＳ１５）。ステップＳ１５の後、コンピュータ１は、動作を終了する。
【００５３】
図５は、通信内容取得処理を示すフローチャートである。同図を参照すると、ＩＰＣ監視部１５１は、一連のＩＰＣの処理内容を一時的に記憶しておく（ステップＳ７１）。ＩＰＣ監視部１５１は、ある機能をもつ１つのＩＰＣが完了したか否かを判断する（ステップＳ７３）。
【００５４】
ＩＰＣが完了していなければ（ステップＳ７３：ＮＯ）、ＩＰＣ監視部１５１は、ステップＳ７１へ戻る。ＩＰＣが完了したならば（ステップＳ７３：ＹＥＳ）、ＩＰＣ監視部１５１は、ＩＰＣの処理内容（通信内容）を、一時記憶から再構成し、ＩＰＣ分析部１５３へ通知する（ステップＳ７５）。ステップＳ７５の後、ＩＰＣ監視部１５１は、通信内容取得処理を終了する。
【００５５】
図６は、リソース間でデータがコピーされるＩＰＣを検知するステップＳ９の内容を実現するコンピュータプログラムの一例である。同図におけるコンピュータプログラムは、Ｃ＋＋言語で記述されている。同図を参照すると、通信内容のプロトコルがＣＯＭのメソッド呼び出しで、そのメソッドのインタフェース名が「IDataObject」で、メソッド名が「GetData」の場合、リソース間でデータがコピーされる、すなわち依存関係が生じる（「true」）と判断される（ステップＳ９１）。このメソッド呼び出しは、プロセス間でＯＬＥ（Object  Linking  and  Embedding）によるドラッグ＆ドロップが生じた場合に呼び出されるものであり、ドラッグ元のプロセスの保持する情報を、ドラッグ先にコピーする機能を持つ。従って、このメソッド呼び出しは、データの依存関係を生じさせるものである。
【００５６】
通信内容のプロトコルがＣＯＭのメソッド呼び出しで、そのメソッドのインタフェース名が「IDataObject」で、メソッド名が「QueryGetData」の場合、このＩＰＣ通信によってデータの依存関係が生じない（「false」）と判断される（ステップＳ９３）。このメソッド呼び出しは、OLEによるドラッグ＆ドロップ中に、マウスカーソルがドロップ先のウインドウに入った場合に呼び出されるものであり、ドラッグ元のプロセスの保持する情報をドラッグ先に送信する機能はもたない。従って、このメソッド呼び出しは、データの依存関係を生じさせないものである。
【００５７】
ステップＳ９１、Ｓ９３のいずれのルールにも適合しない場合は、このＩＰＣ通信によってデータの依存関係が生じる（「true」）と判断される。エキスパートによって生成された判定ルールによっても検知できない依存関係が生じる場合もあり、この依存関係の検出漏れを防ぐためである。
【００５８】
図７は、解析処理を示すフローチャートである。同図を参照すると、解析部１９は、アクセスイベントのターゲットのうち、いずれかを調査対象のファイルＸとする（ステップＳ１５１）。解析部１９は、種類が「write」で、且つターゲットがファイルＸである、イベントＺがログに記録されているか否かを判断する（ステップＳ１５３）。
【００５９】
イベントＺが記録されていれば（ステップＳ１５３：ＹＥＳ）、解析部１９は、解析部１９は、イベントＺより前のイベントであって、イベントＺと同じプロセス名に対応付けられた「read」イベントＷを検索する。解析部１９は、検索したイベントＷを集合Ｙに追加する（ステップＳ１５５）。集合Ｙは、Ｘと依存関係を持つデータをターゲットとするイベントの集合である。
【００６０】
解析部１９は、イベントＺより前のイベントであって、イベントＺと同じプロセス名に対応付けられたＩＰＣイベントＷが記録されているか否かを判断する（ステップＳ１５７）。
【００６１】
イベントＷが記録されていれば（ステップＳ１５７：ＹＥＳ）、解析部１９は、イベントＷをイベントＺとし（ステップＳ１５９）、ステップＳ１５３に戻る。
【００６２】
ステップＳ１５７において、イベントＷが記録されていなければ（ステップＳ１５７：ＮＯ）、解析部１９は、ＸはＹに含まれるイベントのターゲットに依存すると判断し、これらのデータに依存関係を付与して解析結果１９１に記載する（ステップＳ１６１）。
【００６３】
イベントＺが記録されていなければ（ステップＳ１５３：ＮＯ）、ファイルＸが依存するファイルはないと判断する（ステップＳ１６３）。
【００６４】
ステップＳ１６１、またはステップＳ１６３の後、解析部１９は、全てのファイルついて。調査を行ったか否かを判断する（ステップＳ１６５）。全てのファイルについて調査を行っていなければ（ステップＳ１６５：ＮＯ）、解析部１９は、ステップＳ１５１に戻る。全てのファイルについて調査したならば（ステップＳ１６５：ＹＥＳ）、解析部１９は、解析処理を終了する。
【００６５】
続いて、ユーザのファイル操作の一例を示し、このファイル操作が行われたときのコンピュータ１の動作結果について、説明する。図８（ａ）〜図１０は、ユーザの一連のファイル操作を示す図である。図８（ａ）に示すように、コンピュータ１には、「aaa.txt」、「bbb.doc」、および「ccc.doc」のファイルが格納され、「wordpad」、および「winword」のプロセスが開始されている。ここで、ユーザは、「aaa.txt」、ファイルを、プロセス「wordpad」において読み込む操作を行った。
【００６６】
そして、図８（ｂ）に示すように、ユーザは、「bbb.doc」ファイルを、「winword」において読み込む操作を行った。
【００６７】
図９（ａ）に示すように、ユーザは、「winword」の実行画面をもう１つ開き、「ccc.doc」、ファイルを、「winword」において読み込む操作を行った。
【００６８】
図９（ｂ）に示すように、ユーザは、「winword」に読み込まれた「ccc.doc」ファイルをドラッグし、「wordpad」プロセス実行画面へドロップして、データをコピーした。
【００６９】
最後に、ユーザは、「wordpad」プロセスにおいて、読み込まれたファイル(「aaa.txt」、「ccc.doc」)を「ddd.doc」として、リソースに格納した。
【００７０】
これらのファイル操作が行われた場合、コンピュータ１は、図２に示したように、アクセスイベント、ＩＰＣイベントをログ１７１に記録する（ステップＳ１３）。具体的には、図８（ａ）、（ｂ）、および図９（ａ）に示したように、「wordpad」、「winword」プロセスにおいて、リソースからファイルが読み込まれたとき、時系列順に、それらのアクセスイベントが記録される。
【００７１】
続いて、図９（ｂ）において、ファイルのドラッグ中は、ドラッグ元のプロセスと、現在マウスカーソルの下にあるプロセスとの間で断続的にＩＰＣが行われるが、このＩＰＣは実質的には情報が流れないため、この間のＩＰＣイベントはログに記録されない。図９（ｂ）において、ファイルが、ドロップされたとき、リソース間においてデータがコピーされるので、ＩＰＣイベントが記録される。
【００７２】
最後に、図１０に示したように、「wordpad」プロセスにおいて、リソースへファイルが書き込まれたとき、時系列順に、そのアクセスイベントが記録される。
【００７３】
このログ１７１から、図３に示したように、「ddd.doc」ファイルは、「wordpad」、「winword」プロセスを通じて、「aaa.txt」、「bbb.doc」、および「ccc.doc」ファイルからコピーされたと解析される。すなわち、「ddd.doc」ファイルは、「aaa.txt」、「bbb.doc」、および「ccc.doc」ファイルに依存する。
【００７４】
以上、説明したように、本実施形態によれば、コンピュータ１（データ依存関係解析装置）は、処理内容に基づいて、リソース間でコピーされたデータを受け渡すプロセス間通信を検知するので、アプリケーション毎に個別にフィルタプログラムや状態検出ルールを作成するような煩雑な作業をしなくてもデータのコピーを検出することができ、データ流れの追跡が容易となる。また、検知したプロセス間通信において受け渡されたデータのコピー先とコピー元とに該当するデータ間の依存関係を付与するので、データの流れを的確に追跡することができる。
【００７５】
また、データ依存関係解析装置は、プロセス間通信で使用されるプロトコルの種類と処理内容とに基づいて、プロセス間通信の処理内容に基づいてコピーされるデータが受け渡されるプロセス間通信を検知するので、コピーされたデータを受け渡さないプロトコルを使用するプロセス間通信を除外できる結果、更にデータを的確に追跡できる。
【００７６】
解析部１９は、検知されたプロセス間通信のイベントを介して読み出しイベントと書き込みイベントを関連付け、その読み出しデータをコピー元とし、書き込みデータをコピー先としてコピーの依存関係を定めるので、プロセス間通信を介してデータがコピーされた場合であっても、コピーされたデータを的確に追跡できる。
【００７７】
（第２の実施形態）
本発明の第２の実施形態について説明する。本実施形態のコンピュータ１は、依存関係の度合いを更に求める点で、第１の実施形態のコンピュータ１と異なる。
【００７８】
図１１は、本実施形態のログ作成部１５７が作成するログ１７１の内容をまとめた表である。同図を参照すると、各イベントに対応付けて、ターゲットのデータサイズが更に記録される。ＩＰＣイベントの場合、受け渡されるデータサイズが記録される。本実施形態では、データサイズが、所定値より大きい時は「２」、そうでないときは「１」が「データサイズ」欄に記録される。
【００７９】
図１２は、本実施形態の解析結果１９１の構成を示す。同図を参照すると、解析結果１９１には、依存元のファイルごとに、「依存度」が更に記載される。依存度とは、ターゲットとされたデータ間の依存関係の度合いのことであり、コンピュータ１は、依存関係のある、それぞれのデータのデータサイズが大きいほど、依存度が大きいと評価する。
【００８０】
図１３は、本実施形態のコンピュータ１の動作を示すフローチャートである。同図を参照すると、本実施形態のコンピュータ１の動作は、ステップＳ９の代わりに、ステップＳ９ａが実行される以外は、第１の実施形態の動作と同様である。
【００８１】
ステップＳ９ａにおいて、ＩＰＣ分析部１５３は、リソース間でデータがコピーされるＩＰＣと、コピーされるデータのデータサーズとを取得する。
【００８２】
図１４は、本実施形態のステップＳ９ａの処理内容を実現したコンピュータプログラムの一例である。ＩＰＣ分析部１５３は、ドラッグ＆ドロップされたデータのサイズをＩＰＣ通信内容から算出し、そのデータサイズが所定値より大きければ、「２」を返す（ステップＳ９１ａ）。データサイズが所定値以下であれば、ＩＰＣ分析部１５３は、「１」を返す（ステップＳ９３ａ）。データのコピーが生じない処理内容であれば、ＩＰＣ分析部１５３は、「０」を返す（ステップＳ９５ａ）。
【００８３】
依存関係の有無を判断できないときは、ＩＰＣ分析部１５３は、保守的に「２」を返す（ステップＳ９７ａ）。
【００８４】
ログ作成部１５７は、ＩＰＣ分析部１５３により「１」、または「２」が返されたときに、そのＩＰＣイベントをログ１７１に記録する。
【００８５】
図１５は、本実施形態の解析処理を示すフローチャートである。同図を参照すると、本実施形態の解析処理は、解析部１９がステップＳ１５５の後にステップＳ１５６を実行し、ステップＳ１５９の代わりにステップＳ１５９ａを実行する以外は、第１の実施形態の解析処理と同様である。
【００８６】
ステップＳ１５６において、解析部１９は、イベントＺに対応する「データサイズ」に、イベントＷに対応する「データサイズ」を乗算し、乗算した値を、そのＷの「依存度」とする。
【００８７】
ステップＳ１５９ａにおいて、解析部１９は、イベントＷをイベントＺとしたとき、そのイベントＺの依存度を算出する。
【００８８】
以上説明したように、本実施形態によれば、コンピュータ１が、ターゲットのデータサイズが大きいほど高く依存度を評価するので、コンピュータ１は、データ間の依存関係の強弱を把握することが可能となる。コンピュータ１は、この依存関係が強いデータを優先的に追跡することにより、データ追跡の効率を更に向上させることができる。
【００８９】
（第３の実施形態）
本発明の第３の実施形態について説明する。図１６は、本実施形態のコンピュータ１ｂの構成を示すブロック図である。同図を参照すると、コンピュータ１ｂは、監視部１５において、動的情報フロー分析部１５６を更に有する点で、第１の実施形態のコンピュータ１と異なる。
【００９０】
動的情報フロー分析部１５６は、プロセスによるリソースの読み込みを引き起こすシステムコールと、プロセスによるリソースの書き出しを引き起こすシステムコールを定義した定義情報１５６１を用いて、プロセスに読み込まれたリソースのデータをプロセスが書き出すまでのプロセス内部でのデータの受け渡しを検査する。
【００９１】
動的情報フロー分析部１５６は、非特許文献３（Feng  Qin,  Cheng  Wang,  Zhenmin  Li,  Ho-seop  Kim,  Yuanyuan  Zhou,  and  Youfeng  Wu  LIFT:  A  Low-Overhead  Practical  Information  Flow  Tracking  System  for  Detecting  Security  Attacks  ACM/IEEE  International  Symposium  on  Microarchitecture  (MICRO'06),  2006）、または非特許文献４(Prateek  Saxena,  R.  Sekar  and  Varun  Puranik  Efficient  Fine-Grained  Binary  Instrumentation  with  Applications  to  Taint-Tracking  ACM/IEEE  International  Symposium  on  Code  Generation  and  Optimization,  2008)に記載の方法により、プロセス内部でのデータの受け渡しを検査する。
【００９２】
より詳細には、動的情報フロー分析部１５６は、メモリに現在どのような情報が保存されているかを表すタグを対応付けておき、プロセスのメモリ操作処理に対応させてタグを伝播させるコードをプロセスに埋め込み実行させることによって、あるメモリ上のデータが、別のメモリ上のデータに依存するものかどうかを判定する。この手法を用い、動的情報フロー分析部１５６は、システムコールが、あるリソースＡをメモリバッファ上に読み込んだ際に、そのメモリバッファにリソースＡに対応するタグを付加する。その後、動的情報フロー分析部１５６は、そのバッファ上のデータの処理に応じてタグを伝播し、最終的にシステムコールによって、メモリバッファ上の内容が、他のリソースＢに書き込まれた場合、そのメモリバッファにリソースＡに対応するタグが付加されていれば、リソースＢはリソースＡに依存することを示す情報を出力する。
【００９３】
本実施の形態においては、ＩＰＣ分析部１５３によって依存関係を持つと判定されたＩＰＣに関しては、動的情報フロー分析部１５６は、ＩＰＣに対する入力とＩＰＣから出力の間でもタグを伝播させる。
【００９４】
ログ作成部１５７は、リソースへの書き出しイベントとＩＰＣイベントとにおいて、そのイベントで出力先（ターゲット）になったリソースやプロセスについて、どのリソースやプロセス（依存元）に由来するデータが出力されたのかを、動的情報フロー分析部１５６から通知されたタグから特定する。そして、ログ作成部１５７は、各イベントにおいて、イベントの種類およびターゲットのみならず、その依存元のリソースもログ１７１に記録する。
【００９５】
解析部１９は、調査対象のファイルＸが依存するファイルを調べる場合、種類がwriteであり、ターゲットをＺＸとするファイルを検索する。該当するファイルがない場合、解析部１９は、Xに依存するファイルは存在しないと判断する。該当するファイルがあれば、解析部１９は、そのファイルに対応づけて記録された依存元のファイルが、Ｘの依存元であると判断する。
【００９６】
図１７は、本実施形態の定義情報１５６１の内容をまとめた表である。同図を参照すると、定義情報１５６１には、リソースの読み込みを引き起こすシステムコール（例えば、read）と、リソースの書き出しを引き起こすシステムコール（例えば、write）とが定義されている。定義内容としては、システムコールの名称や、各引数の意味内容（データの受け渡し元なのか、データの受け渡し先なのかなど）である。
【００９７】
図１８は、本実施形態のログ１７１の内容をまとめた表である。同図を参照すると、ログ１７１には、各イベントにおいて、そのイベントの種類およびターゲットのみならず、その依存元のデータが更に記録される。
【００９８】
図１９は、本実施形態のコンピュータ１ｂの動作を示すフローチャートである。同図を参照すると、本実施形態におけるコンピュータ１ｂの動作は、コンピュータ１ｂがステップＳ１１の後に、更にステップＳ１２を実行し、ステップＳ１３、Ｓ１５の代わりにステップＳ１３ｃ、１５ｃを実行する以外は、第１の実施形態のコンピュータ１の動作を同様である。
【００９９】
ステップＳ１１の後、動的情報フロー分析部１５６は、プロセス内部のデータの受け渡しを検査し、ＩＰＣ、またはプロセスのターゲットの依存元のリソースを特定するための情報を出力する（ステップＳ１２）。ログ作成部１５７は、各イベントにおいて、そのイベントの種類に対応付けて、ターゲットと、依存元のリソースとを記録する（ステップＳ１３ｃ）。
【０１００】
図２０は、本実施形態の解析処理（ステップＳ１５ｃ）を示すフローチャートである。同図を参照すると、本実施形態の解析処理は、ステップＳ１５５〜Ｓ１５９の代わりに、ステップＳ１５４を実行する以外は、第１の実施形態の解析処理と同様である。
【０１０１】
解析部１９は、種類が「write」で、且つターゲットがファイルＸである、イベントＺがログ１７１に記録されていれば（ステップＳ１５３：ＹＥＳ）、イベントＺの依存元のファイルを、Ｙに追加する（ステップＳ１５４）。ステップＳ１５４の後、解析部１９は、ステップＳ１６１を実行する。
【０１０２】
以上説明したように、本実施形態によれば、コンピュータ１ｂは、データの書き出しを引き起こすシステムコールについて、データの受け渡し元の引数を定義した定義情報に基づいて、書き出されたアクセス対象データに対応付けて、受け渡し元の引数に設定されたアクセス対象データを、コピー元として更に記録するので、データの流れの追跡が更に容易となる。
【０１０３】
例えば、第１の実施形態にかかる図３において、調査対象ファイル（ccc.doc）について、依存元として、３つのファイル（aaa.txt、bbb.doc、ccc.doc）が取得されたが、本実施形態における図１８において、同じターゲット（ccc.doc）について、依存元として、２つのファイル（aaa.txt、ccc.doc）しか取得されない。これは、第１の実施形態では、コンピュータ１は、プロセス間のデータの受け渡しは検知するが、プロセス内部でのデータの受け渡し（メモリとメモリバッファとの間のデータの受け渡しなど）までは検知しないためである。このため、第１の実施形態のコンピュータ１は、実際に調査対象ファイル（ccc.doc）に依存しないファイル（bbb.doc）まで依存元とし、本実施形態よりも過剰な依存関係を取得していた。
【０１０４】
しかし、本実施形態では、コンピュータ１ｂは、動的情報フロー分析部１５６によって、ドラッグ＆ドロップ元の文書を特定することができ、過剰な依存関係の生成を更に抑制しているため、データの編集が進み、依存関係を持つリソースの数が増える場合であっても、コンピュータ１ｂはデータを正確に追跡できる。
【０１０５】
（第４の実施形態）
本発明の第４の実施形態について説明する。図２１は、本実施形態のコンピュータ１ｃの構成を示すブロック図である。同図を参照すると、コンピュータ１ｃは、監視部１５において、セキュリティレベル判定部１５０を更に有する点で第１の実施形態のコンピュータ１と異なる。
【０１０６】
セキュリティレベル判定部１５０は、読み込み対象のリソースのセキュリティレベル（機密性の高さ）を判定する。
【０１０７】
判定の基準としては、例えば、セキュリティレベル判定部１５０は、特定のディレクトリに格納されているファイルは、そうでないファイルよりセキュリティレベルが高いものと判定する。また、セキュリティレベル判定部１５０は、特開２００６−２０９６４９号公報に記載のように、読み込んだファイルの内容に応じて、セキュリティレベルの高さを判定する。
【０１０８】
ログ作成部１５７は、各イベントに対応付けて、セキュリティレベルを更に記録する。
【０１０９】
解析部１９は、調査対象ファイルの読み込み(read)元のファイルを検索したとき、その調査対象ファイルより低いセキュリティレベルのファイルのみを依存元とする。
【０１１０】
図２２は、本実施形態のログ１７１の内容をまとめた表である。同図に示すように、ログ１７１には、各イベントに対応付けて、各ターゲットのセキュリティレベルが更に記録される。セキュリティレベルは、例えば、「０」（機密保持の必要なし）、「１」（機密保持の必要あり）の２段階とする。
【０１１１】
図２３は、本実施形態のコンピュータ１ｃの動作を示すフローチャートである。同図を参照すると、コンピュータ１ｃの動作は、セキュリティレベル判定部１５０が、読み込み元のリソースのセキュリティレベルを取得（ステップＳ３）した後、ステップＳ５を実行する以外は、第１の実施形態のコンピュータ１の動作と同様である。
【０１１２】
図２４は、本実施形態の解析処理を示すフローチャートである。同図を参照すると、本実施形態の解析処理は、解析部１９がステップＳ１５５の代わりにステップＳ１５４、Ｓ１５５ｃを実行する以外は、第１の実施形態の解析処理と同様である。
【０１１３】
解析部１９は、イベントＺがあった場合（ステップＳ１５３：ＹＥＳ）、イベントＺより前のイベントであって、イベントＺと同じプロセス名に対応付けられた「read」イベントＷを検索する（ステップＳ１５４）。そして、解析部１９は、イベントＺに対応するセキュリティレベルより、イベントＷに対応するセキュリティレベルが低ければ、検索したイベントＷを集合Ｙに追加する（ステップＳ１５５ｃ）。
【０１１４】
以上説明したように、本実施形態によれば、セキュリティレベル判定部１５０が、読み込み元のリソースのセキュリティレベルを取得し、解析部１９が、所定値以上のセキュリティレベルのファイル間の依存関係のみを取得するので、セキュリティレベルが比較的低いファイル間の依存関係の取得を省く結果、コンピュータ１ｃは、データ追跡の効率をより向上させることができる。
【０１１５】
（第５の実施形態）
本発明の第５の実施形態について説明する。本実施形態のコンピュータ１ｃの構成は、ログ作成部１５７が、セキュリティレベルが所定値以下のアクセスイベントについては、記録しない以外は、第４の実施形態のコンピュータ１ｃと同様である。
【０１１６】
図２５は、本実施形態のコンピュータ１ｃの動作を示すフローチャートである。同図を参照すると、コンピュータ１ｃの動作は、ログ作成部１５７が、ステップＳ１３の代わりにステップＳ１３ｄを実行する以外は、第１の実施形態のコンピュータ１の動作と同様である。
【０１１７】
ステップＳ１１の後、ログ作成部１５７は、セキュリティレベルが所定値より低いイベントの記録は破棄し、セキュリティレベルが所定値以上のアクセスイベントのみを記録する（ステップＳ１３ｄ）。
【０１１８】
以上説明したように、本実施形態によれば、セキュリティレベルの高い情報に関わる重要なイベントのみに着目するので、データ追跡の能率が向上する。また、コンピュータ１ｃは、ログ１７１のサイズを抑えることができる。
【０１１９】
（第６の実施形態）
本発明の第６の実施形態について説明する。図２６は、本実施形態のコンピュータ１ｅの構成を示すブロック図である。同図を参照すると、コンピュータ１ｅは、ＩＯ仲介部１１を更に有する点で第４の実施形態のコンピュータ１ｃと異なる。
【０１２０】
セキュリティレベル判定部１５０は、データの書き出し先のリソースのセキュリティレベルを更に取得する。
【０１２１】
書き出し先のリソースのセキュリティレベルの判定において、セキュリティレベル判定部１５０は、例えば、ＵＳＢ（Universal  Serial  Bus）メモリなど、特定の記憶装置は、それ以外の記憶装置よりセキュリティレベルの低いものとする。また、セキュリティレベル判定部１５０は、特定のディレクトリは、それ以外のディレクトリよりセキュリティレベルが高いものとする、あるいは低いものと判定する。セキュリティレベル判定部１５０は、特定のサーバに対するＨＴＴＰＳ（Hypertext  Transfer  Protocol  over  Secure  Socket  layer）送信は、不特定のサーバに対する送信よりセキュリティレベルが高いものと判定する。
【０１２２】
ＩＯ仲介部１１は、ＩＯ仲介部１１は、リソースへの書き出しのＩＯを仲介した際に、書き出し先のリソースのセキュリティレベルが、読み込み元（書き出し先の依存元）のセキュリティレベルよりも低い場合は、そのシステムコール呼び出しを失敗させることによって書き出しを禁止する。
【０１２３】
図２７は、本実施形態のコンピュータ１ｅの動作を示すフローチャートである。同図を参照すると、コンピュータ１ｅの動作は、ＩＯ仲介処理（ステップＳ１）を実行した後、ステップＳ５を実行する以外は、第１の実施形態のコンピュータ１の動作と同様である。
【０１２４】
図２８は、本実施形態のＩＯ仲介処理の動作を示すフローチャートである。同図を参照すると、セキュリティレベル判定部１５０は、readプロセスが実行されたか否かを判断する（ステップＳ１０１）。readプロセスが実行されたのであれば（ステップＳ１０１：ＹＥＳ）、セキュリティレベル判定部１５０は、読み込み元のセキュリティレベルを取得する（ステップＳ１０３）。
【０１２５】
readプロセスが実行されたのでない場合（ステップｓ１０１：ＮＯ）、またはステップＳ１０３の後、セキュリティレベル判定部１５０は、読み出したデータを書き出す、writeプロセスが実行されたか否かを判断する（ステップＳ１０５）。writeプロセスが実行されたのであれば（ステップＳ１０５：ＹＥＳ）、セキュリティレベル判定部１５０は、書き出しのセキュリティレベルを取得する（ステップＳ１０７）。
【０１２６】
ＩＯ仲介部１１は、読み込み元のリソースのセキュリティレベルより、読み込み元のリソースより、書き出し先のリソースのセキュリティレベルが、高いか否かを判断する（ステップＳ１０９）。
【０１２７】
読み込み元より、書き出し先のリソースのセキュリティレベルが高いのであれば（ステップＳ１０９：ＹＥＳ）、ＩＯ仲介部１１は、そのリソースへのデータの書き出しを禁止する（ステップＳ１１１）。ステップＳ１１１の後、コンピュータ１ｅは、ＩＯ仲介処理を終了する。
【０１２８】
なお、本実施の形態では、機密情報が外部に流出することのみを防ぐ構成になっているが、ユーザにもセキュリティレベルを定義しておき、機密情報を読むことができるユーザのみ機密情報を読みこみ可能にする構成をとることもできる。例えば、ユーザが起動したプロセスに対して、そのユーザのセキュリティレベルを割り振っておき、ＩＯ仲介部１１は、プロセスのセキュリティレベルよりも高いセキュリティレベルを持つリソースの読み込みは禁止するように構成すればよい。このようにすれば、ユーザのセキュリティレベルよりも高いセキュリティレベルを持つリソースを読み込もうとしても失敗するため、そのユーザに対する機密情報の開示を防止できる。
【０１２９】
以上説明したように、本実施形態によれば、ＩＯ仲介部１１が、書き出し元のリソースのセキュリティレベルが、読み込み元のリソースのセキュリティレベルより高ければ、リソースへ書き出しを許可するので、機密性の高い（セキュリティレベルの高い）データが機密性の低い（セキュリティレベルの低い）リソースに書き出されることを未然に防ぐことができる。
【０１３０】
非特許文献１に示したように、機密性の高いファイルのＵＳＢメモリへの書き出しのみを禁止するツールは実用化されているが、これらはファイルの内容が暗号化などによって機密性が判定できないほど改変されていた場合は、正しく動作しない。これに対して、本実施形態のコンピュータ１ｅは、プロセス間のデータのやり取りを追跡するため、機密性が判定できないほど改変される前のセキュリティレベルに基づいて、正しく書き込みを禁止することができる。
【０１３１】
システムコールを失敗させることによってシステムが不安定になる可能性は低い。ファイルオープンやネットワーク接続を起こすシステムコールは、（ファイルパーミッションの不足やネットワーク接続エラーなどによって）失敗することは良くあるので、アプリケーション側でシステムコール失敗時の適切な処理が書かれているのが普通であるが、ＩＰＣを起こすシステムコールは、それらと比較すると失敗することは少ないため、アプリケーション側でシステムコール失敗時の処理が適切に書かれていない場合が多い。そのため、ＩＰＣを行うシステムコールを失敗させることは、既存のアプリケーションの動作を不安定にさせる（例えば、そのアプリケーションソフトウェアがクラッシュする）可能性がある。
【０１３２】
しかしながら、本実施の形態は、プロセスのファイルやネットワークへのアクセスは制御するものの、ＩＰＣの制御はしないという特徴があり、その結果、既存のアプリケーションの動作を不安定にさせる可能性を最小にしつつ、機密データの漏洩を防止することができる。
【０１３３】
（第７の実施形態）
本発明の第７の実施形態について説明する。図２９は、本実施形態のコンピュータ１ｆの構成を示すブロック図である。同図を参照すると、コンピュータ１ｆは、暗号化部１２、復号部１３、および鍵管理部１４を更に有する点で第１の実施形態のコンピュータ１ｆと異なる。
【０１３４】
暗号化部１２は、リソースへデータを書き出すとき、書き出し先のリソースのセキュリティレベルが所定値以上であれば、セキュリティレベルに応じた鍵で、ターゲットのデータを暗号化する。
【０１３５】
復号部１３は、リソースから読み出したデータが暗号化されているか否かを判断する。例えば、暗号化されたファイルやネットワークパケットには特定のヘッダを付加されるようにしておき、復号部１３は、読み出したデータのヘッダを検査することで、暗号化の有無を判断する。暗号化されていれば、復号部１３は、鍵管理部１４から鍵を取得してデータを復号する。
【０１３６】
鍵管理部１４は、ファイルを暗号化し、復号するための鍵を管理する。
【０１３７】
本実施形態のコンピュータ１ｆは、第６の実施形態と同様、ステップＳ５の前に、ＩＯ仲介処理（ステップＳ１）を実行する。
【０１３８】
図３０は、本実施形態のＩＯ仲介処理を示すフローチャートである。同図を参照すると、復号部１３は、readプロセスが実行されたか否かを判断する（ステップＳ１０１）。readプロセスが実行されたのであれば（ステップＳ１０１：ＹＥＳ）、復号部１３は復号処理を実行する（ステップＳ１０２）。
【０１３９】
readプロセスが実行されたのでない場合（ステップｓ１０１：ＮＯ）、またはステップＳ１０２の後、復号部１３は、writeプロセスが実行されたか否かを判断する（ステップＳ１０５）。writeプロセスが実行されたのであれば（ステップＳ１０５：ＹＥＳ）、暗号化部１２は、暗号化処理を実行する（ステップＳ１０６）。writeプロセスが実行されたのでない場合（ステップＳ１０５：ＮＯ）、またはステップＳ１０６の後、コンピュータ１ｆは、ＩＯ仲介処理を終了する。
【０１４０】
図３１は、復号処理を示すフローチャートである。同図を参照すると、復号部１３は、readプロセスにより、読み出されたデータが暗号化されているか否かを判断する（ステップＳ１２１）。
【０１４１】
データが暗号化されていれば（ステップＳ１２１：ＹＥＳ）、復号部１３は、鍵管理部１４から鍵を取得し、その鍵でデータを復号する（ステップＳ１２３）。そして、復号部１３は、そのデータのセキュリティレベルを１に設定する（ステップＳ１２５）。
【０１４２】
データが暗号化されていなければ（ステップＳ１２１：ＮＯ）、復号部１３は、そのデータのセキュリティレベルを０に設定する（ステップＳ１２７）。ステップＳ１２５、Ｓ１２７の後、復号部１３は、復号処理を終了する。
【０１４３】
図３２は、暗号化処理を示すフローチャートである。同図を参照すると、暗号化部１２は、書き出し処理における、ターゲットのデータに設定されたセキュリティレベルを取得する（ステップＳ１６１）。暗号化部１２は、取得したセキュリティレベルが１であるか否かを判断する（ステップＳ１６３）。
【０１４４】
セキュリティレベルが１であれば（ステップＳ１６３：ＹＥＳ）、暗号化部１２は、鍵管理部１４から鍵を取得し、ターゲットのデータを暗号化する（ステップＳ１６５）。セキュリティレベルが１でない場合（ステップＳ１６３：ＮＯ）、またはステップＳ１６５の後、暗号化部１２は、暗号化処理を終了する。
【０１４５】
なお、本実施の形態では、煩雑さを避けるため、全ての機密なリソースが鍵管理部１４で管理している同一の鍵で暗号化されるという構成で説明したが、暗号化部１２は、各データをそれぞれランダムに生成された個別の鍵で暗号化するように構成してもよい。また、公開鍵暗号方式を使って復号部１３でのみ秘密鍵を使うようにしてもよい。
【０１４６】
また、本実施の形態では、セキュリティレベルは２段階（「０」、「１」）としたが、３段階以上のセキュリティレベルを設定してもよい。この場合、コンピュータ１ｆは、セキュリティレベルに対応する情報をヘッダに記録しておき、セキュリティレベルに応じて鍵を変更すればよい。
【０１４７】
更に、本実施形態では、機密情報が平文で外部に流出することのみを防ぐ構成になっているが、ユーザにもセキュリティレベルを定義しておき、機密情報を読むことができるユーザのみ機密情報を読みこみ可能にする構成をとることもできる。例えば、ユーザが起動したプロセスに対しては、そのユーザのセキュリティレベルを割り振っておき、復号部１３は、プロセスのセキュリティレベルよりも高いセキュリティレベルに対応する鍵は配付しないようにする。このようにすれば、ユーザのセキュリティレベルよりも高いセキュリティレベルを持つリソースを読み込もうとしても復号できないため、そのユーザに対する機密情報の開示を防止できる。
【０１４８】
以上説明したように、本実施形態によれば、コンピュータ１ｆは、機密情報を暗号化して書き出すので、機密情報がＵＳＢメモリやメールなどで外部に流出することがあっても、鍵が漏洩しない限り、データの機密性を保つことができる。
【０１４９】
同様の技術は、Ｍｉｃｒｏｓｏｆｔ  Office２００３（登録商標）に実装されているIRM  (Information  Rights  Management)のような、いわゆるＥＲＭ（Enterprise  Rights  Management）／ＤＲＭ(Digital  Rights  Management)ツールによって実現することができる。しかし、ＥＲＭ／ＤＲＭツールはこのような動作を実現するための処理をアプリケーションソフトウェアに組み込むことで実現しているため、対応可能なアプリケーションソフトウェアに制限がある。これに対して、本実施形態のコンピュータ１ｆは、アプリケーションソフトウェアに依存せずに動作する。
【０１５０】
なお、上記の各実施形態では、コンピュータ１が、ログの記録と、依存関係の解析とを両方とも行う構成としているが、それぞれの実施形態において、図３３に示すように、ログの記録と、依存関係の解析とを別々の装置（１、２）が行う構成としてもよい。
【０１５１】
この出願は、２００８年１２月８日に出願された日本出願特願２００８−３１２２４２を基礎として優先権の利益を主張するものであり、その開示の全てを引用によってここに取り込む。
【符号の説明】
【０１５２】
１、１ｃ、１ｅ、１ｆ    コンピュータ
２    解析装置
１２    暗号化部
１３    復号部
１４    鍵管理部
１５    監視部
１７    記憶部
１９    解析部
１５０    セキュリティレベル判定部
１５１    ＩＰＣ監視部
１５３    ＩＰＣ分析部
１５５    ＩＯ監視部
１５６    動的情報フロー分析部
１５７    ログ作成部
１７１    ログ
１９３    解析結果
１５６１    定義情報
Ｓ５〜Ｓ１５、Ｓ７１〜Ｓ７５、Ｓ９１〜Ｓ９５、Ｓ１５１〜Ｓ１６５、Ｓ９ａ、Ｓ９１ａ〜Ｓ９７ａ、Ｓ１５９ａ、Ｓ１３ｃ、Ｓ１５ｃ、Ｓ１５５ｃ、Ｓ１３ｄ、Ｓ１０１〜Ｓ１１１、Ｓ１２１〜Ｓ１２７、Ｓ１６１〜Ｓ１６５    ステップ
【図１】
0005387584.tif 000002
【図２】
0005387584.tif 000003
【図３】
0005387584.tif 000004
【図４】
0005387584.tif 000005
【図５】
0005387584.tif 000006
【図６】
0005387584.tif 000007
【図７】
0005387584.tif 000008
【図８】
0005387584.tif 000009
【図９】
0005387584.tif 000010
【図１０】
0005387584.tif 000011
【図１１】
0005387584.tif 000012
【図１２】
0005387584.tif 000013
【図１３】
0005387584.tif 000014
【図１４】
0005387584.tif 000015
【図１５】
0005387584.tif 000016
【図１６】
0005387584.tif 000017
【図１７】
0005387584.tif 000018
【図１８】
0005387584.tif 000019
【図１９】
0005387584.tif 000020
【図２０】
0005387584.tif 000021
【図２１】
0005387584.tif 000022
【図２２】
0005387584.tif 000023
【図２３】
0005387584.tif 000024
【図２４】
0005387584.tif 000025
【図２５】
0005387584.tif 000026
【図２６】
0005387584.tif 000027
【図２７】
0005387584.tif 000028
【図２８】
0005387584.tif 000029
【図２９】
0005387584.tif 000030
【図３０】
0005387584.tif 000031
【図３１】
0005387584.tif 000032
【図３２】
0005387584.tif 000033
【図３３】
0005387584.tif 000034