(57)【特許請求の範囲】
【請求項１】
端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、
前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、
前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項２】
前記第１のログ出力部は、端末に格納されている情報を引数で指定して取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、前記引数を示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し
前記比較部は、前記ログに前記第１の情報が記録されている場合に、前記第１の情報が示す引数を指定して第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する
ことを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項３】
アプリケーションの動作中の挙動が記録されたアプリケーションログから解析対象のアプリケーションの識別情報を抽出し、抽出した前記識別情報に基づいて前記ログから前記解析対象のアプリケーションに関する情報を抽出する抽出部をさらに備え、
前記第１のログ出力部は、端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報とアプリケーションの識別情報とをログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し
前記第２のログ出力部は、前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報とアプリケーションの識別情報とを前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し、
前記比較部は、前記抽出部によって抽出された情報に前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記抽出部によって抽出された情報に含まれる前記第２の情報とを比較する
ことを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項４】
第１の装置と、第２の装置とを備え、
前記第１の装置は、
端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、
前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、
前記ログを前記第２の装置へ送信する送信部と、
を有し、
前記第２の装置は、
前記ログを前記第１の装置から受信する受信部と、
前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、
を有することを特徴とするアプリケーション解析システム。
【請求項５】
端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、
前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、
前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの機能を解析するアプリケーション解析装置およびアプリケーション解析システムに関する。また、本発明は、本アプリケーション解析装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
汎用OS（オペレーティングシステム）を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI が豊富に用意されているAndroid（登録商標）が注目を集めている。本明細書では一例として、Android（登録商標） OSを搭載したスマートフォンについて記載する。
【０００３】
スマートフォンは、誰もが自由にアプリケーションを開発して公開でき、公開されたアプリケーションをユーザが自由にインストールできるプラットフォームである。公開されたアプリケーションをスマートフォンに導入することにより、スマートフォンの様々な機能を柔軟かつ容易に拡張することができる。
【０００４】
また、スマートフォンには、端末識別子、電話番号、メールアドレス、電話帳、通話履歴等の個人情報が集積しており、これらの個人情報を取得するAPIが用意されている。アプリケーションの中には、ユーザに気づかれないように、これらの個人情報を収集して外部に送信する悪性アプリケーション（マルウェア）が存在する。
【０００５】
ユーザをマルウェアによる脅威から保護する手法として、アプリケーションの安全性を事前に検証し、マルウェアを検知する仕組みが有効である。非特許文献１には、マルウェアによる情報漏洩を検知する手法が記載されている。非特許文献１では、アプリケーションが情報を送信した場合、その情報の内容がログに記録され、ログの内容と、端末に格納されている個人情報から予め生成されたシグネチャとが比較され、両者が一致した場合に、情報漏洩が検知される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】竹森敬祐、磯原隆将、窪田歩、高野智秋、“Android携帯電話上での情報漏洩検知”、電子情報通信学会、SCIS2011シンポジウム、2011年1月
【発明の概要】
【発明が解決しようとする課題】
【０００７】
非特許文献１に記載された手法では、情報漏洩の検知の対象となる全ての個人情報についてログの内容とシグネチャの比較を行う必要がある。このため、実際には取得されていない個人情報についてもログの内容とシグネチャの比較を行うことにより、処理負荷が高くなるという問題がある。
【０００８】
本発明は、上述した課題に鑑みてなされたものであって、アプリケーションによる情報漏洩を検知すると共に処理負荷を低減することができるアプリケーション解析装置、アプリケーション解析システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上記の課題を解決するためになされたもので、端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析装置である。
【００１１】
また、本発明のアプリケーション解析装置において、前記第１のログ出力部は、端末に格納されている情報を引数で指定して取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、前記引数を示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し前記比較部は、前記ログに前記第１の情報が記録されている場合に、前記第１の情報が示す引数を指定して第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較することを特徴とする。
【００１４】
また、本発明のアプリケーション解析装置は、アプリケーションの動作中の挙動が記録されたアプリケーションログから解析対象のアプリケーションの識別情報を抽出し、抽出した前記識別情報に基づいて前記ログから前記解析対象のアプリケーションに関する情報を抽出する抽出部をさらに備え、前記第１のログ出力部は、端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報とアプリケーションの識別情報とをログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し前記第２のログ出力部は、前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報とアプリケーションの識別情報とを前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し、前記比較部は、前記抽出部によって抽出された情報に前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記抽出部によって抽出された情報に含まれる前記第２の情報とを比較することを特徴とする。
【００１８】
また、本発明は、第１の装置と、第２の装置とを備え、前記第１の装置は、端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、前記ログを前記第２の装置へ送信する送信部と、を有し、前記第２の装置は、前記ログを前記第１の装置から受信する受信部と、前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、を有することを特徴とするアプリケーション解析システムである。
【００２０】
また、本発明は、端末に格納されている情報を取得する第１のAPI（Application Program Interface）のコードと、端末の外部に情報を送信する第２のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第１のAPIを実行したことを示す第１の情報をログに出力する第３のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第１のログ出力部と、前記OSのプログラムに対して、アプリケーションが前記第２のAPIを実行することにより送信された第２の情報を前記ログに出力する第４のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第２のログ出力部と、前記ログに前記第１の情報が記録されている場合に、前記第１のAPIを実行することにより取得される第３の情報と、前記ログに記録された前記第２の情報とを比較する比較部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【００２２】
また、本発明によれば、アプリケーションが第１のAPIを実行したことを示す第１の情報がログに出力され、アプリケーションが第２のAPIを実行することにより送信された第２の情報がログに出力されるので、ログに第１の情報が記録されている場合に、第１のAPIを実行することにより取得される第３の情報と、ログに記録された第２の情報とを比較することで、アプリケーションによる情報漏洩を検知することができる。さらに、本発明によれば、アプリケーションによって実際に取得された情報についてのみ、第３の情報と第２の情報とを比較することが可能となるので、処理負荷を低減することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の第１の実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図２】本発明の第１の実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。
【図３】本発明の第１の実施形態におけるアプリケーションログの内容を示す参考図である。
【図４】本発明の第１の実施形態における情報取得APIの一覧を示す参考図である。
【図５】本発明の第１の実施形態における情報取得APIのコードを示す参考図である。
【図６】本発明の第１の実施形態における外部送信APIのコードを示す参考図である。
【図７】本発明の第１の実施形態におけるOSのソースツリーを示す参考図である。
【図８】本発明の第１の実施形態において、外部に情報を送信するライブラリのコードを示す参考図である。
【図９】本発明の第２の実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。
【図１０】本発明の第２の実施形態における情報取得APIのコードを示す参考図である。
【図１１】本発明の第１、第２の実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid（登録商標）という文字列を*andrd*という文字列で代用し、java（登録商標）という文字列を*jv*という文字列で代用している。すなわち、*andrd*という文字列はandroid（登録商標）という文字列と等価であり、*jv*という文字列はjava（登録商標）という文字列と等価である。
【００２５】
（第１の実施形態）
まず、本発明の第１の実施形態を説明する。図１は、本実施形態によるアプリケーション解析装置の構成を示している。本実施形態のアプリケーション解析装置は、OS にAndroid（登録商標）を実装したスマートフォン等の端末装置として構成されている。図１に示すようにアプリケーション解析装置は、記憶部１０、アプリケーション起動部１１、アプリケーション１２、ログ出力部１３，１４、抽出部１５、解析部１６を有する。
【００２６】
記憶部１０は、OSのプログラムや、解析対象のアプリケーションの実行ファイルを含むパッケージファイル（アプリケーションファイル）、アプリケーション解析装置が使用する各種データ等を記憶する。Android（登録商標）では、パッケージファイルの形式でアプリケーションが公開されている。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列（実行コード）を含む実行ファイル（例えば拡張子が.dex）、アプリケーションが利用するパーミッション（権限）が定義されたマニフェストファイル（例えば拡張子が.xml）、アプリケーションが利用する画像ファイル（例えば拡張子が.jpg）等を含む。
【００２７】
アプリケーション起動部１１は、記憶部１０に格納されているパッケージファイルを実行することにより、アプリケーション１２を起動する。アプリケーション１２は、パッケージファイルに含まれる実行ファイルの実行コードに従って、アプリケーションの処理として規定された各種の処理を行う。アプリケーション１２の挙動はアプリケーションログＬ１に記録される。アプリケーションログＬ１の内容は、例えばLogcatコマンドを実行することにより参照可能である。
【００２８】
ログ出力部１３は、アプリケーション１２が、端末に格納されている個人情報を端末内から取得するAPI（以下、情報取得APIと記載）を実行した際に、OSの機能を利用して、その個人情報をアプリケーションログＬ１に出力する。ログ出力部１４は、アプリケーション１２が、端末の外部に情報を送信するAPI（以下、外部送信APIと記載）を実行した際に、OSの機能を利用して、送信された情報の内容をアプリケーションログＬ１に出力する。
【００２９】
抽出部１５は、解析対象のアプリケーション１２を識別する情報に基づいて、アプリケーションログＬ１に記録された情報から、解析対象のアプリケーション１２に関する情報を抽出する。解析部１６は、抽出部１５によって抽出された情報に基づいて、アプリケーション１２の挙動を解析する。
【００３０】
アプリケーションログＬ１には、アプリケーション１２が情報取得APIを実行して取得した個人情報が記録されている。また、アプリケーションログＬ１には、アプリケーション１２が外部送信APIを実行して外部に送信した情報が記録されている。アプリケーションログＬ１に含まれる個人情報と、アプリケーションログＬ１に含まれる、外部に送信された情報とが一致する場合、個人情報が外部に送信されている、すなわち情報漏洩が発生していることが分かる。したがって、アプリケーションログＬ１に含まれる個人情報と、アプリケーションログＬ１に含まれる、外部に送信された情報とを比較し、一致する情報があるか否かを判定することによって、情報漏洩を検知することができる。
【００３１】
前述した非特許文献１に記載された手法では、情報漏洩の検知の対象となる全ての個人情報についてログの内容とシグネチャの比較を行う必要があり、実際には取得されていない個人情報についてもログの内容とシグネチャの比較を行うため、処理負荷が高い。これに対して、本実施形態では、実際に取得された個人情報がアプリケーションログＬ１に記録されているので、情報漏洩の検知の対象となる全ての個人情報のうちアプリケーションログＬ１に記録されている個人情報のみを用いて情報漏洩の検知を行うことにより、処理負荷を低減することができる。
【００３２】
本実施形態のOSのプログラムでは、OSのアプリケーションフレームワークで提供されている既存のクラスを定義しているコードに対して、アプリケーション１２が情報取得APIを実行して取得した個人情報をアプリケーションログＬ１に出力するコードと、アプリケーション１２が外部送信APIを実行して外部に送信した情報をアプリケーションログＬ１に出力するコードとが追加されている。つまり、本実施形態のOSのプログラムは、ログ出力部１３，１４の動作を規定したコードを含む。
【００３３】
OSのソースプログラムのうちアプリケーションフレームワークのコードに対して、ログ出力部１３，１４の動作を規定するコードが追加されることで、OSのソースプログラムが変更され、変更されたソースプログラムがアセンブル（コンパイル）されることで、変更されたOSの実行プログラム（実行ファイル）が生成される。このようにして生成されたOSの実行プログラムがアプリケーション解析装置にインストールされている。アプリケーション解析装置においてOSが起動することでログ出力部１３，１４が起動する。また、アプリケーション１２の動作中に、上記の追加されたコードを実行することで、ログ出力部１３は、アプリケーション１２が情報取得APIを実行して取得した個人情報をアプリケーションログＬ１に出力し、ログ出力部１４は、アプリケーション１２が外部送信APIを実行して外部に送信した情報をアプリケーションログＬ１に出力する。
【００３４】
アプリケーション起動部１１、抽出部１５、解析部１６については、それらのコードをOSのプログラムに追加してもよいし、それらを含むアプリケーションを構成してもよい。
【００３５】
本実施形態のOSのプログラム（ログ出力部１３，１４のコードを含む）と、アプリケーション起動部１１、抽出部１５、解析部１６のプログラムとをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ（本実施形態のアプリケーション解析装置）に読み込ませ、実行させることにより、アプリケーション起動部１１、ログ出力部１３，１４、抽出部１５、解析部１６は、各部に対して規定された処理を実行する。
【００３６】
ここで、「コンピュータ」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００３７】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００３８】
本実施形態によるアプリケーション解析装置は、例えばスマートフォン用のアプリケーションを通信ネットワーク上で販売する販売サイトを管理する企業で使用される。したがって、ユーザが端末にインストールするアプリケーションを事前に審査することができる。また、本実施形態によるアプリケーション解析装置が行う解析のアルゴリズムをアンチウイルスソフトに適用することも可能である。
【００３９】
次に、本実施形態によるアプリケーション解析装置の動作を説明する。図２はアプリケーション解析装置の動作を示している。まず、アプリケーション起動部１１は記憶部１０から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション１２を起動する（ステップＳ１００）。起動したアプリケーション１２は各種の処理を行う。また、アプリケーション１２の挙動を示す情報がアプリケーションログＬ１に出力される。アプリケーション１２が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【００４０】
ログ出力部１３は、アプリケーション１２が情報取得APIを呼び出して実行した際に、情報取得APIによって取得された個人情報と、個人情報が取得されたことを示す情報（例えば、情報取得APIの名称）とを関連付けてアプリケーションログＬ１に出力する。また、ログ出力部１４は、アプリケーション１２が外部送信APIを呼び出して実行した際に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報（例えば、外部送信APIの名称）とを関連付けてアプリケーションログＬ１に出力する（ステップＳ１０５）。
【００４１】
このとき、ログ出力部１３，１４は、LogクラスのAPI（dメソッド）を実行することにより情報をアプリケーションログＬ１に出力する。このAPIを実行すると、アプリケーション１２を識別するPID（Process ID）もアプリケーションログＬ１に記録される。したがって、アプリケーションログＬ１には、情報取得APIによって取得された個人情報と、個人情報が取得されたことを示す情報と、アプリケーション１２のPIDとを関連付けた情報が記録されていると共に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報と、アプリケーション１２のPIDとを関連付けた情報が記録されている。
【００４２】
続いて、抽出部１５は、アプリケーション１２を識別する情報に基づいて、アプリケーションログＬ１に記録された情報から、解析対象のアプリケーション１２に関する情報を抽出する（ステップＳ１１０）。アプリケーション１２が起動すると、図３に示す情報がアプリケーションログＬ１に出力される。アプリケーションログＬ１には、起動したアプリケーション１２を識別するPID３００が記録されている。抽出部１５は、解析対象のアプリケーション１２を起動したときにアプリケーションログＬ１に記録されたＰIDと同じＰIDに関連付けられている情報をアプリケーションログＬ１から検索し、抽出する。
【００４３】
続いて、解析部１６は、抽出部１５によってアプリケーションログＬ１から抽出された情報に含まれる、情報取得APIによって取得された個人情報と、外部送信APIによって外部に送信された情報とを比較し、両者の一致・不一致を検出する（ステップＳ１１５）。アプリケーションログＬ１において、個人情報が取得されたことを示す情報と関連付けられている情報が、情報取得APIによって取得された個人情報である。また、アプリケーションログＬ１において、外部に情報が送信されたことを示す情報と関連付けられている情報が、外部送信APIによって外部に送信された情報である。解析部１６は、個人情報が取得されたことを示す情報、外部に情報が送信されたことを示す情報をそれぞれ検索のキーとしてアプリケーションログＬ１から情報を抽出し、比較を行う。
【００４４】
続いて、解析部１６は、ステップＳ１１５で比較を行った結果に基づいて、情報漏洩が発生したか否かを判定する（ステップＳ１２０）。情報取得APIによって取得された個人情報が、外部送信APIによって外部に送信された情報のいずれかと一致した場合、情報漏洩が発生しているので、解析部１６は、アプリケーション１２が不正であることを示す情報を出力する（ステップＳ１２５）。また、情報取得APIによって取得された全ての個人情報が、外部送信APIによって外部に送信された情報と一致しなかった場合、情報漏洩が発生していないので、解析部１６は、アプリケーション１２が正常であることを示す情報を出力する（ステップＳ１３０）。ステップＳ１２５，Ｓ１３０における情報の出力は、記憶部１０等の記憶装置に対する情報の保存でもよいし、表示部を使用した情報の表示でもよいし、他の装置に対する情報の送信でもよい。
【００４５】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部１３の動作を規定するコードを追加する具体的な例を説明する。アプリケーション１２によって情報取得APIが呼び出された場合に取得された個人情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。
【００４６】
図４は情報取得APIの一例を示している。本実施形態の情報取得APIは、TelephonyManagerクラスとAccountManagerクラスのAPIである。なお、図４に示すAPIは一例であり、これに限らない。APIはメソッドであるが、本実施形態で注目するメソッドを他のメソッドと区別するため、図４に示すメソッドをAPIと記載している。
【００４７】
TelephonyManagerクラスのAPIは、端末を識別するIDであるIMEI（International Mobile Equipment Identity）を取得するgetDeviceIdや、端末のアプリケーションのバージョンを取得するgetDeviceSoftwareVersion、端末の電話番号を取得するgetLine1Number、SIM （Subscriber Identity Module）のシリアル番号を取得するgetSimSerialNumber、SIMの固有番号であるIMSI（International Mobile Subscriber Identity）を取得するgetSubscriberIdである。AccountManagerクラスのAPIは、gmail等のメールアドレスのアカウント情報を取得するgetAccounts、アカウントのタイプと認証識別子を取得するgetAccountsByTypeAndFeaturesである。
【００４８】
個人情報は端末内の所定の場所に格納されている。例えば、IMEIは、スマートフォン等の携帯端末が標準で備えている汎用のフラッシュメモリに記録されており、IMSIは、スマートフォン等の携帯端末の使用に必要な汎用のUIM（User Identity Module Card）カードに記録されている。
【００４９】
図５はgetDeviceIdのコードを変更した例を示している。アプリケーションに値を返答するコード５００の前に、IMEIが取得されたことを示す文字列とIMEIとをアプリケーションログＬ１に出力するコード５１０が追加されている。したがって、アプリケーションがIMEIを取得すると、取得されたIMEIがアプリケーションログＬ１に記録される。
【００５０】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部１４の動作を規定するコードを追加する具体的な例を説明する。アプリケーション１２によって外部送信APIが呼び出された場合に送信された情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。本実施形態の外部送信APIはSmsManagerクラスのAPIである。SmsManagerクラスのAPIは、例えばSMSによりメッセージを送信するsendTextMessageである。
【００５１】
図６はsendTextMessageのコードを変更した例を示している。sendTextMessageの第１引数には送信先のアドレスが指定され、第２引数には送信メッセージが指定される。このことから、送信を行うコード６００の前に、外部への情報の送信が行われたことを示す文字列と、第１引数と、第２引数とをアプリケーションログＬ１に出力するコード６１０が追加されている。したがって、アプリケーションが情報を送信すると、送信先のアドレスと送信メッセージがアプリケーションログＬ１に記録される。
【００５２】
次に、OSの他のコードに対して、ログ出力部１４の動作を規定するコードを追加する具体的な例を説明する。OSのプログラムは、特定の機能を実現するライブラリ（モジュール）の集合である。上記の例ではアプリケーションフレームワークのライブラリ（上記の例ではSmsManagerクラス）のコードを変更した例を示したが、以下ではアプリケーションフレームワークのライブラリとは異なるライブラリのコードを変更する例を示す。
【００５３】
暗号通信の一種であるSSL（Secure Socket Layer）通信を行うAPIはJava（登録商標）のライブラリ（以下、Jvライブラリと記載）で実装されている。図７は、Android（登録商標）のソースプログラムのファイル構造であるソースツリーを示している。アプリケーションフレームワークのライブラリは、「frameworks」というフォルダに格納されている。Jvライブラリは、「libcore」というフォルダに格納されている。
【００５４】
Jvライブラリのコードに対して、送信された情報をアプリケーションログＬ１に出力するコードを追加することで、アプリケーション１２がSSL通信を行ったときに送信された情報をアプリケーションログＬ１に記録することが可能となる。しかし、本実施形態でログに情報を出力するAPIはアプリケーションフレームワークのライブラリに含まれており、JvライブラリはアプリケーションフレームワークのライブラリのAPIを直接呼び出すことができないという技術的課題がある。
【００５５】
Android（登録商標）をビルドする際、最初にJvライブラリのコンパイルが実行され、アプリケーションフレームワークのライブラリのコンパイルはその次に実行される。このことから、JvライブラリがアプリケーションフレームワークのライブラリのAPIを直接呼び出すように設計されたOSをビルドすると、Jvライブラリのコンパイルの際にアプリケーションフレームワークのクラスがロードできないため、コンパイルが失敗する。そこで、一般的にリフレクションと呼ばれている手法を利用することで、JvライブラリがアプリケーションフレームワークのライブラリのAPIを呼び出すことが可能となる。
【００５６】
アプリケーションがリフレクションを用いてJvライブラリからアプリケーションフレームワークのライブラリのAPIを呼び出すようにOSを設計すると、コンパイル時にアプリケーションフレームワークのクラスをロードする必要がなくなるため、コンパイルエラーが発生しない。そして、プログラムの実行時には、アプリケーションフレームワークのクラスがロードされているため、エラーが発生せずに、JvライブラリからアプリケーションフレームワークのAPIを実行することができる。Java（登録商標）では、リフレクションを実行するために*jv*.lang.reflect.Methodクラスが用意されており、プログラムの実行時に任意のクラスのオブジェクトの作成とメソッドの呼び出しが可能である。
【００５７】
以下、リフレクションを利用したコードの例を説明する。情報を送信するAPIがソケットに書き込む情報の内容をアプリケーションログＬ１に出力するようにJvライブラリのコードが変更される。https のSSL通信においてソケットに情報を書き込むAPIは、org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのwriteである。このAPIの第１引数には、ソケットに書き込む情報が指定される。この情報をアプリケーションログＬ１に出力するため、リフレクションを用いて、アプリケーションフレームワークのLogクラスのAPI（dメソッド）を呼び出すようにJvライブラリのコードが変更される。
【００５８】
図８はJvライブラリのコードを変更した例を示している。org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのコードに対して、リフレクションを利用してアプリケーションフレームワークのLogクラスのAPI（dメソッド）を呼び出すAPIであるlogdを定義するコード８００が追加されている。また、ソケットに情報を書き込むAPI であるwriteのコードに対して、第１引数に指定された情報、すなわちソケットに書き込む情報を、logdの実行によってアプリケーションログＬ１に出力するコード８１０が追加されている。
【００５９】
外部に送信される情報は、送信されるパケットに記録されているが、SSLによる暗号化通信では送信される情報が暗号化されているため、外部に送信される情報をパケットから取得することができない。SSLによる暗号化通信では、ソケットに書き込まれた情報に対して暗号化が行われる。図８に示すコードでは、ソケットに書き込まれる情報の内容をアプリケーションログＬ１に出力するので、暗号化が行われる前の情報を得ることができる。
【００６０】
上記の例では、httpにSSLを実装したhttpsで送信される情報をログに出力する手法を説明した。httpで送信される情報をログに出力する手法も同様であり、上記のようにorg.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのwriteのコードを変更する代わりに、org.apache.harmony.luni.net.SocketOutputStreamクラスのwriteのコードを変更すればよい。
【００６１】
上述したように、本実施形態によれば、アプリケーションが情報取得APIを実行することにより取得された個人情報と、アプリケーションが外部送信APIを実行することにより送信された情報とがアプリケーションログＬ１に出力されるので、これらの情報を比較することで、アプリケーション１２による情報漏洩を検知することができる。さらに、アプリケーション１２によって実際に取得された個人情報についてのみ、情報の比較を行うことが可能となるので、処理負荷を低減することができる。
【００６２】
また、Jvライブラリのコードに対して、送信された情報をアプリケーションログＬ１に出力するコードを追加する場合には、リフレクションを利用することによって、JvライブラリからアプリケーションフレームワークのAPIを実行して情報をログに出力することができる。
【００６３】
また、情報取得APIのコードに対して、個人情報をアプリケーションログＬ１に出力するコードを追加することによって、アプリケーション１２によって取得された個人情報をアプリケーションログＬ１に確実に記録することができる。さらに、外部送信APIのコードに対して、外部に送信された情報をアプリケーションログＬ１に出力するコードを追加することによって、アプリケーション１２によって外部に送信された情報をアプリケーションログＬ１に確実に記録することができる。
【００６４】
前述した非特許文献１に記載された手法では、情報漏洩の検知の対象となる全ての個人情報についてログの内容とシグネチャの比較を行うために、端末毎に異なる個人情報からシグネチャを生成する必要があり、端末毎のシグネチャの設定作業が煩雑となる。これに対して、本実施形態では、アプリケーション１２によって実際に取得された個人情報をアプリケーションログＬ１に出力することによって、シグネチャの設定作業を不要とすることができる。
【００６５】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。本実施形態によるアプリケーション解析装置の構成は、第１の実施形態によるアプリケーション解析装置の構成（図１）と同様であるので、構成の説明を省略する。
【００６６】
以下、本実施形態によるアプリケーション解析装置の動作を説明する。図９はアプリケーション解析装置の動作を示している。まず、アプリケーション起動部１１は記憶部１０から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション１２を起動する（ステップＳ２００）。起動したアプリケーション１２は各種の処理を行う。また、アプリケーション１２の挙動を示す情報がアプリケーションログＬ１に出力される。アプリケーション１２が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【００６７】
ログ出力部１３は、アプリケーション１２が情報取得APIを呼び出して実行した際に、個人情報が取得されたことを示す情報（本実施形態では情報取得APIで指定される引数）をアプリケーションログＬ１に出力する。また、ログ出力部１４は、アプリケーション１２が外部送信APIを呼び出して実行した際に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報（例えば、外部送信APIの名称）とを関連付けてアプリケーションログＬ１に出力する（ステップＳ２０５）。第１の実施形態では、取得された個人情報がアプリケーションログＬ１に記録されるが、第２の実施形態では、取得された個人情報はアプリケーションログＬ１に記録されない。
【００６８】
このとき、ログ出力部１３，１４は、LogクラスのAPI（dメソッド）を実行することにより情報をアプリケーションログＬ１に出力する。このAPIを実行すると、第１の実施形態と同様に、アプリケーション１２を識別するPID（Process ID）もアプリケーションログＬ１に記録される。
【００６９】
続いて、抽出部１５は、アプリケーション１２を識別する情報に基づいて、アプリケーションログＬ１に記録された情報から、解析対象のアプリケーション１２に関する情報を抽出する（ステップＳ２１０）。このとき、第１の実施形態と同様に、抽出部１５は、解析対象のアプリケーション１２を起動したときにアプリケーションログＬ１に記録されたＰIDと同じＰIDに関連付けられている情報をアプリケーションログＬ１から検索し、抽出する。
【００７０】
続いて、解析部１６は、抽出部１５によってアプリケーションログＬ１から抽出された情報に含まれる、個人情報が取得されたことを示す情報に基づいて情報取得APIを実行することにより個人情報を取得する（ステップＳ２１５）。このとき、個人情報が取得されたことを示す情報として、情報取得APIで指定される引数がアプリケーションログＬ１に記録されているので、解析部１６は、この引数を指定して情報取得APIを実行する。これにより、解析部１６は、アプリケーション１２が取得した個人情報と同じ個人情報を取得する。
【００７１】
続いて、解析部１６は、ステップＳ２１５で取得した個人情報と、抽出部１５によってアプリケーションログＬ１から抽出された情報に含まれる、外部送信APIによって外部に送信された情報とを比較し、両者の一致・不一致を検出する（ステップＳ２２０）。アプリケーションログＬ１において、外部に情報が送信されたことを示す情報と関連付けられている情報が、外部送信APIによって外部に送信された情報である。解析部１６は、外部に情報が送信されたことを示す情報を検索のキーとしてアプリケーションログＬ１から情報を抽出し、抽出した情報を、ステップＳ２１５で取得した個人情報と比較する。
【００７２】
ステップＳ２２５〜Ｓ２３５に示す処理は図２のステップＳ１２０〜Ｓ１３０に示す処理と同様であるので、説明を省略する。
【００７３】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部１３の動作を規定するコードを追加する具体的な例を説明する。アプリケーション１２によって情報取得APIが呼び出された場合に個人情報が取得されたことを示す情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。
【００７４】
本実施形態では、ContentProviderと呼ばれるデータベースで管理されている個人情報を取得するAPIのコードを変更する例を説明する。電話帳、通話履歴、カレンダー等の個人情報はContentProviderで管理されている。本実施形態のContentProviderは記憶部１０に格納されている。ContentResolverクラスのAPIであるcursorを呼び出すことにより、アプリケーションはContentProviderから個人情報を取得することができる。アプリケーションはcursorを呼び出す際、URIと呼ばれる、取得する情報を識別する情報を引数に指定する。URIには、電話帳を取得するためのcom.*andrd*.contactcontacts や、通話履歴を取得するためのcall_log、カレンダーを取得するためのcom.*andrd*.calendar等がある。
【００７５】
図１０はcursorのコードを変更した例を示している。cursorの引数として指定された情報（com.*andrd*.contactcontacts等の文字列）をアプリケーションログＬ１に出力するコード１０００が追加されている。ステップＳ２１５で解析部１６は、アプリケーションログＬ１に記録されている引数の文字列が例えばcom.*andrd*.contactcontactだった場合には、その文字列が示す引数を指定してcursorを実行し、電話帳を取得する。
【００７６】
上述したように、本実施形態によれば、アプリケーション１２が情報取得APIを実行することにより個人情報が取得されたことを示す情報（情報取得APIを実行したことを示す情報）と、アプリケーション１２が外部送信APIを実行することにより送信された情報とがアプリケーションログＬ１に出力される。アプリケーションログＬ１に、情報取得APIを実行することにより個人情報が取得されたことを示す情報が記録されている場合に、その情報取得APIを実行することにより取得した個人情報と、アプリケーションログＬ１に記録された、外部送信APIによって送信された情報とを比較することで、アプリケーション１２による情報漏洩を検知することができる。さらに、アプリケーション１２によって実際に取得された個人情報についてのみ、情報の比較を行うことが可能となるので、処理負荷を低減することができる。
【００７７】
また、情報取得APIのコードに対して、個人情報が取得されたことを示す情報をアプリケーションログＬ１に出力するコードを追加することによって、アプリケーション１２によって個人情報が取得されたことをアプリケーションログＬ１に確実に記録することができる。さらに、外部送信APIのコードに対して、外部に送信された情報をアプリケーションログＬ１に出力するコードを追加することによって、アプリケーション１２によって外部に送信された情報をアプリケーションログＬ１に確実に記録することができる。
【００７８】
また、アプリケーション１２によって実際に取得された個人情報に関する情報をアプリケーションログＬ１に出力し、その情報に基づいて個人情報を取得することによって、非特許文献１に記載された手法で必要なシグネチャの設定作業を不要とすることができる。
【００７９】
本実施形態では、解析部１６が、情報取得APIであるcursorを実行することにより、アプリケーション１２が取得した個人情報と同じ個人情報を取得しているが、ContentProviderとは異なるデータベースを用意してそのデータベースに予め個人情報を登録しておき、解析部１６がそのデータベースから個人情報を取得してもよい。
【００８０】
また、本実施形態では情報取得APIとしてcursorを用いているが、第１の実施形態で用いた情報取得APIを用いて第２の実施形態と同様の手法によりアプリケーション１２の解析を行ってもよい。さらに、cursorのコードに対して、cursorの呼び出し時に指定される引数毎に個人情報を取得してアプリケーションログＬ１に出力するコードを追加し、第１の実施形態と同様の手法によりアプリケーション１２の解析を行ってもよい。
【００８１】
（変形例）
次に、上述した実施形態の変形例を説明する。アプリケーション解析装置の機能を複数の装置に分散させたアプリケーション解析システムを構成してもよい。図１１はアプリケーション解析システムの構成例を示している。
【００８２】
図１１に示すアプリケーション解析システムはログ出力装置１（第１の装置）と解析装置２（第２の装置）を有する。ログ出力装置１は、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成され、解析装置２はPC等の装置として構成されている。
【００８３】
ログ出力装置１は、記憶部１０、アプリケーション起動部１１、アプリケーション１２、ログ出力部１３，１４、送信部２０を有する。解析装置２は、抽出部１５、解析部１６、受信部２１を有する。図１１に示す構成のうち図１に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、その構成の説明を省略する。
【００８４】
送信部２０は、アプリケーションログＬ１を解析装置２へ送信する。受信部２１は、アプリケーションログＬ１をログ出力装置１から受信し、抽出部１５へ出力する。図１１に示すアプリケーション解析システムは第１の実施形態と第２の実施形態のどちらに対しても適用が可能である。
【００８５】
ログ出力装置１を複数の装置に分割してもよい。例えば、アプリケーション起動部１１、アプリケーション１２、ログ出力部１３、送信部２０を有する装置と、アプリケーション起動部１１、アプリケーション１２、ログ出力部１４、送信部２０を有する装置とでログ出力装置１を構成してもよい。
【００８６】
また、解析装置２を複数の装置に分割してもよい。例えば、受信部２１、抽出部１５、抽出部１５によって抽出された情報を送信する送信部を有する装置と、抽出部１５によって抽出された情報を受信する受信部、解析部１６を有する装置とで解析装置２を構成してもよい。
【００８７】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００８８】
１・・・ログ出力装置、２・・・解析装置、１０・・・記憶部、１１・・・アプリケーション起動部、１２・・・アプリケーション、１３，１４・・・ログ出力部、１５・・・抽出部、１６・・・解析部（比較部）、２０・・・送信部、２１・・・受信部
【図１】
0005941745.tif 000002
【図２】
0005941745.tif 000003
【図３】
0005941745.tif 000004
【図４】
0005941745.tif 000005
【図５】
0005941745.tif 000006
【図６】
0005941745.tif 000007
【図７】
0005941745.tif 000008
【図８】
0005941745.tif 000009
【図９】
0005941745.tif 000010
【図１０】
0005941745.tif 000011
【図１１】
0005941745.tif 000012