(57)【特許請求の範囲】
【請求項１】
ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報と、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報と、を記憶する記憶部と、
他装置への利用者情報の送信を検出し、検出した前記利用者情報に対して付与されたタグ情報と一致するタグ情報を、前記記憶部に記憶された前記コールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する抽出部と、
抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する特定部と
を備えたことを特徴とする動的読み込みコード解析装置。
【請求項２】
前記特定部は、利用者情報の送信が検出されたことを契機に、抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定することを特徴とする請求項１に記載の動的読み込みコード解析装置。
【請求項３】
前記抽出部によって抽出されたクラス構造を前記記憶部に格納する格納制御部を更に備え、
前記特定部は、所定の間隔ごとに前記記憶部から前記抽出されたクラス構造を読み出し、読み出した前記抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する
ことを特徴とする請求項１に記載の動的読み込みコード解析装置。
【請求項４】
前記動的読み込みコードのクラス構造は、パッケージ名とクラス名とを含み、
前記利用者情報について実行されたコードのクラス構造は、パッケージ名とクラス名とを含み、
前記特定部は、前記利用者情報について実行されたコードのパッケージ名及びクラス名と一致するパッケージ名及びクラス名を含んだ前記動的読み込みコードを特定する
ことを特徴とする請求項１〜３のいずれか一つに記載の動的読み込みコード解析装置。
【請求項５】
ネットワークを介して取得した動的読み込みコードを解析して前記動的読み込みコード情報を生成し、前記記憶部に格納する動的読み込み情報生成部と、
前記利用者情報について演算処理が実行された場合に、前記演算処理が実行するコードを解析して前記コールメソッド情報を生成し、生成された前記コールメソッド情報を、前記記憶部に格納するコールメソッド情報生成部と
を更に備えたことを特徴とする請求項１〜３のいずれか一つに記載の動的読み込みコード解析装置。
【請求項６】
ネットワークを介して取得した動的読み込みコードを解析して前記動的読み込みコード情報を生成し、前記記憶部に格納する動的読み込み情報生成部と、
前記利用者情報について演算処理が実行された場合に、前記演算処理が実行するコードを解析して前記コールメソッド情報を生成し、生成された前記コールメソッド情報を、前記記憶部に格納するコールメソッド情報生成部と
を更に備えたことを特徴とする請求項４に記載の動的読み込みコード解析装置。
【請求項７】
動的読み込みコード解析装置で実行される動的読み込みコード解析方法であって、
前記動的読み込みコード解析装置は、ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報と、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報と、を記憶する記憶部を備え、
前記動的読み込みコード解析装置が、
他装置への利用者情報の送信を検出し、検出した前記利用者情報に対して付与されたタグ情報と一致するタグ情報を、前記記憶部に記憶された前記コールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する抽出工程と、
抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する特定工程と
を含んだことを特徴とする動的読み込みコード解析方法。
【請求項８】
コンピュータに実行させるための動的読み込みコード解析プログラムであって、
前記コンピュータは、ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報と、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報と、を記憶する記憶部を備え、
前記コンピュータに、
他装置への利用者情報の送信を検出し、検出した前記利用者情報に対して付与されたタグ情報と一致するタグ情報を、前記記憶部に記憶された前記コールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する抽出手順と、
抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する特定手順と
を実行させることを特徴とする動的読み込みコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的読み込みコード解析装置、動的読み込みコード解析方法及び動的読み込みコード解析プログラムに関する。
【背景技術】
【０００２】
現在、例えば、Ａｎｄｒｏｉｄ（登録商標）アプリケーションなどのモバイル端末向けのアプリケーションにおいて、モバイル端末に蓄積された電話帳データ、位置情報、通話履歴、ブラウザのアクセス履歴などを含む利用者情報を用いて利便性の高いサービスを提供している。【０００３】
この一方で、アプリケーションのインストール時におけるコード（オリジナルコード）に対して、インストール後に動的に読み込まれるコード（以下、「動的読み込みコード」と言う）が、サービスに不必要な利用者情報まで取得して外部に送信する場合が多い。【０００４】
また、アプリケーションの解析手法には、動的手法と静的手法とが知られている。例えば、動的手法では、一般的な利用者情報を送信するアプリケーションに対して、モバイル端末内の利用者情報にテイントタグと呼ばれるタグ情報を付与し、ネットワーク送信やファイル書き込み時にタグ情報を解析する。一方で、静的手法では、アプリケーションを動作させずにアプリケーション自体を解析してデータフローを解析する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Sebastian  Poeplau  et  al.,  “Execute  This!  Analyzing  Unsafe  and  Malicious  Dynamic  Code  Loading  in  Android  Applications”,  Proceedings  of  Annual  Network  &  Distributed  System  Security  Symposium  (NDSS),  2014.
【非特許文献２】“androguard”、[online]、[平成２６年５月１９日検索]、インターネット＜https://code.google.com/p/androguard/＞
【非特許文献３】William  Enck  et  al.,  “TaintDroid:  An  Information-Flow  Tracking  System  for  Realtime  Privacy  Monitoring  on  Smartphones”,  Proceedings  of  the  9th  USENIX  Symposium  on  Operating  Systems  Design  and  Implementation  (OSDI),  2010.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の従来技術では、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができないという問題がある。なお、ここで言う「誤検知」とは、アプリケーション動作時に起こり得ない動作を検知してしまうことである。【０００７】
例えば、静的手法では、アプリケーションを動作させないので動的読み込みコードをそもそも入手することができない。また、動的手法では、テイントタグを解析することで外部に送信される利用者情報を検出することが可能であるが、オリジナルコードと動的読み込みコードとを区別して解析することができない。このため、動的手法では、利用者情報の送信がどのコードに起因するのかを特定することができない。【０００８】
開示の技術は、上述に鑑みてなされたものであって、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示する動的読み込みコード解析装置は、記憶部と、抽出部と、特定部とを備える。記憶部は、ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報と、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報と、を記憶する。抽出部は、他装置への利用者情報の送信を検出し、検出した前記利用者情報に対して付与されたタグ情報と一致するタグ情報を、前記記憶部に記憶された前記コールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する。特定部は、抽出された前記クラス構造を示す動的読み込みコード情報を、前記記憶部から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。
【発明の効果】
【００１０】
開示する動的読み込みコード解析装置、動的読み込みコード解析方法及び動的読み込みコード解析プログラムの一つの態様によれば、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施形態に係る動的読み込みコード解析システムの構成例を示す図である。
【図２】図２は、第１の実施形態に係る動的読み込みコード解析装置による処理動作を説明するための図である。
【図３】図３は、第１の実施形態に係る動的読み込みコード解析装置の構成例を示す図である。
【図４】図４は、第１の実施形態に係るタグ情報記憶部が記憶するデータ構造の一例を示す図である。
【図５】図５は、第１の実施形態に係る動的読み込みコード情報記憶部が記憶するデータ構造の一例を示す図である。
【図６】図６は、第１の実施形態に係るコールメソッド情報記憶部が記憶するデータ構造の一例を示す図である。
【図７】図７は、第１の実施形態に係るタグ情報制御部の処理動作を説明するための図である。
【図８】図８は、第１の実施形態に係る動的読み込みコード解析装置による処理手順を示すフローチャートである。
【図９】図９は、第１の実施形態に係る動的読み込みコード情報生成部による処理手順を示すフローチャートである。
【図１０】図１０は、第１の実施形態に係るコールメソッド情報生成部による処理手順を示すフローチャートである。
【図１１】図１１は、第２の実施形態に係る動的読み込みコード解析装置の構成例を示す図である。
【図１２】図１２は、動的読み込みコード解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、開示する動的読み込みコード解析装置、動的読み込みコード解析方法及び動的読み込みコード解析プログラムの実施形態について、図面に基づいて詳細に説明する。なお、本実施形態により開示する発明が限定されるものではない。
【００１３】
（第１の実施形態）
図１は、第１の実施形態に係る動的読み込みコード解析システム１の構成例を示す図である。図１に示すように、第１の実施形態に係る動的読み込みコード解析システム１では、ＬＡＮ（Local  Area  Network）などのネットワーク２を介して、動的読み込みコード解析装置１０と、外部装置３と、外部装置４と、携帯端末装置５とが接続される。なお、動的読み込みコード解析システム１の構成は、図１に示す例に限定されるものではない。例えば、図１に示す例では、外部装置が２台であり、携帯端末装置が１台である場合を図示しているが、外部装置及び携帯端末装置の数は、図１に示した数に限定されるものではない。
【００１４】
外部装置３は、動的読み込みコードを管理する。ここで言う「動的読み込みコード」とは、アプリケーションが端末へインストールされた後に、アプリケーションに組み込まれるコードを示す。言い換えると、「動的読み込みコード」は、アプリケーションのインストール時におけるコード（以下、「オリジナルコード」と言う）に対して、インストール後に動的に読み込まれるコードである。このような動的読み込みコードには、アプリケーションプライバシーポリシーを越えて利用者情報を送信する機能を付加するものが含まれる場合がある。なお、ここで言う「利用者情報」とは、Ａｎｄｒｏｉｄ（登録商標）を含むスマートフォン端末に格納される、他人によって個人を特定可能な情報及び他人には知られたくない情報を示す。例えば、利用者情報には、住所、電話番号、氏名、契約者ＩＤ（Identifier）、パスワード、カード番号、位置情報、通話履歴などが含まれる。
【００１５】
また、外部装置３は、携帯端末装置５や動的読み込みコード解析装置１０からの取得要求に応じて、動的読み込みコードを携帯端末装置５や動的読み込みコード解析装置１０に配信する。なお、携帯端末装置５や動的読み込みコード解析装置１０は、意図して或いは意図せずに、動的読み込みコードの取得を外部装置３に要求する。
【００１６】
外部装置４は、利用者情報を収集する装置である。例えば、外部装置４は、動的読み込みコードを取得した携帯端末装置５から利用者情報を収集する。
【００１７】
携帯端末装置５は、例えば、スマートフォンやタブレット端末などである。この携帯端末装置５には、携帯端末装置５の利用者の利用者情報が格納される。この携帯端末装置５は、利用者の操作に応じて、アプリケーションを配布するアプリケーション管理装置（図示せず）にアクセスし、アプリケーションを取得する。
【００１８】
また、携帯端末装置５が取得したアプリケーションのオリジナルコードが、例えば広告収入を目的とした動的読み込みコードを使用した場合、アプリケーションプライバシーポリシーを越えて利用者情報が例えば外部装置４に送信される場合がある。また、ネットワーク２から取得したコードを読み込む際は、読み込まれる動的読み込みコードが動的に変化する場合がある。このため、同じオリジナルコードを実行しても動的読み込みコードに依存してアプリケーションの動作は変化する。かかる場合、アプリケーションプライバシーポリシーを越えて利用者情報が例えば外部装置４に送信される場合がある。
【００１９】
このようなことから、第１の実施形態に係る動的読み込みコード解析装置１０は、動的読み込みコードについて独立して利用者情報の送信を行うかどうかを解析する。例えば、動的読み込みコード解析装置１０は、サンドボックスなどの保護された領域を構築し、この保護された領域内で動的読み込みコードを解析することで、動的読み込みコード解析装置１０のシステムに影響が及ばないようにする。
【００２０】
図２は、第１の実施形態に係る動的読み込みコード解析装置１０による処理動作を説明するための図である。図２に示す例では、動的読み込みコード解析装置１０が、外部装置３から取得した動的読み込みコードの中から、利用者情報の送信を引き起こした動的読み込みコードを特定する場合について説明する。
【００２１】
図２に示すように、動的読み込みコード解析装置１０は、外部装置３に動的読み込みコードの取得を要求する（ステップＳ１）。そして、外部装置３は、動的読み込みコードを動的読み込みコード解析装置１０に送信する（ステップＳ２）。
【００２２】
また、動的読み込みコード解析装置１０は、取得した動的読み込みコードを解析する（ステップＳ３）。ここで、動的読み込みコード解析装置１０は、動的読み込みコードの解析結果を動的読み込みコード情報として動的読み込みコード情報記憶部に記憶する。
【００２３】
また、動的読み込みコード解析装置１０は、取得したアプリケーションを動作させて、利用者情報の流れを解析する動的解析を行う（ステップＳ４）。例えば、動的読み込みコード解析装置１０は、動的解析として、テイント解析を行う。より具体的には、動的読み込みコード解析装置１０は、利用者情報にタグ情報を付与した後に、アプリケーションを実行し、利用者情報が操作されるごとにメソッドトレースを行う。動的読み込みコード解析装置１０は、メソッドトレースの結果をコールメソッド情報としてコールメソッド情報記憶部に記憶する。
【００２４】
そして、動的読み込みコード解析装置１０は、外部に送信される情報のタグ情報を検出すると（ステップＳ５）、動的読み込みコード情報とコールメソッド情報とを照合して、利用者情報の送信を引き起こした動的読み込みコードを特定する（ステップＳ６）。
【００２５】
次に、図３を用いて、図１に示した動的読み込みコード解析装置１０の構成を説明する。図３は、第１の実施形態に係る動的読み込みコード解析装置１０の構成例を示す図である。図３に示すように、動的読み込みコード解析装置１０は、入力部１１、出力部１２、通信制御部１３、制御部１４および記憶部１５を有する。
【００２６】
入力部１１は、動的読み込みコード解析装置１０の操作者からの各種操作を受付ける。出力部１２は、例えば液晶ディスプレイ等であり、各種情報を出力する。通信制御部１３は、ネットワーク２を介して接続された他装置との間でやり取りする各種情報に関する通信を制御する。例えば、通信制御部１３は、外部装置３に対して動的読み込みコードの取得を要求し、外部装置３から動的読み込みコードを受信する。
【００２７】
記憶部１５は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。例えば、記憶部１５は、図３に示すように、タグ情報記憶部１５ａと、動的読み込みコード情報記憶部１５ｂと、コールメソッド情報記憶部１５ｃと、利用者情報記憶部１５ｄとを有する。
【００２８】
利用者情報記憶部１５ｄは、利用者情報を記憶する。ここで、利用者情報とは、Ａｎｄｒｏｉｄ（登録商標）を含むスマートフォン端末に格納される、他人によって個人を特定可能な情報及び他人には知られたくない情報を示す。利用者情報には、例えば、住所、電話番号、氏名、契約者ＩＤ、パスワード、カード番号、位置情報、通話履歴などが含まれる。また、利用者情報には、利用者端末の識別番号、ＳＩＭ（Subscriber  Identity  Module）識別番号、ＯＳ（Operating  System）生成識別番号、カメラ画像、ＳＭＳ（Short  Message  Service）情報、ブックマーク情報などが含まれてもよい。なお、動的読み込みコード解析装置１０が記憶する利用者情報は、実在する利用者情報ではなくダミーデータであってもよい。
【００２９】
タグ情報記憶部１５ａは、追跡したい情報に付与されたテイントタグを示すタグ情報を記憶する。図４は、第１の実施形態に係るタグ情報記憶部１５ａが記憶するデータ構造の一例を示す図である。例えば、図４に示すように、タグ情報記憶部１５ａは、「テイントタグＩＤ」と、「テイントソース」と、「アドレス」と、「利用者情報判定情報」とを対応付けた情報を記憶する。
【００３０】
ここで、タグ情報記憶部１５ａが記憶する「テイントタグＩＤ」は、テイントタグの識別子を示す。例えば、「テイントタグＩＤ」には、「タグＡ」、「タグＢ」などが格納される。また、タグ情報記憶部１５ａが記憶する「テイントソース」は、テイントを付与する対象を示す。言い換えると、テイントソースとは追跡したい情報であり、利用者情報が含まれる。例えば、「テイントソース」には、「ＸＸ」、「ＹＹ」、「ＡＢＣ」などが格納される。なお、ここで、「ＸＸ」及び「ＹＹ」は、利用者情報であり、「ＡＢＣ」は、利用者情報以外の情報であるものとする。
【００３１】
また、タグ情報記憶部１５ａが記憶する「アドレス」は、記憶領域においてテイントソースが格納された記憶位置を示す。例えば、「アドレス」には、「１０００−１１００」、「２０００−２１００」などが格納される。なお、「アドレス」に格納される値は、テイントソースの格納される記憶位置の変更に応じて更新される。また、タグ情報記憶部１５ａが記憶する「利用者情報判定情報」は、テイントソースが利用者情報であるか否かを示す。例えば、「利用者情報判定情報」には、テイントソースが利用者情報であることを示す「１」、テイントソースが利用者情報ではないことを示す「０」などが格納される。
【００３２】
一例をあげると、図４に示すタグ情報記憶部１５ａは、利用者情報であるテイントソース「ＸＸ」に付与されたテイントタグが「タグＡ」であり、テイントソース「ＸＸ」がアドレス「１０００−１１００」に格納されていることを示す。また、図４に示すタグ情報記憶部１５ａは、利用者情報であるテイントソース「ＹＹ」に付与されたテイントタグが「タグＢ」であり、テイントソース「ＹＹ」がアドレス「２０００−２１００」に格納されていることを示す。また、図４に示すタグ情報記憶部１５ａは、利用者情報ではないテイントソース「ＡＢＣ」に付与されたテイントタグが「タグＣ」であり、テイントソース「ＡＢＣ」がアドレス「３０００−３１００」に格納されていることを示す。
【００３３】
動的読み込みコード情報記憶部１５ｂは、ネットワークを介して取得した動的読み込みコード毎に前記動的読み込みコードのクラス構造を示す動的読み込みコード情報を記憶する。図５は、第１の実施形態に係る動的読み込みコード情報記憶部１５ｂが記憶するデータ構造の一例を示す図である。例えば、図５に示すように、動的読み込みコード情報記憶部１５ｂは、「動的読み込みコードＩＤ」と、「パッケージ名」と、「クラス名」とを対応付けた情報を記憶する。なお、動的読み込みコード情報記憶部１５ｂが記憶する「パッケージ名」及び「クラス名」のことを「解析情報」とも言う。
【００３４】
ここで、動的読み込みコード情報記憶部１５ｂが記憶する「動的読み込みコードＩＤ」は、動的読み込みコードの識別子を示す。例えば、「動的読み込みコードＩＤ」には、「１」、「２」などが格納される。
【００３５】
また、動的読み込みコード情報記憶部１５ｂが記憶する「パッケージ名」は、動的読み込みコードのクラス構造としてのパッケージ名を示す。例えば、「パッケージ名」には、「ｃｏｍ．ｔｗｘｘｘｘｘ．ａｎｄｒｏｉｄ」、「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」などが格納される。
【００３６】
また、動的読み込みコード情報記憶部１５ｂが記憶する「クラス名」は、動的読み込みコードのクラス構造としてのクラス名を示す。例えば、「クラス名」には、「ｃｌａｓｓＣ」、「ｃｌａｓｓＡ」などが格納される。
【００３７】
一例をあげると、図５に示す動的読み込みコード情報記憶部１５ｂは、動的読み込みコードＩＤが「１」である動的読み込みコードのクラス構造が、「ｃｏｍ．ｔｗｘｘｘｘｘ．ａｎｄｒｏｉｄ」及び「ｃｌａｓｓＣ」であることを示す。また、図５に示す動的読み込みコード情報記憶部１５ｂは、動的読み込みコードＩＤが「２」である動的読み込みコードのクラス構造が、「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」及び「ｃｌａｓｓＡ」であることを示す。
【００３８】
コールメソッド情報記憶部１５ｃは、利用者情報に付与されたタグ情報と前記利用者情報について実行されたコードのクラス構造とを対応付けたコールメソッド情報を記憶する。図６は、第１の実施形態に係るコールメソッド情報記憶部１５ｃが記憶するデータ構造の一例を示す図である。例えば、図６に示すように、コールメソッド情報記憶部１５ｃは、「テイントタグＩＤ」と、「パッケージ名」と、「クラス名」とを対応付けた情報を記憶する。なお、コールメソッド情報記憶部１５ｃが記憶する「パッケージ名」及び「クラス名」のことを「トレース情報」とも言う。
【００３９】
ここで、コールメソッド情報記憶部１５ｃが記憶する「テイントタグＩＤ」は、テイントタグの識別子を示す。例えば、「テイントタグＩＤ」には、「タグＡ」、「タグＢ」などが格納される。
【００４０】
また、コールメソッド情報記憶部１５ｃが記憶する「パッケージ名」は、テイントタグが伝搬する場合に実行したコードのクラス構造としてのパッケージ名を示す。例えば、「パッケージ名」には、「ｃｏｍ．ｙｙｙｙｙ」、「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」などが格納される。
【００４１】
また、コールメソッド情報記憶部１５ｃが記憶する「クラス名」は、テイントタグが伝搬する場合に実行したコードのクラス構造としてのクラス名を示す。例えば、「クラス名」には、「ｃｌａｓｓＢ」、「ｃｌａｓｓＡ」などが格納される。
【００４２】
一例をあげると、図６に示すコールメソッド情報記憶部１５ｃは、テイントタグＩＤが「タグＡ」であるテイントタグが伝搬する場合に実行したコードのクラス構造が、「ｃｏｍ．ｙｙｙｙｙ」及び「ｃｌａｓｓＢ」であることを示す。また、図６に示すコールメソッド情報記憶部１５ｃは、テイントタグＩＤが「タグＢ」であるテイントタグが伝搬する場合に実行したコードのクラス構造が、「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」及び「ｃｌａｓｓＡ」であることを示す。
【００４３】
図３に戻る。制御部１４は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路やＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路である。この制御部１４は、動的読み込みコード情報生成部１４ａと、コールメソッド情報生成部１４ｂと、抽出部１４ｃと、特定部１４ｄと、タグ情報制御部１４ｅとを有する。
【００４４】
タグ情報制御部１４ｅは、動的解析として、テイント解析を行う。図７は、第１の実施形態に係るタグ情報制御部１４ｅの処理動作を説明するための図である。図７に示すように、タグ情報制御部１４ｅは、テイントソースとして利用者情報である情報ＸＸにタグＡを付与し、テイントソースとして利用者情報である情報ＹＹにタグＢを付与し、ＣＰＵ内のレジスタにそれぞれを格納する。そして、アプリケーションが実行されたことにより、情報ＸＸおよび情報ＹＹが加算されて情報ＺＺとなった場合には、タグ情報制御部１４ｅは、属性Ａおよび属性Ｂも伝搬ルールに従って処理する。すなわち、タグ情報制御部１４ｅは、属性Ａと属性Ｂとを加算し、情報ＺＺのタグ情報が「属性Ａ、属性Ｂ」となる。このように、タグ情報制御部１４ｅは、利用者情報に対する演算処理が実行された場合に、テイントタグを伝搬させる。
【００４５】
なお、後述する抽出部１４ｃは、情報ＺＺがネットワーク送信されたことを検出する。かかる場合、抽出部１４ｃは、情報ＺＺのタグ情報「属性Ａ、属性Ｂ」を解析し、送信された情報が利用者情報であるか否かを判定する。
【００４６】
動的読み込みコード情報生成部１４ａは、動的読み込みコード情報を生成する。例えば、動的読み込みコード情報生成部１４ａは、ＤｅｘＣｌａｓｓＬｏａｄｅｒなどで動的読み込みコードを使用するクラスを監視し、このクラスが使用された場合に、動的読み込みコードを検出する。
【００４７】
続いて、動的読み込みコード情報生成部１４ａは、ネットワークを介して取得した動的読み込みコードを解析して動的読み込みコード情報を生成し、記憶部１５に格納する。ここで、動的読み込みコードは、内部コードと同様にＤＥＸ（Dalvik  EXecutable）ファイル形式であるので、動的読み込みコード情報生成部１４ａは、ＤＥＸファイルのリバースエンジニアリング解析によって、「パッケージ名」と、「クラス名」とを特定する。
【００４８】
そして、動的読み込みコード情報生成部１４ａは、検出した動的読み込みコードの「動的読み込みコードＩＤ」に、特定した「パッケージ名」と「クラス名」とを対応付けた動的読み込みコード情報を生成し、動的読み込み情報記憶部１５ｂに格納する。
【００４９】
コールメソッド情報生成部１４ｂは、利用者情報について演算処理が実行された場合に、演算処理が実行するコードを解析してコールメソッド情報を生成し、生成されたコールメソッド情報を、記憶部１５に格納する。例えば、コールメソッド情報生成部１４ｂは、タグ情報制御部１４ｅによって利用者情報に対する演算処理が実行された場合に、メソッドトレースを行う。言い換えると、コールメソッド情報生成部１４ｂは、テイント解析をトリガーとしてコールメソッドを出力させる。
【００５０】
そして、コールメソッド情報生成部１４ｂは、出力されたコールメソッドのうち少なくとも「パッケージ名」と「クラス名」とを、演算処理が実行されたテイントタグの「テイントタグＩＤ」に対応付けたコールメソッド情報を生成し、コールメソッド情報記憶部１５ｃに格納する。
【００５１】
抽出部１４ｃは、他装置への利用者情報の送信を検出し、検出した利用者情報に対して付与されたタグ情報と一致するタグ情報を、記憶部１５に記憶されたコールメソッド情報から特定し、特定したタグ情報に対応付けられたクラス構造を抽出する。なお、抽出部１４ｃの詳細な処理については、図８を用いて後述する。
【００５２】
特定部１４ｄは、抽出部１４ｃによって抽出されたクラス構造を示す動的読み込みコード情報を、記憶部１５から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。例えば、特定部１４ｄは、利用者情報の送信が検出されたことを契機に、抽出されたクラス構造を示す動的読み込みコード情報を、記憶部１５から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。より具体的には、特定部１４ｄは、利用者情報について実行されたコードのパッケージ名及びクラス名と一致するパッケージ名及びクラス名を含んだ動的読み込みコードを動的読み込みコード情報記憶部１５ｂから特定する。なお、特定部１４ｄの詳細な処理については、図８を用いて後述する。
【００５３】
次に、図８を用いて、第１の実施形態に係る動的読み込みコード解析装置１０による照合処理を説明する。図８は、第１の実施形態に係る動的読み込みコード解析装置１０による処理手順を示すフローチャートである。
【００５４】
図８に示すように、動的読み込みコード解析装置１０の抽出部１４ｃは、情報の送信を検出したか否かを判定する（ステップＳ１０１）。例えば、抽出部１４ｃは、ネットワーク通信のＡＰＩが呼ばれた場合に、情報の送信を検出したと判定する。なお、抽出部１４ｃは、情報の送信を検出したと判定しなかった場合には（ステップＳ１０１、Ｎｏ）、繰り返し情報の送信を検出したか否かを判定する。
【００５５】
ここで、抽出部１４ｃは、情報の送信を検出したと判定した場合（ステップＳ１０１、Ｙｅｓ）、送信対象となる情報のテイントを解析する（ステップＳ１０２）。例えば、抽出部１４ｃは、送信対象となる情報に付与されているテイントタグを読み出す。そして、抽出部１４ｃは、読み出したテイントタグと一致するテイントタグをタグ情報記憶部１５ａから特定し、特定したテイントタグに対応付けられた「利用者情報判定情報」に格納される値を読み出す。
【００５６】
続いて、抽出部１４ｃは、情報が利用者情報であるか否かを判定する（ステップＳ１０３）。例えば、抽出部１４ｃは、タグ情報記憶部１５ａの「利用者情報判定情報」を参照し、格納される値が「１」である場合に送信対象となる情報が利用者情報であると判定し、格納される値が「０」である場合に送信対象となる情報が利用者情報ではないと判定する。なお、抽出部１４ｃは、送信対象となる情報にテイントタグが付与されていない場合、送信対象となる情報が利用者情報ではないと判定する。なお、抽出部１４ｃは、送信対象となる情報が利用者情報であると判定しなかった場合（ステップＳ１０３、Ｎｏ）、処理を終了する。
【００５７】
ここで、抽出部１４ｃは、送信対象となる情報が利用者情報であると判定した場合（ステップＳ１０３、Ｙｅｓ）、テイントタグに対応するトレース情報を読み出す（ステップＳ１０４）。例えば、抽出部１４ｃは、読み出したテイントタグと一致するテイントタグをコールメソッド情報記憶部１５ｃから特定し、特定したテイントタグに対応付けられた「パッケージ名」と「クラス名」とに格納される値を読み出す。例えば、利用者情報に付与されたテイントタグが図６に示す「タグＢ」であった場合、抽出部１４ｃは、トレース情報として「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」及び「ｃｌａｓｓＡ」を抽出する。また、利用者情報に付与されたテイントタグが図６に示す「タグＡ」であった場合、抽出部１４ｃは、トレース情報として「ｃｏｍ．ｙｙｙｙｙ」及び「ｃｌａｓｓＢ」を抽出する。
【００５８】
そして、特定部１４ｄは、動的読み込みコード情報が存在するか否かを判定する（ステップＳ１０５）。例えば、特定部１４ｄは、動的読み込み情報記憶部１５ｂを検索し、動的読み込み情報が存在するか否かを判定する。ここで、特定部１４ｄは、動的読み込みコード情報が存在すると判定しなかった場合（ステップＳ１０５、Ｎｏ）、動的読み込みコードによる利用者情報の送信が起こらないものと判定し、処理を終了する。
【００５９】
一方、特定部１４ｄは、動的読み込みコード情報が存在すると判定した場合（ステップＳ１０５、Ｙｅｓ）、トレース情報と一致する動的読み込みコード情報が存在するか否かを判定する（ステップＳ１０６）。例えば、利用者情報に付与されたテイントタグが図６に示す「タグＢ」であった場合について説明する。かかる場合、特定部１４ｄは、トレース情報として「ｃｏｍ．ｘｘｘｘｌｅ．ａｎｄｒｏｉｄ．ａｐｐｓ．Ａ」及び「ｃｌａｓｓＡ」と一致する動的読み込みコード情報を動的読み込みコード情報記憶部１５ｂから検索し、動的読み込みコードＩＤが「２」である動的読み込みコードを特定する。一方、利用者情報に付与されたテイントタグが図６に示す「タグＡ」であった場合について説明する。かかる場合、特定部１４ｄは、トレース情報として「ｃｏｍ．ｙｙｙｙｙ」及び「ｃｌａｓｓＢ」と一致する動的読み込みコード情報を動的読み込みコード情報記憶部１５ｂから検索するが、一致する動的読み込みコードがないと判定する。
【００６０】
そして、特定部１４ｄは、トレース情報と一致する動的読み込みコード情報が存在すると判定した場合（ステップＳ１０６、Ｙｅｓ）、一致する動的読み込みコード情報を、利用者情報の送信を引き起こした動的読み込みコードとして特定する（ステップＳ１０７）。なお、特定部１４ｄは、トレース情報と一致する動的読み込みコード情報が存在すると判定しなかった場合（ステップＳ１０６、Ｎｏ）、処理を終了する。
【００６１】
次に、図９を用いて、第１の実施形態に係る動的読み込みコード情報生成部１４ａによる動的読み込みコード情報生成処理を説明する。図９は、第１の実施形態に係る動的読み込みコード情報生成部１４ａによる処理手順を示すフローチャートである。
【００６２】
図９に示すように、動的読み込みコード情報生成部１４ａは、動的読み込みコードを検出したか否かを判定する（ステップＳ２０１）。例えば、動的読み込みコード情報生成部１４ａは、ＤｅｘＣｌａｓｓＬｏａｄｅｒなどで動的読み込みコードを使用するクラスが使用された場合に、動的読み込みコードを検出する。ここで、動的読み込みコード情報生成部１４ａは、動的読み込みコードを検出したと判定しなかった場合（ステップＳ２０１、Ｎｏ）、繰り返し動的読み込みコードを検出したか否かを判定する。
【００６３】
一方、動的読み込みコード情報生成部１４ａは、動的読み込みコードを検出したと判定した場合（ステップＳ２０１、Ｙｅｓ）、検出した動的読み込みコードを解析する（ステップＳ２０２）。そして、動的読み込みコード情報生成部１４ａは、ＤＥＸファイルのリバースエンジニアリング解析によって、「パッケージ名」と「クラス名」とを特定する（ステップＳ２０３）。
【００６４】
続いて、動的読み込みコード情報生成部１４ａは、検出した動的読み込みコードに「動的読み込みコードＩＤ」を付与し、付与した「動的読み込みコードＩＤ」に、特定した「パッケージ名」と「クラス名」とを対応付けた動的読み込みコード情報を生成し、動的読み込み情報記憶部１５ｂに格納する（ステップＳ２０４）。
【００６５】
次に、図１０を用いて、第１の実施形態に係るコールメソッド情報生成部１４ｂによるコールメソッド情報生成処理を説明する。図１０は、第１の実施形態に係るコールメソッド情報生成部１４ｂによる処理手順を示すフローチャートである。
【００６６】
図１０に示すように、コールメソッド情報生成部１４ｂは、利用者情報の演算処理を検出したか否かを判定する（ステップＳ３０１）。ここで、コールメソッド情報生成部１４ｂは、利用者情報の演算処理を検出したと判定しなかった場合（ステップＳ３０１、Ｎｏ）、繰り返し利用者情報の演算処理を検出したか否かを判定する。
【００６７】
一方、コールメソッド情報生成部１４ｂは、利用者情報の演算処理を検出したと判定した場合（ステップＳ３０１、Ｙｅｓ）、コールメソッドを出力させる（ステップＳ３０２）。そして、コールメソッド情報生成部１４ｂは、出力されたコールメソッドのうち少なくとも「パッケージ名」と「クラス名」とを取得する（ステップＳ３０３）。
【００６８】
続いて、コールメソッド情報生成部１４ｂは、演算処理が実行されたテイントタグの「テイントタグＩＤ」に、取得した「パッケージ名」と「クラス名」とを対応付けたコールメソッド情報を生成し、コールメソッド情報記憶部１５ｃに格納する（ステップＳ３０４）。
【００６９】
上述してきたように、第１の実施形態に係る動的読み込みコード解析装置１０は、利用者情報に付与されたテイントタグを解析することで、利用者情報を送信したコードのクラス構造を特定する。そして、第１の実施形態に係る動的読み込みコード解析装置１０は、このコードのクラス構造に基づいて、利用者情報の送信を引き起こした動的読み込みコードを特定する。ここで、第１の実施形態に係る動的読み込みコード解析装置１０は、利用者情報の送信が検出されたことを契機に、動的読み込みコードを特定する。これにより、第１の実施形態に係る動的読み込みコード解析装置１０は、利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【００７０】
また、第１の実施形態に係る動的読み込みコード解析装置１０は、利用者情報について実行されたコードのパッケージ名及びクラス名と一致するパッケージ名及びクラス名を含んだ動的読み込みコードを特定する。これにより、第１の実施形態に係る動的読み込みコード解析装置１０は、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【００７１】
なお、上述した第１の実施形態では、抽出部１４ｃは、タグ情報記憶部１５ａが記憶する利用者情報判定情報を参照して、送信対象となる情報が利用者情報であるか否かを判定するものとして説明したが実施形態はこれに限定されるものではない。例えば、テイントタグを利用者情報に対してのみ付与する場合、抽出部１４ｃは、送信対象となる情報が利用者情報であるか否かを判定しなくてもよい。
【００７２】
（第２の実施形態）
第１の実施形態では、特定部１４ｄが、利用者情報の送信が検出されたことを契機に、抽出されたトレース情報に対応する動的読み込みコードを特定するものとして説明したが、実施形態はこれに限定されるものではない。例えば、特定部１４ｄは、所定の間隔ごとに抽出されたトレース情報を用いて動的読み込みコードを特定するようにしてもよい。そこで、第２の実施形態では、抽出部１４ｃによって抽出されたトレース情報を記憶部１５に格納しておき、特定部１４ｄが、所定の間隔ごとにトレース情報を読み出して動的読み込みコードを特定する場合について説明する。
【００７３】
図１１は、第２の実施形態に係る動的読み込みコード解析装置１００の構成例を示す図である。なお、図１１において、図３に示した第１の実施形態に係る動的読み込みコード解析装置１０と同一の構成については、同一の符号を付与し詳細な説明を省略する。
【００７４】
図１１に示すように、動的読み込みコード解析装置１００は、入力部１１、出力部１２、通信制御部１３、制御部１４０および記憶部１５０を有する。記憶部１５０は、例えば、ＲＡＭ、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
【００７５】
例えば、記憶部１５０は、図１１に示すように、タグ情報記憶部１５ａと、動的読み込みコード情報記憶部１５ｂと、コールメソッド情報記憶部１５ｃと、利用者情報記憶部１５ｄと、トレース情報記憶部１５ｅとを有する。トレース情報記憶部１５ｅは、抽出部１４ｃによって抽出されたトレース情報を記憶する。
【００７６】
制御部１４０は、ＣＰＵやＭＰＵなどの電子回路やＡＳＩＣやＦＰＧＡなどの集積回路である。この制御部１４０は、動的読み込みコード情報生成部１４ａと、コールメソッド情報生成部１４ｂと、抽出部１４ｃと、特定部１４ｄと、タグ情報制御部１４ｅと、格納制御部１４ｆとを有する。
【００７７】
格納制御部１４ｆは、抽出部１４ｃによって抽出されたトレース情報をトレース情報記憶部１５ｅに格納する。言い換えると、格納制御部１４ｆは、抽出部１４ｃによって抽出されたクラス構造をトレース情報記憶部１５ｅに格納する。そして、第２の実施形態に係る特定部１４ｄは、所定の間隔ごとにトレース情報記憶部１５ｅからトレース情報を読み出し、読み出したトレース情報に対応する解析情報を特定し、解析情報に対応付けられた動的読み込みコードを特定する。言い換えると、第２の実施形態に係る特定部１４ｄは、所定の間隔ごとにトレース情報記憶部１５ｅから抽出されたクラス構造を読み出し、読み出した抽出されたクラス構造を示す動的読み込みコード情報を、記憶部１５から検索し、検索された動的読み込みコード情報に対応する動的読み込みコードを特定する。
【００７８】
このように、第２の実施形態に係る動的読み込みコード解析装置１００は、利用者情報に付与されたテイントタグを解析することで、利用者情報を送信したコードのクラス構造を特定する。そして、第２の実施形態に係る動的読み込みコード解析装置１００は、このコードクラス構造に基づいて、利用者情報の送信を引き起こした動的読み込みコードを特定する。ここで、第２の実施形態に係る動的読み込みコード解析装置１００は、所定の間隔ごとにトレース情報記憶部１５ｅからトレース情報を読み出し、読み出したトレース情報に対応する解析情報を特定し、解析情報に対応付けられた動的読み込みコードを特定する。これにより、第２の実施形態に係る動的読み込みコード解析装置１００は、大量のアプリケーションに対して網羅的に、かつ誤検知なく利用者情報の送信を引き起こした動的読み込みコードを特定することができる。
【００７９】
（システム構成等）
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、コールメソッド情報生成部１４ｂとタグ情報制御部１４ｅとが統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８０】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８１】
（プログラム）
また、上記第１の実施形態において説明した動的読み込みコード解析装置１０が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第１の実施形態に係る動的読み込みコード解析装置１０が実行する処理をコンピュータが実行可能な言語で記述した動的読み込みコード解析プログラムを作成することもできる。この場合、コンピュータが動的読み込みコード解析プログラムを実行することにより、上記第１の実施形態と同様の効果を得ることができる。さらに、かかる動的読み込みコード解析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された動的読み込みコード解析プログラムをコンピュータに読み込ませて実行することにより上記第１の実施形態と同様の処理を実現してもよい。以下に、図３に示した動的読み込みコード解析装置１０と同様の機能を実現する動的読み込みコード解析プログラムを実行するコンピュータの一例を説明する。
【００８２】
図１２は、動的読み込みコード解析プログラムを実行するコンピュータ１０００を示す図である。図１２に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【００８３】
メモリ１０１０は、図１２に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図１２に例示するように、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、図１２に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０４１に挿入される。シリアルポートインタフェース１０５０は、図１２に例示するように、例えばマウス１０５１、キーボード１０５２に接続される。ビデオアダプタ１０６０は、図１２に例示するように、例えばディスプレイ１０６１に接続される。
【００８４】
ここで、図１２に例示するように、ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記の動的読み込みコード解析プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０３１に記憶される。具体的には、上記実施形態で説明した抽出部１４ｃと同様の情報処理を実行する抽出手順と、特定部１４ｄと同様の情報処理を実行する特定手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０３１に記憶される。
【００８５】
また、上記第１の実施形態で説明した各種データは、プログラムデータとして、例えばメモリ１０１０やハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、各種処理手順を実行する。
【００８６】
なお、動的読み込みコード解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、動的読み込みコード解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８７】
１０、１００  動的読み込みコード解析装置
１１  入力部
１２  出力部
１３  通信制御部
１４、１４０  制御部
１４ａ  動的読み込みコード情報生成部
１４ｂ  コールメソッド情報生成部
１４ｃ  抽出部
１４ｄ  特定部
１４ｅ  タグ情報制御部
１４ｆ  格納制御部
１５、１５０  記憶部
１５ａ  タグ情報記憶部
１５ｂ  動的読み込みコード情報記憶部
１５ｃ  コールメソッド情報記憶部
１５ｄ  利用者情報記憶部
１５ｅ  トレース情報記憶部
【図１】
0006018344.tif 000002
【図２】
0006018344.tif 000003
【図３】
0006018344.tif 000004
【図４】
0006018344.tif 000005
【図５】
0006018344.tif 000006
【図６】
0006018344.tif 000007
【図７】
0006018344.tif 000008
【図８】
0006018344.tif 000009
【図９】
0006018344.tif 000010
【図１０】
0006018344.tif 000011
【図１１】
0006018344.tif 000012
【図１２】
0006018344.tif 000013