(57)【要約】【課題】様々な環境で実装された関数を対象にして、これらの関数が特定の演算アルゴリズムを実装した関数であるか否かを識別する。【解決手段】関数抽出部１２０は、互いに異なる環境で作成された複数の学習サンプル２００の各々から、特定の演算アルゴリズムを実装したサンプル関数を抽出する。関数モデル生成部１４０は、各サンプル関数におけるオペコードの出現分布を用いて算出した各サンプル関数同士の適合度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、グループにおけるオペコードの出現分布を示す関数モデルを生成する。関数識別部１５０は、各グループの関数モデルと識別対象プログラム４００内の関数におけるオペコードの出現分布とを用いて算出した当該関数の各グループに対する適合度に基づき、当該関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別する。【選択図】図２
2011034377.tif 000002
【特許請求の範囲】
【請求項１】
複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理装置であって、
前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出部と、
前記関数抽出部により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成部と、
前記オペコード出現分布生成部により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成部により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成部とを備えることを特徴とする情報処理装置。
【請求項２】
前記オペコード出現分布生成部は、さらに、前記識別対象関数に含まれる複数のオペレーションコードを抽出して、前記識別対象関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した前記識別対象関数のオペレーションコードごとの出現回数から、前記識別対象関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した前記識別対象関数のオペコード出現分布情報を記憶装置に記憶し、
前記情報処理装置は、さらに、
前記関数モデル生成部により生成された各グループの関数モデルが示す各グループにおけるオペレーションコードの出現分布と、前記オペコード出現分布生成部により記憶された前記識別対象関数のオペコード出現分布情報が示す前記識別対象関数におけるオペレーションコードの出現分布とを用いて、前記識別対象関数の各グループに対する近似度を算出し、算出した近似度に基づき、前記識別対象関数が前記特定の演算アルゴリズムを実装した関数であるか否かを処理装置により識別する関数識別部を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記関数識別部は、算出した近似度が記憶装置に予め格納されている第１閾値より高い場合に、前記識別対象関数が前記特定の演算アルゴリズムを実装した関数であると識別し、
前記情報処理装置は、さらに、
前記関数識別部に前記識別対象関数として各サンプル関数を入力するとともに前記第１閾値として複数の第１候補値を入力して、入力した第１候補値ごとに、各サンプル関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第１候補値のいずれかを選択し、選択した第１候補値を前記第１閾値として記憶装置に格納するパラメータ格納部を備えることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記関数モデル生成部は、算出した近似度が記憶装置に予め格納されている第２閾値より高いサンプル関数同士を同じグループに分類し、
前記パラメータ格納部は、さらに、前記関数モデル生成部に前記第２閾値として複数の第２候補値を入力して、入力した第２候補値ごとに、各グループの関数モデルを生成させ、入力した第１候補値と第２候補値との組み合わせごとに、前記関数識別部に各サンプル関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第１候補値のいずれかと前記複数の第２候補値のいずれかとの組み合わせを選択し、選択した組み合わせを前記第１閾値と前記第２閾値として記憶装置に格納することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記パラメータ格納部は、さらに、前記関数識別部に前記識別対象関数として前記特定の演算アルゴリズムを実装していない関数である複数の評価関数を入力して、入力した第１候補値ごとに、各評価関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第１候補値のいずれかを選択することを特徴とする請求項３又は４に記載の情報処理装置。
【請求項６】
前記関数識別部は、前記オペコード出現分布生成部により前記識別対象関数から抽出されたオペレーションコードが抽出されなかったサンプル関数がある場合、前記関数モデル生成部により生成された各グループの関数モデルを修正し、修正した各グループの関数モデルが示す各グループにおけるオペレーションコードの出現分布と、前記オペコード出現分布生成部により記憶された前記識別対象関数のオペコード出現分布情報が示す前記識別対象関数におけるオペレーションコードの出現分布とを用いて、前記識別対象関数の各グループに対する近似度を算出することを特徴とする請求項２から５までのいずれかに記載の情報処理装置。
【請求項７】
前記情報処理装置は、さらに、
異なるプログラミング言語又は異なるコンパイラを用いて作成された複数のプログラムの実行ファイルを処理装置により逆アセンブルして複数のアセンブリコードを生成する逆アセンブラ部を備え、
前記関数抽出部は、前記逆アセンブラ部により生成された複数のアセンブリコードの各アセンブリコードに含まれるサンプル関数を処理装置により抽出することを特徴とする請求項１から６までのいずれかに記載の情報処理装置。
【請求項８】
複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理方法であって、
コンピュータが、前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出ステップと、
コンピュータが、前記関数抽出ステップにより抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成ステップと、
コンピュータが、前記オペコード出現分布生成ステップにより記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成ステップにより計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成ステップとを備えることを特徴とする情報処理方法。
【請求項９】
複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成するプログラムであって、
前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出処理と、
前記関数抽出処理により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成処理と、
前記オペコード出現分布生成処理により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成処理により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成処理とをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理方法及びプログラムに関するものである。本発明は、特に、プログラムの実行ファイルを検査し、特定の演算アルゴリズムの実現コードを含むかどうかを判定するための方法（プログラムコード解析方法）、及び、その方法を実現する装置（プログラムコード解析装置）に関するものである。
【背景技術】
【０００２】
近年、ウイルスやＰ２Ｐ（ピアツーピア）通信を利用したファイル共有のように、社会的に問題となるプログラム（以下、マルウェアと呼ぶ）が増加している。マルウェアによる被害を防ぐためには、マルウェアがどのような挙動をするのかを知り、マルウェア自身もしくはマルウェアの行動を識別する必要がある。
【０００３】
例えば、マルウェアの通信方法を知ることができれば、該当する通信を遮断することでマルウェアの行動を防止することが可能であるし、マルウェアのデータに特定のパターンがあることが分かれば、そのパターン（シグネチャと呼ばれる）を利用して、マルウェアであるかを識別することが可能である。同様に、マルウェアがどのような機能（演算アルゴリズムを備えた関数やＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ・Ｐｒｏｇｒａｍｍｉｎｇ・Ｉｎｔｅｒｆａｃｅ））を備えているか知ることにより、マルウェアの挙動の解析に役立てることができる。
【０００４】
プログラムの挙動や備えている機能（演算アルゴリズムを備えた関数やＡＰＩ）を解析する方法としては、大きく分けて静的、動的の２つのタイプがある。静的な方法では、プログラムの実行ファイルやプログラムのソースコードを解析する。動的な方法では、プログラムを動作させ、その挙動や出力されるデータ等を収集・解析する。以下では、静的な方法を対象として説明する。
【０００５】
マルウェア等のプログラムを静的な方法で解析する手法としては、様々な技術が知られている（例えば、特許文献１〜７参照）。静的な解析を行う場合、人間が理解しやすい記述となっているソースコードがあれば、プログラムの挙動を比較的容易に知ることができる。しかしながら、マルウェア等のプログラムについては解析の手助けとなるソースコードが得られないことが多いため、実行ファイルを解析してプログラムの挙動を解析しなくてはならない。実行ファイルはオブジェクトコードで構成されており、逆アセンブルを実行することでアセンブリコードに変換することができるが、完全に元のソースコードが再現されるわけではなく、また、アセンブリコードは人間が理解しにくい記述となっているため、プログラムを解析するために非常に大きなコストがかかるという問題がある。
【０００６】
例えば、プログラムの実行ファイルからウイルスを検出する手法として、特許文献１に記載のものがある。特許文献１では、実行プログラムにウイルスや悪意のあるコードが含まれているかを検出するために、まず、コンパイラを特定し、特定の処理実行時におけるコンパイラの特徴（例えば、Ａという処理を実行すると、必ずＢというオペコード（オペレーションコード）が出現するといった特徴）を利用して、ある特定の処理の実行回数に対して、対応するオペコードの出現分布が一定の範囲内であるかどうかを算出することで本来のコードにウイルス等の別のコードが埋め込まれているかを判断する方法について記載されている。
【０００７】
また、例えば、実行ファイル内に存在するウイルスや悪意のあるコード等、特定の演算アルゴリズムを実装した関数を識別する手法として、シグネチャ方式がある。シグネチャ方式とは、プログラムコード上の固有の特徴（パターン）を記したパターンファイルを用いて、ファイルを精査し、一致すれば該当するモジュールが含まれていると判断する方法である。暗号アルゴリズムを例にとると、Ｓ−ＢＯＸや置換表や初期値等が固定パターンとして用いられる。しかしながら、動的にＳ−ＢＯＸを生成するＲＣ４（Ｒｉｖｅｓｔ・Ｃｉｐｈｅｒ・４）や、数学的手法で鍵を生成するＲＳＡ（登録商標）（Ｒｉｖｅｓｔ・Ｓｈａｍｉｒ・Ａｄｌｅｍａｎ）のような暗号アルゴリズムについては、前述のような特徴となる固定的なデータ列が存在しないため、識別が困難であるという課題があった。
【０００８】
このような課題を解決する手法として、特許文献２に記載のものがある。特許文献２では、演算アルゴリズムにおけるオペコード出現回数と識別対象プログラムにおけるオペコード出現回数とを用いて演算アルゴリズムと識別対象プログラムとの近似度を算出するので、特定のライブラリ等を用いることなく、識別対象プログラムに特定の演算アルゴリズムが用いられているか否かを判断することができる。
【０００９】
非特許文献１には、マルウェアには悪意のないプログラム（非特許文献１内ではＧｏｏｄｗａｒｅと表記）と比べて実行ファイルに含まれるオペコードの分布に違いがあるという研究成果が記載されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特表２００６−５１００８９号公報
【特許文献２】特開２００８−２９９３６１号公報
【特許文献３】特開平６−６７８７０号公報
【特許文献４】特開平６−２５０８６１号公報
【特許文献５】特表２００６−５２２３９５号公報
【特許文献６】特開２００８−１９２１２２号公報
【特許文献７】特開２００９−３７５４５号公報
【非特許文献】
【００１１】
【非特許文献１】Ｄａｎｉｅｌ  Ｂｉｌａｒ，  “Ｏｐｃｏｄｅｓ  ａｓ  ｐｒｅｄｉｃｔｏｒ  ｆｏｒ  ｍａｌｗａｒｅ，”  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｊｏｕｒｎａｌ  ｏｆ  Ｅｌｅｃｔｒｏｎｉｃ  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｄｉｇｉｔａｌ  Ｆｏｒｅｎｓｉｃｓ，  Ｖｏｌ．  １，  Ｎｏ．  ２，  ｐｐ．  １５６−１６８，  Ｍａｙ  ２００７
【発明の概要】
【発明が解決しようとする課題】
【００１２】
特許文献１に記載の手法においては、コンパイラに特徴のない部分にウイルス等の悪意のあるコードが含まれている場合、それを検出できないという課題があった。固定パターンをシグネチャとする従来手法においては、検出対象部分を修正したり、実行ファイルの生成環境を変更したりするだけで簡単に検出できなくなるという弱点があり、日々大量の亜種が発生している現在では全てのマルウェアに対応しきれないという課題があった。他の従来手法においても、様々な環境で作成されるマルウェア等のプログラムの全てを対象にして、特定の演算アルゴリズムを実装した関数を含むプログラムを自動的に識別することは困難であるという課題があった。
【００１３】
本発明は、例えば、様々な環境で実装された関数を対象にして、これらの関数が特定の演算アルゴリズムを実装した関数であるか否かを識別することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一の態様に係る情報処理装置は、
複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理装置であって、
前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出部と、
前記関数抽出部により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成部と、
前記オペコード出現分布生成部により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成部により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成部とを備えることを特徴とする。
【発明の効果】
【００１５】
本発明の一の態様によれば、互いに異なる環境で作成された複数のプログラムの各プログラムから、特定の演算アルゴリズムを実装したサンプル関数を抽出し、各サンプル関数におけるオペレーションコードの出現分布を用いて算出した各サンプル関数同士の近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、グループにおけるオペレーションコードの出現分布を示す関数モデルを生成するため、様々な環境で実装された関数を対象にして、これらの関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に係るプログラムコード解析システムの構成例を示す図である。
【図２】実施の形態１に係るプログラムコード解析装置の構成例を示すブロック図である。
【図３】実施の形態１に係るプログラムコード解析装置のハードウェア構成の一例を示す図である。
【図４】実施の形態１に係るプログラムコード解析システムの動作を示すフローチャートである。
【図５】実施の形態１に係るプログラムコード解析システムの動作を示すフローチャートである。
【図６】実施の形態１に係るプログラムコード解析システムの動作を示すフローチャートである。
【図７】実施の形態１に係るプログラムコード解析システムの動作を示すフローチャートである。
【図８】実施の形態２に係るプログラムコード解析システムの構成例を示す図である。
【図９】実施の形態２に係るプログラムコード解析装置の構成例を示すブロック図である。
【図１０】実施の形態２に係るプログラムコード解析システムの動作を示すフローチャートである。
【図１１】実施の形態２に係るプログラムコード解析システムの動作を示すフローチャートである。
【図１２】実施の形態２に係るプログラムコード解析システムの動作を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図を用いて説明する。
【００１８】
実施の形態１．
本実施の形態では、処理内容に特徴のある演算アルゴリズムを備えたプログラムは一般的なプログラムとオペコード（オペレーションコード）の出現分布が異なることを利用し（例えば、非特許文献１参照）、１つ以上の学習サンプルからオペコードの出現分布に関して関数モデルを生成し、識別対象関数に含まれるオペコードの出現分布と関数モデルとの適合度判定を実施して識別対象プログラムに特定の演算アルゴリズムが含まれているか識別する。ここで、識別対象プログラムとは、識別対象となるプログラムのことをいう。識別対象関数とは、識別対象プログラムの実行ファイルから抽出した関数のことをいう。学習サンプルとは、識別させたい演算アルゴリズムを実装した関数を含むプログラムのことをいう。関数モデルとは、学習により生成した、特定の演算アルゴリズムに用いられる関数に含まれるオペコードの出現回数をオペコードごとに示す情報のことをいう。適合度判定については後述する。
【００１９】
図１は、本実施の形態に係るプログラムコード解析システム１０００の構成例を示す図である。
【００２０】
図１において、プログラムコード解析システム１０００は、プログラムコード解析装置１００（情報処理装置）を備える。
【００２１】
まず、プログラムコード解析装置１００は、識別させたい演算アルゴリズムを実装した１つ以上の学習サンプル２００の入力を受け付ける（Ｐ１）。そして、プログラムコード解析装置１００は、学習サンプル２００から、識別させたい演算アルゴリズムについて学習し、オペコードの出現分布に対する関数モデルを生成する。ここで、同じ演算アルゴリズムでも生成環境（実装方法やコンパイル方法）によって生成されるプログラムに出現するオペコードには差異が発生する。そのため、プログラムコード解析装置１００は、学習サンプル２００内の関数を、それぞれ環境が近いもの同士でグループ化し、グループごとの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成する。即ち、プログラムコード解析装置１００は、学習サンプル２００内の関数（サンプル関数）に出現するオペコードの数を学習し、プログラムの実行ファイルの生成環境におけるオペコードの出現分布の違いを考慮して生成環境が近いもの同士で１つ以上のグループを生成し、グループごとに上記演算アルゴリズムの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成する（Ｐ２）。図１において、三日月、星、十字の印は同じ演算アルゴリズムだが生成環境に違いがあるプログラム（学習サンプル２００）及び当該プログラムから生成された関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）であることを示している。
【００２２】
次に、プログラムコード解析装置１００は、識別対象プログラム４００の入力を受け付ける（Ｐ３）。そして、プログラムコード解析装置１００は、識別対象関数のオペコードの出現分布と関数モデルとの適合度を算出し、適合度が閾値より大きければ、識別対象プログラム４００に特定の演算アルゴリズムが含まれていると識別する。即ち、プログラムコード解析装置１００は、グループごとの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）に対する識別対象プログラム４００内の関数（識別対象関数）の適合度を算出し（Ｐ４）、適合度から識別対象プログラム４００に上記演算アルゴリズムが含まれているか解析し、解析結果をユーザ端末５００に出力する（Ｐ５）。ここで、ユーザ端末５００は、ユーザによって利用される端末装置であり、例えばＰＣ（パーソナルコンピュータ）である。
【００２３】
上記のように、本実施の形態において、プログラムコード解析装置１００（情報処理装置）は、関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成する。関数モデルは、複数のオペコードを含む関数が特定の演算アルゴリズム（例えば、マルウェアに特有の演算アルゴリズム）を実装した関数であるか否かを識別するために用いられる。具体的には、関数モデルと識別対象となる識別対象関数（例えば、マルウェアだと疑われるプログラムに含まれる関数）との適合度（近似度）が算出され、算出された適合度に基づいて識別対象関数が上記特定の演算アルゴリズムを実装した関数であるか否かが識別される。
【００２４】
適合度の算出には適合度判定を利用することができる。本実施の形態では、適合度判定に必要な標本として、プログラムの関数内に出現するオペコードを利用する。
【００２５】
以下、適合度判定について説明する。
【００２６】
適合度判定とは、あるモデルに対して、識別対象がどれほど適合しているかをΧ２（カイ二乗）とΧ２分布を利用して判定する手法である。まず、Χ２を以下の式１を用いて算出する。
【数１】
2011034377.tif 000003
【００２７】
本実施の形態では、式１のＥｉとＯｉを次のように定義する。
【数２】
2011034377.tif 000004
【００２８】
ここで、関数モデルに出現するｎ種類のオペコードの出現数をＡ１〜Ａｎ、その和をΣＡと表し、識別対象関数について、各オペコードの出現数をＢ１〜Ｂｎ、その和をΣＢと表すと、式１は以下のように表せる。
【数３】
2011034377.tif 000005
【００２９】
ここで、Ａｉが０である場合、Ｅｉが０となってしまい、式２に適用できない。しかし、Ａｉが０である場合には、関数モデルに存在しないオペコードｉが識別対象関数に出現しているということになり、この場合のＥｉは、大いに関数モデルと識別対象関数を識別する特徴となり得るものである。したがって、この場合のＥｉが式２に代入できないためにΧ２に影響しないのでは識別性能の低下に繋がる可能性がある。そこで、本実施の形態では、Ａｉが０である場合、Ａｉに０より大きく１より小さい値（０に近いほど、関数モデルにないオペコードが識別対象関数に含まれることによる影響が大きくなる）を適用することで、関数モデルに存在しないオペコードが識別対象関数に出現している場合の適合度への影響を結果に反映することができる。
【００３０】
次に、式２で算出したΧ２をΧ２分布に適用し、関数モデルに対する適合度を算出する。適合度Ｐ（ｘ，ｋ）は式３で表されるΧ２分布の確率密度関数ｆ（ｘ，ｋ）においてｘ以上の値となる確率を表し、以下の式４で表される。
【数４】
2011034377.tif 000006
【００３１】
ここで、ｋはΧ２分布の自由度を表し、適合度判定に用いる標本の数から１を引いた数がｋとして用いられる。つまり、本実施の形態では適合度判定に用いたオペコードの種類ｎから１を引いたｎ−１を自由度として用いる。
【００３２】
適合度Ｐ（ｘ，ｋ）は０〜１の範囲で表され、ｘにΧ２を代入することで得られる。適合度が大きいほど識別対象関数が関数モデルに適合していることを示しており、適合度が設定した有意水準より高ければ識別対象関数が関数モデルに適合していると識別され、逆に有意水準より低ければ識別対象関数が関数モデルに適合していないと識別される。一般に有意水準には０．０１か０．０５が用いられることが多いが、本実施の形態では、有意水準を自由に設定可能である。なお、後述する他の実施の形態のように、自動的に推奨するパラメータとして有意水準を算出することもできる。
【００３３】
図２は、プログラムコード解析装置１００の構成例を示すブロック図である。
【００３４】
図２において、プログラムコード解析装置１００は、逆アセンブラ部１１０と、関数抽出部１２０と、オペコード出現分布生成部１３０と、関数モデル生成部１４０と、関数識別部１５０と、パラメータ格納部１６０とを備える。関数モデル生成部１４０は、グループ化実行部１４１と関数モデルデータベース部１４２とを備える。関数識別部１５０は、適合度算出部１５１と判定部１５２と識別結果データベース部１５３とを備える。
【００３５】
また、図示していないが、プログラムコード解析装置１００は、処理装置、記憶装置、入力装置、出力装置等のハードウェアを備える。ハードウェアはプログラムコード解析装置１００の各部によって利用される。例えば、処理装置は、プログラムコード解析装置１００の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータや情報を記憶するために利用される。入力装置は、そのデータや情報を入力するために、出力装置は、そのデータや情報を出力するために利用される。
【００３６】
逆アセンブラ部１１０は、１つ以上の学習サンプル２００、識別対象プログラム４００等のプログラムを処理装置により逆アセンブルし、アセンブリコードを生成する。関数抽出部１２０は、逆アセンブラ部１１０により生成されたアセンブリコードに含まれる関数を処理装置により抽出する。なお、学習サンプル２００としては、異なる環境（実装方法やコンパイル方法）で生成されたものを２つ以上用いることが望ましい。また、学習サンプル２００は、元からアセンブリコードの形式のものを用いてもよい。
【００３７】
オペコード出現分布生成部１３０は、関数抽出部１２０によりアセンブリコードから抽出された関数に含まれるオペコードごとにオペコードの出現回数を処理装置により計数し、オペコードの出現分布を生成する。
【００３８】
関数モデル生成部１４０は、１つ以上の学習サンプル２００から抽出された関数（サンプル関数）それぞれのオペコードの出現分布を利用して、１つ以上の関数モデルを生成する。関数モデル生成部１４０において、グループ化実行部１４１は、オペコード出現分布生成部１３０により生成されたサンプル関数ごとのオペコードの出現分布とパラメータ格納部１６０に格納されているグループ化パラメータとに基づいて、オペコードの出現分布の近いもの同士を同じグループに処理装置により分類する。即ち、前述した適合度判定を行ってサンプル関数をグループ化する。ここで、グループ化パラメータは適合度の閾値である。グループ化実行部１４１は、グループごとに関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成し、生成した関数モデルを記憶装置に実装される関数モデルデータベース部１４２に登録する。
【００３９】
関数識別部１５０は、識別対象プログラム４００から抽出された関数（識別対象関数）の関数モデルに対する適合度（近似度）を算出し、識別パラメータと比較して識別対象関数が関数モデルに適合するかどうかを判定する。即ち、前述した適合度判定を行って識別対象関数を識別する。ここで、識別パラメータは適合度の閾値である。関数識別部１５０において、適合度算出部１５１は、オペコード出現分布生成部１３０により生成された識別対象関数ごとのオペコードの出現分布と関数モデルデータベース部１４２に登録された関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）とを用いて、識別対象関数の関数モデルに対する適合度を処理装置により算出する。判定部１５２は、適合度算出部１５１により算出された適合度とパラメータ格納部１６０に格納されている識別パラメータに基づき、識別対象プログラム４００に特定の演算アルゴリズムが用いられているか否かを処理装置により判定し、判定結果（識別結果）を記憶装置に実装される識別結果データベース部１５３に登録する。
【００４０】
パラメータ格納部１６０は、グループ化、識別におけるパラメータを格納する。パラメータ格納部１６０において、パラメータ格納部１６０は、オペコードの出現分布のグループ化のためのパラメータとして、グループ化パラメータを記憶装置に格納する。前述したように、グループ化パラメータの値を超える適合度が算出されたオペコードの出現分布の組み合わせは、同一グループに分類される。また、パラメータ格納部１６０は、識別対象関数が関数モデルで表される演算アルゴリズムに類似するかどうかを判断するためのパラメータとして、識別パラメータを記憶装置に格納する。前述したように、識別パラメータの値を超える適合度が算出された場合、識別対象関数が関数モデルの基となる演算アルゴリズムを実装した関数であると判断される。さらに、パラメータ格納部１６０は、前述した適合度判定にて、関数モデルに含まれないオペコードが識別対象関数に含まれていた場合、即ち、Ａｉが０となる場合のＡｉの値を設定する適合度パラメータを記憶装置に格納する。前述したように、適合度パラメータは０より大きく１より小さい値を取り、０に近いほど、関数モデルに含まれないオペコードが識別対象関数に含まれていた場合に、Χ２の値が大きくなる（適合度が小さくなる）。
【００４１】
上記のように、本実施の形態において、関数抽出部１２０は、複数（１つでもよいが、複数が望ましい）の学習サンプル２００（複数のプログラム）の各プログラムから、サンプル関数を処理装置により抽出する。学習サンプル２００は、特定の演算アルゴリズム（例えば、マルウェアに特有の演算アルゴリズム）を実装した関数をサンプル関数として含むプログラムである。複数の学習サンプル２００の間で、サンプル関数が実装する演算アルゴリズムは共通するが、それぞれの学習サンプル２００は、互いに異なる環境で作成されたものであることが望ましい。例えば、それぞれの学習サンプル２００は、互いに異なるプログラミング言語又は異なるコンパイラを用いて作成されたものであることが望ましい。逆アセンブラ部１１０が複数の学習サンプル２００の実行ファイルを処理装置により逆アセンブルして複数のアセンブリコードを生成するのであれば、関数抽出部１２０は、逆アセンブラ部１１０により生成された複数のアセンブリコードの各アセンブリコードに含まれるサンプル関数を処理装置により抽出する。
【００４２】
オペコード出現分布生成部１３０は、関数抽出部１２０により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペコードを抽出して、当該サンプル関数におけるオペコードの出現回数をオペコードごとに処理装置により計数する。そして、オペコード出現分布生成部１３０は、計数した各サンプル関数のオペコードごとの出現回数から、各サンプル関数におけるオペコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶する。
【００４３】
関数モデル生成部１４０は、オペコード出現分布生成部１３０により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペコードの出現分布を用いて、各サンプル関数同士の適合度（近似度）を処理装置により算出する。そして、関数モデル生成部１４０は、算出した適合度（近似度）に基づき、各サンプル関数を複数のグループに分類する。具体的には、関数モデル生成部１４０は、算出した適合度（近似度）が記憶装置（パラメータ格納部１６０）に予め格納されているグループ化パラメータ（第２閾値）より高いサンプル関数同士を同じグループに分類する。関数モデル生成部１４０は、分類したグループごとに、オペコード出現分布生成部１３０により計数された同じグループに属するサンプル関数のオペコードごとの出現回数から、当該グループにおけるオペコードの出現分布を示す関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成する。
【００４４】
また、本実施の形態において、関数抽出部１２０は、さらに、識別対象プログラム４００（例えば、マルウェア）から、識別対象関数を処理装置により抽出する。具体的には、関数抽出部１２０は、逆アセンブラ部１１０が識別対象プログラム４００の実行ファイルを逆アセンブルして生成したアセンブリコードに含まれる関数を識別対象関数として処理装置により抽出する。
【００４５】
オペコード出現分布生成部１３０は、さらに、関数抽出部１２０により抽出された識別対象関数に含まれる複数のオペコードを抽出して、識別対象関数におけるオペコードの出現回数をオペコードごとに処理装置により計数する。そして、オペコード出現分布生成部１３０は、計数した識別対象関数のオペコードごとの出現回数から、識別対象関数におけるオペコードの出現分布を示すオペコード出現分布情報を生成し、生成した識別対象関数のオペコード出現分布情報を記憶装置に記憶する。
【００４６】
関数識別部１５０は、関数モデル生成部１４０により生成された各グループの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）が示す各グループにおけるオペコードの出現分布と、オペコード出現分布生成部１３０により記憶された識別対象関数のオペコード出現分布情報が示す識別対象関数におけるオペコードの出現分布とを用いて、識別対象関数の各グループに対する適合度（近似度）を算出する。このとき、オペコード出現分布生成部１３０により識別対象関数から抽出されたオペコードが抽出されなかったサンプル関数がある場合、関数識別部１５０は、関数モデル生成部１４０により生成された各グループの関数モデルを修正し、修正した各グループの関数モデルが示す各グループにおけるオペコードの出現分布と、オペコード出現分布生成部１３０により記憶された識別対象関数のオペコード出現分布情報が示す識別対象関数におけるオペコードの出現分布とを用いて、識別対象関数の各グループに対する適合度（近似度）を算出する。そして、関数識別部１５０は、算出した適合度（近似度）に基づき、識別対象関数が上記特定の演算アルゴリズムを実装した関数であるか否かを処理装置により識別する。具体的には、関数識別部１５０は、算出した適合度（近似度）が記憶装置（パラメータ格納部１６０）に予め格納されている識別パラメータ（第１閾値）より高い場合に、識別対象関数が上記特定の演算アルゴリズムを実装した関数であると識別する。
【００４７】
上記のような各部の機能により、本実施の形態では、様々な環境で実装された関数を対象にして、これらの関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別することが可能となる。
【００４８】
図３は、プログラムコード解析装置１００のハードウェア構成の一例を示す図である。
【００４９】
図３において、プログラムコード解析装置１００は、コンピュータであり、ＬＣＤ９０１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ９０６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ９０１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス９０３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００５０】
プログラムコード解析装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ９１１は、処理装置の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、ＬＣＤ９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ９０６、ＨＤＤ９２０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
【００５１】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５は、入力装置の一例である。また、通信ボード９１５、ＬＣＤ９０１、プリンタ９０６は、出力装置の一例である。
【００５２】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード９１５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００５３】
ＨＤＤ９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ９１１により読み出され実行される。ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶される。ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００５４】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ９１４等のメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、ＨＤＤ９２０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス９１２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００５５】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００５６】
以下、プログラムコード解析システム１０００の動作について説明する。
【００５７】
図４〜図７は、プログラムコード解析システム１０００の動作を示すフローチャートである。これらのフローチャートにおいて、Ｕから始まる通し番号が付与されている四角の項目はユーザ端末５００が実施する処理を表している。また、Ｓから始まる通し番号が付与されている四角の項目はプログラムコード解析装置１００が実施する処理を表しており、Ｂから始まる通し番号が付与されているひし形の項目は分岐処理を表している。
【００５８】
図４は、プログラムコード解析システム１０００の動作の全体像を示すフローチャートである。
【００５９】
図４において、プログラムコード解析システム１０００の動作の全体の流れを複数のフェーズに分けている。プログラムコード解析システム１０００の動作は、大きく関数モデルを生成する学習フェーズＦ１１００と、生成した関数モデルを利用して識別対象関数を識別する識別フェーズＦ１２００とに分けられる。学習フェーズＦ１１００は、学習サンプル２００を読み込むサンプル読み込みフェーズＦ１１１０と、読み込んだ学習サンプル２００から１つ以上のグループを生成してグループごとに関数モデルを生成するグループ化フェーズＦ１１２０とに分けられる。以下では、各フェーズにおけるプログラムコード解析システム１０００の動作について説明する。
【００６０】
図５は、プログラムコード解析システム１０００のサンプル読み込みフェーズＦ１１１０の動作を示すフローチャートである。
【００６１】
図５のＵ００１において、ユーザは、ユーザ端末５００を用いて学習サンプル２００をプログラムコード解析装置１００に入力する。入力された学習サンプル２００は逆アセンブラ部１１０に送られる。Ｓ００２において、逆アセンブラ部１１０は、入力された学習サンプル２００を逆アセンブルしてアセンブリコードを処理装置により生成し、関数抽出部１２０に入力する。Ｓ００３において、関数抽出部１２０は、アセンブリコードから関数部分を処理装置により抽出し、ユーザ端末５００の画面に表示する。
【００６２】
図５のＵ００４において、ユーザが学習させたい演算アルゴリズムを実装した関数部分を指定すると、関数抽出部１２０は、指定部分のアセンブリコードをオペコード出現分布生成部１３０に入力する。Ｓ００５において、オペコード出現分布生成部１３０は、入力された演算アルゴリズムを実装した関数部分内に出現する全てのオペコードを処理装置により抽出し、オペコードごとの出現回数を処理装置により計数し、オペコードの出現分布を生成し、関数モデル生成部１４０に入力する。Ｂ００６において、さらに学習サンプル２００を追加する場合はＵ００１に戻る。これ以上学習サンプル２００を追加しない場合はサンプル読み込みフェーズＦ１１１０を終了する。
【００６３】
図６は、プログラムコード解析システム１０００のグループ化フェーズＦ１１２０の動作を示すフローチャートである。
【００６４】
図６のＢ００７において、グループ化実行部１４１は、保持しているオペコードの出現分布（サンプル読み込みフェーズＦ１１１０から入力されたもの、及び、後述するＳ０１０にて生成されたもの）が２つ以上あるかどうか確認し、２つ以上あればＳ００８に、１つしかなければＳ０１１に進む。
【００６５】
図６のＳ００８において、グループ化実行部１４１は、保持している２つ以上のオペコードの出現分布から２つのオペコードの出現分布を取り得る全ての組み合わせで抽出し、組み合わせごとに適合度を処理装置により算出し、最も適合度が高い組み合わせ（出現分布Ａと出現分布Ｂとする）を選択する。Ｂ００９において、グループ化実行部１４１は、パラメータ格納部１６０からグループ化パラメータをを取得する。そして、グループ化実行部１４１は、Ｓ００８にて選択した出現分布Ａと出現分布Ｂが、互いに類似する環境にて実装された関数から抽出したもの（同一グループであると分類するもの）であるかどうかを、グループ化パラメータを用いて処理装置により判別する。適合度がグループ化パラメータを超えていればＳ０１０に、超えていなければＳ０１１に進む。
【００６６】
図６のＳ０１０において、グループ化実行部１４１は、Ｓ００８にて抽出した出現分布Ａと出現分布Ｂが類似する環境にて実装された関数のものであると処理装置により判断し、出現分布Ａと出現分布Ｂを加算することで１つの出現分布にまとめ、Ｂ００７に戻る。
【００６７】
図６のＳ０１１において、グループ化実行部１４１は、現時点で残っているオペコードの出現分布（出現分布１、出現分布２、・・・、出現分布Ｍ）を関数モデル（関数１、関数２、・・・、関数Ｍ）として、関数モデルデータベース部１４２に登録する。
【００６８】
このように、グループ化フェーズＦ１１２０では、入力されたオペコードの出現分布のうち、最も適合度の高い組み合わせから順にグループ化を実施し、適合度の最大値がグループ化パラメータを超えなくなるか、オペコードの出現分布が１つになるまで、グループ化を繰り返すことにより、実装方法やコンパイラの違い等によりオペコードの出現分布の違いが発生することを考慮した関数モデルを生成する。
【００６９】
図７は、プログラムコード解析システム１０００の識別フェーズＦ１２００の動作を示すフローチャートである。
【００７０】
図７のＵ０１２において、ユーザは、ユーザ端末５００を用いて識別対象プログラム４００をプログラムコード解析装置１００に入力する。入力された識別対象プログラム４００は、逆アセンブラ部１１０に送られる。Ｓ０１３において、逆アセンブラ部１１０は、入力された識別対象プログラム４００を逆アセンブルしてアセンブリコードを処理装置により生成し、関数抽出部１２０に入力する。Ｓ０１４において、関数抽出部１２０は、アセンブリコードから関数部分（関数１、関数２、・・・、関数Ｎ）を抽出し、関数ごとのアセンブリコードをオペコード出現分布生成部１３０に入力する。Ｓ０１５において、オペコード出現分布生成部１３０は、入力された関数部分内に出現する全てのオペコードを処理装置により抽出し、オペコードごとの出現回数を処理装置により計数し、オペコードの出現分布（出現分布１、出現分布２、・・・、出現分布Ｎ）を生成し、関数ごとのオペコードの出現分布を関数識別部１５０に入力する。
【００７１】
図７のＳ０１６において、適合度算出部１５１は、関数モデルデータベース部１４２から関数モデルＪ（Ｊは１〜Ｍ）を取得する。そして、適合度算出部１５１は、関数モデルＪ（Ｊは１〜Ｍ）それぞれに対する、Ｓ０１５で入力されたオペコードの出現分布Ｉ（Ｉは１〜Ｎ）の適合度を処理装置により算出し、判定部１５２に入力する。Ｓ０１７において、判定部１５２は、パラメータ格納部１６０から識別パラメータを取得する。そして、判定部１５２は、Ｓ０１６で算出された適合度が識別パラメータより大きければ、関数Ｉ（Ｉは１〜Ｎ）が関数モデルＪ（Ｊは１〜Ｍ）に適合すると処理装置により判断する。Ｓ０１８において、判定部１５２は、Ｓ０１７の結果を識別結果データベース部１５３に登録する。Ｂ０１９において、全ての関数Ｉ（Ｉは１〜Ｎ）に対する処理が終了していればＳ０２０に進み、処理がまだ終了していなければＳ０１６に戻る。
【００７２】
図７のＳ０２０において、識別結果データベース部１５３は、識別対象プログラム４００に対して登録されている結果（識別された関数のリスト）をユーザ端末５００に対して出力する（例えば、画面に表示する）。
【００７３】
上記のように、本実施の形態では、識別対象プログラム４００と特定の演算アルゴリズムとの類似度を比較解析して、識別対象プログラム４００内に学習した演算アルゴリズムが含まれているかどうかを識別することができる。また、関数をグループ化することにより、プログラムの実行ファイルの生成環境の違いを考慮した精度の高い識別ができる。
【００７４】
本実施の形態では、マルウェアには悪意のないプログラムと比べて実行ファイルに含まれるオペコードの分布に違いがあること（例えば、非特許文献１参照）等を利用して、マルウェア等、一般のプログラムと比べて処理に特徴のある演算アルゴリズムを持つプログラムをオペコードの分布の近似度を判定して識別する。まず、ある演算アルゴリズム（関数Ｘとする）に対して１つ以上の学習サンプル２００を利用し、関数Ｘにおけるオペコードの出現分布に関する学習を行い、実装環境に応じて１つ以上の関数Ｘの関数モデルを生成する。次に、識別対象関数のオペコードの出現分布と学習により生成した関数モデルとの適合度（近似度）を算出することで、識別対象プログラム４００内に演算アルゴリズムが含まれているかどうかを識別する。このように、マルウェアのように、例えばソフトウェア割り込み命令の割合が多い等、一般的なプログラムとは異なる特徴を持つ演算アルゴリズムを実装した関数が識別対象プログラム４００の実行ファイルに含まれるかどうか識別することで、プログラムの解析に必要な時間を大幅に短縮することが可能となる。
【００７５】
前述したように、実装方法や用いるコンパイラ等、プログラムの実行ファイルの生成環境の違いにより、大小はあるが、生成されるプログラムの実行ファイルに含まれるオペコードの出現分布には違いがある。このとき、違いが大きいものを同じ関数モデルにまとめてしまうと、プログラムの実行ファイルの生成環境の違いによって生じた特徴を平滑化することになり、識別性能の低下に繋がる可能性がある。そのため、本実施の形態では、プログラムコード解析装置１００が、関数モデル生成時に学習サンプル２００を適合度によりオペコードの出現分布が近いもの同士のグループに分類し、グループごとに関数モデルを生成する。つまり、プログラムコード解析装置１００が各関数モデルを実装方法やコンパイラの違いによる亜種のモデルとして利用するため、識別性能の低下を回避することができる。
【００７６】
以上説明したように、本実施の形態に係るプログラムコード解析装置１００は、
入力したプログラムの実行ファイルを逆アセンブルし、アセンブリコードに変換する逆アセンブラ部１１０と、
逆アセンブラ部１１０から得たアセンブリコード内に存在する関数を抽出する関数抽出部１２０と、
抽出した関数に含まれるオペコードの出現分布を生成するオペコード出現分布生成部１３０と、
識別させたい関数（関数Ｘとする）を実装した１つ以上のプログラム（学習サンプル２００）から得た、１つ以上のオペコードの出現分布から、１つ以上の関数Ｘのオペコード出現分布のモデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成する関数モデル生成部１４０と、
関数モデル生成部１４０において、学習サンプル２００同士のオペコードの出現分布の適合度から１つ以上のグループに分類し、グループごとに関数モデルを生成するグループ化実行部１４１と、
関数Ｘの関数モデルに対して識別対象プログラム４００から抽出した関数（識別対象関数）との適合度を算出し、識別対象関数が関数Ｘであるかどうか識別する関数識別部１５０と、
グループ化及び識別を実施するためのパラメータを格納するパラメータ格納部１６０とを備えることを特徴とする。
【００７７】
したがって、本実施の形態によれば、識別対象関数に含まれるオペコード出現分布と関数モデルのオペコードの出現分布とを用いて識別対象関数が関数モデルに適合するかを識別するため、特定のライブラリ等を用いることなく、識別対象プログラム４００に特定の演算アルゴリズムが用いられているか否かを識別することができる。また、グループ化することで、プログラムの実行ファイルの生成環境の違いを考慮したより性能の高い識別が可能となる。
【００７８】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【００７９】
図８は、本実施の形態に係るプログラムコード解析システム１００１の構成例を示す図である。
【００８０】
図８において、プログラムコード解析システム１００１は、図１に示した実施の形態１に係るプログラムコード解析装置１００の内部に推奨パラメータ自動生成の機能を追加したプログラムコード解析装置１０１（情報処理装置）を備える。推奨パラメータ自動生成の機能については後述する。
【００８１】
まず、プログラムコード解析装置１０１は、実施の形態１と同様に、識別させたい演算アルゴリズムを実装した１つ以上の学習サンプル２００の入力を受け付けるとともに（Ｐ１）、本実施の形態では、上記推奨パラメータ自動生成における評価のための評価サンプル６００の入力を受け付ける（Ｐ２）。評価サンプル６００は、学習サンプル２００とは逆に、識別させたい演算アルゴリズムを実装していない関数のみを含むプログラムである。プログラムコード解析装置１０１は、実施の形態１と同様に、学習サンプル２００内の関数（サンプル関数）に出現するオペコードの数を学習し、プログラムの実行ファイルの生成環境におけるオペコードの出現分布の違いを考慮して生成環境が近いもの同士で１つ以上のグループを生成し、グループごとに上記演算アルゴリズムの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）を生成するとともに、上記推奨パラメータ自動生成を実行する（Ｐ３）。図８において、三日月、星、十字の印は同じ演算アルゴリズムだが生成環境に違いがあるプログラム（学習サンプル２００）及び当該プログラムから生成された関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）であることを示している。一方、バツの印は異なる演算アルゴリズムを実装したプログラム（評価サンプル６００）であることを示している。
【００８２】
次に、プログラムコード解析装置１０１は、実施の形態１と同様に、識別対象プログラム４００の入力を受け付ける（Ｐ４）。そして、プログラムコード解析装置１０１は、実施の形態１と同様に、グループごとの関数モデル（関数モデルＡ３００、関数モデルＢ３０１、関数モデルＣ３０２、・・・）に対する識別対象プログラム４００内の関数（識別対象関数）の適合度を算出し（Ｐ５）、適合度から識別対象プログラム４００に上記演算アルゴリズムが含まれているか解析し、解析結果をユーザ端末５００に出力する（Ｐ６）。
【００８３】
図９は、プログラムコード解析装置１００の構成例を示すブロック図である。
【００８４】
図９において、プログラムコード解析装置１０１は、図２に示した実施の形態１に係るプログラムコード解析装置１００のパラメータ格納部１６０の内部に、推奨パラメータ自動生成の機能を具備する推奨パラメータ自動生成部１６２を追加したパラメータ格納部１６１を備える。その他の構成については、図２に示したものと同様である。
【００８５】
パラメータ格納部１６１は、図２に示したパラメータ格納部１６０と同様に、グループ化パラメータ、識別パラメータ、適合度パラメータを格納するほか、グループ化パラメータ自動算出パラメータとして、グループ化パラメータの最小値（ｇｍｉｎ）、最大値（ｇｍａｘ）、生成パラメータ数（ｇｐ）、識別パラメータ自動算出パラメータとして、識別パラメータの最小値（ｄｍｉｎ）、最大値（ｄｍａｘ）、生成パラメータ数（ｄｑ）、パラメータ評価用のパラメータ（評価パラメータ）として、識別性能の重み（ＴＰＷ）を記憶装置に格納する。ここで、識別性能の重み（ＴＰＷ）とは、特定の演算アルゴリズムを実装した関数であると識別すべき関数を正しく識別する事象（事象Ａとする）と、特定の演算アルゴリズムを実装した関数であると識別すべきでない関数（即ち、特定の演算アルゴリズムを実装していない関数）を正しく識別しない事象（事象Ｂ）について、事象Ｂに対する事象Ａの相対的な重みのことをいう。事象Ａと事象Ｂの重みが同等であれば１を、事象Ａをより優先する場合は１より大きな値を、事象Ｂをより優先する場合は１より小さな値（最小値は０）を設定することで、運用環境により適応した推奨パラメータを得ることができる。
【００８６】
パラメータ格納部１６１において、推奨パラメータ自動生成部１６２は、グループ化パラメータ自動算出パラメータとして設定される最小値（ｇｍｉｎ）、最大値（ｇｍａｘ）、生成パラメータ数（ｇｐ）、識別パラメータ自動算出パラメータとして設定される最小値（ｄｍｉｎ）、最大値（ｄｍａｘ）、生成パラメータ数（ｄｑ）、評価パラメータとして設定される識別性能の重み（ＴＰＷ）を利用して、ｇｐ×ｄｑパターンのグループ化パラメータ及び識別パラメータにおけるモデル化の結果を評価し、最も評価値の高いパラメータを決定する。このとき、推奨パラメータ自動生成部１６２は、関数モデル生成部１４０及び関数識別部１５０にｇｐ×ｄｑパターンのグループ化パラメータ及び識別パラメータを与えて、各パターンにおけるグループ化パラメータを用いて関数モデル生成部１４０に関数モデルを生成させ、各パターンにおける識別パラメータ及び対応する関数モデルを用いて関数識別部１５０に複数の関数（特定の演算アルゴリズムを実装した関数であると識別すべき関数及びそうでない関数の両方を含む）を識別させる。そして、事象Ａ及び事象Ｂの割合等に基づいて評価を行う。
【００８７】
上記のように、本実施の形態において、パラメータ格納部１６０は、関数識別部１５０に識別対象関数として各サンプル関数を入力する。また、パラメータ格納部１６０は、識別パラメータ（第１閾値）として識別パラメータＤＰｑ（ｑは１〜ｄｑ）（複数の第１候補値）を入力する。そして、パラメータ格納部１６０は、入力した識別パラメータＤＰｑごとに、各サンプル関数が上記特定の演算アルゴリズム（例えば、マルウェアに特有の演算アルゴリズム）を実装した関数であるか否かを関数識別部１５０に識別させる。パラメータ格納部１６０は、関数識別部１５０による識別結果に応じて、識別パラメータＤＰｑのいずれかを選択し、選択した識別パラメータＤＰｑを、使用する識別パラメータとして記憶装置に格納する。
【００８８】
また、本実施の形態において、パラメータ格納部１６０は、さらに、関数モデル生成部１４０にグループ化パラメータ（第２閾値）としてグループ化パラメータＧＰｐ（ｐは１〜ｇｐ）（複数の第２候補値）を入力する。そして、パラメータ格納部１６０は、入力したグループ化パラメータＧＰｐごとに、各グループの関数モデルを関数モデル生成部１４０に生成させる。パラメータ格納部１６０は、入力したグループ化パラメータＧＰｐと識別パラメータＤＰｑとの組み合わせごとに、関数識別部１５０に各サンプル関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別させる。パラメータ格納部１６０は、関数識別部１５０による識別結果に応じて、グループ化パラメータＧＰｐのいずれかと識別パラメータＤＰｑのいずれかとの組み合わせを選択し、選択した組み合わせを、使用するグループ化パラメータと識別パラメータとして記憶装置に格納する。
【００８９】
また、本実施の形態において、パラメータ格納部１６０は、さらに、関数識別部１５０に識別対象関数として上記特定の演算アルゴリズムを実装していない関数である複数の評価関数を入力して、入力した識別パラメータＤＰｑごとに、各評価関数が上記特定の演算アルゴリズムを実装した関数であるか否かを関数識別部１５０に識別させ、関数識別部１５０による識別結果に応じて、識別パラメータＤＰｑのいずれかを選択する。
【００９０】
以下、プログラムコード解析システム１００１の動作について説明する。
【００９１】
図１０〜図１２は、プログラムコード解析システム１００１の動作を示すフローチャートである。
【００９２】
図１０は、プログラムコード解析システム１００１の動作の全体像を示すフローチャートである。
【００９３】
図１０において、プログラムコード解析システム１００１の動作の全体の流れを複数のフェーズに分けている。プログラムコード解析システム１００１の動作は、実施の形態１と同様に、大きく関数モデルを生成する学習フェーズＦ１１０１と、生成した関数モデルを利用して識別対象関数を識別する識別フェーズＦ１２００とに分けられる。ここで、識別フェーズＦ１２００は実施の形態１と同じであるため説明を省く。学習フェーズＦ１１０１は、学習サンプル２００を読み込むサンプル読み込みフェーズＦ１１１０と、パラメータ格納部１６１にて設定されたグループ化パラメータ、識別パラメータ、評価パラメータに応じて自動的に推奨するパラメータを算出する推奨パラメータ算出フェーズＦ１１３０とに分けられる。ここで、サンプル読み込みフェーズＦ１１１０は実施の形態１と同じであるため説明を省き、以下では、推奨パラメータ算出フェーズＦ１１３０におけるプログラムコード解析システム１０００の動作について説明する。
【００９４】
図１１は、プログラムコード解析システム１０００の推奨パラメータ算出フェーズＦ１１３０の動作を示すフローチャートである。
【００９５】
図１１のＳ０２１において、推奨パラメータ自動生成部１６２は、パラメータ格納部１６１にて設定されたグループ化パラメータの最小値（ｇｍｉｎ）、最大値（ｇｍａｘ）、生成パラメータ数（ｇｐ）、識別パラメータの最小値（ｄｍｉｎ）、最大値（ｄｍａｘ）、生成パラメータ数（ｄｑ）から評価するグループ化パラメータＧＰｐ、識別パラメータＤＰｑを以下の式５及び式６で順番に処理装置により抽出し、全部でｇｐ×ｄｑパターンの組み合わせを生成する。そして、推奨パラメータ自動生成部１６２は、グループ化パラメータＧＰｐを関数モデル生成部１４０に、識別パラメータＤＰｑ、及び、評価パラメータとして設定される識別性能の重み（ＴＰＷ）を関数識別部１５０に入力する。
【数５】
2011034377.tif 000007
【００９６】
図１１のグループ化フェーズＦ１１２０において、グループ化実行部１４１は、Ｓ０２１にて入力されたグループ化パラメータＧＰｐとサンプル読み込みフェーズＦ１１１０で入力されたオペコードの出現分布を基に関数モデル（関数１ｐ、関数２ｐ、・・・、関数Ｍｐ）を生成し、関数モデルデータベース部１４２に登録する。グループ化フェーズＦ１１２０でグループ化パラメータＧＰｐの各々について関数モデルを生成する処理の詳細については実施の形態１と同様である。
【００９７】
図１１のパラメータ評価フェーズＦ１１３１において、関数識別部１５０は、グループ化パラメータＧＰｐによりグループ化フェーズＦ１１２０で生成された関数モデルと、Ｓ０２１にて入力された識別パラメータＤＰｑ、評価パラメータＴＰＷを基に、パラメータの評価値を処理装置により算出する。パラメータ評価フェーズＦ１１３１の詳細については後述する。
【００９８】
図１１のＢ０２２において、推奨パラメータ自動生成部１６２は、全通り（ｇｐ×ｄｑパターン）のパラメータについて評価が完了していればＳ０２３に進み、評価が完了していなければＳ０２１に戻る。
【００９９】
図１１のＳ０２３において、推奨パラメータ自動生成部１６２は、最大の評価値を得られたグループ化パラメータＧＰｒ及び識別パラメータＤＰｓのパターンをパラメータ格納部１６１に登録し、そのパターンに対応される関数モデル（関数１ｒ、関数２ｒ、・・・、関数Ｍｒ）を関数モデルデータベース部１４２に登録する。
【０１００】
このように、推奨パラメータ算出フェーズＦ１１３０では、評価パラメータに応じたグループ化パラメータ、識別パラメータの評価を自動的に実施することで、運用環境により適応したパラメータの決定を自動的に実行することができる。
【０１０１】
図１２は、プログラムコード解析システム１０００のパラメータ評価フェーズＦ１１３１の動作を示すフローチャートである。
【０１０２】
図１２のＵ０２４において、ユーザは、識別すべきでない関数を正しく識別しない性能に関する評価もパラメータ評価に含める場合、ユーザ端末５００を用いて１つ以上の評価サンプル６００をプログラムコード解析装置１００に入力する。プログラムコード解析装置１００は、評価サンプル６００ごとにサンプル読み込みフェーズＦ１１１０を実行して、オペコードの出現分布を生成する。このとき入力された評価サンプル６００の数をＴとする。
【０１０３】
図１２のＳ０２５において、関数識別部１５０は、関数モデルを生成するために入力された学習サンプル２００ごとに、推奨パラメータ算出フェーズＦ１１３０のグループ化フェーズＦ１１２０にて生成された関数モデル（関数１ｐ、関数２ｐ、・・・、関数Ｍｐ）それぞれに対して適合度を処理装置により算出し、算出した適合度の少なくとも１つが識別パラメータＤＰｑの値を超えている学習サンプル２００の数Ｙ（識別すべき関数を正しく識別できた数）を記録する。このとき入力された学習サンプル２００の数をＬとする。Ｓ０２６において、関数識別部１５０は、Ｕ０２４にて評価サンプル６００が入力されていれば、評価サンプル６００ごとに、推奨パラメータ算出フェーズＦ１１３０のグループ化フェーズＦ１１２０にて生成された関数モデル（関数１ｐ、関数２ｐ、・・・、関数Ｍｐ）それぞれに対して適合度を処理装置により算出し、算出した適合度の少なくとも１つが識別パラメータＤＰｑの値を超えている学習サンプル２００の数Ｚ（識別すべきでない関数を誤って識別した数）を記録する。Ｓ０２７において、推奨パラメータ自動生成部１６２は、以下の式７、式８にてパラメータの評価値Ｓｃｏｒｅを算出する。Ｓｃｏｒｅは、識別すべき関数を正しく識別する識別率、識別すべきでない関数を正しく識別しない識別率、さらにそれらの優先度を表す重み（ＴＰＷ）を利用して算出される。
【数６】
2011034377.tif 000008
【０１０４】
上記のように、本実施の形態では、推奨パラメータ自動生成部１６２が、ｇｐ×ｄｑパターンのグループ化パラメータと識別パラメータの組み合わせに対する評価パラメータで示された評価基準に対応する評価を行い、自動的に運用環境に適応したパラメータを決定することができる。さらに、パラメータ調整にかかる時間も大幅に短縮できる。
【０１０５】
実施の形態１において、グループ化の際、学習サンプル２００同士の適合度からグループに含めるか含めないかを判断するためのパラメータ（グループ化パラメータ）の設定値によって、生成される関数モデルが変化する。また、識別の際、識別対象関数と関数モデルとの適合度から識別対象関数が関数モデルに適合するかどうかを判別するためのパラメータ（識別パラメータ）の設定値によって、識別結果が変化する。したがって、グループ化パラメータ、識別パラメータについて、適切なパラメータ設定が必要となるが、手動でパラメータ設定を行うと、多くの時間がかかったり、確認ミスが発生したりする等の事態が発生する可能性がある。本実施の形態によれば、プログラムコード解析装置１０１が、複数のケース（パラメータ値）を自動的に設定し、各ケースで生成されるグループ及び関数モデル識別性能を自動的に評価して、最も評価の高いパラメータを自動的に算出することで、上記のような事態を回避することができる。
【０１０６】
以上説明したように、本実施の形態に係るプログラムコード解析装置１００は、
パラメータ格納部１６１において、自動的に複数のグループ化パラメータ、識別パラメータのテストケースを作成し、それぞれのテストケースにおける関数モデルの評価値を算出し、評価値が最大値となるパラメータ（推奨パラメータ）を決定する推奨パラメータ自動生成部１６２を備えることを特徴とする。また、推奨パラメータ自動生成部１６２は、関数モデルの評価値を算出する際に、学習サンプル２００を利用して、関数Ｘと識別すべき関数を正しく関数Ｘであると識別する性能の評価値に加えて、関数Ｘ以外の関数を実装したプログラム（評価サンプル６００）を利用して、関数Ｘでないと識別すべき関数を正しく関数Ｘでないと識別する性能の評価値を算出することを特徴とする。
【０１０７】
したがって、本実施の形態によれば、グループ化、識別に関するパラメータを自動的に算出することで、パラメータ設定にかかる時間を大幅に短縮できる。
【符号の説明】
【０１０８】
１００，１０１  プログラムコード解析装置、１１０  逆アセンブラ部、１２０  関数抽出部、１３０  オペコード出現分布生成部、１４０  関数モデル生成部、１４１  グループ化実行部、１４２  関数モデルデータベース部、１５０  関数識別部、１５１  適合度算出部、１５２  判定部、１５３  識別結果データベース部、１６０，１６１  パラメータ格納部、１６２  推奨パラメータ自動生成部、２００  学習サンプル、３００  関数モデルＡ、３０１  関数モデルＢ、３０２  関数モデルＣ、４００  識別対象プログラム、５００  ユーザ端末、６００  評価サンプル、９０１  ＬＣＤ、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  ＨＤＤ、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、１０００，１００１  プログラムコード解析システム。
【図２】
2011034377.tif 000009
【図３】
2011034377.tif 000010
【図４】
2011034377.tif 000011
【図５】
2011034377.tif 000012
【図６】
2011034377.tif 000013
【図７】
2011034377.tif 000014
【図９】
2011034377.tif 000015
【図１０】
2011034377.tif 000016
【図１１】
2011034377.tif 000017
【図１２】
2011034377.tif 000018
【図１】
2011034377.tif 000019
【図８】
2011034377.tif 000020