(57)【要約】  攻撃者に回避されずに情報漏洩を検知することを目的として、静的コード解析部（１５１）が、Ｊａｖａコードにより実装されたＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツとの間でデータの送受信を行う連携機構のＪａｖａコードによる実装箇所と、該連携機構においてＪａｖａＳｃｒｉｐｔコードにより呼び出し可能な戻り値が設定されるメソッドとを特定し、コード変換部（１５２）が、特定されたメソッドの戻り値が引数に挿入される模擬関数の呼び出しコードをＪａｖａコード内に挿入し、データフロー解析部（１５３）が、模擬関数および特定されたメソッドの引数および戻り値を用いて、Ｊａｖａコードにより実装されたＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツとの間で送受信されるデータを観測してデータフローを解析する。
2017068889.tif 000002
【特許請求の範囲】
【請求項１】
第１のコードにより実装されたアプリケーションと該第１のコードとは異なる第２のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第１のコードによる実装箇所と、該連携機構において前記第２のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定部と、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第１のコード内に挿入する挿入部と、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第１のコードにより実装されたアプリケーションと前記第２のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析部と、
を備えることを特徴とする解析装置。
【請求項２】
前記解析部は、静的テイント解析により前記第１のコードにより実装されたアプリケーションと前記第２のコードにより実装されたアプリケーションとの間で送受信されるデータを観測することを特徴とする請求項１に記載の解析装置。
【請求項３】
前記挿入部は、さらに、戻り値が前記メソッドの引数に挿入される第２の模擬関数の呼び出しコードを前記第１のコード内に挿入することを特徴とする請求項１または２に記載の解析装置。
【請求項４】
解析装置で実行される解析方法であって、
第１のコードにより実装されたアプリケーションと該第１のコードとは異なる第２のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第１のコードによる実装箇所と、該連携機構において前記第２のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定工程と、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第１のコード内に挿入する挿入工程と、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第１のコードにより実装されたアプリケーションと前記第２のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析工程と、
を含んだことを特徴とする解析方法。
【請求項５】
コンピュータに、
第１のコードにより実装されたアプリケーションと該第１のコードとは異なる第２のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第１のコードによる実装箇所と、該連携機構において前記第２のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定ステップと、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第１のコード内に挿入する挿入ステップと、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第１のコードにより実装されたアプリケーションと前記第２のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析ステップと、
を実行させることを特徴とする解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法、および解析プログラムに関する。
【背景技術】
【０００２】
一般に、Ａｎｄｒｏｉｄ（登録商標）等が搭載された携帯情報端末を標的とした脅威の一つとして、情報漏洩が挙げられる。攻撃者は、様々な方法で悪意のあるＡｎｄｒｏｉｄアプリケーション（以下、Ａｎｄｒｏｉｄマルウェアと呼ぶ。）をユーザの端末にインストールさせる。インストールされたＡｎｄｒｏｉｄマルウェアは、端末内に保存されたユーザの個人情報、デバイス固有ＩＤ等の重要情報を攻撃者の元へ送信する。【０００３】
このようなＡｎｄｒｏｉｄマルウェアを解析する技術は、大別すると、隔離環境でＡｎｄｒｏｉｄマルウェアを動作させて実行時の挙動を観測する動的解析技術と、リバースエンジニアリング技術を用いて実行コードを読み解く静的解析技術との２種類に分類される。【０００４】
情報漏洩を行うＡｎｄｒｏｉｄマルウェアを検知する静的解析技術の一つに、静的テイント解析技術が存在する。静的テイント解析技術では、漏洩対象の情報を取得する関数（以下、Ｓｏｕｒｃｅと呼ぶ。）によって取得されたデータが、情報を端末外へ漏洩する関数（以下、Ｓｉｎｋと呼ぶ。）に入力されるか否か、つまり、ＳｏｕｒｃｅからＳｉｎｋへのデータフローが存在するか否かが検出される。ＳｏｕｒｃｅからＳｉｎｋへのデータフローが発見された場合には、解析対象アプリケーションの実行コード内に情報漏洩を行う実行パスが存在することを意味する（非特許文献１参照）。【０００５】
静的テイント解析技術は、実行コード中の様々な位置で、データが取りうる値の集合を収集するデータフロー解析の技術を基にしている。データフロー解析の技術を利用すれば、例えばプログラム中のある地点における変数Ａの値が、別の地点における変数Ｂに到達するか否か、すなわち変数Ａ、Ｂが同じ値を取り得るか否かを解析することが可能である（非特許文献２参照）。【０００６】
このように、従来、Ａｎｄｒｏｉｄアプリケーションを対象とした静的テイント解析技術は、Ｊａｖａ（登録商標）によって開発されたＡｎｄｒｏｉｄアプリケーションの実行コード（以下、アプリコードとも呼ぶ）を解析対象とする。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Steven  Arzt,  Siegfried  Rasthofer,  Christian  Fritz,  Eric  Bodden,  Alexandre  Bartel,  Jacques  Klein,  Yves  Le  Traon,  Damien  Octeau,  and  Patrick  McDaniel,  “FlowDroid:  Precise  Context,  Flow,  Field,  Object-sensitive  and  Lifecycle-aware  Taint  Analysis  for  Android  Apps”、[online]、2014年6月、In  Proceedings  of  the  35th  ACM  SIGPLAN  Conference  on  Programming  Language  Design  and  Implementation  (PLDI)、［平成27年8月27日検索］、インターネット＜URL:  http://www.bodden.de/pubs/far+14flowdroid.pdf＞
【非特許文献２】T.  Reps,  S.  Horwitz,  and  M.  Sagiv,  “Precise  Interprocedural  Dataflow  Analysis  via  Graph  Reachability”、[online]、1995年、In  Proceedings  of  the  22nd  ACM  SIGPLAN-SIGACT  Symposium  on  Principles  of  Programming  Languages  (POPL)、［平成27年8月27日検索］、インターネット＜URL:  http://www.cs.cornell.edu/courses/cs711/2005fa/papers/rhs-popl95.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来の静的テイント解析技術は、解析対象が単一のコードであるため、ＳｏｕｒｃｅやＳｉｎｋがＪａｖａアプリケーションコード内で完結していない場合に、情報漏洩を適切に検知できない場合があった。例えば、攻撃者は、ＡｎｄｒｏｉｄにおけるＪａｖａコードとＪａｖａＳｃｒｉｐｔ（登録商標）コードとの連携機構を悪用すれば、上述した静的テイント解析技術による情報漏洩の検知を回避することができる場合がある。【０００９】
具体的に、Ａｎｄｒｏｉｄアプリケーションの開発では、ＷｅｂＶｉｅｗと呼ばれる埋め込みブラウザのような機能が利用される。ＷｅｂＶｉｅｗは、画面の表示に関わるコンポーネントの一つであり、ブラウザにおけるアドレスバー、戻る・進むボタンなどの標準的なＵＩ（User  Interface）が存在せず、ウェブページを表示するためのフレームのみで構成されている。ＷｅｂＶｉｅｗを用いれば、Ａｎｄｒｏｉｄアプリケーション内でＨＴＭＬ、ＣＳＳ、ＪａｖａＳｃｒｉｐｔ等のコードで構成されたＷｅｂコンテンツを表示させることが可能である。また、アプリコードと、ＷｅｂＶｉｅｗ内に読み込まれたＷｅｂコンテンツとの間で、データを送受信するためのＡＰＩが提供されている。【００１０】
上記ＡＰＩの１つであるＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅを用いれば、アプリコード内のＪａｖａオブジェクトをＷｅｂＶｉｅｗ内に読み込まれたＪａｖａＳｃｒｉｐｔコード内に挿入することが可能である。挿入されたＪａｖａオブジェクト内に含まれるメソッドはＪａｖａＳｃｒｉｐｔコードから呼び出し可能になり、メソッドの引数、戻り値としてＪａｖａとＪａｖａＳｃｒｉｐｔとの間でデータをやりとりすることが可能となる。【００１１】
攻撃者は、アプリコード内のＳｏｕｒｃｅから取得した情報を、ＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅを利用してＪａｖａＳｃｒｉｐｔコードへ送信した後に、ＪａｖａＳｃｒｉｐｔコード内のＳｉｎｋを通じて端末外へ情報を漏洩させることができる。この場合に、静的テイント解析技術ではアプリコードのみを解析対象としているため、ＪａｖａＳｃｒｉｐｔコード内に含まれるＳｉｎｋを発見することができない。これにより、攻撃者が、静的テイント解析技術による情報漏洩の検知を回避することが可能になる。【００１２】
このように、従来の静的テイント解析技術は、解析対象が単一のコードであるため、ＳｏｕｒｃｅやＳｉｎｋがＪａｖａアプリケーションコード内で完結していない場合に、情報漏洩を検知することができなかった。すなわち、ＪａｖａコードとＪａｖａＳｃｒｉｐｔコードとの連携機構が利用され、情報がＪａｖａとＪａｖａＳｃｒｉｐｔとの間で送受信された後に漏洩する場合に、静的テイント解析技術では情報漏洩を検知することができなかった。【００１３】
本発明は、上記に鑑みてなされたものであって、攻撃者に回避されずに情報漏洩を検知することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するために、本発明に係る解析装置は、第１のコードにより実装されたアプリケーションと該第１のコードとは異なる第２のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第１のコードによる実装箇所と、該連携機構において前記第２のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定部と、特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第１のコード内に挿入する挿入部と、前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第１のコードにより実装されたアプリケーションと前記第２のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析部と、を備えることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、攻撃者に回避されずに情報漏洩を検知することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、本発明の一実施形態に係る解析装置の概略構成を示す模式図である。
【図２】図２は、本実施形態の静的コード解析部の処理を説明するための説明図である。
【図３】図３は、本実施形態の静的コード解析部の処理を説明するための説明図である。
【図４】図４は、本実施形態の静的コード解析部の処理を説明するための説明図である。
【図５】図５は、本実施形態のコード変換部の処理を説明するための説明図である。
【図６】図６は、本実施形態のコード変換部の処理を説明するための説明図である。
【図７】図７は、本実施形態のデータフロー解析部の処理を説明するための説明図である。
【図８】図８は、本実施形態のデータフロー解析部の処理を説明するための説明図である。
【図９】図９は、本実施形態の解析処理手順を示すフローチャートである。
【図１０】図１０は、本実施形態の静的コード解析処理手順を示すフローチャートである。
【図１１】図１１は、本実施形態のコード変換処理手順を示すフローチャートである。
【図１２】図１２は、本実施形態のデータフロー解析処理手順を示すフローチャートである。
【図１３】図１３は、解析プログラムを実行するコンピュータを例示する図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【００１８】
［解析装置の構成］
まず、図１を参照して、本実施形態に係る解析装置の概略構成を説明する。解析装置１は、ワークステーションやパソコン等の汎用コンピュータで実現され、入力部１１と、出力部１２と、通信制御部１３と、記憶部１４と、制御部１５とを備える。
【００１９】
入力部１１は、キーボードやマウス等の入力デバイスを用いて実現され、操作者による入力操作に対応して、制御部１５に対して各種指示情報を入力する。出力部１２は、液晶ディスプレイなどの表示装置、プリンター等の印刷装置、情報通信装置等によって実現され、後述する解析処理の結果等を操作者に対して出力する。通信制御部１３は、ＮＩＣ（Network  Interface  Card）等で実現され、ＬＡＮ（Local  Area  Network）やインターネットなどの電気通信回線を介した外部の装置と制御部１５との通信を制御する。
【００２０】
記憶部１４は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。記憶部１４には、解析装置１を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが予め記憶され、あるいは処理の都度一時的に記憶される。なお、記憶部１４は、ＬＡＮやインターネットなどの電気通信回線を介して制御部１５と通信する構成でもよい。
【００２１】
制御部１５は、ＣＰＵ（Central  Processing  Unit）等の演算処理装置がメモリに記憶された処理プログラムを実行することにより、図１に例示するように、静的コード解析部１５１、コード変換部１５２、およびデータフロー解析部１５３として機能する。
【００２２】
静的コード解析部１５１は、特定部として機能する。すなわち、静的コード解析部１５１は、Ｊａｖａコードにより実装されたＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツとの間でデータの送受信を行う連携機構のＪａｖａコードによる実装箇所と、該連携機構においてＪａｖａＳｃｒｉｐｔコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する。
【００２３】
具体的に、まず、静的コード解析部１５１は、解析対象のＡｎｄｒｏｉｄアプリケーションの実行コード内の、ＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔとの間の連携機構であるＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所を特定する。
【００２４】
図２は、ＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの一例であるａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードを含むＪａｖａコードの一部を例示する図である。ここで、ａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅは、ＪａｖａオブジェクトをＪａｖａＳｃｒｉｐｔコード内に挿入するためのＡＰＩである。図２の例では、ａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所は、１２行目と特定される。
【００２５】
次に、静的コード解析部１５１は、特定されたＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装内容から、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能で戻り値が設定されるメソッドを特定する。
【００２６】
図２の例においては、まず、ＪａｖａＳｃｒｉｐｔに挿入されるＪａｖａオブジェクトのクラス（以下、ＪＳＩクラスと呼ぶ。）が、８行目および１２行目の実装内容からＪＳＩＣｌａｓｓと特定される。すなわち、１２行目の実装内容から、ＪａｖａＳｃｒｉｐｔに挿入されるＪａｖａオブジェクトは変数ｊｓｉであることがわかる。この変数ｊｓｉは、８行目の実装内容により、ＪＳＩＣｌａｓｓのオブジェクトとして宣言されていることから、このＪａｖａオブジェクトのクラスはＪＳＩＣｌａｓｓであり、図２の例におけるＪＳＩクラスはＪＳＩＣｌａｓｓと特定される。
【００２７】
そして、静的コード解析部１５１は、特定されたＪＳＩＣｌａｓｓで宣言されているメソッドのうち、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能で戻り値が設定されるメソッドを特定する。図３は、ＪＳＩＣｌａｓｓで宣言されているメソッドの一覧を例示する図である。図３の例では、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能で戻り値が設定されるメソッドとして、例えば、ｇｅｔＩｎｆｏ１（）が特定される。
【００２８】
なお、同一のＪＳＩクラスで宣言されているメソッドには、図４に例示するように、複数種類のメソッドが存在する。このうち、ｐｕｂｌｉｃメソッドのみがＪａｖａＳｃｒｉｐｔコードから呼び出し可能である。また、ＡｎｄｒｏｉｄのＡＰＩ  ｌｅｖｅｌ  １７以上の環境で動作している場合には、「ＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅ」というアノテーションが付加されている必要がある。以下、ＪＳＩクラス内で宣言され、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能なメソッドをＪＳＩメソッドと呼ぶ。
【００２９】
そして、図４のＡ１に例示するように、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能ではないメソッドは、静的コード解析部１５１の特定の対象外である。さらに、Ａ２に例示するように、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能であっても、ｖｏｉｄ型で戻り値が設定されておらずＪａｖａＳｃｒｉｐｔへデータを送信できないメソッドも、静的コード解析部１５１による特定の対象外とする。したがって、静的コード解析部１５１は、Ａ３に例示するように、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能かつ戻り値が設定されていてＪａｖａＳｃｒｉｐｔへデータを送信可能であるメソッドを特定の対象（以下、観測対象ＪＳＩメソッドと呼ぶ。）とする。
【００３０】
コード変換部１５２は、挿入部として機能する。すなわち、コード変換部１５２は、特定されたメソッドの戻り値が引数に挿入される模擬関数の呼び出しコードをＪａｖａコード内に挿入する。ここで、図５を参照して、コード変換部１５２の処理の概要について説明する。この処理前には、図５（ａ）に例示するように、Ｊａｖａコードで実装されたＳｏｕｒｃｅから、ＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツ内のＳｉｎｋへのＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅを介したデータフローＢ１が存在する場合が想定される。この場合に、コード変換部１５２は、図５（ｂ）に例示するように、ＪａｖａＳｃｒｉｐｔコードで実装されるＳｉｎｋへのデータフローＢ１を、Ｊａｖａコードで実装される模擬関数であるＤｕｍｍｙＳｉｎｋへのデータフローＢ２に変換する。このように、ＪａｖａからＪａｖａＳｃｒｉｐｔへのデータフローＢ１はデータフローＢ２に変換されることにより、単一コード内のオブジェクト間のデータフローを対象とする静的テイント解析により観測が可能となる。
【００３１】
具体的に、コード変換部１５２は、図６に例示するように、Ｊａｖａコードの変換を行う。すなわち、コード変換部１５２は、図６のＣ４に例示するように、ＤｕｍｍｙＳｉｎｋを宣言する。さらに、コード変換部１５２は、Ｃ１に例示するｊａｖａコードに、Ｃ２の４行および５行に例示するように、観測対象ＪＳＩメソッドの戻り値を引数に入力するＤｕｍｍｙＳｉｎｋの呼び出しコードを挿入する。
【００３２】
図６において、ＪＳＩＣｌａｓｓで宣言される観測対象ＪＳＩメソッドとして、Ｃ３に例示するように、ｇｅｔＩｎｆｏ１（）、ｇｅｔＩｎｆｏ２（）の２種類が例示されている。この場合に、コード変換部１５２は、Ｃ２の４行および５行に例示するように、２種類の観測対象ＪＳＩメソッドのそれぞれの戻り値をＤｕｍｍｙＳｉｎｋすなわちＤｕｍｍｙＣｌａｓｓ．ｄｕｍｍｙＳｉｎｋＭｅｔｈｏｄ（）の引数に入力するように実装する。
【００３３】
なお、コード変換部１５２は、ＤｕｍｍｙＳｉｎｋを宣言する際、ＤｕｍｍｙＳｉｎｋの引数の型を、観測対象ＪＳＩメソッドの戻り値の型と一致させる。図６の例では、Ｃ３の３行目および９行目に例示するように、ｇｅｔＩｎｆｏ１（）およびｇｅｔＩｎｆｏ２（）の戻り値の型はＳｔｒｉｎｇである。これに対応して、Ｃ４の３行目に例示するように、ＤｕｍｍｙＣｌａｓｓ．ｄｕｍｍｙＳｉｎｋＭｅｔｈｏｄ（）の引数の型はＳｔｒｉｎｇである。このように、コード変換部１５２は、ＤｕｍｍｙＳｉｎｋの引数の型を観測対象ＪＳＩメソッドの戻り値の型と一致させる。また、この変数の型が複数種類ある場合には、型ごとにＤｕｍｍｙＳｉｎｋを宣言する。
【００３４】
また、静的コード解析部１５１やコード変換部１５２の処理において、元のバイトコードに再変換可能な範囲で、アプリコードを任意のアセンブリ言語、中間表現などへ変換してもよい。
【００３５】
データフロー解析部１５３は、解析部として機能する。すなわち、データフロー解析部１５３は、ＤｕｍｍｙＳｉｎｋおよび特定されたメソッドの引数および戻り値を用いて、該メソッドとＤｕｍｍｙＳｉｎｋとの間で送受信されるデータを観測してデータフローを解析する。具体的に、データフロー解析部１５３は、図７に例示する前述のコード変換部１５２により変換されたＪａｖａコードを対象に、図８に例示するように、ＤｕｍｍｙＳｉｎｋおよび特定されたメソッドの引数および戻り値を観測して、Ｊａｖａコード内の任意のＳｏｕｒｃｅからＤｕｍｍｙＳｉｎｋへのデータフローを解析する。
【００３６】
つまり、データフロー解析部１５３は、Ｓｏｕｒｃｅすなわち観測対象ＪＳＩメソッドとして、例えばｇｅｔＩｎｆｏ１（）により取得されたデータ（図７のＤ１の３行目参照）を、例えば静的テイント解析技術を適用して追跡する。この情報は、図８に示すように、ｇｅｔＤａｔａ（）の戻り値、Ｓｔｒｉｎｇ  ｄａｔａ、ｒｅｔｕｒｎ  ｄａｔａ（図７Ｄ１の４行目〜５行目参照）、ｊｓｉ．ｇｅｔＩｎｆｏ１（）の戻り値（図７Ｄ２の４行目参照）、ＤｕｍｍｙＳｉｎｋとしてのＤｕｍｍｙ．ｄｕｍｍｙＳｉｎｋＭｅｔｈｏｄ（）の引数（図７Ｄ３の３行目参照）の順に伝播する。
【００３７】
このように、Ｊａｖａコードの任意のＳｏｕｒｃｅからＤｕｍｍｙＳｉｎｋへのデータフローが検知された場合には、Ｓｏｕｒｃｅにより取得されたデータがＪａｖａＳｃｒｉｐｔコードすなわちＷｅｂコンテンツへ送信されることを意味する。したがって、ＤｕｍｍｙＳｉｎｋへのデータフローを解析することにより、Ｗｅｂコンテンツへのデータフローを解析することができる。なお、データフローを解析する静的テイント解析の手法は特に限定されない。
【００３８】
［解析処理］
次に、図９〜図１２のフローチャートを参照して、解析装置１による解析処理手順について説明する。まず、図９のフローチャートは、例えば、入力部１１を介して解析処理の開始を指示する入力があったタイミングで開始となる。
【００３９】
静的コード解析部１５１は、解析対象のＡｎｄｒｏｉｄアプリケーションの実行コードに、ＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの一例として、例えばａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所があるかを確認する（ステップＳ１）。ａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの実装箇所がない場合には（ステップＳ１，Ｎｏ）、解析処理は終了する。一方、ａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの実装箇所がある場合には（ステップＳ１，Ｙｅｓ）、静的コード解析部１５１は、実装箇所を抽出し（ステップＳ２）、静的コード解析処理を行う（ステップＳ３）。静的コード解析処理については、図１０を参照して後述する。
【００４０】
次に、コード変換部１５２が、コード変換処理を行う（ステップＳ４）。コード変換処理については、図１１を参照して後述する。
【００４１】
その後、静的コード解析部１５１は、未抽出のａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所があるかを確認する（ステップＳ５）。未抽出のａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所がある場合には（ステップＳ５，Ｙｅｓ）、静的コード解析部１５１は、ステップＳ２の処理に戻す。
【００４２】
一方、未抽出のａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装箇所がない場合には（ステップＳ５，Ｎｏ）、データフロー解析部１５３が、データフロー解析処理を行う（ステップＳ６）。データフロー解析処理については、図１２を参照して後述する。これにより、一連の解析処理が終了する。
【００４３】
図１０は、上記ステップＳ３の静的コード解析処理手順を示すフローチャートである。静的コード解析部１５１は、ａｄｄＪａｖａｓｃｒｉｐｔＩｎｔｅｒｆａｃｅの呼び出しコードの実装内容から、まず、ＪＳＩクラスを特定する（ステップＳ３１）。
【００４４】
次に、静的コード解析部１５１は、特定したＪＳＩクラスで宣言されているメソッドの一覧を取得する（ステップＳ３２）。
【００４５】
そして、静的コード解析部１５１は、特定したＪＳＩクラスで宣言されているメソッドの内、ＪａｖａＳｃｒｉｐｔコードにより呼び出し可能で戻り値が設定されるメソッドすなわち観測対象ＪＳＩメソッドを特定する（ステップＳ３３）。これにより、一連の静的コード解析処理は終了する。
【００４６】
図１１は、上記ステップＳ４のコード変換処理手順を示すフローチャートである。コード変換部１５２は、観測対象ＪＳＩメソッドが存在する場合に（ステップＳ４１，Ｙｅｓ）、この観測対象ＪＳＩメソッドの戻り値の型を取得する（ステップＳ４２）。
【００４７】
次に、コード変換部１５２は、引数の型を観測対象ＪＳＩメソッドの戻り値の型と一致させたＤｕｍｍｙＳｉｎｋをＪａｖａコードに挿入する（ステップＳ４３）。
【００４８】
次に、コード変換部１５２は、観測対象ＪＳＩメソッドの戻り値を引数としたＤｕｍｍｙＳｉｎｋの呼び出しコードをＪａｖａコードに挿入する（ステップＳ４４）。
【００４９】
その後、コード変換部１５２は、ステップＳ４１に処理を戻し、観測対象ＪＳＩメソッドが存在する限り、以上の処理を繰り返す。観測対象ＪＳＩメソッドが存在しない場合には（ステップＳ４１，Ｎｏ）、一連のコード変換処理は終了する。
【００５０】
図１２は、上記ステップＳ６のデータフロー解析処理手順を示すフローチャートである。データフロー解析部１５３は、重要情報を取得する任意の関数をＳｏｕｒｃｅとし、ＤｕｍｍｙＳｉｎｋをＳｉｎｋとして設定する（ステップＳ６１）。そして、データフロー解析部１５３は、ＳｏｕｒｃｅからＳｉｎｋへのデータフローを静的テイント解析技術により解析する（ステップＳ６２）。これにより、一連のデータフロー解析処理は終了する。
【００５１】
以上、説明したように、本実施形態の解析装置１では、静的コード解析部１５１が、Ｊａｖａコードにより実装されたＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツとの間でデータの送受信を行う連携機構であるＪａｖａＩｎｔｅｒｆａｃｅのＪａｖａコードによる実装箇所と、該連携機構においてＪａｖａＳｃｒｉｐｔコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する。また、コード変換部１５２が、特定されたメソッドの戻り値が引数に挿入されるＤｕｍｍｙＳｉｎｋの呼び出しコードをＪａｖａコード内に挿入する。また、データフロー解析部１５３が、ＤｕｍｍｙＳｉｎｋおよび特定されたメソッドの引数および戻り値を用いて、Ｊａｖａコードにより実装されたＡｎｄｒｏｉｄアプリケーションとＪａｖａＳｃｒｉｐｔコードで実装されたＷｅｂコンテンツとの間で送受信されるデータを観測してデータフローを解析する。
【００５２】
これにより、解析装置１は、Ｊａｖａコードの任意のＳｏｕｒｃｅからＤｕｍｍｙＳｉｎｋへのデータフローを検知することができる。また、解析装置１は、単一コード内のオブジェクト間のデータフローを対象とする静的テイント解析技術を用いて、ＪａｖａからＪａｖａＳｃｒｉｐｔへのデータフローを解析することができる。したがって、攻撃者に回避されずに情報漏洩を検知することができる。
【００５３】
なお、本発明は、Ｊａｖａで取得された情報がＪａｖａＳｃｒｉｐｔにより外部に送信される場合のデータフロー解析に限定されない。例えば、ＪａｖａＳｃｒｉｐｔコード内のＳｏｕｒｃｅが取得した情報がＪａｖａコード内のＳｉｎｋにより外部に送信される場合について、戻り値をＳｉｎｋの引数とする模擬関数ＤｕｍｍｙＳｏｕｒｃｅの呼び出しコードをＪａｖａコード内に挿入する。このＤｕｍｍｙＳｏｕｒｃｅからＳｉｎｋへのデータフロー解析を行えば、ＪａｖａＳｃｒｉｐｔで取得された情報がＪａｖａにより外部に送信される場合のデータフローを観測することができる。
【００５４】
［プログラム］
上記実施形態に係る解析装置１が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。一実施形態として、解析装置１は、パッケージソフトウェアやオンラインソフトウェアとして上記の解析処理を実行する解析プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の解析プログラムを情報処理装置に実行させることにより、情報処理装置を解析装置１として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）などの移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）などのスレート端末などがその範疇に含まれる。また、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の解析処理に関するサービスを提供するサーバ装置として実装することもできる。例えば、解析装置１は、解析対象のＡｎｄｒｏｉｄアプリケーションを入力とし、当該Ａｎｄｒｏｉｄアプリケーションに対する上記の解析処理の実行結果を出力する解析処理サービスを提供するサーバ装置として実装される。この場合、解析装置１は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の解析処理に関するサービスを提供するクラウドとして実装することとしてもかまわない。以下に、解析装置１と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
【００５５】
図１３に示すように、解析プログラムを実行するコンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００５６】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１０４１に接続される。ディスクドライブ１０４１には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１０５１およびキーボード１０５２が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１０６１が接続される。
【００５７】
ここで、図１３に示すように、ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した各データは、例えばハードディスクドライブ１０３１やメモリ１０１０に記憶される。
【００５８】
また、解析プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１０９３として、ハードディスクドライブ１０３１に記憶される。具体的には、上記実施形態で説明した解析装置１が実行する各処理が記述されたプログラムモジュール１０９３が、ハードディスクドライブ１０３１に記憶される。
【００５９】
また、解析プログラムによる情報処理に用いられるデータは、プログラムデータ１０９４として、例えば、ハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００６０】
なお、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００６１】
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述および図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例および運用技術等は全て本発明の範疇に含まれる。
【符号の説明】
【００６２】
１  解析装置
１１  入力部
１２  出力部
１３  通信制御部
１４  記憶部
１５  制御部
１５１  静的コード解析部
１５２  コード変換部
１５３  データフロー解析部
【図１】
2017068889.tif 000003
【図２】
2017068889.tif 000004
【図３】
2017068889.tif 000005
【図４】
2017068889.tif 000006
【図５】
2017068889.tif 000007
【図６】
2017068889.tif 000008
【図７】
2017068889.tif 000009
【図８】
2017068889.tif 000010
【図９】
2017068889.tif 000011
【図１０】
2017068889.tif 000012
【図１１】
2017068889.tif 000013
【図１２】
2017068889.tif 000014
【図１３】
2017068889.tif 000015
【国際調査報告】
2017068889.tif 000016
2017068889.tif 000017