JPWO2017068889A1 - 解析装置、解析方法、および解析プログラム - Google Patents

解析装置、解析方法、および解析プログラム Download PDF

Info

Publication number
JPWO2017068889A1
JPWO2017068889A1 JP2017546452A JP2017546452A JPWO2017068889A1 JP WO2017068889 A1 JPWO2017068889 A1 JP WO2017068889A1 JP 2017546452 A JP2017546452 A JP 2017546452A JP 2017546452 A JP2017546452 A JP 2017546452A JP WO2017068889 A1 JPWO2017068889 A1 JP WO2017068889A1
Authority
JP
Japan
Prior art keywords
code
analysis
return value
application implemented
data flow
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
JP2017546452A
Other languages
English (en)
Other versions
JP6434646B2 (ja
Inventor
文宏 金井
文宏 金井
健 矢田
健 矢田
満昭 秋山
満昭 秋山
雄太 高田
雄太 高田
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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2017068889A1 publication Critical patent/JPWO2017068889A1/ja
Application granted granted Critical
Publication of JP6434646B2 publication Critical patent/JP6434646B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • Virology (AREA)
  • Databases & Information Systems (AREA)
  • Bioethics (AREA)
  • Stored Programmes (AREA)

Abstract

攻撃者に回避されずに情報漏洩を検知することを目的として、静的コード解析部(151)が、Javaコードにより実装されたAndroidアプリケーションとJavaScriptコードで実装されたWebコンテンツとの間でデータの送受信を行う連携機構のJavaコードによる実装箇所と、該連携機構においてJavaScriptコードにより呼び出し可能な戻り値が設定されるメソッドとを特定し、コード変換部(152)が、特定されたメソッドの戻り値が引数に挿入される模擬関数の呼び出しコードをJavaコード内に挿入し、データフロー解析部(153)が、模擬関数および特定されたメソッドの引数および戻り値を用いて、Javaコードにより実装されたAndroidアプリケーションとJavaScriptコードで実装されたWebコンテンツとの間で送受信されるデータを観測してデータフローを解析する。

Description

本発明は、解析装置、解析方法、および解析プログラムに関する。
一般に、Android(登録商標)等が搭載された携帯情報端末を標的とした脅威の一つとして、情報漏洩が挙げられる。攻撃者は、様々な方法で悪意のあるAndroidアプリケーション(以下、Androidマルウェアと呼ぶ。)をユーザの端末にインストールさせる。インストールされたAndroidマルウェアは、端末内に保存されたユーザの個人情報、デバイス固有ID等の重要情報を攻撃者の元へ送信する。
このようなAndroidマルウェアを解析する技術は、大別すると、隔離環境でAndroidマルウェアを動作させて実行時の挙動を観測する動的解析技術と、リバースエンジニアリング技術を用いて実行コードを読み解く静的解析技術との2種類に分類される。
情報漏洩を行うAndroidマルウェアを検知する静的解析技術の一つに、静的テイント解析技術が存在する。静的テイント解析技術では、漏洩対象の情報を取得する関数(以下、Sourceと呼ぶ。)によって取得されたデータが、情報を端末外へ漏洩する関数(以下、Sinkと呼ぶ。)に入力されるか否か、つまり、SourceからSinkへのデータフローが存在するか否かが検出される。SourceからSinkへのデータフローが発見された場合には、解析対象アプリケーションの実行コード内に情報漏洩を行う実行パスが存在することを意味する(非特許文献1参照)。
静的テイント解析技術は、実行コード中の様々な位置で、データが取りうる値の集合を収集するデータフロー解析の技術を基にしている。データフロー解析の技術を利用すれば、例えばプログラム中のある地点における変数Aの値が、別の地点における変数Bに到達するか否か、すなわち変数A、Bが同じ値を取り得るか否かを解析することが可能である(非特許文献2参照)。
このように、従来、Androidアプリケーションを対象とした静的テイント解析技術は、Java(登録商標)によって開発されたAndroidアプリケーションの実行コード(以下、アプリコードとも呼ぶ)を解析対象とする。
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>
しかしながら、従来の静的テイント解析技術は、解析対象が単一のコードであるため、SourceやSinkがJavaアプリケーションコード内で完結していない場合に、情報漏洩を適切に検知できない場合があった。例えば、攻撃者は、AndroidにおけるJavaコードとJavaScript(登録商標)コードとの連携機構を悪用すれば、上述した静的テイント解析技術による情報漏洩の検知を回避することができる場合がある。
具体的に、Androidアプリケーションの開発では、WebViewと呼ばれる埋め込みブラウザのような機能が利用される。WebViewは、画面の表示に関わるコンポーネントの一つであり、ブラウザにおけるアドレスバー、戻る・進むボタンなどの標準的なUI(User Interface)が存在せず、ウェブページを表示するためのフレームのみで構成されている。WebViewを用いれば、Androidアプリケーション内でHTML、CSS、JavaScript等のコードで構成されたWebコンテンツを表示させることが可能である。また、アプリコードと、WebView内に読み込まれたWebコンテンツとの間で、データを送受信するためのAPIが提供されている。
上記APIの1つであるJavascriptInterfaceを用いれば、アプリコード内のJavaオブジェクトをWebView内に読み込まれたJavaScriptコード内に挿入することが可能である。挿入されたJavaオブジェクト内に含まれるメソッドはJavaScriptコードから呼び出し可能になり、メソッドの引数、戻り値としてJavaとJavaScriptとの間でデータをやりとりすることが可能となる。
攻撃者は、アプリコード内のSourceから取得した情報を、JavascriptInterfaceを利用してJavaScriptコードへ送信した後に、JavaScriptコード内のSinkを通じて端末外へ情報を漏洩させることができる。この場合に、静的テイント解析技術ではアプリコードのみを解析対象としているため、JavaScriptコード内に含まれるSinkを発見することができない。これにより、攻撃者が、静的テイント解析技術による情報漏洩の検知を回避することが可能になる。
このように、従来の静的テイント解析技術は、解析対象が単一のコードであるため、SourceやSinkがJavaアプリケーションコード内で完結していない場合に、情報漏洩を検知することができなかった。すなわち、JavaコードとJavaScriptコードとの連携機構が利用され、情報がJavaとJavaScriptとの間で送受信された後に漏洩する場合に、静的テイント解析技術では情報漏洩を検知することができなかった。
本発明は、上記に鑑みてなされたものであって、攻撃者に回避されずに情報漏洩を検知することを目的とする。
上述した課題を解決し、目的を達成するために、本発明に係る解析装置は、第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定部と、特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入部と、前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析部と、を備えることを特徴とする。
本発明によれば、攻撃者に回避されずに情報漏洩を検知することができる。
図1は、本発明の一実施形態に係る解析装置の概略構成を示す模式図である。 図2は、本実施形態の静的コード解析部の処理を説明するための説明図である。 図3は、本実施形態の静的コード解析部の処理を説明するための説明図である。 図4は、本実施形態の静的コード解析部の処理を説明するための説明図である。 図5は、本実施形態のコード変換部の処理を説明するための説明図である。 図6は、本実施形態のコード変換部の処理を説明するための説明図である。 図7は、本実施形態のデータフロー解析部の処理を説明するための説明図である。 図8は、本実施形態のデータフロー解析部の処理を説明するための説明図である。 図9は、本実施形態の解析処理手順を示すフローチャートである。 図10は、本実施形態の静的コード解析処理手順を示すフローチャートである。 図11は、本実施形態のコード変換処理手順を示すフローチャートである。 図12は、本実施形態のデータフロー解析処理手順を示すフローチャートである。 図13は、解析プログラムを実行するコンピュータを例示する図である。
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
[解析装置の構成]
まず、図1を参照して、本実施形態に係る解析装置の概略構成を説明する。解析装置1は、ワークステーションやパソコン等の汎用コンピュータで実現され、入力部11と、出力部12と、通信制御部13と、記憶部14と、制御部15とを備える。
入力部11は、キーボードやマウス等の入力デバイスを用いて実現され、操作者による入力操作に対応して、制御部15に対して各種指示情報を入力する。出力部12は、液晶ディスプレイなどの表示装置、プリンター等の印刷装置、情報通信装置等によって実現され、後述する解析処理の結果等を操作者に対して出力する。通信制御部13は、NIC(Network Interface Card)等で実現され、LAN(Local Area Network)やインターネットなどの電気通信回線を介した外部の装置と制御部15との通信を制御する。
記憶部14は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。記憶部14には、解析装置1を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが予め記憶され、あるいは処理の都度一時的に記憶される。なお、記憶部14は、LANやインターネットなどの電気通信回線を介して制御部15と通信する構成でもよい。
制御部15は、CPU(Central Processing Unit)等の演算処理装置がメモリに記憶された処理プログラムを実行することにより、図1に例示するように、静的コード解析部151、コード変換部152、およびデータフロー解析部153として機能する。
静的コード解析部151は、特定部として機能する。すなわち、静的コード解析部151は、Javaコードにより実装されたAndroidアプリケーションとJavaScriptコードで実装されたWebコンテンツとの間でデータの送受信を行う連携機構のJavaコードによる実装箇所と、該連携機構においてJavaScriptコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する。
具体的に、まず、静的コード解析部151は、解析対象のAndroidアプリケーションの実行コード内の、AndroidアプリケーションとJavaScriptとの間の連携機構であるJavascriptInterfaceの呼び出しコードの実装箇所を特定する。
図2は、JavascriptInterfaceの一例であるaddJavascriptInterfaceの呼び出しコードを含むJavaコードの一部を例示する図である。ここで、addJavascriptInterfaceは、JavaオブジェクトをJavaScriptコード内に挿入するためのAPIである。図2の例では、addJavascriptInterfaceの呼び出しコードの実装箇所は、12行目と特定される。
次に、静的コード解析部151は、特定されたJavascriptInterfaceの呼び出しコードの実装内容から、JavaScriptコードにより呼び出し可能で戻り値が設定されるメソッドを特定する。
図2の例においては、まず、JavaScriptに挿入されるJavaオブジェクトのクラス(以下、JSIクラスと呼ぶ。)が、8行目および12行目の実装内容からJSIClassと特定される。すなわち、12行目の実装内容から、JavaScriptに挿入されるJavaオブジェクトは変数jsiであることがわかる。この変数jsiは、8行目の実装内容により、JSIClassのオブジェクトとして宣言されていることから、このJavaオブジェクトのクラスはJSIClassであり、図2の例におけるJSIクラスはJSIClassと特定される。
そして、静的コード解析部151は、特定されたJSIClassで宣言されているメソッドのうち、JavaScriptコードにより呼び出し可能で戻り値が設定されるメソッドを特定する。図3は、JSIClassで宣言されているメソッドの一覧を例示する図である。図3の例では、JavaScriptコードにより呼び出し可能で戻り値が設定されるメソッドとして、例えば、getInfo1()が特定される。
なお、同一のJSIクラスで宣言されているメソッドには、図4に例示するように、複数種類のメソッドが存在する。このうち、publicメソッドのみがJavaScriptコードから呼び出し可能である。また、AndroidのAPI level 17以上の環境で動作している場合には、「JavascriptInterface」というアノテーションが付加されている必要がある。以下、JSIクラス内で宣言され、JavaScriptコードにより呼び出し可能なメソッドをJSIメソッドと呼ぶ。
そして、図4のA1に例示するように、JavaScriptコードにより呼び出し可能ではないメソッドは、静的コード解析部151の特定の対象外である。さらに、A2に例示するように、JavaScriptコードにより呼び出し可能であっても、void型で戻り値が設定されておらずJavaScriptへデータを送信できないメソッドも、静的コード解析部151による特定の対象外とする。したがって、静的コード解析部151は、A3に例示するように、JavaScriptコードにより呼び出し可能かつ戻り値が設定されていてJavaScriptへデータを送信可能であるメソッドを特定の対象(以下、観測対象JSIメソッドと呼ぶ。)とする。
コード変換部152は、挿入部として機能する。すなわち、コード変換部152は、特定されたメソッドの戻り値が引数に挿入される模擬関数の呼び出しコードをJavaコード内に挿入する。ここで、図5を参照して、コード変換部152の処理の概要について説明する。この処理前には、図5(a)に例示するように、Javaコードで実装されたSourceから、JavaScriptコードで実装されたWebコンテンツ内のSinkへのJavascriptInterfaceを介したデータフローB1が存在する場合が想定される。この場合に、コード変換部152は、図5(b)に例示するように、JavaScriptコードで実装されるSinkへのデータフローB1を、Javaコードで実装される模擬関数であるDummySinkへのデータフローB2に変換する。このように、JavaからJavaScriptへのデータフローB1はデータフローB2に変換されることにより、単一コード内のオブジェクト間のデータフローを対象とする静的テイント解析により観測が可能となる。
具体的に、コード変換部152は、図6に例示するように、Javaコードの変換を行う。すなわち、コード変換部152は、図6のC4に例示するように、DummySinkを宣言する。さらに、コード変換部152は、C1に例示するjavaコードに、C2の4行および5行に例示するように、観測対象JSIメソッドの戻り値を引数に入力するDummySinkの呼び出しコードを挿入する。
図6において、JSIClassで宣言される観測対象JSIメソッドとして、C3に例示するように、getInfo1()、getInfo2()の2種類が例示されている。この場合に、コード変換部152は、C2の4行および5行に例示するように、2種類の観測対象JSIメソッドのそれぞれの戻り値をDummySinkすなわちDummyClass.dummySinkMethod()の引数に入力するように実装する。
なお、コード変換部152は、DummySinkを宣言する際、DummySinkの引数の型を、観測対象JSIメソッドの戻り値の型と一致させる。図6の例では、C3の3行目および9行目に例示するように、getInfo1()およびgetInfo2()の戻り値の型はStringである。これに対応して、C4の3行目に例示するように、DummyClass.dummySinkMethod()の引数の型はStringである。このように、コード変換部152は、DummySinkの引数の型を観測対象JSIメソッドの戻り値の型と一致させる。また、この変数の型が複数種類ある場合には、型ごとにDummySinkを宣言する。
また、静的コード解析部151やコード変換部152の処理において、元のバイトコードに再変換可能な範囲で、アプリコードを任意のアセンブリ言語、中間表現などへ変換してもよい。
データフロー解析部153は、解析部として機能する。すなわち、データフロー解析部153は、DummySinkおよび特定されたメソッドの引数および戻り値を用いて、該メソッドとDummySinkとの間で送受信されるデータを観測してデータフローを解析する。具体的に、データフロー解析部153は、図7に例示する前述のコード変換部152により変換されたJavaコードを対象に、図8に例示するように、DummySinkおよび特定されたメソッドの引数および戻り値を観測して、Javaコード内の任意のSourceからDummySinkへのデータフローを解析する。
つまり、データフロー解析部153は、Sourceすなわち観測対象JSIメソッドとして、例えばgetInfo1()により取得されたデータ(図7のD1の3行目参照)を、例えば静的テイント解析技術を適用して追跡する。この情報は、図8に示すように、getData()の戻り値、String data、return data(図7D1の4行目〜5行目参照)、jsi.getInfo1()の戻り値(図7D2の4行目参照)、DummySinkとしてのDummy.dummySinkMethod()の引数(図7D3の3行目参照)の順に伝播する。
このように、Javaコードの任意のSourceからDummySinkへのデータフローが検知された場合には、Sourceにより取得されたデータがJavaScriptコードすなわちWebコンテンツへ送信されることを意味する。したがって、DummySinkへのデータフローを解析することにより、Webコンテンツへのデータフローを解析することができる。なお、データフローを解析する静的テイント解析の手法は特に限定されない。
[解析処理]
次に、図9〜図12のフローチャートを参照して、解析装置1による解析処理手順について説明する。まず、図9のフローチャートは、例えば、入力部11を介して解析処理の開始を指示する入力があったタイミングで開始となる。
静的コード解析部151は、解析対象のAndroidアプリケーションの実行コードに、JavascriptInterfaceの一例として、例えばaddJavascriptInterfaceの呼び出しコードの実装箇所があるかを確認する(ステップS1)。addJavascriptInterfaceの実装箇所がない場合には(ステップS1,No)、解析処理は終了する。一方、addJavascriptInterfaceの実装箇所がある場合には(ステップS1,Yes)、静的コード解析部151は、実装箇所を抽出し(ステップS2)、静的コード解析処理を行う(ステップS3)。静的コード解析処理については、図10を参照して後述する。
次に、コード変換部152が、コード変換処理を行う(ステップS4)。コード変換処理については、図11を参照して後述する。
その後、静的コード解析部151は、未抽出のaddJavascriptInterfaceの呼び出しコードの実装箇所があるかを確認する(ステップS5)。未抽出のaddJavascriptInterfaceの呼び出しコードの実装箇所がある場合には(ステップS5,Yes)、静的コード解析部151は、ステップS2の処理に戻す。
一方、未抽出のaddJavascriptInterfaceの呼び出しコードの実装箇所がない場合には(ステップS5,No)、データフロー解析部153が、データフロー解析処理を行う(ステップS6)。データフロー解析処理については、図12を参照して後述する。これにより、一連の解析処理が終了する。
図10は、上記ステップS3の静的コード解析処理手順を示すフローチャートである。静的コード解析部151は、addJavascriptInterfaceの呼び出しコードの実装内容から、まず、JSIクラスを特定する(ステップS31)。
次に、静的コード解析部151は、特定したJSIクラスで宣言されているメソッドの一覧を取得する(ステップS32)。
そして、静的コード解析部151は、特定したJSIクラスで宣言されているメソッドの内、JavaScriptコードにより呼び出し可能で戻り値が設定されるメソッドすなわち観測対象JSIメソッドを特定する(ステップS33)。これにより、一連の静的コード解析処理は終了する。
図11は、上記ステップS4のコード変換処理手順を示すフローチャートである。コード変換部152は、観測対象JSIメソッドが存在する場合に(ステップS41,Yes)、この観測対象JSIメソッドの戻り値の型を取得する(ステップS42)。
次に、コード変換部152は、引数の型を観測対象JSIメソッドの戻り値の型と一致させたDummySinkをJavaコードに挿入する(ステップS43)。
次に、コード変換部152は、観測対象JSIメソッドの戻り値を引数としたDummySinkの呼び出しコードをJavaコードに挿入する(ステップS44)。
その後、コード変換部152は、ステップS41に処理を戻し、観測対象JSIメソッドが存在する限り、以上の処理を繰り返す。観測対象JSIメソッドが存在しない場合には(ステップS41,No)、一連のコード変換処理は終了する。
図12は、上記ステップS6のデータフロー解析処理手順を示すフローチャートである。データフロー解析部153は、重要情報を取得する任意の関数をSourceとし、DummySinkをSinkとして設定する(ステップS61)。そして、データフロー解析部153は、SourceからSinkへのデータフローを静的テイント解析技術により解析する(ステップS62)。これにより、一連のデータフロー解析処理は終了する。
以上、説明したように、本実施形態の解析装置1では、静的コード解析部151が、Javaコードにより実装されたAndroidアプリケーションとJavaScriptコードで実装されたWebコンテンツとの間でデータの送受信を行う連携機構であるJavaInterfaceのJavaコードによる実装箇所と、該連携機構においてJavaScriptコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する。また、コード変換部152が、特定されたメソッドの戻り値が引数に挿入されるDummySinkの呼び出しコードをJavaコード内に挿入する。また、データフロー解析部153が、DummySinkおよび特定されたメソッドの引数および戻り値を用いて、Javaコードにより実装されたAndroidアプリケーションとJavaScriptコードで実装されたWebコンテンツとの間で送受信されるデータを観測してデータフローを解析する。
これにより、解析装置1は、Javaコードの任意のSourceからDummySinkへのデータフローを検知することができる。また、解析装置1は、単一コード内のオブジェクト間のデータフローを対象とする静的テイント解析技術を用いて、JavaからJavaScriptへのデータフローを解析することができる。したがって、攻撃者に回避されずに情報漏洩を検知することができる。
なお、本発明は、Javaで取得された情報がJavaScriptにより外部に送信される場合のデータフロー解析に限定されない。例えば、JavaScriptコード内のSourceが取得した情報がJavaコード内のSinkにより外部に送信される場合について、戻り値をSinkの引数とする模擬関数DummySourceの呼び出しコードをJavaコード内に挿入する。このDummySourceからSinkへのデータフロー解析を行えば、JavaScriptで取得された情報がJavaにより外部に送信される場合のデータフローを観測することができる。
[プログラム]
上記実施形態に係る解析装置1が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。一実施形態として、解析装置1は、パッケージソフトウェアやオンラインソフトウェアとして上記の解析処理を実行する解析プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の解析プログラムを情報処理装置に実行させることにより、情報処理装置を解析装置1として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やPHS(Personal Handyphone System)などの移動体通信端末、さらには、PDA(Personal Digital Assistants)などのスレート端末などがその範疇に含まれる。また、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の解析処理に関するサービスを提供するサーバ装置として実装することもできる。例えば、解析装置1は、解析対象のAndroidアプリケーションを入力とし、当該Androidアプリケーションに対する上記の解析処理の実行結果を出力する解析処理サービスを提供するサーバ装置として実装される。この場合、解析装置1は、Webサーバとして実装することとしてもよいし、アウトソーシングによって上記の解析処理に関するサービスを提供するクラウドとして実装することとしてもかまわない。以下に、解析装置1と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
図13に示すように、解析プログラムを実行するコンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1041に接続される。ディスクドライブ1041には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1051およびキーボード1052が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1061が接続される。
ここで、図13に示すように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。上記実施形態で説明した各データは、例えばハードディスクドライブ1031やメモリ1010に記憶される。
また、解析プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュール1093として、ハードディスクドライブ1031に記憶される。具体的には、上記実施形態で説明した解析装置1が実行する各処理が記述されたプログラムモジュール1093が、ハードディスクドライブ1031に記憶される。
また、解析プログラムによる情報処理に用いられるデータは、プログラムデータ1094として、例えば、ハードディスクドライブ1031に記憶される。そして、CPU1020が、ハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した各手順を実行する。
なお、解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1041等を介してCPU1020によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述および図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例および運用技術等は全て本発明の範疇に含まれる。
1 解析装置
11 入力部
12 出力部
13 通信制御部
14 記憶部
15 制御部
151 静的コード解析部
152 コード変換部
153 データフロー解析部

Claims (5)

  1. 第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定部と、
    特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入部と、
    前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析部と、
    を備えることを特徴とする解析装置。
  2. 前記解析部は、静的テイント解析により前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測することを特徴とする請求項1に記載の解析装置。
  3. 前記挿入部は、さらに、戻り値が前記メソッドの引数に挿入される第2の模擬関数の呼び出しコードを前記第1のコード内に挿入することを特徴とする請求項1または2に記載の解析装置。
  4. 解析装置で実行される解析方法であって、
    第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定工程と、
    特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入工程と、
    前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析工程と、
    を含んだことを特徴とする解析方法。
  5. コンピュータに、
    第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定ステップと、
    特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入ステップと、
    前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析ステップと、
    を実行させることを特徴とする解析プログラム。
JP2017546452A 2015-10-19 2016-09-09 解析装置、解析方法、および解析プログラム Active JP6434646B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2015205674 2015-10-19
JP2015205674 2015-10-19
PCT/JP2016/076693 WO2017068889A1 (ja) 2015-10-19 2016-09-09 解析装置、解析方法、および解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2017068889A1 true JPWO2017068889A1 (ja) 2018-02-08
JP6434646B2 JP6434646B2 (ja) 2018-12-05

Family

ID=58557268

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017546452A Active JP6434646B2 (ja) 2015-10-19 2016-09-09 解析装置、解析方法、および解析プログラム

Country Status (5)

Country Link
US (1) US10691798B2 (ja)
EP (1) EP3355229B1 (ja)
JP (1) JP6434646B2 (ja)
CN (1) CN108140089B (ja)
WO (1) WO2017068889A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107301347A (zh) * 2017-07-26 2017-10-27 南京邮电大学 一种基于静态分析获取Hbuilder App调用图的方法
CN108037914B (zh) * 2017-12-26 2021-09-24 福建中金在线信息科技有限公司 一种安卓原生系统结合js开发的方法及装置
EP3973427A4 (en) * 2019-05-20 2023-06-21 Sentinel Labs Israel Ltd. SYSTEMS AND METHODS FOR EXECUTABLE CODE DETECTION, AUTOMATIC FEATURE EXTRACTION, AND POSITION-INDEPENDENT CODE DETECTION
CN111857782B (zh) * 2020-07-27 2021-11-16 企查查科技有限公司 界面更新方法、装置、计算机设备和存储介质
CN114020359B (zh) * 2021-11-08 2024-04-16 中国电子科技集团公司第二十八研究所 一种基于插件的分布式平台集成方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205411A1 (en) * 2003-03-14 2004-10-14 Daewoo Educational Foundation Method of detecting malicious scripts using code insertion technique
US20140059690A1 (en) * 2012-02-16 2014-02-27 Nec Laboratories America, Inc. Method for Scalable Analysis of Android Applications for Security Vulnerability
US20150067660A1 (en) * 2013-08-27 2015-03-05 International Business Machines Corporation Building reusable function summaries for frequently visited methods to optimize data-flow analysis

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184208A1 (en) * 2007-01-30 2008-07-31 Sreedhar Vugranam C Method and apparatus for detecting vulnerabilities and bugs in software applications
CN101482847B (zh) * 2009-01-19 2011-06-29 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
CN101477611B (zh) * 2009-01-20 2010-07-28 北京大学 一种程序分解方法
US9015831B2 (en) 2012-08-08 2015-04-21 Synopsys, Inc Method and apparatus for static taint analysis of computer program code
US20140130153A1 (en) * 2012-11-08 2014-05-08 International Business Machines Corporation Sound and effective data-flow analysis in the presence of aliasing
US9170908B2 (en) 2012-12-14 2015-10-27 Salesforce.Com, Inc. System and method for dynamic analysis bytecode injection for application dataflow
US9363284B2 (en) * 2013-12-11 2016-06-07 International Business Machines Corporation Testing web applications for security vulnerabilities with metarequests

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205411A1 (en) * 2003-03-14 2004-10-14 Daewoo Educational Foundation Method of detecting malicious scripts using code insertion technique
US20140059690A1 (en) * 2012-02-16 2014-02-27 Nec Laboratories America, Inc. Method for Scalable Analysis of Android Applications for Security Vulnerability
US20150067660A1 (en) * 2013-08-27 2015-03-05 International Business Machines Corporation Building reusable function summaries for frequently visited methods to optimize data-flow analysis

Also Published As

Publication number Publication date
EP3355229A4 (en) 2019-05-01
EP3355229A1 (en) 2018-08-01
WO2017068889A1 (ja) 2017-04-27
CN108140089B (zh) 2021-05-07
EP3355229B1 (en) 2019-08-28
CN108140089A (zh) 2018-06-08
JP6434646B2 (ja) 2018-12-05
US20180218154A1 (en) 2018-08-02
US10691798B2 (en) 2020-06-23

Similar Documents

Publication Publication Date Title
JP6434646B2 (ja) 解析装置、解析方法、および解析プログラム
Spreitzenbarth et al. Mobile-Sandbox: combining static and dynamic analysis with machine-learning techniques
WO2017049800A1 (zh) 检测应用漏洞代码的方法和装置
CN111859375B (zh) 漏洞检测方法、装置、电子设备及存储介质
US11237844B2 (en) Method and apparatus for loading kernel module
JP5654944B2 (ja) アプリケーション解析装置およびプログラム
Hiremath et al. MyWebGuard: toward a user-oriented tool for security and privacy protection on the web
US9507933B2 (en) Program execution apparatus and program analysis apparatus
Backes et al. R-droid: Leveraging android app analysis with static slice optimization
Yao et al. Identifying privilege separation vulnerabilities in IoT firmware with symbolic execution
US10467408B1 (en) Automatic security scanning of advertisements during runtime of software applications
US20190235881A1 (en) Automatic Import Of Third Party Analytics
Solomos et al. The dangers of human touch: fingerprinting browser extensions through user actions
KR20120070019A (ko) 하이브리드 인터액션 클라이언트 허니팟 시스템 및 그 운용방법
CN112106048A (zh) 检测客户端模板系统的注入漏洞
US9569335B1 (en) Exploiting software compiler outputs for release-independent remote code vulnerability analysis
Alzaidi et al. DroidRista: a highly precise static data flow analysis framework for android applications
US11128644B2 (en) Automatic security scanning of advertisements during runtime of software applications
Wang et al. One Size Does Not Fit All: Uncovering and Exploiting Cross Platform Discrepant {APIs} in {WeChat}
CN108304158B (zh) 一种动态库的代理方法及设备
Phung et al. A user-oriented approach and tool for security and privacy protection on the web
EP3506136A1 (en) Detecting stack cookie utilization in a binary software component using binary static analysis
Caputo et al. Droids in disarray: Detecting frame confusion in hybrid android apps
Varghese et al. Dissecting Andro Malware
Bhatt et al. Comparison of static and dynamic analyzer tools for iOS applications

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171011

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: 20181106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181108

R150 Certificate of patent or registration of utility model

Ref document number: 6434646

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150