JP6434646B2 - 解析装置、解析方法、および解析プログラム - Google Patents
解析装置、解析方法、および解析プログラム Download PDFInfo
- Publication number
- JP6434646B2 JP6434646B2 JP2017546452A JP2017546452A JP6434646B2 JP 6434646 B2 JP6434646 B2 JP 6434646B2 JP 2017546452 A JP2017546452 A JP 2017546452A JP 2017546452 A JP2017546452 A JP 2017546452A JP 6434646 B2 JP6434646 B2 JP 6434646B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- analysis
- return value
- application implemented
- argument
- 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.)
- Active
Links
- 238000004458 analytical method Methods 0.000 title claims description 96
- 238000000034 method Methods 0.000 claims description 87
- 230000003068 static effect Effects 0.000 claims description 45
- 230000007246 mechanism Effects 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 10
- 238000003780 insertion Methods 0.000 claims description 6
- 230000037431 insertion Effects 0.000 claims description 6
- 238000004088 simulation Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 36
- 238000006243 chemical reaction Methods 0.000 description 28
- 238000005206 flow analysis Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000010365 information processing Effects 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000001514 detection method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012946 outsourcing Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000010454 slate Substances 0.000 description 1
- 201000009032 substance abuse Diseases 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/54—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test 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)
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を参照して、本実施形態に係る解析装置の概略構成を説明する。解析装置1は、ワークステーションやパソコン等の汎用コンピュータで実現され、入力部11と、出力部12と、通信制御部13と、記憶部14と、制御部15とを備える。
まず、図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を介して解析処理の開始を指示する入力があったタイミングで開始となる。
次に、図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と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
上記実施形態に係る解析装置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 データフロー解析部
11 入力部
12 出力部
13 通信制御部
14 記憶部
15 制御部
151 静的コード解析部
152 コード変換部
153 データフロー解析部
Claims (5)
- 第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定部と、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入部と、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析部と、
を備えることを特徴とする解析装置。 - 前記解析部は、静的テイント解析により前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測することを特徴とする請求項1に記載の解析装置。
- 前記挿入部は、さらに、戻り値が前記メソッドの引数に挿入される第2の模擬関数の呼び出しコードを前記第1のコード内に挿入することを特徴とする請求項1または2に記載の解析装置。
- 解析装置で実行される解析方法であって、
第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定工程と、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入工程と、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析工程と、
を含んだことを特徴とする解析方法。 - コンピュータに、
第1のコードにより実装されたアプリケーションと該第1のコードとは異なる第2のコードで実装されたアプリケーションとの間でデータの送受信を行う連携機構の該第1のコードによる実装箇所と、該連携機構において前記第2のコードにより呼び出し可能な戻り値が設定されるメソッドとを特定する特定ステップと、
特定された前記メソッドの戻り値が引数に挿入される模擬関数の呼び出しコードを前記第1のコード内に挿入する挿入ステップと、
前記模擬関数および特定された前記メソッドの引数および戻り値を用いて、前記第1のコードにより実装されたアプリケーションと前記第2のコードにより実装されたアプリケーションとの間で送受信されるデータを観測してデータフローを解析する解析ステップと、
を実行させることを特徴とする解析プログラム。
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 JPWO2017068889A1 (ja) | 2018-02-08 |
JP6434646B2 true 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)
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开发的方法及装置 |
JP7278423B2 (ja) * | 2019-05-20 | 2023-05-19 | センチネル ラブス イスラエル リミテッド | 実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法 |
CN111857782B (zh) * | 2020-07-27 | 2021-11-16 | 企查查科技有限公司 | 界面更新方法、装置、计算机设备和存储介质 |
CN114020359B (zh) * | 2021-11-08 | 2024-04-16 | 中国电子科技集团公司第二十八研究所 | 一种基于插件的分布式平台集成方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100509650B1 (ko) | 2003-03-14 | 2005-08-23 | 주식회사 안철수연구소 | 코드 삽입 기법을 이용한 악성 스크립트 감지 방법 |
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 | 北京大学 | 一种程序分解方法 |
US8875298B2 (en) * | 2012-02-16 | 2014-10-28 | Nec Laboratories America, Inc. | Method for scalable analysis of android applications for security vulnerability |
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 |
US9250876B2 (en) | 2013-08-27 | 2016-02-02 | International Business Machines Corporation | Building reusable function summaries for frequently visited methods to optimize data-flow analysis |
US9363284B2 (en) * | 2013-12-11 | 2016-06-07 | International Business Machines Corporation | Testing web applications for security vulnerabilities with metarequests |
-
2016
- 2016-09-09 JP JP2017546452A patent/JP6434646B2/ja active Active
- 2016-09-09 CN CN201680060711.5A patent/CN108140089B/zh active Active
- 2016-09-09 WO PCT/JP2016/076693 patent/WO2017068889A1/ja active Application Filing
- 2016-09-09 US US15/762,742 patent/US10691798B2/en active Active
- 2016-09-09 EP EP16857207.1A patent/EP3355229B1/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20180218154A1 (en) | 2018-08-02 |
EP3355229A4 (en) | 2019-05-01 |
CN108140089B (zh) | 2021-05-07 |
JPWO2017068889A1 (ja) | 2018-02-08 |
WO2017068889A1 (ja) | 2017-04-27 |
EP3355229B1 (en) | 2019-08-28 |
EP3355229A1 (en) | 2018-08-01 |
US10691798B2 (en) | 2020-06-23 |
CN108140089A (zh) | 2018-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6434646B2 (ja) | 解析装置、解析方法、および解析プログラム | |
CN111859375B (zh) | 漏洞检测方法、装置、电子设备及存储介质 | |
WO2017049800A1 (zh) | 检测应用漏洞代码的方法和装置 | |
EP3295647B1 (en) | Malware warning | |
JP5654944B2 (ja) | アプリケーション解析装置およびプログラム | |
US11237844B2 (en) | Method and apparatus for loading kernel module | |
Hiremath et al. | MyWebGuard: toward a user-oriented tool for security and privacy protection on the web | |
US20170316202A1 (en) | Rasp for scripting languages | |
US9507933B2 (en) | Program execution apparatus and program analysis apparatus | |
EP3077950B1 (en) | Directed execution of dynamic programs in isolated environments | |
CN112106048B (zh) | 检测客户端模板系统的注入漏洞 | |
US10467408B1 (en) | Automatic security scanning of advertisements during runtime of software applications | |
WO2021070393A1 (ja) | 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム | |
US10705858B2 (en) | Automatic import of third party analytics | |
Solomos et al. | The dangers of human touch: fingerprinting browser extensions through user actions | |
US9569335B1 (en) | Exploiting software compiler outputs for release-independent remote code vulnerability analysis | |
CN108304158B (zh) | 一种动态库的代理方法及设备 | |
Phung et al. | A user-oriented approach and tool for security and privacy protection on the web | |
EP3506136B1 (en) | Detecting stack cookie utilization in a binary software component using binary static analysis | |
CN105872708A (zh) | 一种显示桌面生成方法、显示桌面生成系统和智能电视 | |
Varghese et al. | Dissecting Andro Malware | |
Bhatt et al. | Comparison of static and dynamic analyzer tools for iOS applications | |
CN116167048B (zh) | 用于EL表达式的Webshell检测方法及装置 | |
Rasthofer et al. | Reverse engineering android apps with codeinspect | |
Takeuchi et al. | Mocha: Automatically Applying Content Security Policy to HTML Hybrid Application on Android Device |
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 |