JP2016206739A - アプリケーション解析装置、アプリケーション解析方法、およびプログラム - Google Patents

アプリケーション解析装置、アプリケーション解析方法、およびプログラム Download PDF

Info

Publication number
JP2016206739A
JP2016206739A JP2015084033A JP2015084033A JP2016206739A JP 2016206739 A JP2016206739 A JP 2016206739A JP 2015084033 A JP2015084033 A JP 2015084033A JP 2015084033 A JP2015084033 A JP 2015084033A JP 2016206739 A JP2016206739 A JP 2016206739A
Authority
JP
Japan
Prior art keywords
name
function
class
program
application
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015084033A
Other languages
English (en)
Other versions
JP6466234B2 (ja
Inventor
秀明 川端
Hideaki Kawabata
秀明 川端
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KDDI Corp
Original Assignee
KDDI Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KDDI Corp filed Critical KDDI Corp
Priority to JP2015084033A priority Critical patent/JP6466234B2/ja
Publication of JP2016206739A publication Critical patent/JP2016206739A/ja
Application granted granted Critical
Publication of JP6466234B2 publication Critical patent/JP6466234B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】アプリケーションのプライバシー評価に有益な情報を取得することができる技術を提供する。
【解決手段】静的解析部10は、利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する。実行部20は、アプリケーションのプログラムを実行する。動的解析部30は、プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、アプリケーションのプログラムの実行結果に、第1のクラス名と第1の関数名との組み合わせが含まれるか否かを解析することにより、第2の関数が実行されたか否かを判定する。出力部50は、動的解析部30による判定の結果を示す情報を出力する。
【選択図】図1

Description

本発明は、アプリケーションを解析する技術に関する。
アプリケーションの安全性を解析する技術として、アプリケーションの挙動に基づいてアプリケーションの安全性を判定する動的解析技術がある(例えば、特許文献1参照)。プライバシーの観点でアプリケーションの安全性を評価するプライバシー評価では、アプリケーションが提示するプライバシーポリシーの内容とアプリケーションの実際の挙動とが一致しているか否かを判断することが重要である。プライバシーポリシーでは、アプリケーションが取り扱う情報と、情報を取り扱う目的と、情報の送信先とが規定されている。動的解析では、アプリケーションが個人情報(利用者情報)を含むデータを送信した場合、その挙動がプライバシーポリシーに規定された挙動と一致しているか否かが解析される。
動的解析技術では、アプリケーションに対する操作に関する課題がある。利用者がアプリケーション対する操作を行わない限り、完全な動的解析を行うことはできない。人が手動による操作を行う場合、人件コストが発生する。このため、コンピュータがアプリケーションに対する操作を行う自動操作技術が提案されている。この自動操作技術と動的解析技術とを利用する自動安全性解析装置がある。また、自動操作技術に関しては、テストケースに従ってアプリケーションのプログラムを実行し、プログラムのエラーを検知する技術もある。
自動操作技術において、アプリケーションの実行時に現れる可能性がある挙動のうちどの程度の挙動が実現されたかという点を評価する技術がある。例えば、呼び出されたクラスとメソッドとの数を確認する方法(コードカバレッジ)、および表示されたアプリケーション画面の数を確認する方法などがある。
国際公開第2010/134325号
従来の自動操作技術では、アプリケーションの挙動のうちどの程度の挙動が実現されたかという点が評価される。しかし、プライバシー評価では、利用者情報の取得に関する処理がアプリケーションに対する操作により確実に実行されたかどうかが重要である。例えば、アプリケーションの挙動の全体に対して90%の挙動が実現された場合でも、利用者情報の取得に関する処理が実行されていなければ、プライバシー評価が不十分である。あるいは、アプリケーションの挙動の全体に対して10%の挙動が実現された場合でも、利用者情報の取得に関する処理が実行されていれば、十分なプライバシー評価が可能である。プライバシー評価が十分であれば、実現されていない挙動の実現を待たずにアプリケーションの操作を終了することができる。
本発明は、上記に鑑み、アプリケーションのプライバシー評価に有益な情報を取得することができる技術を提供することを目的とする。
本発明は、利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する静的解析部と、前記プログラムを実行する実行部と、前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する動的解析部と、前記動的解析部による判定の結果を示す情報を出力する出力部と、を有することを特徴とするアプリケーション解析装置である。
また、本発明のアプリケーション解析装置は、前記第1のクラス名と前記第1の関数名との組み合わせの総数に対する、実行された前記第2の関数に関する前記第1のクラス名と前記第1の関数名との組み合わせの数の割合を算出する評価部をさらに有し、前記出力部は、前記割合を出力することを特徴とする。
また、本発明のアプリケーション解析装置において、前記プログラムは、ライブラリを含み、前記静的解析部はさらに、前記第1のクラスが定義された第1のライブラリの名称である第1のパッケージ名を、前記プログラムを解析して取得し、前記動的解析部は、前記第2の関数名と、前記第2のクラス名と、前記第2のクラスが定義された第2のライブラリの名称である第2のパッケージ名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名と前記第1のパッケージ名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定することを特徴とする。
また、本発明のアプリケーション解析装置において、前記静的解析部はさらに、前記第1のクラスが定義された前記アプリケーションの名称である第3のパッケージ名を、前記プログラムを解析して取得し、前記動的解析部は、前記第2の関数名と、前記第2のクラス名と、前記第2のクラスが定義された前記アプリケーションの前記第3のパッケージ名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名と前記第3のパッケージ名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定することを特徴とする。
また、本発明は、利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する第1のステップと、前記プログラムを実行する第2のステップと、前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する第3のステップと、前記第3のステップによる判定の結果を示す情報を出力する第4のステップと、を有することを特徴とするアプリケーション解析方法である。
また、本発明は、利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する第1のステップと、前記プログラムを実行する第2のステップと、前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する第3のステップと、前記第3のステップによる判定の結果を示す情報を出力する第4のステップと、をコンピュータに実行させるためのプログラムである。
本発明によれば、アプリケーションのプログラムが実行されたときに、利用者情報を取得する第1の関数を実行する第2の関数が実行されたか否かを判定することが可能となる。このため、アプリケーションのプライバシー評価に有益な情報を取得することができる。
本発明の一実施形態によるアプリケーション解析装置の構成を示すブロック図である。 本発明の一実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。 本発明の一実施形態におけるアプリケーションのプログラムの構成を示す参考図である。 本発明の一実施形態において、利用者情報を取得する関数を示す参考図である。 本発明の一実施形態において、アプリケーションのプログラムの逆コンパイルにより取得されるファイルの内容を示す参考図である。 本発明の一実施形態において、利用者情報を取得する関数のコードを示す参考図である。 本発明の一実施形態において、アプリケーションのプログラムの実行時に出力されるログを示す参考図である。 本発明の一実施形態において、静的解析によって取得されたクラス名と関数名とを示す参考図である。 本発明の一実施形態において、動的解析によって取得されたクラス名と関数名とを示す参考図である。 本発明の一実施形態において、ライブラリリストを示す参考図である。
以下、図面を参照し、本発明の実施形態を説明する。図1は、本発明の一実施形態によるアプリケーション解析装置1の構成を示している。図1に示すように、アプリケーション解析装置1は、静的解析部10と、実行部20と、動的解析部30と、評価部40と、出力部50と、記憶部60とを有する。
静的解析部10は、利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する。実行部20は、アプリケーションのプログラムを実行する。動的解析部30は、アプリケーションのプログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、アプリケーションのプログラムの実行結果に、第1のクラス名と第1の関数名との組み合わせが含まれるか否かを解析することにより、第2の関数が実行されたか否かを判定する。評価部40は、第1のクラス名と第1の関数名との組み合わせの総数に対する、実行された第2の関数に関する第1のクラス名と第1の関数名との組み合わせの数の割合を算出する。出力部50は、動的解析部30による判定の結果を示す情報を出力する。例えば、出力部50は、評価部40によって算出された割合を出力する。
例えば、出力部50は、情報を表示する表示部である。あるいは、出力部50は、表示部等を有する外部装置に情報を送信する送信部である。あるいは、出力部50は、情報を外部記憶媒体または記憶部60に記録する記録部である。
記憶部60は、アプリケーションのプログラム等を記憶する。記憶部60は、静的解析部10と、動的解析部30と、評価部40との処理結果を適宜記憶してもよい。記憶部60は、アプリケーション解析装置1に対して着脱が可能な外部記憶媒体であってもよい。
アプリケーション解析装置1のコンピュータが、静的解析部10と、実行部20と、動的解析部30と、評価部40と、出力部50との動作を規定する命令を含むプログラムを読み込み、読み込まれたプログラムを実行してもよい。つまり、静的解析部10と、実行部20と、動的解析部30と、評価部40と、出力部50との機能はソフトウェアにより実現されてもよい。このプログラムは、例えばフラッシュメモリのような「コンピュータ読み取り可能な記録媒体」により提供されてもよい。また、上述したプログラムは、このプログラムが保存された記憶装置等を有するコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波によりアプリケーション解析装置1に伝送されてもよい。プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように、情報を伝送する機能を有する媒体である。また、上述したプログラムは、前述した機能の一部を実現してもよい。さらに、上述したプログラムは、前述した機能をコンピュータに既に記録されているプログラムとの組合せで実現できる差分ファイル(差分プログラム)であってもよい。
以下では、一例として、Android(登録商標)がOS(Operating Systems)に用いられている端末で動作するアプリケーションの解析について主に説明する。本明細書および図面では、便宜上、必要に応じてandroid(登録商標)という文字列を*andrd*という文字列で代用し、java(登録商標)という文字列を*jv*という文字列で代用している。すなわち、*andrd*という文字列はandroid(登録商標)という文字列と等価であり、*jv*という文字列はjava(登録商標)という文字列と等価である。
図2は、アプリケーション解析装置1の動作の手順を示している。図2を参照し、アプリケーション解析装置1の動作を説明する。
静的解析部10は、アプリケーションのプログラムを逆コンパイルして得られるプログラムコードを解析する静的解析を行う(ステップS100)。ステップS100では、以下の処理が行われる。
静的解析部10は、記憶部60からアプリケーションのプログラムを読み出す。静的解析部10は、アプリケーションのプログラムを逆コンパイルし、解析可能なコードを取得する。
図3は、アプリケーションのプログラムの構成を示している。図3に示すように、アプリケーションのプログラム300は、実行コード301と、マニフェストファイル302と、ライブラリ303と、パラメータ304とを含む。実行コード301は、アプリケーション本体の動作を規定する命令列を含む。マニフェストファイル302は、アプリケーションのパッケージ名およびアプリケーションが利用するコンポーネント等の情報を含む。ライブラリ303は、実行コード301の実行時に参照される実行コードを含む。パラメータ304は、実行コード301の実行時に参照されるパラメータである。
アプリケーションのプログラム300を逆コンパイルするためのツールとして、apk−tool、soot、およびdex−2−jar等がある。本実施形態の説明では、apk−toolを利用する。
Android(登録商標)アプリケーションはDalvik仮想マシンで実行される。実行コード301は、classes.dexと呼ばれるバイナリファイルである。apk−toolを利用してアプリケーションのプログラム300を逆コンパイルすることにより、実行コード301がDalvik仮想マシンの中間コードに変換される。apk−toolを利用すると、パッケージ毎にフォルダが作成され、クラス毎にsmaliファイルが作成される。静的解析部10は、中間コードであるsmaliファイルを解析する。
静的解析部10は、smaliファイルに含まれるコードから、利用者情報を取得する関数の情報を取得する。図4は、利用者情報を取得する関数(第1の関数)の例を示している。図4に示す関数は、OSが基本的な機能の実現のために提供しているAPI(Application Programming Interface)である。それぞれの関数はクラスに定義されている。図4では、関数として、getDeviceId関数と、getSubscriberId関数と、requestLocationUpdates関数と、getLatitude関数と、getLongitude関数とが示されている。
getDeviceId関数は、端末識別子であるIMEI(International Mobile Equipment Identity)を取得する関数である。getSubscriberId関数は、加入者識別子であるIMSI(International Mobile Subscriber Identity)を取得する関数である。requestLocationUpdates関数は、端末の位置情報を定期的に取得する関数である。getLatitude関数は、端末の位置における緯度情報を取得する関数である。getLongitude関数は、端末の位置における経度情報を取得する関数である。getDeviceId関数とgetSubscriberId関数とは、*andrd*.telephony.TelephonyManagerクラスに定義されている。requestLocationUpdates関数と、getLatitude関数と、getLongitude関数とは、*andrd*.location.LocationManagerクラスに定義されている。図4に示すgetDeviceId等が関数の名称(関数名)である。図4に示す*andrd*.telephony.TelephonyManager等がクラスの名称(クラス名)である。
図4に示す関数を実行することにより、アプリケーションが、アプリケーション解析装置1を含む端末に格納されている利用者情報を取得することが可能である。アプリケーションの開発者は、図4に示す関数を利用する独自の関数をアプリケーションのプログラムに定義することが可能である。
図4に示すクラス名と関数名とを含む関数リストが記憶部60に予め記憶されている。静的解析部10は、関数リストに含まれるクラス名と関数名とに基づいてsmaliファイルを解析する。
図5は、smaliファイルの内容の例を示している。図5において、smaliファイルに含まれる一部のコードのみが示されている。図5において、「・・・」は、コードが省略されている部分を示している。
静的解析部10は、関数リストに含まれるクラス名を構成する文字列のうち「.」を「/」に変換した文字列と、「;−>」という文字列と、関数名を構成する文字列とを組み合わせた文字列をコードから検索する。例えば、getDeviceId関数に関する情報を取得する場合、静的解析部10は、検索の文字列として「*andrd*/telephony/TelephonyManager;−>getDeviceId」を使用する。図5において、文字列500が検索の文字列と一致する。このため、静的解析部10は文字列500を検出する。利用者情報を取得する第1の関数を実行する第2の関数であって、アプリケーションの開発者によって定義された第2の関数がsmaliファイルに含まれる。
静的解析部10は、利用者情報を取得する第1の関数を実行する第2の関数の第1の関数名を取得する。具体的には、静的解析部10は、文字列500の位置よりも上にある文字列から文字列「.method」を検索する。静的解析部10は、文字列500の位置から上に向かって1行ずつ文字列を辿り、最初に出現する文字列「.method」を検出する。図5において、文字列510の先頭の文字列が検索の文字列と一致するため、静的解析部10は文字列510を検出する。文字列510において、検索の文字列と、プログラムで定義された文字列とを除いて最初に登場する文字列が第1の関数名である。プログラムで定義された文字列は、「public」、「private」、および「abstract」等である。文字列510では、「private」が、プログラムで定義された文字列である。文字列510から、文字列「.method」と文字列「private」とを除いて最初に登場する文字列「getImei」が第1の関数名である。アプリケーションの開発者によって定義されたgetImeiは、getDeviceId関数を実行する。静的解析部10は、文字列510から第1の関数名「getImei」を取得する。
静的解析部10は、利用者情報を取得する第1の関数を実行する第2の関数が定義された第1のクラスの第1のクラス名を取得する。具体的には、静的解析部10は、文字列500を含むsmaliファイルの先頭の行の文字列520から第1のクラス名を取得する。文字列520において、文字「L」と文字「;」との間の文字列の文字「/」を文字「.」に変換した文字列「com.example.sample.Mainactivity」が第1のクラス名である。静的解析部10は、文字列520から第1のクラス名「com.example.sample.Mainactivity」を取得する。異なるクラスにおいて同一の関数名で関数を定義することが可能であるため、クラス名と関数名との組み合わせで関数が識別される。
静的解析部10は、図4に示す全ての関数に対して、上記と同様の処理を行う。ステップS100では、上記の処理が行われる。
ステップS100の処理が行われた後、実行部20は、アプリケーションのプログラムを記憶部60から読み出す。実行部20は、読み出されたアプリケーションのプログラムを実行する(ステップS110)。アプリケーションのプログラムの実行中、アプリケーションに対する操作が適宜行われる。アプリケーションに対する操作は、自動操作と手動操作とのどちらであってもよい。
ステップS110の処理が行われた後、動的解析部30は、アプリケーションの挙動を解析する動的解析を行う(ステップS120)。ステップS120では、以下の処理が行われる。
動的解析部30は、アプリケーションのプログラムの実行結果を解析する。具体的には、動的解析部30は、アプリケーションのプログラムが実行されているときに出力されるログを解析する。アプリケーションのプログラムの実行結果であるログには、プログラムが実行されたときに呼び出された第3の関数の第2の関数名と、第3の関数が定義された第2のクラスの第2のクラス名とが含まれる。動的解析部30は、ログに、第1のクラス名と第1の関数名との組み合わせが含まれるか否かを解析することにより、第2の関数が実行されたか否かを判定する。
動的解析部30によるログの解析を可能とするため、OSで定義された、利用者情報を取得する関数のコードが予め変更される。例えば、端末識別子を取得するgetDeviceId関数は、/framework/base/telephony/*jv*/*andrd*/telephony/TelephonyManager.*jv*クラスに定義されている。例えば、このクラスのソースコードを、https://android.googlesource.com/platform/frameworks/base/+/android−4.4.4_r2.0.1/telephony/java/android/telephony/TelephonyManager.javaから取得することが可能である。
アプリケーションからgetDeviceId関数が呼び出されたときに、StackTraceを利用して、スタックフレーム情報がログに出力されるように関数が変更される。スタックフレーム情報とは、プログラムの実行過程を記録した情報である。この情報には、実行された関数とクラスとの情報が含まれる。
図6は、getDeviceId関数について、変更されたコードの例を示している。図6において、285から293の数字は行番号を示している。287行目の文字列600が、追加された文字列である。標準的なログ出力関数であるgetStackTraceStringを利用してスタックフレーム情報をログに出力するようにコードが変更されている。利用者情報を取得する他の関数のコードも、文字列600と同様の文字列が追加されることにより変更される。変更されたコードを含むOSのプログラムがビルドされる。上記のように変更されたOS上でアプリケーションのプログラムが実行される。
図7は、ログの例を示している。図7において、1から16の数字は行番号を示している。2行目以降の各行において、文字列「at」の後ろに、クラス名と関数名とを含む文字列が記録されている。2行目に、*andrd*.telephony.TelephonyManagerクラスのgetDeviceId関数が実行されたことが記録されている。2行目の次の3行目に、getDeviceId関数を実行した第3の関数の情報が記録されている。具体的には、com.example.sample.MainActivityクラスのgetImei関数が実行されたことが記録されている。
動的解析部30は、静的解析(ステップS100)で取得された第1のクラス名と第1の関数名とを文字「.」で繋いだ文字列をログから検索する。例えば、動的解析部30は、文字列「com.example.sample.Mainactivity.getImei」をログから検索する。これによって、文字列700が検出される。文字列700は、アプリケーションのプログラムが実行されたときに呼び出された第3の関数の第2の関数名を示す文字列「getImei」と、第3の関数が定義された第2のクラスの第2のクラス名を示す文字列「com.example.sample.Mainactivity」とを含む。したがって、動的解析部30は、getImei関数が実行されたと判定する。
つまり、動的解析部30は、検索の文字列と一致する文字列がログから検出された場合、第2の関数が実行されたと判定する。また、動的解析部30は、検索の文字列と一致する文字列がログから検出されなかった場合、第2の関数が実行されていないと判定する。検索の文字列は、静的解析(ステップS100)で取得された第1のクラス名と第1の関数名とを文字「.」で繋いだ文字列である。ステップS120では、上記の処理が行われる。
第2の関数が実行されたときに、第2の関数のコードにおいて定義された条件分岐により、利用者情報を取得する第1の関数が実行されない場合がある。このため、動的解析部30は、ログにおいて、第1の関数の関数名およびクラス名が記録された行の次の行に、第2の関数の関数名およびクラス名が記録されているか否かを確認してもよい。第1の関数の情報と第2の関数の情報とがセットでログに記録されているか否かを確認することによって、第1の関数が実行される条件で第2の関数が実行されたか否かを判定することができる。
ステップS120の処理が行われた後、評価部40は、第1のクラス名と第1の関数名との組み合わせの総数に対する、実行された第2の関数に関する第1のクラス名と第1の関数名との組み合わせの数の割合を算出する(ステップS130)。実行された第2の関数は、動的解析部30によって、実行されたと判定された第2の関数である。実行率は、(1)式により算出される。
Figure 2016206739
図8は、静的解析により取得された第1のクラス名と第1の関数名との組み合わせの例を示している。図8では、利用者情報を取得する関数(利用者情報取得関数)と、利用者情報取得関数を含んで定義された関数(定義関数)が定義されたクラス(定義クラス)と、定義関数とが示されている。
図9は、動的解析で検出された第1のクラス名と第1の関数名との組み合わせの例を示している。図9では、利用者情報取得関数と、利用者情報取得関数を実行した関数(実行関数)が定義されたクラス(実行クラス)と、実行関数とが示されている。
図8に示す例では、静的解析において5つの組み合わせが取得される。また、図9に示す例では、動的解析において、アプリケーションのプログラムが実行されたときに実行された第2の関数に関する4つの組み合わせが取得される。このため、実行率は80%である。
ステップS130の処理が行われた後、出力部50は、ステップS130で算出された実行率を出力する(ステップS140)。例えば、出力部50が表示部である場合、出力部50は実行率を表示する。あるいは、出力部50が通信部である場合、出力部50は実行率を外部装置に送信する。あるいは、出力部50が記録部である場合、出力部50は実行率を外部記憶媒体または記憶部60に記録する。
出力部50は、ステップS120の処理結果を出力してもよい。例えば、出力部50は、利用者情報を取得する第1の関数を実行する第2の関数の第1の関数名と、第2の関数が定義された第1のクラスの第1のクラス名と、アプリケーションのプログラムの実行時に第2の関数が実行されたか否かを示す情報とを出力してもよい。したがって、アプリケーション解析装置1は、評価部40を有していなくてもよい。
本実施形態によれば、アプリケーションのプログラムが実行されたときに、利用者情報を取得する第1の関数を実行する第2の関数が実行されたか否かを判定することが可能となる。このため、アプリケーションのプライバシー評価に有益な情報を取得することができる。したがって、アプリケーションに対して、プライバシー評価に必要な操作が行われたか否かを判断することができる。
次に、本実施形態の変形例を説明する。図3に示すように、アプリケーションのプログラム300は、ライブラリ303を含む。上記のように、静的解析部10は、利用者情報を取得する第1の関数を実行する第2の関数の第1の関数名と、第2の関数が定義された第1のクラスの第1のクラス名とを取得する。静的解析部10はさらに、第1のクラスが定義された第1のライブラリの名称である第1のパッケージ名を、アプリケーションのプログラムを解析して取得する。プログラムの実行結果は、アプリケーションのプログラムが実行されたときに呼び出された第3の関数の第2の関数名と、第3の関数が定義された第2のクラスの第2のクラス名と、第2のクラスが定義された第2のライブラリの名称である第2のパッケージ名とを含む。動的解析部30は、アプリケーションのプログラムの実行結果に、第1のクラス名と第1の関数名と第1のパッケージ名との組み合わせが含まれるか否かを解析することにより、第2の関数が実行されたか否かを判定する。
静的解析部10はさらに、第1のクラスが定義されたアプリケーションの名称である第3のパッケージ名を、アプリケーションのプログラムを解析して取得する。プログラムの実行結果は、第3の関数の第2の関数名と、第2のクラスの第2のクラス名と、第2のクラスが定義されたアプリケーションの第3のパッケージ名とを含む。動的解析部30は、アプリケーションのプログラムの実行結果に、第1のクラス名と第1の関数名と第3のパッケージ名との組み合わせが含まれるか否かを解析することにより、第2の関数が実行されたか否かを判定する。
一般的に、Android(登録商標)アプリケーションには2個または3個のライブラリが搭載されている。例えば、広告表示用のライブラリおよびゲームエンジン用のライブラリ等がある。ライブラリ会社は、自身のライブラリのプログラムを公開している。アプリケーションの開発者は、自身の好みでライブラリをアプリケーションに組み込むことができる。ライブラリのパッケージ名は、基本的にアプリケーションのパッケージ名と異なる。動的解析部30は、上記のクラス名と関数名とパッケージ名との組み合わせに含まれるパッケージ名が第1のパッケージ名または第3のパッケージ名であるか否かを判定することによって、ライブラリとアプリケーション本体とのどちらのクラスで定義された第2の関数が実行されたかを識別することができる。
アプリケーションに搭載されうるライブラリの第1のパッケージ名を含むライブラリリストが記憶部60に予め記憶されている。図10は、ライブラリリストの例を示している。図10では、提供会社と、種別と、パッケージ名とが示されている。提供会社は、ライブラリを提供する会社の名称である。種別は、ライブラリリストが提供する機能の種類を示している。パッケージ名は、ライブラリの第1のパッケージ名である。
図3に示すマニフェストファイル302には、アプリケーションの第3のパッケージ名の情報が含まれる。具体的には、マニフェストファイル302には、文字列「<manifest package=XXXXX>」が含まれる。文字列「XXXXX」は任意の文字列であり、アプリケーションの第3のパッケージ名を示している。
静的解析で取得される第1のクラス名は、アプリケーションまたはライブラリのパッケージ名を含む。例えば、第1のクラス名を示す文字列「com.example.sample.Mainactivity」において、文字列「com.example.sample」はアプリケーションの第3のパッケージ名を示している。ライブラリで定義されたクラスのクラス名は、ライブラリの第1のパッケージ名を含む。例えば、図10に示すA会社が提供するライブラリで定義されたクラスのクラス名は、第1のパッケージ名「com.sample.ad」を含む。
したがって、静的解析部10は、静的解析により取得された第1のクラス名からパッケージ名を取得することが可能である。静的解析部10は、静的解析により取得されたパッケージ名を、ライブラリリストに含まれる第1のパッケージ名と比較する。静的解析により取得されたパッケージ名が、ライブラリリストに含まれる第1のパッケージ名と一致する場合、静的解析により取得されたパッケージ名は、ライブラリの第1のパッケージ名である。また、静的解析部10は、静的解析により取得されたパッケージ名をアプリケーションの第3のパッケージ名と比較する。静的解析により取得されたパッケージ名がアプリケーションの第3のパッケージ名と一致する場合、静的解析により取得されたパッケージ名はアプリケーションの第3のパッケージ名である。
アプリケーションのパッケージ名は存在するが、そのパッケージ名がマニフェストファイル302に記録されない場合がある。マニフェストファイル302からアプリケーションのパッケージ名が取得できない場合、静的解析により取得されたパッケージ名のうちライブラリリストに含まれる第1のパッケージ名と一致しないパッケージ名はアプリケーションの第3のパッケージ名であると判断してもよい。
ログに記録される第2のクラス名は、第2のクラスが定義されたライブラリまたはアプリケーションのパッケージ名を含む。例えば、図7の文字列700に含まれる第2のクラス名「com.example.sample.Mainactivity」は、アプリケーションの第3のパッケージ名「com.example.sample」を含む。
図8は、静的解析により取得された第1のクラス名と第1の関数名との組み合わせの例を示している。図8において、getId関数とgetLoc関数とのそれぞれが定義された第1のクラスの第1のクラス名「com.sample.ad.main」は、ライブラリの第1のパッケージ名「com.sample.ad」を含む。また、SendLocation関数が定義された第1のクラスの第1のクラス名「co.jp.adad.send」は、ライブラリの第1のパッケージ名「co.jp.adad」を含む。また、getImei関数とgetLocation関数とのそれぞれが定義された第1のクラスの第1のクラス名「com.example.sample.Mainactivity」は、アプリケーションの第3のパッケージ名「com.example.sample」を含む。
動的解析部30は、静的解析で取得された第1のクラス名と第1の関数名とライブラリの第1のパッケージ名とを含む文字列をログから検索する。また、動的解析部30は、静的解析で取得された第1のクラス名と第1の関数名とアプリケーションの第3のパッケージ名とを含む文字列をログから検索する。第1のクラス名が第1のパッケージ名または第3のパッケージ名を含むため、動的解析部30は、第1のクラス名と第1の関数名とを含む文字列をログから検索すればよい。
動的解析部30は、検索の文字列と一致する文字列がログから検出された場合、第2の関数が実行されたと判定する。また、動的解析部30は、検索の文字列と一致する文字列がログから検出されなかった場合、第2の関数が実行されていないと判定する。検索の文字列がライブラリの第1のパッケージ名を含む場合、動的解析部30は、ライブラリで定義された第2の関数が実行されたと判定する。検索の文字列がアプリケーションの第3のパッケージ名を含む場合、動的解析部30は、アプリケーション本体で定義された第2の関数が実行されたと判定する。
評価部40は、パッケージ名毎に実行率を算出する。具体的には、評価部40は、ライブラリの第1のパッケージ名と対応する第1のクラス名を含む組み合わせに対して実行率を算出する。また、評価部40は、アプリケーションの第3のパッケージ名と対応する第1のクラス名を含む組み合わせに対して実行率を算出する。
図8では、ライブラリの第1のパッケージ名「com.sample.ad」と対応する第1のクラス名「com.sample.ad.main」を含む組み合わせは、getId関数に関する組み合わせとgetLoc関数に関する組み合わせとの2個である。図9では、ライブラリの第1のパッケージ名「com.sample.ad」と対応する第1のクラス名「com.sample.ad.main」を含む組み合わせは、getId関数に関する組み合わせの1個である。このため、ライブラリの第1のパッケージ名「com.sample.ad」に関する実行率は50%である。
図8では、ライブラリの第1のパッケージ名「co.jp.adad」と対応する第1のクラス名「co.jp.adad.send」を含む組み合わせは、SendLocation関数に関する組み合わせの1個である。図9では、ライブラリの第1のパッケージ名「co.jp.adad」と対応する第1のクラス名「co.jp.adad.send」を含む組み合わせは、SendLocation関数に関する組み合わせの1個である。このため、ライブラリの第1のパッケージ名「co.jp.adad」に関する実行率は100%である。
図8では、アプリケーションの第3のパッケージ名「com.example.sample」と対応する第1のクラス名「com.example.sample.Mainactivity」を含む組み合わせは、getImei関数に関する組み合わせとgetLocation関数に関する組み合わせとの2個である。図9では、アプリケーションの第3のパッケージ名「com.example.sample」と対応する第1のクラス名「com.example.sample.Mainactivity」を含む組み合わせは、getImei関数に関する組み合わせとgetLocation関数に関する組み合わせとの2個である。このため、アプリケーションの第3のパッケージ名「com.example.sample」に関する実行率は100%である。
したがって、パッケージ名が「co.jp.adad」であるライブラリで定義された第2の関数と、アプリケーション本体で定義された第2の関数とによる全ての挙動が動的解析により検出されている。一方、パッケージ名が「com.sample.ad」であるライブラリで定義された第2の関数による一部の挙動のみが動的解析により検出されている。つまり、パッケージ名が「co.jp.adad」であるライブラリと、アプリケーション本体とによる挙動を実現させるためのアプリケーションに対する操作は十分であることが分かる。一方、パッケージ名が「com.sample.ad」であるライブラリによる挙動を実現させるためのアプリケーションに対する操作は不十分であることが分かる。
出力部50は、上記のパッケージ名毎の実行率を出力する。出力部50は、利用者情報を取得する第1の関数を実行する第2の関数の第1の関数名と、第2の関数が定義された第1のクラスの第1のクラス名と、ライブラリの第1のパッケージ名またはアプリケーションの第3のパッケージ名と、アプリケーションのプログラムの実行時に第2の関数が実行されたか否かを示す情報とを出力してもよい。
本実施形態の変形例によれば、アプリケーションのプログラムが実行されたときに、ライブラリまたはアプリケーション本体で定義された第2の関数が実行されたか否かを判定することが可能となる。したがって、ライブラリによる挙動と、アプリケーション本体とによる挙動とを区別することが可能となる。このため、プライバシー評価に必要な操作が行われたか否かをより詳細に判断することができる。
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
1 アプリケーション解析装置、10 静的解析部、20 実行部、30 動的解析部、40 評価部、50 出力部、60 記憶部

Claims (6)

  1. 利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する静的解析部と、
    前記プログラムを実行する実行部と、
    前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する動的解析部と、
    前記動的解析部による判定の結果を示す情報を出力する出力部と、
    を有することを特徴とするアプリケーション解析装置。
  2. 前記第1のクラス名と前記第1の関数名との組み合わせの総数に対する、実行された前記第2の関数に関する前記第1のクラス名と前記第1の関数名との組み合わせの数の割合を算出する評価部をさらに有し、
    前記出力部は、前記割合を出力する
    ことを特徴とする請求項1に記載のアプリケーション解析装置。
  3. 前記プログラムは、ライブラリを含み、
    前記静的解析部はさらに、前記第1のクラスが定義された第1のライブラリの名称である第1のパッケージ名を、前記プログラムを解析して取得し、
    前記動的解析部は、前記第2の関数名と、前記第2のクラス名と、前記第2のクラスが定義された第2のライブラリの名称である第2のパッケージ名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名と前記第1のパッケージ名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する
    ことを特徴とする請求項1または請求項2に記載のアプリケーション解析装置。
  4. 前記静的解析部はさらに、前記第1のクラスが定義された前記アプリケーションの名称である第3のパッケージ名を、前記プログラムを解析して取得し、
    前記動的解析部は、前記第2の関数名と、前記第2のクラス名と、前記第2のクラスが定義された前記アプリケーションの前記第3のパッケージ名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名と前記第3のパッケージ名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する
    ことを特徴とする請求項3に記載のアプリケーション解析装置。
  5. 利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する第1のステップと、
    前記プログラムを実行する第2のステップと、
    前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する第3のステップと、
    前記第3のステップによる判定の結果を示す情報を出力する第4のステップと、
    を有することを特徴とするアプリケーション解析方法。
  6. 利用者情報を取得する第1の関数を実行する第2の関数の名称である第1の関数名と、前記第2の関数が定義された第1のクラスの名称である第1のクラス名とを、アプリケーションのプログラムを解析して取得する第1のステップと、
    前記プログラムを実行する第2のステップと、
    前記プログラムが実行されたときに呼び出された第3の関数の名称である第2の関数名と、前記第3の関数が定義された第2のクラスの名称である第2のクラス名とを含む、前記プログラムの実行結果に、前記第1のクラス名と前記第1の関数名との組み合わせが含まれるか否かを解析することにより、前記第2の関数が実行されたか否かを判定する第3のステップと、
    前記第3のステップによる判定の結果を示す情報を出力する第4のステップと、
    をコンピュータに実行させるためのプログラム。
JP2015084033A 2015-04-16 2015-04-16 アプリケーション解析装置、アプリケーション解析方法、およびプログラム Active JP6466234B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015084033A JP6466234B2 (ja) 2015-04-16 2015-04-16 アプリケーション解析装置、アプリケーション解析方法、およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015084033A JP6466234B2 (ja) 2015-04-16 2015-04-16 アプリケーション解析装置、アプリケーション解析方法、およびプログラム

Publications (2)

Publication Number Publication Date
JP2016206739A true JP2016206739A (ja) 2016-12-08
JP6466234B2 JP6466234B2 (ja) 2019-02-06

Family

ID=57489722

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015084033A Active JP6466234B2 (ja) 2015-04-16 2015-04-16 アプリケーション解析装置、アプリケーション解析方法、およびプログラム

Country Status (1)

Country Link
JP (1) JP6466234B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013065168A (ja) * 2011-09-16 2013-04-11 Kddi Corp アプリケーション解析装置およびプログラム
JP2015503789A (ja) * 2011-12-30 2015-02-02 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation ターゲットを絞ったセキュリティ・テストのための、コンピュータにより実施される方法、コンピュータ・プログラム製品、システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013065168A (ja) * 2011-09-16 2013-04-11 Kddi Corp アプリケーション解析装置およびプログラム
JP2015503789A (ja) * 2011-12-30 2015-02-02 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation ターゲットを絞ったセキュリティ・テストのための、コンピュータにより実施される方法、コンピュータ・プログラム製品、システム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
名雲孝昭他: "動的クラスローダを利用するAndroidアプリケーション解析手法の研究", 電子情報通信学会技術研究報告 情報通信システムセキュリティ, vol. 第114巻,第71号, JPN6018045640, 29 May 2014 (2014-05-29), JP, pages 39 - 44, ISSN: 0003945071 *

Also Published As

Publication number Publication date
JP6466234B2 (ja) 2019-02-06

Similar Documents

Publication Publication Date Title
CN108595329B (zh) 一种应用测试方法、装置及计算机存储介质
US10481964B2 (en) Monitoring activity of software development kits using stack trace analysis
CN105094783B (zh) 安卓应用稳定性测试的方法及装置
CN106716398B (zh) 可视地区分用于测试的字符串
KR20140038381A (ko) 이동 통신 장치의 콘텐츠를 시험하기 위한 시스템 및 방법
WO2018059393A1 (zh) 移动应用程序测试方法、服务器、终端及存储介质
CN108920359B (zh) 应用程序的测试方法、装置、存储介质和电子装置
AU2018202153B2 (en) System and method for tool chain data capture through parser for empirical data analysis
US9767003B2 (en) Conditional component breakpoint setting system and method
CN111045944A (zh) 回归测试方法、装置、系统及计算机可读存储介质
CN113114680B (zh) 用于文件上传漏洞的检测方法和检测装置
CN105989294B (zh) 安卓安装包检测方法及装置
Chen et al. DroidCIA: A novel detection method of code injection attacks on HTML5-based mobile apps
US20080127037A1 (en) System and method for detecting software on a computing device
CN106776266B (zh) 测试工具的配置方法及终端设备
JP4587976B2 (ja) アプリケーションの脆弱性検査方法および装置
US10929265B2 (en) Optimizing automated interactions with web applications
JP6466234B2 (ja) アプリケーション解析装置、アプリケーション解析方法、およびプログラム
CN110377514A (zh) 软件构件的管理方法、装置、电子设备和存储介质
CN110297854B (zh) 一种app域名核验方法与系统
CN108366040B (zh) 一种可编程防火墙的逻辑代码检测方法、装置及电子设备
JP6342717B2 (ja) プライバシーポリシー生成装置、プライバシーポリシー生成方法、およびプログラム
US20230359992A1 (en) Risk assessment based on augmented software bill of materials
CN116450533B (zh) 用于应用程序的安全检测方法、装置、电子设备和介质
CN113946347B (zh) 函数调用的检测方法、装置、电子设备及可读介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180216

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20180219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181206

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181221

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190109

R150 Certificate of patent or registration of utility model

Ref document number: 6466234

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150