【文献】
矢儀 真也 中村 雄一 山内 利宏,SELinuxの不要なセキュリティポリシ削減手法の設計と評価,電子情報通信学会技術研究報告,日本,2011年 5月 5日,Vol.111 No.30,71〜76
【文献】
竹森 敬祐 川端 秀明 磯原 隆将 窪田 歩 池野 潤一,Androidフォンのアプリ管理 ホワイトリスト方式,情報処理学会研究報告 研究報告 インターネットと運用技術,日本,一般社団法人情報処理学会,2011年 6月15日,1〜6
【文献】
Adrienne Porter Felt et al.,Android Permissions Demystified,CCS'11,2011年10月17日,p.627-637
(58)【調査した分野】(Int.Cl.,DB名)
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する、OSのアプリケーションフレームワークで提供されているAPI(Application Program Interface)の第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項1に記載のアプリケーション解析装置。
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項1に記載のアプリケーション解析装置。
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する、OSのカーネルで提供されている関数の第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項1に記載のアプリケーション解析装置。
前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定し、ファイルの読み出しまたはファイルの書き込みを行う、OSのカーネルで提供されている第1の関数の第1のコードと、前記第1の関数が呼び出される前に呼び出される、前記カーネルで提供されている第2の関数の第2のコードとを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第3のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする請求項1に記載のアプリケーション解析装置。
前記第3のコードは、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されている場合に、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力するコードであることを特徴とする請求項7に記載のアプリケーション解析装置。
前記第3のコードは、前記第2の関数が呼び出されたときに指定された引数がファイルの書き込みを示している場合に、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力するコードであることを特徴とする請求項7に記載のアプリケーション解析装置。
アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、
前記マニフェストファイルから抽出された前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、
としてコンピュータを機能させるためのプログラム。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、逆アセンブルに耐性があるネイティブライブラリを含むアプリケーションの解析を行う場合、ネイティブライブラリをアセンブルできないため、アプリケーションが呼び出すAPIを完全には抽出することができない。つまり、アプリケーションに付与されているパーミッションを完全には確認することができない。
【0009】
本発明は、上述した課題に鑑みてなされたものであって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができるアプリケーション解析装置、アプリケーション解析システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明は、上記の課題を解決するためになされたもので、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析装置である。
【0011】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する、OSのアプリケーションフレームワークで提供されているAPI(Application Program Interface)の第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【0012】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【0013】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されているか否かを判定する、OSのカーネルで提供されている関数の第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【0014】
また、本発明のアプリケーション解析装置において、前記第2のコードは前記第1のコードの中に追加されていることを特徴とする。
【0015】
また、本発明のアプリケーション解析装置において、前記ログ出力部は、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定し、ファイルの読み出しまたはファイルの書き込みを行う、OSのカーネルで提供されている第1の関数の第1のコードと、前記第1の関数が呼び出される前に呼び出される、前記カーネルで提供されている第2の関数の第2のコードとを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第3のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行することを特徴とする。
【0016】
また、本発明のアプリケーション解析装置において、前記第3のコードは前記第2のコードの中に追加されていることを特徴とする。
【0017】
また、本発明のアプリケーション解析装置において、前記第3のコードは、前記アプリケーションが処理を行う際に必要なパーミッションに対応するグループIDが前記アプリケーションに付与されている場合に、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力するコードであることを特徴とする。
【0018】
また、本発明のアプリケーション解析装置において、前記第3のコードは、前記第2の関数が呼び出されたときに指定された引数がファイルの書き込みを示している場合に、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力するコードであることを特徴とする。
【0019】
また、本発明は、第1の装置と、第2の装置とを備え、前記第1の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルおよび前記ログを前記第2の装置へ送信する送信部と、を有し、前記第2の装置は、前記アプリケーションファイルおよび前記ログを前記第1の装置から受信する受信部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、を有することを特徴とするアプリケーション解析システムである。
【0020】
また、本発明は、第1の装置と、第2の装置とを備え、前記第1の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報および前記ログを前記第2の装置へ送信する送信部と、を有し、前記第2の装置は、前記第1のパーミッション情報および前記ログを前記第1の装置から受信する受信部と、前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、を有することを特徴とするアプリケーション解析システムである。
【0021】
また、本発明は、第1の装置と、第2の装置と、第3の装置とを備え、前記第1の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルを前記第2の装置へ送信し、前記ログを前記第3の装置へ送信する第1の送信部と、を有し、前記第2の装置は、前記アプリケーションファイルを前記第1の装置から受信する第1の受信部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報を前記第3の装置へ送信する第2の送信部と、を有し、前記第3の装置は、前記ログを前記第1の装置から受信し、前記第1のパーミッション情報を前記第2の装置から受信する第2の受信部と、前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析システムである。
【0022】
また、本発明は、第1の装置と、第2の装置と、第3の装置とを備え、前記第1の装置は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する第1の記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、
前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記ログを前記第3の装置へ送信する第1の送信部と、を有し、前記第2の装置は、前記アプリケーションファイルを記憶する第2の記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報を前記第3の装置へ送信する第2の送信部と、を有し、前記第3の装置は、前記ログを前記第1の装置から受信し、前記第1のパーミッション情報を前記第2の装置から受信する受信部と、前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析システムである。
【0023】
また、本発明は、アプリケーションの機能を実現する実行ファイルと、アプリケーションに付与されたパーミッションを示す第1のパーミッション情報を含むマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルを実行することで前記アプリケーションを起動する起動部と、前記アプリケーションが処理を行う際に必要なパーミッションが前記アプリケーションに付与されているか否かを判定する第1のコードを含むOSのプログラムに対して、前記アプリケーションに付与されているパーミッションを示す第2のパーミッション情報をログに出力する第2のコードを追加することにより修正された前記OSのプログラムを前記アプリケーションの動作中に実行するログ出力部と、前記アプリケーションファイルに含まれる前記マニフェストファイルから前記第1のパーミッション情報を抽出する抽出部と、前記マニフェストファイルから抽出された前記第1のパーミッション情報と、前記ログに出力された前記第2のパーミッション情報とを比較する比較部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【0024】
本発明によれば、アプリケーションファイルに含まれるマニフェストファイルから抽出された第1のパーミッション情報と、アプリケーションがパーミッションを必要とする処理を行う際にログに出力された第2のパーミッション情報とを比較することによって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【発明を実施するための形態】
【0026】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid(登録商標)という文字列を*andrd*という文字列で代用し、Android(登録商標)という文字列を*Andrd*という文字列で代用し、java(登録商標)という文字列を*jv*という文字列で代用し、linux(登録商標)という文字列を*ln*という文字列で代用している。すなわち、*andrd*という文字列はandroid(登録商標)という文字列と等価であり、*Andrd*という文字列はAndroid(登録商標)という文字列と等価であり、*jv*という文字列はjava(登録商標)という文字列と等価であり、*ln*という文字列はlinux(登録商標)という文字列と等価である。
【0027】
図1は、本発明の一実施形態によるアプリケーション解析装置の構成を示している。本実施形態のアプリケーション解析装置は、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成されている。
図1に示すようにアプリケーション解析装置は、記憶部10、アプリケーション起動部11、アプリケーション12、パーミッション情報抽出部13、ログ出力部14、パーミッション解析部15を有する。
【0028】
記憶部10は、OSのプログラムや、解析対象のアプリケーションの実行ファイルを含むパッケージファイル(アプリケーションファイル)、アプリケーション解析装置が使用する各種データ等を記憶する。Android(登録商標)では、パッケージファイルの形式でアプリケーションが公開されている。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列(実行コード)を含む実行ファイル(例えば拡張子が.dex)、アプリケーションが利用するパーミッション(権限)が定義されたマニフェストファイル(例えば拡張子が.xml)、アプリケーションが利用する画像ファイル(例えば拡張子が.jpg)等を含む。
【0029】
アプリケーション起動部11は、記憶部10に格納されているパッケージファイルを実行することにより、アプリケーション12を起動する。アプリケーション12は、パッケージファイルに含まれる実行ファイルの実行コードに従って、アプリケーションの処理として規定された各種の処理を行う。パーミッション情報抽出部13は、パッケージファイルに含まれるマニフェストファイルから、解析対象のアプリケーションに付与されたパーミッションの情報(第1のパーミッション情報)を抽出する。
【0030】
ログ出力部14は、アプリケーション12がパーミッションを必要とする処理を実行する際に、OSの機能を利用して、アプリケーション12にそのパーミッションが付与されていることを示す情報(第2のパーミッション情報)をログに出力する。パーミッション解析部15は、パーミッション情報抽出部13がマニフェストファイルから抽出した情報と、ログに出力された情報とを比較し、アプリケーション12に過剰にパーミッションが付与されているか否かを判定する。
【0031】
パーミッション情報抽出部13がマニフェストファイルから抽出した情報は、アプリケーションに付与されているパーミッションを示している。アプリケーションに付与されているパーミッションは、アプリケーションの動作時に実際に使用されるパーミッションを含むほか、現状のアプリケーションでは使用されないパーミッション(アプリケーションの更新後に使用される可能性があるパーミッション)を含みうる。
【0032】
一方、ログに出力された情報は、アプリケーションの動作中に実際に使用されたパーミッションを示している。したがって、パーミッション情報抽出部13が抽出した情報と、ログに出力された情報とを比較して一致したパーミッションは、アプリケーションの動作時に実際に使用されるパーミッションであり、一致しなかったパーミッションは、現状のアプリケーションでは使用されず、過剰に付与されたパーミッションである。したがって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【0033】
本実施形態のOSのプログラムでは、OSのアプリケーションフレームワークで提供されている既存のクラスを定義しているコード、あるいはOSのカーネルのコードに対して、アプリケーション12に付与されているパーミッションに関する情報をログに出力するコードが追加されている。つまり、本実施形態のOSのプログラムは、ログ出力部14の動作を規定したコードを含む。
【0034】
OSのソースプログラムのうちアプリケーションフレームワークのコードとカーネルのコードとの少なくとも一方に対して、ログ出力部14の動作を規定するコードが追加されることで、OSのソースプログラムが修正され、修正されたソースプログラムがアセンブル(コンパイル)されることで、修正されたOSの実行プログラム(実行ファイル)が生成される。このようにして生成されたOSの実行プログラムがアプリケーション解析装置にインストールされている。アプリケーション解析装置においてOSが起動することでログ出力部14が起動し、アプリケーション12の動作中に、上記の追加されたコードを実行することで、ログ出力部14は、アプリケーション12に付与されているパーミッションに関する情報をログに出力する。
【0035】
アプリケーション起動部11、パーミッション情報抽出部13、パーミッション解析部15については、それらのコードをOSのプログラムに追加してもよいし、それらを含むアプリケーションを構成してもよい。
【0036】
本実施形態のOSのプログラム(ログ出力部14のコードを含む)と、アプリケーション起動部11、パーミッション情報抽出部13、パーミッション解析部15のプログラムとをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ(本実施形態のアプリケーション解析装置)に読み込ませ、実行させることにより、アプリケーション起動部11、パーミッション情報抽出部13、ログ出力部14、パーミッション解析部15は、各部に対して規定された処理を実行する。
【0037】
ここで、「コンピュータ」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0038】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0039】
次に、本実施形態によるアプリケーション解析装置の動作を説明する。
図2はアプリケーション解析装置の動作を示している。まず、パーミッション情報抽出部13は、記憶部10から解析対象のアプリケーションのパッケージファイルを読み出し、パッケージファイルに含まれるマニフェストファイルから、解析対象のアプリケーションに付与されたパーミッションの情報を抽出する(ステップS100)。
【0040】
続いて、アプリケーション起動部11は記憶部10から解析対象のアプリケーションのパッケージファイルを読み出して実行し、アプリケーション12を起動する(ステップS105)。起動したアプリケーション12は各種の処理を行う。アプリケーション12が、ユーザの操作に応じて処理を実行する場合には、アプリケーション解析装置の管理者等の操作者が必要な操作を行う。
【0041】
ログ出力部14は、アプリケーション12がパーミッションを必要とする処理を実行する際に、アプリケーション12にそのパーミッションが付与されていることを示す情報をログに出力する(ステップS110)。続いて、パーミッション解析部15は、パーミッション情報抽出部13がマニフェストファイルから抽出した情報と、ログに出力された情報とを比較し、両者の一致・不一致を検出する(ステップS115)。続いて、パーミッション解析部15は、ステップS115で比較を行った結果に基づいて、アプリケーション12に過剰にパーミッションが付与されているか否かを判定する(ステップS120)。
【0042】
アプリケーション12に過剰にパーミッションが付与されている場合、パーミッション解析部15は、そのことを示す情報を出力する(ステップS125)。また、アプリケーション12に適切にパーミッションが付与されている場合、パーミッション解析部15は、そのことを示す情報を出力する(ステップS130)。ステップS125,S130における情報の出力は、記憶部10等の記憶装置に対する情報の保存でもよいし、表示部を使用した情報の表示でもよいし、他の装置に対する情報の送信でもよい。
【0043】
過剰にパーミッションが付与されているアプリケーションは、自動アップデート機能を利用して悪性アプリケーションに変化する可能性がある。このようなアプリケーションをWebサイトから排除する等の対策を行うことによって、自動アップデート機能の仕組みを利用した攻撃の発生を防止することができる。
【0044】
次に、OSのアプリケーションフレームワークのコード、OSのカーネルのコードに対して、ログ出力部14の動作を規定するコードを追加する具体的な例を説明する。
【0045】
(1)OSのアプリケーションフレームワークのコードに対してコードを追加する例
アプリケーションフレームワークで提供されているクラスのうちPackageManagerServiceクラスが定義するAPIのコードに対してコードを追加する例を説明する。PackageManagerServiceクラスは、アプリケーションのインストールおよびアンインストールの管理を行ったり、アプリケーションに適切なパーミッションが付与されているか否かの判定を行ったりするAPI(メソッド)を定義しているクラスである。PackageManagerServiceクラスのAPIのうち、CheckUidPermissionが、アプリケーションに適切なパーミッションが付与されているか否かを判定するAPIである。本実施形態では、一例として、CheckUidPermissionのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。
【0046】
図3はPackageManagerServiceクラスのコードを示している。PackageManagerServiceクラス全体のコードのうち、CheckUidPermissionのコード300に対してコード310,320が追加されている。アプリケーションは、CheckUidPermission を呼び出す際、2つの引数(第1引数、第2引数)を指定する。第1引数では要求されるパーミッションの名称(パーミッション名)が指定され、第2引数では呼び出し元のアプリケーションの識別子であるユーザID(uid)が指定される。コード310,320は、CheckUidPermission を呼び出す際に指定された第1引数と第2引数をログに出力することを示している。
【0047】
コード310,320は、アプリケーションが要求したパーミッションを許可することを示すコード330,340の直前に挿入されている。したがって、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード310,320の処理が実行され、ログに情報が記録される。
【0048】
(2)OSのカーネルのコードに対してコードを追加する例
カーネルでは、適切なグループID (gid)がアプリケーションに付与されているか否かを判定することにより、アプリケーションに適切なパーミッションが付与されているか否かを判定する機構がある。インストールの際、アプリケーションに付与されたパーミッションに応じた1以上のグループIDがアプリケーションに付与される。例えば、*andrd*.permission.CAMERA、*andrd*.permission.READ_LOGS、*andrd*.permission.WRITE_EXTERNAL_STORAGE、*andrd*.permission.ACCESS_CACHE_FILESYSTEM、*andrd*.permission.INTERNETという5つのパーミッションで制限された処理を行うには、それぞれcamera、log、sdcard_rw、cache、inetというグループIDが付与されている必要がある。
【0049】
以下では、カーネルのコード、特にカーネルで提供されている関数のコードに対して、ログ出力部14の動作を規定するコードを追加する2種類の例を説明する。
【0050】
(2−1)ファイルアクセスのパーミッションに関する判定を行う関数のコードに対してコードを追加する例
パーミッションを必要とする処理を行うカーネルの関数のコードには、関数を呼び出したアプリケーションに適切なグループIDが付与されているか否かを判定するコードが含まれる。例えば、アプリケーションのインストール時に、インターネットへの接続を制限するパーミッションである*andrd*.permission.INTERNETの使用が宣言され、ユーザによって許可されると、inetというグループIDがアプリケーションに付与される。その後、*andrd*.permission.INTERNETを必要とする関数がアプリケーションによって呼び出されると、呼び出したアプリケーションのグループIDが確認され、グループIDがinetであった場合のみ、その関数の実行が継続する。
【0051】
本実施形態では、一例として、ソケットを生成するコードを含む関数であるinet_creatのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。inet_creat は、カーネルを構成するファイルであるnet/ipv4/af_inet.cで定義されており、処理の実行に*andrd*.permission.INTERNETを必要とする。
【0052】
図4はinet_creatのコードを示している。関数を呼び出したアプリケーションに適切なグループID(inet)が付与されているか否かを判定するコード400の直後にコード410,420が追加されている。コード410は、inet_creatを呼び出したアプリケーションのユーザIDを取得するポインタの生成と初期化を行うことを示している。コード420は、使用されたパーミッション(*andrd*.permission.INTERNET)の名称(パーミッション名)と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【0053】
コード400では、関数を呼び出したアプリケーションに適切なグループID(inet)が付与されていない場合、処理結果がリターンされるため、コード410,420の処理は実行されない。したがって、アプリケーションに適切なグループID(inet)が付与されており、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード410,420の処理が実行され、ログに情報が記録される。
【0054】
(2−2)ファイルアクセスのパーミッションに関する判定を行う関数の実行に伴って実行される関数のコードに対してコードを追加する例
*andrd*.permission.READ_LOGSは、アプリケーションによるアプリケーションログの取得を制限しているパーミッションである。アプリケーションに対してこのパーミッションが付与されているか否かの判定は、アプリケーションログが保存されているファイルである/dev/log/mainのアクセス権限があるか否かを判定することにより行われる。ファイル毎にアクセス権限に応じたグループIDが付与されており、ファイルに付与されているグループIDと同じグループIDが付与されたアプリケーションのみがそのファイルへのアクセスを許可される。/dev/log/mainに付与されているグループIDはlogであり、logというグループIDがアプリケーションに付与されているか否かの判定が行われる。
【0055】
このように、ファイルのアクセス権限があるか否かを判定することによりアプリケーションに適切なパーミッションが付与されているか否かを判定するパーミッションとして、*andrd*.permission.READ_LOGS のほか、*andrd*.permission.CAMERA、*andrd*.permission.WRITE_EXTERNAL_STORAGE、*andrd*.permission.ACCESS_CACHE_FILESYSTEM等がある。これらのパーミッションに関する判定のコードは、ファイルの読み出しを行う関数(read)およびファイルの書き込みを行う関数(write)のコード内にあり、これらの関数が実行される際に、パーミッションに関する判定が行われる。
【0056】
本実施形態では、一例として、読み出し/書き込みを行う関数が実行される直前に必ず実行される関数であるdo_sys_openのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。do_sys_openは、ファイルを開くシステムコールを定義する関数であり、カーネルを構成するファイルであるfs/open.cで定義されている。
【0057】
図5はdo_sys_openのコードを示している。ファイルのパスを指定してファイルを開くコード500の直後にコード510〜550が追加されている。コード510は、do_sys_openを呼び出したアプリケーションのユーザIDを取得するポインタの生成と初期化を行うことを示している。
【0058】
コード520は、開いたファイルのグループIDがcameraである場合に、使用されたパーミッション(*andrd*.permission.CAMERA)の名称(パーミッション名)と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。コード530は、開いたファイルのグループIDがlogである場合に、使用されたパーミッション(*andrd*.permission.READ_LOGS)の名称(パーミッション名)と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【0059】
コード540は、開いたファイルのグループIDがsdcar_rwであり、かつ、do_sys_openの引数であるflagsの値をO_ACCMODEでマスクした値がO_RDONLYでない場合に、使用されたパーミッション(*andrd*.permission.WRITE_EXTERNAL_STORAGE)の名称(パーミッション名)と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。コード550は、開いたファイルのグループIDがcacheである場合に、使用されたパーミッション(*andrd*.permission.ACCESS_CACHE_FILESYSTEM)の名称(パーミッション名)と、ファイルを開いたアプリケーションのユーザIDとをログに出力することを示している。
【0060】
*andrd*.permission.WRITE_EXTERNAL_STORAGEは、SDカードへのファイルの書き込みを制限するパーミッションである。ファイルの読み出しとファイルの書き込みのどちらが行われる場合でも、ファイルを開くためにdo_sys_openが実行されるため、開くファイルのグループIDを特定しても、ファイルの書き込みを検出したことにはならない。そこで、コード540が示す処理では、do_sys_openが呼び出される際に指定される引数であるflagsの値からファイルの書き込みが検出される。
【0061】
flagsの値とO_ACCMODEの値とのAND積をとることにより、ファイル読み込み専用の値であるO_RDONLY、ファイル書き込み専用の値であるO_WRONLY、ファイル読み書き用の値であるO_RDWRのいずれかの値を取得することができる。ファイルの書き込みを制限するパーミッションである*andrd*.permission.WRITE_EXTERNAL_STORAGEの使用を検出するために、コード540が示す処理では、ファイル読み出し専用の値であるO_RDONLY以外の値が取得された場合に、ユーザIDとパーミッション名とをログに出力する。
【0062】
上記のように、アプリケーションが、許可されたパーミッションにより処理を実行する場合、コード510〜550の処理により、ログに情報が記録される。
【0063】
do_sys_openのコードにコードを追加する代わりに、上記の(2−1)のように読み出し/書き込みを行う関数のコードにコードを追加することも可能である。読み出し/書き込みを行う関数のコードにコードを追加する場合には、読み出しに関するパーミッションの情報をログに出力するためのコードは読み出しを行う関数のコードに追加し、書き込みに関するパーミッションの情報をログに出力するためのコードは書き込みを行う関数のコードに追加する必要があるため、関数毎に別々のコードにコードを追加する煩雑さがある。一方、do_sys_openのコードにコードを追加する場合には、ファイルの読み出しに関するパーミッションとファイルの書き込みに関するパーミッションとの両方を同じdo_sys_openのコードに追加すればよいので、上記の煩雑さを低減することができる。
【0064】
Android(登録商標)で用意されている多く(9割以上)のパーミッションに関する判定は、アプリケーションフレームワーク層で行われている。したがって、上記(1)のようにアプリケーションフレームワークのコードに対してコードを追加するだけでもよいが、アプリケーションで使用されるパーミッションの検出精度をより向上させるためには、上記(1)のようにアプリケーションフレームワークのコードに対してコードを追加すると共に、上記(2)のようにカーネルのコードに対してコードを追加することがより望ましい。
【0065】
例えば、*andrd*.permission.CAMERA、*andrd*.permission.INTERNETに関する判定はアプリケーションフレームワーク層とカーネル層の両方で行われているため、アプリケーションフレームワークのコードに対してコードを追加するだけでも、アプリケーションにこれらのパーミッションが付与されていることを検出することが可能である。一方、例えば、*andrd*.permission.READ_LOGS、*andrd*.permission.WRITE_EXTERNAL_STORAGEに関する判定はカーネル層のみで行われるため、カーネルのコードに対してコードを追加することにより、アプリケーションにこれらのパーミッションが付与されていることを検出することが可能である。
【0066】
次に、パーミッション情報抽出部13が、解析対象のアプリケーションに付与されたパーミッションの情報をマニフェストファイルから抽出する方法を説明する。以下では、一例として、aaptを用いた方法を説明する。Android(登録商標)のSDKでは、マニフェストファイルを抽出するツールとしてaaptが用意されている。例えば、「aapt d xmltree AAA.apk *Andrd*Manifest.xml」というコマンドを実行することによりマニフェストファイルを抽出することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。アプリケーションに付与されたパーミッションは、マニフェストファイル内のuses-permissionタグ内の「*andrd*:name=」という文字列の直後に定義されている。
【0067】
図6はマニフェストファイルの内容の一例を示している。コード600は、アプリケーションに付与されたパーミッションを定義している。パーミッション情報抽出部13は、パッケージファイルからマニフェストファイルを抽出し、マニフェストファイル内の文字列を解析し、アプリケーションに付与されたパーミッションの名称(パーミッション名)を示す文字列を抽出する。
【0068】
次に、パーミッション解析部15が、アプリケーション12に付与されているパーミッションに関する判定を行う方法を説明する。ログには、ログ出力部14によって出力されたパーミッション名とユーザIDとの組合せが記録されている。パーミッション解析部15は、ログから、解析対象のアプリケーションのユーザIDと関連付けられているパーミッション名を抽出する。
【0069】
アプリケーションが起動すると、
図7に示すアプリケーションログが最初に出力される。アプリケーションログにはユーザID700が記録されている。パーミッション解析部15は、解析対象のアプリケーションを起動したときのアプリケーションログに記録されているユーザIDと同じユーザIDに関連付けられているパーミッション名を、ログ出力部が出力した情報を含むログから抽出する。
【0070】
続いて、パーミッション解析部15は、マニフェストファイルから抽出されたパーミッション名と、ログから抽出されたパーミッション名との一致・不一致を確認する。マニフェストファイルから抽出された全てのパーミッション名について、ログから抽出されたパーミッション名と一致した場合には、パーミッション解析部15は、アプリケーション12に適切にパーミッションが付与されていると判定する。また、マニフェストファイルから抽出されたパーミッション名の中に、ログから抽出されたパーミッション名のいずれとも一致しないパーミッション名が含まれる場合、パーミッション解析部15は、アプリケーション12に過剰にパーミッションが付与されていると判定する。
【0071】
上述したように、本実施形態によれば、パッケージファイル(アプリケーションファイル)に含まれるマニフェストファイルから抽出されたパーミッション名と、アプリケーションがパーミッションを必要とする処理を行う際にログに出力されたパーミッション名とを比較することによって、アプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。したがって、アプリケーションの自動アップデート機能を利用して悪性アプリケーションに変化するアプリケーションを検出することができる。
【0072】
また、本実施形態によれば、逆アセンブルに耐性があるネイティブライブラリを含むアプリケーションについても、アプリケーションを起動して動作させれば、アプリケーションに付与されているパーミッションの情報を収集することが可能となる。このため、ネイティブライブラリを含むアプリケーションに対してパーミッションが適切に付与されているか否かを判定することができる。
【0073】
また、本実施形態によれば、OSのアプリケーションフレームワークで提供されているクラスのAPIのうち、アプリケーションに適切なパーミッションが付与されているか否かを判定するAPIであるCheckUidPermissionのコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。このため、多くのパーミッションに関して、アプリケーションに付与されているパーミッションに関する情報を取得することができる。
【0074】
また、本実施形態によれば、OSのカーネルで提供されている関数のうち、ファイルアクセスのパーミッションに関する判定を行う関数のコード、あるいは、ファイルアクセスのパーミッションに関する判定を行う関数の実行に伴って実行される関数のコードに対して、アプリケーションに付与されているパーミッションに関する情報をログに出力するコードが追加される。このため、判定がカーネル層のみで行われるパーミッションに関しても、アプリケーションに付与されているパーミッションに関する情報を取得することができる。
【0075】
次に、本実施形態の変形例を説明する。本実施形態によるアプリケーション解析装置の機能を複数の装置に分散させたアプリケーション解析システムを構成してもよい。
図8はアプリケーション解析システムの第1の構成例を示している。
【0076】
図8に示すアプリケーション解析システムはログ出力装置1a(第1の装置)とパーミッション解析装置2a(第2の装置)を有する。ログ出力装置1aは、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成され、パーミッション解析装置2aはPC等の装置として構成されている。
【0077】
ログ出力装置1aは、記憶部10、アプリケーション起動部11、アプリケーション12、ログ出力部14、送信部20aを有する。パーミッション解析装置2aは、パーミッション情報抽出部13、パーミッション解析部15、受信部21aを有する。
図8に示す構成のうち
図1に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【0078】
送信部20aは、記憶部10に格納されているパッケージファイルのコピーとログ(アプリケーションログを含む)をパーミッション解析装置2aへ送信する。受信部21aは、パッケージファイルとログをログ出力装置1aから受信し、パッケージファイルをパーミッション情報抽出部13へ出力し、ログをパーミッション解析部15へ出力する。
【0079】
図9はアプリケーション解析システムの第2の構成例を示している。
図9に示すアプリケーション解析システムはログ出力装置1b(第1の装置)とパーミッション解析装置2b(第2の装置)を有する。ログ出力装置1bは、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成され、パーミッション解析装置2bはPC等の装置として構成されている。
【0080】
ログ出力装置1bは、記憶部10、アプリケーション起動部11、アプリケーション12、パーミッション情報抽出部13、ログ出力部14、送信部20bを有する。パーミッション解析装置2bは、パーミッション解析部15、受信部21bを有する。
図9に示す構成のうち
図1に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【0081】
送信部20bは、パーミッション情報抽出部13が抽出した情報とログ(アプリケーションログを含む)をパーミッション解析装置2bへ送信する。受信部21bは、パーミッション情報抽出部13が抽出した情報とログをログ出力装置1bから受信し、パーミッション解析部15へ出力する。
【0082】
図10はアプリケーション解析システムの第3の構成例を示している。
図10に示すアプリケーション解析システムは、ログ出力装置1c(第1の装置)、パーミッション解析装置2c(第3の装置)、パーミッション抽出装置3c(第2の装置)を有する。ログ出力装置1cは、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成され、パーミッション解析装置2c、パーミッション抽出装置3cはPC等の装置として構成されている。
【0083】
ログ出力装置1cは、記憶部10、アプリケーション起動部11、アプリケーション12、ログ出力部14、送信部20cを有する。パーミッション解析装置2cは、パーミッション解析部15、受信部21cを有する。パーミッション抽出装置3cは、パーミッション情報抽出部13、受信部22c、送信部23cを有する。
図10に示す構成のうち
図1に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。
【0084】
送信部20cは、ログ(アプリケーションログを含む)をパーミッション解析装置2cへ送信し、記憶部10に格納されているパッケージファイルのコピーをパーミッション抽出装置3cへ送信する。受信部22cはパッケージファイルをログ出力装置1cから受信し、パーミッション情報抽出部13へ出力する。送信部23cは、パーミッション情報抽出部13が抽出した情報をパーミッション解析装置2cへ送信する。受信部21cは、ログをログ出力装置1cから受信し、パーミッション解析部15へ出力する。また、受信部21cは、パーミッション情報抽出部13が抽出した情報をパーミッション抽出装置3cから受信し、パーミッション解析部15へ出力する。
【0085】
図11はアプリケーション解析システムの第4の構成例を示している。
図11に示すアプリケーション解析システムは、ログ出力装置1d(第1の装置)、パーミッション解析装置2d(第3の装置)、パーミッション抽出装置3d(第2の装置)を有する。ログ出力装置1dは、OS にAndroid(登録商標)を実装したスマートフォン等の装置として構成され、パーミッション解析装置2d、パーミッション抽出装置3dはPC等の装置として構成されている。
【0086】
ログ出力装置1dは、記憶部10、アプリケーション起動部11、アプリケーション12、ログ出力部14、送信部20dを有する。パーミッション解析装置2dは、パーミッション解析部15、受信部21cを有する。パーミッション抽出装置3dは、パーミッション情報抽出部13、送信部23c、記憶部24を有する。
図11に示す構成のうち
図1に示した構成に付与されている符号と同一の符号が付与されている構成は、前述した各構成と同一であるので、説明を省略する。また、受信部21c、送信部23cは、
図10における受信部21c、送信部23cとそれぞれ同一である。
【0087】
送信部20dは、ログ(アプリケーションログを含む)をパーミッション解析装置2bへ送信する。記憶部24は、解析対象のアプリケーションのパッケージファイルを記憶する。このパッケージファイルは、パーミッション情報抽出部13によって読み出されて使用される。
【0088】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。