(57)【要約】【課題】アプリケーションごとにテイント解析の実行を選択することができ、かつ、アプリケーションごとに異なるテイント解析を行うことができる技術を提供する。【解決手段】変更部１０は、情報を取得する処理が実行されるときに情報にテイントタグを付与する付与処理と、情報を出力する処理が実行されるときに情報にテイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するようにアプリケーションのプログラムを変更する。実行部２０は、変更部１０によって変更されたアプリケーションを実行する。【選択図】図１
2016014956.tif 000002
【特許請求の範囲】
【請求項１】
情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更部と、
前記変更部によって変更された前記アプリケーションを実行する実行部と、
を有することを特徴とするテイント解析装置。
【請求項２】
前記変更部は、
前記アプリケーションのプログラムを解析し、情報を取得する関数に係る第１のコードと、情報を出力するための準備を行う関数または情報を出力する関数に係る第２のコードとを特定する解析部と、
前記第１のコードを含む部分に対して、前記付与処理に係るコードを挿入し、前記第２のコードを含む部分に対して、前記判定処理に係るコードを挿入する挿入部と、
を有することを特徴とする請求項１に記載のテイント解析装置。
【請求項３】
前記変更部は、
情報を取得する関数を実行するコードと、前記付与処理に係るコードとを含む第１のプログラムを生成し、情報を出力するための準備を行う関数または情報を出力する関数に係るコードと、前記判定処理に係るコードとを含む第２のプログラムを生成する生成部と、
前記第１のプログラムと前記第２のプログラムとを読み込むコードを前記アプリケーションのプログラムに挿入する挿入部と、
を有することを特徴とする請求項１に記載のテイント解析装置。
【請求項４】
前記変更部は、情報を外部に送信する送信処理が実行されるときに前記判定処理を前記アプリケーションが実行するように前記アプリケーションのプログラムを変更し、
前記テイント解析装置は、前記送信処理が実行されるとき、前記情報の送信先に応じて送信を許可または拒否する制御を行う制御部をさらに有する
ことを特徴とする請求項１〜請求項３のいずれか一項に記載のテイント解析装置。
【請求項５】
情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更ステップと、
前記変更ステップで変更された前記アプリケーションを実行する実行ステップと、
を有することを特徴とするテイント解析方法。
【請求項６】
情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更ステップと、
前記変更ステップで変更された前記アプリケーションを実行する実行ステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの脆弱性検証または情報漏洩検知等に利用されるテイント解析技術に関する。
【背景技術】
【０００２】
アプリケーションのプログラムがどのような情報をどのように取り扱うのかを解析する方法として、テイント（Taint:汚染）解析と呼ばれる手法がある。テイント解析とは、特定の性質を持つ情報に対してその性質を一意に識別するタグ（テイントタグ）を付け、その情報が利用された場合にタグを伝搬させることにより、情報がどのように利用されたのかを解析する手法である。一般に、テイント解析は、テイントタグが付与される情報源Sourceと、テイントタグを伝播させる機構Propagationと、伝播されたテイントタグを監視するポイントを示すSinkとの３つの要素を含む。
【０００３】
このテイント解析を利用する方法には主に２つの方法がある。１つの方法が脆弱性検証である。プログラムエラーが発生する原因は、入力された情報が、本来到達してはいけない出力に辿り着くことである。これを検知するために、入力された情報に対してテイントタグを付与し、そのテイントタグが付与された情報が出力に辿り着くか否かを判定することにより脆弱性を検証する方法が提案されている。
【０００４】
他の方法が情報漏洩検知である。プログラムが取得した重要な情報に対して、テイントタグを付与し、そのテイントタグが付与された情報が外部送信に係る出力に辿り着くか否かを判定することにより情報漏洩を検知する手法が提案されている。非特許文献１は、Android（登録商標）が実装されたシステムにおける個人情報の流出をテイント解析により実現する手法を開示している。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】William Enck, Peter Gilbert, Byung-Gon Chun, Landon P. Cox, Jaeyeon Jung, Patrick McDaniel, and Anmol N. Sheth. ”TaintDroid: An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones”, In Proc. of the USENIX Symposium on Operating Systems Design and Implementation (OSDI), October 2010 in Vancouver
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術では、Sourceにおけるテイントタグの付与と、Sinkにおける判定とが、アプリケーションを実行する主体であるアプリケーション実行エンジンに実装されている。このため、情報を取得する関数（Sourceに相当）、または情報を出力する関数（Sinkに相当）の実行をアプリケーションが要求するごとに、アプリケーション実行エンジンがテイントタグの付与または判定を行う。つまり、情報を取得する関数、または情報を出力する関数を実行する全てのアプリケーションの実行時に、テイント解析に係る処理が実行される。これによって、テイント解析の対象ではないアプリケーションについてもテイント解析に係る処理が実行されるため、システム全体のパフォーマンスが低下する。また、全てのアプリケーションに対して一様なテイント解析が行われるため、アプリケーションごとに異なるテイント解析を行うことができない。
【０００７】
本発明は、アプリケーションごとにテイント解析の実行を選択することができ、かつ、アプリケーションごとに異なるテイント解析を行うことができる技術を提供する。
【課題を解決するための手段】
【０００８】
本発明は、情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更部と、前記変更部によって変更された前記アプリケーションを実行する実行部と、を有することを特徴とするテイント解析装置である。
【０００９】
また、本発明のテイント解析装置において、前記変更部は、前記アプリケーションのプログラムを解析し、情報を取得する関数に係る第１のコードと、情報を出力するための準備を行う関数または情報を出力する関数に係る第２のコードとを特定する解析部と、前記第１のコードを含む部分に対して、前記付与処理に係るコードを挿入し、前記第２のコードを含む部分に対して、前記判定処理に係るコードを挿入する挿入部と、を有することを特徴とする。
【００１０】
また、本発明のテイント解析装置において、前記変更部は、情報を取得する関数を実行するコードと、前記付与処理に係るコードとを含む第１のプログラムを生成し、情報を出力するための準備を行う関数に係るコードまたは情報を出力する関数に係るコードと、前記判定処理に係るコードとを含む第２のプログラムを生成する生成部と、前記第１のプログラムと前記第２のプログラムとを読み込むコードを前記アプリケーションのプログラムに挿入する挿入部と、を有することを特徴とする。
【００１１】
また、本発明のテイント解析装置において、前記変更部は、情報を外部に送信する送信処理が実行されるときに前記判定処理を前記アプリケーションが実行するように前記アプリケーションのプログラムを変更し、前記テイント解析装置は、前記送信処理が実行されるとき、前記情報の送信先に応じて送信を許可または拒否する制御を行う制御部をさらに有することを特徴とする。
【００１２】
また、本発明は、情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更ステップと、前記変更ステップで変更された前記アプリケーションを実行する実行ステップと、を有することを特徴とするテイント解析方法である。
【００１３】
また、本発明は、情報を取得する処理が実行されるときに前記情報にテイントタグを付与する付与処理と、前記情報を出力する処理が実行されるときに前記情報に前記テイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するように前記アプリケーションのプログラムを変更する変更ステップと、前記変更ステップで変更された前記アプリケーションを実行する実行ステップと、をコンピュータに実行させるためのプログラムである。
【発明の効果】
【００１４】
本発明によれば、情報にテイントタグを付与する付与処理と、情報にテイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するようにアプリケーションのプログラムが変更される。これによって、アプリケーションごとにテイント解析の実行を選択することができ、かつ、アプリケーションごとに異なるテイント解析を行うことができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態によるテイント解析装置の構成を示すブロック図である。
【図２】本発明の実施形態によるテイント解析装置の動作の手順を示すフローチャートである。
【図３】本発明の実施形態の第１の例によるテイント解析装置の構成を示すブロック図である。
【図４】本発明の実施形態の第１の例によるテイント解析装置の動作の手順を示すフローチャートである。
【図５】本発明の実施形態の第１の例におけるアプリケーションのプログラムを示す参考図である。
【図６】本発明の実施形態の第１の例におけるアプリケーションのプログラムを示す参考図である。
【図７】本発明の実施形態の第２の例によるテイント解析装置の構成を示すブロック図である。
【図８】本発明の実施形態の第２の例によるテイント解析装置の動作の手順を示すフローチャートである。
【図９】本発明の実施形態の第２の例における関数のプログラムを示す参考図である。
【図１０】本発明の実施形態の第２の例における関数のプログラムを示す参考図である。
【図１１】本発明の実施形態の第２の例におけるアプリケーションのプログラムを示す参考図である。
【図１２】本発明の実施形態の第３の例によるテイント解析装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照し、本発明の実施形態を説明する。図１は、本実施形態によるテイント解析装置１の構成を示している。図１に示すように、テイント解析装置１は、変更部１０と、実行部２０とを有する。
【００１７】
変更部１０は、情報を取得する処理が実行されるときに情報にテイントタグを付与する付与処理と、情報を出力する処理が実行されるときに情報にテイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するようにアプリケーションのプログラムを変更する。実行部２０は、変更部１０によって変更されたアプリケーションを実行する。
【００１８】
実行部２０は、アプリケーションを実行する主体である。例えば、実行部２０はアプリケーション実行エンジン（JavaScript（登録商標）エンジン等）である。実行部２０は、テイントタグを伝播させる、いわゆるPropagationに係る処理を行ってもよい。例えば、テイントタグが付与された情報を用いた演算が行われる場合、実行部２０は、演算結果に対してテイントタグを付与する。変更部１０は、上記の付与処理と上記の判定処理とに加えて、Propagationに係る処理をアプリケーションが実行するようにアプリケーションのプログラムを変更してもよい。
【００１９】
変更部１０と、実行部２０との機能は、例えば各部の動作を規定する命令を含むプログラムをコンピュータが読み込んで実行することにより、ソフトウェアの機能として実現可能である。また、このプログラムは、例えばフラッシュメモリのような「コンピュータ読み取り可能な記録媒体」により提供されてもよい。また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波によりテイント解析装置１に伝送されることでテイント解析装置１に入力されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体である。また、上述したプログラムは、前述した機能の一部を実現してもよい。さらに、上述したプログラムは、前述した機能をコンピュータに既に記録されているプログラムとの組合せで実現できる、いわゆる差分ファイル（差分プログラム）であってもよい。
【００２０】
図２は、テイント解析装置１の動作の手順を示している。図２を参照して、テイント解析装置１の動作を説明する。
【００２１】
変更部１０は、情報を取得する処理が実行されるときに情報にテイントタグを付与する付与処理と、情報を出力する処理が実行されるときに情報にテイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するようにアプリケーションのプログラムを変更する（ステップＳ１００）。実行部２０は、ステップＳ１００で変更されたアプリケーションを実行する（ステップＳ１１０）。
【００２２】
アプリケーションの実行中、アプリケーションは、情報を取得する処理を実行するとき、付与処理を実行する。また、アプリケーションの実行中、アプリケーションは、情報を出力する処理を実行するとき、判定処理を実行する。
【００２３】
例えば、アプリケーションは、必要に応じて、付与処理に係る関数、または判定処理に係る関数を呼び出す。実行部２０は、呼び出された関数を実行し、実行結果をアプリケーションに返す。アプリケーションは、実行結果に基づいて、付与処理または判定処理を続行する。
【００２４】
判定処理は、判定結果をログ等に出力する処理を含んでいてもよい。これによって、テイント解析の結果を解析者に通知することができる。
【００２５】
変更部１０は、テイント解析の対象となるアプリケーションのみに対して、そのプログラムを変更することが可能である。これによって、アプリケーションごとにテイント解析の実行を選択することができる。つまり、テイント解析が不要なアプリケーション（例えば、信頼されているアプリケーション）に対してテイント解析が行われないようにすることができる。したがって、システム全体のパフォーマンスが必要以上に低下しない。
【００２６】
変更部１０は、アプリケーションに応じた付与処理と判定処理とをアプリケーションが実行するようにアプリケーションのプログラムを変更することが可能である。例えば、取得される情報の種類に応じて、付与処理の実行を選択することが可能である。あるいは、情報を出力する方法に応じて、判定処理の実行を選択することが可能である。これによって、アプリケーションごとに異なるテイント解析を行うことができる。
【００２７】
次に、本実施形態の具体的な例を説明する。
【００２８】
（第１の例）
図３は、第１の例によるテイント解析装置１ａの構成を示している。図３に示すように、テイント解析装置１ａは、変更部１０ａと、実行部２０とを有する。実行部２０は、図１に示すテイント解析装置１における実行部２０と同様である。
【００２９】
変更部１０ａは、解析部１１と、挿入部１２とを有する。解析部１１は、アプリケーションのプログラムを解析し、情報を取得する関数に係る第１のコードと、情報を出力するための準備を行う関数または情報を出力する関数に係る第２のコードとを特定する。挿入部１２は、第１のコードを含む部分に対して、付与処理に係るコードを挿入し、第２のコードを含む部分に対して、判定処理に係るコードを挿入する。
【００３０】
図４は、テイント解析装置１ａの動作の手順を示している。図４を参照して、テイント解析装置１ａの動作を説明する。
【００３１】
解析部１１は、アプリケーションのプログラムを解析し、情報を取得する関数に係る第１のコードと、情報を出力するための準備を行う関数または情報を出力する関数に係る第２のコードとを特定する（ステップＳ１０１）。
【００３２】
例えば、アプリケーションは、Webブラウザによって読み込まれて動作するWebアプリケーションである。例えば、Webアプリケーションは、JavaScript（登録商標）等のプログラム（スクリプト）を含む。このようなインタプリタ型言語については、読み取り可能なコードを含むプログラムを直接取得することが可能である。アプリケーションが、C言語等のコンパイラ型言語のプログラムを含む場合、解析部１１は、プログラムを逆コンパイルし、読み取り可能なコードを含むプログラムを取得する。
【００３３】
解析部１１は、取得されたプログラムにおいて、文字列のマッチング処理等を行うことによって、第１のコードと第２のコードとを特定する。本例では、アプリケーションは、情報の取得に係るAPI（Application Programming Interface）と、情報の出力の準備に係るAPIと、情報の出力に係るAPIとを実行する。APIは、情報や機能を利用するための関数の集合である。解析部１１は、取得されたプログラムにおいて、情報の取得に係るAPIを実行する第１のコードと、情報の出力の準備に係るAPIまたは情報の出力に係るAPIを実行する第２のコードとを特定する。
【００３４】
第１のコードと第２のコードとが特定された後、挿入部１２は、第１のコードを含む部分に対して、付与処理に係るコードを挿入し、第２のコードを含む部分に対して、判定処理に係るコードを挿入する（ステップＳ１０２）。
【００３５】
図５は、付与処理に係るコードが挿入されたアプリケーションのプログラムを示している。図５は、OSの１つであるFirefox（登録商標）用のアプリケーションのプログラムの例を示している。図５において、左端の数字は、便宜的に付与された行番号である。
【００３６】
１行目のコードは第１のコード（navigator.mozContacts.getAll）を含む。図５では、第１のコードは、アドレス帳の情報を取得するAPIであるgetAllを実行するコードである。getAllは、汎用的なシステムで用意されている標準的なAPIである。１行目のコードは、情報が取得され、allContactsオブジェクトに情報が格納されることを示している。
【００３７】
２行目のコードは、挿入部１２によって挿入されたコードである。図５では、情報の取得に係るAPIを実行する第１のコードの後に、挿入部１２によって、付与処理に係るコードが挿入されている。２行目のコードは、Taint関数が呼び出され、allContactsオブジェクトにテイントタグ（contacts）が付与されることを示している。Taint関数は、本実施形態で用意されている関数であり、第一引数として指定されたテイントタグをオブジェクトに付与する。例えば、Taint関数は、実行部２０に実装されている。アプリケーションは、付与処理の実行時にTaint関数を呼び出す。実行部２０は、呼び出されたTaint関数を実行し、実行結果をアプリケーションに返す。アプリケーションは、実行結果に基づいて、付与処理を続行する。
【００３８】
図６は、判定処理に係るコードが挿入されたアプリケーションのプログラムを示している。図６は、Firefox（登録商標）用のアプリケーションのプログラムの例を示している。図６において、左端の数字は、便宜的に付与された行番号である。
【００３９】
１行目から３行目のコードは、HTTPリクエストの１つであるGETメソッドを送信するための準備が行われることを示している。３行目のコードは、HTTPリクエストを初期化するAPIであるopenが実行されることを示している。図６では、openが実行されることによって、xhrオブジェクトにGETメソッドが指定される。openは、情報を外部に送信するための準備を行うAPIである。openは、汎用的なシステムで用意されている標準的なAPIである。
【００４０】
４行目のコードは、挿入部１２によって挿入されたコードである。４行目のコードは、isTaintCheck関数が呼び出され、xhrオブジェクトにテイントタグが付与されているか否かの判定が行われることを示している。isTaintCheck関数は、本実施形態で用意されている関数であり、オブジェクトにテイントタグが付与されているか否かを判定する。isTaintCheck関数はさらに、オブジェクトに付与されているテイントタグの種類を特定してもよい。例えば、isTaintCheck関数は、実行部２０に実装されている。アプリケーションは、判定処理の実行時にisTaintCheck関数を呼び出す。実行部２０は、呼び出されたisTaintCheck関数を実行し、実行結果をアプリケーションに返す。アプリケーションは、実行結果に基づいて、判定処理を続行する。
【００４１】
５行目のコードは第２のコード（xhr.send）を含む。図６では、第２のコードは、情報を外部に送信するAPIであるsendを実行するコードである。sendは、汎用的なシステムで用意されている標準的なAPIである。５行目のコードは、xhrオブジェクトに指定されたGETメソッドが外部に送信されることを示している。図６では、情報の出力に係るAPIを実行する第２のコードの前に、挿入部１２によって、判定処理に係るコードが挿入されている。４行目のコードと５行目のコードとの位置が逆であってもよい。つまり、情報の出力に係るAPIを実行する第２のコードの後に、判定処理に係るコードが挿入されていてもよい。
【００４２】
挿入部１２は、情報の出力の準備に係るAPIを実行するコードの後に、判定処理に係るコードを挿入してもよい。例えば、openを実行するコード（３行目）の後に、判定処理に係るコードを挿入してもよい。この場合、判定処理に係るコードが挿入されたプログラムは、図６に示すプログラムと同一である。
【００４３】
挿入部１２は、アプリケーションのプログラムにおいて、記録媒体への情報の書き込みに係るAPIを実行するコードを含む部分に対して、判定処理に係るコードを挿入してもよい。また、挿入部１２は、アプリケーションのプログラムにおいて、アプリケーション間の情報の送受信に係るAPIを実行するコードを含む部分に対して、判定処理に係るコードを挿入してもよい。
【００４４】
アプリケーションが、コンパイラ型言語のプログラムを含む場合、挿入部１２は、コードが挿入されたプログラムをコンパイルし、実行プログラムを生成する。
【００４５】
コードが挿入された後、実行部２０は、ステップＳ１０２でコードが挿入されたアプリケーションを実行する（ステップＳ１１０）。
【００４６】
（第２の例）
図７は、第２の例によるテイント解析装置１ｂの構成を示している。図７に示すように、テイント解析装置１ｂは、変更部１０ｂと、実行部２０とを有する。実行部２０は、図１に示すテイント解析装置１における実行部２０と同様である。
【００４７】
変更部１０ｂは、生成部１３と、挿入部１４とを有する。生成部１３は、情報を取得する関数を実行するコードと、付与処理に係るコードとを含む第１のプログラムを生成し、情報を出力するための準備を行う関数または情報を出力する関数に係るコードと、判定処理に係るコードとを含む第２のプログラムを生成する。挿入部１４は、第１のプログラムと第２のプログラムとを読み込むコードをアプリケーションのプログラムに挿入する。
【００４８】
図８は、テイント解析装置１ｂの動作の手順を示している。図８を参照して、テイント解析装置１ｂの動作を説明する。
【００４９】
生成部１３は、情報を取得する関数を実行するコードと、付与処理に係るコードとを含む第１のプログラムを生成し、情報を出力するための準備を行う関数または情報を出力する関数に係るコードと、判定処理に係るコードとを含む第２のプログラムを生成する（ステップＳ１０３）。
【００５０】
図９は、生成部１３によって生成されたプログラムの一部を示している。図９は、Webアプリケーションを構成するスクリプトの例を示している。図９において、左端の数字は、便宜的に付与された行番号である。
【００５１】
本例では、アプリケーションはWebアプリケーションである。Webアプリケーションのプログラムは、Webブラウザ上で動作するスクリプトを有する。１行目から８行目のコードは、新たなAPIであるcontacts_replace_getAllを定義するコードである。５行目のコードは、Taint関数が呼び出され、取得された情報が格納されるオブジェクトにテイントタグが付与されることを示している。９行目のコードは、１行目から８行目のコードで定義されたAPI（contacts_replace_getAll）が実行されることを示している。図９に示すプログラムは、アプリケーションによってgetAllが呼び出されたときに実行される。
【００５２】
図１０は、生成部１３によって生成されたプログラムの一部を示している。図１０は、Webアプリケーションを構成するスクリプトの例を示している。図１０において、左端の数字は、便宜的に付与された行番号である。
【００５３】
１行目から７行目のコードは、新たなAPIであるxhr_open_replaceを定義するコードである。４行目のコードは、isTaintCheck関数が呼び出され、openの第二引数（arguments[1]）にテイントタグが付与されているか否かの判定が行われることを示している。openの第二引数（arguments[1]）はURLである。URLの文字列の最後尾に「?」を追加し、それに続けて、送信される情報（いわゆるURLパラメータ）を付加することが可能である。４行目のコードは、送信される情報にテイントタグが付与されているか否かの判定が行われることを示している。図１０に示すプログラムは、アプリケーションによってopenが呼び出されたときに実行される。
【００５４】
前述したように、openは、情報を外部に送信するための準備を行うAPIである。openが実行されたときに判定処理を行うことによって、外部に送信される情報にテイントタグが付与されているか否かを判定することができる。
【００５５】
生成部１３は、図９に示すプログラムと、図１０に示すプログラムとを含むプログラムを生成する。例えば、生成部１３は、これらのプログラムを含む、taint.jsというスクリプトを生成する。
【００５６】
第１のプログラムと第２のプログラムとが生成された後、挿入部１４は、第１のプログラムと第２のプログラムとを読み込むコードをアプリケーションのプログラムに挿入する（ステップＳ１０４）。
【００５７】
図１１は、挿入部１４によってコードが挿入されたアプリケーションのプログラムの一部を示している。図１１は、Webアプリケーションを構成するWebページすなわちHTMLファイルの例を示している。図１１において、左端の数字は、便宜的に付与された行番号である。
【００５８】
３行目の<head>タグに続く領域の先頭（４行目）の<sctipt>タグに、第１のプログラムと第２のプログラムとを読み込むコードが含まれる。図１１では、第１のプログラムと第２のプログラムとを含むスクリプト（taint.js）がアプリケーションによって読み込まれる。
【００５９】
第１のプログラムを読み込んだアプリケーションは、情報を取得する関数（getAll）を実行するとき、第１のプログラムに含まれるコードを実行する。これによって、取得された情報が格納されるオブジェクトにテイントタグが付与される。また、第２のプログラムを読み込んだアプリケーションは、情報を出力するための準備を行う関数（open）を実行するとき、第２のプログラムに含まれるコードを実行する。これによって、出力される情報にテイントタグが付与されているか否かの判定が行われる。
【００６０】
図１０に示す例では、第２のプログラムは、情報を出力するための準備を行う関数に係るコードと、判定処理に係るコードとを含む。第２のプログラムは、情報を出力する関数に係るコードと、判定処理に係るコードとを含んでいてもよい。例えば、情報を外部に送信するAPIであるsendに係るコードと、判定処理に係るコードとを含み、図１０に示すプログラムと同様のプログラムを生成することが可能である。
【００６１】
コードが挿入された後、実行部２０は、ステップＳ１０４でコードが挿入されたアプリケーションを実行する（ステップＳ１１０）。
【００６２】
（第３の例）
図１２は、第３の例によるテイント解析装置１ｃの構成を示している。図１２に示すように、テイント解析装置１ｃは、変更部１０ｃと、実行部２０ｃとを有する。
【００６３】
変更部１０ｃは、情報を取得する処理が実行されるときに情報にテイントタグを付与する付与処理と、情報を外部に送信する送信処理が実行されるときに情報にテイントタグが付与されているか否かを判定する判定処理とをアプリケーションが実行するようにアプリケーションのプログラムを変更する。変更部１０ｃは、図３に示すテイント解析装置１ａにおける解析部１１と挿入部１２とを有していてもよい。また、変更部１０ｃは、図７に示すテイント解析装置１ｂにおける生成部１３と挿入部１４とを有していてもよい。
【００６４】
実行部２０ｃは、変更部１０ｃによって変更されたアプリケーションを実行する。さらに、実行部２０ｃは、送信処理が実行されるとき、情報の送信先に応じて送信を許可または拒否する制御を行う制御部２１を有する。
【００６５】
アプリケーションの実行中、アプリケーションが送信処理を実行するとき、制御部２１は情報の送信先に応じた制御を行う。例えば、アプリケーションが送信処理に係る関数を呼び出したとき、制御部２１は情報の送信先に応じた制御を行う。情報の送信先が、予め許可されている送信先であった場合、制御部２１は送信を許可する。この場合、実行部２０は、送信処理に係る関数を実行し、実行結果をアプリケーションに返す。また、情報の送信先が、予め許可されている送信先でなかった場合、制御部２１は送信を拒否する。この場合、制御部２１は、送信処理に係る関数を実行せず、実行結果をアプリケーションに返す。
【００６６】
例えば、ネットワーク上のマーケットプレイスから取得可能なアプリケーションに対応するプライバシーポリシーがある。プライバシーポリシーは、利用者情報の扱い方を規定している。情報の送信先を示す情報がプライバシーポリシーに含まれる。情報の送信先を示す情報をプライバシーポリシーから取得し、その情報が示す送信先を、予め許可されている送信先として扱ってもよい。つまり、制御部２１は、アプリケーションが送信しようとしている情報の送信先が、プライバシーポリシーに含まれる情報が示す送信先と一致する場合、送信を許可してもよい。また、制御部２１は、アプリケーションが送信しようとしている情報の送信先が、プライバシーポリシーに含まれる情報が示す送信先と一致しない場合、送信を拒否してもよい。
【００６７】
情報の送信先に応じて送信を許可または拒否する制御を行うことによって、情報漏洩を防止することができる。
【００６８】
上述したように、本実施形態によれば、アプリケーションごとにテイント解析の実行を選択することができ、かつ、アプリケーションごとに異なるテイント解析を行うことができる。
【００６９】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００７０】
１，１ａ，１ｂ，１ｃ  テイント解析装置
１０，１０ａ，１０ｂ，１０ｃ  変更部
１１  解析部
１２，１４  挿入部
１３  生成部
２０，２０ｃ  実行部
２１  制御部
【図１】
2016014956.tif 000003
【図２】
2016014956.tif 000004
【図３】
2016014956.tif 000005
【図４】
2016014956.tif 000006
【図５】
2016014956.tif 000007
【図６】
2016014956.tif 000008
【図７】
2016014956.tif 000009
【図８】
2016014956.tif 000010
【図９】
2016014956.tif 000011
【図１０】
2016014956.tif 000012
【図１１】
2016014956.tif 000013
【図１２】
2016014956.tif 000014