(57)【特許請求の範囲】
【請求項１】
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項２】
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する、OSのアプリケーションフレームワークで提供されているAPI（Application Program Interface）の第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項３】
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項４】
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する、OSのカーネルで提供されている関数の第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項５】
前記第２のコードは前記第１のコードの中に追加されていることを特徴とする請求項２〜請求項４のいずれか一項に記載のアプリケーション解析装置。
【請求項６】
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定し、ファイルの読み出しまたはファイルの書き込みを行う、OSのカーネルで提供されている第１の関数の第１のコードと、前記第１の関数が呼び出される前に呼び出される、前記カーネルで提供されている第２の関数の第２のコードとを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第３のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項７】
前記第３のコードは前記第２のコードの中に追加されていることを特徴とする請求項６に記載のアプリケーション解析装置。
【請求項８】
前記第３のコードは、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されている場合に、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力するコードであることを特徴とする請求項７に記載のアプリケーション解析装置。
【請求項９】
前記第３のコードは、前記第２の関数が呼び出されたときに指定された引数がファイルの書き込みを示している場合に、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力するコードであることを特徴とする請求項７に記載のアプリケーション解析装置。
【請求項１０】
第１の装置と、第２の装置とを備え、
前記第１の装置は、
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルおよび前記ログを前記第２の装置へ送信する送信部と、
を有し、
前記第２の装置は、
前記アプリケーションファイルおよび前記ログを前記第１の装置から受信する受信部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
を有することを特徴とするアプリケーション解析システム。
【請求項１１】
第１の装置と、第２の装置とを備え、
前記第１の装置は、
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報および前記ログを前記第２の装置へ送信する送信部と、
を有し、
前記第２の装置は、
前記第１のパーミッション情報および前記ログを前記第１の装置から受信する受信部と、
前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
を有することを特徴とするアプリケーション解析システム。
【請求項１２】
第１の装置と、第２の装置と、第３の装置とを備え、
前記第１の装置は、
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルを前記第２の装置へ送信し、前記ログを前記第３の装置へ送信する第１の送信部と、
を有し、
前記第２の装置は、
前記アプリケーションファイルを前記第１の装置から受信する第１の受信部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報を前記第３の装置へ送信する第２の送信部と、
を有し、
前記第３の装置は、
前記ログを前記第１の装置から受信し、前記第１のパーミッション情報を前記第２の装置から受信する第２の受信部と、
前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析システム。
【請求項１３】
第１の装置と、第２の装置と、第３の装置とを備え、
前記第１の装置は、
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する第１の記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記ログを前記第３の装置へ送信する第１の送信部と、
を有し、
前記第２の装置は、
前記アプリケーションファイルを記憶する第２の記憶部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報を前記第３の装置へ送信する第２の送信部と、
を有し、
前記第３の装置は、
前記ログを前記第１の装置から受信し、前記第１のパーミッション情報を前記第２の装置から受信する受信部と、
前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析システム。
【請求項１４】
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの機能を解析するアプリケーション解析装置およびアプリケーション解析システムに関する。また、本発明は、本アプリケーション解析装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
汎用OS（オペレーティングシステム）を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI （Application Program Interface）が豊富に用意されているAndroid（登録商標）が注目を集めている。本明細書では一例として、Android（登録商標） OSを搭載したスマートフォン等の端末について記載する。
【０００３】
Android（登録商標）では、アプリケーションが利用する機能群や情報群はパーミッションとして定義されている。パーミッションは、アプリケーションを実行可能な端末内の機能・情報の利用や設定の変更に係る権限である。アプリケーションのインストール時に、アプリケーションが使用するパーミッションがユーザに通知（宣言）され、ユーザによってインストールの可否が判断される。アプリケーションがインストールされた後、アプリケーションは、インストール時にユーザに通知したパーミッションにより許可されている範囲内で動作する。このような、パーミッションに基づいてアプリケーションの動作に制限を与える機構により、アプリケーションの不正な動作が防止される。なお、実際の動作時には使用しないパーミッションをインストール時に宣言することも可能である。
【０００４】
Google（登録商標） Playと呼ばれるWebサイトでは多数のアプリケーションが販売されている。このWebサイトの機能の１つに自動アップデート機能がある。自動アップデート機能とは、アプリケーションの開発者が、公開している自身のアプリケーションを更新した際に、そのアプリケーションをインストールしているユーザの端末において、アプリケーションが自動で更新される機能である。ただし、開発者がアプリケーションを更新した際に、アプリケーションが利用するパーミッションが増えていれば、上記の自動アップデート機能による更新時に、ユーザによる確認を行うための処理が行われ、ユーザが承諾しない限り、ユーザの端末にインストールされているアプリケーションが更新されることはない。
【０００５】
上記の自動アップデート機能の仕組みを悪用して攻撃を行う手法がある。この手法では、以下のようにして攻撃が行われる。アプリケーションが初めて公開される際に、過剰にパーミッションが付与されたアプリケーションが公開される。ユーザの端末にアプリケーションがインストールされた後、アプリケーションは不正な動作を行わず、ユーザの信頼を得る。そして、アプリケーションを更新する際に開発者が、当初に過剰に付与されたパーミッションを利用する処理に関する不正なコードを埋め込む更新を行う。自動アップデート機能による更新時には、アプリケーションが利用するパーミッションは増えていないので、ユーザによる確認は行われず、ユーザの端末にインストールされているアプリケーションが更新される。その後、不正なコードが埋め込まれたアプリケーションが、最初のインストール時に宣言したパーミッションを使用してユーザの端末上で不正な動作を行う。
【０００６】
上記の手法による攻撃を抑制するためには、アプリケーションに過剰にパーミッションが付与されているか否かを確認することが有効である。非特許文献１には、アプリケーションを逆アセンブル（逆コンパイル）して得たソースコードに基づいて、アプリケーションに対して過剰にパーミッションが付与されているか否かを確認する手法が提案されている。この手法では、アプリケーションが呼び出すAPIと、そのAPIの実行に必要となるパーミッションとを対応付けた表を予め用意しておき、アプリケーションのソースコードを解析して検出したAPIに対応付けられているパーミッションを表から検索することが行われている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Adrienne Porter Felt, Erika Chin, Steve Hanna, Dawn Song, David Wagner,”Android Permissions Demystified,” 18th ACM Conference on Computer and Communications Security, Oct. 2011.USA
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、逆アセンブルに耐性があるネイティブライブラリを含むアプリケーションの解析を行う場合、ネイティブライブラリをアセンブルできないため、アプリケーションが呼び出すAPIを完全には抽出することができない。つまり、アプリケーションに付与されているパーミッションを完全には確認することができない。
【０００９】
本発明は、上述した課題に鑑みてなされたものであって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができるアプリケーション解析装置、アプリケーション解析システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上記の課題を解決するためになされたもので、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析装置である。
【００１１】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する、OSのアプリケーションフレームワークで提供されているAPI（Application Program Interface）の第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【００１２】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【００１３】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する、OSのカーネルで提供されている関数の第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【００１４】
また、本発明のアプリケーション解析装置において、前記第２のコードは前記第１のコードの中に追加されていることを特徴とする。
【００１５】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定し、ファイルの読み出しまたはファイルの書き込みを行う、OSのカーネルで提供されている第１の関数の第１のコードと、前記第１の関数が呼び出される前に呼び出される、前記カーネルで提供されている第２の関数の第２のコードとを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第３のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【００１６】
また、本発明のアプリケーション解析装置において、前記第３のコードは前記第２のコードの中に追加されていることを特徴とする。
【００１７】
また、本発明のアプリケーション解析装置において、前記第３のコードは、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されている場合に、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力するコードであることを特徴とする。
【００１８】
また、本発明のアプリケーション解析装置において、前記第３のコードは、前記第２の関数が呼び出されたときに指定された引数がファイルの書き込みを示している場合に、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力するコードであることを特徴とする。
【００１９】
また、本発明は、第１の装置と、第２の装置とを備え、前記第１の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルおよび前記ログを前記第２の装置へ送信する送信部と、を有し、前記第２の装置は、前記アプリケーションファイルおよび前記ログを前記第１の装置から受信する受信部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、を有することを特徴とするアプリケーション解析システムである。
【００２０】
また、本発明は、第１の装置と、第２の装置とを備え、前記第１の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報および前記ログを前記第２の装置へ送信する送信部と、を有し、前記第２の装置は、前記第１のパーミッション情報および前記ログを前記第１の装置から受信する受信部と、前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、を有することを特徴とするアプリケーション解析システムである。
【００２１】
また、本発明は、第１の装置と、第２の装置と、第３の装置とを備え、前記第１の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルを前記第２の装置へ送信し、前記ログを前記第３の装置へ送信する第１の送信部と、を有し、前記第２の装置は、前記アプリケーションファイルを前記第１の装置から受信する第１の受信部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報を前記第３の装置へ送信する第２の送信部と、を有し、前記第３の装置は、前記ログを前記第１の装置から受信し、前記第１のパーミッション情報を前記第２の装置から受信する第２の受信部と、前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析システムである。
【００２２】
また、本発明は、第１の装置と、第２の装置と、第３の装置とを備え、前記第１の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する第１の記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記ログを前記第３の装置へ送信する第１の送信部と、を有し、前記第２の装置は、前記アプリケーションファイルを記憶する第２の記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報を前記第３の装置へ送信する第２の送信部と、を有し、前記第３の装置は、前記ログを前記第１の装置から受信し、前記第１のパーミッション情報を前記第２の装置から受信する受信部と、前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析システムである。
【００２３】
また、本発明は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第１のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第１のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第２のパーミッション情報をログに出力する第２のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第１のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第１のパーミッション情報と、前記ログに出力された前記第２のパーミッション情報とを比較する比較部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【００２４】
本発明によれば、アプリケーションファイルに含まれるマニフェストファイルから抽出された第１のパーミッション情報と、アプリケーションがパーミッションを必要とする処理を行う際にログに出力された第２のパーミッション情報とを比較することによって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図２】本発明の一実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。
【図３】本発明の一実施形態におけるアプリケーションフレームワークのクラスのコードを示す参考図である。
【図４】本発明の一実施形態におけるカーネルのコードを示す参考図である。
【図５】本発明の一実施形態におけるカーネルのコードを示す参考図である。
【図６】本発明の一実施形態におけるマニフェストファイルの内容を示す参考図である。
【図７】本発明の一実施形態におけるアプリケーションログの内容を示す参考図である。
【図８】本発明の一実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【図９】本発明の一実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【図１０】本発明の一実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【図１１】本発明の一実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【発明を実施するための形態】
【００２６】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid（登録商標）という文字列を*andrd*という文字列で代用し、Android（登録商標）という文字列を*Andrd*という文字列で代用し、java（登録商標）という文字列を*jv*という文字列で代用し、linux（登録商標）という文字列を*ln*という文字列で代用している。すなわち、*andrd*という文字列はandroid（登録商標）という文字列と等価であり、*Andrd*という文字列はAndroid（登録商標）という文字列と等価であり、*jv*という文字列はjava（登録商標）という文字列と等価であり、*ln*という文字列はlinux（登録商標）という文字列と等価である。
【００２７】
図１は、本発明の一実施形態によるアプリケーション解析装置の構成を示している。本実施形態のアプリケーション解析装置は、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成されている。図１に示すようにアプリケーション解析装置は、記憶部１０、アプリケーション起動部１１、アプリケーション１２、パーミッション情報抽出部１３、ログ出力部１４、パーミッション解析部１５を有する。
【００２８】
記憶部１０は、OSのプログラムや、解析対象のアプリケーションの実行ファイルを含むパッケージファイル（アプリケーションファイル）、アプリケーション解析装置が使用する各種データ等を記憶する。Android（登録商標）では、パッケージファイルの形式でアプリケーションが公開されている。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列（実行コード）を含む実行ファイル（例えば拡張子が.dex）、アプリケーションが利用するパーミッション（権限）が定義されたマニフェストファイル（例えば拡張子が.xml）、アプリケーションが利用する画像ファイル（例えば拡張子が.jpg）等を含む。
【００２９】
アプリケーション起動部１１は、記憶部１０に格納されているパッケージファイルを実行することにより、アプリケーション１２を起動する。アプリケーション１２は、パッケージファイルに含まれる実行ファイルの実行コードに従って、アプリケーションの処理として規定された各種の処理を行う。パーミッション情報抽出部１３は、パッケージファイルに含まれるマニフェストファイルから、解析対象のアプリケーションに付与されたパーミッションの情報（第１のパーミッション情報）を抽出する。
【００３０】
ログ出力部１４は、アプリケーション１２がパーミッションを必要とする処理を実行する際に、OSの機能を利用して、アプリケーション１２にそのパーミッションが付与されていることを示す情報（第２のパーミッション情報）をログに出力する。パーミッション解析部１５は、パーミッション情報抽出部１３がマニフェストファイルから抽出した情報と、ログに出力された情報とを比較し、アプリケーション１２に過剰にパーミッションが付与されているか否かを判定する。
【００３１】
パーミッション情報抽出部１３がマニフェストファイルから抽出した情報は、アプリケーションに付与されているパーミッションを示している。アプリケーションに付与されているパーミッションは、アプリケーションの動作時に実際に使用されるパーミッションを含むほか、現状のアプリケーションでは使用されないパーミッション（アプリケーションの更新後に使用される可能性があるパーミッション）を含みうる。
【００３２】
一方、ログに出力された情報は、アプリケーションの動作中に実際に使用されたパーミッションを示している。したがって、パーミッション情報抽出部１３が抽出した情報と、ログに出力された情報とを比較して一致したパーミッションは、アプリケーションの動作時に実際に使用されるパーミッションであり、一致しなかったパーミッションは、現状のアプリケーションでは使用されず、過剰に付与されたパーミッションである。したがって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【００３３】
本実施形態のOSのプログラムでは、OSのアプリケーションフレームワークで提供されている既存のクラスを定義しているコード、あるいはOSのカーネルのコードに対して、アプリケーション１２に付与されているパーミッションに関する情報をログに出力するコードが追加されている。つまり、本実施形態のOSのプログラムは、ログ出力部１４の動作を規定したコードを含む。
【００３４】
OSのソースプログラムのうちアプリケーションフレームワークのコードとカーネルのコードとの少なくとも一方に対して、ログ出力部１４の動作を規定するコードが追加されることで、OSのソースプログラムが修正され、修正されたソースプログラムがアセンブル（コンパイル）されることで、修正されたOSの実行プログラム（実行ファイル）が生成される。このようにして生成されたOSの実行プログラムがアプリケーション解析装置にインストールされている。アプリケーション解析装置においてOSが起動することでログ出力部１４が起動し、アプリケーション１２の動作中に、上記の追加されたコードを実行することで、ログ出力部１４は、アプリケーション１２に付与されているパーミッションに関する情報をログに出力する。
【００３５】
アプリケーション起動部１１、パーミッション情報抽出部１３、パーミッション解析部１５については、それらのコードをOSのプログラムに追加してもよいし、それらを含むアプリケーションを構成してもよい。
【００３６】
本実施形態のOSのプログラム（ログ出力部１４のコードを含む）と、アプリケーション起動部１１、パーミッション情報抽出部１３、パーミッション解析部１５のプログラムとをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ（本実施形態のアプリケーション解析装置）に読み込ませ、実行させることにより、アプリケーション起動部１１、パーミッション情報抽出部１３、ログ出力部１４、パーミッション解析部１５は、各部に対して規定された処理を実行する。
【００３７】
ここで、「コンピュータ」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００３８】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００３９】
次に、本実施形態によるアプリケーション解析装置の動作を説明する。図２はアプリケーション解析装置の動作を示している。まず、パーミッション情報抽出部１３は、記憶部１０から解析対象のアプリケーションのパッケージファイルを読み出し、パッケージファイルに含まれるマニフェストファイルから、解析対象のアプリケーションに付与されたパーミッションの情報を抽出する（ステップＳ１００）。
【００４０】
続いて、アプリケーション起動部１１は記憶部１０から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション１２を起動する（ステップＳ１０５）。起動したアプリケーション１２は各種の処理を行う。アプリケーション１２が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【００４１】
ログ出力部１４は、アプリケーション１２がパーミッションを必要とする処理を実行する際に、アプリケーション１２にそのパーミッションが付与されていることを示す情報をログに出力する（ステップＳ１１０）。続いて、パーミッション解析部１５は、パーミッション情報抽出部１３がマニフェストファイルから抽出した情報と、ログに出力された情報とを比較し、両者の一致・不一致を検出する（ステップＳ１１５）。続いて、パーミッション解析部１５は、ステップＳ１１５で比較を行った結果に基づいて、アプリケーション１２に過剰にパーミッションが付与されているか否かを判定する（ステップＳ１２０）。
【００４２】
アプリケーション１２に過剰にパーミッションが付与されている場合、パーミッション解析部１５は、そのことを示す情報を出力する（ステップＳ１２５）。また、アプリケーション１２に適切にパーミッションが付与されている場合、パーミッション解析部１５は、そのことを示す情報を出力する（ステップＳ１３０）。ステップＳ１２５，Ｓ１３０における情報の出力は、記憶部１０等の記憶装置に対する情報の保存でもよいし、表示部を使用した情報の表示でもよいし、他の装置に対する情報の送信でもよい。
【００４３】
過剰にパーミッションが付与されているアプリケーションは、自動アップデート機能を利用して悪性アプリケーションに変化する可能性がある。このようなアプリケーションをWebサイトから排除する等の対策を行うことによって、自動アップデート機能の仕組みを利用した攻撃の発生を防止することができる。
【００４４】
次に、OSのアプリケーションフレームワークのコード、OSのカーネルのコードに対して、ログ出力部１４の動作を規定するコードを追加する具体的な例を説明する。
【００４５】
（１）OSのアプリケーションフレームワークのコードに対してコードを追加する例
アプリケーションフレームワークで提供されているクラスのうちPackageManagerServiceクラスが定義するAPIのコードに対してコードを追加する例を説明する。PackageManagerServiceクラスは、アプリケーションのインストールおよびアンインストールの管理を行ったり、アプリケーションに適切なパーミッションが付与されているか否かの判定を行ったりするAPI（メソッド）を定義しているクラスである。PackageManagerServiceクラスのAPIのうち、CheckUidPermissionが、アプリケーションに適切なパーミッションが付与されているか否かを判定するAPIである。本実施形態では、一例として、CheckUidPermissionのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。
【００４６】
図３はPackageManagerServiceクラスのコードを示している。PackageManagerServiceクラス全体のコードのうち、CheckUidPermissionのコード３００に対してコード３１０，３２０が追加されている。アプリケーションは、CheckUidPermission を呼び出す際、２つの引数（第１引数、第２引数）を指定する。第１引数では要求されるパーミッションの名称（パーミッション名）が指定され、第２引数では呼び出し元のアプリケーションの識別子であるユーザID（uid）が指定される。コード３１０，３２０は、CheckUidPermission を呼び出す際に指定された第１引数と第２引数をログに出力することを示している。
【００４７】
コード３１０，３２０は、アプリケーションが要求したパーミッションを許可することを示すコード３３０，３４０の直前に挿入されている。したがって、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード３１０，３２０の処理が実行され、ログに情報が記録される。
【００４８】
（２）OSのカーネルのコードに対してコードを追加する例
カーネルでは、適切なグループID （gid）がアプリケーションに付与されているか否かを判定することにより、アプリケーションに適切なパーミッションが付与されているか否かを判定する機構がある。インストールの際、アプリケーションに付与されたパーミッションに応じた１以上のグループIDがアプリケーションに付与される。例えば、*andrd*.permission.CAMERA、*andrd*.permission.READ_LOGS、*andrd*.permission.WRITE_EXTERNAL_STORAGE、*andrd*.permission.ACCESS_CACHE_FILESYSTEM、*andrd*.permission.INTERNETという５つのパーミッションで制限された処理を行うには、それぞれcamera、log、sdcard_rw、cache、inetというグループIDが付与されている必要がある。
【００４９】
以下では、カーネルのコード、特にカーネルで提供されている関数のコードに対して、ログ出力部１４の動作を規定するコードを追加する２種類の例を説明する。
【００５０】
（２−１）ファイルアクセスのパーミッションに関する判定を行う関数のコードに対してコードを追加する例
パーミッションを必要とする処理を行うカーネルの関数のコードには、関数を呼び出したアプリケーションに適切なグループIDが付与されているか否かを判定するコードが含まれる。例えば、アプリケーションのインストール時に、インターネットへの接続を制限するパーミッションである*andrd*.permission.INTERNETの使用が宣言され、ユーザによって許可されると、inetというグループIDがアプリケーションに付与される。その後、*andrd*.permission.INTERNETを必要とする関数がアプリケーションによって呼び出されると、呼び出したアプリケーションのグループIDが確認され、グループIDがinetであった場合のみ、その関数の実行が継続する。
【００５１】
本実施形態では、一例として、ソケットを生成するコードを含む関数であるinet_creatのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。inet_creat は、カーネルを構成するファイルであるnet/ipv4/af_inet.cで定義されており、処理の実行に*andrd*.permission.INTERNETを必要とする。
【００５２】
図４はinet_creatのコードを示している。関数を呼び出したアプリケーションに適切なグループID（inet）が付与されているか否かを判定するコード４００の直後にコード４１０，４２０が追加されている。コード４１０は、inet_creatを呼び出したアプリケーションのユーザIDを取得するポインタの生成と初期化を行うことを示している。コード４２０は、使用されたパーミッション（*andrd*.permission.INTERNET）の名称（パーミッション名）と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【００５３】
コード４００では、関数を呼び出したアプリケーションに適切なグループID（inet）が付与されていない場合、処理結果がリターンされるため、コード４１０，４２０の処理は実行されない。したがって、アプリケーションに適切なグループID（inet）が付与されており、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード４１０，４２０の処理が実行され、ログに情報が記録される。
【００５４】
（２−２）ファイルアクセスのパーミッションに関する判定を行う関数の実行に伴って実行される関数のコードに対してコードを追加する例
*andrd*.permission.READ_LOGSは、アプリケーションによるアプリケーションログの取得を制限しているパーミッションである。アプリケーションに対してこのパーミッションが付与されているか否かの判定は、アプリケーションログが保存されているファイルである/dev/log/mainのアクセス権限があるか否かを判定することにより行われる。ファイル毎にアクセス権限に応じたグループIDが付与されており、ファイルに付与されているグループIDと同じグループIDが付与されたアプリケーションのみがそのファイルへのアクセスを許可される。/dev/log/mainに付与されているグループIDはlogであり、logというグループIDがアプリケーションに付与されているか否かの判定が行われる。
【００５５】
このように、ファイルのアクセス権限があるか否かを判定することによりアプリケーションに適切なパーミッションが付与されているか否かを判定するパーミッションとして、*andrd*.permission.READ_LOGS のほか、*andrd*.permission.CAMERA、*andrd*.permission.WRITE_EXTERNAL_STORAGE、*andrd*.permission.ACCESS_CACHE_FILESYSTEM等がある。これらのパーミッションに関する判定のコードは、ファイルの読み出しを行う関数（read）およびファイルの書き込みを行う関数（write）のコード内にあり、これらの関数が実行される際に、パーミッションに関する判定が行われる。
【００５６】
本実施形態では、一例として、読み出し／書き込みを行う関数が実行される直前に必ず実行される関数であるdo_sys_openのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。do_sys_openは、ファイルを開くシステムコールを定義する関数であり、カーネルを構成するファイルであるfs/open.cで定義されている。
【００５７】
図５はdo_sys_openのコードを示している。ファイルのパスを指定してファイルを開くコード５００の直後にコード５１０〜５５０が追加されている。コード５１０は、do_sys_openを呼び出したアプリケーションのユーザIDを取得するポインタの生成と初期化を行うことを示している。
【００５８】
コード５２０は、開いたファイルのグループIDがcameraである場合に、使用されたパーミッション（*andrd*.permission.CAMERA）の名称（パーミッション名）と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。コード５３０は、開いたファイルのグループIDがlogである場合に、使用されたパーミッション（*andrd*.permission.READ_LOGS）の名称（パーミッション名）と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【００５９】
コード５４０は、開いたファイルのグループIDがsdcar_rwであり、かつ、do_sys_openの引数であるflagsの値をO_ACCMODEでマスクした値がO_RDONLYでない場合に、使用されたパーミッション（*andrd*.permission.WRITE_EXTERNAL_STORAGE）の名称（パーミッション名）と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。コード５５０は、開いたファイルのグループIDがcacheである場合に、使用されたパーミッション（*andrd*.permission.ACCESS_CACHE_FILESYSTEM）の名称（パーミッション名）と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【００６０】
*andrd*.permission.WRITE_EXTERNAL_STORAGEは、SDカードへのファイルの書き込みを制限するパーミッションである。ファイルの読み出しとファイルの書き込みのどちらが行われる場合でも、ファイルを開くためにdo_sys_openが実行されるため、開くファイルのグループIDを特定しても、ファイルの書き込みを検出したことにはならない。そこで、コード５４０が示す処理では、do_sys_openが呼び出される際に指定される引数であるflagsの値からファイルの書き込みが検出される。
【００６１】
flagsの値とO_ACCMODEの値とのAND積をとることにより、ファイル読み込み専用の値であるO_RDONLY、ファイル書き込み専用の値であるO_WRONLY、ファイル読み書き用の値であるO_RDWRのいずれかの値を取得することができる。ファイルの書き込みを制限するパーミッションである*andrd*.permission.WRITE_EXTERNAL_STORAGEの使用を検出するために、コード５４０が示す処理では、ファイル読み出し専用の値であるO_RDONLY以外の値が取得された場合に、ユーザIDとパーミッション名とをログに出力する。
【００６２】
上記のように、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード５１０〜５５０の処理により、ログに情報が記録される。
【００６３】
do_sys_openのコードにコードを追加する代わりに、上記の（２−１）のように読み出し／書き込みを行う関数のコードにコードを追加することも可能である。読み出し／書き込みを行う関数のコードにコードを追加する場合には、読み出しに関するパーミッションの情報をログに出力するためのコードは読み出しを行う関数のコードに追加し、書き込みに関するパーミッションの情報をログに出力するためのコードは書き込みを行う関数のコードに追加する必要があるため、関数毎に別々のコードにコードを追加する煩雑さがある。一方、do_sys_openのコードにコードを追加する場合には、ファイルの読み出しに関するパーミッションとファイルの書き込みに関するパーミッションとの両方を同じdo_sys_openのコードに追加すればよいので、上記の煩雑さを低減することができる。
【００６４】
Android（登録商標）で用意されている多く（９割以上）のパーミッションに関する判定は、アプリケーションフレームワーク層で行われている。したがって、上記（１）のようにアプリケーションフレームワークのコードに対してコードを追加するだけでもよいが、アプリケーションで使用されるパーミッションの検出精度をより向上させるためには、上記（１）のようにアプリケーションフレームワークのコードに対してコードを追加すると共に、上記（２）のようにカーネルのコードに対してコードを追加することがより望ましい。
【００６５】
例えば、*andrd*.permission.CAMERA、*andrd*.permission.INTERNETに関する判定はアプリケーションフレームワーク層とカーネル層の両方で行われているため、アプリケーションフレームワークのコードに対してコードを追加するだけでも、アプリケーションにこれらのパーミッションが付与されていることを検出することが可能である。一方、例えば、*andrd*.permission.READ_LOGS、*andrd*.permission.WRITE_EXTERNAL_STORAGEに関する判定はカーネル層のみで行われるため、カーネルのコードに対してコードを追加することにより、アプリケーションにこれらのパーミッションが付与されていることを検出することが可能である。
【００６６】
次に、パーミッション情報抽出部１３が、解析対象のアプリケーションに付与されたパーミッションの情報をマニフェストファイルから抽出する方法を説明する。以下では、一例として、aaptを用いた方法を説明する。Android（登録商標）のSDKでは、マニフェストファイルを抽出するツールとしてaaptが用意されている。例えば、「aapt d xmltree AAA.apk *Andrd*Manifest.xml」というコマンドを実行することによりマニフェストファイルを抽出することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。アプリケーションに付与されたパーミッションは、マニフェストファイル内のuses-permissionタグ内の「*andrd*:name=」という文字列の直後に定義されている。
【００６７】
図６はマニフェストファイルの内容の一例を示している。コード６００は、アプリケーションに付与されたパーミッションを定義している。パーミッション情報抽出部１３は、パッケージファイルからマニフェストファイルを抽出し、マニフェストファイル内の文字列を解析し、アプリケーションに付与されたパーミッションの名称（パーミッション名）を示す文字列を抽出する。
【００６８】
次に、パーミッション解析部１５が、アプリケーション１２に付与されているパーミッションに関する判定を行う方法を説明する。ログには、ログ出力部１４によって出力されたパーミッション名とユーザIDとの組合せが記録されている。パーミッション解析部１５は、ログから、解析対象のアプリケーションのユーザIDと関連付けられているパーミッション名を抽出する。
【００６９】
アプリケーションが起動すると、図７に示すアプリケーションログが最初に出力される。アプリケーションログにはユーザID７００が記録されている。パーミッション解析部１５は、解析対象のアプリケーションを起動したときのアプリケーションログに記録されているユーザIDと同じユーザIDに関連付けられているパーミッション名を、ログ出力部が出力した情報を含むログから抽出する。
【００７０】
続いて、パーミッション解析部１５は、マニフェストファイルから抽出されたパーミッション名と、ログから抽出されたパーミッション名との一致・不一致を確認する。マニフェストファイルから抽出された全てのパーミッション名について、ログから抽出されたパーミッション名と一致した場合には、パーミッション解析部１５は、アプリケーション１２に適切にパーミッションが付与されていると判定する。また、マニフェストファイルから抽出されたパーミッション名の中に、ログから抽出されたパーミッション名のいずれとも一致しないパーミッション名が含まれる場合、パーミッション解析部１５は、アプリケーション１２に過剰にパーミッションが付与されていると判定する。
【００７１】
上述したように、本実施形態によれば、パッケージファイル（アプリケーションファイル）に含まれるマニフェストファイルから抽出されたパーミッション名と、アプリケーションがパーミッションを必要とする処理を行う際にログに出力されたパーミッション名とを比較することによって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。したがって、アプリケーションの自動アップデート機能を利用して悪性アプリケーションに変化するアプリケーションを検出することができる。
【００７２】
また、本実施形態によれば、逆アセンブルに耐性があるネイティブライブラリを含むアプリケーションについても、アプリケーションを起動して動作させれば、アプリケーションに付与されているパーミッションの情報を収集することが可能となる。このため、ネイティブライブラリを含むアプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【００７３】
また、本実施形態によれば、OSのアプリケーションフレームワークで提供されているクラスのAPIのうち、アプリケーションに適切なパーミッションが付与されているか否かを判定するAPIであるCheckUidPermissionのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。このため、多くのパーミッションに関して、アプリケーションに付与されているパーミッションに関する情報を取得することができる。
【００７４】
また、本実施形態によれば、OSのカーネルで提供されている関数のうち、ファイルアクセスのパーミッションに関する判定を行う関数のコード、あるいは、ファイルアクセスのパーミッションに関する判定を行う関数の実行に伴って実行される関数のコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。このため、判定がカーネル層のみで行われるパーミッションに関しても、アプリケーションに付与されているパーミッションに関する情報を取得することができる。
【００７５】
次に、本実施形態の変形例を説明する。本実施形態によるアプリケーション解析装置の機能を複数の装置に分散させたアプリケーション解析システムを構成してもよい。図８はアプリケーション解析システムの第１の構成例を示している。
【００７６】
図８に示すアプリケーション解析システムはログ出力装置１ａ（第１の装置）とパーミッション解析装置２ａ（第２の装置）を有する。ログ出力装置１ａは、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成され、パーミッション解析装置２ａはPC等の装置として構成されている。
【００７７】
ログ出力装置１ａは、記憶部１０、アプリケーション起動部１１、アプリケーション１２、ログ出力部１４、送信部２０ａを有する。パーミッション解析装置２ａは、パーミッション情報抽出部１３、パーミッション解析部１５、受信部２１ａを有する。図８に示す構成のうち図１に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【００７８】
送信部２０ａは、記憶部１０に格納されているパッケージファイルのコピーとログ（アプリケーションログを含む）をパーミッション解析装置２ａへ送信する。受信部２１ａは、パッケージファイルとログをログ出力装置１ａから受信し、パッケージファイルをパーミッション情報抽出部１３へ出力し、ログをパーミッション解析部１５へ出力する。
【００７９】
図９はアプリケーション解析システムの第２の構成例を示している。図９に示すアプリケーション解析システムはログ出力装置１ｂ（第１の装置）とパーミッション解析装置２ｂ（第２の装置）を有する。ログ出力装置１ｂは、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成され、パーミッション解析装置２ｂはPC等の装置として構成されている。
【００８０】
ログ出力装置１ｂは、記憶部１０、アプリケーション起動部１１、アプリケーション１２、パーミッション情報抽出部１３、ログ出力部１４、送信部２０ｂを有する。パーミッション解析装置２ｂは、パーミッション解析部１５、受信部２１ｂを有する。図９に示す構成のうち図１に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【００８１】
送信部２０ｂは、パーミッション情報抽出部１３が抽出した情報とログ（アプリケーションログを含む）をパーミッション解析装置２ｂへ送信する。受信部２１ｂは、パーミッション情報抽出部１３が抽出した情報とログをログ出力装置１ｂから受信し、パーミッション解析部１５へ出力する。
【００８２】
図１０はアプリケーション解析システムの第３の構成例を示している。図１０に示すアプリケーション解析システムは、ログ出力装置１ｃ（第１の装置）、パーミッション解析装置２ｃ（第３の装置）、パーミッション抽出装置３ｃ（第２の装置）を有する。ログ出力装置１ｃは、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成され、パーミッション解析装置２ｃ、パーミッション抽出装置３ｃはPC等の装置として構成されている。
【００８３】
ログ出力装置１ｃは、記憶部１０、アプリケーション起動部１１、アプリケーション１２、ログ出力部１４、送信部２０ｃを有する。パーミッション解析装置２ｃは、パーミッション解析部１５、受信部２１ｃを有する。パーミッション抽出装置３ｃは、パーミッション情報抽出部１３、受信部２２ｃ、送信部２３ｃを有する。図１０に示す構成のうち図１に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【００８４】
送信部２０ｃは、ログ（アプリケーションログを含む）をパーミッション解析装置２ｃへ送信し、記憶部１０に格納されているパッケージファイルのコピーをパーミッション抽出装置３ｃへ送信する。受信部２２ｃはパッケージファイルをログ出力装置１ｃから受信し、パーミッション情報抽出部１３へ出力する。送信部２３ｃは、パーミッション情報抽出部１３が抽出した情報をパーミッション解析装置２ｃへ送信する。受信部２１ｃは、ログをログ出力装置１ｃから受信し、パーミッション解析部１５へ出力する。また、受信部２１ｃは、パーミッション情報抽出部１３が抽出した情報をパーミッション抽出装置３ｃから受信し、パーミッション解析部１５へ出力する。
【００８５】
図１１はアプリケーション解析システムの第４の構成例を示している。図１１に示すアプリケーション解析システムは、ログ出力装置１ｄ（第１の装置）、パーミッション解析装置２ｄ（第３の装置）、パーミッション抽出装置３ｄ（第２の装置）を有する。ログ出力装置１ｄは、OS にAndroid（登録商標）を実装したスマートフォン等の装置として構成され、パーミッション解析装置２ｄ、パーミッション抽出装置３ｄはPC等の装置として構成されている。
【００８６】
ログ出力装置１ｄは、記憶部１０、アプリケーション起動部１１、アプリケーション１２、ログ出力部１４、送信部２０ｄを有する。パーミッション解析装置２ｄは、パーミッション解析部１５、受信部２１ｃを有する。パーミッション抽出装置３ｄは、パーミッション情報抽出部１３、送信部２３ｃ、記憶部２４を有する。図１１に示す構成のうち図１に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。また、受信部２１ｃ、送信部２３ｃは、図１０における受信部２１ｃ、送信部２３ｃとそれぞれ同一である。
【００８７】
送信部２０ｄは、ログ（アプリケーションログを含む）をパーミッション解析装置２ｂへ送信する。記憶部２４は、解析対象のアプリケーションのパッケージファイルを記憶する。このパッケージファイルは、パーミッション情報抽出部１３によって読み出されて使用される。
【００８８】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００８９】
１ａ，１ｂ，１ｃ，１ｄ・・・ログ出力装置、２ａ，２ｂ，２ｃ，２ｄ・・・パーミッション解析装置、３ｃ，３ｄ・・・パーミッション抽出装置、１０，２４・・・記憶部、１１・・・アプリケーション起動部、１２・・・アプリケーション、１３・・・パーミッション情報抽出部、１４・・・ログ出力部、１５・・・パーミッション解析部、２０ａ，２０ｂ，２０ｃ，２０ｄ，２３ｃ・・・送信部、２１ａ，２１ｂ，２１ｃ，２２ｃ・・・受信部
【図１】
0005736335.tif 000002
【図２】
0005736335.tif 000003
【図３】
0005736335.tif 000004
【図４】
0005736335.tif 000005
【図５】
0005736335.tif 000006
【図６】
0005736335.tif 000007
【図７】
0005736335.tif 000008
【図８】
0005736335.tif 000009
【図９】
0005736335.tif 000010
【図１０】
0005736335.tif 000011
【図１１】
0005736335.tif 000012