(57)【特許請求の範囲】
【請求項１】
マクロ付き文書ファイル内のマクロからマクロの特徴量を取得するマクロ分析部と、
前記文書ファイル内のテキストからテキストの特徴量を取得するテキスト分析部と、
前記マクロの特徴量と前記テキストの特徴量とを用いてクラスタリングを実施するクラスタ分析部と、
前記クラスタリングの結果に基づいて、解析対象の文書ファイルを選択する選択部と、
を有することを特徴とする選択装置。
【請求項２】
前記マクロ分析部は、前記マクロの実行により取得されたマクロのプロファイル情報である実行トレースの解析により前記マクロの特徴量を取得することを特徴とする請求項１に記載の選択装置。
【請求項３】
前記マクロ分析部は、前記マクロの実行にエミュレータを用いることを特徴とする請求項１または２に記載の選択装置。
【請求項４】
前記テキスト分析部は、前記文書ファイルに含まれる語に対する自然言語処理に基づいて前記テキストの特徴量を取得することを特徴とする請求項１〜３のいずれか一つに記載の選択装置。
【請求項５】
前記クラスタ分析部は、前記マクロの特徴量と前記テキストの特徴量とに基づいたマルチモーダルクラスタリングを実施することを特徴とする請求項１〜４のいずれか一つに記載の選択装置。
【請求項６】
前記マクロ分析部は、実行トレースとしてAPI（Application  Programming  Interface）呼び出しおよびオブジェクトメソッド呼び出しを取得し、
前記テキスト分析部は、前記文書ファイルに含まれる語の種類と前記文書ファイルに含まれる語の並びとの特徴を抽出することを特徴とする請求項２〜５のいずれか一つに記載の選択装置。
【請求項７】
選択装置が実行する選択方法であって、
マクロ付き文書ファイル内のマクロからマクロの特徴量を取得するマクロ分析工程と、
前記文書ファイル内のテキストからテキストの特徴量を取得するテキスト分析工程と、
前記マクロの特徴量と前記テキストの特徴量とを用いてクラスタリングを実施するクラスタ工程と、
クラスタリングの結果に基づいて、解析対象の文書ファイルを選択する選択工程と、
を含んだことを特徴とする選択方法。
【請求項８】
コンピュータを、請求項１〜６のいずれか一つに記載の選択装置として機能させるための選択プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、選択装置、選択方法及び選択プログラムに関する。
【背景技術】
【０００２】
Microsoft  Office（登録商標）向け文書において、マクロを用いた悪性文書ファイル（以下、悪性マクロ付き文書ファイルという。）による脅威が顕在化している。悪性文書ファイルは、内容を閲覧するためにこのファイルをビューアアプリケーション（以下、ビューアという。）で開くと、攻撃が開始され、マルウェアの感染に至るように構成された文書ファイルである。悪性マクロ付き文書ファイルは、このファイルをビューアで開き、マクロが実行されることにより、攻撃が開始される文書ファイルである。【０００３】
このマクロを利用できる文書ファイルとしては、Microsoft  Office文書があり、ファイル形式の一例としては、DOC、XLS、PPTといったOLE（Object  Linking  and  Embedding）形式の文書ファイルや、DOCM、XLSM、PPTMといった、マクロ有効化されたOffice  Open  XML（以下、OOXMLという。）形式の文書ファイルがある。【０００４】
これらは、Visual  Basic  for  Applications（以下、VBAという。）というプログラミング言語を用いて記述されたマクロを内包できる。VBAを用いたマクロでは、Windowsの提供するAPI（Application  Programming  Interface）や、ActiveXオブジェクトなどを利用できるため、攻撃者が実現しようとする動作の大半をマクロによって実現できてしまう。そのため、悪性マクロが実行された際にユーザに及ぼす影響度は大きい。【０００５】
また、エクスプロイトコードを用いて脆弱性を攻略する悪性文書ファイルでは、攻撃の実現に、悪用可能な脆弱性の発見を必要とし、さらに、攻撃対象の環境がこの脆弱性を有する必要があるという制約が存在する。その一方で、悪性マクロを用いた悪性文書ファイルでは、このような脆弱性の攻略が必要ないという点で、攻撃の実現が比較的容易である。以上のことから、悪性マクロ付き文書ファイルへの対策の重要性は高い。【０００６】
このような悪性マクロ付き文書ファイルからユーザを保護するために、ビューア側で防御機構を提供することが一般的となっている。例えば、前述のOLE形式の文書ファイルに対する最も一般的なビューアであるMicrosoft  Officeは、保護ビューと呼ばれるサンドボックスを具備している。保護ビューは、編集機能を無効にした読み取り専用モードであり、保護ビューでは、ユーザが許可しない限り、マクロを実行させることがない。このため、ビューアで悪性マクロ付き文書ファイルを開いた後、直ちにマルウェアに感染してしまう、といった状況を防止できる。このような防御機構の影響もあり、2000年台初頭以降、悪性マクロ付き文書ファイルは、概ね観測されない状態が続いていた。【０００７】
ところが、近年では、悪性マクロ付き文書ファイルが再び出現している。これらの悪性マクロ付き文書ファイルは、ユーザに対して保護ビューを無効にするように巧妙に誘導する、いわゆるソーシャルエンジニアリングのためのテキストを文書中に備える。悪性マクロ付き文書ファイルは、これによって、ユーザに自ら保護ビューを解除させ、マクロを実行可能にさせるという手法により、保護ビューの影響を受けることなく攻撃を実現する。保護ビューのような防御機構は、ユーザによって無効にされてしまえば、効果を発揮することができない。このため、このようなソーシャルエンジニアリングの攻撃手法によって、防御機構が十分に機能を果たせなくなってしまう。【０００８】
このような悪性マクロ付き文書ファイルは、キャンペーンで多用される。キャンペーンとは、短期間に多数の標的に対して攻撃を実施する一連の攻撃である。悪性なファイルを用いたキャンペーンでは、単一の組織内の多数の標的に対してファイルを送信されることが多い。そのため、組織の入口対策においては、大量の悪性マクロ付き文書ファイルに対して効率的に悪性判定する手法が希求される。【０００９】
そこで、悪性マクロ付き文書ファイルによる脅威を検出し、対策をとっていくための一つの有効な技術として、動的解析に基づく検出技術がある。動的解析は、検査対象の文書ファイルをビューアで開いてマクロを実行し、これが悪性な振る舞いを示すか否かを監視することによって、悪性文書ファイルを検出する手法である。【００１０】
マクロへの対策のための動的解析として、従来、以下に挙げる手法が提案されている。例えば、プロセス及びファイルを監視しながら、文書ファイルをビューアアプリケーションで開いてマクロの悪性な動作を実行させることによって、動的に検知する手法が提案されている（例えば、非特許文献１参照）。近年のマクロの多くは、マルウェアのダウンロードやドロップ、実行をおもな悪性な挙動としているため、ファイルの作成やプロセスの生成を監視することによって、その悪性な振る舞いの特徴を捉えることができる。したがって、この非特許文献１記載の手法によれば、悪性マクロ付き文書ファイルを検出できると考えられる。【００１１】
また、例えば、文書ファイル内で閉じた動作をするマクロのみの実行を許可し、文書ファイル外の環境への干渉を禁止するという動的な手法が提案されている（例えば、非特許文献２参照）。近年のマクロの持つ悪性動作の多くは、文書ファイル外のシステムの機能を必要とする。このため、この非特許文献２記載の手法によれば、悪性マクロを検出できると考えられる。【００１２】
そして、悪性マクロ付き文書ファイルに対する対策のための他の有効な技術として、静的解析に基づく検出技術がある。例えば、文書ファイル内やマクロ内で用いられている単語の出現頻度に基づいて静的に悪性文書を検出する手法が提案されている（例えば、非特許文献３参照）。悪性マクロ付き文書ファイルの用いる単語には傾向があるため、この非特許文献３記載の手法によれば、一定の悪性マクロ、例えば、難読化されていない悪性マクロを、比較的高速で検出できると考えられる。
【先行技術文献】
【非特許文献】
【００１３】
【非特許文献１】K.  Tanuja,  CH.  Praneeth,  Dr  D.  Haritha,  “Dissecting  Malicious  Word,  PDF  Documents”,  International  Journal  of  Science  Engineering  and  Advance  Technology,  Vol.  3,  No.  3,  pp.  61−68
【非特許文献２】J.  Dechaux,  E.  Filiol,  “Proactive  defense  against  malicious  documents:  formalization,  implementation  and  case  studies”,  Journal  of  Computer  Virology  and  Hacking  Techniques,  Volume  12,  Issue  3,  pp.  191−202
【非特許文献３】Jing-Yao  Lin,  Hsing-Kuo  Pao,  “Multi-View  Malicious  Document  Detection”,  In  Proceedings  of  the  Conference  on  Technologies  and  Applications  of  Artificial  Intelligence  (TAAI),  2013,  pp.  170−175
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、サンドボックスや非特許文献１，２に記載の手法に代表される動的解析手法では、検査対象の文書ファイルを仮想環境上でマクロを実行させ、悪性な挙動を検出するために、中期的観測（たとえば、一般的なサンドボックスでは５分程度）を実施する必要があり、ファイルの検査に一定の時間を要するという共通した低速性の問題があった。このため、動的解析手法では、キャンペーンと呼ばれる攻撃のように、単一組織に多数のファイルが送信される場合には、適用が困難であった。【００１５】
また、非特許文献３に記載の手法では、静的手法のため、難読化された悪性マクロの特徴を捉えられず、文書に出現する単語の特徴のみでは、攻撃者の回避が可能となってしまい、検出精度が低下し得るという問題があった。【００１６】
本発明は、上記に鑑みてなされたものであって、解析対象となるマクロ付き文書ファイルを効率的かつ高精度に選択できる選択装置、選択方法及び選択プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上述した課題を解決し、目的を達成するために、本発明に係る選択装置は、マクロ付き文書ファイル内のマクロからマクロの特徴量を取得するマクロ分析部と、文書ファイル内のテキストからテキストの特徴量を取得するテキスト分析部と、マクロの特徴量とテキストの特徴量とを用いてクラスタリングを実施するクラスタ分析部と、クラスタリングの結果に基づいて、解析対象の文書ファイルを選択する選択部と、を有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、解析対象となるマクロ文書を効率的かつ高精度に選択できる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施の形態に係る選択装置の構成の一例を説明する図である。
【図２】図２は、図１に示すファイルハッシュデータベース（DB）が記憶するデータのデータ形式の一例を示す図である。
【図３】図３は、図１に示すマクロ特徴量DBが記憶するデータのデータ形式の一例を示す図である。
【図４】図４は、図１に示すテキスト特徴量DBが記憶するデータのデータ形式の一例を示す図である。
【図５】図５は、図１に示すエミュレータの構成の一例を説明する図である。
【図６】図６は、図１に示す選択装置の選択処理の処理手順を示すフローチャートである。
【図７】図７は、図６に示すテキスト分析処理の処理手順を示すフローチャートである。
【図８】図８は、図６に示すマクロ分析処理の処理手順を示すフローチャートである。
【図９】図９は、図８に示すエミュレータ実行処理の処理手順を示すフローチャートである。
【図１０】図１０は、図６に示すクラスタ分析処理の処理手順を示すフローチャートである。
【図１１】図１１は、図６に示すクラスタ分析処理の他の処理手順を示すフローチャートである。
【図１２】図１２は、図６に示す選択処理の処理手順を示すフローチャートである。
【図１３】図１３は、プログラムが実行されることにより、選択装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【００２１】
［実施の形態］
実施の形態に係る選択装置について、選択装置の概略構成、及び、選択装置における処理の流れ及び具体例を説明する。
【００２２】
本実施の形態に係る選択装置は、高速な特徴抽出に基づくクラスタリングを実施して類似検体を同一クラスタに分類し、解析対象をクラスタの代表点のみに絞り込むことで、解析のプロセス全体を効率化する。これは、キャンペーンで用いられる多数の悪性マクロ付き文書ファイルは、互いに高い類似性を持つ傾向があるためであり、類似検体をまとめあげることで、類似検体を繰り返し解析することを防ぐ意味を持つ。また、本実施の形態に係る選択装置は、クラスタリングのための特徴抽出には、マクロのエミュレーション実行により、難読化に妨害されない悪性マクロの挙動の特徴を捉えるとともに、文書のテキスト分析により、ソーシャルエンジニアリングのためのテキストの特徴を捉え、攻撃に必須となる両方の特徴を用いた高精度なマルチモーダルクラスタリングを実現する。
【００２３】
ここで、クラスタリングとは、分類対象の集合を、内的結合（internal  cohesion）と外的分離（external  isolation）が達成されるような部分集合に分割することである（詳細は、大橋  靖雄,“分類手法概論”,  計測と制御,  Vol.  24,  No.  11,  pp.  999−1006,  1985参照）。また、マルチモーダルクラスタリングとは、複数の異なる観点からの特徴量に基づいてクラスタリングを実現することである。
【００２４】
［選択装置の構成］
そこで、図１を参照して、実施の形態に係る選択装置の構成について説明する。図１は、実施の形態に係る選択装置の構成の一例を説明する図である。図１に示すように、選択装置１０は、入力部１１、出力部１２、通信部１３、記憶部１４、制御部１５、エミュレータ１６、ファイルハッシュデータベース（DB）１７、マクロ特徴量DB１８、テキスト特徴量DB１９を有する。
【００２５】
入力部１１は、選択装置１０の操作者からの各種操作を受け付ける入力インタフェースである。例えば、入力部１１は、タッチパネル、音声入力デバイス、キーボードやマウス等の入力デバイスによって構成される。出力部１２は、例えば、液晶ディスプレイなどの表示装置、プリンタ等の印刷装置、情報通信装置等によって実現され、選択処理に関する情報を出力する。
【００２６】
通信部１３は、ネットワーク等を介して接続された他の装置との間で、各種情報を送受信する通信インタフェースである。通信部１３は、NIC（Network  Interface  Card）等で実現され、LAN（Local  Area  Network）やインターネットなどの電気通信回線を介した他の装置と制御部１５（後述）との間の通信を行う。例えば、通信部１３は、検査対象となる未知文書ファイル群（検査対象未知文書ファイル群１００）を、制御部１５に入力する。また、通信部１３は、選択装置１０による選択結果情報を、他の装置、或いは、該選択装置１０を有する本体装置に送信する。
【００２７】
記憶部１４は、HDD（Hard  Disk  Drive）、SSD（Solid  State  Drive）、光ディスク等の記憶装置である。なお、記憶部１４は、RAM（Random  Access  Memory）、フラッシュメモリ、NVSRAM（Non  Volatile  Static  Random  Access  Memory）等のデータを書き換え可能な半導体メモリであってもよい。記憶部１４は、選択装置１０で実行されるOS（Operating  System）や各種プログラムを記憶する。さらに、記憶部１４は、プログラムの実行で用いられる各種情報を記憶する。
【００２８】
制御部１５は、選択装置１０全体を制御する。制御部１５は、例えば、CPU（Central  Processing  Unit）、MPU（Micro  Processing  Unit）等の電子回路や、ASIC（Application  Specific  Integrated  Circuit）、FPGA（Field  Programmable  Gate  Array）等の集積回路である。また、制御部１５は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、内部メモリを用いて各処理を実行する。また、制御部１５は、各種のプログラムが動作することにより各種の処理部として機能する。制御部１５は、ハッシュ検査部１５１、ファイル形式判定部１５２、要素抽出部１５３、マクロ分析部１５Ａ、テキスト抽出部１５６、テキスト分析部１５７、クラスタ分析部１５８及び選択部１５９を有する。
【００２９】
ハッシュ検査部１５１は、入力されるすべてのファイルのハッシュ値を計算する。ハッシュ検査部１５１は、計算の結果、同一のハッシュ値を持つファイルが存在する場合には、重複であるとして１つのファイルを残して分析対象から取り除く。ハッシュ検査部１５１は、計算されたハッシュ値を、ファイルハッシュDB１７（後述）に記憶させる。同一のハッシュ値を持つファイルが存在するか否かの確認は、このファイルハッシュDB１７の検索により実現する。ハッシュ検査部１５１は、ハッシュ値の計算手法として、暗号学的ハッシュ関数を用いる。この暗号学的ハッシュ関数は、強衝突耐性を保持しているものが望ましい。ハッシュ検査部１５１は、暗号学的ハッシュ関数として、例えば、SHA-2を用いてもよく、SHA-3を用いてもよい。
【００３０】
ファイル形式判定部１５２は、入力されるすべてのファイルに対し、いずれのファイル形式によって構成されているファイルであるかを判定する。ファイル形式判定部１５２は、入力されたファイルについて、このファイルのヘッダやファイル構造の特徴に基づいて、ファイルの形式を判別する。例えば、ファイルの形式として、マクロを内包可能なMicrosoft  Office文書である、DOC、XLS、PPT、DOCM、XLSM、PPTMなどが想定される。もちろん、マクロを持ち得ないファイルタイプであれば、本選択装置の対象から除外する。
【００３１】
要素抽出部１５３は、文書ファイルの構文解析により、文書ファイル中からマクロ及び画像を抽出する。要素抽出部１５３は、抽出したマクロを実行部１５４（後述）に入力する。また、要素抽出部１５３は、抽出した画像を、文書ファイルとともにテキスト抽出部１５６（後述）に入力する。要素抽出部１５３は、マクロの抽出を、文書ファイルのファイルフォーマットの定義に従った構文解析によって実現する。そして、要素抽出部１５３は、画像の抽出を、前述した構文解析によって実施してもよく、また、ファイルカービングによって実現してもよい。なお、ファイルカービングとは、ファイル中に埋め込まれた他のファイルを、埋め込まれたファイルのマジックナンバーやファイルヘッダ、ファイルフォーマットによって抽出する処理である。
【００３２】
マクロ分析部１５Ａは、マクロ付き文書ファイル内のマクロからマクロの特徴量を取得する。マクロ分析部１５Ａは、実行部１５４及び実行トレース解析部１５５を有する。実行部１５４は、エミュレーション実行の準備をするとともに、エミュレータとのインタフェースとなる。実行部１５４は、マクロを入力として受け取り、エミュレータ１６にエミュレーション実行させることによって、実行トレースを取得して出力することを目的とする。なお、実行トレースとは、マクロの実行により得られた、マクロのプロファイル情報である。
【００３３】
実行部１５４は、まず、エミュレーション実行の準備として、解析対象のマクロを結合し、一繋がりのマクロとする。これは、入力されたマクロが複数のマクロに分割されている場合があるためである。
【００３４】
次に、実行部１５４は、エミュレーション実行のためのエントリーポイント（マクロの実行開始点）を探索する。実行部１５４は、エントリーポイントの探索として、まず、マクロ中を走査し、AutoOpenをはじめとする自動マクロを探索する。実行部１５４は、自動マクロが存在する場合には、この自動マクロをエントリーポイントとして抽出する。
【００３５】
そして、実行部１５４は、自動マクロが存在しない場合、マクロ中にイベントプロシージャが存在しないかを調べる。実行部１５４は、マクロ中にイベントプロシージャが存在する場合には、このイベントプロシージャをエントリーポイントとして抽出する。そして、実行部１５４は、抽出したエントリーポイントから、エミュレータ１６（後述）を用いてマクロを実行することによって、実行トレースを取得する。そして、実行部１５４は、取得した実行トレースを実行トレース解析部１５５へ出力する。
【００３６】
実行トレース解析部１５５は、実行部１５４から出力された実行トレースを解析し、特徴抽出を実施することによって、マクロ特徴量を取得する。実行トレース解析部１５５は、取得したマクロ特徴量をマクロ特徴量DB１８に格納する。したがって、実行部１５４及び実行トレース解析部１５５は、文書ファイル内のマクロからマクロの特徴量を取得する機能を有する。
【００３７】
テキスト抽出部１５６は、文書ファイルおよび文書ファイルから抽出された画像ファイルを入力として受け取り、テキストを抽出して出力する。まず、テキスト抽出部１５６は、文書ファイルを構文解析することによって、文書ファイル中に含まれるテキストを抽出する。この処理は、文書ファイルのファイルフォーマットの定義に従った構文解析によって実現できる。また、テキスト抽出部１５６は、画像ファイルに対して、既存のOCR（Optical  Character  Recognition：光学文字認識）技術を適用することにより、画像ファイル中のテキストを抽出する。この処理は、既存のOCRライブラリや、Google（登録商標）  Cloud  Vision  APIなどのサービスを用いて実現可能である。以降、この画像からテキスト抽出部１５６が抽出したテキストは、文書ファイルから抽出されたテキストと合わせて処理される。
【００３８】
テキスト分析部１５７は、文書ファイルから抽出されたテキストを入力として受け取り、自然言語処理によって特徴抽出を実施することで、テキスト特徴量を取得する。テキスト分析部１５７は、自然言語処理の処理として、分かち書き、不明語の除去、ストップワード除去、ステミング、同義語の統一、言語モデル抽出の処理を実行する。
【００３９】
テキスト分析部１５７は、まず、抽出されたテキスト中に含まれた文章を分かち書きする。分かち書きとは、文章を語ごとに分割することである。続いて、テキスト分析部１５７は、一定以上の長さの語を除去する。これは、悪性マクロ付き文書ファイルでは意味のないランダムな文字の羅列がしばしば用いられるためである。この際、テキスト分析部１５７は、長さを除去の基準とする代わりに、辞書を用いて、辞書に含まれていない語を除去するようにしてもよい。
【００４０】
そして、テキスト分析部１５７は、ストップワードの除去を行う。ストップワードとは、どの文書にも共通的に高頻度で出現する語のことで、精度の低下を招くため削除する。例えば、英語では、代名詞、助動詞、前置詞などが該当する。ストップワードの除去は、オープンデータのストップワードのコーパスを用いて、該当した語を除去することで実現できることが一般に知られている。
【００４１】
続いて、テキスト分析部１５７は、ステミングを実施する。ステミングとは、語幹を抽出する処理であり、同じ語幹を持つが語形が変化している場合の処理である。例として、enabledやenablingは、ステミングによってenableに変換される。そして、テキスト分析部１５７は、同義語の統一処理を実施する。これは、同じ意味を持つが異なる単語が使われているものを統一し、より意味に焦点を当てるための処理である。例として、enableとpermitは一つの素性に統一される。これによって、単語の言い換えによる回避を防ぐことが期待できる。こうした同義語の統一は、同義語辞書を用いて実現できる。そして、テキスト分析部１５７は、これらの処理を施したテキストから、特徴抽出を実施する。したがって、テキスト抽出部１５６及びテキスト分析部１５７は、文書ファイル内のテキストからテキストの特徴量を取得する機能を有する。
【００４２】
なお、本実施の形態では、N-gramによる特徴抽出を実施した例について説明する。このN-gramとは、隣り合うＮ個の語を一要素としたモデルであり、要素の各々の出現回数を数え上げ、数え上げた出現回数を特徴量とする。テキスト分析部１５７は、上述した処理によって得られた特徴量をテキスト特徴量として、テキスト特徴量DB１９（後述）に格納する。なお、本実施の形態では、N-gramによる特徴抽出を実施した例について説明したが、もちろん、特徴抽出処理の設計はこれに限るものではない。
【００４３】
クラスタ分析部１５８は、マクロ特徴量DB１８及びテキスト特徴量DB１９に格納された特徴量に基づいてクラスタリングを実施し、生成された各クラスタを出力する。クラスタ分析部１５８は、マクロ特徴量DB１８及びテキスト特徴量DB１９に格納されたデータに基づき、特徴ベクトルを生成する。
【００４４】
この特徴ベクトルは、各データ点（すなわち、本実施の形態では、各マクロ付き文書ファイル）のそれぞれの特徴量をまとめてベクトル表現にしたものであり、すべてのデータ点の特徴量を共通した次元のベクトルで表せるようにしたものである。例えば、あるデータが、Ａが「１」、Ｂが「２」、Ｃが「３」という特徴量を持ち、別のデータ点が、Ｃが「３」、Ｄが「４」、Ｅが「５」という特徴量を持つとき、これらを共通した次元のベクトルで表現するためには、（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）というベクトルである必要がある。これにより、前者のデータは（１，２，３，０，０）という特徴ベクトルになり、後者のデータは、（０，０，３，４，５）という特徴ベクトルになる。
【００４５】
クラスタ分析部１５８は、マクロ特徴量とテキスト特徴量との双方に基づいたマルチモーダルクラスタリングを実現する必要がある。その実現方法として、２つの方法がある。第１の方法は、マクロ特徴量とテキスト特徴量とを事前に統合した特徴ベクトルを生成し、それに基づいてクラスタリングする方法である。第２の方法は、マクロ特徴量によるクラスタリングの結果とテキスト特徴量によるクラスタリングの結果とを統合する方法である。結果を統合する方法として、例えば、各結果のANDをとるものと、ORをとるものとが考えられるが、これに限るものではない。また、特徴量を統合する方法として、例えば、特徴ベクトルを連結する方法や、Deep  AutoEncoderを用いる方法が考えられるが、これに限るものではない。
【００４６】
クラスタリングアルゴリズムは、以下の要件に適合するものを選択する。第１に、多数の文書ファイルを高速に処理することを目的としているため、計算量が小さいアルゴリズムである必要がある。第２に、クラスタリング時にクラスタ数が判明していないため、クラスタ数を事前に設定する必要のないアルゴリズムを選択する必要がある。クラスタリング時にクラスタ数が判明しないのは、クラスタ数が、攻撃者がキャンペーン内で用いる悪性マクロ付き文書ファイルの種類数や、良性マクロ付き文書ファイルの種類数に左右されるためである。
【００４７】
そして、クラスタリングアルゴリズムについては、前述の２つの要件がある一方、階層構造は必要としない。したがって、クラスタリングアルゴリズムとして、計算量の要件から、階層型クラスタリングと比較して、一般に計算量が小さい非階層型クラスタリングのアルゴリズムが望まれる。また、クラスタ数がクラスタリング時に判明していないことから、事前にクラスタ数を与えるのではなく、予め設定した停止条件を満たすまでクラスタの分割を続けるアルゴリズムが適している。こうした条件を満たすクラスタリングアルゴリズムの一つにX-meansがあるが、これに限らず、K-meansを改造して独自の停止条件を付加したアルゴリズムを用いてもよく、その他のアルゴリズムを用いてもよい。
【００４８】
選択部１５９は、クラスタ分析部１５８で生成されたクラスタを入力として受け取り、解析すべき文書ファイルを選定した結果を出力する。選択部１５９は、各クラスタの代表点のみを解析し、その解析による判定結果の悪性または良性をそのクラスタに属するデータ全体の判定とすることで、実質的に解析すべき対象を絞り込む。これは、マクロを内包した文書ファイル群をクラスタリングする際、悪性なものは強く凝縮されたクラスタを生成しやすく、かつ、良性なものと混合したクラスタになりづらいという特長による。
【００４９】
選択部１５９は、各クラスタの重心を計算し、重心に最も近いデータ点をクラスタの代表点として用いる。このとき、距離計算には、ユークリッド距離を用いるのが一般的であるが、それ以外の距離尺度を用いてもよい。さらに、選択部１５９は、クラスタ内に属するデータ点の数を調べ、多いクラスタの代表点を優先的に詳細解析するように優先順位付けする。これは、キャンペーンにおいて、類似した悪性マクロ付き文書ファイルが大量に用いられるため、悪性なクラスタはクラスタ内のデータ点が多くなりやすいためである。また、代表点の一ファイルの判定結果がクラスタ全体の判定結果となるため、より影響の大きいものから選ぶ意味もある。選択部１５９は、この処理によって得られた、優先順位付きの解析すべきファイルの一覧を、選択結果として出力する。
【００５０】
エミュレータ１６は、マクロおよびエントリーポイントを受け取り、VBAの仕様に基づき実行する機構である。エミュレータ１６の詳細な構成は後述する。
【００５１】
ファイルハッシュDB１７は、入力された文書ファイルに対応するハッシュ値を記憶するデータベースである。マクロ特徴量DB１８は、実行トレース解析部１５５で抽出されたマクロ特徴量を記憶するデータベースである。テキスト特徴量DB１９は、テキスト分析部１５７で抽出されたテキスト特徴量を記憶するデータベースである。これらのファイルハッシュDB１７、マクロ特徴量DB１８及びテキスト特徴量DB１９は、通信部１３を介して制御部１５と通信する、ストレージを内蔵する汎用のサーバ装置等であってもよい。
【００５２】
［ファイルハッシュDBが記憶するデータのデータ形式］
次に、ファイルハッシュDB１７が記憶するデータのデータ形式の一例について説明する。図２は、図１に示すファイルハッシュDB１７が記憶するデータのデータ形式の一例を示す図である。
【００５３】
図２の表Ｔ１に示すように、ファイルハッシュDB１７は、スキーマとして、「id」、「file_name」、「hash_val」の３つの属性を持つ。「id」は、データベースに格納されているレコードの通し番号である。「file_name」は、文書ファイルのファイル名である。「hash_val」は、「file_name」を持つファイルのハッシュ値である。
【００５４】
［マクロ特徴量DBが記憶するデータのデータ形式］
次に、マクロ特徴量DB１８が記憶するデータのデータ形式の一例について説明する。図３は、図１に示すマクロ特徴量DB１８が記憶するデータのデータ形式の一例を示す図である。なお、図３の表Ｔ２に示す例では、特徴抽出にN-gramを用いている。ただし、N-gram以外の方法によって特徴抽出が実行されてもよい。
【００５５】
マクロ特徴量DB１８は、スキーマとして、「id」、「hash_val」、「ngram_1」、「ngram_...」、「ngram_N」、「value」の属性を持つ。「id」は、データベースに格納されているレコードの通し番号である。「hash_val」は、マクロが含まれていた文書ファイルのハッシュ値である。「ngram_1」から「ngram_N」までが、特徴を示す属性である。ここで、「N」には実際の数値が入り、「N-gram」の「N」の値に等しい。
【００５６】
具体的には、3-gramによる特徴抽出を実施している場合、属性は「ngram_1，ngram_2，ngram_3」となる。もちろん、4-gramによる特徴抽出であれば「ngram_4」が追加され、5-gramであれば、さらに「ngram_5」が追加される。また、「ngram_1,  …,  ngram_X,  …,  ngram_N」において、「ngram_X」は、N-gramのX番目の構成要素である。このため、3-gramでの特徴抽出において、「ngram_2」は２番目の構成要素を示す。「value」は、対応する特徴量を数値で格納する。N-gramによる特徴抽出では、対応するN-gramの要素が出現する回数となる。
【００５７】
１レコードの具体例を挙げる。例えば、3-gramで特徴抽出するものとしたとき、あるマクロの実行トレース中に、（CreateObject,  Adodb.Stream.open,  Adodb.Stream.write）という順序の呼び出しが４回出現したとする。この場合には、ngram_1が「CreateObject」、ngram_2が「Adodb.Stream.open」、ngram_3が「Adodb.Stream.write」となり、valueが「4」となる。なお、実行トレース解析部１５５がN-gram以外による特徴抽出をする場合は、ngram_1からngram_Nまでの部分を特徴抽出に応じた属性に変更する。
【００５８】
［テキスト特徴量DBが記憶するデータのデータ形式］
次に、テキスト特徴量DB１９が記憶するデータのデータ形式について説明する。図４は、図１に示すテキスト特徴量DB１９が記憶するデータのデータ形式の一例を示す図である。図４の表Ｔ３に示す例では、特徴抽出にN-gramを用いている。ただし、N-gram以外の方法によって特徴抽出が実行されてもよい。
【００５９】
テキスト特徴量DB１９は、特徴抽出にN-gramを用いる場合には、スキーマとして、マクロ特徴量DB１８と同じく、「id」、「hash_val」、「ngram_1」、「ngram_...」、「ngram_N」、「value」の属性を持つ。また、N-gram以外による特徴抽出をする場合は、ngram_1からngram_Nまでの部分を特徴抽出に応じた属性に変更することも同様である。
【００６０】
［エミュレータの構成］
本実施の形態に係る選択装置１０は、エミュレータ１６を用いてマクロを実行することによって、実行トレースを取得する。選択装置１０がエミュレータ１６を必要とするのは、VBAの実行環境に、変更を加えられるサードパーティの実装が存在しないためである。また、柔軟な解析を実現するためには、エミュレータの実装が必要となる。
【００６１】
このため、図１に示すエミュレータ１６の構成について説明する。図５は、図１に示すエミュレータ１６の構成の一例を説明する図である。エミュレータ１６は、字句解析部１６１、構文解析部１６２、中間表現生成部１６３、実行部１６４、APIハンドラ部１６５、オブジェクトハンドラ部１６６、ドキュメントインタフェース部１６７及び記録部１６８から構成される。
【００６２】
エミュレータ１６は、入力としてVBAで記述されたマクロ（分析対象マクロ２００）と、そのエントリーポイントとを受け取る。エミュレータ１６は、受け取ったマクロを、エントリーポイントを起点としてエミュレーション実行し、実行トレースを出力する。
【００６３】
まず、字句解析部１６１は、マクロを走査してプログラムを構成する要素の最小単位（トークン）の並びとして認識する。
【００６４】
そして、構文解析部１６２は、字句解析結果を基に、VBAの仕様（詳細は、[MS-VBAL]:  VBA  Language  Specification,  Microsoft、［online］、［平成29年2月15日検索］、インターネット＜URL：https://msdn.microsoft.com/ja-jp/library/dd361851.aspx＞参照）に従い、マクロの構文解析を実施する。
【００６５】
中間表現生成部１６３は、構文解析結果に基づいて、中間表現を生成する。中間表現には、独自に定義した表現を用いてもよく、LLVM  IRやVEX  IRなどの既存の中間表現を用いてもよく、Pythonなど既存の言語で記述する形でもよい。
【００６６】
実行部１６４は、生成された中間表現をエミュレーション実行していく。このエミュレーション実行の際には、変数をシンボルとして扱いながら実行する設計（シンボリック実行と呼ばれる（詳細は、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,  pp.  265−278,  2011参照））としてもよい。
【００６７】
ここで、シンボリック実行とは、プログラム実行時に変数をシンボルとして扱い、プログラムの実行結果を評価する手法である。シンボリック実行では、実行時には、シンボルを含んだ分岐条件を評価せず、プログラムの実行パスが網羅的に実行される。これにより、シンボリック実行では、解析妨害機能を具備したマクロを解析する場合であっても、妨害を回避し、網羅的な解析が期待できる。また、実行部１６４は、エミュレーション実行の際に、意図的に解析時間を長くするためのループが存在する場合に、検出して短縮するような機構を備えてもよい。
【００６８】
APIハンドラ部１６５は、エミュレーション実行中にAPI呼び出しがあった場合に、実行部１６４からAPI名及び引数を受け取り、それに対応した処理結果を返す。APIハンドラ部１６５は、例えば、Sleepなどを用いて意図的に解析時間を長くするような処理については、短縮するような処理としてもよい。また、APIハンドラ部１６５は、Eval関数が呼び出された場合、その引数であるマクロ（動的生成マクロ３００）を、字句解析部１６１に入力する。Eval関数は、引数に与えられたマクロを実行する関数である。VBAは、動的言語であり、Eval関数によって動的生成されたコードが実行され得る。したがって、動的生成された動的生成マクロ３００の追跡が必要となることから、APIハンドラ部１６５は、この動的生成マクロ３００を字句解析部１６１に入力する。
【００６９】
オブジェクトハンドラ部１６６は、マクロのエミュレーション実行中にActiveXオブジェクトを生成し利用した場合、オブジェクトに関連する情報を受け取り、対応した処理結果を返す。オブジェクトは、GetObject関数やCreateObject関数を用いて利用されるため、これらの呼び出しを基点とし、引数に基づいて動作する。オブジェクトに対応する処理の実現のために、AciveXオブジェクトの種類ごとに対応する処理をエミュレータ１６のオブジェクトハンドラ部１６６に予め定義しておく。或いは、オブジェクトに対応する処理の実現のために、エミュレータ１６のオブジェクトハンドラ部１６６が、実際にActiveXオブジェクトを呼び出して仲介する方法を採用してもよい。
【００７０】
ドキュメントインタフェース部１６７は、マクロがエミュレーション実行中に文書ファイル４００中の要素を参照した場合に、文書を構文解析して、参照された要素への操作を実施する。ドキュメントインタフェース部１６７は、例えば、Range関数やCell関数を用いて表中の特定のセルの値を取得するといった操作を実施する。悪性マクロ付き文書ファイルでは、文書内の特定の表中のセルにマクロの一部を保存しておき、マクロの実行時にこのセルを参照して動的に実行する、というような挙動が見られるため、このドキュメントインタフェース部１６７が必要となる。
【００７１】
記録部１６８は、APIハンドラ部１６５とオブジェクトハンドラ部１６６とでのAPI呼び出しやオブジェクトメソッド呼び出しを監視し、実行トレースとして出力する。記録部１６８は、実行トレースとして、APIやオブジェクトメソッドの呼び出しと、その引数、返り値とを一組として時系列で記録する。
【００７２】
［選択装置の選択処理］
次に、選択装置１０の選択処理の処理手順について説明する。図６は、図１に示す選択装置１０の選択処理の処理手順を示すフローチャートである。
【００７３】
図６に示すように、選択装置１０は、まず、検査対象未知文書ファイル群１００を入力として受け取る（ステップＳ１）。そして、選択装置１０は、受け取った検査対象未知文書ファイル群１００の中から、初めに処理するファイルを取り出す（ステップＳ２）。続いて、このファイルに対して、ハッシュ検査部１５１が、ファイルのハッシュ値を計算する（ステップＳ３）。そして、ハッシュ検査部１５１は、計算されたハッシュ値でファイルハッシュDB１７を検索する（ステップＳ４）。
【００７４】
ハッシュ検査部１５１は、計算されたハッシュ値が検索に該当したか否かを判断する（ステップＳ５）。計算されたハッシュ値が検索に対して該当するとハッシュ検査部１５１が判断した場合（ステップＳ５：Ｙｅｓ）、制御部１５は、そのファイルと同一のファイルが既に処理されており、これ以上の処理を必要としないものとして、次に処理するファイルを取り出す（ステップＳ６）。そして、制御部１５は、ステップＳ３に戻り、このファイルに対するハッシュ値の計算処理を行う。
【００７５】
一方、計算されたハッシュ値が検索に該当しないとハッシュ検査部１５１が判断した場合（ステップＳ５：Ｎｏ）、計算されたハッシュ値をファイルハッシュDB１７に格納する（ステップＳ７）。次に、ファイル形式判定部１５２が、ヘッダやファイル構造を基にファイル形式を判定する（ステップＳ８）。そして、ファイル形式判定部１５２は、マクロを含まないファイル形式であるか否かを判断する（ステップＳ９）。ファイル形式判定部１５２は、マクロを含まないと判断した場合は（ステップＳ９：Ｎｏ）、選択装置１０の処理対象外であるとして、次に処理するファイルを取り出し（ステップＳ６）、ステップＳ３に戻る。ファイル形式判定部１５２は、マクロを含むと判断した場合は（ステップＳ９：Ｙｅｓ）、要素抽出部１５３が、文書ファイルからマクロ及び画像を抽出する（ステップＳ１０）。次に、テキスト抽出部１５６及びテキスト分析部１５７が、テキスト分析処理を実施する（ステップＳ１１）。
【００７６】
続いて、マクロ分析部１５Ａが、マクロ分析処理を実施する（ステップＳ１２）。続いて、制御部１５は、入力されたすべての文書ファイルを処理したか否かを判断する（ステップＳ１３）。制御部１５は、入力されたすべての文書ファイルを処理していないと判断した場合（ステップＳ１３：Ｎｏ）、次に処理するファイルを取り出し（ステップＳ６）、ステップＳ３に戻る。
【００７７】
一方、制御部１５は、入力されたすべての文書ファイルを処理したと制御部１５が判断した場合（ステップＳ１３：Ｙｅｓ）、クラスタ分析部１５８は、クラスタ分析処理を実施する（ステップＳ１４）。そして、選択部１５９は、解析対象となる文書ファイルを選択する選択処理を実施し（ステップＳ１５）、得られた詳細解析対象の文書ファイルを出力して（ステップＳ１６）、終了する。
【００７８】
［テキスト分析処理の処理手順］
次に、テキスト分析処理の処理手順について説明する。このテキスト分析処理は、テキスト抽出部１５６が入力を受け取ってから、テキスト分析部１５７が処理を完了するまでの処理を含む。図７は、図６に示すテキスト分析処理の処理手順を示すフローチャートである。
【００７９】
まず、テキスト抽出部１５６は、文書ファイル及び該文書ファイルから抽出した画像ファイルを入力として受け取る（ステップＳ２１）。ここで、文書ファイル中に画像ファイルが存在する場合と存在しない場合がある。このため、テキスト抽出部１５６は、画像ファイルが入力として受け取ったファイル中に存在するか否かを判断する（ステップＳ２２）。
【００８０】
テキスト抽出部１５６は、画像ファイルが入力として受け取ったファイル中に存在すると判断した場合（ステップＳ２２：Ｙｅｓ）、OCRにより画像ファイルから、すべてのテキストを抽出する（ステップＳ２３）。テキスト抽出部１５６は、画像ファイルが文書ファイル中に存在しないと判断した場合（ステップＳ２２：Ｎｏ）、或いは、ステップＳ２３終了後、文書ファイルに対する構文解析により、文書ファイルからすべてのテキストを抽出する（ステップＳ２４）。
【００８１】
そして、テキスト分析部１５７は、ステップＳ２３およびステップＳ２４の処理によって抽出されたテキスト群の中から、初めに処理するテキストを取り出す（ステップＳ２５）。そして、テキスト分析部１５７は、そのテキストを分かち書きする（ステップＳ２６）。続いて、テキスト分析部１５７は、分かち書きによってできた語の並びから、先頭の語を取り出す（ステップＳ２７）。
【００８２】
テキスト分析部１５７は、取り出した語が不明語であるか否かを判断する（ステップＳ２８）。テキスト分析部１５７は、取り出した語が不明語であると判断した場合（ステップＳ２８：Ｙｅｓ）、この語は、除去対象であるため、処理を停止して、次の語を取り出し（ステップＳ２９）、ステップＳ２８に戻る。
【００８３】
一方、テキスト分析部１５７は、取り出した語が不明語でないと判断した場合（ステップＳ２８：Ｎｏ）、この取り出した語がストップワードであるか否かを判断する（ステップＳ３０）。テキスト分析部１５７は、取り出した語がストップワードであると判断した場合（ステップＳ３０：Ｙｅｓ）、この語は、除去対象であるため、処理を停止して、次の語を取り出し（ステップＳ２９）、ステップＳ２８に戻る。
【００８４】
これに対し、テキスト分析部１５７は、取り出した語がストップワードでないと判断した場合（ステップＳ３０：Ｎｏ）、この取り出した語に対してステミングを実施する（ステップＳ３１）。さらに、テキスト分析部１５７は、この語に同義語が存在する場合には、同義語を統一する（ステップＳ３２）。そして、テキスト分析部１５７は、一テキスト中のすべての語を処理したか否かを判断する（ステップＳ３３）。
【００８５】
テキスト分析部１５７は、一テキスト中のすべての語を処理していないと判断した場合（ステップＳ３３：Ｎｏ）、次の語を取り出し（ステップＳ２９）、ステップＳ２８に戻る。これに対し、テキスト分析部１５７は、一テキスト中のすべての語を処理したと判断した場合（ステップＳ３３：Ｙｅｓ）、次にすべてのテキストを処理したかを判断する（ステップＳ３４）。
【００８６】
テキスト分析部１５７は、すべてのテキストを処理していないと判断した場合（ステップＳ３４：Ｎｏ）、次のテキストを取り出し（ステップＳ３５）、ステップＳ２６に戻り、この取り出したテキストに対する処理を行う。一方、テキスト分析部１５７は、すべてのテキストを処理したと判断した場合（ステップＳ３４：Ｙｅｓ）、N-gramにより特徴抽出を実施する（ステップＳ３６）。そして、テキスト分析部１５７は、抽出した特徴量をテキスト特徴量DB１９に格納し（ステップＳ３７）、テキスト分析処理を終了する。
【００８７】
［マクロ分析処理の処理手順］
次に、マクロ分析処理の処理手順について説明する。マクロ分析処理は、実行部１５４が入力を受け取ってから、実行トレース解析部１５５が処理を完了するまでの処理を含む。図８は、図６に示すマクロ分析処理の処理手順を示すフローチャートである。
【００８８】
まず、実行部１５４は、マクロを入力として受け取る（ステップＳ４１）。そして、実行部１５４は、マクロが複数存在するか否かを判断する（ステップＳ４２）。実行部１５４は、マクロが複数存在すると判断した場合（ステップＳ４２：Ｙｅｓ）、これらの複数のマクロを結合する（ステップＳ４３）。実行部１５４は、ステップＳ４３の処理終了後、或いは、マクロが複数存在しないと判断した場合（ステップＳ４２：Ｎｏ）、マクロを走査し、エントリーポイントを探索する（ステップＳ４４）。
【００８９】
そして、実行部１５４は、エミュレータ１６に、エミュレーション実行処理を実施させる（ステップＳ４５）。そして、実行部１５４は、エミュレーション実行処理によって得られた実行トレースからAPI/メソッド呼び出しの列を受け取る（ステップＳ４６）。実行部１５４は、受け取ったAPI/メソッド呼び出しの列を用いて、N-gramにより特徴抽出を行う（ステップS４７）。そして、実行部１５４は、抽出した特徴量をマクロ特徴量DB１８に格納し（ステップＳ４８）、マクロ分析処理を終了する。
【００９０】
［エミュレーション実行処理の流れ］
次に、図８に示すエミュレーション実行処理の処理手順について説明する。図９は、図８に示すエミュレータ実行処理の処理手順を示すフローチャートである。
【００９１】
まず、エミュレータ１６は、マクロおよびエントリーポイントを入力として受け取る（ステップＳ５１）。そして、エミュレータ１６では、字句解析部１６１がマクロを字句解析する（ステップＳ５２）。さらに、構文解析部１６２は、字句解析の結果に対して、構文解析を実施する（ステップＳ５３）。続いて、中間表現生成部１６３は、字句解析の結果及び構文解析の結果に基づいて、中間表現を生成する（ステップＳ５４）。そして、エミュレータ１６は、中間表現の初めのステップを取り出す（ステップＳ５５）。ここで、初めのステップとは、中間表現中でエントリーポイントに対応する部分である。実行部１６４は、この中間表現のステップの処理を実行する（ステップＳ５６）。
【００９２】
ここで、エミュレータ１６は、API呼び出しがあったか否かを判断する（ステップＳ５７）。API呼び出しがあったとエミュレータ１６が判断した場合（ステップＳ５７：Ｙｅｓ）、APIハンドラ部１６５がAPIに対応した処理を実行し（ステップＳ５８）、記録部１６８がAPI呼び出しの情報を記録する（ステップＳ５９）。
【００９３】
そして、エミュレータ１６は、ステップＳ５９終了後、或いは、API呼び出しがないと判断した場合（ステップＳ５７：Ｎｏ）、Eval関数が呼び出されたか否かを判断する（ステップＳ６０）。Eval関数が呼び出されたとエミュレータ１６が判断した場合（ステップＳ６０：Ｙｅｓ）、この引数を動的に生成された新たなマクロとし（ステップＳ６１）、実行処理に移る。具体的には、この新たなマクロの先頭をエントリーポイントとして（ステップＳ６２）、実行部１６４が、ステップＳ５２〜ステップＳ７０の処理を順次実行するエミュレーション実行処理を行い（ステップＳ６３）、中間表現の次のステップを取り出した後（ステップＳ６４）、ステップＳ５６に進み、以降の処理を実行する。
【００９４】
一方、エミュレータ１６は、Eval関数が呼び出されていないと判断した場合（ステップＳ６０：Ｎｏ）、ActiveXオブジェクトの呼び出しがあるか判断する（ステップＳ６５）。ActiveXオブジェクト呼び出しがあるとエミュレータ１６が判断した場合（ステップＳ６５：Ｙｅｓ）、オブジェクトハンドラ部１６６がオブジェクトに対応した処理を実行し（ステップＳ６６）、記録部１６８がオブジェクトの生成やオブジェクトメソッドの呼び出しに関連する情報を記録する（ステップＳ６７）。
【００９５】
エミュレータ１６は、ActiveXオブジェクト呼び出しがないと判断した場合（ステップＳ６５：Ｎｏ）、或いは、ステップＳ６７の処理終了後、文書ファイルが参照されたかを判断する（ステップＳ６８）。エミュレータ１６は、文書ファイルが参照されたと判断した場合（ステップＳ６８：Ｙｅｓ）、ドキュメントインタフェース部１６７が文書への処理、すなわち、文書を構文解析して、参照された要素への操作を実施する（ステップＳ６９）。
【００９６】
エミュレータ１６は、文書ファイルが参照されていないと判断した場合（ステップＳ６８：Ｎｏ）、或いは、ステップＳ６９の処理終了後、中間表現をすべて実行したか否かを判断する（ステップＳ７０）。エミュレータ１６は、まだ中間表現をすべて実行していないと判断した場合（ステップＳ７０：Ｎｏ）、中間表現の次のステップを取り出し（ステップＳ６４）、ステップＳ５６に進み、以降の処理を実行する。一方、エミュレータ１６は、まだ中間表現をすべて実行したと判断した場合（ステップＳ７０：Ｙｅｓ）、実行トレースを実行トレース解析部１５５に出力し（ステップＳ７１）、エミュレーション実行処理を終了する。
【００９７】
［クラスタ分析処理の処理手順］
次に、クラスタ分析処理の処理手順の一例について説明する。図１０は、図６に示すクラスタ分析処理の処理手順を示すフローチャートである。図１０は、選択装置１０が、マクロ特徴量とテキスト特徴量とを事前に統合してクラスタ分析する場合のクラスタ分析処理の処理手順を示す。
【００９８】
まず、クラスタ分析部１５８は、マクロ特徴量DB１８から全特徴量を取り出す（ステップＳ８１）。そして、クラスタ分析部１５８は、１ファイルあたり１つのマクロに関する特徴ベクトルを持つように、１ファイルごとに１つのマクロ特徴ベクトルを生成する（ステップＳ８２）。続いて、クラスタ分析部１５８は、テキスト特徴量DB１９から全特徴量を取り出し（ステップＳ８３）、１ファイルごとに１つのテキスト特徴ベクトルを生成する（ステップＳ８４）。
【００９９】
そして、クラスタ分析部１５８は、ファイルごとにマクロ特徴ベクトルとテキスト特徴ベクトルとを統合し（ステップＳ８５）、クラスタリングを実施する（ステップＳ８６）。そして、クラスタ分析部１５８は、生成されたクラスタを出力し（ステップＳ８７）、クラスタ分析処理を終了する。
【０１００】
また、クラスタ分析処理の処理手順の他の例について説明する。図１１は、図６に示すクラスタ分析処理の他の処理手順を示すフローチャートである。図１１では、選択装置１０が、マクロ特徴量とテキスト特徴量でそれぞれクラスタリングを実施し、各々の結果を統合する場合のクラスタ分析処理の処理手順を示す。
【０１０１】
まず、図１１に示すステップＳ９１〜ステップＳ９４は、図１０に示すステップＳ８１〜ステップＳ８４である。クラスタ分析部１５８は、マクロ特徴ベクトルでクラスタリングを実施する（ステップＳ９５）。そして、クラスタ分析部１５８は、テキスト特徴ベクトルでクラスタリングを実施する（ステップＳ９６）。クラスタ分析部１５８は、生成された各々のクラスタリングの結果を統合し（ステップＳ９７）、クラスタを出力して（ステップＳ９８）、クラスタ分析処理を終了する。
【０１０２】
［選択処理の処理手順］
次に、図６に示す選択処理の処理手順について説明する。図１２は、図６に示す選択処理の処理手順を示すフローチャートである。この選択処理において、選択部１５９は、クラスタ分析部１５８が生成したクラスタを入力として受け取り、解析すべき文書ファイルを選定した結果を出力する。
【０１０３】
まず、選択部１５９は、クラスタ分析部１５８から、クラスタを入力として受け取る（ステップＳ１０１）。そして、選択部１５９は、初めに処理するクラスタを取り出す（ステップＳ１０２）。そして、選択部１５９は、クラスタの重心を計算し（ステップＳ１０３）、その重心に最も近いデータ点をクラスタの代表点として抽出する（ステップＳ１０４）。続いて、選択部１５９は、クラスタ内のデータ点の数を計測する（ステップＳ１０５）。選択部１５９は、すべてのクラスタを処理しているか否かを判断する（ステップＳ１０６）。
【０１０４】
選択部１５９は、すべてのクラスタを処理していないと判断した場合（ステップＳ１０６：Ｎｏ）、次に処理するクラスタを取り出し（ステップＳ１０７）、ステップＳ１０３に進む。一方、選択部１５９は、すべてのクラスタを処理したと判断した場合（ステップＳ１０６：Ｙｅｓ）、抽出した各クラスタの代表点をリスト化し（ステップＳ１０８）、クラスタ内のデータ点の数で各代表点に優先順位付けする（ステップＳ１０９）。そして、選択部１５９は、それを、詳細解析対象の文書ファイルに優先順位付けしたものとして出力し（ステップＳ１１０）、選択処理を終了する。
【０１０５】
［実施の形態の効果］
以上のように、本実施の形態では、文書ファイル内のマクロからマクロの特徴量を取得し、文書ファイル内のテキストからテキストの特徴量を取得し、取得したマクロの特徴量とテキストの特徴量とを用いてクラスタリングを実施して、解析対象の文書ファイルを絞り込んでいる。すなわち、本実施の形態では、マクロのエミュレーション実行に基づく特徴抽出と、文書ファイル中に含まれるテキストの分析に基づく特徴抽出とを行っている。そして、本実施の形態では、抽出されたマクロ特徴量とテキスト特徴量との双方に基づき、マルチモーダルクラスタリングを実施し、生成されたクラスタに基づいて解析をするべき対象となる文書ファイルを選別している。
【０１０６】
したがって、本実施の形態では、エミュレーション実行により、難読化の妨害を受けることなく、攻撃者の用いる悪性マクロ付き文書ファイルの特徴を捉えることができる。そして、本実施の形態では、中期的観測でなく、マクロ部分のみの実行による解析により、中期的観測と比較して高速な特徴抽出が可能である。また、本実施の形態では、テキスト分析についても、軽量な特徴抽出手法により、特徴抽出の高速化を期待できる。
【０１０７】
このように、本実施の形態によれば、高速な特徴抽出によって類似検体を同一クラスタに分類し、解析する対象をクラスタの代表点のみに絞り込むことができるため、解析のプロセス全体の効率化を実現できる。さらに、本実施の形態によれば、マクロの挙動及びテキストという、攻撃に必須の特徴が現れる要素を網羅的に捉えた特徴抽出に基づくマルチモーダルクラスタリングにより、高精度な分類を実現できる。
【０１０８】
上述したように、本実施の形態は、攻撃の特徴が現れる、テキストの語とマクロの挙動との双方の特徴を反映した分類に有用であり、多数の文書ファイルに対して解析するべき対象を高速に選定することに適している。このため、本実施の形態に係る選択装置１０を、サンドボックスと共に組織内ネットワークの入口に導入することによって、ネットワークを通過する多数の文書ファイルを効率的に解析することが可能である。
【０１０９】
また、本実施の形態においては、おもにVBAで記述されたマクロを内包しているMicrosoft  Office文書ファイルを前提としているが、もちろん、これに限らない。本実施の形態に係る選択装置１０は、他の形式の文書ファイルである場合や、VBA以外で記述されたプログラムである場合であっても、テキストとプログラムの両方を含む形態の文書ファイルであれば、同様に選択可能である。これは、テキストとプログラムの両方が存在すれば、テキストの特徴量とプログラムの特徴量を抽出して、同様の手順でクラスタ分析し、代表点を抽出することが可能であることによる。したがって、本実施の形態に係る選択装置１０は、例えば、悪性JavaScript（登録商標）を含むPDF形式のファイルの選択にも応用することが可能である。この場合、悪性マクロの代わりに悪性JavaScriptを分析し、MS  Office文書ファイル中のテキストの代わりにPDFファイル中のテキストを分析すればよい。また、本実施の形態においては、エミュレータを用いて実行トレースを取得しているが、もちろん、エミュレータを用いずに他の方法で実行トレースを取得してもよい。例えば、Microsoft  OfficeにAPI呼び出しやActiveXオブジェクトの生成およびメソッド呼び出しなどを監視して記録する変更を加え、実行トレースを取得してもよい。また、たとえば、実行トレース取得機能を持った仮想マシンモニタを用いて、監視されたゲストOS（Operating  System）上のMS  Officeで悪性マクロ付き文書ファイルを開くことで実行トレースを取得してもよい。また、実行トレース取得機能を、MS  OfficeへのAPIフックや動的バイナリ計装（Dynamic  Binary  Instrumentation）などで実現してもよい。
【０１１０】
［他の実施の形態］
［入れ子構造の文書ファイルへの対応]
本実施形態では単一の文書ファイルのみを対象としたが、入れ子構造となっている文書ファイルを対象としてもよい。入れ子構造となっている文書ファイルとは、たとえば、PDFファイルの中に悪性マクロ付き文書ファイルが埋め込まれたものである。この場合、PDFファイルを開くと、PDFファイルの持つJavaScriptが実行され、それによって埋め込まれた悪性マクロ付き文書ファイルが保存され開かれることで、前述の攻撃が開始される。このような場合、選択装置に、埋め込まれたファイルを取り出す機能を追加することで対応できる。前述の例では、JavaScriptを実行して埋め込まれた悪性マクロ付き文書ファイルを抽出する機能を追加する。または、ファイルのシグネチャやヘッダ、フッタの情報に基づいて抽出する（ファイルカービングと呼ばれる）手法を用いてもよい。上述の機能によってあらかじめ悪性マクロ付き文書ファイルを取り出し、実施例１に記載の手法で解析することで、入れ子構造の文書ファイルに対応できる。
【０１１１】
［システム構成等］
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び当該CPUにて解析実行されるプログラムにて実現され、或いは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１１２】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、或いは、手動的におこなわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１１３】
［プログラム］
図１３は、プログラムが実行されることにより、選択装置１０が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、CPU１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【０１１４】
メモリ１０１０は、ROM（Read  Only  Memory）１０１１及びRAM１０１２を含む。ROM１０１１は、例えば、BIOS（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【０１１５】
ハードディスクドライブ１０９０は、例えば、OS１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、選択装置１０の各処理を規定するプログラムは、コンピュータ１０００により実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、選択装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、SSDにより代替されてもよい。
【０１１６】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、CPU１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてRAM１０１２に読み出して実行する。
【０１１７】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してCPU１０２０によって読み出されてもよい。或いは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（LAN、WAN等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してCPU１０２０によって読み出されてもよい。
【０１１８】
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例及び運用技術等はすべて本発明の範疇に含まれる。
【符号の説明】
【０１１９】
１０  選択装置
１１  入力部
１２  出力部
１３  通信部
１４  記憶部
１５  制御部
１５Ａ  マクロ分析部
１６  エミュレータ
１７  ファイルハッシュデータベース（DB）
１８  マクロ特徴量DB
１９  テキスト特徴量DB
１５１  ハッシュ検査部
１５２  ファイル形式判定部
１５３  要素抽出部
１５４、１６４  実行部
１５５  実行トレース解析部
１５６  テキスト抽出部
１５７  テキスト分析部
１５８  クラスタ分析部
１５９  選択部
１６１  字句解析部
１６２  構文解析部
１６３  中間表現生成部
１６５  APIハンドラ部
１６６  オブジェクトハンドラ部
１６７  ドキュメントインタフェース部
１６８  記録部
【図１】
0006708781.tif 000002
【図２】
0006708781.tif 000003
【図３】
0006708781.tif 000004
【図４】
0006708781.tif 000005
【図５】
0006708781.tif 000006
【図６】
0006708781.tif 000007
【図７】
0006708781.tif 000008
【図８】
0006708781.tif 000009
【図９】
0006708781.tif 000010
【図１０】
0006708781.tif 000011
【図１１】
0006708781.tif 000012
【図１２】
0006708781.tif 000013
【図１３】
0006708781.tif 000014