JP6527295B2 - 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム - Google Patents

攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム Download PDF

Info

Publication number
JP6527295B2
JP6527295B2 JP2018543894A JP2018543894A JP6527295B2 JP 6527295 B2 JP6527295 B2 JP 6527295B2 JP 2018543894 A JP2018543894 A JP 2018543894A JP 2018543894 A JP2018543894 A JP 2018543894A JP 6527295 B2 JP6527295 B2 JP 6527295B2
Authority
JP
Japan
Prior art keywords
rop
data sequence
address
unit
label
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
JP2018543894A
Other languages
English (en)
Other versions
JPWO2018066516A1 (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 JPWO2018066516A1 publication Critical patent/JPWO2018066516A1/ja
Application granted granted Critical
Publication of JP6527295B2 publication Critical patent/JP6527295B2/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
    • 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/565Static detection by checking file integrity
    • 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/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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラムに関する。
標的型攻撃をはじめ、ソフトウェアの脆弱性を悪用した攻撃の脅威が顕在化している。こうした攻撃は、攻撃対象に攻撃コードを実行させることにより実現され、マルウェアの感染に至らせる。脆弱性を悪用した攻撃は、主に、エクスプロイトコード、シェルコード、ROP(Return Oriented Programming)チェーンの3種類の攻撃コードによって構成されている。
エクスプロイトコードは、悪意のある動作を実現するために、脆弱性を悪用する攻撃コードである。エクスプロイトコードは、メモリ破壊などの脆弱性を悪用し、プログラムの制御を奪う。これにより、プログラムの制御を攻撃者の用意したシェルコードなどに遷移させる。
このシェルコードとは、攻撃者が作成した機械語コード片であり、作成したコードに応じて、アプリケーションに任意の動作をさせることができる。シェルコードによる攻撃を実現するためには、メモリ上にシェルコードを書き込み、プログラムの制御をそこに移すことによって実行させる必要がある。ただし、近年では、書き込み可能なメモリ領域を実行不可にするデータ実行防止機構の普及により、シェルコードのみで攻撃を成功させることは難しくなってきている。
これに伴い、ROPと呼ばれる新たな攻撃手法が脅威となっている。ROPとは、脆弱性を攻略してコールスタックを上書きすることでリターン先を掌握し、ret命令の繰り返しによってライブラリなどの既存のコードを継ぎ接ぎしながら実行することで、任意のコード実行を実現する攻撃手法である。なお、ROPでリターンした先に存在する、継ぎ接ぎされる既存のコード片は、ROPガジェットと呼ばれる。
このROPは、以下の手順で実現される。まず、攻撃者は、バッファオーバーフローなどの脆弱性を突いて、コールスタックを書き換えることができることを確認する。これによって、攻撃者は、以降のリターン先を掌握できるようになる。続いて、攻撃者は、コールスタックを上書きするコードを生成する。このとき、攻撃者は、リターンの繰り返しによってライブラリなどの既存のコードを継ぎ接ぎし、任意の動作を実現できるコードを生成する。この生成されたコードを、ROPチェーンと呼ぶ。
そして、攻撃者は、ROPチェーンを用いてコールスタックを上書きさせることによって、攻撃対象に対し、攻撃者の任意のコードを実行させる。以上が一般的なROPの手順である。このROPでは、シェルコードを注入することなく、任意のコードを実行させることが可能である。
このROPは、データ実行防止機構に影響されずに任意コード実行が可能であるものの、攻撃対象の環境によって、ROPチェーンの長さに制約があり、自由な攻撃を実現できない場合も少なくない。したがって、近年では、攻撃手法として、短いROPチェーンによってデータ実行防止機構を回避し、実際の悪性な動作を、シェルコードによって実現する手法が多く見られる。
このような脆弱性を悪用した攻撃を検知し、対処するためには、データ中に攻撃コードが含まれているか否かを検査する方法がある。なお、検査対象となるデータには、例えば、文書ファイルや通信のストリームなどが挙げられる。
ここで、攻撃コードの検知を考えたとき、前述の3種類の攻撃コードのうち、エクスプロイトコードは、悪用する脆弱性によって形態が大きく異なるため、一括した手法での検知が難しいことが知られている。
また、シェルコードについても検知が困難な場合がある。例えば、シェルコードがエンコードされていて実行の直前にデコードされる場合である。この場合には、シェルコードの特徴がエンコードによって隠蔽されるため、検知が難しくなる。一方、ROPチェーンは、形態に一貫性があり、また、エンコードされない状態で存在している。そのため、攻撃コードのうち、ROPチェーンの検知は、重要な技術の一つとなっている。
このROPチェーンを検知する手法には、動的手法と静的手法が考えられる。動的手法は、攻撃を検証するための環境を用意し、実際に攻撃の実行を監視することによって検知する手法である。静的手法は、攻撃を実行することなく、バイト値など、データの表層的な情報を基にして検知する手法である。
これらのうち、動的手法は、攻撃の実行を監視する必要があるため、一般に時間を要する。たとえば、悪性文書ファイルに含まれるROPチェーンを検知する場合、動的手法では、攻撃が成功する環境を準備し、ビューアアプリケーションによって文書ファイルを開いて攻撃を観測しなければならない。このため、動的手法は、高速性が要求されない場合のみにしか適用できないという欠点がある。
したがって、高速な検知が必要な場合には、静的手法を用いることが望ましく、複数の静的手法が提案されている(例えば、非特許文献1〜5参照)。
C. YoungHan et al. "STROP: Static Approach for Detection of Return-Oriented Programming Attack in Network", IEICE Transactions on Communications, 98(1):242-251, 2015 田中恭之,後藤厚宏,"ROP攻撃コード検出による悪性文書ファイル特定手法の提案", 電子情報通信学会技術研究報告, 114(117), 39-45 Blaine. Stancill, et al. "Check My Profile: Leveraging Static Analysis for Fast and Accurate Detection of ROP Gadgets",In Proceedings of the 16th International Symposium on Research in Attacks, Intrusions, and Defenses, pages 62-81. Springer, 2013 Christopher. Jamthagen, et al. "eavesROP: Listening for ROP Payloads in Data Streams",In Proceedings of the International Conference on Information Security,pages 413-424. Springer, 2014 碓井利宣,幾世知範,岩村誠,矢田健,"隠れマルコフモデルに基づくROPチェーン静的検知手法",電子情報通信学会技術研究報告,115(488), 71-76
しかしながら、非特許文献1〜5に記載の静的手法では、ROPチェーンの繋がりを考慮せずにバイト列の特徴のみに着目している。このため、非特許文献1〜5に記載の静的手法では、偶発的に発生した、ROPチェーンらしさが高いが、ROPチェーンではないバイト列を、ROPチェーンであると過検知してしまう場合があるという問題があった。
本発明は、上記に鑑みてなされたものであって、高速性を損なうことなく、過検知を削減した高精度なROPチェーンの静的検知を実現することができる攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するために、本発明に係る攻撃コード検知装置は、ROPチェーンに用いられる学習用のライブラリファイルを事前に解析し、ライブラリファイル内のコード片であるROPガジェットのアドレスと、該ROPガジェットが実行された際のスタックポインタの増加値と、の組を取得する事前実行部と、事前実行部の取得結果を用いて、検査対象の未知のデータ系列について、ROPガジェット同士が正しく繋がる有効なROPチェーンであるかを検証することによって、検査対象の未知のデータ系列が悪性データ系列であるか否かを検知する検知部と、を有することを特徴とする。
本発明によれば、高速性を損なうことなく、過検知を削減した高精度なROPチェーンの静的検知を実現することができる。
図1は、実施の形態に係る攻撃コード検知装置の構成の一例を説明するための図である。 図2は、図1に示すラベル付き悪性文書ファイルの一例を示す図である。 図3は、図2に示すファイルにおけるROPチェーン部分を説明するための図である。 図4は、図3の表の左側部分の1行目から5行目のバイト及びラベルを模式的に対応付けた図である。 図5は、潜在系列(ラベル列)の潜在変数となるラベルの遷移の例を示した図である。 図6は、各潜在変数(ラベル)について潜在系列の初期状態確率を対応付けた表を示す図である。 図7は、潜在変数(ラベル)ごとに、観測変数(バイト)の出力確率を対応付けた表を示す図である。 図8は、潜在系列(ラベル列)の遷移確率を、遷移する潜在変数の組み合わせごとに対応付けた表を示す図である。 図9は、64bit環境に対応させたラベルの遷移の例を示す図である。 図10は、図1に示す攻撃コード検知装置が確率モデルを生成するまでの処理手順を示すフローチャートである。 図11は、図10に示す確率モデル生成処理の処理手順を示すフローチャートである。 図12は、図1に示す攻撃コード検知装置がオフセット辞書を生成するまでの処理手順を示すフローチャートである。 図13は、図12に示すオフセット辞書生成処理の処理手順を示すフローチャートである。 図14は、図1に示す攻撃コード検知装置が検査対象未知文書ファイルを、ROPチェーンを持つ悪性文書ファイルか否かを判定するまでの処理手順を示すフローチャートである。 図15は、図14に示す検知処理の処理手順を示すフローチャートである。 図16は、プログラムが実行されることにより、攻撃コード検知装置が実現されるコンピュータの一例を示す図である。
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
[実施の形態]
実施の形態に係る攻撃コード検知装置は、事前に、ROPチェーンを含む悪性文書ファイルの特徴を学習した確率モデルと、良性文書ファイルの特徴を学習した確率モデルと、を生成する。さらに、この攻撃コード検知装置は、ROPチェーンに用いられるライブラリファイルを事前に解析し、ライブラリファイル内に含まれる有効なROPガジェットのアドレスと、該ROPガジェットが実行された際のスタックポインタの増加値(オフセット)と、の組をオフセット辞書として取得する。
そして、この攻撃コード検知装置は、生成した確率モデル、及び、取得したオフセット辞書に基づき、検知対象である未知の文書に対し、悪性文書らしさを示す尤度と良性文書らしさを示す尤度とを算出する。攻撃コード検知装置では、尤度計算の際には、ROPチェーンが実行された際に、ROPガジェットが正しく繋がるか否かを考慮する。これによって、実施の形態に係る攻撃コード検知装置は、この未知の文書をビューアアプリケーションで開くことなく、この未知の文書がROPチェーンを含むか否かを静的に検査する。
[攻撃コード検知装置の構成]
まず、図1を参照して、実施の形態に係る攻撃コード検知装置の構成について説明する。図1は、実施の形態に係る攻撃コード検知装置の構成の一例を説明するための図である。
図1に示すように、攻撃コード検知装置10は、事前実行部11、制御部12、出力部13、記憶部14、オフセット辞書データベース(DB)20及び確率モデルDB30を有する。そして、攻撃コード検知装置10は、ラベル付き悪性文書ファイル100、ラベル付き良性文書ファイル200、検査対象未知文書ファイル300及び学習データライブラリファイル400の入力を受け付ける。
事前実行部11は、ROPに用いられる学習データライブラリファイル400を入力として受付ける。そして、事前実行部11は、学習データライブラリファイル400のコード領域を1バイトずつエミュレーション実行して事前に解析する。これによって、事前実行部11は、ROPガジェットのアドレスと、そのROPガジェットを実行した際のスタックポインタのオフセットと、の組を、オフセット辞書として取得する。事前実行部11は、取得したオフセット辞書を、オフセット辞書DB20に記憶させる。
ここで、スタックポインタは、ROPガジェットを実行すると増加する。そして、スタックポインタが増加した先にもアドレスがある場合には、このアドレスに対応するROPガジェットを実行することによって、さらに増加する。このスタックポインタの増加値がオフセットである。そして、ROPガジェットのアドレスと、そのROPガジェットを実行した際のスタックポインタのオフセットとは対応しているため、事前実行部11は、ROPガジェットのアドレスと、そのROPガジェットを実行した際のスタックポインタのオフセットと、の組を、オフセット辞書として取得する。
制御部12は、各種の処理手順などを規定したプログラム及び所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。例えば、制御部12は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。制御部12は、ファイル形式判定部121、デコード部122、学習部123、検知部124を有する。
ファイル形式判定部121は、入力される全ての文書ファイルに対し、いずれのファイル形式によって構成されているファイルであるかを判定する。ファイル形式判定部121は、入力された文書ファイルについて、この文書ファイルのヘッダやファイル構造の特徴に基づいて、ファイルの形式を判別する。例えば、ファイルの形式として、DOC、XLS、PPT、PDFなどが想定される。
デコード部122は、文書ファイルの形式によってはエンコードされている領域が存在するため、ファイル中にエンコードされた領域があれば、その領域をデコードする。このデコード部122は、ファイル形式の仕様に基づいてデコードし、文書ファイルがビューアアプリケーションによってメモリ上に展開された状態と同様の状態のバイト列を取得する。
学習部123は、後述するラベル付き悪性文書ファイル100またはラベル付き良性文書ファイル200を学習データとして、確率モデルを生成する。学習部123は、生成した確率モデルを、確率モデルDB30にモデルパラメータの形で記憶させる。
検知部124は、事前実行部11が生成したオフセット辞書を用いて、後述する検査対象未知文書ファイル300について、ROPガジェット同士が正しく繋がる有効なROPチェーンであるかを検証することによって、検査対象未知文書ファイル300が悪性文書ファイルであるか否かを検知する。そして、検知部124は、確率モデルを用いた確率計算に基づいて検査対象未知文書ファイル300が悪性文書ファイルであるか否かを検知する。
具体的には、検知部124は、ROPガジェット同士が正しく繋がる可能性を考慮して、悪性データ系列の確率モデルと、良性データ系列の確率モデルとの間での尤度比検定を行い、検査対象未知文書ファイル300が悪性文書ファイルであるか否かを検知する。言い換えると、検知部124は、学習部123が生成した確率モデルと、事前実行部11が生成したオフセット辞書とを用い、検査対象未知文書ファイル300が、良性文書ファイルらしさが高いか、悪性文書ファイルらしさが高いかを、尤度比検定により計算する。検知部124は、この尤度比検定の際に、オフセット辞書を用いて、ROPチェーンの候補部分が実行された場合に、ROPガジェット同士が正しく繋がる可能性を考慮した計算を実施する。これにより、検知部124では、過検知を削減している。そして、検知部124は、尤度比検定の結果、悪性文書ファイルらしさが高ければ、ROPチェーンを含んだ悪性文書ファイルであるとして検知する。
出力部13は、例えば、液晶ディスプレイやプリンタ等であって、攻撃コード検知に関する情報を含む各種情報を出力する。また、出力部13は、外部装置との間で、各種データの入出力を司るインタフェースであってもよく、外部装置に各種情報を出力してもよい。
記憶部14は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現され、攻撃コード検知装置10を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが記憶される。
オフセット辞書DB20は、事前実行部11によって取得されたオフセット辞書を、ROPガジェットのアドレスと、そのガジェットを実行した際のスタックポインタとを組み合わせた形で蓄積する。オフセット辞書DB20は、攻撃コード検知装置10によって管理される。もちろん、オフセット辞書DB20は、他の装置(サーバ等)によって管理されていてもよく、この場合には、事前実行部11は、出力部13の通信インタフェースを介して、生成したオフセット辞書を、オフセット辞書DB20の管理サーバ等に出力して、オフセット辞書DB20に記憶させる。
確率モデルDB30は、学習部123によって生成された確率モデルをモデルパラメータの形で蓄積する。確率モデルDB30は、攻撃コード検知装置10によって管理される。もちろん、確率モデルDB30は、他の装置(サーバ等)によって管理されていてもよく、この場合には、学習部123は、出力部13の通信インタフェースを介して、生成した確率モデルを、確率モデルDB30の管理サーバ等に出力して、確率モデルDB30に記憶させる。
[ラベル付き悪性文書の構成]
次に、ラベル付き悪性文書ファイル100について説明する。図2は、ラベル付き悪性ファイル文書100の一例を示す図である。ラベル付き悪性文書ファイル100は、実際の悪性文書ファイルを調査し得られたものであり、例えば、図2のファイルDに示すように、エクスプロイトコード部、シェルコード部、ROPチェーン部などを含む。本実施の形態では、このうち、ROPチェーン部に着目する。
図3は、図2に示すファイルD(ラベル付き悪性文書ファイル100)におけるROPチェーン部分を説明するための図である。図3は、説明のために、ROPチェーン部分及びその前後の部分のデータ系列の具体例を示す。図3では、ROPチェーン部分とともにROPチェーン部分の直前の文書ファイルの一部バイト値として「0xff」、及び、ROPチェーン部分の直後の文書ファイルの一部バイト値として「0x31」を示す。
ここでは、リトルエンディアンの環境下で、4バイトで構成されるアドレスや定数を1バイトごとに分割し、最下位のバイトから順に記録した例を示している。そこで、図3では、分割された各バイトの値を、表Taの左列に、記録順に一列に配置している。以降については、この列をバイト列として説明する。
図3に示すように、攻撃コード検知装置10では、ラベル付き悪性文書ファイル100として、ラベル付き悪性文書ファイル100のそれぞれのバイト値に、各バイトの由来を表すラベルが対応付けられて組になったものが用いられている。由来とは、そのバイト値が文書ファイルの構成要素か、ROPチェーンの構成要素かを示すものである。なお、図3では、各バイト値にそれぞれ対応付けられたラベルの名前は、表Taの右列に、組となるバイトの配置に合わせて一列に配置している。以降については、この列をラベル列として説明する。
ここで、ROPチェーンの具体的な構成要素として、ROPガジェットアドレス、定数、及び、ジャンクコードの3つがある。ROPガジェットアドレスは、ROPガジェットのメモリ上の位置を指し示すアドレス値である。定数は、ROPガジェット中での演算に用いられる定数値である。そして、ジャンクコードは、スタックポインタの位置を調整するためにあるもので、攻撃の際に参照されないコードである。
以降では、上記の3つの構成要素をそれぞれ、「アドレス」、「定数」、「ジャンク」と表記する。また、本実施の形態は、文書ファイルの構成要素を「文書ラベル」と表記する。
そして、ROPチェーンの構成要素には、ROP(アドレス1,2,3,4)ラベル、ROP(定数1,2,3,4)ラベル、ROP(ジャンク)ラベルを用いている。ここで、「1,2,3,4」の数字は、4バイトで構成されるアドレスや定数のうち、何バイト目のバイトであるかを示すインデックスである。リトルエンディアンの環境下では、ROP(アドレス1)やROP(定数1)のラベルには、アドレスや定数の最下位バイトが対応し、ROP(アドレス4)やROP(定数4)のラベルには、最上位バイトが対応する。
例えば、図3の表Taの左側部分の上から2行目から始まる「0x0101acd9」というROPアドレスに対しては、バイト値「0xd9」にROP(アドレス1)ラベルが付与されており、バイト値「0xac」にROP(アドレス2)ラベルが付与されており、バイト値「0x01」にROP(アドレス3)ラベルが付与されており、バイト値「0x01」にはROP(アドレス4)ラベルが付与されている。同様に、表Taの右側部分の1行目から始まる「0x00003000」という定数に対しては、バイト値「0x00」にROP(定数1)ラベルが付与されており、バイト値「0x30」にROP(定数2)ラベルが付与されており、バイト値「0x00」にROP(定数3)ラベルが付与されており、バイト値「0x00」にROP(定数4)ラベルが付与されている。
このように、攻撃コード検知装置10においては、学習用のデータとして、ラベル付き悪性文書ファイル100のそれぞれのバイトに、文書ラベル或いはROPラベルが対応付けられたものを用いる。
なお、ラベルの設計はこれに限るものではなく、例えば、文書ラベルを文書ファイルの形式にあわせてさらに細かく分解してもよい。具体的には、DOC形式のファイルにおいて、テキスト文書が含まれるワードドキュメントストリーム、様々なデータが含まれるデータストリーム、マクロプログラムが含まれるマクロストレージなどでは、それぞれバイト列の分布が異なると考えられるため、これらを分けるなどが考えられる。
また、学習データとなるラベル付き悪性文書ファイル100は、予め作成されたものである。ラベル付き悪性文書ファイル100の作成は、ROPチェーンが含まれる悪性文書ファイルを発見し、この発見した悪性文書ファイルを用いて、所定の方法でバイトに分割する。続いて、手動或いは動的解析によって、各バイトに、ラベルを付与する。
例えば、手動によってラベルを付与する場合には、一般に流通している、脆弱性に対するPoC(Proof-of-Concept)コードなどに記載されているROPアドレスを参照して、文書ファイル中に埋め込まれたROPチェーンを抽出する。そして、アドレス値から、ROPが用いるライブラリの種類を調べ、ROPアドレスを確認しながらラベル付けをしていく。
また、動的解析によってラベルを付与する場合は、他の手法(例えば、L. Davi, A. Sadeghi and M. Winandy, “ROPdefender: A Detection Tool to Defend Against Return-Oriented Programming Attacks”, Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security, Pages 40-51, ASIACCS, 2011参照)を応用することもできる。すなわち、実行命令やスタックの状態などを監視することによってROPを検知するシステムを用いて、ROPチェーン部分を抽出する。そして、このシステムに、実行されたROPガジェットのアドレスを参照することで、抽出したROPチェーンにラベル付けする機能を付加することにより、ラベルの付与を実現する。
[ラベル付き良性文書ファイルの構成]
次に、ラベル付き良性文書ファイル200について説明する。ラベル付き良性文書ファイル200は、一般に流通している悪性でない文書ファイルであり、攻撃コードを含まない。ラベル付き良性文書ファイル200は、ラベル付き悪性文書ファイル100と同様に、各バイトに対応したラベルを持ち、ROPチェーンを持たないために、そのラベルはすべて文書ラベルとなる。
ラベル付き良性文書ファイル200も、ラベル付き悪性文書ファイル100と同じく学習データであるため、予め作成されるものである。ラベル付き良性文書ファイル200の作成は、良性文書ファイルを発見し、所定の方法でバイトに分割してから、各バイトに文書ラベルを付与することにより実施される。良性文書ファイルの発見には、既存のセキュリティ技術を基に良性であると判断されたものを用いてもよく、研究用のデータセットなどを用いてもよい。
[学習用のライブラリファイルの構成]
ROPチェーンに用いられる学習データライブラリファイル400は、ROPによる攻撃の対象となるアプリケーションがメモリ上に読み込むライブラリファイルである。攻撃の対象となるアプリケーションとは、例えば文書ファイルを用いた攻撃であれば、ビューアアプリケーション等である。そして、学習データライブラリファイル400は、アドレス空間のランダム化 (Address Space Layout Randomization) が無効化されている(以降、Non-ASLRと表現する)ものである。一般に、こうしたライブラリファイルは、限定的であり、網羅が可能である。
[学習部の確率モデル生成処理]
次に、学習部123の処理を説明する。学習部123は、上述したようなラベル付き悪性文書ファイル100及びラベル付き良性文書ファイル200を用いて、それらの文書ファイルが持つバイト列の構造的特徴を学習した確率モデルをそれぞれ生成する。
まず、ラベル付き悪性文書ファイル100に対するモデルパラメータの生成について説明する。図4は、図3の表Taの左側部分の1行目から5行目のバイト及びラベルを模式的に対応付けた図である。上述したように、本実施の形態では、各バイトに各バイトの由来を表すラベルが対応付けられた学習データを用意している。すなわち、文書ファイルの各バイトに、文書ラベルと複数のROPラベルとの中からいずれか一つをラベル付けしたものである。このため、各バイトの背後には、いずれかのラベルが潜在していると言える。
そして、攻撃検知対象のROPでは、ROPチェーンにより、短いROPガジェット間を次々に遷移させることによって、コードを継ぎ接ぎし、任意の動作を実現できるコードを生成するものである。ROPチェーンの構成は、遷移していくROPアドレスを基本としていて、ROPアドレスによる関数呼び出しがあれば定数が続き、さらにスタックの調整が必要であればジャンクが連なる、というように、それぞれ前後で関連性がある。このため、各バイトの背後にそれぞれ潜在するラベルは、他のラベルへと遷移するものと言える。
したがって、図4に示すように、文書ファイルから観測可能な系列であるバイト列の背後には、確率的に遷移する潜在的な状態の系列であるラベル列が潜んでおり、それぞれの状態ごとに、確率的にバイト値を出力するというモデルが考えられる。すなわち、ROPチェーンを潜在変数モデルでモデル化することが考えられる。なお、観測可能な系列(観測系列)にはバイト列が対応し、潜在的な状態の系列(潜在系列)にはラベル列が対応する。したがって、学習部123は、潜在系列からの観測変数の出力確率を、確率モデルのモデルパラメータの一つとして生成する。
そして、潜在系列(ラベル列)の潜在変数となる各ラベルは、他のラベルへと遷移する特徴を有する。図5は、潜在系列(ラベル列)の潜在変数となるラベルの遷移の例を示した図である。例えば、ROPチェーン検出の問題に適用可能な、隠れマルコフモデルや条件付き確率場のようなグラフィカルモデルでは、潜在変数がどのように遷移するかが一つの重要な要素となる。
ここでは、潜在変数(ラベル)間の遷移の特徴として、図5の矢印R1,R2に示すように、アドレスラベル(ROPアドレス1〜4ラベル)や定数ラベル(ROP定数1〜4)は、4バイト分のleft-to-rightの一方通行の形になっていることが挙げられる。これは、32bit環境下では、アドレスや定数が4バイト単位であるためである。
そして、潜在変数の遷移の特徴として、文書ラベルからは、文書ラベルまたはアドレスラベルにのみ遷移すること(図5の矢印Y1,Y2参照)が挙げられる。これは、本実施の形態では、ROPチェーンの始端と終端を明確にするため、ROPチェーンを最初のROPアドレスから最後のROPアドレスまでと定義しているためである。
ROPチェーン検知の際には、このような特徴を基にROPチェーンの有無を検知するため、学習部123は、さらに、潜在変数の遷移状態を確率的に示すモデル、すなわち、潜在変数間の遷移確率を、確率モデルのモデルパラメータの一つとして生成する。
以上より、学習部123は、観測変数の出力確率、潜在変数間の遷移確率及び潜在系列の初期状態確率をモデルパラメータとして持つモデルを想定し、図6〜図8に例示するような確率モデルの生成を行う。図6は、各潜在変数(ラベル)について潜在系列の初期状態確率を対応付けた表を示す図である。図7は、潜在変数(ラベル)ごとに、観測変数(バイト)の出力確率を対応付けた表を示す図である。図8は、潜在変数(ラベル)間の遷移確率を、遷移する潜在変数の組み合わせごとに対応付けた表を示す図である。
まず、学習部123が、モデルパラメータのうち観測変数の出力確率を生成するまでの処理について説明する。上述したように、文書ファイルのバイト列が観測系列に対応し、ラベル列が潜在系列に対応する。学習部123は、まず、学習データとして、既知のラベル付き悪性文書ファイル100を学習データとして受け取る(例えば、図3の表Ta参照)。
続いて、学習部123は、潜在変数の初期状態確率を、入力された全てのラベル付き文書ファイルの先頭のラベルを基に計算する。潜在系列(ラベル列)のt番目の潜在変数をsとしたとき、初期状態がラベルeの確率は、P(s1=e)を計算することにより得られる。これは、初期状態が「文書」である確率を例にすると、「先頭のラベルが文書ラベルであるラベル付き文書ファイル数」を「全ラベル付き文書ファイル数」で除することによって計算できる。学習部123は、この計算を全ての潜在変数についてそれぞれ計算する。なお、ROPチェーンから始まる文書ファイルは、ファイル形式上考えにくいため、一般に初期状態が文書ラベルである確率が1、それ以外のラベルである確率が0となる。学習部123は、初期状態確率として、潜在変数に対して、それぞれが初期状態、すなわち先頭のラベルである確率が対応付けられた表T1(図6参照)を、この潜在系列の初期状態確率を示すモデルパラメータとして生成し、確率モデルDB30に格納する。
そして、学習部123は、全ての潜在変数(ラベル)に対して、そのラベルが観測変数(バイト)を出力する確率を計算する。潜在系列(ラベル列)のt番目の潜在変数をs、観測系列(バイト列)のt番目の観測変数をoとしたとき、ラベルeがバイトxを出力する確率は、P(o=x|s=e)を計算することにより得られる。
ここで、それぞれの観測変数は、いずれも、「0x00」から「0xFF」までのバイト値を取り得る。このため、例えば、文書ラベルがバイト値「0x00」を出力する確率は、「文書ラベルの付いている0x00の値を持つバイト数」を「文書ラベルの付いている全バイト数」で除することによって計算することができる。学習部123は、この計算を、バイト値「0x00」からバイト値「0xFF」についてそれぞれ計算する。これによって、学習部123は、文書ラベルが、各バイト値「0x00」からバイト値「0xFF」をそれぞれ出力する確率を計算することができる。学習部123は、この計算を全てのラベルについて計算する。
学習部123は、これらの計算を行うことによって、潜在変数(ラベル)ごとに、それぞれの観測変数(バイト)の出力確率を対応付けた表T2(図7参照)を、観測変数の出力確率を示すモデルパラメータとして生成し、確率モデルDB30に格納する。
この観測変数の出力確率は、表T2に例示するように、例えば「文書」ラベルについては、「0x00」から「0xFF」までのバイト値を出力する確率「b文書,0x00」から「b文書,0xFF」が対応付けられ、「ROP(アドレス1)」ラベルについては、「0x00」から「0xFF」までの全ての取り得るバイト値を出力する確率「bROP(アドレス1),0x00」から「bROP(アドレス1),0xFF」が対応付けられたものである。
次に、学習部123が、モデルパラメータのうち潜在変数間の遷移確率を生成するまでの処理について説明する。潜在系列(ラベル列)のt番目の潜在変数をsとしたとき、ラベルeからラベルeへの潜在変数間の遷移確率は、P(st+1=e|s=e)を計算することにより得られる。
学習部123は、全てのあり得る潜在変数(ラベル)の組について、ラベル間の遷移確率を計算する。まず、学習部123は、図5を用いて説明した、アドレスラベルや定数ラベルが4バイト分のleft-to-rightの一方通行の形になるというラベルの遷移の特徴、文書ラベルからは、文書ラベル、アドレスラベル、または、ジャンクラベルにのみ遷移するというラベルの遷移の特徴、及び、図5に示すラベルの遷移状態関係に基づいて、全てのあり得るラベルの組を求める。
この全てのあり得る潜在変数(ラベル)の組について、潜在変数間の遷移確率を計算するには、潜在変数間の遷移回数を集計することで計算できる。例えば、ROP(アドレス4)ラベルからROP(ジャンク)ラベルへの遷移確率は、「ROP(アドレス4)ラベルからROP(ジャンク)ラベルへの遷移回数」を「ROP(アドレス4)ラベルからの全ての遷移回数」で除することによって計算することができる。学習部123は、この計算を、全てのあり得る潜在変数の組について行う。
学習部123は、全てのあり得る潜在変数の組について潜在変数間の遷移確率を計算することによって、潜在変数の組み合わせ(遷移元のラベルと遷移先のラベルとの組み合わせ)ごとに、遷移する確率を対応付けた表T3(図8参照)を、潜在変数間の遷移確率を示すモデルパラメータとして生成し、確率モデルDB30に格納する。
この潜在変数間の遷移確率として、e,eをそれぞれラベルとして、eからeに遷移する確率をai,jとした場合、表T3に例示するように、「文書」ラベルから「ROP(アドレス1)」ラベルへの遷移確率には、「a文書,ROP(アドレス1)」が対応付けられている。そして、表T3に例示するように、「文書」ラベルから、各「ROP(アドレス2)」ラベルから「文書」ラベルについても、遷移確率「a文書,ROP(アドレス2)」から「a文書,文書」がそれぞれ対応付けられている。さらに、他のラベルについても同様に、全てのあり得る遷移先のラベルへの遷移確率がそれぞれ対応付けられている。
さらに、学習部123は、ROPチェーンのアドレス部分の構成に用いられるDLL等のライブラリファイルが判明している場合は、そのファイル中のROPガジェット候補のアドレスを基に再学習する。なお、学習部123がアドレスを学習するために、前提として、このライブラリファイルがメモリ上にロードされる際のアドレスが固定である必要がある。この再学習によって、学習データのROPチェーンに含まれていないアドレスが検査対象で用いられていても、検知率を高く保つことが期待できる。
この再学習は、モデルパラメータのうち、ROP(アドレス1)ラベルからROP(アドレス4)ラベルの潜在変数における出力確率を更新することで実現できる。まず、学習部123は、ファイル中からROPガジェット候補のアドレス一覧を抽出する。この抽出は、既存のソフトウェアを用いて実現できることが知られている。
そして、学習部123は、抽出したROPガジェット候補のアドレスを1バイトごとに分割し、1バイト目をROP(アドレス1)、2バイト目をROP(アドレス2)、というように、バイトごとに各ラベルを対応付け、出力確率の計算を行う。例えば、ROP(アドレス1)のラベルがバイト値「0x00」を出力する確率は、「1バイト目が0x00の値を持つアドレス数」を「全アドレス数」で除することによって計算することができる。学習部123は、この計算を「ROP(アドレス1)」から「ROP(アドレス4)」までのラベルについて、それぞれバイト値「0x00」からバイト値「0xFF」まで行うことによって、各出力確率を計算し、モデルパラメータを更新することで、再学習する。
続いて、学習部123は、このように生成された確率モデルの中で、遷移確率、出力確率の中に、値が「0」となるものがあれば、平滑化処理を行う。平滑化処理とは、パラメータのベクトルの中に確率「0」の次元が存在する場合に、この確率を「0」以外の値に修正する手法である。これは、ゼロ頻度問題と呼ばれる、学習データ中に現れずに出現確率が「0」となっていたものが認識対象中に現れた場合に、確率値が乗算されていく過程で0となってしまい、うまく認識できなくなるという問題への対策となる。なお、この平滑化処理の手法として、加算スムージングやKneser-neyスムージングなどの手法があるが、もちろん、これらの手法に限るものではない。
また、学習部123は、確率モデルを生成した後、ラベル付けはされていないが、ROPチェーンが含まれていることが分かっている悪性文書ファイルがあるとき、これを再学習することによって確率モデルを洗練できる場合がある。
例えば、学習部123は、採用している確率モデルが隠れマルコフモデルの場合は、Baum-Welchアルゴリズムなどを用いてモデルを再学習してもよい。なお、本実施の形態のような確率モデルを用いた学習手法としては、隠れマルコフモデル、条件付き確率場などがあるが、もちろん、これらの手法に限るものではない。
なお、学習部123による32bit環境下での確率モデルの生成について説明したが、もちろん、学習部123は、64bit環境下においても、確率モデルを生成することが可能である。図9は、64bit環境に対応させたラベルの遷移の例を示す図である。64bit環境では、レジスタ幅が8バイトとなるため、ROPアドレス及び定数も8バイトとなる。
したがって、確率モデルもそれに合わせて変更し、潜在変数(ラベル)が増えるとともに、4バイトごとに遷移していたROPアドレス部分と定数部分が、8バイトごとの遷移となっている。具体的には、図9に示すように、潜在変数のうち、ROPアドレスラベル及びROP定数ラベルは8まで増える。なお、64bit環境の場合も、アドレスラベル(ROPアドレス1〜8ラベル)や定数ラベル(ROP定数1〜8ラベル)は、8バイト分のleft-to-rightの一方通行の形になり(例えば、矢印R3,R4参照)、文書ラベルからは、文書ラベルまたはアドレスラベルにのみ遷移する(図9の矢印Y1’,Y2’参照)。
もちろん、上述した32bit、64bit環境の例に限るものではなく、他の環境においても、該環境に応じて、ROPアドレス及び定数の潜在変数(ラベル)の数と遷移の連続数とを変化させることで、学習部123は、確率モデルの生成が可能である。
また、学習部123は、ラベル付き良性文書ファイル200に対するモデルパラメータについても、悪性文書ファイルの場合と同様の手順で生成することが可能となる。結果として生成されるモデルの具体的な違いとしては、良性文書ファイルは文書ラベルのみしか持たないため、ラベル付き良性文書ファイル200に対するモデルパラメータは、その他のラベルへの遷移のない、単純なモデルとなる。
以上に説明した処理を行うことによって、学習部123は、観測変数の出力確率、潜在変数間の遷移確率、潜在系列の初期状態確率をモデルパラメータとして持つ確率モデルを生成する。
[事前実行部の処理]
次に、事前実行部11の処理を説明する。事前実行部11は、ROPチェーンに用いられるライブラリファイルのコード領域をエミュレーション実行していき、ファイル中のROPガジェットの先頭アドレスと、そのROPガジェットが実行された際にスタックポインタがどれだけ動くかを示す移動値(オフセット値)と、を対応付けたオフセット辞書を生成する。
なお、ROPチェーンに用いられる学習データライブラリファイル400は、前述したように、ROPによる攻撃の対象となるアプリケーションがメモリ上に読み込むライブラリであって、Non-ASLRであるものである。一般に、こうしたライブラリファイルは、限定的であり、網羅が可能である。そのため、攻撃コード検知装置10は、これらの条件を満たした学習データライブラリファイル400を、事前実行による解析の対象とし、事前実行部11に入力する。
具体的には、まず、事前実行部11は、学習データライブラリファイル400を入力として受け取り、その学習データライブラリファイル400のコード領域を特定する。そして、事前実行部11は、コード領域の先頭を開始位置として、エミュレーション実行を実施する。事前実行部11は、エミュレーション実行の際には、ライブラリのコード領域以外の値は、事前に決めた初期値をセットしておいてもよい。また、事前実行部11は、初期値を決めずにシンボルとして扱い、エミュレーション実行(シンボリック実行と呼ばれる)を行ってもよい(例えば、V. Chipounov, V. Kuznetsov and G. Candea, “S2E: A Platform for In-Vivo Multi-Path Analysis of Software Systems”,In Proceedings of the sixteenth International Conference on Architectural Support for Programming Languages and Operating Systems, pages 265-278, ACM, 2011. 参照)。
このシンボリック実行とは、プログラム実行時に変数をシンボルとして扱い、プログラムの実行結果を評価する手法である。実行時には、シンボルを含んだ分岐条件を評価せず、分岐の両方を辿るため、プログラムの実行パスが網羅的に実行される。
例えば、事前実行部11は、シンボリック実行を利用し、ROPガジェット及びスタックポインタのオフセットを、ROPガジェット中に分岐を含むものも含めて網羅的に収集する。
シンボリック実行において、まず、事前実行部11は、命令ポインタを除く各レジスタにシンボルを格納する。そして、シンボリック実行を実施する。そして、事前実行部11は、コード領域の先頭を開始位置としたシンボリック実行が終了した際に、ret命令まで到達した場合には、スタックポインタの初期値からのオフセットを記憶する。分岐などにより、オフセットの候補が複数存在する場合には、事前実行部11は、その全てのパスによって生じるオフセットを記憶する。このとき、事前実行部11は、ret命令まで到達できなかった場合には、ROPアドレスとして適切でないと考えられるため、オフセット辞書には追加しない。
事前実行部11は、以上のシンボリック実行を、開始位置をコード領域の先頭から1バイトずつ移動しながら実行していき、有効なROPガジェットのアドレスと、そのガジェットが実行された際のスタックポインタのオフセットとを組み合わせて記憶したオフセット辞書を生成する。そして、事前実行部11は、生成したオフセット辞書を、オフセット辞書DB20に記憶させる。
[ROP Chain Integrityの導入]
ここで、攻撃コード検知装置10では、事前実行部11で生成したオフセット辞書の利用方法を示すために、ROP Chain Integrity(RCI)を導入する。
このRCIは、ROPガジェットが正しく繋がることを保証するインテグリティであると定義する。また、ROPチェーンが正しく繋がらず、RCIが崩れている状態を、Chain Violation(CV)を起こしていると定義する。RCIの前提として、ROPチェーンが攻撃者の意図した通りに実行されるためには、チェーンを構成しているROPガジェットが正しく繋がる必要がある。そのためには、ROPチェーン中のROPガジェットアドレスが指すガジェットが実行され、スタックポインタが進んだ先に、次に実行されるROPガジェットアドレスが存在する必要がある。
このため、RCIの検証は、スタックポインタの進みがあれば実施でき、学習部123は、前述したオフセット辞書を用いることで、静的に検証を実行できる。この検証は、静的かつ決定論的に実施されるため、高速である。したがって、攻撃コード検知装置10は、事前実行部11が、事前に学習データライブラリファイル400を解析してオフセット辞書を作成しておくことにより、オフセット辞書の作成自体には時間を要するものの、検査時には少ないオーバーヘッドで高速に、RCIの検証を踏まえた検査をすることができる。
例えば、検知部124は、ROPガジェットアドレスを発見した際に、そのアドレスをオフセット辞書で検索し、対応したスタックポインタのオフセットを得る。そして、検知部124は、アドレスからスタックポインタをオフセット分進めた先に、ROPガジェットアドレスが存在するかを確認する。これを繰り返すことで、RCIを検証することができる。
そして、RCIを検証することの効果として、過検知の削減が挙げられる。過検知とは、本来良性なものを、悪性であると判断してしまうことである。従来の静的な検査では、ROPチェーンではないがROPチェーンらしさの高いバイト列が偶然に出現した場合に、それをROPチェーンとして検知してしまう場合がある。これは、過検知の要因となる。ただし、前述の偶然出現したROPチェーンらしさの高いバイト列は、ROPガジェット同士が正しく繋がるように設計されたものではないため、CVを起こす。したがって、検知部124は、CVを起こすものについては、RCIが崩れている状態であるため、偶然出現したROPチェーンらしさの高いバイト列に対しても、正しく、ROPチェーンではないことを検知する。この結果、攻撃コード検知装置10では、RCIを検証することで、これらの過検知を削減することができる。
このように、実施の形態に係る攻撃コード検知装置10は、検知部124において、RCIを踏まえた尤度計算を行うことにより、過検知を低減した、より高精度な検知を実現する。
[検知部の検知処理]
そこで、検知部124による検知処理について詳細に説明する。検知部124は、学習部123が生成した確率モデルと、事前実行部11が生成したオフセット辞書と、を用いて、検査対象未知文書ファイル300が、ROPチェーンを含んだ悪性文書ファイルらしさが高いか、或いは、良性文書ファイルらしさが高いか、を検知する。検知部124は、検知の結果、悪性文書ファイルらしさが高い場合に、検査対象未知文書ファイル300が、ROPチェーンを含んだ悪性文書ファイルであるとして検知する。
まず、検知部124は、ファイル形式判定部121が判定したファイル形式に対応する確率モデルのモデルパラメータを確率モデルDB30から取得する。このとき、ROPチェーンを含んだ悪性文書ファイルの確率モデルのモデルパラメータをθMalとし、良性文書ファイルの確率モデルのモデルパラメータをθBenとする。
また、検知部124は、検査するライブライファイルに対応したオフセット辞書をオフセット辞書DB20から取得する。ここで、この検査するライブラリファイルとは、検査対象未知文書ファイル300に、このライブラリファイルを用いたROPチェーンが含まれていないかを検査するものである。検知部124は、ROPチェーンに用いられたライブラリファイルが分かっている場合は、そのライブラリファイルについてのみ検査してもよい。また、検知部124は、ROPチェーンに用いられたライブラリファイルが不明な場合は、考えられるライブラリファイル全てを順に検査していってもよい。検査するライブラリファイルは、前述のように、アプリケーションがメモリ上にロードするNon-ASLRなライブラリファイルに限られるため、すべてを検査しても大きな計算時間はかからない。
そして、検知部124は、取得した確率モデルとオフセット辞書とを用いて、検査対象未知文書ファイル300におけるROPチェーンの有無を検査する検知処理を行う。まず、検知部124は、検査対象未知文書ファイル300のバイト列を、観測系列Oとして抽出する。そして、検知部124は、このOのモデルθBen及びθMalに対する尤度、LBen及びLMalをそれぞれ算出する。このうち、良性文書の尤度は、以下の(1)式のように示すことができる。
Figure 0006527295
具体的には、OのモデルθBenに対する尤度LBenは、以下の(2)式を用いて算出される。
Figure 0006527295
ここで、iは、ROPアドレスと解釈できるバイト列のROP(アドレス1)にあたるバイト値である。また、jは、iを含むバイト列をROPアドレスであると仮定したとき、次にリンクする先でのROP(アドレス1)にあたるバイト値である。jは、iを含むバイト列をROPアドレスであるとみてオフセット辞書で検索し、対応したオフセット値分の先のバイト値を確認することで得られる。また、Jは、観測系列O中に含まれるすべてのi,jの組み合わせの集合である。s,sはそれぞれ、i,jに対応するラベルであり、A1はROP(アドレス1)のラベルである。
この演算は、OをθBenが出力したと考えた場合の尤もらしさを示すもので、フォワードアルゴリズムによって高速に計算できる。また、悪性文書の尤度は、以下の(3)式のように示すことができる。
Figure 0006527295
具体的には、OのモデルθMalに対する尤度LMalは、以下の(4)式を用いて算出される。
Figure 0006527295
ここで、Fi,jは、iとjがCVを起こさないという事象に対応する確率変数である。(4)式は、RCIを考慮した尤度の計算であり、OをθMalが出力した確率に、OがCVを全く起こさない確率を乗じたものである。なお、P(O|θMal)は、フォワードアルゴリズムで高速に計算できる。また、P(s=A1|O,θMal)及びP(s≠A1|O,θMal)は、フォワードバックワードアルゴリズムで高速に計算できる。したがって、LMal全体が計算可能である。
なお、この計算式は、以下のように導かれている。まず、前述の、OがθMalを出力し、CVを全く起こさない確率は、以下の(5)式を用いて算出できる。
Figure 0006527295
ただし、これを直接計算するのは難しいため、「あるi,jの組がCVを起こさない確率と、他のi,jの組がCVを起こさない確率と、は、独立である」と仮定する。それにより、(5)式は以下の(6)式のように近似できる。
Figure 0006527295
したがって、尤度比Zは、以下の(7)式で計算することができる。
Figure 0006527295
検知部124は、以下の(8)式に示すように、悪性か良性かを判定する。すなわち、検知部124は、tを閾値として、Zがtよりも小さい場合には、検査対象未知文書ファイル300がROPチェーンを含まない、すなわち、良性(Benign)であると判断する。これに対し、検知部124は、Zがt以上である場合には、検査対象未知文書ファイル300がROPチェーンを含む、すなわち、悪性(Malicious)であると判断する。
Figure 0006527295
なお、tは、事前に学習データに基づいて決定される。この閾値tの決定方法として、例えば、tを変動させながら学習データに対して検知を実施し、その検知精度を基に決定する方法がある。具体的に、tの決定方法として、学習データに対してtを変化させながら検査を実施し、その見逃し率と過検知率とのROC曲線を引いて、F値を用いるなどし、最も見逃し率と過検知率とのバランスが良いtを選択する方法が考えられる。もちろん、tの決定方法は、これに限るものではない。
そして、検知部124は、良性であると判断した場合、すなわち、検査対象未知文書ファイル300が、ROPチェーンによる攻撃を行わないと判定した場合には、制御部12は、この検査対象未知文書ファイル300について、ビューアアプリケーション等のアプリケーションを実行可能とする。一方、検知部124は、悪性であると判断した場合、すなわち、検査対象未知文書ファイル300が、ROPチェーンによる攻撃を行うと判定した場合には、制御部12は、この検査対象未知文書ファイル300について、ビューアアプリケーション等のアプリケーションを実行不可とする。
[確率モデルを生成するまでの処理手順]
次に、攻撃コード検知装置10が確率モデルを生成するまでの処理手順について説明する。図10は、図1に示す攻撃コード検知装置10が確率モデルを生成するまでの処理手順を示すフローチャートである。
図10に示すように、制御部12は、まず、確率モデルDB30を確認し、各ファイル形式に対応する確率モデルのモデルパラメータが格納されているか否かを判断する(ステップS11)。制御部12は、各ファイル形式に対応する確率モデルのモデルパラメータが格納されていると判断した場合には(ステップS11:Yes)、確率モデルのモデルパラメータの生成を終了する。
これに対し、制御部12は、各ファイル形式に対応する確率モデルのモデルパラメータが格納されていないと判断した場合には(ステップS11:No)、ラベル付き悪性文書ファイル100、ラベル付き良性文書ファイル200を入力データとして(ステップS12)、学習を開始する。ここで、ラベル付き文書ファイルを、ラベル付き悪性文書ファイル100とラベル付き良性文書ファイル200の総称とする。
この入力されたラベル付き文書ファイルに対し、まず、ファイル形式判定部121が、ヘッダやファイル構造の特徴から、ファイルの形式を判定する(ステップS13)。ここで、ファイルの形式としては、例えば、DOC、XLS、PPT、PDF等を想定している。
続いて、デコード部122は、入力されたラベル付き文書ファイルに、エンコードされた領域が存在するか否かを判断する(ステップS14)。デコード部122は、入力されたラベル付き文書ファイルにエンコードされた領域が存在すると判断した場合には(ステップS14:Yes)、エンコード方法を検出して、対応するデコードを実施する(ステップS15)。このエンコード方法の検出としては、既知のエンコード方法のパターンマッチングを用いる。
そして、入力されたラベル付き文書ファイルにエンコードされた領域が存在しないとデコード部122が判断した場合(ステップS14:No)、または、ステップS15終了後、学習部123は、この既知のラベル付き文書ファイルとそのファイル形式とから、ファイル形式に対応する悪性及び良性の文書ファイルの確率モデルを生成する確率モデル生成処理を実行する(ステップS16)。
学習部123は、生成した確率モデルを、モデルパラメータの形で、確率モデルDB30に格納し(ステップS17)、処理を終了する。なお、本実施の形態では、文書ファイルを対象としたROPチェーンの検知、悪性判定について記載しているが、これに限らず、任意のデータ系列に対しても、同様の手法を適用することができる。
[確率モデル生成処理の処理手順]
次に、図10に示す確率モデル生成処理の処理手順について説明する。図11は、図10に示す確率モデル生成処理(ステップS16)の処理手順を示すフローチャートである。
図11に示すように、学習部123は、ラベル付き文書ファイルが入力されると(ステップS21)、このラベル付き文書ファイルから、バイト列及びラベル列を抽出し、それを用いて学習を行う。
まず、学習部123は、演算対象であるeを、最初に演算するものとして設定されている初期ラベルとする(ステップS22)。次に、学習部123は、eの初期状態確率P(s=e)を計算する(ステップS23)。学習部123は、全てのラベルについて初期状態確率P(s=e)を計算したか否かを判断する(ステップS24)。学習部123は、全てのラベルについて初期状態確率P(s=e)を計算していないと判断した場合には(ステップS24:No)、計算対象のeを次のラベルとし(ステップS25)、ステップS23に戻り、このラベルについて初期状態確率P(s=e)を計算する。
一方、学習部123は、全てのラベルについて初期状態確率P(s=e)を計算したと判断した場合には(ステップS24:Yes)、この計算による初期状態確率の表T1(図6参照)を、この潜在系列の初期状態確率を示すモデルパラメータとして生成する。
次に、学習部123は、全ての潜在変数(ラベル)に対して、そのラベルが観測変数(バイト)を出力する確率を計算するために、まず、演算対象であるeを、最初に演算するものとして設定されている初期ラベルとする(ステップS26)。続いて、このラベルeにおける観測変数(バイト)の出力確率P(o=0x00|s=e)〜P(o=0xFF|s=e)を計算する(ステップS27)。上述したように、学習部123は、出力確率Pが、例えば、ラベルeがバイト値「0x00」を出力する確率である場合には、「ラベルeの付いている0x00の値を持つバイト数」を「ラベルの付いている全バイト数」で除することによって計算する。学習部123は、この計算を、ラベルeについて、バイト値「0x00」からバイト値「0xFF」ごとに、それぞれ計算して、ラベルeが、各バイト値「0x00」からバイト値「0xFF」をそれぞれ出力する確率を求める。
学習部123は、全てのラベルについて観測変数(バイト)の出力確率P(o=0x00|s=e)〜P(o=0xFF|s=e)を計算したか否かを判断する(ステップS28)。学習部123は、全てのラベルについて観測変数(バイト)の出力確率P(o=0x00|s=e)〜P(o=0xFF|s=e)を計算していないと判断した場合には(ステップS28:No)、計算対象のeを次のラベルとし(ステップS29)、ステップS27に戻り、このラベルについて観測変数(バイト)の出力確率P(o=0x00|s=e)〜P(o=0xFF|s=e)を計算する。
一方、学習部123は、全てのラベルについて観測変数(バイト)の出力確率P(o=0x00|s=e)〜P(o=0xFF|s=e)を計算したと判断した場合には(ステップS28:Yes)、この計算によって、潜在変数(ラベル)ごとに、観測系列(バイト列)のそれぞれの観測変数(バイト)の出力確率を対応付けた表T2(図7参照)を、観測変数の出力確率を示すモデルパラメータとして生成することができる。
続いて、学習部123は、全てのあり得る潜在変数(ラベル)の組(e,e)について、潜在変数間(e→e)の遷移確率P(st+1=e|s=e)を計算する(ステップS30)。なお、eは、遷移元のラベルを示し、eは、遷移先のラベルを示す。
学習部123は、このステップS30における計算を、上述したように、潜在変数間の遷移回数を集計することによって実行する。例えば、学習部123は、ROP(アドレス4)ラベルからROP(ジャンク)ラベルへの遷移確率は、「ROP(アドレス4)ラベルからROP(ジャンク)ラベルへの遷移回数」を「ROP(アドレス4)ラベルからの全ての遷移回数」で除することによって計算する。この計算を、全てのあり得る潜在変数の組について計算する。学習部123は、この計算によって、潜在変数の組み合わせ(遷移元のラベルと遷移先のラベルとの組み合わせ)ごとに、遷移する確率を対応付けた表T3(図8参照)を、潜在変数間の遷移確率を示すモデルパラメータとして生成することができる。
そして、学習部123は、ROPガジェットのアドレス部分の構成に用いられるDLL等のファイルが判明しているか否かを判断する(ステップS31)。学習部123は、ROPガジェットのアドレス部分の構成に用いられるファイルが判明している場合には(ステップS31:Yes)、そのファイル中のROPガジェット候補のアドレスを基に再学習する(ステップS32)。
続いて、学習部123は、ROPガジェットのアドレス部分の構成に用いられるファイルが判明していない場合(ステップS31:No)、または、ステップS32処理後、遷移確率、出力確率の中に、値が「0」となるものが現れたゼロ頻度問題が発生しているか否かを判断する(ステップS33)。学習部123は、ゼロ頻度問題が発生していると判断した場合には(ステップS33:Yes)、平滑化処理を行う(ステップS34)。
そして、学習部123は、ゼロ頻度問題が発生していないと判断した場合(ステップS33:No)、または、ステップS34の平滑化処理終了後、生成した確率モデルのモデルパラメータを確率モデルDB30に格納して(ステップS35)、確率モデル生成処理を終了する。
以上に説明した処理を行うことによって、学習部123は、潜在変数であるラベルごとに、観測変数である各バイトの出力確率を対応付けた観測変数(バイト)の出力確率と、潜在変数ごとに、遷移可能である潜在変数への遷移確率が対応付けられた潜在変数間の遷移確率と、潜在系列の初期状態確率と、をモデルパラメータとして有する確率モデルを生成する。後述する検知部124は、この確率モデルを用いて、検査対象未知文書ファイル300のバイト列に対し、尤度を算出し、検査対象未知文書ファイル300におけるROPチェーンの有無を検知している。
[オフセット辞書を生成するまでの処理手順]
次に、図12を用いて、事前実行部11がオフセット辞書を生成する処理の流れについて説明する。図12は、図1に示す攻撃コード検知装置10がオフセット辞書を生成するまでの処理手順を示すフローチャートである。
図12に示すように、事前実行部11は、まず、オフセット辞書DB20を確認し、ライブラリファイルに対応するオフセット辞書が格納されているか否かを判断する(ステップS41)。事前実行部11は、各ライブラリファイルに対応するオフセット辞書が格納されていると判断した場合には(ステップS41:Yes)、オフセット辞書の生成を終了する。
これに対し、事前実行部11は、各ライブラリファイルに対応するオフセット辞書が格納されていないと判断した場合には(ステップS41:No)、ライブラリファイルを入力データとして受付ける(ステップS42)。そして、事前実行部11は、ライブラリファイルに対応するオフセット辞書を生成するオフセット辞書生成処理を実行する(ステップS43)。
事前実行部11は、生成したオフセット辞書を、オフセット辞書DB20に格納して(ステップS44)、処理を終了する。なお、ライブラリファイルとしては、DLLやOCXなどのファイル形式を想定しているが、これに限らず、任意のライブラリファイルに対して同様の手法を適用することができる。
[オフセット辞書生成処理の処理手順]
次に、図12に示すオフセット辞書生成処理の流れについて説明する。図13は、図12に示すオフセット辞書生成処理(ステップS43)の処理手順を示すフローチャートである。
図13に示すように、事前実行部11は、まず、入力されたライブラリファイルのコード領域を特定する(ステップS51)。そして、事前実行部11は、変数iを0で初期化する、すなわち、i=0とする(ステップS52)。次に、事前実行部11は、シンボリック実行のための準備として、命令ポインタ以外のレジスタ、スタックにシンボルを格納する(ステップS53)。そして、事前実行部11は、コード領域の先頭からiバイト目の位置のアドレスから、シンボリック実行を実施する(ステップS54)。
ここで、事前実行部11は、実行結果としてret命令まで到達できたか否かを判断する(ステップS55)。事前実行部11は、実行結果としてret命令まで到達できなかったと判断した場合(ステップS55:No)、iに1を加算して(ステップS56)、シンボリック実行の準備に戻って処理を繰り返す。
一方、事前実行部11は、ret命令まで到達できたと判断した場合(ステップS55:Yes)、実行開始アドレスと、スタックポインタのオフセットと、をオフセット辞書に追加する(ステップS57)。ここで、実行開始アドレスとは、コード領域の先頭からiバイト目の位置のアドレスのことであり、ROPアドレスとみなせる。
そして、事前実行部11は、iがコード領域の終端まで到達したか否かを判断する(ステップS58)。事前実行部11は、iがコード領域の終端まで到達していないと判断した場合(ステップS58:No)、iに1を加算して(ステップS56)、シンボリック実行の準備に戻って処理を繰り返す。一方、事前実行部11は、iがコード領域の終端まで到達していたと判断した場合(ステップS58:Yes)、オフセット辞書を出力して(ステップS59)、オフセット辞書生成処理を終了する。
[検査対象未知文書ファイルの判定までの処理手順]
次に、攻撃コード検知装置10による検査対象未知文書ファイル300に対する判定の流れを説明する。図14は、図1に示す攻撃コード検知装置10が検査対象未知文書ファイル300を、ROPチェーンを持つ悪性文書ファイルか否かを判定するまでの処理手順を示すフローチャートである。
図14に示すように、攻撃コード検知装置10は、検査対象未知文書ファイル300を入力データとして取得する(ステップS61)。そして、攻撃コード検知装置10では、この入力された検査対象未知文書ファイル300に対し、図10に示す処理手順と同様に、ファイル形式判定部121がファイルの形式を判定し(ステップS62)、デコード部122が、検査対象未知文書ファイル300に、エンコードされた領域が存在するか否かを判断する(ステップS63)。
そして、デコード部122は、入力された検査対象未知文書ファイル300にエンコードされた領域が存在すると判断した場合には(ステップS63:Yes)、エンコード方法を検出して、対応するデコードを実施する(ステップS64)。
そして、入力された検査対象未知文書ファイル300にエンコードされた領域が存在しないとデコード部122が判断した場合(ステップS63:No)、または、ステップS64終了後、検知部124は、確率モデルDB30から、検査対象未知文書ファイル300のファイル形式に対応した良性文書ファイル及び悪性文書ファイルの確率モデルのモデルパラメータを取り出す(ステップS65)。また、検知部124は、オフセット辞書DB20から、検査するライブラリファイルに対応したオフセット辞書を取り出す(ステップS66)。
ここで、この検査するライブラリファイルとは、検査対象未知文書ファイル300に、このライブラリファイルを用いたROPチェーンが含まれていないかを検査するものである。ROPチェーンに用いられたライブラリファイルが分かっている場合は、検知部124は、そのライブラリファイルについてのみ検査してもよい。また、ROPチェーンに用いられたライブラリファイルが不明な場合は、検知部124は、考えられるライブラリファイルすべてを順に検査していってもよい。検査するライブラリファイルは、前記の通り、アプリケーションがメモリ上にロードするNon-ASLRなライブラリファイルに限られるため、すべてを検査しても大きな計算時間はかからない。
そして、検知部124は、この確率モデルとオフセット辞書を用いて、検査対象未知文書ファイル300におけるROPチェーンの有無を検査する検知処理を行う(ステップS67)。この検知部124におけるROPチェーンの検査の結果、検査対象未知文書ファイル300が、ROPチェーンによる攻撃を行わないと判定した場合には、制御部12は、この検査対象未知文書ファイル300について、ビューアアプリケーション等のアプリケーションを実行可能とする。
[検知処理の処理手順]
次に、図14に示す検知処理の流れについて説明する。図15は、図14に示す検知処理(ステップS67)の処理手順を示すフローチャートである。
図15に示すように、検知部124は、まず、入力された検査対象未知文書ファイル300のバイト列を、観測系列Oとして抽出する(ステップS71)。そして、検知部124は、良性文書ファイルの確率モデルをθBenとして、(2)式を用いて、確率P(O|θBen)、すなわち、LBenを算出する(ステップS72)。また、検知部124は、ROPチェーンを含んだ悪性文書ファイルの確率モデルのモデルパラメータをθMalとし、確率P(O|θMal)を算出する(ステップS73)。これらの確率は、前述の通り、フォワードアルゴリズムによって計算できる。
続いて、検知部124は、OからROPアドレスと解釈できる全てのバイト列を抽出する(ステップS74)。そして、検知部124は、抽出したバイト列をそれぞれオフセット辞書で検索し、それぞれのバイト列がROPアドレスであると仮定したとき、オフセット辞書を用いて抽出したROPアドレスのリンク先となるROPアドレスを計算する(ステップS75)。検知部124は、リンク元のROP(アドレス1)の位置と、リンク先のROP(アドレス1)の位置をそれぞれi,jとし、その組み合わせの集合をJ∋(i,j)とする(ステップS76)。
続いて、検知部124は、先ほど算出したP(O|θMal),θMal,J∋(i,j),Oから、(4)〜(6)式を用いて、尤度LMalを算出する(ステップS77)。そして、検知部124は、算出したLBen及びLMalから、(7)式を用いて、尤度比Zを算出する(ステップS78)。続いて、検知部124は、Zが、予め決められた閾値tより大きいか否かを判断する(ステップS79)。
検知部124は、Zが、予め決められた閾値tより大きいと判断した場合(ステップS79:Yes)、検査対象未知文書ファイル300はROPチェーンを含む悪性文書ファイルであると検知する(ステップS80)。
これに対し、検知部124は、Zが、予め決められた閾値t以下であると判断した場合(ステップS79:No)、検査対象未知文書ファイル300はROPチェーンを含まないと検知する(ステップS81)。そして、検知部124は、この検査対象未知文書ファイル300に対する検知結果を出力して(ステップS82)、検知処理を終了する。
[実施の形態の効果]
以上のように、本実施の形態に係る攻撃コード検知装置10は、事前に、ROPチェーンを含む悪性文書ファイルの特徴を学習した確率モデルと、良性文書ファイルの特徴を学習した確率モデルと、をそれぞれ生成する。また、攻撃コード検知装置10は、ROPガジェットに用いられるライブラリファイルを事前に解析することにより、ROPアドレスとスタックポインタのオフセットとを対応付けて記憶させたオフセット辞書を生成する。そして、攻撃コード検知装置10は、生成した確率モデルとオフセット辞書とに基づき、検査対象未知文書ファイル300に対し、悪性文書ファイルらしさを示す尤度と良性文書ファイルらしさを示す尤度とを算出する。この尤度計算の際には、攻撃コード検知装置10は、ROPチェーンが実行された際にROPガジェット同士が正しく繋がるか否かを考慮する。そして、攻撃コード検知装置10は、尤度比検定により、ROPチェーンを含んだ悪性文書ファイルを検知する。
これによって、実施の形態に係る攻撃コード検知装置10は、この未知の文書をビューアアプリケーションで開くことなく、静的に検査できるため、文書ファイルの悪性判定を高速に実現することができる。
また、攻撃コード検知装置10では、実際の環境下に合わせて、アドレスや定数を分割し、分割したバイト単位で、バイト列(観測系列)の出力確率をモデルパラメータとして求めるとともに、実際の環境下に合わせて、潜在変数(ラベル)の数や潜在変数の遷移状態を考慮して、遷移系列の遷移確率、及び、潜在系列の初期状態確率をモデルパラメータとして生成している。このため、本実施の形態によれば、実際の環境下に対応させながら、ROPチェーンの遷移状態を含めたモデルパラメータを用いて検知を行うことができるため、高精度なROPチェーンの検知を実現できる。
さらに、本実施の形態では、オフセット辞書に基づいてROPガジェットが正しく繋がる、正当なROPチェーンか否かの観点を確率計算に取り入れている。そのため、攻撃コード検知装置10は、良性文書ファイル中に偶発的に発生したROPチェーンらしさの高いバイト列に対しても、過検知を起こさずに検査することができるため、過検知を低減した高精度なROPチェーンの検知を実現できる。
このように、本実施の形態に係る攻撃コード検知装置10によれば、アプリケーションプログラムの実行を伴わない静的な手法によってROPチェーンを含んだ悪性文書ファイルの特徴を捉えることができるため、高速で高精度な検知を実現できる。さらに、攻撃コード検知装置10は、事前のライブラリファイルの解析に基づいてROPチェーンの正当性を検証することによって、高速性を損なうことなく、少ないオーバーヘッドで過検知を低減し、高精度なROPチェーン検知を実現できる。
上述したように、本実施の形態は、ROPチェーンを含んだ悪性文書ファイルの検知に有用であり、多数の文書ファイルに対して、高速性を損なうことなく検査を実施することに適している。このため、本実施の形態に係る攻撃コード検知装置10、攻撃コード検知方法及び攻撃コード検知プログラムを、ネットワーク監視装置とともにネットワークに導入することによって、ネットワークを通過する多数の文書ファイルがROPチェーンを含む悪性なものであるかどうかの検査を行うことが可能である。
なお、本実施の形態では、検知部124は、RCIの検証を踏まえ、確率モデルを用いて、検査対象未知文書ファイル300が悪性文書ファイルか否かを検知した例を説明したが、これに限らない。例えば、検知部124は、非特許文献2に記載の決定論的手法を用いる場合にも、RCIの検証を適用して検知を行うこともできる。具体的には、検知部124は、攻撃者が用いる既知のアドレスを特徴文字列として蓄積しておく。そして、検知部124は、検査対象未知文書ファイル300の規定の長さのデータ系列の中に、蓄積された特徴文字列が複数含まれ、さらに、これらの特徴文字列についてRCIが崩れていない場合には、検査対象未知文書ファイル300が悪性文書ファイルであることを検知する。
また、本実施の形態では、文書ファイルに埋め込まれたROPチェーンを前提としているが、文書ファイルでないデータであっても、そのバイト列の分布に何らかの傾向があるものであれば、同様に検知可能である。したがって、本実施の形態では、例えば、ROPチェーンを含んだ通信データの検知にも利用できる。具体的には、本実施の形態は、画像ファイル、動画ファイル、実行ファイル等、いずれのファイルにも適用可能である。
[他の実施の形態]
[学習の方法]
本実施形態では系列の学習に確率モデルを用いたが、必ずしも確率モデルであることを要しない。前提として、ROPチェーンの静的検知の問題は、系列データを学習する構造学習という問題であると捉えられ、さらに、本実施の形態では、ROPチェーンの静的検知にRCIによる制約を付加しているため、制約付き構造学習という問題として捉えることができる。こうした制約付き構造学習は、本実施の形態に記載の確率モデルを用いた高速な近似計算手法のほか、構造化パーセプトロン(詳細は、Ming-Wei Chang, Lev Ratinov and Dan Roth, “Structured learning with constrained conditional models”,Machine learning 88.3 (2012): 399-431.参照)のような確率モデル以外の学習モデルでも解けることが知られている。そのため、必ずしも確率モデルであることを要しない。
[システム構成等]
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び当該CPUにて解析実行されるプログラムにて実現され、或いは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、或いは、手動的におこなわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[プログラム]
図16は、プログラムが実行されることにより、攻撃コード検知装置10が実現されるコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011及び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、WAN等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例及び運用技術等は全て本発明の範疇に含まれる。
10 攻撃コード検知装置
11 事前実行部
12 制御部
13 出力部
14 記憶部
20 オフセット辞書データベース(DB)
30 確率モデルDB
100 ラベル付き悪性文書ファイル
121 ファイル形式判定部
122 デコード部
123 学習部
124 検知部
200 ラベル付き良性文書ファイル
300 検査対象未知文書ファイル
400 学習データライブラリファイル

Claims (6)

  1. ROP(Return Oriented Programming)チェーンに用いられる学習用のライブラリファイルを事前に解析し、前記ライブラリファイル内のコード片であるROPガジェットのアドレスと、該ROPガジェットが実行された際のスタックポインタの増加値と、の組を取得する事前実行部と、
    前記事前実行部の取得結果を用いて、検査対象の未知のデータ系列について、前記ROPガジェット同士が正しく繋がる有効な前記ROPチェーンであるかを検証することによって、前記検査対象の未知のデータ系列が悪性データ系列であるか否かを検知する検知部と、
    を有することを特徴とする攻撃コード検知装置。
  2. 前記ROPチェーンを含む既知の悪性データ系列と、既知の良性データ系列とを学習データとして、悪性データ系列のバイト列の特徴を学習したモデルと、良性データ系列のバイト列の特徴を学習したモデルと、を生成する学習部をさらに有し、
    前記検知部は、前記モデルを用いた確率計算に基づいて前記検査対象の未知のデータ系列が悪性データ系列であるか否かを検知することを特徴とする請求項1に記載の攻撃コード検知装置。
  3. 前記検知部は、前記ROPガジェット同士が正しく繋がる可能性を考慮して、悪性データ系列のモデルと、良性データ系列のモデルとの間での尤度比検定を行い、前記検査対象の未知のデータ系列が悪性データ系列であるか否かを検知することを特徴とする請求項2に記載の攻撃コード検知装置。
  4. 前記悪性データ系列及び前記良性データ系列は、文書ファイルであることを特徴とする請求項2または3に記載の攻撃コード検知装置。
  5. 攻撃コード検知装置が実行する攻撃コード検知方法であって、
    ROPチェーンに用いられる学習用のライブラリファイルを事前に解析し、前記ライブラリファイル内のコード片であるROPガジェットのアドレスと、該ROPガジェットが実行された際のスタックポインタの増加値と、の組を取得する事前実行工程と、
    前記事前実行工程における取得結果を用いて、検査対象の未知のデータ系列について、前記ROPガジェット同士が正しく繋がる有効な前記ROPチェーンであるかを検証することによって、前記検査対象の未知のデータ系列が悪性データ系列であるか否かを検知する検知工程と、
    を含んだことを特徴とする攻撃コード検知方法。
  6. ROPチェーンに用いられる学習用のライブラリファイルを事前に解析し、前記ライブラリファイル内のコード片であるROPガジェットのアドレスと、該ROPガジェットが実行された際のスタックポインタの増加値と、の組を取得する事前実行ステップと、
    前記事前実行ステップにおける取得結果を用いて、検査対象の未知のデータ系列について、前記ROPガジェット同士が正しく繋がる有効な前記ROPチェーンであるかを検証することによって、前記検査対象の未知のデータ系列が悪性データ系列であるか否かを検知する検知ステップと、
    をコンピュータに実行させるための攻撃コード検知プログラム。
JP2018543894A 2016-10-06 2017-10-02 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム Active JP6527295B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2016198409 2016-10-06
JP2016198409 2016-10-06
PCT/JP2017/035828 WO2018066516A1 (ja) 2016-10-06 2017-10-02 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム

Publications (2)

Publication Number Publication Date
JPWO2018066516A1 JPWO2018066516A1 (ja) 2019-02-21
JP6527295B2 true JP6527295B2 (ja) 2019-06-05

Family

ID=61830935

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018543894A Active JP6527295B2 (ja) 2016-10-06 2017-10-02 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム

Country Status (4)

Country Link
US (1) US11010471B2 (ja)
EP (1) EP3506140B1 (ja)
JP (1) JP6527295B2 (ja)
WO (1) WO2018066516A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI812329B (zh) * 2019-11-20 2023-08-11 美商奈米創尼克影像公司 用於判定網路攻擊及產生警告之製造系統及電腦實施方法
US12111922B2 (en) 2020-02-28 2024-10-08 Nanotronics Imaging, Inc. Method, systems and apparatus for intelligently emulating factory control systems and simulating response data
US12111923B2 (en) 2019-10-08 2024-10-08 Nanotronics Imaging, Inc. Dynamic monitoring and securing of factory processes, equipment and automated systems

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3506140B1 (en) * 2016-10-06 2021-04-14 Nippon Telegraph and Telephone Corporation Hacking code sensing device, hacking code sensing method, and hacking code sensing program
CN108234347B (zh) * 2017-12-29 2020-04-07 北京神州绿盟信息安全科技股份有限公司 一种提取特征串的方法、装置、网络设备及存储介质
US11042634B2 (en) * 2018-12-21 2021-06-22 Fujitsu Limited Determining information leakage of computer-readable programs
US12013935B2 (en) 2019-03-05 2024-06-18 C2A-Sec, Ltd. Return-oriented programming protection
US11610000B2 (en) * 2020-10-07 2023-03-21 Bank Of America Corporation System and method for identifying unpermitted data in source code
US20230342460A1 (en) * 2022-04-25 2023-10-26 Palo Alto Networks, Inc. Malware detection for documents with deep mutual learning

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9495541B2 (en) * 2011-09-15 2016-11-15 The Trustees Of Columbia University In The City Of New York Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload
US9256730B2 (en) * 2012-09-07 2016-02-09 Crowdstrike, Inc. Threat detection for return oriented programming
US9292688B2 (en) * 2012-09-26 2016-03-22 Northrop Grumman Systems Corporation System and method for automated machine-learning, zero-day malware detection
US10192052B1 (en) * 2013-09-30 2019-01-29 Fireeye, Inc. System, apparatus and method for classifying a file as malicious using static scanning
US9189627B1 (en) * 2013-11-21 2015-11-17 Fireeye, Inc. System, apparatus and method for conducting on-the-fly decryption of encrypted objects for malware detection
US9594912B1 (en) * 2014-06-06 2017-03-14 Fireeye, Inc. Return-oriented programming detection
US9904780B2 (en) * 2014-07-31 2018-02-27 Nec Corporation Transparent detection and extraction of return-oriented-programming attacks
EP3506140B1 (en) * 2016-10-06 2021-04-14 Nippon Telegraph and Telephone Corporation Hacking code sensing device, hacking code sensing method, and hacking code sensing program
US10965675B2 (en) * 2018-03-14 2021-03-30 Bank Of America Corporation Preventing unauthorized access to secure information systems using advanced pre-authentication techniques

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12111923B2 (en) 2019-10-08 2024-10-08 Nanotronics Imaging, Inc. Dynamic monitoring and securing of factory processes, equipment and automated systems
TWI812329B (zh) * 2019-11-20 2023-08-11 美商奈米創尼克影像公司 用於判定網路攻擊及產生警告之製造系統及電腦實施方法
US12111922B2 (en) 2020-02-28 2024-10-08 Nanotronics Imaging, Inc. Method, systems and apparatus for intelligently emulating factory control systems and simulating response data

Also Published As

Publication number Publication date
EP3506140A1 (en) 2019-07-03
WO2018066516A1 (ja) 2018-04-12
JPWO2018066516A1 (ja) 2019-02-21
EP3506140B1 (en) 2021-04-14
US20190384913A1 (en) 2019-12-19
EP3506140A4 (en) 2020-03-04
US11010471B2 (en) 2021-05-18

Similar Documents

Publication Publication Date Title
JP6527295B2 (ja) 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム
JP6592177B2 (ja) 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム
US9946880B2 (en) Software vulnerability analysis method and device
Yakura et al. Neural malware analysis with attention mechanism
Kapravelos et al. Revolver: An automated approach to the detection of evasive web-based malware
EP3330879B1 (en) Vulnerability discovering device, vulnerability discovering method, and vulnerability discovering program
Sekar An Efficient Black-box Technique for Defeating Web Application Attacks.
JP7115552B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
KR102151318B1 (ko) 이종 정보 네트워크 기반 악성 코드 탐지 방법 및 장치
Gülmez et al. Graph-based malware detection using opcode sequences
EP3087527B1 (en) System and method of detecting malicious multimedia files
US11283836B2 (en) Automatic decoy derivation through patch transformation
Sayadi et al. Towards ai-enabled hardware security: Challenges and opportunities
US20240045956A1 (en) Malicious source code detection
Song et al. HGIVul: Detecting inter-procedural vulnerabilities based on hypergraph convolution
WO2023067668A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
CN104008336B (zh) 一种ShellCode检测方法和装置
WO2023067663A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
WO2023067667A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
JP5687593B2 (ja) 解析装置、解析方法および解析プログラム
Marastoni Program Similarity Analysis for Malware Classification and its Pitfalls
Kozak et al. Updating Windows Malware Detectors: Balancing Robustness and Regression against Adversarial EXEmples
Pathania Detection of Malicious Code in PDF Files using Machine Learning Algorithms.
CN117077138A (zh) 一种基于浏览器的异常检测方法、系统、介质及设备
CN116578979A (zh) 一种基于代码特征的跨平台二进制代码匹配方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181004

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190417

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190509

R150 Certificate of patent or registration of utility model

Ref document number: 6527295

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150