(57)【特許請求の範囲】
【請求項１】
評価対象のアプリケーションの実行コードを含むアプリケーションファイルを記憶する第１の記憶部と、
アプリケーションを開発する際に使用可能なAPI（Application Program Interface）を示すAPI情報を記憶する第２の記憶部と、
前記実行コードを逆コンパイルし、前記実行コードに対応するソースコードを得る逆コンパイル部と、
スクリプト言語で記述されたスクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれるか否かを判定する判定部と、
前記スクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれると判定された場合に、前記ソースコードに基づいて、前記スクリプトが実行されることにより呼び出されるメソッドを特定する特定部と、
前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項２】
前記判定部は、前記スクリプトを外部サーバから取得する機能を利用するインスタンスを生成するコードが前記ソースコードに含まれるか否かを判定することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項３】
前記判定部はさらに、前記スクリプトの利用可否を決定するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする請求項２に記載のアプリケーション解析装置。
【請求項４】
前記判定部はさらに、外部サーバに自動で接続するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする請求項２または請求項３に記載のアプリケーション解析装置。
【請求項５】
前記特定部はさらに、特定したメソッドが実行されることにより呼び出されるメソッドを特定することを特徴とする請求項１〜請求項３のいずれか一項に記載のアプリケーション解析装置。
【請求項６】
前記特定部はさらに、特定したメソッドが記述されている前記ソースコード内の領域において変数を参照するコードを特定した後、当該コードが参照する変数に入力される値を取得するメソッドを特定することを特徴とする請求項１〜請求項５のいずれか一項に記載のアプリケーション解析装置。
【請求項７】
前記比較部は、前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較し、前記特定部によって特定されたメソッドが記述されている部分から、前記API情報が示すAPIと一致するAPIのコードを抽出することを特徴とする請求項１〜請求項６のいずれか一項に記載のアプリケーション解析装置。
【請求項８】
前記API情報は、端末内に存在する情報を取得するAPIを示すことを特徴とする請求項１〜請求項７のいずれか一項に記載のアプリケーション解析装置。
【請求項９】
請求項１〜請求項８のいずれか一項に記載のアプリケーション解析装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの機能を解析するアプリケーション解析装置に関する。また、本発明は、本アプリケーション解析装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
汎用OS（オペレーティングシステム）を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI（Application Program Interface） が豊富に用意されているAndroid（登録商標） OS が注目を集めている。
【０００３】
スマートフォンは、誰もが自由にアプリケーションを開発して公開でき、公開されたアプリケーションをユーザが自由にインストールできるプラットフォームである。公開されたアプリケーションをスマートフォンに導入することにより、スマートフォンの様々な機能を柔軟かつ容易に拡張することができる。本明細書では一例として、Android（登録商標） OS向けのアプリケーションについて記載する。
【０００４】
スマートフォンとPC（パーソナルコンピュータ）を比較した場合、スマートフォンは、利用者との結びつきがPCよりも緊密な機器であり、氏名、電話番号、メールアドレス、住所録、メールの送受信履歴、インターネットの閲覧履歴等の個人情報が集積している。また、端末の高機能化と、常に携帯される利用形態とから、従来のPCでは収集されなかった位置情報等の情報も容易に取得可能となり、情報が悪用される脅威に直面する。
【０００５】
アプリケーションの中には、OS の脆弱性を突いて管理者権限を奪ったり、端末に格納された個人情報を収集して外部に送信したりする悪性アプリケーションが存在する。特に、正規のアプリケーションを装いつつ、こうした不正な振る舞いを行う機能が組み込まれたトロイの木馬が現れ、感染が拡がっている。
【０００６】
Android（登録商標） OSの特徴として、安全性と利便性のトレードオフをユーザに委ねるパーミッション機構や、アプリケーションの可用性の向上のためにWeb 機能をアプリケーションに内包するWebkitの搭載が挙げられる。
【０００７】
パーミッション機構とは、端末内の情報や機能へのアクセス権の承認をアプリケーションに与える機構である。具体的には、アプリケーションの開発者が、マニフェストファイルと呼ばれるファイルに、アプリケーションで使用する機能をパーミッションとして定義しておき、アプリケーションがインストールされるときに、OS がユーザにパーミッションの使用許可を求める。しかしながら、スマートフォンに慣れていないユーザにとって、どのパーミッションがどのような危険性を持っているのかを理解することは難しい。したがって、アプリケーションが容易に入手可能な環境において個人情報を悪用される脅威からスマートフォンの利用者を保護する必要がある。
【０００８】
また、webkit とは、HTML のレンダリングエンジンであり、アプリケーションの開発者がブラウザ機能を簡単にアプリケーションに搭載できる機能である。Webkit を利用したアプリケーションと、サーバ側で作成された、HTML，CSS，JavaScript（登録商標）などによるWeb アプリケーションとを連携させた開発も盛んになってきている（例えば非特許文献１参照）。
【０００９】
以下では、スクリプト言語の一種であるJavaScript（登録商標）で記述されたスクリプト（スクリプトプログラム）との連携について説明する。なお、本明細書および図面では、便宜上、Android（登録商標）という文字列を*Andrd*という文字列で代用し、JavaScript（登録商標）という文字列を*JS*という文字列で代用し、Javascript（登録商標）という文字列を*Js*という文字列で代用している。すなわち、*Andrd*という文字列はAndroid（登録商標）という文字列と等価であり、*JS*という文字列はJavaScript（登録商標）という文字列と等価であり、*Js*という文字列はJavascript（登録商標）という文字列と等価である。
【００１０】
Android（登録商標） OSでは、アプリケーションはWebkit のWebViewクラスを利用することで、外部サーバに公開されたスクリプトを実行することができる。さらに、このスクリプト は、アプリケーションに定義されたメソッドを呼び出し、メソッドに記述されたAPIを実行することができる。したがって、外部サーバで公開されているスクリプトから、アプリケーションの宣言しているパーミッションの範囲内で、端末の個人情報を取得する権限や端末を操作する権限を有するAPI を実行させることができる。
【００１１】
この仕様を活用することで、幅の広いアプリケーションの開発が可能となることがAndroid（登録商標）の魅力の一つであるが、この仕様が悪用された場合は大きな脅威となる。例えば、開発者が、個人情報を取得するメソッドをアプリケーションに定義し、外部サーバのスクリプトを取得してスクリプトから該当のメソッドを実行するアプリケーションを作成することで、個人情報を漏洩するアプリケーションを実現することができる。
【００１２】
webkit のWebView クラスを利用して外部サーバのスクリプトからアプリケーションのメソッドを呼び出すためには、どのようなメソッドがスクリプト から実行できるのかをアプリケーションに定義しなくてはならない。図１４および図１５は、アプリケーションで外部サーバのスクリプトと連携させるプログラムの一例を示している。このプログラムは、高級言語で記述されたものである。
【００１３】
図１４の1 行目には、WebView のインスタンスを生成することが記述されている。2 行目には、スクリプトの利用の有無を設定することが記述されている。3行目および4 行目には、外部サーバのスクリプト から呼び出すことができるオブジェクトの登録を行うことが記述されている。図１５のように外部サーバのスクリプトから実行させたいメソッドを記述したクラスを作成しておくと、そのインスタンスが図１４の4 行目で登録される。5 行目には、外部サーバのURL の設定を行うことが記述されている。指定した外部サーバのスクリプトを実行したい場合に、そのスクリプトが置かれている外部サーバ のURL が記述される。5行目のコードが実行されたとき、アプリケーションは外部サーバのスクリプトをダウンロードし、端末内でスクリプトを実行する。
【００１４】
図１４ の4 行目の第2 引数（*andrd*）と、登録したオブジェクトのメソッド名（図１５のmethod_name）とをスクリプトに記述することで、外部サーバで公開されるスクリプトからアプリケーション内のメソッドを呼び出して実行することができる。図１４および図１５の例では、*andrd*.method_nameとスクリプトに記述することで、スクリプトから図１５のメソッドを実行することができる。また、端末内で取得した情報を外部に送信するコードをスクリプトに記述することで、メソッドを実行して得た値を外部に送信することもできる。したがって、ユーザから不可視であるHTML のformをスクリプトで作成し、アプリケーション内のメソッドを実行して得た値を自動でpost送信するプログラムを作成することで、情報漏洩アプリケーションを作成することができる。
【００１５】
これまで、アプリケーションを評価する方式として、Logcatと呼ばれるアプリケーションを実行した際に出力されるログ情報に着目した動的解析手法が提案されてきた（例えば、非特許文献２，３参照）。この手法は、正規表現を用いたシグネチャを作成してLogcatログに適用することで不正検知を行う手法であり、この手法を用いることにより、情報漏洩型と攻撃型のマルウェアを検知することができる。
【００１６】
また、アプリケーションを逆コンパイルして得られたコード情報を元にアプリケーションの挙動を解析する静的解析手法がある。非特許文献4に記載された記事では、端末内の情報を取得するコードと、取得した情報を外部サーバに送信するコードとを発見し、アプリケーションに潜在する脅威を判定する手法が記載されている。
【先行技術文献】
【非特許文献】
【００１７】
【非特許文献１】Jonathan Stark: Android アプリケーション開発ガイド HTML+CSS+JavaScript による開発手法，オライリー・ジャパン(2011)
【非特許文献２】磯原隆将，竹森敬祐，窪田歩，高野智秋, “Android向けアプリケーションの挙動に注目したマルウェア検知”, IEICE, SCIS2011, 3B3-2, 2011 年1 月
【非特許文献３】竹森敬祐，磯原隆将，窪田歩，高野智秋, “Android携帯電話上での情報漏洩検知”, IEICE, SICS2011, 3B3-32011 年1 月
【非特許文献４】Donato Ferrante, “Dissecting Android Malware”, [online], [retrieved on 2011-04-20], Retrieved from the Internet: <URL:http://www.inreverse.net/?p=1272>
【発明の概要】
【発明が解決しようとする課題】
【００１８】
外部サーバのスクリプトを利用する悪性アプリケーションを検知する場合、動的解析・静的解析のそれぞれの手法において、課題がある。
【００１９】
悪性アプリケーションの挙動は、外部サーバから取得したスクリプトのコードの内容によって変化する。このため、動的解析における課題は、攻撃者が外部サーバのスクリプトを変更するだけでアプリケーションの挙動を変化させることができる点である。すなわち、ある時点でアプリケーションの動的解析を行うために取得した外部サーバのスクリプトに悪性コードが含まれない場合、悪性の挙動を見逃してしまう。
【００２０】
また、端末内の情報を取得するメソッドはアプリケーションのプログラムに記述されるが、そのメソッドを実行するコードや、取得した情報を外部サーバに送信するコードは外部サーバのスクリプトに記述することが可能である。このため、静的解析における課題は、情報漏洩に関する全コードがアプリケーションのプログラムに存在するとは限らない点である。非特許文献４に記載された手法では、端末内の情報を取得するコードと、取得した情報を外部サーバに送信するコードとの両方が検証対象のアプリケーションに含まれていない限り、悪性アプリケーションを検知することができない。このため、外部サーバのスクリプトからアプリケーションのメソッドを実行して端末内の情報を取得し、取得した情報を外部サーバに送信する悪性の挙動を見逃してしまう。
【００２１】
本発明は、上述した課題に鑑みてなされたものであって、外部サーバのスクリプトを利用するアプリケーションに潜在する脅威を推定することができるアプリケーション解析装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２２】
本発明は、上記の課題を解決するためになされたもので、評価対象のアプリケーションの実行コードを含むアプリケーションファイルを記憶する第１の記憶部と、アプリケーションを開発する際に使用可能なAPI（Application Program Interface）を示すAPI情報を記憶する第２の記憶部と、前記実行コードを逆コンパイルし、前記実行コードに対応するソースコードを得る逆コンパイル部と、スクリプト言語で記述されたスクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれるか否かを判定する判定部と、前記スクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれると判定された場合に、前記ソースコードに基づいて、前記スクリプトが実行されることにより呼び出されるメソッドを特定する特定部と、前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較する比較部と、を備えたことを特徴とするアプリケーション解析装置である。
【００２３】
また、本発明のアプリケーション解析装置において、前記判定部は、前記スクリプトを外部サーバから取得する機能を利用するインスタンスを生成するコードが前記ソースコードに含まれるか否かを判定することを特徴とする。
【００２４】
また、本発明のアプリケーション解析装置において、前記判定部はさらに、前記スクリプトの利用可否を決定するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする。
【００２５】
また、本発明のアプリケーション解析装置において、前記判定部はさらに、外部サーバに自動で接続するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする。
【００２６】
また、本発明のアプリケーション解析装置において、前記特定部はさらに、特定したメソッドが実行されることにより呼び出されるメソッドを特定することを特徴とする。
【００２７】
また、本発明のアプリケーション解析装置において、前記特定部はさらに、特定したメソッドが記述されている前記ソースコード内の領域において変数を参照するコードを特定した後、当該コードが参照する変数に入力される値を取得するメソッドを特定することを特徴とする。
【００２８】
また、本発明のアプリケーション解析装置において、前記比較部は、前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較し、前記特定部によって特定されたメソッドが記述されている部分から、前記API情報が示すAPIと一致するAPIのコードを抽出することを特徴とする。
【００２９】
また、本発明のアプリケーション解析装置において、前記API情報は、端末内に存在する情報を取得するAPIを示すことを特徴とする。
【００３０】
また、本発明は、上記のアプリケーション解析装置としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【００３１】
本発明によれば、アプリケーションの実行コードを逆コンパイルして得たソースコードを用いて、スクリプトを外部サーバから取得する設定に関する情報がソースコードに含まれるか否かを判定することによって、外部サーバのスクリプトの利用の有無が分かる。また、スクリプトが実行されることにより呼び出されるメソッドを特定し、ソースコードにおいて、特定されたメソッドが記述されている部分に含まれる情報とAPI情報とを比較することによって、スクリプトの実行により実行される端末の機能が分かる。したがって、外部サーバのスクリプトを利用するアプリケーションに潜在する脅威を推定することができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の一実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図２】本発明の一実施形態における逆コンパイルによって得られるソースコードを示す参考図である。
【図３】本発明の一実施形態における悪性APIリストを示す参考図である。
【図４】本発明の一実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。
【図５】本発明の一実施形態におけるコードを示す参考図である。
【図６】本発明の一実施形態におけるコードを示す参考図である。
【図７】本発明の一実施形態におけるコードを示す参考図である。
【図８】本発明の一実施形態におけるコードを示す参考図である。
【図９】本発明の一実施形態におけるコードを示す参考図である。
【図１０】本発明の一実施形態におけるコードを示す参考図である。
【図１１】本発明の一実施形態におけるコードを示す参考図である。
【図１２】本発明の一実施形態におけるコードを示す参考図である。
【図１３】本発明の一実施形態における悪性APIを含むコードを示す参考図である。
【図１４】アプリケーションで外部サーバのスクリプトと連携させるプログラムを示す参考図である。
【図１５】アプリケーションで外部サーバのスクリプトと連携させるプログラムを示す参考図である。
【発明を実施するための形態】
【００３３】
以下、図面を参照し、本発明の実施形態を説明する。本発明の一実施形態によるアプリケーション解析装置は、アプリケーションの実行コードを逆コンパイルして得られるソースコードを解析し、スクリプト（スクリプトプログラム）を外部サーバから取得する設定に関する情報の有無を確認する。また、アプリケーション解析装置は、ソースコードを解析し、スクリプトが実行されることにより呼び出されるメソッドを特定し、特定されたメソッドにおいて、情報漏洩に関するAPIの有無を確認する。
【００３４】
スクリプトを外部サーバから取得する設定に関する情報がソースコードに含まれる場合、アプリケーションが外部サーバのスクリプトを利用する可能性がある。また、スクリプトが実行されることにより呼び出されるメソッドに、情報漏洩に関するAPIが含まれる場合、スクリプトの実行によって、端末内の情報が取得される可能性がある。したがって、スクリプトを外部サーバから取得する設定に関する情報がソースコードに含まれるという条件と、スクリプトが実行されることにより呼び出されるメソッドに、情報漏洩に関するAPIが含まれるという条件の両方が満たされる場合には、アプリケーションが外部サーバのスクリプトを利用して端末内の情報を取得する脅威があると推定することができる。
【００３５】
以下、本実施形態によるアプリケーション解析装置の構成を説明する。図１は、アプリケーション解析装置の構成を示している。図１に示すように、アプリケーション解析装置は、アプリケーション記憶部１、逆コンパイル部２、設定判定部３、メソッド特定部４、悪性APIリスト記憶部５、脅威推定部６、および表示部７を有する。アプリケーション記憶部１および悪性APIリスト記憶部５は別個の記憶部として構成されているが、これらの記憶部は異なる記憶媒体上の記憶領域であってもよいし、同一の記憶媒体上の異なる記憶領域であってもよい。本実施形態によるアプリケーション解析装置は、例えば携帯端末用のアプリケーションを通信ネットワーク上で販売する販売サイトを管理する企業に設置される。
【００３６】
アプリケーション記憶部１は、解析対象のアプリケーションの実行ファイルであるパッケージファイル（アプリケーションファイル）を記憶する。パッケージファイルは、例えば拡張子が.apkのファイルであり、命令列を含む実行コード（例えば拡張子が.dex）、アプリケーションが利用する権限が定義されたマニフェストファイル（例えば拡張子が.xml）、アプリケーションが利用する画像ファイル（例えば拡張子が.jpg）等を含む。
【００３７】
逆コンパイル部２は、解析対象のアプリケーションの実行コードを逆コンパイルし、ソースコード（ソースファイル）を得る。逆コンパイルの結果として得られるソースコードは、例えば拡張子が.ddxのファイルである。図２は、実行ファイルを逆コンパイルすることにより得られるソースコードを示している。ソースコードは、クラス毎のファイルに分かれており、図２に示す例では、ソースコードは、拡張子が.ddxである８個のファイルに分かれている。
【００３８】
設定判定部３は、スクリプト言語（本実施形態ではJavaScript（登録商標））で記述されたスクリプトを外部サーバから取得する設定に関する情報がソースコードに含まれるか否かを判定する。メソッド特定部４は、スクリプトが実行されることにより呼び出されるメソッドをソースコードから特定する。
【００３９】
悪性APIリスト記憶部５は、アプリケーションを開発する際に使用可能な命令や関数の集合であるAPIのうち、悪性アプリケーションで利用されやすい、情報漏洩に関係するAPIのリストである悪性APIリスト（API情報）を記憶する。図３は悪性APIリストの一例を示している。悪性APIリストは、ソースコード中に出現するAPIの文字列と、APIが実行されたときの脅威の種別と、その脅威の危険度とが関連付けられた表形式のリストである。図３では、端末内に存在する端末識別番号や、端末電話番号、OSのバージョン情報、SIM（Subscriber Identity Module）の固有番号、アカウント情報を取得するAPIが登録されている。危険度は、Low、Medium、Highの３段階で表され、危険度が高くなるほど、アプリケーションを実行した場合のユーザへのリスクが高まる。
【００４０】
脅威推定部６は、ソースコードにおいて、メソッド特定部４によって特定されたメソッドが記述されている部分に含まれる情報と悪性APIリスト内の悪性APIの文字列とを比較し、ソースコード内の悪性APIの有無を確認することにより、アプリケーションに潜在する脅威を推定する。表示部７は、アプリケーションの解析結果等を表示する。
【００４１】
次に、アプリケーション解析装置の動作を説明する。図４はアプリケーション解析装置の動作を示している。まず、逆コンパイル部２は、アプリケーション記憶部１に格納されている解析対象のアプリケーションのパッケージファイルから実行コードを読み出して逆コンパイルし、ソースファイルを得る（ステップＳ１００）。
【００４２】
続いて、設定判定部３は、ステップＳ１００で得られたソースコードに基づいて、WebViewを利用する設定に関する解析を行う（ステップＳ１０５）。より具体的には、設定判定部３は以下の処理を行う。設定判定部３は、ステップＳ１００で得られた全てのソースコードに対して、WebViewのインスタンスを生成するコード（new-instanceと*andrd*/webkit/WebView）を検索する。コードの検索は、文字列のパターンマッチングにより行われる。これは、以下のコードの検索においても同様である。図５は、WebViewのインスタンスを生成するコードの一例を示している。図５に示す例では、１行目にWebViewのインスタンスを生成するコード（new-instanceと*andrd*/webkit/WebViewを含む文字列）があり、このコードが発見される。
【００４３】
前述したように、WebView クラスを利用して外部サーバのスクリプトからアプリケーションのメソッドを呼び出すことが可能となる。このため、WebViewのインスタンスを生成するコードが存在する場合、アプリケーションがスクリプトを外部サーバから取得すると推定することができる。
【００４４】
ステップＳ１０５に続いて、設定判定部３は、ステップＳ１０５における解析の結果に基づいて、解析対象のアプリケーションがWebViewを使用しているか否かを判定する（ステップＳ１１０）。WebViewのインスタンスを生成するコードが発見されなかった場合、解析対象のアプリケーションはWebViewを使用していないので、設定判定部３は、アプリケーションに潜在する脅威はないと判定し、この判定の結果をステップＳ１０５の処理結果として脅威推定部６に通知する。この後、処理はステップＳ１５５に進む。
【００４５】
また、WebViewのインスタンスを生成するコードが発見された場合、解析対象のアプリケーションはWebViewを使用しているので、アプリケーションに脅威が潜在する可能性がある。この場合、設定判定部３は、ステップＳ１００で得られたソースコードに基づいて、スクリプトを利用する設定に関する解析を行う（ステップＳ１１５）。
【００４６】
より具体的には、設定判定部３は以下の処理を行う。設定判定部３は、ステップＳ１００で得られた全てのソースコードに対して、スクリプトの利用可否を決定するメソッド名（*andrd*/webkit/WebSettings/set*JS*Enabled）を検索する。図６は、スクリプトの利用可否を決定するコードの一例を示している。図６に示す例では、２行目にスクリプトの利用可否を決定するメソッド名（*andrd*/webkit/WebSettings/set*JS*Enabled）があり、このメソッド名が発見される。このメソッド名が存在する場合、設定判定部３は、メソッド名の第２引数（v3）を特定する。
【００４７】
その後、設定判定部３は、メソッド名が存在したソースコードにおいて、第２引数を生成している箇所に遡り、その第２引数に代入される値を確認する。図６に示す例では、１行目で第２引数に値が代入されている。値が０ であった場合、スクリプトの利用が無効であり、値が１ であった場合、スクリプトの利用が有効である。スクリプトの利用が有効である場合、アプリケーションがスクリプトを外部サーバから取得すると推定することができる。
【００４８】
ステップＳ１１５に続いて、設定判定部３は、ステップＳ１１５における解析の結果に基づいて、解析対象のアプリケーションにおいてスクリプトの利用が有効であるか否かを判定する（ステップＳ１２０）。スクリプトの利用が無効であった場合、あるいは、スクリプトの利用可否を決定するメソッド名が存在しなかった場合、アプリケーションはスクリプトを使用しないので、設定判定部３は、アプリケーションに潜在する脅威はないと判定し、この判定の結果をステップＳ１１５の処理結果として脅威推定部６に通知する。この後、処理はステップＳ１５５に進む。
【００４９】
また、スクリプトの利用が有効であった場合、設定判定部３は、ステップＳ１００で得られたソースコードに基づいて、外部サーバへ自動で接続する設定に関する解析を行う（ステップＳ１２５）。外部サーバへ自動で接続する設定がなされていなくても、ユーザの操作により端末が外部サーバへ接続して外部のスクリプトを利用することは可能である。しかし、外部サーバへ自動で接続する設定がなされている場合、アプリケーションが起動するのと同時に、ユーザにスクリプトの実行を認識させることなくスクリプトが実行される可能性があるため、端末が脅威に晒される確率が増す。このため、設定判定部３は、外部サーバへ自動で接続する設定の有無を確認する。
【００５０】
より具体的には、設定判定部３は以下の処理を行う。設定判定部３は、ステップＳ１００で得られた全てのソースコードに対して、外部サーバへ接続するメソッド名（*andrd*/webkit/WebView/loadUrl）を検索する。図７は、外部サーバへ自動で接続するコードの一例を示している。図７に示す例では、２行目に外部サーバへ自動で接続するメソッド名（*andrd*/webkit/WebView/loadUrl）があり、このメソッド名が発見される。このメソッド名が存在する場合、設定判定部３は、メソッド名の第２引数（v2）を特定する。この第２引数は、接続先のURLを示している。
【００５１】
その後、設定判定部３は、メソッド名が存在したソースコードにおいて、第２引数を生成している箇所に遡り、その第２引数に代入されるURLを確認する。図７に示す例では、１行目で第２引数にURL（http://www.akusei-j-script.com）が代入されている。設定判定部３は、外部サーバへ自動で接続するメソッド名の有無をステップＳ１２５の処理結果として脅威推定部６に通知する。また、外部サーバへ自動で接続するメソッド名が存在した場合には、設定判定部３は、接続先のURLもステップＳ１２５の処理結果として脅威推定部６に通知する。
【００５２】
ステップＳ１２５に続いて、メソッド特定部４は、ステップＳ１００で得られたソースコードに基づいて、スクリプトから呼び出されるメソッドを定義するクラスに関する解析を行う（ステップＳ１３０）。より具体的には、メソッド特定部４は以下の処理を行う。メソッド特定部４は、ステップＳ１００で得られた全てのソースコードに対して、スクリプトから呼び出されるオブジェクトを設定するメソッド名（*andrd*/webkit/WebView/add*Js*Interface）を検索する。図８は、スクリプトから呼び出されるメソッドを定義するコードの一例を示している。図８に示す例では、４行目にスクリプトから呼び出されるメソッドを定義するメソッド名（*andrd*/webkit/WebView/add*Js*Interface）があり、このメソッド名が発見される。このメソッド名が存在する場合、メソッド特定部４は、メソッド名の第２引数（v0）を特定する。
【００５３】
その後、メソッド特定部４は、メソッド名が存在したソースコードにおいて、第２引数を生成しているコード（new-instance）を検索し、第２引数に設定されるクラス名を確認する。図８に示す例では、１行目で第２引数（v0）が生成され、クラス名（Main$*Js*Object）が設定されている。スクリプトから呼び出されるメソッドを定義するクラスが設定されている場合、スクリプトが実行されることによりアプリケーション内のメソッドが呼び出されて実行される可能性がある。
【００５４】
ステップＳ１３０における解析では、アプリケーション内のメソッドを呼び出すスクリプトが、外部サーバから取得したスクリプトであるか否かは分からない。しかし、ステップＳ１３０における解析結果をステップＳ１０５，Ｓ１１５，Ｓ１２５における解析結果と総合することにより、アプリケーションが外部サーバから取得したスクリプトが実行されることによりアプリケーション内のメソッドが呼び出されて実行されると推定することができる。
【００５５】
ステップＳ１３０に続いて、メソッド特定部４は、ステップＳ１３０における解析の結果に基づいて、解析対象のアプリケーションにおいて、スクリプトから呼び出されるメソッドを定義するクラスが存在するか否かを判定する（ステップＳ１３５）。スクリプトから呼び出されるメソッドを定義するクラスが存在しなかった場合（スクリプトから呼び出されるオブジェクトを設定するメソッド名が存在しなかった場合）、アプリケーションにはスクリプトから呼び出されるメソッドが存在しないので、メソッド特定部４は、アプリケーションに潜在する脅威はないと判定し、この判定の結果をステップＳ１３０の処理結果として脅威推定部６に通知する。この後、処理はステップＳ１５５に進む。
【００５６】
また、スクリプトから呼び出されるメソッドを定義するクラスが存在した場合（スクリプトから呼び出されるオブジェクトを設定するメソッド名が存在した場合）、メソッド特定部４は、特定したクラス内のソースコードの記述から、そのクラスに含まれる全てのメソッドの領域を特定する（ステップＳ１４０）。メソッドの領域は、文字列（.method）と文字列（.end method）とで挟まれた領域である。メソッド特定部４は、文字列のパターンマッチングによりメソッドの領域を特定する。メソッド特定部４は、特定したメソッドの領域をステップＳ１４０の処理結果として脅威推定部６に通知する。
【００５７】
ステップＳ１４０では、スクリプトから実行可能なメソッドを定義するクラス内のメソッドを特定したが、特定したメソッド内で更に他のクラスのメソッドを呼び出すことが考えられる。このため、より詳細な解析を行うには、スクリプトから実行可能なメソッドに加えて、そのメソッドから呼び出される他のクラスのメソッドも特定することがより望ましい。ステップＳ１４０に続いて、メソッド特定部４は、ステップＳ１４０で特定したメソッドから呼び出される他のクラスのメソッドの領域を特定する（ステップＳ１４５）。より具体的には、メソッド特定部４は以下の処理を行う。
【００５８】
メソッド特定部４は、ステップＳ１４０で特定したメソッドの領域の記述に基づいて、他のクラスを呼び出しているコード（new-instance）を検索し、そのコードの記述からクラス名を特定する。図９は、他のクラスのメソッドを呼び出すメソッドを実行するコードの一例を示している。図９に示す例では、１行目に他のクラスのメソッドを呼び出すメソッドを実行するコード（new-instance）があり、クラス名（Leak）が設定されている。続いて、メソッド特定部４は、メソッドを実行するコード（invoke-virtual）と、特定したクラス名（Leak）と文字列（Ljava/lang）とを検索することにより、他のクラスのメソッドを呼び出すメソッド名を特定する。図９に示す例では、２行目において、Leak クラスのインスタンスが生成され、start-leak というString 型のメソッドが実行されている。
【００５９】
さらに、メソッド特定部４は、特定したクラスのソースコードにおいて、特定したメソッドの領域を特定する。図２に示したように、ソースコードはクラス毎に分かれており、メソッド特定部４は、特定したクラスのソースコードを選択し、そのソースコードに基づいてメソッドの領域を特定する。図１０は、Leakクラスのstart-leakメソッドのコードの一例を示している。図１０に示すように、メソッド名（start-leak）が含まれ、文字列（.method）と文字列（.end method）とで挟まれた領域がメソッドの領域として特定される。メソッド特定部４は、特定したメソッドの領域をステップＳ１４５の処理結果として脅威推定部６に通知する。
【００６０】
より詳細な解析を行うためには、ステップＳ１４５で特定したメソッドの領域において、ステップＳ１４５で特定したメソッドから呼び出される他のクラスのメソッドの領域を特定する処理を行ってもよい。このように、特定したメソッドの領域において、そのメソッドから呼び出される他のクラスのメソッドを特定するという処理を繰り返し行ってもよい。
【００６１】
ステップＳ１４５に続いて、メソッド特定部４は、ステップＳ１４０，Ｓ１４５で特定したメソッドにおける変数の参照に関する解析を行う（ステップＳ１５０）。より具体的には、メソッド特定部４は以下の処理を行う。メソッド特定部４は、ステップＳ１４０，Ｓ１４５で得られた全てのメソッドの記述に対して、変数を参照するコード（iget-object）と文字列（Ljava/lang）とを検索することにより、呼び出されるクラス名と変数名を特定する。
【００６２】
図１１は、変数を参照するコードの一例を示している。図１１に示す例では、１行目に変数を参照するコード（iget-object）があり、Mainクラスに定義されたvariable というString 型の変数が参照されている。続いて、メソッド特定部４は、特定したクラスのソースコードを選択し、そのソースコードに基づいて、特定した変数に値を代入するコード（iput-object）を検索し、その変数に入力される値を取得するメソッドの領域を特定する。図１２は、変数に値を代入するコードの一例を示している。図１２に示す例では、３行目に変数（variable）に値を代入するコード（iput-object）があり、このコード名が発見される。
【００６３】
変数に代入する値を取得するコードは、同じメソッド内において、変数に値を代入するコードよりも前に記述される。図１２に示す例では、３行目で第１引数であるv1の値が変数variable に代入されており、１行目でgetLine1Number を実行して取得した値が２行目で第１引数v1 に入力されている。メソッド特定部４は、メソッドの先頭位置から変数に値を代入するコードが記述されている位置までの領域をメソッドの領域として特定する。図１２に示す例では、文字列（.method）と文字列（iput-object）とで挟まれた領域がメソッドの領域として特定される。メソッド特定部４は、特定したメソッドの領域をステップＳ１５０の処理結果として脅威推定部６に通知する。
【００６４】
ステップＳ１５０に続いて、脅威推定部６は、前のステップの処理結果に基づいて、アプリケーションに潜在する脅威を推定する（ステップＳ１５５）。より具体的には、脅威推定部６は以下の処理を行う。ステップＳ１１０，Ｓ１２０，Ｓ１３５のいずれかにおいて、アプリケーションに潜在する脅威はないと判定された場合、脅威推定部６は、アプリケーションに潜在する脅威がないことを示す情報を表示部７に表示する。
【００６５】
また、ステップＳ１４０，Ｓ１４５，Ｓ１５０の処理結果が脅威推定部６に通知された場合、脅威推定部６は、悪性APIリスト記憶部５から悪性APIリストを読み出し、ステップＳ１４０，Ｓ１４５，Ｓ１５０のそれぞれにおいて特定したメソッドの領域の記述と、APIリストに含まれるAPIの名称とを比較して文字列のパターンマッチングを行い、APIリストに含まれるAPIの名称と一致する文字列を検索する。APIリストに含まれるAPIの名称と一致する文字列が全くなかった場合、脅威推定部６は、アプリケーションに潜在する脅威がないことを示す情報を表示部７に表示する。
【００６６】
また、APIリストに含まれるAPIの名称と一致する文字列があった場合、脅威推定部６は、一致したAPIの名称および危険度の一覧と、ステップＳ１２５における処理結果である、外部サーバへ自動で接続するメソッド名の有無と、接続先のＵＲＬとを表示部７に表示する。この表示によって、アプリケーションに潜在する脅威をユーザに通知することができる。図１３は、APIリストに含まれるAPIの名称と一致する文字列を含むコードを抽出した一例を示している。図１３に示す例では、端末の識別番号を取得するgetDeviceIdと、端末の電話番号を取得するgetLine1Numberと、アカウント情報を取得するgetAccountsとが抽出されている。
【００６７】
表示部７が表示する内容は、適宜、変更することが可能である。例えば、脅威推定部６が、APIリストに含まれるAPIの名称と一致したAPIの数を計算し、その数を危険度の評価値として表示部７に表示してもよい。あるいは、予めAPIリストの危険度を数値化しておき、脅威推定部６が、APIリストに含まれるAPIの名称と一致したAPIの危険度の数値を合計し、その合計値を危険度の評価値として表示部７に表示してもよい。
【００６８】
上述したように、本実施形態によれば、アプリケーションの実行コードを逆コンパイルして得たソースコードを用いて、スクリプトを外部サーバから取得する設定に関する解析を行うと共に、スクリプトが実行されることにより呼び出されるメソッドの記述から、悪性APIリストに含まれるAPIと一致するAPIを抽出することによって、外部サーバのスクリプトを利用するアプリケーションに潜在する脅威を推定することができる。
【００６９】
また、ステップＳ１０５において、スクリプトを外部サーバから取得する機能を利用するインスタンスを生成するコードに関する解析を行うことによって、アプリケーションがスクリプトを外部サーバから取得するか否かを推定することができる。
【００７０】
同様に、ステップＳ１２０において、スクリプトの利用可否を決定するメソッドに関する解析を行うことによって、あるいは、ステップＳ１２５において、外部サーバに自動で接続するメソッドに関する解析を行うことによって、アプリケーションがスクリプトを外部サーバから取得するか否かを推定することができる。
【００７１】
また、ステップＳ１４５において、ステップＳ１４０で特定したメソッドが実行されることにより呼び出されるメソッドを特定することによって、あるいは、ステップＳ１５０において、変数を参照するコードを特定した後、そのコードが参照している変数に入力される値を取得するメソッドを特定することによって、アプリケーションに潜在する脅威となるAPIが記述される領域を特定することができる。さらに、脅威となるAPIを実行するコードの検知漏れをより低減することができる。
【００７２】
また、端末内に存在する情報を取得するAPIの情報で悪性APIリストを構成することによって、外部サーバのスクリプトを利用するアプリケーションに潜在する情報漏洩の脅威を推定することができる。
【００７３】
上述したアプリケーション解析装置は、その動作および機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行させることにより、実現される。ここで、「コンピュータ」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００７４】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００７５】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００７６】
１・・・アプリケーション記憶部（第１の記憶部）、２・・・逆コンパイル部、３・・・設定判定部（判定部）、４・・・メソッド特定部（特定部）、５・・・悪性APIリスト記憶部（第２の記憶部）、６・・・脅威推定部（比較部）、７・・・表示部
【図１】
0005654944.tif 000002
【図２】
0005654944.tif 000003
【図３】
0005654944.tif 000004
【図４】
0005654944.tif 000005
【図５】
0005654944.tif 000006
【図６】
0005654944.tif 000007
【図７】
0005654944.tif 000008
【図８】
0005654944.tif 000009
【図９】
0005654944.tif 000010
【図１０】
0005654944.tif 000011
【図１１】
0005654944.tif 000012
【図１２】
0005654944.tif 000013
【図１３】
0005654944.tif 000014
【図１４】
0005654944.tif 000015
【図１５】
0005654944.tif 000016