(58)【調査した分野】(Int.Cl.,DB名)
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、
を備えたことを特徴とするアプリケーション解析装置。
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第1の通信部とを有する端末装置と通信を行う第2の通信部と、
前記第1の通信部および前記第2の通信部を介して前記アプリケーションファイルを取得する取得部と、
前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第1の通信部および前記第2の通信部を介して前記コンポーネントを起動する起動部と、
を備えたことを特徴とするアプリケーション解析装置。
前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする請求項1に記載のアプリケーション解析装置。
前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログを前記第1の通信部および前記第2の通信部を介して取得し、前記ログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする請求項2に記載のアプリケーション解析装置。
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、
としてコンピュータを機能させるためのプログラム。
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第1の通信部とを有する端末装置と通信を行う第2の通信部と、
前記第1の通信部および前記第2の通信部を介して前記アプリケーションファイルを取得する取得部と、
前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第1の通信部および前記第2の通信部を介して前記コンポーネントを起動する起動部と、
としてコンピュータを機能させるためのプログラム。
【背景技術】
【0002】
汎用OS(オペレーティングシステム)を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI が豊富に用意されているAndroid(登録商標)が注目を集めている。本明細書では一例として、Android(登録商標) OSを搭載したスマートフォンについて記載する。
【0003】
スマートフォンは、誰もが自由にアプリケーションを開発して公開でき、公開されたアプリケーションをユーザが自由にインストールできるプラットフォームである。公開されたアプリケーションをスマートフォンに導入することにより、スマートフォンの様々な機能を柔軟かつ容易に拡張することができる。
【0004】
しかし、アプリケーションの中には、ユーザに気づかれないように、端末内の情報を収集して外部に送信する悪性アプリケーション(マルウェア)が存在する。特に、正規のアプリケーションを装いつつ、こうした不正な振る舞いを行うアプリケーションはトロイの木馬と呼ばれており、ユーザがその脅威に気づくことは困難である。
【0005】
スマートフォンには、電話やカメラを制御するAPIが設けられており、アプリケーションがAPIを利用して、発呼や、SMS(Short Message Service)通信、写真撮影を行うことができる。これらの行為を悪性アプリケーションが密かに行った場合、勝手な課金やプライバシの漏洩が発生する。
【0006】
スマートフォンは、ユーザとの結びつきがPC(パーソナルコンピュータ)よりも緊密な機器であり、電話番号、メールアドレス、住所録、メールの送受信履歴、インターネットの閲覧履歴等の個人情報が集積している。また、端末の高機能化と、常に携帯される利用形態とから、従来のPCでは収集されなかった位置情報等の情報も容易に取得可能となり、情報が悪用される脅威に直面する。
【0007】
また、スマートフォンでは、ユーザが明示的に操作を行ってアプリケーションを起動できる機能以外にも、端末の状態の変化に応じてアプリケーションが自動的に起動する機能がある。例えば、電話の着信があった、端末が再起動した、WiFiがオンになった等の端末の状態の変化によってアプリケーションを自動的に起動させることができる。よって、ユーザが誤って悪性アプリケーションを一旦端末にインストールしてしまうと、ユーザの知らないうちに情報漏洩が発生する可能性がある。したがって、アプリケーションを容易に入手可能な環境において情報が悪用される脅威からユーザを保護する必要がある。
【0008】
ユーザを悪性アプリケーションによる脅威から保護する手法として、アプリケーションの安全性を事前に検証し、悪性アプリケーションを検知する仕組みが有効である。情報漏洩を行うアプリケーションを検知する手法の1つとして、動的解析の手法が提案されている。
【0009】
動的解析とは、実際にアプリケーションを動作させ、アプリケーションの振る舞いが記録されたログを解析することで、アプリケーションの悪性/良性判定を行う手法である(例えば、非特許文献1参照)。代表的な解析方法として、straceログの情報を用いた手法がある。この手法は、アプリケーションがシステムの機能を利用した際にログに記録された情報から悪性の挙動を解析する手法である。
【発明の概要】
【発明が解決しようとする課題】
【0011】
Android(登録商標)上で動作するアプリケーションは、アプリケーションの様々な機能を実現する複数のコンポーネントを構成要素として有する。動的解析の手法では、端末の状態変化に応じて自動的に起動するコンポーネントに関して、解析対象期間中に所望の状態変化が発生しない場合、そのコンポーネントが起動しないため、そのコンポーネントに関するログを取得できず、悪性アプリケーションを見逃してしまう問題がある。また、ユーザがアプリケーションに対して行う操作の全てを網羅するのに限界があり、起動できないコンポーネントが発生してしまう場合もある。
【0012】
本発明は、上述した課題に鑑みてなされたものであって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができるアプリケーション解析装置、アプリケーション解析システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明は、上記の課題を解決するためになされたもので、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、を備えたことを特徴とするアプリケーション解析装置である。
【0014】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第1の通信部とを有する端末装置と通信を行う第2の通信部と、前記第1の通信部および前記第2の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第1の通信部および前記第2の通信部を介して前記コンポーネントを起動する起動部と、を備えたことを特徴とするアプリケーション解析装置である。
【0015】
また、本発明のアプリケーション解析装置は、前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする。
【0016】
また、本発明のアプリケーション解析装置は、前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログを前記第1の通信部および前記第2の通信部を介して取得し、前記ログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする。
【0017】
また、本発明のアプリケーション解析装置は、前記アプリケーションファイルをディスアセンブルしてソースファイルを取得するディスアセンブル部と、前記ソースファイルに対して、前記コンポーネントがインテントを受け取るためのIDに関するコードを追加することにより前記ソースファイルを変更する変更部と、前記コードが追加された前記ソースファイルをアセンブルし、前記アプリケーションファイルを生成するアセンブル部と、前記アセンブル部によって生成された前記アプリケーションファイルを前記記憶部に格納するインストール部と、をさらに備え、前記解析部は、前記インストール部によって前記記憶部に格納された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定することを特徴とする。
【0018】
また、本発明は、端末装置とアプリケーション解析装置とを備えたアプリケーション解析システムであって、前記端末装置は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーション解析装置と通信を行う第1の通信部と、を有し、前記アプリケーション解析装置は、前記端末装置と通信を行う第2の通信部と、前記第1の通信部および前記第2の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第1の通信部および前記第2の通信部を介して前記コンポーネントを起動する起動部と、を有することを特徴とするアプリケーション解析システムである。
【0019】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、としてコンピュータを機能させるためのプログラムである。
【0020】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第1の通信部とを有する端末装置と通信を行う第2の通信部と、前記第1の通信部および前記第2の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第1の通信部および前記第2の通信部を介して前記コンポーネントを起動する起動部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【0021】
本発明によれば、アプリケーションファイルに含まれるマニフェストファイルを解析することにより、実行ファイルに含まれるコンポーネントを特定し、そのコンポーネントを起動するインテントを生成し、コンポーネントを起動することによって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。
【発明を実施するための形態】
【0023】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid(登録商標)という文字列を*andrd*という文字列で代用し、Android(登録商標)という文字列を*Andrd*という文字列で代用している。すなわち、*andrd*という文字列はandroid(登録商標)という文字列と等価であり、*Andrd*という文字列はAndroid(登録商標)という文字列と等価である。
【0024】
Android(登録商標)上で動作するアプリケーションの構成要素であるコンポーネントとして、Activity、Service、BroadcastReceiver、ContentProviderの4つがある。アプリケーションのソースコードにおいて、クラスが継承するコンポーネントが記述されることにより、そのクラスで定義されているメソッドはそのコンポーネントを利用することが可能となる。以下、各コンポーネントについて説明する。
【0025】
Activityは、ユーザに対して視覚的なインターフェースを提供し、画面上でユーザと対話を行うコンポーネントである。アプリケーションを起動すると画面が表示される場合、Activityに記述されたプログラムが動作している。
【0026】
Serviceは、画面を表示する機能を持たずに、バックグラウンドで処理を実行するコンポーネントである。例えば、ユーザが音楽を聞きながらブラウザを起動してインターネットの利用を楽しむ場合、音楽用アプリケーションがServiceを起動することにより、ユーザはインターネットの利用中に音楽を聞くことができる。
【0027】
BroadcastReceiverは、Android(登録商標)が搭載された端末装置のシステム全体にブロードキャストされるINTENTを受け取るコンポーネントである。例えば、電池残量が減ってきたときに、「残りのバッテリー残量が少ないです」というメッセージを含む画面を表示するアプリケーションでは、電池残量が変化するときに発行されるBroadcastIntentをBroadcastReceiverにより受け取ったアプリケーションがActivityを起動して画面を表示する。
【0028】
ContentProviderは、アプリケーションが保持するデータを他のコンポーネントでも使用可能にするコンポーネントである。例えば、あるアプリケーションが電話帳のデータを取得したい場合、そのアプリケーションは、電話帳アプリケーションのContentProviderを利用して、電話帳に登録されている情報を取得する。
【0029】
Android(登録商標)では、インテント(Intent)という仕組みがある。インテントは、コンポーネント間の情報の受け渡しやコンポーネントの起動など、コンポーネントを繋ぐ役割を果たしている。コンポーネントのうち、Activity、BroadcastReciver、Serviceはインテントによって起動される。コンポーネントを起動するコードがソースファイルに記述されていても、それだけではインテントによってコンポーネントを起動できる状態にはならない。明示的にシステムにインテントを知らせるためには、マニフェストファイルと呼ばれるファイルにおいてコンポーネントの使用を宣言する必要がある。以下の各実施形態では、マニフェストファイルに記述されたコンポーネントの情報を解析し、解析結果に基づいて、アプリケーションに含まれる各コンポーネントにインテントを発行することによって、コンポーネントを強制的に起動する方法を説明する。
【0030】
悪意のユーザがAndroid(登録商標)のトロイの木馬を他人の端末に導入させる手法として、不正な挙動が発生するように正規のアプリケーションを改竄し、そのアプリケーションをマーケットに公開するという手法がある。悪性アプリケーションの開発者は、正規のアプリケーションの実行ファイルをディスアセンブル(逆アセンブル)してソースファイルを取得し、ソースファイルを改竄した後、ソースファイルをアセンブルして悪性アプリケーションの実行ファイルを生成する。不正な挙動が発生するように正規のアプリケーションを改竄する簡単な手法として、以下の2つの手法がある。これまでに出現したトロイの木馬では、2つの手法のどちらかがとられていることが多い。
【0031】
第1の手法は、正規のアプリケーションに対して、BroadcastReceiverを利用して、端末の状態変化が発生したときに不正な挙動が発生するように改竄を施す手法である。この手法は、正規のアプリケーションの実行コードを改竄せずにマニフェストファイルだけを改竄するだけで容易に実現できる。
【0032】
第2の手法は、正規のアプリケーションのソースコードにおいて、アプリケーションが起動した際に最初に呼び出されて実行されるActivityのonCreateメソッドが記述されている箇所に、不正な挙動が発生するメソッドのコードを追記する手法である。onCreateメソッドは、Activity、Service、BroadcastReceiver、ContentProviderが起動した際に最初に呼び出されて実行されるメソッドであり、各コンポーネントを起動するインテントが発行されると、自動的に実行される。アプリケーションが起動した際に最初に呼び出されるメソッドを解析することは容易であり、この手法は、数行のコードを挿入するという容易な手法で実現できる。
【0033】
以下の各実施形態では、アプリケーションが有する全てのコンポーネントを強制的に起動させることによって、上記のいずれかの特徴を有するトロイの木馬型のマルウェアの動的解析を行うことが可能となる。
【0034】
(第1の実施形態)
まず、本発明の第1の実施形態を説明する。
図1は、本実施形態によるアプリケーション解析装置の構成を示している。アプリケーション解析装置は、記憶部10、アプリケーション解析部11、動的解析部12を有する。
【0035】
記憶部10は、解析対象のアプリケーションの実行ファイルを含むパッケージファイル(アプリケーションファイル)を記憶する。
図2は、インストール前のアプリケーションのパッケージファイルの構成を示している。パッケージファイルは、例えば拡張子が.apkのファイルであり、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルF1(例えば拡張子が.dex)、アプリケーションが利用する機能や権限が定義されたマニフェストファイルF2(例えば拡張子が.xml)、アプリケーションが利用するテキストファイルや画像ファイル等の各種リソースファイルF3を含む。アプリケーションがインストールされると、パッケージファイルが展開されて記憶部10に各種ファイルが格納されると共に、記憶部10の所定のフォルダ(/data/app/)の配下にパッケージファイル自体が格納される。
【0036】
アプリケーション解析部11は、解析対象のアプリケーションのパッケージファイルを用いて、アプリケーションの機能を解析する。本実施形態のアプリケーション解析部11はアプリケーションとして構成されている。アプリケーション解析部11は、インテント発行部110とマニフェスト解析部111を有する。マニフェスト解析部111は、パッケージファイルに含まれるマニフェストファイルを解析し、実行ファイルに含まれるコンポーネントを特定する。インテント発行部110は、マニフェスト解析部111によって特定された各コンポーネントを起動するインテントを発行(生成)することにより、コンポーネント毎にアプリケーションを起動する。動的解析部12は、起動したアプリケーションの動的解析を行う。
【0037】
ContentProviderは、データを管理するコンポーネントであるため本実施形態ではインテントを発行する対象ではない。ActivityとBroadcastReceiverに関してはインテントを発行することで起動することが可能であるが、Serviceに関しては他のアプリケーションからのインテントがセキュリティの関係上、解析対象のアプリケーションに届かないため起動することができない。本実施形態では、ActivityとBroadcastReceiverを起動する方法を説明する。
【0038】
次に、アプリケーション解析装置の動作を説明する。
図3はアプリケーションの解析手順を示している。まず、マニフェスト解析部111は、記憶部10に格納されている解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する(ステップS100)。Android(登録商標)では、端末にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ(/data/app/)の配下に保存されている。ステップS100ではマニフェスト解析部111はこのフォルダを参照する。
【0039】
続いて、マニフェスト解析部111はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Activityのクラス名と、BroadcastReceiverの起動条件とを取得する(ステップS105)。
図4はマニフェストファイルの内容の一例を示している。解析対象のアプリケーションのパッケージ名は、「<manifest」という文字列で開始されるタグ(「<」と「>」で囲まれた部分)内の「package=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。
図4では、パッケージ名は「com.sample.app」である。
【0040】
Activityのクラス名は、「<activity」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。
図4では、クラス名は「.Main_Activity」である。BroadcastReceiverの起動条件は、「<receiver」という文字列で開始されるタグの後の「<intent-filter>」という文字列と「</intent-filter>」という文字列とで囲まれた部分において、「<action」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。
図4では、BroadcastReceiverの起動条件は「*andrd*.intent.action.BOOT_COMPLETED」であり、この例ではシステム起動時にBroadcastReceiverが起動することが示されている。
【0041】
続いて、インテント発行部110は、ステップS105で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行(生成)し、記憶部10にインストールされているアプリケーションのコンポーネントを起動する(ステップS110)。Activityは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。具体的には、ステップS110ではインテント発行部110はインテントオブジェクトを生成し、startActivityメソッドを実行する。
図5は、Activityを起動するコードの一例を示している。1行目でインテントオブジェクトが生成され、2行目でパッケージ名とクラス名が指定されている。3行目でActivityの起動に必要なフラグが付加され、4行目でstartActivityメソッドが実行され、インテントが発行される。
【0042】
BroadcastReceiverは、起動条件として指定された条件のインテントを発行することで起動することができる。具体的には、ステップS110ではインテント発行部110はインテントオブジェクトを生成し、sendBroadcastメソッドを実行する。
図6は、BroadcastReceiverを起動するコードの一例を示している。1行目で起動条件が設定されたインテントオブジェクトが生成され、2行目でsendBroadcastメソッドが実行され、インテントが発行される。
【0043】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部12は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。アプリケーションのログは、straceやLogcat等のコマンドを実行することにより取得することができる。
【0044】
上述したように、本実施形態によれば、パッケージファイルに含まれるマニフェストファイルを解析することにより、アプリケーションに含まれるActivityとBroadcastReceiverのコンポーネントを特定し、そのコンポーネントを起動するインテントを生成し、コンポーネントを起動することによって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。このため、従来の動的解析の手法では解析することが困難であったコンポーネントを起動できるようになり、動的解析の網羅性を高めることができる。また、評価者の手動操作によって起動していたコンポーネントを自動的に起動することによって、評価コストを削減することができる。
【0045】
(第2の実施形態)
次に、本発明の第2の実施形態を説明する。Android(登録商標)では、UIDと呼ばれる、アプリケーション毎に異なるIDがアプリケーションに与えられる。UIDが異なるアプリケーション間ではリソースを共有することができず、Serviceに関しては、UIDが異なる他のアプリケーションからのインテントが解析対象のアプリケーションに届かない。しかし、sharedUserIdという仕組みを利用することで、2つのアプリケーションを同一のUIDで動作させることが可能となる。これによって、2つのアプリケーション間でリソースを共有し、Serviceのインテントによりコンポーネントを起動することができる。
【0046】
図7は、本実施形態によるアプリケーション解析装置の構成を示している。アプリケーション解析部11がインテント発行部110およびマニフェスト解析部111に加えてアプリケーション変更部112を有することが第1の実施形態と異なる。これ以外の構成は、第1の実施形態で説明した構成と同様である。
【0047】
図8はアプリケーション変更部112の構成を示している。アプリケーション変更部112は、ディスアセンブル部112a、マニフェスト変更部112b、アセンブル部112c、インストール部112dを有する。ディスアセンブル部112aは、解析対象のパッケージファイルをディスアセンブル(逆アセンブル)し、ソースファイルを取得する。マニフェスト変更部112bは、ディスアセンブルしたソースファイルに含まれるマニフェストファイルに、sharedUserIdのコードを追加することによって、マニフェストファイルを変更する。アセンブル部112cは、変更後のマニフェストファイルを含むソースファイルをアセンブルし、パッケージファイルを生成する。インストール部112dはアセンブル後のパッケージファイルを用いて記憶部10にアプリケーションをインストールする。前述したように、アプリケーションがインストールされると、パッケージファイルが展開されて記憶部10に各種ファイルが格納されると共に、記憶部10の所定のフォルダ(/data/app/)の配下にパッケージファイル自体が格納される。
【0048】
次に、アプリケーション解析装置の動作を説明する。
図9はアプリケーションの解析手順を示している。まず、Serviceのインテントによってコンポーネントを起動できるように、アプリケーション変更部112が解析対象のアプリケーションのパッケージファイルを変更する(ステップS200)。ステップS200では具体的には以下の処理が行われる。
【0049】
ディスアセンブル部112aは、解析対象のパッケージファイルをディスアセンブルし、パッケージファイルのソースファイルを取得する(ステップS200a)。ディスアセンブルを行う代表的なツールとして、Apk-toolやDedexerがある。続いて、マニフェスト変更部112bは、ディスアセンブルしたソースファイルに含まれるマニフェストファイルにコードを追加することによって、マニフェストファイルを変更する(ステップS200b)。
【0050】
具体的には、ステップS200bではマニフェスト変更部112bは、マニフェストファイルにおいて、「<manifest」という文字列で開始されるタグ内に「sharedUserId=”aaa.bbb” 」という文字列(コード)を追加する。「aaa.bbb」はUIDの一例である。アプリケーション解析部11を構成するアプリケーションのパッケージファイルに含まれるマニフェストファイルに記述されているsharedUserIdのコードと同一のコードが解析対象のアプリケーションのマニフェストファイルに追加される。つまり、アプリケーション解析部11を構成するアプリケーションと、変更後の解析対象のアプリケーションは同一のUIDを有することになる。
【0051】
続いて、アセンブル部112cは、アプリケーション解析部11を構成するアプリケーションのアセンブル時に使用した証明書と同一の証明書を使用して、変更後のマニフェストファイルを含むソースファイルに署名を施してアセンブルを行い、パッケージファイルを生成する(ステップS200c)。続いて、インストール部112dはアセンブル後のパッケージファイルを用いて記憶部10にアプリケーションをインストールする(ステップS200d)。
【0052】
パッケージファイルの変更後、マニフェスト解析部111は、記憶部10にインストールされた解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する(ステップS205)。端末にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ(/data/app/)の配下に保存されているので、ステップS205ではマニフェスト解析部111はこのフォルダを参照する。
【0053】
続いて、マニフェスト解析部111はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Serviceのクラス名とを取得する(ステップS210)。解析対象のアプリケーションのパッケージ名は、「<manifest」という文字列で開始されるタグ内の「package=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。
図4では、パッケージ名は「com.sample.app」である。Serviceのクラス名は、「<service」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。
図4では、クラス名は「.Main_Service」である。
【0054】
続いて、インテント発行部110は、ステップS210で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行(生成)し、記憶部10にインストールされているアプリケーションのコンポーネントを起動する(ステップS215)。アプリケーション解析部11を構成するアプリケーションと解析対象のアプリケーションが同一のUIDで動作する場合、Serviceは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。具体的には、ステップS215ではインテント発行部110はインテントオブジェクトを生成し、startServiceメソッドを実行する。
図10は、Serviceを起動するコードの一例を示している。1行目でパッケージ名とクラス名が設定されたインテントオブジェクトが生成され、2行目でstart Serviceメソッドが実行され、インテントが発行される。
【0055】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部12は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。
【0056】
上述したように、本実施形態によれば、Serviceに関して、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。なお、アプリケーション解析部11が第1の実施形態の機能と第2の実施形態の機能との両方を備えていてもよい。
【0057】
(第3の実施形態)
次に、本発明の第3の実施形態を説明する。第3の実施形態では、解析対象のアプリケーションが起動する端末装置と、アプリケーション解析装置とを有するアプリケーション解析システムについて説明する。
【0058】
図11は、本実施形態によるアプリケーション解析システムの構成を示している。アプリケーション解析システムは端末装置1とアプリケーション解析装置2を有する。端末装置1は、記憶部10と通信部13を有する。アプリケーション解析装置2は、アプリケーション解析部20、記憶部21、動的解析部22を有する。アプリケーション解析装置2は、例えばPC(Personal Computer)である。
【0059】
記憶部10は、解析対象のアプリケーションの実行ファイルを含むパッケージファイル(アプリケーションファイル)を記憶する。通信部13はアプリケーション解析装置2と通信を行う。
【0060】
アプリケーション解析部20は、解析対象のアプリケーションのパッケージファイルを用いて、アプリケーションの機能を解析する。本実施形態のアプリケーション解析部20はアプリケーションとして構成されている。アプリケーション解析部20は、通信部200、取得部201、インテント発行部202、マニフェスト解析部203を有する。通信部200は端末装置1と通信を行う。端末装置1とアプリケーション解析装置2の通信は、adb Interfaceを用いて行われる。adb Interfaceは、PCと、Android(登録商標)で動作する端末装置とを接続し、PCで動作するシェルから端末装置を操作できるインターフェースであり、Android(登録商標)のSDK(Software Development Kit)にツールとして用意されている。
【0061】
取得部201は、通信部200を介して端末装置1の通信部13と通信を行い、記憶部10に格納されている解析対象のアプリケーションのパッケージファイルと、起動したアプリケーションのログとを取得する。マニフェスト解析部203は、パッケージファイルに含まれるマニフェストファイルを解析し、実行ファイルに含まれるコンポーネントを特定する。インテント発行部202は、マニフェスト解析部203によって特定された各コンポーネントを起動するインテントを発行(生成)することにより、コンポーネント毎にアプリケーションを起動する。
【0062】
記憶部21は、アプリケーションの解析時に端末装置1から取得される解析対象のアプリケーションのパッケージファイルを記憶する。動的解析部22は、起動したアプリケーションの動的解析を行う。
【0063】
次に、アプリケーション解析システムの動作を説明する。
図12はアプリケーションの解析手順を示している。まず、取得部201は、通信部200を介して端末装置1の通信部13と通信を行い、記憶部10に格納されている解析対象のアプリケーションのパッケージファイルのコピーを取得する(ステップS300)。端末装置1にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ(/data/app/)の配下に保存されているので、このフォルダを参照することにより、パッケージファイルを取得することができる。adb Interfaceでは、PCから端末装置のデータを取得するadb pullコマンドがある。例えば「adb pull /data/app/AAA.apk」というコマンドを実行することによりパッケージファイルを取得することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。取得されたパッケージファイルは記憶部21に格納される。
【0064】
続いて、マニフェスト解析部111は、記憶部21に格納されている解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する(ステップS305)。Android(登録商標)のSDKでは、マニフェストファイルを抽出するツールとしてaaptが用意されている。ステップS305ではマニフェスト解析部111は、aaptを用いてマニフェストファイルを抽出する。例えば、「aapt d xmltree AAA.apk *Andrd*Manifest.xml」というコマンドを実行することによりマニフェストファイルを抽出することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。
【0065】
続いて、マニフェスト解析部203はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Activityのクラス名と、BroadcastReceiverの起動条件とを取得する(ステップS310)。ステップS310で取得される各情報の内容は、第1の実施形態で説明した内容と同様である。
【0066】
続いて、インテント発行部202は、ステップS310で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行(生成)する。インテント発行部202は、発行したインテントを、通信部200を介して端末装置1の通信部13へ送信し、記憶部10にインストールされているアプリケーションのコンポーネントを起動する(ステップS315)。
【0067】
Activityは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。Android(登録商標)では、adb Interfaceでインテントを送信するコマンドとして、amコマンドがある。例えば、「am start −n "com.sample.app","com.sample.app.Main_Activity"」というコマンドを実行することによりインテントを送信することができる。
【0068】
BroadcastReceiverは、起動条件として指定された条件のインテントを発行することで起動することができる。Activityのインテントと同様に、amコマンドを利用してBroadcastReceiverのインテントを送信することができる。例えば、「am broadcast −a “*andrd*.intent.action.BOOT_COMPLETED”」 というコマンドを実行することによりインテントを送信することができる。
【0069】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部22は、通信部200を介して端末装置1の通信部13と通信を行い、コンポーネントの動作結果が記録されたログを端末装置1から取得し、取得したログに基づいてアプリケーションの動的解析を行う。
【0070】
上記ではアプリケーション解析装置2で動的解析が行われるが、端末装置1で動的解析を行ってもよい。
図13は、本実施形態によるアプリケーション解析システムの他の構成例を示している。
図13に示すアプリケーション解析システムでは、端末装置1が動的解析部12を有している。アプリケーション解析部20は、解析対象のアプリケーションを構成するコンポーネントを起動した後、通信部200を介して端末装置1の通信部13と通信を行い、動的解析部12に動的解析の指示を与える。指示を受けた動的解析部12は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。
【0071】
上述したように、本実施形態によれば、ActivityとBroadcastReceiverに関して、解析対象のアプリケーションがインストールされた端末装置1と接続されたアプリケーション解析装置2からアプリケーションのコンポーネントを自動的かつ強制的に起動することができる。
【0072】
上述した各実施形態のアプリケーション解析部11,20はアプリケーションとして構成されている。アプリケーション解析部11,20を構成するアプリケーションのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ(上記の各実施形態のアプリケーション解析装置)に読み込ませ、実行させることにより、アプリケーション解析部11,20は、規定された処理を実行する。
【0073】
ここで、「コンピュータ」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0074】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0075】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。