説明

アプリケーション解析装置およびプログラム

【課題】外部サーバのスクリプトを利用するアプリケーションに潜在する脅威を推定することができるアプリケーション解析装置およびプログラムを提供する。
【解決手段】逆コンパイル部2は、評価対象のアプリケーションの実行コードを逆コンパイルし、実行コードに対応するソースコードを得る。設定判定部3は、スクリプト言語で記述されたスクリプトを外部サーバから取得する設定に関する情報がソースコードに含まれるか否かを判定する。メソッド特定部4は、この情報がソースコードに含まれると判定された場合に、ソースコードに基づいて、スクリプトが実行されることにより呼び出されるメソッドを特定する。脅威推定部6は、ソースコードにおいて、特定されたメソッドが記述されている部分に含まれる情報と、アプリケーションを開発する際に使用可能なAPIを示すAPI情報とを比較する。

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

【特許請求の範囲】
【請求項1】
評価対象のアプリケーションの実行コードを含むアプリケーションファイルを記憶する第1の記憶部と、
アプリケーションを開発する際に使用可能なAPI(Application Program Interface)を示すAPI情報を記憶する第2の記憶部と、
前記実行コードを逆コンパイルし、前記実行コードに対応するソースコードを得る逆コンパイル部と、
スクリプト言語で記述されたスクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれるか否かを判定する判定部と、
前記スクリプトを外部サーバから取得する設定に関する情報が前記ソースコードに含まれると判定された場合に、前記ソースコードに基づいて、前記スクリプトが実行されることにより呼び出されるメソッドを特定する特定部と、
前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較する比較部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項2】
前記判定部は、前記スクリプトを外部サーバから取得する機能を利用するインスタンスを生成するコードが前記ソースコードに含まれるか否かを判定することを特徴とする請求項1に記載のアプリケーション解析装置。
【請求項3】
前記判定部はさらに、前記スクリプトの利用可否を決定するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする請求項2に記載のアプリケーション解析装置。
【請求項4】
前記判定部はさらに、外部サーバに自動で接続するメソッドが前記ソースコードに含まれるか否かを判定することを特徴とする請求項2または請求項3に記載のアプリケーション解析装置。
【請求項5】
前記特定部はさらに、特定したメソッドが実行されることにより呼び出されるメソッドを特定することを特徴とする請求項1〜請求項3のいずれか一項に記載のアプリケーション解析装置。
【請求項6】
前記特定部はさらに、特定したメソッドが記述されている前記ソースコード内の領域において変数を参照するコードを特定した後、当該コードが参照する変数に入力される値を取得するメソッドを特定することを特徴とする請求項1〜請求項5のいずれか一項に記載のアプリケーション解析装置。
【請求項7】
前記比較部は、前記ソースコードにおいて、前記特定部によって特定されたメソッドが記述されている部分に含まれる情報と前記API情報とを比較し、前記特定部によって特定されたメソッドが記述されている部分から、前記API情報が示すAPIと一致するAPIのコードを抽出することを特徴とする請求項1〜請求項6のいずれか一項に記載のアプリケーション解析装置。
【請求項8】
前記API情報は、端末内に存在する情報を取得するAPIを示すことを特徴とする請求項1〜請求項7のいずれか一項に記載のアプリケーション解析装置。
【請求項9】
請求項1〜請求項8のいずれか一項に記載のアプリケーション解析装置としてコンピュータを機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2012−234401(P2012−234401A)
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【出願番号】特願2011−103114(P2011−103114)
【出願日】平成23年5月2日(2011.5.2)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】