JP7287480B2 - 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム - Google Patents

解析機能付与装置、解析機能付与方法及び解析機能付与プログラム Download PDF

Info

Publication number
JP7287480B2
JP7287480B2 JP2021551100A JP2021551100A JP7287480B2 JP 7287480 B2 JP7287480 B2 JP 7287480B2 JP 2021551100 A JP2021551100 A JP 2021551100A JP 2021551100 A JP2021551100 A JP 2021551100A JP 7287480 B2 JP7287480 B2 JP 7287480B2
Authority
JP
Japan
Prior art keywords
analysis
execution
unit
branch
script
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
Application number
JP2021551100A
Other languages
English (en)
Other versions
JPWO2021070393A5 (ja
JPWO2021070393A1 (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 JPWO2021070393A1 publication Critical patent/JPWO2021070393A1/ja
Publication of JPWO2021070393A5 publication Critical patent/JPWO2021070393A5/ja
Application granted granted Critical
Publication of JP7287480B2 publication Critical patent/JP7287480B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • 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
    • 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
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • 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/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、解析機能付与装置、解析機能付与方法及び解析機能付与プログラムに関する。
マルウェアを用いたスパム(マルスパム)やファイルレスマルウェアなどの多様な攻撃の形態が生じるにともなって、悪性な挙動を示すスクリプト(悪性スクリプト)による攻撃の脅威が顕在化している。
悪性スクリプトとは、悪意のある挙動を持ったスクリプトであり、スクリプトエンジンの提供する機能を悪用して攻撃を実現するプログラムである。一般に、オペレーティングシステム(Operating System:OS)がデフォルトで有するスクリプトエンジンや、Webブラウザや文書ファイルのビューアなど、特定のアプリケーションが有するスクリプトエンジンを用いて攻撃が実施される。
こうしたスクリプトエンジンの多くは、ユーザの許可が必要な場合もあるものの、ファイル操作やネットワーク通信、プロセスの起動など、システムを介した挙動も実現可能である。したがって、悪性スクリプトを用いた攻撃は、実行ファイルのマルウェアを用いた攻撃と同様に、ユーザに対しての脅威となる。
この悪性スクリプトによる攻撃に対策を講じるためには、スクリプトの持つ挙動を正確に把握する必要がある。したがって、スクリプトを解析することで、その挙動を明らかにする技術が希求される。
悪性スクリプトを解析する際に生じる問題として、コードの難読化がある。悪性スクリプトの多くは、難読化と呼ばれる、解析を妨害する処理が施されている。難読化は、故意にコードの複雑さを高めることで、コードの表層的な情報に基づく解析を困難にする。すなわち、スクリプトを実行せずに、コードから得られる情報で解析する、静的解析と呼ばれる解析方法を妨害する。
特に、実行するコードの一部を外部から動的に取得する場合は、そのコードは実行しなければ得られないため、静的には解析できない。したがって、静的解析はその原理上、不可能となる。
一方で、スクリプトを実行し、その振る舞いを監視することで挙動を知る動的解析と呼ばれる手法は、前述のような難読化の影響を受けない。このため、悪性スクリプトの解析においては、動的解析に基づく手法が主に用いられている。
一般的な動的解析では、解析環境で悪性スクリプトを実行し、その挙動を監視することにより、悪性スクリプト中で実行された単一の実行経路の挙動のみが得られる。このため、解析環境で実行されなかった経路の挙動は得ることができないという問題がある。
言い換えると、特定の条件下でしか実行されない経路を有する悪性スクリプトについては、動的解析によっても、全ての挙動を解析しきれないという問題がある。
特定の条件下でしか実行されない経路がある場合として、例えば、指令サーバからの指令によってその先の実行経路が決まる場合や、解析妨害によって解析環境では悪性な挙動を示さないようになっている場合がある。
前者は、指令サーバからの指令がなければ、その先の実行経路が決定されず、悪性な挙動を持った経路が実行されない場合である。悪性スクリプトを検出して解析する際には、既に攻撃者が撤退して指令サーバがなくなっている場合も少なくないため、そのような場合には、悪性な挙動を観測できない。
後者は、悪性スクリプトが、自身が実行されている環境の情報を取得し、それが特定の条件を満たしていなければ、悪性な挙動を示さないという解析妨害である。例えば、解析環境に高頻度に見られる特徴が見られた場合には、自分が解析されていると判断して、実行を中断するという解析妨害に用いられる。
図18は、解析妨害の一例を示すコード片を示す図である。このコード片は、実行されている環境のCPU(Central Processing Unit)のコア数を取得し、それが2以上かつ8以下でなければ、解析環境の可能性が高いと判断して、実行を終了するという解析妨害を持つ。さもなければ、解析環境ではないと判断して、悪性な挙動を示す。
このような特定の条件下でしか実行されない経路の挙動を捉えるためには、複数の実行経路を実行するマルチパス実行が必要となる。
マルチパス実行では、実行が条件分岐に到達した際に、実行状態を分岐させ、分岐した各々の実行状態が、分岐のそれぞれの実行経路を辿るようにする。これにより、条件分岐で発生する二つの実行経路の両方を実行する。
マルチパス実行の実現について、例えば、非特許文献1には、JavaScript(登録商標)に対して、マルチパス実行の一種であるシンボリック実行を実現する手法が記載されている。この手法によれば、JavaScriptのスクリプトの条件分岐において、実行可能な経路を網羅的に辿り、挙動を観測できる。
また、非特許文献2には、JavaScriptに対して、マルチパス実行の一種である経路強制実行を実現する手法が記載されている。この手法によれば、JavaScriptのスクリプトの条件分岐において、全ての経路を網羅的に辿り、挙動を観測できる。
非特許文献3には、スクリプトエンジンに予め手動で改造を施した上で、そのスクリプトエンジンをバイナリ向けのシンボリック実行基盤の上で実行することで、スクリプトエンジン上で実行されているスクリプトに対して、スクリプトエンジン越しにシンボリック実行を実現する手法が記載されている。この手法によれば、手動で改造を施せるスクリプトエンジンがあれば、どのようなスクリプト言語でも汎用的にシンボリック実行を実現し、実行可能な経路を網羅的に辿って、挙動を観測できる。
そして、非特許文献4には、マルウェアが自身のプログラムの難読化にしばしば用いる仮想機械(Virtual Machine:VM)を解析する手法が記載されている。この手法によれば、VMを解析することで、そのアーキテクチャの情報を取得できる。スクリプトエンジンにおいてスクリプトの実行を司るのはVMであるため、この手法の考え方を一部転用できる。
Prateek Saxena, et al, "A Symbolic Execution Framework for JavaScript", 2010 IEEE Symposium on Security and Privacy. Kyungtae Kim, et al, "J-Force: Forced Execution on JavaScript". Stefan Bucur, et al, "Prototyping Symbolic Execution Engines for Interpreted Languages". Monirul Sharif, et al, "Automatic Reverse Engineering of Malware Emulators", 2009 30th IEEE Symposium on Security and Privacy.
しかしながら、非特許文献1及び非特許文献2に記載の手法では、スクリプトエンジンごとに個別にマルチパス実行機能を設計し、実装する必要があるという課題があった。また、非特許文献1及び非特許文献2に記載の手法では、マルチパス実行機能を実現するために、スクリプトエンジンのVMのアーキテクチャの情報を事前に知る必要があるという課題があった。
また、非特許文献3に記載の手法では、スクリプトエンジンへの改造を要するため、やはり、スクリプトエンジンのVMのアーキテクチャ情報を事前に知る必要があるという課題があった。また、非特許文献3に記載の手法では、スクリプトエンジン内での条件分岐の仕組みなど、詳細なアーキテクチャを考慮しないため、スクリプトに対する細粒度のマルチパス実行が難しいという課題があった。
このスクリプトエンジンのアーキテクチャ情報の取得には、解析作業が必要となる。オープンソースのスクリプトエンジンに対しては、ソースコードの解析によって実現できるが、ソースコードが得られるスクリプト言語に限られ、一定の工数も要する。さらに、プロプライエタリのスクリプトエンジンについては、バイナリのリバースエンジニアリングの必要があり、人手での実施には熟練したリバースエンジニアと多大な工数を要するため、現実的でない。さらに、そのリバースエンジニアリングの自動化は、確立されていない。
そして、非特許文献4に記載の手法では、マルウェアの持つVMのみを対象としており、スクリプトエンジンの持つVMは対象としていないため、スクリプトエンジンには直接的には適用できないという課題があった。また、非特許文献4に記載の手法は、マルチパス実行に重要な条件分岐に関わるアーキテクチャ情報の取得には言及していないという課題もあった。さらに、非特許文献4に記載の手法では、VMの解析のみに焦点を当てており、マルチパス実行の付与など、VMへの機能付与は考慮していないという課題もあった。
本発明は、上記に鑑みてなされたものであって、スクリプトエンジンに対して、事前のアーキテクチャ情報なしにマルチパス実行機能の付与を実現できる解析機能付与装置、解析機能付与方法及び解析機能付与プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するために、本発明の解析機能付与装置は、悪性のスクリプトエンジンの仮想機械を解析する第一の解析部と、仮想機械の命令の体系である命令セットアーキテクチャを解析する第二の解析部と、第一の解析部及び第二の解析部による解析によって得られたアーキテクチャ情報に基づいて、スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与部と、を有することを特徴とする。
また、本発明の解析機能付与方法は、解析機能付与装置が実行する解析機能付与方法であって、悪性のスクリプトエンジンの仮想機械を解析する第一の解析工程と、仮想機械の命令の体系である命令セットアーキテクチャを解析する第二の解析工程と、第一の解析工程及び第二の解析工程における解析によって得られたアーキテクチャ情報に基づいて、スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与工程と、を含んだことを特徴とする。
また、本発明の解析機能付与プログラムは、悪性のスクリプトエンジンの仮想機械を解析する第一の解析ステップと、仮想機械の命令の体系である命令セットアーキテクチャを解析する第二の解析ステップと、第一の解析工程及び第二の解析工程における解析によって得られたアーキテクチャ情報に基づいて、スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与ステップと、をコンピュータに実行させる。
本発明によれば、スクリプトエンジンに対して、事前のアーキテクチャ情報なしにマルチパス実行機能の付与を実現できる。
図1は、スクリプトエンジンの構成の一例を説明するための図である。 図2は、スクリプトエンジンが有するVMの擬似コードを示す図である。 図3は、実施の形態に係る解析機能付与装置の構成の一例を説明する図である。 図4は、インタプリタループ検出及び仮想プログラムカウンタ検出に用いるテストスクリプト(第一のテストスクリプト)の一例を示す図である。 図5は、分岐VM命令検出に用いるテストスクリプト(第二のテストスクリプト)の一例を示す図である。 図6は、実行トレースの一例を示す図である。 図7は、VM実行トレースの一例を示す図である。 図8は、実施の形態に係る解析機能付与処理の処理手順を示すフローチャートである。 図9は、図8に示す実行トレース取得処理の処理手順を示すフローチャートである。 図10は、図8に示すインタプリタループ検出処理の処理手順を示すフローチャートである。 図11は、図8に示す仮想プログラムカウンタ検出処理の処理手順を示すフローチャートである。 図12は、図8に示すデコーダ・ディスパッチャ検出処理の処理手順を示すフローチャートである。 図13は、図8に示す条件分岐フラグ検出処理の処理手順を示すフローチャートである。 図14は、図8に示すVM実行トレース取得処理の処理手順を示すフローチャートである。 図15は、図8に示す分岐VM命令検出処理の処理手順を示すフローチャートである。 図16は、図8に示す解析機能付与処理の処理手順を示すフローチャートである。 図17は、プログラムが実行されることにより、解析機能付与装置が実現されるコンピュータの一例を示す図である。 図18は、解析妨害の一例を示すコード片を示す図である。
以下に、本願に係る解析機能付与装置、解析機能付与方法及び解析機能付与プログラムの実施形態を図面に基づいて詳細に説明する。また、本発明は、以下に説明する実施形態により限定されるものではない。
[実施の形態]
実施の形態に係る解析機能付与装置は、テストスクリプトを用いてスクリプトエンジンのバイナリを解析することにより、インタプリタループと、仮想プログラムカウンタ(VPC)と、デコーダ・ディスパッチャと、条件分岐フラグと、VMにおける分岐命令(分岐VM命令)とを順に検出する。
なお、これらはいずれも、スクリプトエンジンの構成要素であり、アーキテクチャに関する情報である。図1及び図2を参照して、一般的なスクリプトエンジンの構成とそれらの働きについて説明する。
図1は、スクリプトエンジンの構成の一例を説明するための図である。図1に示すように、スクリプトエンジン1は、バイトコードコンパイラ2と仮想機械(Virtual Machine:VM)3を有する。また、バイトコードコンパイラ2は、構文解析部4、バイトコード生成部5を有する。また、VM3は、コードキャッシュ部6、フェッチ部7、デコード部8、実行部9を有する。これらのフェッチ部7、デコード部8、実行部9は、繰り返し実行され、インタプリタループと呼ばれる。そして、スクリプトエンジン1は、スクリプトの入力を受け付ける。
構文解析部4は、スクリプトを入力として受け取り、字句解析及び構文解析を経て、抽象構文木(Abstract Syntax Tree:AST)を生成し、バイトコード生成部5に出力する。バイトコード生成部5は、ASTを入力として受け取り、バイトコードに変換してコードキャッシュ部6に格納する。
フェッチ部7は、コードキャッシュ部6からVMオペコードをフェッチし、デコード部8に出力する。ここで、VMオペコードは、VM命令のオペコード部を指す。デコード部8は、VMオペコードを入力として受け取り、デコーダ・ディスパッチャを用いてVMオペコードを解釈し、対応したプログラムにディスパッチする。実行部9は、VM命令に対応したプログラムを実行する。インタプリタループの繰り返しにより、VM命令を次々に実行していくことで、スクリプトに記述した内容が実行される。
図2を参照して、スクリプトエンジンの構成要素の働きについて説明する。図2は、スクリプトエンジンが有するVMの擬似コードを示す図である。図2に示すように、まず、擬似コードは、VPCを初期化している(1行目)。擬似コードでは、while文のループがインタプリタループである(2行目)。擬似コードでは、コードキャッシュからVPCの指すVMオペコードが取得され(3行目)、Switch文を用いてデコード及びディスパッチされる(4、5、7行目)。そして、擬似コードでは、ディスパッチされた先の、VMオペコードに対応したプログラムが実行される(6、8行目)。
また、分岐VM命令とはスクリプト内で分岐を発生させるVM命令であり、条件分岐フラグは、条件分岐時に分岐がなされるか否かのフラグを保持する領域である。
[解析機能付与装置]
まず、本実施の形態に係る解析機能付与装置10は、悪性のスクリプトエンジンバイナリに対して、分岐命令のフックと、メモリ操作命令のフックにより、ブランチトレースとメモリアクセストレースからなる実行トレースを取得する。ただし、ブランチトレースは、実行された分岐を記録したものであり、メモリアクセストレースは、実行されたメモリの読み書きを記録したものである。
そして、この解析機能付与装置10は、この実行トレースを解析し、インタプリタループを検出する。インタプリタループの検出には、実行時の条件を変えて取得した複数の実行トレースの差分を基に解析する差分実行解析と呼ばれる解析手法を適用する。この時、実行時の条件はテストスクリプトに異なるものを用いることで変更する。ここでは、分岐回数に着目した差分実行解析を用いる。ここで得られたインタプリタループの内部が、以降の解析対象となる。
また、この解析機能付与装置10は、実行トレースを解析し、VPCを検出する。解析機能付与装置は、VPCの検出には、メモリの読み込み回数に着目した差分実行解析を適用する。
さらに、この解析機能付与装置10は、スクリプトエンジンのバイナリを静的解析し、デコーダ・ディスパッチャを検出する。前提として、デコーダ・ディスパッチャは、Switch文またはジャンプテーブルや関数テーブルで実現される。こうしたSwitch文、ジャンプテーブル或いは関数テーブルを用いたテーブルジャンプは、静的解析で検出する手法が一般に知られているため、解析機能付与装置10は、所定の方法でこれらを検出する。
そして、この解析機能付与装置10は、実行トレースを解析し、条件分岐フラグを検出する。解析機能付与装置10は、条件分岐フラグの検出として、メモリの読み込みに着目した差分実行解析を適用する。
続いて、この解析機能付与装置10は、スクリプトエンジンバイナリに対して、VPCの監視と、デコーダ・ディスパッチャのVMオペコードの監視により、VM実行トレースを取得する。ただし、VM実行トレースは、実行されたVMオペコードと、VPCを記録したものである。
この解析機能付与装置10は、このVM実行トレースを解析し、分岐VM命令を検出する。解析機能付与装置10は、分岐VM命令の検出において、まず、多数のテストスクリプトを実行して、VM実行トレースを取得する。そして、解析機能付与装置10は、VM実行トレースから、VMオペコードと、その実行の前後でのVPCの変化量を組にして収集する。VMオペコードが分岐VM命令以外のものの場合、VPCの変化量は、ほぼ一定である。一方、VMオペコードが分岐VM命令のものの場合、VPCは分岐先によってばらつきが生じる。解析機能付与装置10は、VMオペコードごとVPCの変化量のばらつきを分散で評価し、分散が一定の閾値以上のものを、分岐VM命令として検出する。
そして、解析機能付与装置10は、ここまでで得られたVPC、分岐VM命令、及び、条件分岐フラグに基づいて、スクリプトエンジンのバイナリに対して、フックを施す。このフックによって、解析機能付与装置10は、VPCが指す先を監視し、それが分岐VM命令であるとき、実行状態を分岐させる。そして、解析機能付与装置10は、一方の実行状態をそのまま実行し、もう一方の実行状態は条件分岐フラグを書き換えた上で実行する。これによって、条件分岐の両方の実行経路が実行されるようになる。以上のようにして、解析機能付与装置10は、クリプトエンジンへの後付けでのマルチパス機能の付与を実現する。
[解析機能付与装置の構成]
続いて、図3を参照して、実施の形態に係る解析機能付与装置10の構成について具体的に説明する。図3は、実施の形態に係る解析機能付与装置の構成の一例を説明する図である。
図1に示すように、解析機能付与装置10は、入力部11、制御部12、記憶部13、出力部14を有する。そして、解析機能付与装置10は、テストスクリプト及びスクリプトエンジンバイナリの入力を受け付ける。
入力部11は、キーボードやマウス等の入力デバイスで構成され、外部からの情報の入力を受け付け、制御部12に入力する。入力部11は、テストスクリプト及びスクリプトエンジンバイナリの入力を受け付け、制御部12に出力する。テストスクリプトは、スクリプトエンジンを動的解析して実行トレース及びVM実行トレースを取得する際に、入力されるスクリプトである。なお、テストスクリプトの詳細は後述する。スクリプトエンジンバイナリは、スクリプトエンジンを構成する実行可能ファイルである。スクリプトエンジンバイナリは、複数の実行可能ファイルによって構成される場合がある。
制御部12は、各種の処理手順などを規定したプログラム及び所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。例えば、制御部12は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。制御部12は、仮想機械解析部121(第一の解析部)、命令セットアーキテクチャ解析部122(第二の解析部)及び解析機能付与部123(付与部)を有する。
仮想機械解析部121は、スクリプトエンジンのVMを解析する。仮想機械解析部121は、実行時の条件を変えて複数の実行トレースを取得し、差分実行解析を用いて複数の実行トレースを解析し、VPC及び条件分岐フラグを取得する。仮想機械解析部121は、実行トレース取得部1211(第一の取得部)、インタプリタループ検出部1212(第一の検出部)、仮想プログラムカウンタ検出部1213(第二の検出部)、デコーダ・ディスパッチャ検出部1214(第三の検出部)及び条件分岐フラグ検出部1215(第四の検出部)を有する。
実行トレース取得部1211は、テストスクリプト及びスクリプトエンジンバイナリを入力として受け付ける。実行トレース取得部1211は、スクリプトエンジンバイナリの実行を監視しながら、テストスクリプトを実行することで、実行トレースを取得する。
実行トレースは、ブランチトレースとメモリアクセストレースとによって構成される。ブランチトレースは、実行の際の分岐命令の種類と、分岐元アドレスと分岐先アドレスを記録する。メモリアクセストレースは、メモリ操作の種類と、操作対象のメモリアドレスを記録する。ブランチトレース及びメモリアクセストレースは、命令フックによって取得可能であることが知られている。実行トレース取得部1211が取得した実行トレースは、実行トレースDB131に格納される。
インタプリタループ検出部1212は、実行トレースDB131に格納された第一のテストスクリプトに対する実行トレースを取り出して解析し、インタプリタループを検出する。インタプリタループ検出部1212は、各VM命令の実行後には、必ずインタプリタループの先頭を分岐先とする分岐が発生することを利用し、この分岐先を発見することで、インタプリタループを検出する。
このため、インタプリタループ検出部1212は、インタプリタループの検出には、分岐の回数に着目した差分実行解析を用いる。インタプリタループ検出部1212は、繰り返し回数及び繰り返される文の数が異なる繰り返しを持った複数のテストスクリプトの実行トレースを比較し、分岐回数が繰り返し回数及び繰り返される文の数の両方に比例している分岐先を発見する。インタプリタループ検出部1212は、この分岐先をインタプリタループの先頭として検出する。
仮想プログラムカウンタ検出部1213は、実行トレースDB131に格納された第一のテストスクリプトに対する実行トレースを取り出して解析し、VPCを検出する。仮想プログラムカウンタ検出部1213は、各VM命令の実行後には、必ずVPCを保持するメモリへの読み込みが発生することを利用し、この読み込み先を発見することで、VPCを検出する。
このため、仮想プログラムカウンタ検出部1213は、VPCの検出として、メモリの読み込み回数に着目した差分実行解析を用いる。仮想プログラムカウンタ検出部1213は、インタプリタループの検出と同じテストスクリプトを用いて取得された複数のテストスクリプトの実行トレースを比較し、メモリ読み込み回数が繰り返される回数及び繰り返される文の数との両方に比例しているメモリを発見する。仮想プログラムカウンタ検出部1213は、このメモリをVPCとして検出する。
デコーダ・ディスパッチャ検出部1214は、スクリプトエンジンバイナリに対して、所定の静的解析により、インタプリタループ内に存在するSwitch文や関数テーブル、ジャンプテーブルを検出する。デコーダ・ディスパッチャ検出部1214は、これらの処理の命令列をデコーダ・ディスパッチャとして検出する。
条件分岐フラグ検出部1215は、実行トレースDB131に格納された第二のテストスクリプトに対する実行トレースを取り出して解析し、条件分岐フラグを発見する。条件分岐フラグ検出部1215は、メモリの読み込み回数に着目した差分実行解析を用いて、複数の実行トレースを解析し、条件分岐フラグを検出する。条件分岐フラグ検出部1215は、様々なパターンで条件分岐を実行し、その際のメモリの変化のパターンをテストスクリプト上の条件分岐のパターンと照らし合わせることで、条件分岐フラグを格納するメモリを検出する。
命令セットアーキテクチャ解析部122は、VMの命令の体系である命令セットアーキテクチャを解析する。命令セットアーキテクチャ解析部122は、VM実行トレース取得部1221(第二の取得部)及び分岐VM命令検出部1222(第五の検出部)を有する。
VM実行トレース取得部1221は、実行トレース取得部1211と同じく、テストスクリプト及びスクリプトエンジンバイナリを入力として受け付ける。VM実行トレース取得部1221は、スクリプトエンジンバイナリの実行を監視しながら、テストスクリプトを実行することで、VM上で実行された実行トレースであるVM実行トレースを取得する。
VM実行トレースは、実行されたVM命令ごとのVPCとVMオペコードで構成される。VPCの記録は、仮想プログラムカウンタ検出部1213で検出されたVPCのメモリを監視することで実現できる。VMオペコードの記録は、デコーダ・ディスパッチャ検出部1214で検出されたデコーダに入力されるVMオペコードを監視することで実現できる。VM実行トレース取得部1221は、取得したVM実行トレースは、VM実行トレースDB133に格納される。
分岐VM命令検出部1222は、VM実行トレースDB133に格納されたVM実行トレースを取り出して解析し、分岐VM命令を検出する。分岐VM命令検出部1222は、分岐VM命令とそれ以外のVM命令とではVPCの値のばらつきの大きさが異なることに着目し、閾値を決めて、よりVPCの値のばらつきの大きいものを分岐VM命令として検出する。分岐VM命令検出部1222は、VM実行トレースのVMオペコードごとの仮想プログラムカウンタの変化量のばらつきによって、分岐VM命令を検出する。
解析機能付与部123は、仮想機械解析部121及び命令セットアーキテクチャ解析部122による解析によって得られたアーキテクチャ情報に基づいて、スクリプトエンジンに、マルチパス実行機能を付与するフックを施す。解析機能付与部123は、得られたVPC、分岐VM命令及び条件分岐フラグを用いてスクリプトエンジンにフックを施す。このフックは、VPCを監視してVMオペコードを確認し、分岐VM命令のVMオペコードであれば、実行状態を分岐させるフックである。そして、このフックは、一方の実行状態はそのまま実行し、もう一方の実行状態は条件分岐フラグを書き換えて実行することで、スクリプトエンジンにマルチパス実行機能を付与するフックである。
記憶部13は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現され、解析機能付与装置10を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが記憶される。記憶部13は、実行トレースデータベース(DB)131、VM実行トレースDB133及びアーキテクチャ情報DB132を有する。
実行トレースDB131及びVM実行トレースDB133は、それぞれ実行トレース取得部1211及びVM実行トレース取得部1221によって取得された実行トレース及びVM実行トレースを格納する。実行トレースDB131及びVM実行トレースDB133は、解析機能付与装置10によって管理される。もちろん、実行トレースDB131及びVM実行トレースDB133は、他の装置(サーバ等)によって管理されていてもよく、この場合には、実行トレース取得部1211及びVM実行トレース取得部1221は、出力部14の通信インタフェースを介して、取得した実行トレース及びVM実行トレースを、実行トレースDB131及びVM実行トレースDB133の管理サーバ等に出力して、実行トレースDB131及びVM実行トレースDB133に記憶させる。
出力部14は、例えば、液晶ディスプレイやプリンタ等であって、解析機能付与装置10に関する情報を含む各種情報を出力する。また、出力部14は、外部装置との間で、各種データの入出力を司るインタフェースであってもよく、外部装置に各種情報を出力してもよい。
[テストスクリプトの構成]
テストスクリプトについて説明する。テストスクリプトは、スクリプトエンジンを動的解析する際に入力されるスクリプトである。このテストスクリプトは、分岐命令の実行やメモリ読み書きの回数に着目し、異なる回数のテストスクリプトを実行したときに生じるスクリプトエンジンの挙動の差分を捉えるために用いられる。このテストスクリプトは、解析の事前に準備するものであり、手動で作成するものである。この作成には、対象のスクリプト言語の仕様に関する知識が必要となる。
図4は、インタプリタループの検出及びVPCの検出に用いるテストスクリプト(第一のテストスクリプト)の一例を示す図である。第一のテストスクリプトでは、繰り返し処理を用いる(2行目)。第一のテストスクリプトでは、テストスクリプト内の繰り返し回数(2行目)や繰り返される文の数(3行目から5行目)を増減させることで、実行時の条件を変更し、差分を発生させる。
図5は、分岐VM命令検出に用いるテストスクリプト(第二のテストスクリプト)の一例を示す図である。第二のテストスクリプトでは、複数回の条件分岐を用いる(4行目から8行目)。第二のテストスクリプトにおいて、この複数回の条件分岐では、特定の順序のパターンで分岐がなされたり、なされなかったりするように、分岐条件を制御する(1行目、5行目)。第二のテストスクリプトでは、条件分岐の回数や、分岐の成否の順序パターンを変更し、差分を発生させる。
[実行トレースの構成]
次に、実行トレースについて説明する。図6は、実行トレースの一例を示す図である。実行トレースは、前述の通り、ブランチトレースとメモリアクセストレースによって構成されている。図6は、実行トレースの一例を示す図である。以降、図6を用いて実行トレースの構成を示す。
実行トレースは、traceという要素を有する。traceには、そのログ行がブランチトレースか、メモリアクセストレースかが示される。
ブランチトレースのログ行は、例えば、図6の1行目から10行目に記載の書式になっており、type、src、dstの三つの要素からなる。typeは、実行された分岐命令がcall命令によるものか、jmp命令によるものか、ret命令によるものかを示す。また、srcは、分岐元のアドレスを示し、dstは、分岐先のアドレスを示す。
メモリアクセストレースのログ行は、たとえば、図6の11行目から13行目に記載の書式になっており、type、target、valueの三つの要素からなる。typeは、メモリアクセスが読み込みか書き込みかを示す。targetは、メモリアクセスの対象となるメモリアドレスを示す。また、valueには、メモリアクセスの結果の値が格納される。
[VM実行トレースの構成]
次に、VM実行トレースについて説明する。図7は、VM実行トレースの一例を示す図である。VM実行トレースは、前述の通り、VMオペコードとVPCとを記録したものである。図7は、VM実行トレースの一部を切り出したものである。以降、図7を用いてVM実行トレースの構成を示す。
VM実行トレースのログ行は、たとえば、図7に記載の書式になっており、vpc及びopcodeの二つの要素からなる。vpcは、VPCの値を示す。また、opcodeは、VMオペコードの値を示す。
[インタプリタループ検出部の処理]
次に、インタプリタループ検出部1212の処理について説明する。インタプリタループの検出は、取得した実行トレースのブランチトレースのログを解析することで実現される。インタプリタループでは一般に、VM命令の実行後に分岐命令でループの先頭に飛ぶ。このため、インタプリタループ検出部1212は、ブランチトレース中の分岐命令の分岐先アドレスの中から、インタプリタループの先頭に該当するものを検出する。インタプリタループ検出部1212は、分岐回数に着目した差分実行解析を用いる。
インタプリタループ検出部1212は、第一のテストスクリプトに対応した実行トレースを用いる。インタプリタループの先頭への分岐の回数は、テストスクリプト内の繰り返し回数及び、繰り返し処理の中の文の数に比例する。繰り返しの回数をN、繰り返される文の数をMとしたとき、概ねMN程度のインタプリタループの先頭への分岐が発生する。このため、インタプリタループ検出部1212は、N及びMをそれぞれ2Nと2M、3Nと3Mと増やした第一のテストスクリプトに対する実行トレースにおいて、4MN、9MNという増え方をした分岐先を、インタプリタループの先頭として検出する。
[仮想プログラムカウンタ検出部の処理]
次に、仮想プログラムカウンタ検出部1213の処理について説明する。仮想プログラムカウンタの検出は、取得した実行トレースのメモリアクセストレースのログを解析することで実現される。VPCは一般にメモリ上に格納されており、VM命令が実行されるたびに読み込まれるため、このメモリアドレスへの値の読み込みが発生する。このため、仮想プログラムカウンタ検出部1213は、メモリアクセストレース中のメモリ読み込みの対象アドレスの中から、VPCに該当するものを検出する。仮想プログラムカウンタ検出部1213は、メモリの読み込み回数に着目した差分実行解析を用いる。
仮想プログラムカウンタ検出部1213は、第一のテストスクリプトに対応した実行トレースを用いる。VPCの読み込みの回数は、テストスクリプト内の繰り返し回数及び、繰り返し処理の中の文の数に比例する。繰り返しの回数をN、繰り返される文の数をMとしたとき、概ねMN程度のVPCの読み込みが発生する。このため、インタプリタループ検出部1212は、N及びMをそれぞれ2Nと2M、3Nと3Mと増やした第一のテストスクリプトに対する実行トレースにおいて、4MN、9MNという増え方をしたメモリを、VPCとして検出する。
[デコーダ・ディスパッチャ検出部の処理]
次に、デコーダ・ディスパッチャ検出部1214の処理について説明する。デコーダ・ディスパッチャ検出部1214は、スクリプトエンジンのバイナリを所定の手法で静的解析することで、デコーダ・ディスパッチャを検出する。
デコーダ・ディスパッチャの実装には一般に、二つの種類が存在する。デコーダ・ディスパッチャの実装の一つ目の種類は、Switch文を用いた実装であり、二つ目の種類は、関数テーブルやジャンプテーブルを用いたテーブルジャンプによる実装である。Switch文及びテーブルジャンプの認識は、既存の静的解析の手法で実現できることが一般に知られている。このため、デコーダ・ディスパッチャ検出部1214は、所定の静的解析の手法で検出されたSwitch文及びテーブルジャンプのうち、インタプリタループ内に存在するものを、デコーダ・ディスパッチャとして検出する。
[条件分岐フラグ検出部の処理]
次に、条件分岐フラグ検出部1215の処理について説明する。条件分岐フラグ検出部1215は、インタプリタループ内でのメモリアクセスを解析することで、条件分岐フラグを検出する。
条件分岐フラグ検出部1215は、第二のテストスクリプトを用いて得られた実行トレースを用いる。条件分岐フラグ検出部1215は、インタプリタループ内でのメモリアクセスから、二段階の絞り込みをすることで、条件分岐フラグを検出する。条件分岐フラグには、分岐がなされるか、なされないかの二つの状態がある。また、条件分岐フラグは、条件分岐の回数に比例した回数、読み込まれると考えられる。
このことから、条件分岐フラグ検出部1215は、一段階目の絞り込みとして、条件分岐の回数に比例した回数のメモリ読み込みがあるメモリを抽出する。そして、条件分岐フラグ検出部1215は、二段階目の絞り込みとして、各メモリ読み込み時の値が、テストスクリプトの条件分岐と対応付くように二つの値を行き来しているメモリを抽出する。
例えば、条件分岐フラグが、分岐がなされる場合をX、なされない場合をYで保持している場合、図5の第二のテストスクリプトでは、条件分岐の順序のパターンはなされる、なされない、なされる、なされる、なされないとなる。このため、条件分岐フラグ検出部1215は、X、Y、X、X、Yと二つの値を行き来しているメモリアドレスを抽出する。条件分岐フラグ検出部1215は、これを分岐の回数を変更しながら繰り返すことにより、条件分岐フラグを検出する。
[分岐VM命令検出部の処理]
次に、分岐VM命令検出部1222の処理について説明する。分岐VM命令検出部1222は、取得したVM実行トレースのログを解析することで分岐VM命令を検出する。ここでのテストスクリプトは、分岐VM命令が含まれていればよいため、分岐の制御構文を含むスクリプトでありさえすればどのようなものでもよい。例えば、インターネット上から収集したり、公式ドキュメントから取得したりしてテストスクリプトを準備する。
まず、分岐VM命令検出部1222は、VM実行トレースから、VM命令のオペコードと、命令の実行前後でのVPCのオフセットとを、組として取得する。このオフセットoは、命令の実行前のVPCの値をpprev、実行後の値をpnextとして、o=pnext-pprevで算出される。
ここで、あるVM命令が分岐命令のとき、このオフセットは、分岐先に依存して変化する。一方、分岐命令以外のときは、オフセットは、VM命令のサイズに依存して変化する。このため、VM命令のオペコードとオフセットとの組を収集し、オペコードごとにオフセットの値を見たとき、分岐命令であれば分岐先によって様々な値にばらつき、分岐命令以外であればVM命令のサイズという特定の値に集中する。
したがって、分岐VM命令検出部1222は、このオフセットのばらつきを評価するため、分散sを用いる。あるオペコードに対するオフセットの集合OをO={o,o,・・・,o}(オフセットoの平均は(1)式を参照)とし、tを閾値としたとき、分岐命令か否かは、分散s((2)式を参照)を基に、(3)式のように判定される。これによって、分岐VM命令検出部1222は、分岐VM命令を検出する。
Figure 0007287480000001
Figure 0007287480000002
Figure 0007287480000003
なお、分岐以外のVM命令では、ばらつきがほとんど見られず、分岐VM命令とそれ以外のVM命令との境界は明確であることが多い。このため、閾値として、例えば、得られた分散の値を数直線上にプロットして、できた二つの群を分割可能な値が、設定される。
[解析機能付与部の処理]
次に、解析機能付与部123の処理を説明する。解析機能付与部123は、スクリプトエンジンバイナリと、ここまでの処理で検出されたフックポイント及びタップポイントを入力として受け付ける。解析機能付与部123は、スクリプトエンジンに対して、フックポイントでのフックを施す。
ここで、解析機能付与部123は、フック時に、フックに対応した言語要素が実行され、その引数としてのタップポイントのメモリがログ出力されるように、解析用のコードを挿入する。この解析用のコードは、フックポイントとタップポイントとが判明していれば、容易に生成できる。これによって、スクリプトが実行された際に、その挙動がログ出力されるようになり、解析機能の付与が実現される。
このフックによる解析機能の付与は、スクリプトエンジンバイナリに対するバイナリを直接書き換えて実現してもよく、バイナリが実行されてプロセスメモリ上に展開された際にメモリイメージを書き換えて実現してもよい。
[解析機能付与装置の処理手順]
次に、解析機能付与装置10による解析機能付与処理の処理手順について説明する。図8は、実施の形態に係る解析機能付与処理の処理手順を示すフローチャートである。
まず、入力部11は、テストスクリプト及びスクリプトエンジンバイナリを入力として受け取る(ステップS1)。
そして、実行トレース取得部1211は、スクリプトエンジンのバイナリを監視しながらテストスクリプトを実行してブランチトレースとメモリアクセストレースを取得する実行トレース取得処理を行う(ステップS2)。そして、インタプリタループ検出部1212は、実行トレースDB131に格納された第一のテストスクリプトに対する実行トレースを取り出して解析し、インタプリタループを発見するインタプリタループ検出処理を行う(ステップS3)。
仮想プログラムカウンタ検出部1213は、実行トレースDB131に格納された第一のテストスクリプトに対する実行トレースを取り出して解析し、VPCを発見する仮想プログラムカウンタ検出処理を行う(ステップS4)。デコーダ・ディスパッチャ検出部1214は、スクリプトエンジンバイナリに対して、所定の静的解析により、インタプリタループ内に存在するSwitch文や関数テーブル、ジャンプテーブルを検出するデコーダ・ディスパッチャ検出処理を行う(ステップS5)。条件分岐フラグ検出部1215は、実行トレースDB131に格納された第二のテストスクリプトに対する実行トレースを取り出して解析し、条件分岐フラグを発見する条件分岐検出処理を行う(ステップS6)。
VM実行トレース取得部1221は、テストスクリプト及びスクリプトエンジンバイナリを入力として受け付け、スクリプトエンジンバイナリの実行を監視しながら、テストスクリプトを実行することで、VM実行トレースを取得するVM実行トレース取得処理を行う(ステップS7)。分岐VM命令検出部1222は、VM実行トレースDB133に格納されたVM実行トレースを取り出して解析し、分岐VM命令を検出する分岐VM命令検出処理を行う(ステップS8)。
解析機能付与部123は、得られたVPC、分岐VM命令及び条件分岐フラグを用いてスクリプトエンジンにフックを施す解析機能付与処理を行う(ステップS9)。そして、出力部14は、マルチパス実行機能が付与されたスクリプトエンジンバイナリを出力する(ステップS10)。
[実行トレース取得処理の処理手順]
次に、図9に示す実行トレース取得処理の流れについて説明する。図9は、図8に示す実行トレース取得処理の処理手順を示すフローチャートである。
まず、実行トレース取得部1211は、テストスクリプト及びスクリプトエンジンバイナリを入力として受け取る(ステップS11)。そして、実行トレース取得部1211は、受け取ったスクリプトエンジンに対して、ブランチトレースを取得するためのフックを施す(ステップS12)。また、実行トレース取得部1211は、受け取ったスクリプトエンジンに対して、メモリアクセストレースを取得するためのフックも施す(ステップS13)。
そして、実行トレース取得部1211は、その状態で受け取ったテストスクリプトをスクリプトエンジンに入力して実行させ(ステップS14)、それによって取得される実行トレースを実行トレースDB131に格納する(ステップS15)。
実行トレース取得部1211は、入力されたテストスクリプトを全て実行し終えているか否かを判定する(ステップS16)。実行トレース取得部1211は、入力されたテストスクリプトを全て実行し終えている場合(ステップS16:Yes)、処理を終了する。これに対し、実行トレース取得部1211は、入力されたテストスクリプトを全て実行していない場合(ステップS16:No)、ステップS14のテストスクリプトの実行に戻って処理を続ける。
[インタプリタループ検出処理の処理手順]
次に、図8に示すインタプリタループ検出処理の流れについて説明する。図10は、図8に示すインタプリタループ検出処理の処理手順を示すフローチャートである。
まず、インタプリタループ検出部1212は、実行トレースDB131から第一のテストスクリプトによる実行トレースを一つ取り出す(ステップS21)。そして、インタプリタループ検出部1212は、実行トレースのうちのブランチトレースに着目し、分岐先ごとに分岐回数を数え上げる(ステップS22)。続いて、インタプリタループ検出部1212は、実行トレースの取得に用いた第一のテストスクリプトを入力として受け取り(ステップS23)、それを解析して繰り返しの回数と繰り返される文の数を取得する(ステップS24)。
インタプリタループ検出部1212は、実行トレースDB131から、繰り返し回数や繰り返される文の数の異なる第一のテストスクリプトによる実行トレースを、さらに一つ取り出す(ステップS25)。そして、インタプリタループ検出部1212は、ブランチトレースに着目し、分岐先ごとに分岐回数を数え上げる(ステップS26)。また、インタプリタループ検出部1212は、実行トレースの取得に用いた第一のテストスクリプトを入力として受け取り(ステップS27)、テストスクリプトを解析して繰り返しの回数と繰り返される文の数を取得する(ステップS28)。
そして、インタプリタループ検出部1212は、繰り返し回数や繰り返される文の増減に比例して分岐回数が変化する分岐先のみに絞り込む(ステップS29)。インタプリタループ検出部1212は、分岐先を一つのみに絞り込めたか否かを判定する(ステップS30)。
インタプリタループ検出部1212は、分岐先を一つのみに絞り込めていない場合(ステップS30:No)、ステップS25に戻り、次の実行トレースを一つ取り出して処理を継続する。一方、インタプリタループ検出部1212は、分岐先を一つのみに絞り込めた場合(ステップS30:Yes)、絞り込まれた分岐先をインタプリタループの先頭としてアーキテクチャ情報DB132に格納して(ステップS31)、処理を終了する。
[仮想プログラムカウンタ検出処理の処理手順]
次に、図8に示す仮想プログラムカウンタ検出処理の流れについて説明する。図11は、図8に示す仮想プログラムカウンタ検出処理の処理手順を示すフローチャートである。
まず、仮想プログラムカウンタ検出部1213は、実行トレースDB131から第一のテストスクリプトによる実行トレースを一つ取り出す(ステップS41)。続いて、仮想プログラムカウンタ検出部1213は、実行トレースのうちのメモリアクセストレースに着目し、メモリ読み込み先ごとに読み込み回数を数え上げる(ステップS42)。
仮想プログラムカウンタ検出部1213は、実行トレースの取得に用いた第一のテストスクリプトを入力として受け取り(ステップS43)、その第一のテストスクリプトを解析して繰り返しの回数と繰り返される文の数とを取得する(ステップS44)。
続いて、仮想プログラムカウンタ検出部1213は、実行トレースDB131から、繰り返し回数や繰り返される文の数の異なる第一のテストスクリプトによる実行トレースを、さらに一つ取り出す(ステップS45)。そして、仮想プログラムカウンタ検出部1213は、メモリアクセストレースに着目し、メモリ読み込み先ごとに読み込み回数を数え上げる(ステップS46)。また、仮想プログラムカウンタ検出部1213は、実行トレースの取得に用いた第一のテストスクリプトを入力として受け取り(ステップS47)、テストスクリプトを解析して繰り返しの回数と繰り返される文の数を取得する(ステップS48)。
ここで、仮想プログラムカウンタ検出部1213は、繰り返し回数や繰り返される文の増減に比例して読み込み回数が変化するメモリ読み込み先のみに絞り込む(ステップS49)。
そして、仮想プログラムカウンタ検出部1213は、メモリ読み込み先を一つのみに絞り込めたか否かを判定する(ステップS50)。仮想プログラムカウンタ検出部1213は、メモリ読み込み先を一つのみに絞り込めていない場合(ステップS50:No)、ステップS45に戻り、次の実行トレースを一つ取り出して処理を継続する。一方、仮想プログラムカウンタ検出部1213は、メモリ読み込み先を一つのみに絞り込めた場合(ステップS50:Yes)、絞り込まれたメモリ読み込み先を仮想プログラムカウンタとしてアーキテクチャ情報DB132に格納して(ステップS51)、処理を終了する。
[デコーダ・ディスパッチャ検出処理の処理手順]
次に、図8に示すデコーダ・ディスパッチャ検出処理の流れについて説明する。図12は、図8に示すデコーダ・ディスパッチャ検出処理の処理手順を示すフローチャートである。
まず、デコーダ・ディスパッチャ検出部1214は、スクリプトエンジンバイナリを入力として受け取る(ステップS61)。そして、デコーダ・ディスパッチャ検出部1214はアーキテクチャ情報DB132から、インタプリタループの情報を取り出す(ステップS62)。
続いて、デコーダ・ディスパッチャ検出部1214は、インタプリタループ内のSwitch文及びテーブルジャンプを、所定の静的解析で検出する(ステップS63)。デコーダ・ディスパッチャ検出部1214は、検出されたSwitch文またはテーブルジャンプをデコーダ・ディスパッチャとして、アーキテクチャ情報DB132に格納し(ステップS64)、処理を終了する。
[条件分岐フラグ検出処理の処理手順]
次に、図8に示す条件分岐フラグ検出処理の流れについて説明する。図13は、図8に示す条件分岐フラグ検出処理の処理手順を示すフローチャートである。
まず、条件分岐フラグ検出部1215は、実行トレースDB131から第二のテストスクリプトによる実行トレースを一つ取り出す(ステップS71)。そして、条件分岐フラグ検出部1215は、メモリアクセストレースに着目し、メモリ読み込み先ごとに読み込み回数を数え上げる(ステップS72)。
また、条件分岐フラグ検出部1215は、実行トレースの取得に用いた第二のテストスクリプトを、入力として受け取り(ステップS73)、この第二のテストスクリプトを解析して、条件分岐の回数とTrue/Falseの順序パターンを取得する(ステップS74)。そして、条件分岐フラグ検出部1215は、条件分岐の回数に比例して読み込み回数が変化するメモリ読み込み先のみに絞り込む(ステップS75)。さらに、条件分岐フラグ検出部1215は、読み込んだメモリの値がTrue/Falseの順序パターンに合わせて二つの値を行き来しているメモリ読み込み先のみに絞り込む(ステップS76)。
条件分岐フラグ検出部1215は、メモリ読み込み先を一つのみに絞り込めたか否かを判定する(ステップS77)。条件分岐フラグ検出部1215は、メモリ読み込み先を一つのみに絞り込めていない場合(ステップS77:No)、ステップS71に戻り、次の実行トレースを一つ取り出して処理を継続する。一方、条件分岐フラグ検出部1215は、メモリ読み込み先を一つのみに絞り込めた場合(ステップS77:Yes)、絞り込まれた読み込み先を仮想プログラムカウンタとしてアーキテクチャ情報DB132に格納し(ステップS78)、処理を終了する。
[VM実行トレース取得処理の処理手順]
次に、図8に示すVM実行トレース取得処理の流れについて説明する。図14は、図8に示すVM実行トレース取得処理の処理手順を示すフローチャートである。
まず、VM実行トレース取得部1221は、テストスクリプト及びスクリプトエンジンバイナリを入力として受け取る(ステップS81)。そして、VM実行トレース取得部1221は、受け取ったスクリプトエンジンに対して、VPC及びVMオペコードを記録するためのフックを施す(ステップS82)。
VM実行トレース取得部1221は、その状態で受け取ったテストスクリプトをスクリプトエンジンに入力して実行させ(ステップS83)、それによって取得されるVM実行トレースをVM実行トレースDB133に格納する(ステップS84)。
VM実行トレース取得部1221は、入力されたテストスクリプトを全て実行したか否かを判定する(ステップS85)。VM実行トレース取得部1221は、入力されたテストスクリプトを全て実行し終えている場合(ステップS85:Yes)、処理を終了する。VM実行トレース取得部1221は、入力されたテストスクリプトを全て実行し終えていない場合(ステップS85:No)、ステップS83のテストスクリプトの実行に戻って処理を続ける。
[分岐VM命令検出処理の処理手順]
次に、図8に示す分岐VM命令検出処理の流れについて説明する。図15は、図8に示す分岐VM命令検出処理の処理手順を示すフローチャートである。
まず、分岐VM命令検出部1222は、VM実行トレースDB133から、VM実行トレースを一つ取り出す(ステップS91)。そして、分岐VM命令検出部1222は、VMオペコードごとに、実行の前後でのVPCの変化量を集計する(ステップS92)。
分岐VM命令検出部1222は、VM実行トレースDB133の全てのVM実行トレースを処理し終えたか否かを判定する(ステップS93)。VM実行トレースDB133の全てのVM実行トレースを処理し終えていない場合(ステップS93:No)、分岐VM命令検出部1222は、ステップS91に戻り、次のVM実行トレースを一つ取り出して処理する。
VM実行トレースDB133の全てのVM実行トレースを処理し終えている場合(ステップS93:Yes)、分岐VM命令検出部1222は、VMオペコードごとにVPCの変化量の分散を算出する(ステップS94)。そして、分岐VM命令検出部1222は、閾値を入力として受け取る(ステップS95)。分岐VM命令検出部1222は、分散が閾値よりも大きいVMオペコードのみに絞り込み(ステップS96)、それらを分岐VM命令としてアーキテクチャ情報DB132に格納して(ステップS97)、処理を終了する。
[解析機能付与処理の処理手順]
次に、図8に示す解析機能付与処理の流れについて説明する。図15は、図8に示す解析機能付与処理の処理手順を示すフローチャートである。
まず、解析機能付与部123は、スクリプトエンジンバイナリを入力として受け取る(ステップS101)。そして、解析機能付与部123はアーキテクチャ情報DB132からVPC、条件分岐フラグ、条件分岐VM命令を取り出す(ステップS102)。続いて、解析機能付与部123は、スクリプトエンジンのフックポイントにフックを施す(ステップS103)。解析機能付与部123は、このフック時に、マルチパス実行用コードが実行されるよう、コードを生成してスクリプトエンジンに挿入する(ステップS104)。解析機能付与部123は、こうして得られたフックの施されたスクリプトエンジンを、マルチパス実行機能付きのスクリプトエンジンとして出力し(ステップS105)、処理を終了する。
[実施の形態の効果]
このように、本実施の形態に係る解析機能付与装置10は、スクリプトエンジンのVMを解析し、VMの命令の体系である命令セットアーキテクチャを解析し、これらの解析によって得られたアーキテクチャ情報に基づいてスクリプトエンジンに、マルチパス実行機能を付与するフックを施す。
具体的には、解析機能付与装置10は、スクリプトエンジンのバイナリを監視しながらテストスクリプトを実行してブランチトレースとメモリアクセストレースを取得する。そして、解析機能付与装置10は、その実行トレースに基づいて仮想機械を解析し、インタプリタループ、VPC、デコーダ・ディスパッチャ、条件分岐フラグのアーキテクチャ情報を取得する。さらに、解析機能付与装置10は、テストスクリプトを実行してVM実行トレースを取得し、そのVM実行トレースを用いて命令セットアーキテクチャを解析して分岐VM命令をアーキテクチャ情報として取得する。その後、解析機能付与装置10は、得られたアーキテクチャ情報を基にスクリプトエンジンにマルチパス実行機能を付与する。
これによって、解析機能付与装置10は、バイナリのみしか手に入らないプロプライエタリなスクリプトエンジンに対しても、実行トレース及びVM実行トレースの取得に基づく解析により各種アーキテクチャ情報を検出し、人手でのリバースエンジニアリングを要することなく、マルチパス実行機能の付与を実現できる。
また、解析機能付与装置10は、多様なスクリプトエンジンに対して、テストスクリプトさえ用意すれば自動でマルチパス実行機能を付与できるため、個別の設計や実行をようすることなく、マルチパス実行機能の付与を実現できる。
さらに、解析機能付与装置10は、条件分岐などの詳細なアーキテクチャを考慮しているため、スクリプトの条件分岐に対して正確なマルチパス実行機能の付与を実現できる。
このように、解析機能付与装置10によれば、スクリプトエンジンを解析し、マルチパス実行機能を後付けで付与することにより、多種多様なスクリプト言語のスクリプトエンジンに対して、マルチパス実行機能の自動的な付与を実現できる。
上述したように、解析機能付与装置10は、多種多様なスクリプト言語で記述される悪性スクリプトの挙動の解析に有用であり、特定の条件を満たさなければ実行されない経路を持った悪性スクリプトに対して、その影響を受けずに、挙動を網羅的に解析することに適している。したがって、本実施の形態を用いて、様々なスクリプトエンジンにマルチパス実行機能を付与することによって、悪性スクリプトの挙動を解析して検知などの対策に生かすことが可能である。
[実施形態のシステム構成について]
図3に示す解析機能付与装置10の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、解析機能付与装置10の機能の分散及び統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散または統合して構成することができる。
また、解析機能付与装置10においておこなわれる各処理は、全部または任意の一部が、CPU及びCPUにより解析実行されるプログラムにて実現されてもよい。また、解析機能付与装置10においておこなわれる各処理は、ワイヤードロジックによるハードウェアとして実現されてもよい。
また、実施の形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的に行うこともできる。もしくは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述及び図示の処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて適宜変更することができる。
[プログラム]
図17は、プログラムが実行されることにより、解析機能付与装置10が実現されるコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。
ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、解析機能付与装置10の各処理を規定するプログラムは、コンピュータ1000により実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、解析機能付与装置10における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSD(Solid State Drive)により代替されてもよい。
また、上述した実施の形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して実行する。
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
以上、本発明者によってなされた発明を適用した実施の形態について説明したが、本実施の形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施の形態に基づいて当業者等によりなされる他の実施の形態、実施例及び運用技術等はすべて本発明の範疇に含まれる。
1 スクリプトエンジン
2 バイトコードコンパイラ
3 仮想機械(VM)
4 構文解析部
5 バイトコード生成部
6 コードキャッシュ部
7 フェッチ部
8 デコード部
9 実行部
10 解析機能付与装置
11 入力部
12 制御部
13 記憶部
14 出力部
121 仮想機械解析部
122 命令セットアーキテクチャ解析部
123 解析機能付与部
131 実行トレースデータベース(DB)
132 アーキテクチャ情報DB
133 VM実行トレースDB
1211 実行トレース取得部
1212 インタプリタループ検出部
1213 仮想プログラムカウンタ検出部
1214 デコーダ・ディスパッチャ検出部
1215 条件分岐フラグ検出部
1221 VM実行トレース取得部
1222 分岐VM命令検出部

Claims (8)

  1. スクリプトエンジンの仮想機械を解析する第一の解析部と、
    前記仮想機械の命令の体系である命令セットアーキテクチャを解析する第二の解析部と、
    前記第一の解析部及び前記第二の解析部による解析によって得られたアーキテクチャ情報に基づいて、前記スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与部と、
    を有することを特徴とする解析機能付与装置。
  2. 前記アーキテクチャ情報は、前記仮想機械の命令が実行されるたびにメモリから読み込まれる対象アドレスである仮想プログラムカウンタ、実行状態の条件分岐時に分岐がなされるか否かのフラグを保持する領域である条件分岐フラグ、及び、実行状態の分岐を発生させる仮想機械命令である分岐仮想機械命令であることを特徴とする請求項1に記載の解析機能付与装置。
  3. 前記第一の解析部及び前記第二の解析部は、テスト用のスクリプトを用いた解析を実施することを特徴とする請求項1または2に記載の解析機能付与装置。
  4. 前記第一の解析部は、
    実行時の条件を変えて複数の実行トレースを取得する第一の取得部を有し、
    差分実行解析を用いて前記複数の実行トレースを解析し、前記仮想プログラムカウンタ及び前記条件分岐フラグを取得することを特徴とする請求項2に記載の解析機能付与装置。
  5. 前記第一の解析部は、
    前記複数の実行トレースを解析し、インタプリタループを検出する第一の検出部と、
    メモリの読み込み回数に着目した差分実行解析を用いて前記複数の実行トレースを解析し、前記仮想プログラムカウンタを検出する第二の検出部と、
    前記スクリプトエンジンのバイナリを静的解析し、デコーダ・ディスパッチャを検出する第三の検出部と、
    メモリの読み込み回数に着目した差分実行解析を用いて前記複数の実行トレースを解析し、前記条件分岐フラグを検出する第四の検出部と、
    を有することを特徴とする請求項4に記載の解析機能付与装置。
  6. 前記第二の解析部は、
    前記仮想機械において実行された実行トレースである仮想機械実行トレースを取得する第二の取得部と、
    前記仮想機械実行トレースの仮想機械オペコードごとの仮想プログラムカウンタの変化量のばらつきによって、前記分岐仮想機械命令を検出する第五の検出部と、
    を有することを特徴とする請求項2に記載の解析機能付与装置。
  7. 解析機能付与装置が実行する解析機能付与方法であって、
    スクリプトエンジンの仮想機械を解析する第一の解析工程と、
    前記仮想機械の命令の体系である命令セットアーキテクチャを解析する第二の解析工程と、
    前記第一の解析工程及び前記第二の解析工程における解析によって得られたアーキテクチャ情報に基づいて、前記スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与工程と、
    を含んだことを特徴とする解析機能付与方法。
  8. スクリプトエンジンの仮想機械を解析する第一の解析ステップと、
    前記仮想機械の命令の体系である命令セットアーキテクチャを解析
    する第二の解析ステップと、
    前記第一の解析ステップ及び前記第二の解析ステップにおける解析
    によって得られたアーキテクチャ情報に基づいて、前記スクリプトエンジンに、マルチパス実行機能を付与するフックを施す付与ステップと、
    をコンピュータに実行させるための解析機能付与プログラム。
JP2021551100A 2019-10-11 2019-10-11 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム Active JP7287480B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2019/040336 WO2021070393A1 (ja) 2019-10-11 2019-10-11 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム

Publications (3)

Publication Number Publication Date
JPWO2021070393A1 JPWO2021070393A1 (ja) 2021-04-15
JPWO2021070393A5 JPWO2021070393A5 (ja) 2022-06-21
JP7287480B2 true JP7287480B2 (ja) 2023-06-06

Family

ID=75438071

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021551100A Active JP7287480B2 (ja) 2019-10-11 2019-10-11 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム

Country Status (3)

Country Link
US (1) US20230028595A1 (ja)
JP (1) JP7287480B2 (ja)
WO (1) WO2021070393A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3848833B1 (en) * 2018-10-11 2023-05-24 Nippon Telegraph And Telephone Corporation Analysis function imparting device, analysis function imparting method, and analysis function imparting program
JP2023000907A (ja) * 2021-06-18 2023-01-04 株式会社日立製作所 ソースコード修正支援装置及びソースコード修正支援方法
JPWO2023067667A1 (ja) * 2021-10-18 2023-04-27
JPWO2023067665A1 (ja) * 2021-10-18 2023-04-27
JPWO2023067663A1 (ja) * 2021-10-18 2023-04-27
WO2023067668A1 (ja) * 2021-10-18 2023-04-27 日本電信電話株式会社 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013008326A1 (ja) 2011-07-13 2013-01-17 富士通株式会社 ソフトウェア検証方法、およびソフトウェア検証システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8924933B2 (en) * 2008-03-25 2014-12-30 Barclays Capital Inc. Method and system for automated testing of computer applications
CN105630526B (zh) * 2014-11-03 2019-04-19 阿里巴巴集团控股有限公司 脚本的加载控制方法及装置
KR101731022B1 (ko) * 2014-12-31 2017-04-27 주식회사 시큐아이 익스플로잇 탐지 방법 및 장치
US10033747B1 (en) * 2015-09-29 2018-07-24 Fireeye, Inc. System and method for detecting interpreter-based exploit attacks
CN108830077B (zh) * 2018-06-14 2023-07-18 腾讯科技(深圳)有限公司 一种脚本检测方法、装置及终端

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013008326A1 (ja) 2011-07-13 2013-01-17 富士通株式会社 ソフトウェア検証方法、およびソフトウェア検証システム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
KINDER,Johannes,Towards Static Analysis of Virtualization-Obfuscated Binaries,2012 19th Working Conference on Reverse Engineering,カナダ,IEEE,2012年,Retrieved from the Internet:<https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6385102>, DOI:10.1109/WCRE.2012.16, ISSN:1095-1350, ISBN 978-0-7695-4891-3
碓井 利宣 ほか,スクリプト実行環境に対する解析機能の自動付与手法,コンピュータセキュリティシンポジウム2018論文集,日本,一般社団法人情報処理学会,Vol.2018, No.2,pp.1016-1023

Also Published As

Publication number Publication date
WO2021070393A1 (ja) 2021-04-15
US20230028595A1 (en) 2023-01-26
JPWO2021070393A1 (ja) 2021-04-15

Similar Documents

Publication Publication Date Title
JP7287480B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
WO2022180702A1 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
US20160371494A1 (en) Software Vulnerabilities Detection System and Methods
US9747187B2 (en) Simulating black box test results using information from white box testing
JP7115552B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
US9507933B2 (en) Program execution apparatus and program analysis apparatus
US8667584B2 (en) Formal analysis of the quality and conformance of information flow downgraders
CN109101815B (zh) 一种恶意软件检测方法及相关设备
WO2018131199A1 (ja) 結合装置、結合方法および結合プログラム
US8935782B2 (en) Malware detection via network information flow theories
US10310956B2 (en) Techniques for web service black box testing
CN111859380A (zh) Android App漏洞的零误报检测方法
US10387288B2 (en) Interactive analysis of a security specification
KR20210045122A (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
Heelan et al. Augmenting vulnerability analysis of binary code
WO2023067668A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
WO2023067665A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
Ashouri Practical dynamic taint tracking for exploiting input sanitization error in java applications
JP6984760B2 (ja) 変換装置及び変換プログラム
Usui et al. My script engines know what you did in the dark: Converting engines into script API tracers
JP7517585B2 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
WO2023067663A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
Bhardwaj et al. Fuzz testing in stack-based buffer overflow
WO2023067667A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
Youssef et al. Tracing Software Exploitation

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A5211

Effective date: 20220215

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230406

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230508

R150 Certificate of patent or registration of utility model

Ref document number: 7287480

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150