(57)【要約】【課題】APIフック条件の複雑な設定を必要としないアプリケーション実行装置、方法及びプログラムを提供する。【解決手段】アプリケーション実行装置は、データが記憶されるメモリと、メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるシャドウメモリと、APIフック条件を満たす場合に、APIフックを実行するAPIフック手段と、メモリに記憶されたデータを処理する際に、データに対応するテイントを伝搬するテイント情報伝搬手段とを含む。APIフック条件は、「処理対象となるデータに対応するシャドウメモリにテイントが記憶されていること」という条件を含む。【選択図】図２
2015225571.tif 000002
【特許請求の範囲】
【請求項１】
データが記憶されるメモリと、
前記メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるシャドウメモリと、
APIフック条件を満たす場合に、APIフックを実行するAPIフック手段と、
前記メモリに記憶されたデータを処理する際に、データに対応するテイントを伝搬するテイント情報伝搬手段とを含み、
前記APIフック条件は、「処理対象となるデータに対応するシャドウメモリにテイントが記憶されていること」という条件を含む、
アプリケーション実行装置。
【請求項２】
請求項１のアプリケーション実行装置であって、
通信を行う際に用いる仮想的なインターフェースであるソケットを管理するソケットシステムと、
前記ソケットを用いて前記シャドウメモリに記憶されているテイントに対応する前記メモリに記憶されている前記データを送信しようとしたとき、前記ソケットによる通信を強制的に切断する強制切断手段とを更に含む、
アプリケーション実行装置。
【請求項３】
請求項１または２のアプリケーション実行装置であって、
前記APIフックを実行した際に、API実行結果としてエラーを返す強制エラー化手段を更に含む、
アプリケーション実行装置。
【請求項４】
請求項１〜３の何れかのアプリケーション実行装置であって、
データが記憶されるストレージと、
前記ストレージに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるシャドウストレージと、
前記APIフック条件を満たしたとき、第三者が読み書きできない保護化データを読み書きする、あるいは、保護化データと保護化状態が解除された解除化データとの間の変換動作を行う保護化・保護解除化手段とを更に含み、
前記シャドウストレージに記憶されているテイントに対応する前記ストレージに記憶されている前記データは保護化データとして記憶されている、
アプリケーション実行装置。
【請求項５】
請求項４のアプリケーション実行装置であって、
前記ストレージにデータを書き込む際には、前記保護化・保護解除化手段が、そのデータを保護化データに変換して、前記ストレージに記憶し、
ファイルを閉じる時点において、前記ストレージに記憶されている前記保護化データのうち、前記シャドウストレージにテイントが記憶されていない保護化データは、前記保護化・保護解除化手段が前記保護化データを解除化データに変換して、前記ストレージに記憶する、
アプリケーション実行装置。
【請求項６】
請求項４のアプリケーション実行装置であって、
前記ストレージに前記メモリ上のデータを書き込む際に、そのデータに対応する、前記シャドウメモリにテイントが記憶されていない限り、前記メモリ上のデータをそのまま前記ストレージに書き込み、
最初に前記シャドウメモリにテイントが記憶されている、前記メモリ上のデータを前記ストレージに書き込もうとした際に、前記保護化・保護解除化手段は、それまでに前記ストレージに書き込んだデータ、及び、ファイルを閉じるまでに書き込むデータを全て、保護化データに変換して、前記ストレージに記憶する、
アプリケーション実行装置。
【請求項７】
メモリにはデータが記憶されるものとし、シャドウメモリには、メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるものとし、
APIフック手段が、APIフック条件を満たす場合に、APIフックを実行するAPIフックステップと、
テイント情報伝搬手段が、メモリに記憶されたデータを処理する際に、データに対応するテイントを伝搬するテイント伝搬ステップとを含み、
前記APIフック条件は、「処理対象となるデータに対応するシャドウメモリにテイントが記憶されていること」という条件を含む、
アプリケーション実行方法。
【請求項８】
請求項１〜６の何れかのアプリケーション実行装置として、コンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、API(Application Programming Interface)及びAPIフックを用いて、アプリケーションを実行する装置、方法及びプログラムに関する。
【背景技術】
【０００２】
デジタル情報は容易に複製が可能である。そのため、メール添付等で相手に送付した資料が勝手に第三者に送付されたり、部分的に複製されて別の情報として流通したりという問題が生じやすい。情報について権利を持っている原著作者や法人などが意図した範囲を超えた流通や情報漏洩等の事態が容易に発生しうる。そのような事態が発生するのを防止するための各種技術が開発されてきた。
【０００３】
情報流通制御の手段としてIRM(Information Rights Management)に代表されるように、デジタル情報を暗号化し鍵を持たない者には読めない形態として流通させ、情報を届けたい相手のアプリケーションにだけ鍵を渡して開けるようにする方法がある。この方法は、有価情報の配布手段などに用いられている。
【０００４】
この場合、許可された相手のアプリケーションに限定してデジタル情報を開かせることができる。しかし、アプリケーションの作りによっては、例えば、読み込んだファイルの情報を「別名で保存する」等の形で、ユーザ操作によって容易に暗号化されていない情報の複製を作ることが出来てしまい、暗号化の意味がなくなってしまう。このように一般のアプリケーション全体に対する流通制御は難しいため、例えば、非特許文献１のマイクロソフト(登録商標)社のRights Management Services(以下RMSともいう)に代表されるように、アプリケーションの仕組みの一部として情報保護機能を組み込んで保護する事が一般的に行われている。
【０００５】
しかしながら、全てのアプリケーションが情報保護機能を実装している訳ではなく、また、アプリケーションによって機能や設定方法が異なるなど使いづらい側面を持っている。
【０００６】
この課題を解决する技術として、APIフックを利用した情報保護技術が考案された（非特許文献２参照）。なお、API(Application Programming Interface)とは、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のことである。APIフックとは、所定の条件を満たすとき、APIの呼び出しを横取りし、APIが果たすべき機能を停止させ、異なる処理を実行する処理や本来のAPI処理の前後に追加処理を実行する処理のことである。APIフックを利用して、ファイルの入出力を迂回させる汎用的な仕組みの下でアプリケーションを動作させ、暗号化されたコンテンツを復号して読み込む場合のみ当該アプリケーションから読み込めるものとする。また、アプリケーションが書き込もうとした場合には、APIフックを利用して、APIの呼び出しを横取りして別の場所に書き込んだり、書き込みをエラーにして実施しなかったりする形で情報漏洩防止を図る方法が考案された。この場合、アプリケーションを改変する事なく実現可能である点が重要である。すなわち、第三者が開発したアプリケーションも含め、全てのアプリケーションに対して適用可能であるため、穴のない対策が可能になる。
【０００７】
代表的な従来技術は、図１にあるようにファイル入出力のAPIに対してAPIフックという形で実現している。APIフックは、例えばドライバーによるフィルタリングの形での実装や、仮想化技術を用いた実装も存在するが、実効的にはAPIが果たすべき機能を横取りする点において本質的には何れの実装方法であっても同等である。
【０００８】
例えば、APIフック条件を「特定のパス名（またはファイル名）のファイルに対する入出力であること」とし、この条件を満たす場合に、ファイルの読み込みの際に特定のパス名のファイルに関して通常のAPIを用いたファイル入出力とは異なる処理（APIフック処理）を行う等である。
【０００９】
メモリ９１上で、アプリケーション９３、APIフック手段９４、保護化・保護解除化手段９５が実行される。APIフック手段９４には、予めAPIフック条件Conが与えられる。ストレージ９２には、第三者が読み書きできない保護化されたデータ（以下、「保護化データ」ともいう）Dencと通常のデータ（第三者が読み書き可能な、保護化されていないデータ）Dとが記憶されている。
【００１０】
例えば、APIフック条件Conを「全ての書き込み」または「読み込むファイルのパス名が特定のパス名と一致する」とし、何れかの条件に合致する場合に、APIフック手段９４が、APIフック処理を行う事で実現する。読み込むファイルのパス名が特定のパス名以外の場合には、APIフック手段９４はAPIフック処理を行わず、アプリケーション９３は、APIを呼び出して、通常の読み込み処理を行う。アプリケーション９３がAPIを呼び出して「書き込み」を行う場合や「読み込むファイルのパス名が特定のパス名と一致する」場合には、APIフック手段９４はAPIフック処理を実行し、保護化・保護解除化手段９５を経由してファイル処理を行う。例えば、書き込む場合には、保護化・保護解除化手段９５は書き込まれたデータを暗号化して、暗号化したデータを保護化データDencとしてストレージ９２に格納する。また、「読み込むファイルのパス名が特定のパス名と一致する」場合には、保護化・保護解除化手段９５は、ストレージ９２から特定のパス名のファイルを取り出し、復号して、復号したデータ（以下「解除化データ」ともいう）を読み込む。これにより、アプリケーション９３を改造する事なくAPIフック手段９４によるAPIフックのみで特定のファイルのみ保護化した状態で透過的に読み書きを行う事が可能になる。
【００１１】
例えば、保護化データDencのパス名が固定的に与えられた状態をAPIフック条件の初期値とする。
【００１２】
データを読み込む際には、APIフック手段９４はパス名を頼りにAPIフックを実行する。なお、データをオープン後は対応するファイルハンドルを介して行う処理に対してAPIフックを実行する。
【００１３】
なお、データを書き込む際には、APIフック手段９４はすべからくAPIフックを実行し、保護化・保護解除化手段９５は書き込まれたデータを暗号化して保護化データDencとしてストレージ９２に格納する。但し、APIフック条件の「読み込むファイルのパス名が特定のパス名と一致する」におけるパス名のファイルに書き込む場合、APIフック条件となった元ファイルの保護条件を継承する。
【００１４】
例えばimportant.txt.encという暗号化されたファイル（保護化データDenc）が存在する。アプリケーション９３が「important.txt」を開くよう引数を伴って起動する際に、APIフック条件として「important.txt」を指定されて起動する。
【００１５】
アプリケーション９３が「important.txt」を開こうとした際に、APIフック手段９４によりAPIフックが働いて、拡張子に「.enc」が追加された「important.txt.enc」が開かれ、保護化・保護解除化手段９５により復号処理が透過的に施されてアプリケーション９３に読み込まれる。
【先行技術文献】
【非特許文献】
【００１６】
【非特許文献１】「RMS/IRMで何ができるのか？」、[online]、Microsoft、[平成26年5月19日検索]、インターネット<URL:http://www.microsoft.com/ja-jp/business/enterprise/ecc/article/rms1012_3.aspx>
【非特許文献２】「第2回 暗号化技術の変遷と最新のトレンドを知る  透過式暗号化のメカニズム」、[online]、IMPRESS BUSINESS MEDIA CORPORATION, an Impress Group company.、[平成26年5月19日検索]、インターネット<URL:http://thinkit.co.jp/story/2010/11/22/1883>
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかしながら、APIフックに代表される従来技術による情報流通制御では、アプリケーションのフック条件が固定された実装となっている。この方法では、書き込みファイルが漏れ無く暗号化されるものの、本来保護すべきデータ以外に例えば設定ファイルや無関係な書き込みまでもすべからく暗号化されてしまう。設定ファイルや無関係な書き込みを暗号化しないようにするためには、個々のアプリケーションの動作仕様に合わせて、APIフック条件の例外をきめ細かく設定する必要があり、調査や調整に多くの稼働を必要とする。さらに、APIフック条件が複雑になるため、設定に誤りが生じやすい。APIフック条件の設定に誤りがあった場合には情報漏洩につながる恐れがある。また、書き込みファイルをすべからく暗号化する事で入力データとは全く無関係な新規ファイルを同時に編集して保存した場合にも、誤って暗号化されてしまう問題があった。
【００１８】
本発明は、APIフック条件の複雑な設定を必要としないアプリケーション実行装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
上記の課題を解決するために、本発明の一態様によれば、アプリケーション実行装置は、データが記憶されるメモリと、メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるシャドウメモリと、APIフック条件を満たす場合に、APIフックを実行するAPIフック手段と、メモリに記憶されたデータを処理する際に、データに対応するテイントを伝搬するテイント情報伝搬手段とを含む。APIフック条件は、「処理対象となるデータに対応するシャドウメモリにテイントが記憶されていること」という条件を含む。
【００２０】
上記の課題を解決するために、本発明の他の態様によれば、アプリケーション実行方法は、メモリにはデータが記憶されるものとし、シャドウメモリには、メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶されるものとし、APIフック手段が、APIフック条件を満たす場合に、APIフックを実行するAPIフックステップと、
テイント情報伝搬手段が、メモリに記憶されたデータを処理する際に、データに対応するテイントを伝搬するテイント伝搬ステップとを含む。APIフック条件は、「処理対象となるデータに対応するシャドウメモリにテイントが記憶されていること」という条件を含む。
【発明の効果】
【００２１】
本発明によれば、APIフック条件の複雑な設定を必要としないという効果を奏する。
【図面の簡単な説明】
【００２２】
【図１】従来技術のAPIフックを説明するための図。
【図２】アプリケーション実行装置の機能ブロック図。
【図３】メモリとシャドウメモリとテイント情報伝搬手段を用いたテイント伝搬の例を説明するための図。
【図４】APIフックの処理フローの例を示す図。
【図５】メモリ、シャドウメモリ、ストレージ、シャドウストレージの初期状態を示す図。
【図６】メモリ、シャドウメモリ、ストレージ、シャドウストレージの読み込みファイルオープン後の状態を示す図。
【図７】メモリ、シャドウメモリ、ストレージ、シャドウストレージのファイル内容読み込み後の状態を示す図。
【図８】メモリ、シャドウメモリ、ストレージ、シャドウストレージの読み込みファイルクローズ後の状態を示す図。
【図９】メモリ、シャドウメモリ、ストレージ、シャドウストレージの書き込みファイルオープン後の状態を示す図。
【図１０】メモリ、シャドウメモリ、ストレージ、シャドウストレージの書き込みファイルにバッファ領域の内容を書き込んだ後の状態を示す図。
【図１１】メモリ、シャドウメモリ、ストレージ、シャドウストレージの書き込みファイルクローズ後の状態を示す図。
【図１２】保護化ファイルを開き、保護化ファイルとは無関係な新規作成ファイルを保存するまでのメモリ、シャドウメモリ、ストレージ、シャドウストレージの状態を説明するための図。
【図１３】保護化ファイルとは無関係な新規作成ファイルを閉じる際のメモリ、シャドウメモリ、ストレージ、シャドウストレージの状態を説明するための図。
【図１４】メモリ、シャドウメモリ、ストレージ、シャドウストレージの保護化ファイルとは無関係な新規作成ファイルを閉じた後の状態を示す図。
【図１５】ソケットAPIのAPIフックを説明するための図。
【図１６】共有メモリAPIのAPIフックを説明するための図。
【図１７】図１７Ａはアプリケーションから１つのファイルに見えるファイルと暗号化ファイルとが１：１に対応している場合の例を示す図、図１７Ｂはアプリケーションから１つのファイルに見える部分が、実は１つの大きなコンテナファイルの中のデータ領域となっている場合の例を示す図。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態について説明する。なお、以下の説明に用いる図面では、同じ機能を持つ構成部や同じ処理を行うステップには同一の符号を記し、重複説明を省略する。
【００２４】
＜第一実施形態＞
図２は、アプリケーション実行装置１００の機能ブロック図を示す。
【００２５】
アプリケーション実行装置１００は、メモリ１０１、アプリケーション１０３と、シャドウメモリ１１１と、APIフック手段１０４と、テイント情報伝搬手段１１３と、ソケットシステム１０６と、強制切断手段１０７と、強制エラー化手段１０８と、ストレージ１０２と、シャドウストレージ１１２と、保護化・保護解除化手段１０５とを含む。
【００２６】
まず、各部の処理の概要を説明し、ファイルの読み書き等について説明する。
【００２７】
＜メモリ１０１＞
メモリ１０１には、データが一時的に記憶される。また、メモリ１０１には、アプリケーション１０３と、APIフック手段１０４と、ソケットシステム１０６と、強制切断手段１０７と、強制エラー化手段１０８と、保護化・保護解除化手段１０５とが読み込まれ、展開される。また、図２には図示していないが、APIを実行するAPI実行手段が読み込まれ、展開される。
【００２８】
＜シャドウメモリ１１１＞
シャドウメモリ１１１には、メモリに記憶されたデータが保護すべきデータであることを示すテイントが記憶される。テイントの詳細は後述する。
【００２９】
＜ストレージ１０２＞
ストレージ１０２には、保護化データDencが記憶される。また、ストレージ１０２には、保護化されていないデータ（以下「通常データ」ともいう）Dが記憶されてもよい。
【００３０】
＜シャドウストレージ１１２＞
シャドウストレージ１１２には、ストレージ１０２に記憶されたデータが保護すべきデータであることを示すテイントが記憶される。例えば、ストレージ１０２に記憶される保護化データDencに対応するテイントがシャドウストレージ１１２に記憶される。
【００３１】
別の言い方をすると、シャドウメモリ１１１やシャドウストレージ１１２は、対応するメモリ１０１やストレージ１０２の任意の位置に印を付与するために用いるものである。この印を「テイント」と呼ぶ。
【００３２】
最も単純な実装例では、メモリ１０１（またはストレージ１０２）とシャドウメモリ１１１（またはシャドウストレージ１１２）とは、１：１の大きさを持っている。シャドウメモリ１１１（またはシャドウストレージ１１２）の内容が「0」ならテイントなし（以下、テイントが無い状態を「テイントクリア」ともいう）、「1」ならテイントあり（以下、テイントがある状態を「テイントセット」ともいう）と解釈する。なお、メモリ１０１（またはストレージ１０２）の所定のブロック（例えば１MB分のデータのブロック）に対してシャドウメモリ１１１（またはシャドウストレージ１１２）の1bit(「０」または「１」）を対応させてもよい。また、メモリ１０１（またはストレージ１０２）には連続して保護すべきデータが記憶されるものとし、シャドウメモリ１１１（またはシャドウストレージ１１２）には、保護すべきデータの開始アドレスと終了アドレスとが記憶される構成としてもよい。要は、シャドウメモリ１１１（またはシャドウストレージ１１２）を参照することで、メモリ１０１（またはストレージ１０２）内のどの記憶領域にあるデータが保護すべきデータであるかが分かればよく、そのデータの位置を示す印がテイントである。
【００３３】
＜APIフック手段１０４＞
APIフック手段１０４は、APIフック条件を満たす場合に、APIフックを実行する。ただし、APIフック条件として、処理対象となるデータに対応するシャドウメモリ１１１にテイントが記憶されていることを含む。APIフック手段１０４の処理フローについては、後述する。
【００３４】
＜アプリケーション１０３＞
アプリケーション１０３は、少なくともAPIを用いる（呼び出す）プログラムである。なお、本実施形態では、前述のAPIフック手段１０４が、APIフック条件を満たす場合に、API呼び出しを横取りし、APIフックを実行する。APIフック手段１０４と後述する保護化・保護解除化手段１０５とを組み合わせることで、アプリケーション１０３を改造せずに、特定のファイルのみを保護化した状態で透過的に読み書きすることができる。
【００３５】
＜テイント情報伝搬手段１１３＞
テイント情報伝搬手段１１３は、メモリ１０１、ストレージ１０２に記憶されたデータを処理する際に、データに対応するテイントを伝搬する。例えば、テイント情報伝搬手段１１３は、メモリ１０１のある領域に記憶されたデータに対応する、シャドウメモリ１１１の領域にテイントをセットする。以下、この処理を、単に「メモリ１０１のデータにテイントをセットする」ともいう。同様に、テイント情報伝搬手段１１３は、ストレージ１０２のある領域に記憶されたデータに対応する、シャドウストレージ１１２の領域にテイントをセットする。以下、この処理を、単に「ストレージ１０２のデータにテイントをセットする」ともいう。また、テイント情報伝搬手段１１３は、メモリ１０１のある領域に記憶されたデータに対応する、シャドウメモリ１１１の領域のテイントをクリアする。以下、この処理を、単に「メモリ１０１のデータのテイントをクリアする」ともいう。同様に、テイント情報伝搬手段１１３は、ストレージ１０２のある領域に記憶されたデータに対応する、シャドウストレージ１１２の領域のテイントをクリアする。以下、この処理を、単に「ストレージ１０２のデータのテイントをクリアする」ともいう。
【００３６】
＜ソケットシステム１０６＞
ソケットシステム１０６は、通信を行う際に用いる仮想的なインターフェースであるソケットを管理する。「管理」とは、生成、変更、削除等を意味する。
【００３７】
＜強制切断手段１０７＞
強制切断手段１０７は、APIフック条件を満たし、かつ、ソケットを用いてシャドウメモリ１１１に記憶されているテイントに対応するメモリ１０１に記憶されているデータ（以下、このようなデータを「テイントがセットされたデータ」ともいい、シャドウストレージ１１２に記憶されているテイントに対応するストレージに１０２に記憶されているデータも同様に、「テイントがセットされたデータ」という）を送信しようとしたとき、ソケットによる通信を強制的に切断する。
【００３８】
＜強制エラー化手段１０８＞
強制エラー化手段１０８は、APIフックを実行した際に、API実行結果としてエラーを返す。
【００３９】
＜保護化・保護解除化手段１０５＞
保護化・保護解除化手段１０５は、APIフック条件を満たしたとき、第三者が読み書きできない保護化データを読み書きする、あるいは、保護化データと保護化状態が解除された解除化データとの間の変換動作を行う。
【００４０】
＜本実施形態のポイント＞
本実施形態では、アプリケーション１０３の実行の際に本来のメモリ１０１に対応する別のメモリとしての「シャドウメモリ１１１」と、本来のストレージ１０２に対応する別のストレージとしての「シャドウストレージ１１２」と、テイント情報伝搬手段１１３と、APIフック手段１０４とを用いる事で課題を解决している。
【００４１】
なお、一般的には、シャドウメモリ、シャドウストレージとは、マルウェア解析等の技術分野で用いられ、外部から持ち込まれた害のある情報の流れを精度よく追跡する技術として用いられる（例えば、参考文献１参照）。これは例えば、アプリケーションで誤ってマルウェアに感染したファイルを開いた際に、アプリケーションを介してメモリや他のファイルに感染が拡大していく状況を監視する手段として使われているものである。本実施形態では、この技術をAPIフックと組み合わせて利用する。
（参考文献１）特開２０１３−２３２１１３号公報
【００４２】
テイント情報伝搬手段１１３は、アプリケーション１０３が動作しメモリ１０１やストレージ１０２の内容を変更する際に、シャドウメモリ１１１やシャドウストレージ１１２を調べて対応する部分のテイントを伝搬させる。この際の伝播は、あるメモリ１０１やストレージ１０２の内容が別のメモリ１０１やストレージ１０２に伝わった場合にテイントを伝搬させるようにする。例えば、メモリ１０１内のA番地の内容をB番地にコピーする命令を実行した場合には、シャドウメモリ１１１内のA番地のテイントの値をB番地のテイントの値にコピーする。逆に、メモリ１０１のB番地の内容をゼロクリアする場合、シャドウメモリ１１１のB番地のテイントはアプリケーションの命令語のテイントからの伝搬とみなされ、アプリケーションそれ自体は保護対象ではないのでクリアされる。
【００４３】
この構成にて、メモリ１０１やストレージ１０２内の保護すべきデータである保護化データに対応するシャドウメモリ１１１やシャドウストレージ１１２に対してテイントをセットしておき、それ以外のシャドウメモリ１１１やシャドウストレージ１１２のテイントをクリアした状態で、アプリケーション１０３の実行を開始する。アプリケーション１０３の実行中はテイント情報伝搬手段１１３により、逐次テイントを伝搬させる。APIフック手段１０４によりAPIフックを実行する際にAPIが処理するデータにテイントが含まれるか否かを条件に加えてAPIフック処理を行う。さらに、ストレージ１０２への書き込みは全てフックして保護化し、ファイルを閉じた時点で、ストレージ１０２内の書き込みデータに対応するシャドウストレージ１１２にテイントがあればそのままとし、テイントが無い場合に保護化を解除する事で、入力の保護化データに課された保護条件を出力の保護化データにも課すことが出来る。
【００４４】
以下、本実施形態の処理内容を、図を用いて説明する。
【００４５】
＜機械語レベルの処理内容＞
図３はメモリ１０１とシャドウメモリ１１１とテイント情報伝搬手段１１３を用いたテイント伝搬の例を説明するための図である。これは機械語レベルでの例である。
【００４６】
図３の中央がメモリ１０１の内容、右側がシャドウメモリ１１１の内容を示している。ここではCPUのレジスタも登場するが、メモリ１０１の一種とみなしている。シャドウメモリ１１１の実現手段は、例えば本来のメモリ１０１とは別のメモリ領域や別のレジスタに取る方法がある。ここでは、メモリ１０１対シャドウメモリ１１１の関係を、メモリ１０１の即値0対シャドウメモリ１１１のSh_imm0、メモリ１０１のレジスタ内のEAX対シャドウメモリ１１１のSh_eax、メモリ１０１のMem_A対シャドウメモリ１１１Sh_Mem_A、メモリ１０１のMem_B対シャドウメモリ１１１Sh_Mem_Bとする。なお、即値0はアプリケーション１０３により予め定められており、保護化データには該当しないものとする。また、Mem_Aは保護化データに該当するものとする。
【００４７】
まず、アプリケーション１０３がメモリ１０１上に展開される。本来のアプリケーション１０３に含まれる命令が
(1) mov eax, 0
(2) mov eax, [Mem_A]
(3) mov [Mem_B], eax
とする。アプリケーション１０３は、(1)〜(3)の命令を実行するとともに、この命令をテイント情報伝搬手段１１３に出力する。
【００４８】
テイント情報伝搬手段１１３は、(1)〜(3)の命令を受け取り、それぞれの命令の直後に
(1S) mov [Sh_eax],[Sh_imm0]
(2S) mov [Sh_eax],[Sh_Mem_A]
(3S) mov [Sh_Mem_B],[Sh_eax]
というシャドウメモリ操作専用の命令を挿入し、実行する。
【００４９】
(1)は、命令「mov eax,0」すなわち、レジスタ「eax」に即値「0」を代入するという命令である。即値「0」のテイントはクリアされた状態でこの命令が実行された場合、レジスタ「eax」のテイントがクリアであれセットであれ、即値「0」に対応するテイントクリアという状態が上書きされ、レジスタ「eax」に対応するシャドウメモリ１１１のテイント値はクリアになる。このシャドウメモリ１１１の操作は、(1S)の命令 mov [Sh_eax],[Sh_imm0]で実現される。なお、「Sh_imm0」が即値「0」のテイント値でありテイントクリアを表す。
【００５０】
(2)は、命令「mov eax,[Mem_A]」すなわち、メモリ１０１内のレジスタ「eax」にメモリ１０１内の「Mem_A」の内容を代入するという命令である。メモリ１０１内の「Mem_A」の値がメモリ１０１内のレジスタ「eax」に代入されると同時に、命令(2S)によって対応するテイントの代入が行われる。つまり、シャドウメモリ１１１内の「Sh_Mem_A」の値がシャドウメモリ１１１内の「Sh_eax」に代入される。
【００５１】
(3)は、命令「mov [Mem_B],eax」すなわち、メモリ１０１内の「Mem_B」にメモリ１０１内のレジスタ「eax」の内容を代入するという命令である。メモリ１０１内のレジスタ「eax」の値がメモリ１０１内の「Mem_B」に代入されると同時に、命令(3S)によって対応するテイントの代入が行われる。つまり、シャドウメモリ１１１内の「Sh_eax」の値がシャドウメモリ１１１内の「Sh_Mem_B」に代入される。
【００５２】
これら一連の命令実行によって、メモリ１０１内の「Mem_A」の値がメモリ１０１内の「Mem_B」に代入されると同時に、対応するテイント値もシャドウメモリ１１１上で伝搬している。
【００５３】
テイント情報伝搬手段１１３の実施例としては、これに限らず他にも仮想化技術を用いて機械語の動作を仮想的に実現する際に、メモリ１０１と同じサイズのシャドウメモリ１１１を確保しておいて機械語に対応するシャドウメモリ１１１の操作を行う等の方法もある。
【００５４】
以上のようなテイント伝搬をアプリケーション１０３全体にわたって実施する事によって、入力データに付与されたテイントが、入力データが加工されつつ出力されるのと同時に伝搬されてゆく。さらに、出力されたデータがどの入力に対応しているのかを突き止めることが出来る。
【００５５】
＜APIフック＞
図４はAPIフックの処理フローの例を示す。
【００５６】
APIフックはAPIフック手段１０４により実行され、先の命令実行およびテイント情報伝搬手段１１３のテイント伝搬処理と並行して行われる。
【００５７】
APIフック手段１０４は、命令実行がAPI実行か否かを判定する（Ｓ１）。
【００５８】
命令実行がAPI実行ではない場合、例えば図３に記載の方法に基づいて、アプリケーション１０３は命令を実行し、テイント情報伝搬手段１１３はテイント伝搬処理を実行する（Ｓ６）。
【００５９】
APIフック手段１０４は、命令実行がAPI実行である場合、以下の処理を行う。命令実行がAPI実行の書き込みの場合（Ｓ２）、または、API引数や処理対象データにテイントがセットされている場合（換言すると、「処理対象となるデータに対応するシャドウメモリ１１１にテイントが記憶されている場合」）（Ｓ３）、APIフック手段１０４はAPIフック処理を実行し、テイント情報伝搬手段１１３は、テイント伝搬処理を実行する（Ｓ５）。APIフック処理が不要な場合（言い換えると、命令実行がAPI実行の書き込ではなく、かつ、API引数や処理対象データにテイントがセットされていない場合（Ｓ２，Ｓ３））、図示しないAPI実行手段は呼び出されたAPIを実行し、テイント情報伝搬手段１１３は、テイント伝搬処理を実行する（Ｓ４）。
【００６０】
以下、アプリケーション１０３の実行に伴いメモリ１０１およびストレージ１０２についてテイント情報伝搬手段１１３とAPIフック手段１０４の処理が伴う前提で、よりマクロなレベルでのテイントの扱いについての処理例を示す。
【００６１】
＜ファイル読み込み＞
図５〜図１１は、ファイルを読み書きするアプリケーション１０３での実行例を示す。
【００６２】
図５は、初期状態を示す。メモリ１０１上にはアプリケーション１０３が展開されている。ストレージ１０２内のファイル「important.txt.enc」にのみテイントがセットされた状態を表す。このファイルがアプリケーション１０３の入力となる。なお、図５中では省略しているが、アプリケーション１０３が保護すべきデータを含まない場合、シャドウメモリ１１１内のアプリケーション１０３に対応するテイントをクリアしてもよい。
【００６３】
図６は、アプリケーション１０３が入力となるファイルを開いた状態を示す。この場合、アプリケーション１０３は、「ファイルを開く」というAPIを実行しようとする。アプリケーション１０３は、開こうとするファイルに対応するファイルハンドルを生成する。APIフック手段１０４は、このファイルを開く際に開く対象となるファイルにテイントがセットされているか否かを判定する（Ｓ３）。この例では、テイントがセットされているのでAPIフック手段１０４は、APIフック処理を行う（Ｓ５）。テイント情報伝搬手段１１３は、APIからの出力となるファイルハンドルにテイントをセットする（Ｓ５）。
【００６４】
これにより、APIフック手段１０４は、以降このファイルハンドルを（API引数として）用いて実行されるAPI実行にはAPIフック処理を適用する（Ｓ３，Ｓ５）。
【００６５】
図７は開いたファイルの中身をバッファ領域に読み込む処理を表している。
【００６６】
アプリケーション１０３は、APIを呼び出してストレージ１０２上のファイルからデータを読み込む際に、ファイルハンドルを用いるが、このファイルハンドルにはテイントがセットされているので、APIフック手段１０４がAPIフック処理を実行する（Ｓ３，Ｓ５）。APIフック処理として復号処理が自動的に間に入る事になる。なお、この復号処理自体は保護化・保護解除化手段１０５により実行される。APIフック手段１０４は、メモリ１０１内にバッファ領域を生成する。一方、テイント情報伝搬手段１１３は、バッファ領域に対応する領域をシャドウメモリ１１１内に生成し、テイントクリアする。
【００６７】
保護化・保護解除化手段１０５は、保護化データの一部を復号し、復号したデータ（以下「解除化データ」ともいう）をメモリ１０１内のバッファ領域の一部に格納する。一方、テイント情報伝搬手段１１３は、メモリ１０１内のバッファ領域の一部に対応する、シャドウメモリ１１１にテイントをセットする（Ｓ５）。
【００６８】
なお、テイント情報伝搬手段１１３は、復号処理を行う領域をメモリ１０１内に生成し、その領域のテイントをクリアする。さらに、テイント情報伝搬手段１１３は、復号処理を行う際に復号処理の対象となるデータにテイントがセットされているため、メモリ１０１内の復号処理を行う領域に対応する、シャドウメモリ１１１の領域にテイントをセットする。
【００６９】
図８は読み込みファイルをクローズした後の状態を示す。
【００７０】
アプリケーション１０３が、ファイルハンドルは閉じるが、メモリ１０１内のバッファ領域に入力ファイルはそのまま残り、シャドウメモリ１１１内の対応する領域についても一部にテイントがセットされた状態となる。
【００７１】
＜ファイル書き込み＞
図９は、図８の状態で、新たに書き込み用にファイルを開いた状態を示す図である。
【００７２】
アプリケーション１０３は、書き込み用ファイルを新規作成するというAPIを呼び出し、ファイルハンドルを作成する。新規作成時には、初期状態で何にも入っていないため、対応するテイントはクリアされた状態とし、対応するファイルハンドルのテイントもクリアされた状態である。そのため、テイント情報伝搬手段１１３は、ストレージ１０２内の書き込み用ファイル及びメモリ１０１内のファイルハンドルが格納された領域に対応する、シャドウストレージ１１２及びシャドウメモリ１１１内の領域をテイントクリアする。なお、書き込みなので、APIフック処理を実行する（Ｓ２，Ｓ５）。保護化・保護解除化手段１０５は、書き込み用ファイルを暗号化して保護化データとして、ストレージ１０２に格納する。
【００７３】
図１０は、ストレージ１０２上の書き込み用ファイルに対しメモリ１０１上のバッファ領域からのデータを書き込んだ状態である。
【００７４】
APIから書き込みの場合すべからくAPIフック条件を満たすため、APIフック処理が行われる。そのため、メモリ１０１上のバッファ領域からのデータは、APIフック手段１０４がAPIフック処理を行い、保護化・保護解除化手段１０５は、バッファ領域の書き込みデータを暗号化し、保護化データとして、ストレージ１０２に格納する。なお、メモリ１０１上で暗号化処理が行われる。なお、バッファ領域の書き込みデータは、その一部にテイントがセットされているため、暗号化の対象データにテイントがセットされており、テイント情報伝搬手段１１３は、暗号化処理が行われている領域に対応するシャドウメモリ１１１にテイントをセットする。また、ファイルハンドルもテイントがセットされたデータを扱うため、テイント情報伝搬手段１１３は、ファイルハンドルにもテイントをセットする。なお、テイント情報伝搬手段１１３は、保護化データに対応する、シャドウストレージ１１２内の領域をテイントセットする。別の言い方をすると、アプリケーション１０３は、テイントがセットされたデータをストレージ１０２内のファイル内に書き込む事になるが、テイントがセットされたデータを書き込んだ段階で、テイント情報伝搬手段１１３によって、出力ファイルに対応する、シャドウストレージ１１２内の領域のテイントがセットされるほか、開いているファイルハンドルに対応するシャドウストレージ１１２にテイントがセットされる。
【００７５】
図１１は書き込みファイルをクローズした後の状態を示す。
【００７６】
出力ファイルに関しては、アプリケーション１０３がクローズ処理を行う際には、APIフック手段１０４は、「クローズ対象のファイルの中にテイントがセットされている部分が有るか否か」をAPIフック条件とし、セットされている部分がない場合にAPIフック条件を満たすと判断する。APIフック手段１０４は、「クローズ対象のファイルの中にテイントがセットされている部分が有るか否か」を判定し、セットされている部分がある場合には、APIフックを実行せず、API実行手段により、そのまま、ファイルが閉じられる。よって、この例の場合には、セットされている部分があるので、API実行手段は、データを暗号化したままファイルが閉じる。なお、セットされている部分がない場合には、APIフック手段１０４がAPIフックを実行し、APIを横取りし、保護化・保護解除化手段１０５が、テイントがセットされていない保護化データを解除化データに変換し、ストレージ１０２に格納する。なお、変換に際して、データ量が変わった場合には、テイント情報伝搬手段１１３が、シャドウストレージ１１２の対応する領域のテイントをクリアする。
【００７７】
＜バッファ領域を２つ以上に分かれている場合のファイル読み書き＞
図１２の実行例は、図５〜図１１と類似のケースだが、バッファ領域が２つに分かれている。一方のバッファ領域は図５〜図７のファイル読み込みで説明したようにテイントがセットされており、他方のバッファ領域は図９のファイル書き込みで説明したようにテイントがクリアされている。
【００７８】
この場合、書き込まれたファイルには一切テイントがセットされた部分は存在しない。
【００７９】
図１３の実行例は、図１２の状態で、テイントがセットされているファイルとは無関係な新規作成ファイルを閉じる際のAPIフック手段１０４による処理の例を示している。
APIフック手段１０４は、「クローズ対象のファイルの中にテイントがセットされている部分が有るか否か」を判定し、セットされている部分がないので、APIフックを実行し、APIを横取りし、保護化・保護解除化手段１０５が、テイントがセットされていない保護化データを解除化データに変換（復号処理）し、ストレージ１０２に格納する。図１４は、メモリ１０１、シャドウメモリ１１１、ストレージ１０２、シャドウストレージ１１２の最終的な状態を示す。図１４に示すように、保護化・保護解除化手段１０５は、保護化データnew.txt.encを復号した後、削除する。
【００８０】
＜ネットワーク送信を行う場合＞
この例では、APIフック手段１０４は、「テイントがセットされたデータを送信しようとすること」をAPIフック条件とする。
【００８１】
図１５の実行例は、入力ファイルから読み込まれたデータがソケットAPIを経由してネットワークに送信されようとした場合のAPIフック処理の実行例である。
【００８２】
バッファへの読み込みとテイントセットまでは、図５〜図８までと同様である。
【００８３】
その後、バッファに読み込んだデータをソケットAPIを経由して送信しようとする際に、「テイントがセットされたデータを送信しようとすること」というAPIフック条件を満たすため、APIフック手段１０４は、APIフックを実行し、強制切断手段１０７は、ソケットによる通信を強制的に切断し、同時に、強制エラー化手段１０８は、API実行結果としてエラーを返す。
【００８４】
＜共有メモリを用いる場合＞
この例では、APIフック手段１０４は、「テイントがセットされたデータを共有メモリに記憶しよう（書き込もう）とすること」をAPIフック条件とする。
【００８５】
図１６の実行例は、入力ファイルから読み込まれたデータが共有メモリAPIを経由して共有メモリに書き込もうとした場合のAPIフック処理の実行例である。
【００８６】
バッファへの読み込みとテイントセットまでは、図５〜図８までと同様である。
【００８７】
その後、バッファに読み込んだデータを共有メモリAPIを経由して書き込もうとした際に、「テイントがセットされたデータを共有メモリに記憶しよう（書き込もう）とすること」というAPIフック条件を満たすため、APIフック手段１０４は、APIフックを実行し、API処理をエラーとし、同時に、強制エラー化手段１０８は、API実行結果としてエラーを返す。このような構成により、共有メモリに入力ファイルのデータを含むデータを書き込む事を阻止することができる。
【００８８】
＜保護化・保護解除化手段１０５の処理例＞
図１７の実行例は、保護化・保護解除化手段１０５の実行例になる。
【００８９】
図１７Ａの例は、保護化として暗号化を用いた例で、かつ、アプリケーション１０３から１つのファイルに見えるファイルと暗号化ファイルとが１：１に対応している場合である。
【００９０】
図１７Ｂの例は、保護化として暗号化を用いた例で、かつ、アプリケーション１０３から１つのファイルに見える部分が、実は１つの大きなコンテナファイルの中のデータ領域となっている例である。この場合、識別情報はこのコンテナファイルが内部構造を持ったファイルである事を示す固定的な識別情報であり、管理情報はこのコンテナファイルの暗号鍵等を特定するための情報や、どの位置にどの暗号化データが含まれているのかといった位置情報などから構成される（ただし、それだけとは限らない）データである。アプリケーション１０３からはあたかも実在する独立したファイルに見えるが、それはAPIフックによる処理によってコンテナファイルの中の領域があたかも１つのファイルのように見えているだけである。
【００９１】
＜効果＞
このような構成により、APIフック条件の複雑な設定を必要としないという効果を奏する。
【００９２】
また、APIフック手段と保護化・保護解除化手段とを組み合わせることで、アプリケーション１０３を改造する事なく、デジタル情報の流通過程の追跡（ログ取得）および意図しない二次流通の防止を実現することができる。別の言い方をすると、書き込まれたデータのうち入力された保護化データまたはそれを加工したデータのみが、最終的に保護化データとして保存されるため、アプリケーション１０３毎の動作の差異に依存せずに、保護すべきデータだけを保護化データとして保存する事が出来る。また、設定ファイル等の保護化すべきではないデータは保護化しない状態とする事が出来る。
【００９３】
＜変形例＞
少なくともメモリ１０１と、シャドウメモリ１１１とAPIフック手段１０４と、テイント情報伝搬手段１１３とを含みさえすれば、他の構成を備えなくとも、APIフック条件の複雑な設定を必要としないという効果を奏する。例えば、メモリ１０１に記憶されているデータは必ずしもストレージ１０２に格納される必要はなく、暗号化される必要もない。例えば、メモリ１０１に記憶されているデータが、ストレージ１０２に格納されず、暗号化もされずに、ネットワーク送信される場合もある。その場合には、ソケットシステム１０６と強制切断手段１０７とが必要となる。
【００９４】
また、API実行結果としてエラーを返す必要がなければ、強制エラー化手段１０８を含まなくともよい。
【００９５】
また、図５〜図１１、図１２〜１４の実施例ではAPIフック条件として「全ての書き込み」とした上で書き込みデータを全て保護化した上で、テイントがセットされていなかった場合に保護化を解除していたが、この変形例としてテイントがセットされたデータが書き込まれない限りは書き込みでのAPIフックを行わず、最初にテイントがセットされたデータが書き込まれようとしたタイミングでAPIフックを行い、それ以前に書き込んだテイントがセットされていないデータを改めて全て保護化し、以降APIフックを行う実施例も考えられる。例えば、APIフック条件を「テイントがセットされたメモリ上のデータを、ストレージに書き込もうとすること」とし、書き込みを開始してから、この条件を満たすまでの間、図示しないAPI実行手段が（テイントがセットされていない）メモリ１０１上のデータをストレージ１０２に書き込む。一方、上記APIフック条件を満たした場合、つまり、最初にテイントがセットされたメモリ１０１上のデータを、ストレージに書き込もうとした際に、保護化・保護解除化手段１０５は、それまでにストレージ１０２に書き込んだデータ、及び、ファイルを閉じるまでに書き込むデータを全て、保護化データに変換して、ストレージ１０２に記憶し、それまで（APIフック条件を満たすまで）にストレージ１０２に書き込んだ保護化されていないデータをストレージ１０２から削除する。
【００９６】
＜その他の変形例＞
本発明は上記の実施形態及び変形例に限定されるものではない。例えば、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【００９７】
＜プログラム及び記録媒体＞
また、上記の実施形態及び変形例で説明した各装置における各種の処理機能をコンピュータによって実現してもよい。その場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００９８】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９９】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させてもよい。
【０１００】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶部に格納する。そして、処理の実行時、このコンピュータは、自己の記憶部に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実施形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよい。さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、プログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【０１０１】
また、コンピュータ上で所定のプログラムを実行させることにより、各装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2015225571.tif 000003
【図２】
2015225571.tif 000004
【図３】
2015225571.tif 000005
【図４】
2015225571.tif 000006
【図１７】
2015225571.tif 000007
【図５】
2015225571.tif 000008
【図６】
2015225571.tif 000009
【図７】
2015225571.tif 000010
【図８】
2015225571.tif 000011
【図９】
2015225571.tif 000012
【図１０】
2015225571.tif 000013
【図１１】
2015225571.tif 000014
【図１２】
2015225571.tif 000015
【図１３】
2015225571.tif 000016
【図１４】
2015225571.tif 000017
【図１５】
2015225571.tif 000018
【図１６】
2015225571.tif 000019