【文献】
奥田 健嗣,中務 亮,山内 利宏,Androidにおける情報伝搬の追跡と漏洩防止手法の提案,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2012年 3月 9日,Vol.111,No.495,pp.5−10
【文献】
竹森 敬祐,磯原 隆将,窪田 歩,高野 智秋,Android携帯電話上での情報漏洩検知,2011年 暗号と情報セキュリティシンポジウム概要集[CD−ROM],2011年 1月25日,pp.1−7
【文献】
Iker Burguera, Urko Zurutuza, Simin Nadjm-Tehrani,Crowdroid: behavior-based malware detection system for Android,SPSM '11 Proceedings of the 1st ACM workshop on Security and privacy in smartphones and mobile devices,米国,ACM,2011年,pp. 15-25
【文献】
Takamasa Isohara, Keisuke Takemori, Ayumu Kubota,Kernel-based Behavior Analysis for Android Malware Detection,Computational Intelligence and Security (CIS), 2011 Seventh International Conference on,IEEE,2011年,pp. 1011-1015
(58)【調査した分野】(Int.Cl.,DB名)
端末に格納されている情報を取得する第1のAPI(Application Program Interface)のコードと、端末の外部に情報を送信する第2のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第1のAPIを実行したことを示す第1の情報をログに出力する第3のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第1のログ出力部と、
前記OSのプログラムに対して、アプリケーションが前記第2のAPIを実行することにより送信された第2の情報を前記ログに出力する第4のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第2のログ出力部と、
前記ログに前記第1の情報が記録されている場合に、前記第1のAPIを実行することにより取得される第3の情報と、前記ログに記録された前記第2の情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
前記第1のログ出力部は、端末に格納されている情報を引数で指定して取得する第1のAPI(Application Program Interface)のコードと、端末の外部に情報を送信する第2のAPIのコードとを含むOSのプログラムに対して、前記引数を示す第1の情報をログに出力する第3のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し
前記比較部は、前記ログに前記第1の情報が記録されている場合に、前記第1の情報が示す引数を指定して第1のAPIを実行することにより取得される第3の情報と、前記ログに記録された前記第2の情報とを比較する
ことを特徴とする請求項1に記載のアプリケーション解析装置。
アプリケーションの動作中の挙動が記録されたアプリケーションログから解析対象のアプリケーションの識別情報を抽出し、抽出した前記識別情報に基づいて前記ログから前記解析対象のアプリケーションに関する情報を抽出する抽出部をさらに備え、
前記第1のログ出力部は、端末に格納されている情報を取得する第1のAPI(Application Program Interface)のコードと、端末の外部に情報を送信する第2のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第1のAPIを実行したことを示す第1の情報とアプリケーションの識別情報とをログに出力する第3のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し
前記第2のログ出力部は、前記OSのプログラムに対して、アプリケーションが前記第2のAPIを実行することにより送信された第2の情報とアプリケーションの識別情報とを前記ログに出力する第4のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行し、
前記比較部は、前記抽出部によって抽出された情報に前記第1の情報が記録されている場合に、前記第1のAPIを実行することにより取得される第3の情報と、前記抽出部によって抽出された情報に含まれる前記第2の情報とを比較する
ことを特徴とする請求項1に記載のアプリケーション解析装置。
端末に格納されている情報を取得する第1のAPI(Application Program Interface)のコードと、端末の外部に情報を送信する第2のAPIのコードとを含むOSのプログラムに対して、アプリケーションが前記第1のAPIを実行したことを示す第1の情報をログに出力する第3のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第1のログ出力部と、
前記OSのプログラムに対して、アプリケーションが前記第2のAPIを実行することにより送信された第2の情報を前記ログに出力する第4のコードを追加することにより変更された前記OSのプログラムを前記アプリケーションの動作中に実行する第2のログ出力部と、
前記ログに前記第1の情報が記録されている場合に、前記第1のAPIを実行することにより取得される第3の情報と、前記ログに記録された前記第2の情報とを比較する比較部と、
としてコンピュータを機能させるためのプログラム。
【発明を実施するための形態】
【0024】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid(登録商標)という文字列を*andrd*という文字列で代用し、java(登録商標)という文字列を*jv*という文字列で代用している。すなわち、*andrd*という文字列はandroid(登録商標)という文字列と等価であり、*jv*という文字列はjava(登録商標)という文字列と等価である。
【0025】
(第1の実施形態)
まず、本発明の第1の実施形態を説明する。
図1は、本実施形態によるアプリケーション解析装置の構成を示している。本実施形態のアプリケーション解析装置は、OS にAndroid(登録商標)を実装したスマートフォン等の端末装置として構成されている。
図1に示すようにアプリケーション解析装置は、記憶部10、アプリケーション起動部11、アプリケーション12、ログ出力部13,14、抽出部15、解析部16を有する。
【0026】
記憶部10は、OSのプログラムや、解析対象のアプリケーションの実行ファイルを含むパッケージファイル(アプリケーションファイル)、アプリケーション解析装置が使用する各種データ等を記憶する。Android(登録商標)では、パッケージファイルの形式でアプリケーションが公開されている。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列(実行コード)を含む実行ファイル(例えば拡張子が.dex)、アプリケーションが利用するパーミッション(権限)が定義されたマニフェストファイル(例えば拡張子が.xml)、アプリケーションが利用する画像ファイル(例えば拡張子が.jpg)等を含む。
【0027】
アプリケーション起動部11は、記憶部10に格納されているパッケージファイルを実行することにより、アプリケーション12を起動する。アプリケーション12は、パッケージファイルに含まれる実行ファイルの実行コードに従って、アプリケーションの処理として規定された各種の処理を行う。アプリケーション12の挙動はアプリケーションログL1に記録される。アプリケーションログL1の内容は、例えばLogcatコマンドを実行することにより参照可能である。
【0028】
ログ出力部13は、アプリケーション12が、端末に格納されている個人情報を端末内から取得するAPI(以下、情報取得APIと記載)を実行した際に、OSの機能を利用して、その個人情報をアプリケーションログL1に出力する。ログ出力部14は、アプリケーション12が、端末の外部に情報を送信するAPI(以下、外部送信APIと記載)を実行した際に、OSの機能を利用して、送信された情報の内容をアプリケーションログL1に出力する。
【0029】
抽出部15は、解析対象のアプリケーション12を識別する情報に基づいて、アプリケーションログL1に記録された情報から、解析対象のアプリケーション12に関する情報を抽出する。解析部16は、抽出部15によって抽出された情報に基づいて、アプリケーション12の挙動を解析する。
【0030】
アプリケーションログL1には、アプリケーション12が情報取得APIを実行して取得した個人情報が記録されている。また、アプリケーションログL1には、アプリケーション12が外部送信APIを実行して外部に送信した情報が記録されている。アプリケーションログL1に含まれる個人情報と、アプリケーションログL1に含まれる、外部に送信された情報とが一致する場合、個人情報が外部に送信されている、すなわち情報漏洩が発生していることが分かる。したがって、アプリケーションログL1に含まれる個人情報と、アプリケーションログL1に含まれる、外部に送信された情報とを比較し、一致する情報があるか否かを判定することによって、情報漏洩を検知することができる。
【0031】
前述した非特許文献1に記載された手法では、情報漏洩の検知の対象となる全ての個人情報についてログの内容とシグネチャの比較を行う必要があり、実際には取得されていない個人情報についてもログの内容とシグネチャの比較を行うため、処理負荷が高い。これに対して、本実施形態では、実際に取得された個人情報がアプリケーションログL1に記録されているので、情報漏洩の検知の対象となる全ての個人情報のうちアプリケーションログL1に記録されている個人情報のみを用いて情報漏洩の検知を行うことにより、処理負荷を低減することができる。
【0032】
本実施形態のOSのプログラムでは、OSのアプリケーションフレームワークで提供されている既存のクラスを定義しているコードに対して、アプリケーション12が情報取得APIを実行して取得した個人情報をアプリケーションログL1に出力するコードと、アプリケーション12が外部送信APIを実行して外部に送信した情報をアプリケーションログL1に出力するコードとが追加されている。つまり、本実施形態のOSのプログラムは、ログ出力部13,14の動作を規定したコードを含む。
【0033】
OSのソースプログラムのうちアプリケーションフレームワークのコードに対して、ログ出力部13,14の動作を規定するコードが追加されることで、OSのソースプログラムが変更され、変更されたソースプログラムがアセンブル(コンパイル)されることで、変更されたOSの実行プログラム(実行ファイル)が生成される。このようにして生成されたOSの実行プログラムがアプリケーション解析装置にインストールされている。アプリケーション解析装置においてOSが起動することでログ出力部13,14が起動する。また、アプリケーション12の動作中に、上記の追加されたコードを実行することで、ログ出力部13は、アプリケーション12が情報取得APIを実行して取得した個人情報をアプリケーションログL1に出力し、ログ出力部14は、アプリケーション12が外部送信APIを実行して外部に送信した情報をアプリケーションログL1に出力する。
【0034】
アプリケーション起動部11、抽出部15、解析部16については、それらのコードをOSのプログラムに追加してもよいし、それらを含むアプリケーションを構成してもよい。
【0035】
本実施形態のOSのプログラム(ログ出力部13,14のコードを含む)と、アプリケーション起動部11、抽出部15、解析部16のプログラムとをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ(本実施形態のアプリケーション解析装置)に読み込ませ、実行させることにより、アプリケーション起動部11、ログ出力部13,14、抽出部15、解析部16は、各部に対して規定された処理を実行する。
【0036】
ここで、「コンピュータ」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0037】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0038】
本実施形態によるアプリケーション解析装置は、例えばスマートフォン用のアプリケーションを通信ネットワーク上で販売する販売サイトを管理する企業で使用される。したがって、ユーザが端末にインストールするアプリケーションを事前に審査することができる。また、本実施形態によるアプリケーション解析装置が行う解析のアルゴリズムをアンチウイルスソフトに適用することも可能である。
【0039】
次に、本実施形態によるアプリケーション解析装置の動作を説明する。
図2はアプリケーション解析装置の動作を示している。まず、アプリケーション起動部11は記憶部10から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション12を起動する(ステップS100)。起動したアプリケーション12は各種の処理を行う。また、アプリケーション12の挙動を示す情報がアプリケーションログL1に出力される。アプリケーション12が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【0040】
ログ出力部13は、アプリケーション12が情報取得APIを呼び出して実行した際に、情報取得APIによって取得された個人情報と、個人情報が取得されたことを示す情報(例えば、情報取得APIの名称)とを関連付けてアプリケーションログL1に出力する。また、ログ出力部14は、アプリケーション12が外部送信APIを呼び出して実行した際に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報(例えば、外部送信APIの名称)とを関連付けてアプリケーションログL1に出力する(ステップS105)。
【0041】
このとき、ログ出力部13,14は、LogクラスのAPI(dメソッド)を実行することにより情報をアプリケーションログL1に出力する。このAPIを実行すると、アプリケーション12を識別するPID(Process ID)もアプリケーションログL1に記録される。したがって、アプリケーションログL1には、情報取得APIによって取得された個人情報と、個人情報が取得されたことを示す情報と、アプリケーション12のPIDとを関連付けた情報が記録されていると共に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報と、アプリケーション12のPIDとを関連付けた情報が記録されている。
【0042】
続いて、抽出部15は、アプリケーション12を識別する情報に基づいて、アプリケーションログL1に記録された情報から、解析対象のアプリケーション12に関する情報を抽出する(ステップS110)。アプリケーション12が起動すると、
図3に示す情報がアプリケーションログL1に出力される。アプリケーションログL1には、起動したアプリケーション12を識別するPID300が記録されている。抽出部15は、解析対象のアプリケーション12を起動したときにアプリケーションログL1に記録されたPIDと同じPIDに関連付けられている情報をアプリケーションログL1から検索し、抽出する。
【0043】
続いて、解析部16は、抽出部15によってアプリケーションログL1から抽出された情報に含まれる、情報取得APIによって取得された個人情報と、外部送信APIによって外部に送信された情報とを比較し、両者の一致・不一致を検出する(ステップS115)。アプリケーションログL1において、個人情報が取得されたことを示す情報と関連付けられている情報が、情報取得APIによって取得された個人情報である。また、アプリケーションログL1において、外部に情報が送信されたことを示す情報と関連付けられている情報が、外部送信APIによって外部に送信された情報である。解析部16は、個人情報が取得されたことを示す情報、外部に情報が送信されたことを示す情報をそれぞれ検索のキーとしてアプリケーションログL1から情報を抽出し、比較を行う。
【0044】
続いて、解析部16は、ステップS115で比較を行った結果に基づいて、情報漏洩が発生したか否かを判定する(ステップS120)。情報取得APIによって取得された個人情報が、外部送信APIによって外部に送信された情報のいずれかと一致した場合、情報漏洩が発生しているので、解析部16は、アプリケーション12が不正であることを示す情報を出力する(ステップS125)。また、情報取得APIによって取得された全ての個人情報が、外部送信APIによって外部に送信された情報と一致しなかった場合、情報漏洩が発生していないので、解析部16は、アプリケーション12が正常であることを示す情報を出力する(ステップS130)。ステップS125,S130における情報の出力は、記憶部10等の記憶装置に対する情報の保存でもよいし、表示部を使用した情報の表示でもよいし、他の装置に対する情報の送信でもよい。
【0045】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部13の動作を規定するコードを追加する具体的な例を説明する。アプリケーション12によって情報取得APIが呼び出された場合に取得された個人情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。
【0046】
図4は情報取得APIの一例を示している。本実施形態の情報取得APIは、TelephonyManagerクラスとAccountManagerクラスのAPIである。なお、
図4に示すAPIは一例であり、これに限らない。APIはメソッドであるが、本実施形態で注目するメソッドを他のメソッドと区別するため、
図4に示すメソッドをAPIと記載している。
【0047】
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である。
【0048】
個人情報は端末内の所定の場所に格納されている。例えば、IMEIは、スマートフォン等の携帯端末が標準で備えている汎用のフラッシュメモリに記録されており、IMSIは、スマートフォン等の携帯端末の使用に必要な汎用のUIM(User Identity Module Card)カードに記録されている。
【0049】
図5はgetDeviceIdのコードを変更した例を示している。アプリケーションに値を返答するコード500の前に、IMEIが取得されたことを示す文字列とIMEIとをアプリケーションログL1に出力するコード510が追加されている。したがって、アプリケーションがIMEIを取得すると、取得されたIMEIがアプリケーションログL1に記録される。
【0050】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部14の動作を規定するコードを追加する具体的な例を説明する。アプリケーション12によって外部送信APIが呼び出された場合に送信された情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。本実施形態の外部送信APIはSmsManagerクラスのAPIである。SmsManagerクラスのAPIは、例えばSMSによりメッセージを送信するsendTextMessageである。
【0051】
図6はsendTextMessageのコードを変更した例を示している。sendTextMessageの第1引数には送信先のアドレスが指定され、第2引数には送信メッセージが指定される。このことから、送信を行うコード600の前に、外部への情報の送信が行われたことを示す文字列と、第1引数と、第2引数とをアプリケーションログL1に出力するコード610が追加されている。したがって、アプリケーションが情報を送信すると、送信先のアドレスと送信メッセージがアプリケーションログL1に記録される。
【0052】
次に、OSの他のコードに対して、ログ出力部14の動作を規定するコードを追加する具体的な例を説明する。OSのプログラムは、特定の機能を実現するライブラリ(モジュール)の集合である。上記の例ではアプリケーションフレームワークのライブラリ(上記の例ではSmsManagerクラス)のコードを変更した例を示したが、以下ではアプリケーションフレームワークのライブラリとは異なるライブラリのコードを変更する例を示す。
【0053】
暗号通信の一種であるSSL(Secure Socket Layer)通信を行うAPIはJava(登録商標)のライブラリ(以下、Jvライブラリと記載)で実装されている。
図7は、Android(登録商標)のソースプログラムのファイル構造であるソースツリーを示している。アプリケーションフレームワークのライブラリは、「frameworks」というフォルダに格納されている。Jvライブラリは、「libcore」というフォルダに格納されている。
【0054】
Jvライブラリのコードに対して、送信された情報をアプリケーションログL1に出力するコードを追加することで、アプリケーション12がSSL通信を行ったときに送信された情報をアプリケーションログL1に記録することが可能となる。しかし、本実施形態でログに情報を出力するAPIはアプリケーションフレームワークのライブラリに含まれており、JvライブラリはアプリケーションフレームワークのライブラリのAPIを直接呼び出すことができないという技術的課題がある。
【0055】
Android(登録商標)をビルドする際、最初にJvライブラリのコンパイルが実行され、アプリケーションフレームワークのライブラリのコンパイルはその次に実行される。このことから、JvライブラリがアプリケーションフレームワークのライブラリのAPIを直接呼び出すように設計されたOSをビルドすると、Jvライブラリのコンパイルの際にアプリケーションフレームワークのクラスがロードできないため、コンパイルが失敗する。そこで、一般的にリフレクションと呼ばれている手法を利用することで、JvライブラリがアプリケーションフレームワークのライブラリのAPIを呼び出すことが可能となる。
【0056】
アプリケーションがリフレクションを用いてJvライブラリからアプリケーションフレームワークのライブラリのAPIを呼び出すようにOSを設計すると、コンパイル時にアプリケーションフレームワークのクラスをロードする必要がなくなるため、コンパイルエラーが発生しない。そして、プログラムの実行時には、アプリケーションフレームワークのクラスがロードされているため、エラーが発生せずに、JvライブラリからアプリケーションフレームワークのAPIを実行することができる。Java(登録商標)では、リフレクションを実行するために*jv*.lang.reflect.Methodクラスが用意されており、プログラムの実行時に任意のクラスのオブジェクトの作成とメソッドの呼び出しが可能である。
【0057】
以下、リフレクションを利用したコードの例を説明する。情報を送信するAPIがソケットに書き込む情報の内容をアプリケーションログL1に出力するようにJvライブラリのコードが変更される。https のSSL通信においてソケットに情報を書き込むAPIは、org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのwriteである。このAPIの第1引数には、ソケットに書き込む情報が指定される。この情報をアプリケーションログL1に出力するため、リフレクションを用いて、アプリケーションフレームワークのLogクラスのAPI(dメソッド)を呼び出すようにJvライブラリのコードが変更される。
【0058】
図8はJvライブラリのコードを変更した例を示している。org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのコードに対して、リフレクションを利用してアプリケーションフレームワークのLogクラスのAPI(dメソッド)を呼び出すAPIであるlogdを定義するコード800が追加されている。また、ソケットに情報を書き込むAPI であるwriteのコードに対して、第1引数に指定された情報、すなわちソケットに書き込む情報を、logdの実行によってアプリケーションログL1に出力するコード810が追加されている。
【0059】
外部に送信される情報は、送信されるパケットに記録されているが、SSLによる暗号化通信では送信される情報が暗号化されているため、外部に送信される情報をパケットから取得することができない。SSLによる暗号化通信では、ソケットに書き込まれた情報に対して暗号化が行われる。
図8に示すコードでは、ソケットに書き込まれる情報の内容をアプリケーションログL1に出力するので、暗号化が行われる前の情報を得ることができる。
【0060】
上記の例では、httpにSSLを実装したhttpsで送信される情報をログに出力する手法を説明した。httpで送信される情報をログに出力する手法も同様であり、上記のようにorg.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplクラスのwriteのコードを変更する代わりに、org.apache.harmony.luni.net.SocketOutputStreamクラスのwriteのコードを変更すればよい。
【0061】
上述したように、本実施形態によれば、アプリケーションが情報取得APIを実行することにより取得された個人情報と、アプリケーションが外部送信APIを実行することにより送信された情報とがアプリケーションログL1に出力されるので、これらの情報を比較することで、アプリケーション12による情報漏洩を検知することができる。さらに、アプリケーション12によって実際に取得された個人情報についてのみ、情報の比較を行うことが可能となるので、処理負荷を低減することができる。
【0062】
また、Jvライブラリのコードに対して、送信された情報をアプリケーションログL1に出力するコードを追加する場合には、リフレクションを利用することによって、JvライブラリからアプリケーションフレームワークのAPIを実行して情報をログに出力することができる。
【0063】
また、情報取得APIのコードに対して、個人情報をアプリケーションログL1に出力するコードを追加することによって、アプリケーション12によって取得された個人情報をアプリケーションログL1に確実に記録することができる。さらに、外部送信APIのコードに対して、外部に送信された情報をアプリケーションログL1に出力するコードを追加することによって、アプリケーション12によって外部に送信された情報をアプリケーションログL1に確実に記録することができる。
【0064】
前述した非特許文献1に記載された手法では、情報漏洩の検知の対象となる全ての個人情報についてログの内容とシグネチャの比較を行うために、端末毎に異なる個人情報からシグネチャを生成する必要があり、端末毎のシグネチャの設定作業が煩雑となる。これに対して、本実施形態では、アプリケーション12によって実際に取得された個人情報をアプリケーションログL1に出力することによって、シグネチャの設定作業を不要とすることができる。
【0065】
(第2の実施形態)
次に、本発明の第2の実施形態を説明する。本実施形態によるアプリケーション解析装置の構成は、第1の実施形態によるアプリケーション解析装置の構成(
図1)と同様であるので、構成の説明を省略する。
【0066】
以下、本実施形態によるアプリケーション解析装置の動作を説明する。
図9はアプリケーション解析装置の動作を示している。まず、アプリケーション起動部11は記憶部10から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション12を起動する(ステップS200)。起動したアプリケーション12は各種の処理を行う。また、アプリケーション12の挙動を示す情報がアプリケーションログL1に出力される。アプリケーション12が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【0067】
ログ出力部13は、アプリケーション12が情報取得APIを呼び出して実行した際に、個人情報が取得されたことを示す情報(本実施形態では情報取得APIで指定される引数)をアプリケーションログL1に出力する。また、ログ出力部14は、アプリケーション12が外部送信APIを呼び出して実行した際に、外部送信APIによって外部に送信された情報と、外部に情報が送信されたことを示す情報(例えば、外部送信APIの名称)とを関連付けてアプリケーションログL1に出力する(ステップS205)。第1の実施形態では、取得された個人情報がアプリケーションログL1に記録されるが、第2の実施形態では、取得された個人情報はアプリケーションログL1に記録されない。
【0068】
このとき、ログ出力部13,14は、LogクラスのAPI(dメソッド)を実行することにより情報をアプリケーションログL1に出力する。このAPIを実行すると、第1の実施形態と同様に、アプリケーション12を識別するPID(Process ID)もアプリケーションログL1に記録される。
【0069】
続いて、抽出部15は、アプリケーション12を識別する情報に基づいて、アプリケーションログL1に記録された情報から、解析対象のアプリケーション12に関する情報を抽出する(ステップS210)。このとき、第1の実施形態と同様に、抽出部15は、解析対象のアプリケーション12を起動したときにアプリケーションログL1に記録されたPIDと同じPIDに関連付けられている情報をアプリケーションログL1から検索し、抽出する。
【0070】
続いて、解析部16は、抽出部15によってアプリケーションログL1から抽出された情報に含まれる、個人情報が取得されたことを示す情報に基づいて情報取得APIを実行することにより個人情報を取得する(ステップS215)。このとき、個人情報が取得されたことを示す情報として、情報取得APIで指定される引数がアプリケーションログL1に記録されているので、解析部16は、この引数を指定して情報取得APIを実行する。これにより、解析部16は、アプリケーション12が取得した個人情報と同じ個人情報を取得する。
【0071】
続いて、解析部16は、ステップS215で取得した個人情報と、抽出部15によってアプリケーションログL1から抽出された情報に含まれる、外部送信APIによって外部に送信された情報とを比較し、両者の一致・不一致を検出する(ステップS220)。アプリケーションログL1において、外部に情報が送信されたことを示す情報と関連付けられている情報が、外部送信APIによって外部に送信された情報である。解析部16は、外部に情報が送信されたことを示す情報を検索のキーとしてアプリケーションログL1から情報を抽出し、抽出した情報を、ステップS215で取得した個人情報と比較する。
【0072】
ステップS225〜S235に示す処理は
図2のステップS120〜S130に示す処理と同様であるので、説明を省略する。
【0073】
次に、OSのアプリケーションフレームワークのコードに対して、ログ出力部13の動作を規定するコードを追加する具体的な例を説明する。アプリケーション12によって情報取得APIが呼び出された場合に個人情報が取得されたことを示す情報をログに出力するコードがアプリケーションフレームワークのコードに追加される。
【0074】
本実施形態では、ContentProviderと呼ばれるデータベースで管理されている個人情報を取得するAPIのコードを変更する例を説明する。電話帳、通話履歴、カレンダー等の個人情報はContentProviderで管理されている。本実施形態のContentProviderは記憶部10に格納されている。ContentResolverクラスのAPIであるcursorを呼び出すことにより、アプリケーションはContentProviderから個人情報を取得することができる。アプリケーションはcursorを呼び出す際、URIと呼ばれる、取得する情報を識別する情報を引数に指定する。URIには、電話帳を取得するためのcom.*andrd*.contactcontacts や、通話履歴を取得するためのcall_log、カレンダーを取得するためのcom.*andrd*.calendar等がある。
【0075】
図10はcursorのコードを変更した例を示している。cursorの引数として指定された情報(com.*andrd*.contactcontacts等の文字列)をアプリケーションログL1に出力するコード1000が追加されている。ステップS215で解析部16は、アプリケーションログL1に記録されている引数の文字列が例えばcom.*andrd*.contactcontactだった場合には、その文字列が示す引数を指定してcursorを実行し、電話帳を取得する。
【0076】
上述したように、本実施形態によれば、アプリケーション12が情報取得APIを実行することにより個人情報が取得されたことを示す情報(情報取得APIを実行したことを示す情報)と、アプリケーション12が外部送信APIを実行することにより送信された情報とがアプリケーションログL1に出力される。アプリケーションログL1に、情報取得APIを実行することにより個人情報が取得されたことを示す情報が記録されている場合に、その情報取得APIを実行することにより取得した個人情報と、アプリケーションログL1に記録された、外部送信APIによって送信された情報とを比較することで、アプリケーション12による情報漏洩を検知することができる。さらに、アプリケーション12によって実際に取得された個人情報についてのみ、情報の比較を行うことが可能となるので、処理負荷を低減することができる。
【0077】
また、情報取得APIのコードに対して、個人情報が取得されたことを示す情報をアプリケーションログL1に出力するコードを追加することによって、アプリケーション12によって個人情報が取得されたことをアプリケーションログL1に確実に記録することができる。さらに、外部送信APIのコードに対して、外部に送信された情報をアプリケーションログL1に出力するコードを追加することによって、アプリケーション12によって外部に送信された情報をアプリケーションログL1に確実に記録することができる。
【0078】
また、アプリケーション12によって実際に取得された個人情報に関する情報をアプリケーションログL1に出力し、その情報に基づいて個人情報を取得することによって、非特許文献1に記載された手法で必要なシグネチャの設定作業を不要とすることができる。
【0079】
本実施形態では、解析部16が、情報取得APIであるcursorを実行することにより、アプリケーション12が取得した個人情報と同じ個人情報を取得しているが、ContentProviderとは異なるデータベースを用意してそのデータベースに予め個人情報を登録しておき、解析部16がそのデータベースから個人情報を取得してもよい。
【0080】
また、本実施形態では情報取得APIとしてcursorを用いているが、第1の実施形態で用いた情報取得APIを用いて第2の実施形態と同様の手法によりアプリケーション12の解析を行ってもよい。さらに、cursorのコードに対して、cursorの呼び出し時に指定される引数毎に個人情報を取得してアプリケーションログL1に出力するコードを追加し、第1の実施形態と同様の手法によりアプリケーション12の解析を行ってもよい。
【0081】
(変形例)
次に、上述した実施形態の変形例を説明する。アプリケーション解析装置の機能を複数の装置に分散させたアプリケーション解析システムを構成してもよい。
図11はアプリケーション解析システムの構成例を示している。
【0082】
図11に示すアプリケーション解析システムはログ出力装置1(第1の装置)と解析装置2(第2の装置)を有する。ログ出力装置1は、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成され、解析装置2はPC等の装置として構成されている。
【0083】
ログ出力装置1は、記憶部10、アプリケーション起動部11、アプリケーション12、ログ出力部13,14、送信部20を有する。解析装置2は、抽出部15、解析部16、受信部21を有する。
図11に示す構成のうち
図1に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、その構成の説明を省略する。
【0084】
送信部20は、アプリケーションログL1を解析装置2へ送信する。受信部21は、アプリケーションログL1をログ出力装置1から受信し、抽出部15へ出力する。
図11に示すアプリケーション解析システムは第1の実施形態と第2の実施形態のどちらに対しても適用が可能である。
【0085】
ログ出力装置1を複数の装置に分割してもよい。例えば、アプリケーション起動部11、アプリケーション12、ログ出力部13、送信部20を有する装置と、アプリケーション起動部11、アプリケーション12、ログ出力部14、送信部20を有する装置とでログ出力装置1を構成してもよい。
【0086】
また、解析装置2を複数の装置に分割してもよい。例えば、受信部21、抽出部15、抽出部15によって抽出された情報を送信する送信部を有する装置と、抽出部15によって抽出された情報を受信する受信部、解析部16を有する装置とで解析装置2を構成してもよい。
【0087】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。