【文献】
名雲 孝昭 Takaaki NAGUMO,動的クラスローダを利用するAndroidアプリケーション解析手法の研究 Analyzing Dynamic Class Load,電子情報通信学会技術研究報告 Vol.114 No.70 IEICE Technical Report,日本,一般社団法人電子情報通信学会 The Institute of Ele,2014年 5月29日,第114巻,pp.39-44
(58)【調査した分野】(Int.Cl.,DB名)
ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報と、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報と、を記憶する記憶部と、
他装置への利用者情報の送信を検出し、検出した前記利用者情報に対して付与されたタグ情報と一致するタグ情報を、前記記憶部に記憶された前記コールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する抽出部と、
抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する特定部と
を備えたことを特徴とする動的読み込みコード解析装置。
前記特定部は、利用者情報の送信が検出されたことを契機に、抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定することを特徴とする請求項1に記載の動的読み込みコード解析装置。
【発明を実施するための形態】
【0012】
以下に、開示する動的読み込みコード解析装置、動的読み込みコード解析方法及び動的読み込みコード解析プログラムの実施形態について、図面に基づいて詳細に説明する。なお、本実施形態により開示する発明が限定されるものではない。
【0013】
(第1の実施形態)
図1は、第1の実施形態に係る動的読み込みコード解析システム1の構成例を示す図である。
図1に示すように、第1の実施形態に係る動的読み込みコード解析システム1では、LAN(Local Area Network)などのネットワーク2を介して、動的読み込みコード解析装置10と、外部装置3と、外部装置4と、携帯端末装置5とが接続される。なお、動的読み込みコード解析システム1の構成は、
図1に示す例に限定されるものではない。例えば、
図1に示す例では、外部装置が2台であり、携帯端末装置が1台である場合を図示しているが、外部装置及び携帯端末装置の数は、
図1に示した数に限定されるものではない。
【0014】
外部装置3は、動的読み込みコードを管理する。ここで言う「動的読み込みコード」とは、アプリケーションが端末へインストールされた後に、アプリケーションに組み込まれるコードを示す。言い換えると、「動的読み込みコード」は、アプリケーションのインストール時におけるコード(以下、「オリジナルコード」と言う)に対して、インストール後に動的に読み込まれるコードである。このような動的読み込みコードには、アプリケーションプライバシーポリシーを越えて利用者情報を送信する機能を付加するものが含まれる場合がある。なお、ここで言う「利用者情報」とは、Android(登録商標)を含むスマートフォン端末に格納される、他人によって個人を特定可能な情報及び他人には知られたくない情報を示す。例えば、利用者情報には、住所、電話番号、氏名、契約者ID(Identifier)、パスワード、カード番号、位置情報、通話履歴などが含まれる。
【0015】
また、外部装置3は、携帯端末装置5や動的読み込みコード解析装置10からの取得要求に応じて、動的読み込みコードを携帯端末装置5や動的読み込みコード解析装置10に配信する。なお、携帯端末装置5や動的読み込みコード解析装置10は、意図して或いは意図せずに、動的読み込みコードの取得を外部装置3に要求する。
【0016】
外部装置4は、利用者情報を収集する装置である。例えば、外部装置4は、動的読み込みコードを取得した携帯端末装置5から利用者情報を収集する。
【0017】
携帯端末装置5は、例えば、スマートフォンやタブレット端末などである。この携帯端末装置5には、携帯端末装置5の利用者の利用者情報が格納される。この携帯端末装置5は、利用者の操作に応じて、アプリケーションを配布するアプリケーション管理装置(図示せず)にアクセスし、アプリケーションを取得する。
【0018】
また、携帯端末装置5が取得したアプリケーションのオリジナルコードが、例えば広告収入を目的とした動的読み込みコードを使用した場合、アプリケーションプライバシーポリシーを越えて利用者情報が例えば外部装置4に送信される場合がある。また、ネットワーク2から取得したコードを読み込む際は、読み込まれる動的読み込みコードが動的に変化する場合がある。このため、同じオリジナルコードを実行しても動的読み込みコードに依存してアプリケーションの動作は変化する。かかる場合、アプリケーションプライバシーポリシーを越えて利用者情報が例えば外部装置4に送信される場合がある。
【0019】
このようなことから、第1の実施形態に係る動的読み込みコード解析装置10は、動的読み込みコードについて独立して利用者情報の送信を行うかどうかを解析する。例えば、動的読み込みコード解析装置10は、サンドボックスなどの保護された領域を構築し、この保護された領域内で動的読み込みコードを解析することで、動的読み込みコード解析装置10のシステムに影響が及ばないようにする。
【0020】
図2は、第1の実施形態に係る動的読み込みコード解析装置10による処理動作を説明するための図である。
図2に示す例では、動的読み込みコード解析装置10が、外部装置3から取得した動的読み込みコードの中から、利用者情報の送信を引き起こした動的読み込みコードを特定する場合について説明する。
【0021】
図2に示すように、動的読み込みコード解析装置10は、外部装置3に動的読み込みコードの取得を要求する(ステップS1)。そして、外部装置3は、動的読み込みコードを動的読み込みコード解析装置10に送信する(ステップS2)。
【0022】
また、動的読み込みコード解析装置10は、取得した動的読み込みコードを解析する(ステップS3)。ここで、動的読み込みコード解析装置10は、動的読み込みコードの解析結果を動的読み込みコード情報として動的読み込みコード情報記憶部に記憶する。
【0023】
また、動的読み込みコード解析装置10は、取得したアプリケーションを動作させて、利用者情報の流れを解析する動的解析を行う(ステップS4)。例えば、動的読み込みコード解析装置10は、動的解析として、テイント解析を行う。より具体的には、動的読み込みコード解析装置10は、利用者情報にタグ情報を付与した後に、アプリケーションを実行し、利用者情報が操作されるごとにメソッドトレースを行う。動的読み込みコード解析装置10は、メソッドトレースの結果をコールメソッド情報としてコールメソッド情報記憶部に記憶する。
【0024】
そして、動的読み込みコード解析装置10は、外部に送信される情報のタグ情報を検出すると(ステップS5)、動的読み込みコード情報とコールメソッド情報とを照合して、利用者情報の送信を引き起こした動的読み込みコードを特定する(ステップS6)。
【0025】
次に、
図3を用いて、
図1に示した動的読み込みコード解析装置10の構成を説明する。
図3は、第1の実施形態に係る動的読み込みコード解析装置10の構成例を示す図である。
図3に示すように、動的読み込みコード解析装置10は、入力部11、出力部12、通信制御部13、制御部14および記憶部15を有する。
【0026】
入力部11は、動的読み込みコード解析装置10の操作者からの各種操作を受付ける。出力部12は、例えば液晶ディスプレイ等であり、各種情報を出力する。通信制御部13は、ネットワーク2を介して接続された他装置との間でやり取りする各種情報に関する通信を制御する。例えば、通信制御部13は、外部装置3に対して動的読み込みコードの取得を要求し、外部装置3から動的読み込みコードを受信する。
【0027】
記憶部15は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。例えば、記憶部15は、
図3に示すように、タグ情報記憶部15aと、動的読み込みコード情報記憶部15bと、コールメソッド情報記憶部15cと、利用者情報記憶部15dとを有する。
【0028】
利用者情報記憶部15dは、利用者情報を記憶する。ここで、利用者情報とは、Android(登録商標)を含むスマートフォン端末に格納される、他人によって個人を特定可能な情報及び他人には知られたくない情報を示す。利用者情報には、例えば、住所、電話番号、氏名、契約者ID、パスワード、カード番号、位置情報、通話履歴などが含まれる。また、利用者情報には、利用者端末の識別番号、SIM(Subscriber Identity Module)識別番号、OS(Operating System)生成識別番号、カメラ画像、SMS(Short Message Service)情報、ブックマーク情報などが含まれてもよい。なお、動的読み込みコード解析装置10が記憶する利用者情報は、実在する利用者情報ではなくダミーデータであってもよい。
【0029】
タグ情報記憶部15aは、追跡したい情報に付与されたテイントタグを示すタグ情報を記憶する。
図4は、第1の実施形態に係るタグ情報記憶部15aが記憶するデータ構造の一例を示す図である。例えば、
図4に示すように、タグ情報記憶部15aは、「テイントタグID」と、「テイントソース」と、「アドレス」と、「利用者情報判定情報」とを対応付けた情報を記憶する。
【0030】
ここで、タグ情報記憶部15aが記憶する「テイントタグID」は、テイントタグの識別子を示す。例えば、「テイントタグID」には、「タグA」、「タグB」などが格納される。また、タグ情報記憶部15aが記憶する「テイントソース」は、テイントを付与する対象を示す。言い換えると、テイントソースとは追跡したい情報であり、利用者情報が含まれる。例えば、「テイントソース」には、「XX」、「YY」、「ABC」などが格納される。なお、ここで、「XX」及び「YY」は、利用者情報であり、「ABC」は、利用者情報以外の情報であるものとする。
【0031】
また、タグ情報記憶部15aが記憶する「アドレス」は、記憶領域においてテイントソースが格納された記憶位置を示す。例えば、「アドレス」には、「1000−1100」、「2000−2100」などが格納される。なお、「アドレス」に格納される値は、テイントソースの格納される記憶位置の変更に応じて更新される。また、タグ情報記憶部15aが記憶する「利用者情報判定情報」は、テイントソースが利用者情報であるか否かを示す。例えば、「利用者情報判定情報」には、テイントソースが利用者情報であることを示す「1」、テイントソースが利用者情報ではないことを示す「0」などが格納される。
【0032】
一例をあげると、
図4に示すタグ情報記憶部15aは、利用者情報であるテイントソース「XX」に付与されたテイントタグが「タグA」であり、テイントソース「XX」がアドレス「1000−1100」に格納されていることを示す。また、
図4に示すタグ情報記憶部15aは、利用者情報であるテイントソース「YY」に付与されたテイントタグが「タグB」であり、テイントソース「YY」がアドレス「2000−2100」に格納されていることを示す。また、
図4に示すタグ情報記憶部15aは、利用者情報ではないテイントソース「ABC」に付与されたテイントタグが「タグC」であり、テイントソース「ABC」がアドレス「3000−3100」に格納されていることを示す。
【0033】
動的読み込みコード情報記憶部15bは、ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報を記憶する。
図5は、第1の実施形態に係る動的読み込みコード情報記憶部15bが記憶するデータ構造の一例を示す図である。例えば、
図5に示すように、動的読み込みコード情報記憶部15bは、「動的読み込みコードID」と、「パッケージ名」と、「クラス名」とを対応付けた情報を記憶する。なお、動的読み込みコード情報記憶部15bが記憶する「パッケージ名」及び「クラス名」のことを「解析情報」とも言う。
【0034】
ここで、動的読み込みコード情報記憶部15bが記憶する「動的読み込みコードID」は、動的読み込みコードの識別子を示す。例えば、「動的読み込みコードID」には、「1」、「2」などが格納される。
【0035】
また、動的読み込みコード情報記憶部15bが記憶する「パッケージ名」は、動的読み込みコードのクラス構造としてのパッケージ名を示す。例えば、「パッケージ名」には、「com.twxxxxx.android」、「com.xxxxle.android.apps.A」などが格納される。
【0036】
また、動的読み込みコード情報記憶部15bが記憶する「クラス名」は、動的読み込みコードのクラス構造としてのクラス名を示す。例えば、「クラス名」には、「classC」、「classA」などが格納される。
【0037】
一例をあげると、
図5に示す動的読み込みコード情報記憶部15bは、動的読み込みコードIDが「1」である動的読み込みコードのクラス構造が、「com.twxxxxx.android」及び「classC」であることを示す。また、
図5に示す動的読み込みコード情報記憶部15bは、動的読み込みコードIDが「2」である動的読み込みコードのクラス構造が、「com.xxxxle.android.apps.A」及び「classA」であることを示す。
【0038】
コールメソッド情報記憶部15cは、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報を記憶する。
図6は、第1の実施形態に係るコールメソッド情報記憶部15cが記憶するデータ構造の一例を示す図である。例えば、
図6に示すように、コールメソッド情報記憶部15cは、「テイントタグID」と、「パッケージ名」と、「クラス名」とを対応付けた情報を記憶する。なお、コールメソッド情報記憶部15cが記憶する「パッケージ名」及び「クラス名」のことを「トレース情報」とも言う。
【0039】
ここで、コールメソッド情報記憶部15cが記憶する「テイントタグID」は、テイントタグの識別子を示す。例えば、「テイントタグID」には、「タグA」、「タグB」などが格納される。
【0040】
また、コールメソッド情報記憶部15cが記憶する「パッケージ名」は、テイントタグが伝搬する場合に実行したコードのクラス構造としてのパッケージ名を示す。例えば、「パッケージ名」には、「com.yyyyy」、「com.xxxxle.android.apps.A」などが格納される。
【0041】
また、コールメソッド情報記憶部15cが記憶する「クラス名」は、テイントタグが伝搬する場合に実行したコードのクラス構造としてのクラス名を示す。例えば、「クラス名」には、「classB」、「classA」などが格納される。
【0042】
一例をあげると、
図6に示すコールメソッド情報記憶部15cは、テイントタグIDが「タグA」であるテイントタグが伝搬する場合に実行したコードのクラス構造が、「com.yyyyy」及び「classB」であることを示す。また、
図6に示すコールメソッド情報記憶部15cは、テイントタグIDが「タグB」であるテイントタグが伝搬する場合に実行したコードのクラス構造が、「com.xxxxle.android.apps.A」及び「classA」であることを示す。
【0043】
図3に戻る。制御部14は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路やASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路である。この制御部14は、動的読み込みコード情報生成部14aと、コールメソッド情報生成部14bと、抽出部14cと、特定部14dと、タグ情報制御部14eとを有する。
【0044】
タグ情報制御部14eは、動的解析として、テイント解析を行う。
図7は、第1の実施形態に係るタグ情報制御部14eの処理動作を説明するための図である。
図7に示すように、タグ情報制御部14eは、テイントソースとして利用者情報である情報XXにタグAを付与し、テイントソースとして利用者情報である情報YYにタグBを付与し、CPU内のレジスタにそれぞれを格納する。そして、アプリケーションが実行されたことにより、情報XXおよび情報YYが加算されて情報ZZとなった場合には、タグ情報制御部14eは、属性Aおよび属性Bも伝搬ルールに従って処理する。すなわち、タグ情報制御部14eは、属性Aと属性Bとを加算し、情報ZZのタグ情報が「属性A、属性B」となる。このように、タグ情報制御部14eは、利用者情報に対する演算処理が実行された場合に、テイントタグを伝搬させる。
【0045】
なお、後述する抽出部14cは、情報ZZがネットワーク送信されたことを検出する。かかる場合、抽出部14cは、情報ZZのタグ情報「属性A、属性B」を解析し、送信された情報が利用者情報であるか否かを判定する。
【0046】
動的読み込みコード情報生成部14aは、動的読み込みコード情報を生成する。例えば、動的読み込みコード情報生成部14aは、DexClassLoaderなどで動的読み込みコードを使用するクラスを監視し、このクラスが使用された場合に、動的読み込みコードを検出する。
【0047】
続いて、動的読み込みコード情報生成部14aは、ネットワークを介して取得した動的読み込みコードを解析して動的読み込みコード情報を生成し、記憶部15に格納する。ここで、動的読み込みコードは、内部コードと同様にDEX(Dalvik EXecutable)ファイル形式であるので、動的読み込みコード情報生成部14aは、DEXファイルのリバースエンジニアリング解析によって、「パッケージ名」と、「クラス名」とを特定する。
【0048】
そして、動的読み込みコード情報生成部14aは、検出した動的読み込みコードの「動的読み込みコードID」に、特定した「パッケージ名」と「クラス名」とを対応付けた動的読み込みコード情報を生成し、動的読み込み情報記憶部15bに格納する。
【0049】
コールメソッド情報生成部14bは、利用者情報について演算処理が実行された場合に、演算処理が実行するコードを解析してコールメソッド情報を生成し、生成されたコールメソッド情報を、記憶部15に格納する。例えば、コールメソッド情報生成部14bは、タグ情報制御部14eによって利用者情報に対する演算処理が実行された場合に、メソッドトレースを行う。言い換えると、コールメソッド情報生成部14bは、テイント解析をトリガーとしてコールメソッドを出力させる。
【0050】
そして、コールメソッド情報生成部14bは、出力されたコールメソッドのうち少なくとも「パッケージ名」と「クラス名」とを、演算処理が実行されたテイントタグの「テイントタグID」に対応付けたコールメソッド情報を生成し、コールメソッド情報記憶部15cに格納する。
【0051】
抽出部14cは、他装置への利用者情報の送信を検出し、検出した利用者情報に対して付与されたタグ情報と一致するタグ情報を、記憶部15に記憶されたコールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する。なお、抽出部14cの詳細な処理については、
図8を用いて後述する。
【0052】
特定部14dは、抽出部14cによって抽出されたクラス構造を示す動的読み込みコード情報を、記憶部15から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。例えば、特定部14dは、利用者情報の送信が検出されたことを契機に、抽出されたクラス構造を示す動的読み込みコード情報を、記憶部15から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。より具体的には、特定部14dは、利用者情報について実行されたコードのパッケージ名及びクラス名と一致するパッケージ名及びクラス名を含んだ動的読み込みコードを動的読み込みコード情報記憶部15bから特定する。なお、特定部14dの詳細な処理については、
図8を用いて後述する。
【0053】
次に、
図8を用いて、第1の実施形態に係る動的読み込みコード解析装置10による照合処理を説明する。
図8は、第1の実施形態に係る動的読み込みコード解析装置10による処理手順を示すフローチャートである。
【0054】
図8に示すように、動的読み込みコード解析装置10の抽出部14cは、情報の送信を検出したか否かを判定する(ステップS101)。例えば、抽出部14cは、ネットワーク通信のAPIが呼ばれた場合に、情報の送信を検出したと判定する。なお、抽出部14cは、情報の送信を検出したと判定しなかった場合には(ステップS101、No)、繰り返し情報の送信を検出したか否かを判定する。
【0055】
ここで、抽出部14cは、情報の送信を検出したと判定した場合(ステップS101、Yes)、送信対象となる情報のテイントを解析する(ステップS102)。例えば、抽出部14cは、送信対象となる情報に付与されているテイントタグを読み出す。そして、抽出部14cは、読み出したテイントタグと一致するテイントタグをタグ情報記憶部15aから特定し、特定したテイントタグに対応付けられた「利用者情報判定情報」に格納される値を読み出す。
【0056】
続いて、抽出部14cは、情報が利用者情報であるか否かを判定する(ステップS103)。例えば、抽出部14cは、タグ情報記憶部15aの「利用者情報判定情報」を参照し、格納される値が「1」である場合に送信対象となる情報が利用者情報であると判定し、格納される値が「0」である場合に送信対象となる情報が利用者情報ではないと判定する。なお、抽出部14cは、送信対象となる情報にテイントタグが付与されていない場合、送信対象となる情報が利用者情報ではないと判定する。なお、抽出部14cは、送信対象となる情報が利用者情報であると判定しなかった場合(ステップS103、No)、処理を終了する。
【0057】
ここで、抽出部14cは、送信対象となる情報が利用者情報であると判定した場合(ステップS103、Yes)、テイントタグに対応するトレース情報を読み出す(ステップS104)。例えば、抽出部14cは、読み出したテイントタグと一致するテイントタグをコールメソッド情報記憶部15cから特定し、特定したテイントタグに対応付けられた「パッケージ名」と「クラス名」とに格納される値を読み出す。例えば、利用者情報に付与されたテイントタグが
図6に示す「タグB」であった場合、抽出部14cは、トレース情報として「com.xxxxle.android.apps.A」及び「classA」を抽出する。また、利用者情報に付与されたテイントタグが
図6に示す「タグA」であった場合、抽出部14cは、トレース情報として「com.yyyyy」及び「classB」を抽出する。
【0058】
そして、特定部14dは、動的読み込みコード情報が存在するか否かを判定する(ステップS105)。例えば、特定部14dは、動的読み込み情報記憶部15bを検索し、動的読み込み情報が存在するか否かを判定する。ここで、特定部14dは、動的読み込みコード情報が存在すると判定しなかった場合(ステップS105、No)、動的読み込みコードによる利用者情報の送信が起こらないものと判定し、処理を終了する。
【0059】
一方、特定部14dは、動的読み込みコード情報が存在すると判定した場合(ステップS105、Yes)、トレース情報と一致する動的読み込みコード情報が存在するか否かを判定する(ステップS106)。例えば、利用者情報に付与されたテイントタグが
図6に示す「タグB」であった場合について説明する。かかる場合、特定部14dは、トレース情報として「com.xxxxle.android.apps.A」及び「classA」と一致する動的読み込みコード情報を動的読み込みコード情報記憶部15bから検索し、動的読み込みコードIDが「2」である動的読み込みコードを特定する。一方、利用者情報に付与されたテイントタグが
図6に示す「タグA」であった場合について説明する。かかる場合、特定部14dは、トレース情報として「com.yyyyy」及び「classB」と一致する動的読み込みコード情報を動的読み込みコード情報記憶部15bから検索するが、一致する動的読み込みコードがないと判定する。
【0060】
そして、特定部14dは、トレース情報と一致する動的読み込みコード情報が存在すると判定した場合(ステップS106、Yes)、一致する動的読み込みコード情報を、利用者情報の送信を引き起こした動的読み込みコードとして特定する(ステップS107)。なお、特定部14dは、トレース情報と一致する動的読み込みコード情報が存在すると判定しなかった場合(ステップS106、No)、処理を終了する。
【0061】
次に、
図9を用いて、第1の実施形態に係る動的読み込みコード情報生成部14aによる動的読み込みコード情報生成処理を説明する。
図9は、第1の実施形態に係る動的読み込みコード情報生成部14aによる処理手順を示すフローチャートである。
【0062】
図9に示すように、動的読み込みコード情報生成部14aは、動的読み込みコードを検出したか否かを判定する(ステップS201)。例えば、動的読み込みコード情報生成部14aは、DexClassLoaderなどで動的読み込みコードを使用するクラスが使用された場合に、動的読み込みコードを検出する。ここで、動的読み込みコード情報生成部14aは、動的読み込みコードを検出したと判定しなかった場合(ステップS201、No)、繰り返し動的読み込みコードを検出したか否かを判定する。
【0063】
一方、動的読み込みコード情報生成部14aは、動的読み込みコードを検出したと判定した場合(ステップS201、Yes)、検出した動的読み込みコードを解析する(ステップS202)。そして、動的読み込みコード情報生成部14aは、DEXファイルのリバースエンジニアリング解析によって、「パッケージ名」と「クラス名」とを特定する(ステップS203)。
【0064】
続いて、動的読み込みコード情報生成部14aは、検出した動的読み込みコードに「動的読み込みコードID」を付与し、付与した「動的読み込みコードID」に、特定した「パッケージ名」と「クラス名」とを対応付けた動的読み込みコード情報を生成し、動的読み込み情報記憶部15bに格納する(ステップS204)。
【0065】
次に、
図10を用いて、第1の実施形態に係るコールメソッド情報生成部14bによるコールメソッド情報生成処理を説明する。
図10は、第1の実施形態に係るコールメソッド情報生成部14bによる処理手順を示すフローチャートである。
【0066】
図10に示すように、コールメソッド情報生成部14bは、利用者情報の演算処理を検出したか否かを判定する(ステップS301)。ここで、コールメソッド情報生成部14bは、利用者情報の演算処理を検出したと判定しなかった場合(ステップS301、No)、繰り返し利用者情報の演算処理を検出したか否かを判定する。
【0067】
一方、コールメソッド情報生成部14bは、利用者情報の演算処理を検出したと判定した場合(ステップS301、Yes)、コールメソッドを出力させる(ステップS302)。そして、コールメソッド情報生成部14bは、出力されたコールメソッドのうち少なくとも「パッケージ名」と「クラス名」とを取得する(ステップS303)。
【0068】
続いて、コールメソッド情報生成部14bは、演算処理が実行されたテイントタグの「テイントタグID」に、取得した「パッケージ名」と「クラス名」とを対応付けたコールメソッド情報を生成し、コールメソッド情報記憶部15cに格納する(ステップS304)。
【0069】
上述してきたように、第1の実施形態に係る動的読み込みコード解析装置10は、利用者情報に付与されたテイントタグを解析することで、利用者情報を送信したコードのクラス構造を特定する。そして、第1の実施形態に係る動的読み込みコード解析装置10は、このコードのクラス構造に基づいて、利用者情報の送信を引き起こした動的読み込みコードを特定する。ここで、第1の実施形態に係る動的読み込みコード解析装置10は、利用者情報の送信が検出されたことを契機に、動的読み込みコードを特定する。これにより、第1の実施形態に係る動的読み込みコード解析装置10は、利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【0070】
また、第1の実施形態に係る動的読み込みコード解析装置10は、利用者情報について実行されたコードのパッケージ名及びクラス名と一致するパッケージ名及びクラス名を含んだ動的読み込みコードを特定する。これにより、第1の実施形態に係る動的読み込みコード解析装置10は、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【0071】
なお、上述した第1の実施形態では、抽出部14cは、タグ情報記憶部15aが記憶する利用者情報判定情報を参照して、送信対象となる情報が利用者情報であるか否かを判定するものとして説明したが実施形態はこれに限定されるものではない。例えば、テイントタグを利用者情報に対してのみ付与する場合、抽出部14cは、送信対象となる情報が利用者情報であるか否かを判定しなくてもよい。
【0072】
(第2の実施形態)
第1の実施形態では、特定部14dが、利用者情報の送信が検出されたことを契機に、抽出されたトレース情報に対応する動的読み込みコードを特定するものとして説明したが、実施形態はこれに限定されるものではない。例えば、特定部14dは、所定の間隔ごとに抽出されたトレース情報を用いて動的読み込みコードを特定するようにしてもよい。そこで、第2の実施形態では、抽出部14cによって抽出されたトレース情報を記憶部15に格納しておき、特定部14dが、所定の間隔ごとにトレース情報を読み出して動的読み込みコードを特定する場合について説明する。
【0073】
図11は、第2の実施形態に係る動的読み込みコード解析装置100の構成例を示す図である。なお、
図11において、
図3に示した第1の実施形態に係る動的読み込みコード解析装置10と同一の構成については、同一の符号を付与し詳細な説明を省略する。
【0074】
図11に示すように、動的読み込みコード解析装置100は、入力部11、出力部12、通信制御部13、制御部140および記憶部150を有する。記憶部150は、例えば、RAM、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
【0075】
例えば、記憶部150は、
図11に示すように、タグ情報記憶部15aと、動的読み込みコード情報記憶部15bと、コールメソッド情報記憶部15cと、利用者情報記憶部15dと、トレース情報記憶部15eとを有する。トレース情報記憶部15eは、抽出部14cによって抽出されたトレース情報を記憶する。
【0076】
制御部140は、CPUやMPUなどの電子回路やASICやFPGAなどの集積回路である。この制御部140は、動的読み込みコード情報生成部14aと、コールメソッド情報生成部14bと、抽出部14cと、特定部14dと、タグ情報制御部14eと、格納制御部14fとを有する。
【0077】
格納制御部14fは、抽出部14cによって抽出されたトレース情報をトレース情報記憶部15eに格納する。言い換えると、格納制御部14fは、抽出部14cによって抽出されたクラス構造をトレース情報記憶部15eに格納する。そして、第2の実施形態に係る特定部14dは、所定の間隔ごとにトレース情報記憶部15eからトレース情報を読み出し、読み出したトレース情報に対応する解析情報を特定し、解析情報に対応付けられた動的読み込みコードを特定する。言い換えると、第2の実施形態に係る特定部14dは、所定の間隔ごとにトレース情報記憶部15eから抽出されたクラス構造を読み出し、読み出した抽出されたクラス構造を示す動的読み込みコード情報を、記憶部15から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。
【0078】
このように、第2の実施形態に係る動的読み込みコード解析装置100は、利用者情報に付与されたテイントタグを解析することで、利用者情報を送信したコードのクラス構造を特定する。そして、第2の実施形態に係る動的読み込みコード解析装置100は、このコードクラス構造に基づいて、利用者情報の送信を引き起こした動的読み込みコードを特定する。ここで、第2の実施形態に係る動的読み込みコード解析装置100は、所定の間隔ごとにトレース情報記憶部15eからトレース情報を読み出し、読み出したトレース情報に対応する解析情報を特定し、解析情報に対応付けられた動的読み込みコードを特定する。これにより、第2の実施形態に係る動的読み込みコード解析装置100は、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【0079】
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、コールメソッド情報生成部14bとタグ情報制御部14eとが統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0080】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0081】
(プログラム)
また、上記第1の実施形態において説明した動的読み込みコード解析装置10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第1の実施形態に係る動的読み込みコード解析装置10が実行する処理をコンピュータが実行可能な言語で記述した動的読み込みコード解析プログラムを作成することもできる。この場合、コンピュータが動的読み込みコード解析プログラムを実行することにより、上記第1の実施形態と同様の効果を得ることができる。さらに、かかる動的読み込みコード解析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された動的読み込みコード解析プログラムをコンピュータに読み込ませて実行することにより上記第1の実施形態と同様の処理を実現してもよい。以下に、
図3に示した動的読み込みコード解析装置10と同様の機能を実現する動的読み込みコード解析プログラムを実行するコンピュータの一例を説明する。
【0082】
図12は、動的読み込みコード解析プログラムを実行するコンピュータ1000を示す図である。
図12に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
【0083】
メモリ1010は、
図12に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、
図12に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、
図12に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1041に挿入される。シリアルポートインタフェース1050は、
図12に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、
図12に例示するように、例えばディスプレイ1061に接続される。
【0084】
ここで、
図12に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記の動的読み込みコード解析プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。具体的には、上記実施形態で説明した抽出部14cと同様の情報処理を実行する抽出手順と、特定部14dと同様の情報処理を実行する特定手順とが記述されたプログラムモジュールが、ハードディスクドライブ1031に記憶される。
【0085】
また、上記第1の実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、各種処理手順を実行する。
【0086】
なお、動的読み込みコード解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、動的読み込みコード解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。