(57)【特許請求の範囲】
【請求項１】
複数の実行ファイルに対して複数の難読化ツールそれぞれを用いて難読化された各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各命令コードを複数のブロックごとに分割する分割部と、
前記分割部によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックを抽出し、該抽出したブロックの特徴に関する情報を生成する生成部と、
前記生成部によって生成されたブロックの特徴に関する情報を用いて、検査対象の実行ファイルの難読化に用いられた難読化ツールを特定する特定部と
を備えることを特徴とする解析装置。
【請求項２】
前記生成部は、前記分割部によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックであって、且つ、他の難読化ツールで難読化された実行ファイルでは出現しないブロックの特徴に関する情報を生成することを特徴とする請求項１に記載の解析装置。
【請求項３】
前記生成部は、前記分割部によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックであって、且つ、難読化されていない実行ファイルでは出現しないブロックの特徴に関する情報を生成することを特徴とする請求項１または２に記載の解析装置。
【請求項４】
前記特定部は、前記検査対象の実行ファイルを動作させ、前記検査対象の実行ファイルの動作結果として得られた命令コードと前記生成部によって生成された特徴に関する情報との適合度合いを算出し、算出した結果に応じて、検査対象の実行ファイルの難読化に用いられた難読化ツールを特定することを特徴とする請求項１〜３のいずれか一つに記載の解析装置。
【請求項５】
解析装置で実行される解析方法であって、
前記解析装置が、複数の実行ファイルに対して複数の難読化ツールそれぞれを用いて難読化された各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各命令コードを複数のブロックごとに分割する分割工程と、
前記解析装置が、前記分割工程によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックを抽出し、該抽出したブロックの特徴に関する情報を生成する生成工程と、
前記解析装置が、前記生成工程によって生成されたブロックの特徴に関する情報を用いて、検査対象の実行ファイルの難読化に用いられた難読化ツールを特定する特定工程と
を含んだことを特徴とする解析方法。
【請求項６】
複数の実行ファイルに対して複数の難読化ツールそれぞれを用いて難読化された各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各命令コードを複数のブロックごとに分割する分割部と、
前記分割部によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックを抽出し、該抽出したブロックの特徴に関する情報を生成する生成部と、
前記生成部によって生成されたブロックの特徴に関する情報を用いて、検査対象の実行ファイルの難読化に用いられた難読化ツールを特定する特定部と
を備える解析装置としてコンピュータを機能させる解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法および解析プログラムに関する。
【背景技術】
【０００２】
従来、コンピュータウィルスやスパイウェア等の悪意のあるプログラムであるマルウェアのプログラムコードは、該マルウェアの動作や機能が解析されることを妨害するために難読化されていることが多い。かかる難読化は、一つの態様として、ＸＯＲエンコードや特定の鍵を利用した暗号化等の可逆なアルゴリズムを利用するものが挙げられる。また、マルウェアのプログラムコードが難読化されることで、本来のプログラムコードであるオリジナルコードが隠蔽されることはパッキングと呼ばれ、該パッキングを実行するツールは総じてパッカーと呼ばれる。
【０００３】
ところで、パッキングされたマルウェアは、難読化されたプログラムコードをデータとして有するとともに、オリジナルコードを復元するための展開コードを有する。詳細には、パッキングされたマルウェアが実行された場合には、展開コードの部分が実行されて難読化されたプログラムコードが解かれ、オリジナルコードがメモリ上に展開される。続いて、オリジナルコードの展開が完了した場合には、展開されたオリジナルコードが実行される。
【０００４】
このようなパッキングされたマルウェアに利用されているパッカーの識別方法として、シグネチャを用いたマッチング処理を行って、検査対象の実行ファイルで利用されたパッカーを特定する手法が知られている。例えば、パッキングされた展開コード部分とデータ部分の特徴的なバイト列を手動により抽出し、抽出した特徴的なバイト列をシグネチャのパターンとして用いたマッチング処理を行い、検査対象の実行ファイルで利用されたパッカーを特定する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“The  new  signature  generation  method  based  on  an  unpacking  algorithm  and  procedure  for  a  packer  detection”，International  Journal  of  Advanced  Science  and  Technology，  VOL．27，  February  2011
【非特許文献２】“A  Survey  of  Malware  Detection  Techniques”,  Technical  report.  Department  of  Computer  Science,  Purdue  University,  February  2007
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、パッキングされた展開コード部分とデータ部分の特徴的なバイト列を手動で抽出するので、コストが高く大量のシグネチャを作成するのが困難である。また、ｘ８６アーキテクチャの場合を例にとると正確な逆アセンブルを行うことが難しく精度の高いシグネチャを得ることが出来ない。結果、パッカーの識別精度向上を図ることが出来ないといった課題があった。
【０００７】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、パッカーの識別精度の向上を図ることを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本願に開示する解析装置は、複数の実行ファイルに対して複数の難読化ツールそれぞれを用いて難読化された各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各命令コードを複数のブロックごとに分割する分割部と、前記分割部によって分割された各ブロックのうち、同一の難読化ツールで難読化された実行ファイル間で共通して出現するブロックを抽出し、該抽出したブロックの特徴に関する情報を生成する生成部と、前記生成部によって生成されたブロックの特徴に関する情報を用いて、検査対象の実行ファイルの難読化に用いられた難読化ツールを特定する特定部と、を備える。
【発明の効果】
【０００９】
本願に開示する解析装置は、パッカーの識別精度の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る解析装置の構成を示すブロック図である。
【図２】図２は、パッキング済みの実行ファイルを用いてシグネチャを生成する処理を説明する図である。
【図３】図３は、パッキング済みの実行ファイルとともに、パッキング前の実行ファイルを用いてシグネチャを生成する処理を説明する図である。
【図４】図４は、パッカーを識別する識別処理を説明する図である。
【図５】図５は、実施例１に係る解析装置のシグネチャ生成処理の手順を説明するためのフローチャートである。
【図６】図６は、実施例１に係る解析装置のパッカー識別処理の手順を説明するためのフローチャートである。
【図７】図７は、図７は、解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明に係る解析装置、解析方法および解析プログラムの実施例を詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１２】
［解析装置の構成］
まず、図１を用いて、実施例１に係る解析装置について説明する。図１は、実施例１に係る解析装置１０の構成例を示すブロック図である。図１に示した解析装置１０は、所定のプログラムを実行するコンピュータに実装される。
【００１３】
ここで、プログラムを実行するコンピュータの動作例を説明する。コンピュータによってプログラムが実行される場合には、例えば、コンピュータ内部のＣＰＵ（Central  Processing  Unit）は、ハードディスク装置等に記憶されているプログラムを、ＲＡＭ（Random  Access  Memory）等のメモリ空間に展開する。具体的には、ＣＰＵは、メモリ空間に、命令や値等のデータを展開する。これにより、プログラムは、プロセスとして機能する。このようにしてプロセスが生成された後に、ＣＰＵは、プロセスメモリ空間に展開された各種データを用いて各種命令を実行する。
【００１４】
解析装置１０は、入力部１１、出力部１２、制御部１３および記憶部１４を有する。解析装置１０は、シグネチャを生成するとともに、生成したシグネチャを用いて検査対象の実行ファイルをパッキングしたパッカーを特定する。
【００１５】
入力部１１は、シグネチャの生成指示や検査対象の実行ファイルなどを入力するものであり、キーボードやマウス、マイクなどを備えて構成される。出力部１２は、例えば、実行ファイルにパッキングをしたパッカーを表示するものであり、モニタやスピーカを備えて構成される。
【００１６】
記憶部１４は、制御部１３による各種処理に必要なデータおよびプログラムを格納するが、特に本発明に密接に関連するものとしては、実行ファイル記憶部１４ａ、パッキング済み実行ファイル記憶部１４ｂおよびシグネチャ記憶部１４ｃを有する。また、記憶部１４とは、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【００１７】
実行ファイル記憶部１４ａは、パッキングされる前の複数の実行ファイルを記憶する。例えば、実行ファイル記憶部１４ａは、複数の実行ファイル１〜ｎを記憶する。パッキング済み実行ファイル記憶部１４ｂは、パッキング済みの実行ファイルを記憶する。例えば、パッキング済み実行ファイル記憶部１４ｂは、実行ファイル１〜ｎに対してパッカー１〜ｍそれぞれを用いてパッキングされた各実行ファイル（つまり、ｎ×ｍ個の実行ファイル）を記憶する。シグネチャ１４ｃは、後述するシグネチャ生成部１３ａによって生成されたシグネチャを記憶する。
【００１８】
制御部１３は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行するが、特に本発明に密接に関連するものとしては、シグネチャ生成部１３ａおよび難読化ツール識別部１３ｂを有する。なお、制御部１３として、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【００１９】
シグネチャ生成部１３ａは、シグネチャとしてパッカーを識別するために利用するための各パッカーに応じた特徴的なコードブロックを抽出し、抽出したコードブロックからパッカー識別に利用するためのシグネチャを生成する。シグネチャ生成部１３ａは、分割部１３１および生成部１３２を有する。
【００２０】
分割部１３１は、複数の実行ファイルに対して複数のパッカーそれぞれを用いてパッキングされた各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各展開コードの実行トレースを複数のブロックごとに分割する。具体的には、まず、分割部１３１は、シグネチャの生成指示を入力部１１から受け付けると、パッキング済みの実行ファイルをパッキング済み実行ファイル記憶部１４ｂから取得する。例えば、図２の例を用いて説明すると、分割部１３１は、パッカー１〜ｍでそれぞれパッキングされたｎ×ｍ個のパッキング済みの各実行ファイル（図２の例では、パッカー１（実行ファイル１〜ｎ）、パッカー２（実行ファイル１〜ｎ）・・・パッカーｍ（実行ファイル１〜ｎ）と記載）をパッキング済み実行ファイル記憶部１４ｂから取得する。
【００２１】
そして、分割部１３１は、パッキング済みの各実行ファイルを動作させ、パッキング済み実行ファイルの展開コードの実行トレースを取得する。ここで実行トレースとは、プログラムの実行された命令の羅列である。ｘ８６命令を例にとると、実行された命令のオペコードとそのオペランドの組の列と言い換えてもよい。なお、実行トレースは幾つかの方法で取得することが可能である。例えば、デバッガを利用する方法、Binary  Instrumentationを利用する方法、エミュレータを利用する方法、仮想マシンを利用する方法が考えられる。
【００２２】
また、展開コードの実行トレースとは、具体的に述べると、パッキングされた実行ファイルの先頭から各実行ファイルの本来のエントリポイントであるオリジナルエントリポイントまでの命令列である。また、オリジナルエントリポイント以外にも独自に定めた事象が現れるまで動作させることも可能である。つまり、展開コードが終わっていると思われる事象が現れる周辺まで動かせればよく、例えば、本来のオリジナルコードが利用する可能性の高いＡＰＩの呼び出しがみられるところまで、ネットワークへの通信が発生するところまで、更にはある一定時間まで、などの指標で動かしてもよい。なお、多くのパッカーは、この展開コードを多段で持つことが多い。これは、最初の展開コードが実行されると、２段目の展開コードとデータをメモリ上に展開し、展開が終わるとその２段目の展開コードにジャンプし、その２段目の展開コードが先ほど展開されたデータの読み込みオリジナルコードを展開する。上記は２段の例だが、パッカーの中にはこの展開コードが多段になっているものも多く存在する。
【００２３】
また、本来シグネチャとして利用するバイト列としては、実行ファイルのデータ部分よりもコード部分の方が望ましい。これは、データ部分が難読化のアルゴリズムにより変動が激しく可変な状態である場合が多いため、ある特定のプログラムの特徴パターンとして利用するには向いていない。例えば、ＸＯＲエンコードが利用されていた場合には、バイナリコードとＸＯＲをとる値を変更すれば生成される値は大きく変化してしまう。一方、パッキングされている実行ファイルは主に展開コードとデータから構成される。上述のようにデータ部分はシグネチャのパターンとしては適していないため、展開コード部分のバイト列をパターンとしてシグネチャに利用する方が識別の精度が高くなる。
【００２４】
続いて、分割部１３１は、実行トレースを特定のブロックに区切り、命令列（以下、コードブロックという）の集合を作成する。ブロックへの区切り方として、ベーシックブロック単位、一定命令数単位（n-gram）、関数単位、または上記ベーシックブロック、一定命令数、関数のn-gramが考えられる。これら各ブロックのハッシュ値を求めておく。なお、ハッシュ値を求める際、ｘ８６を例にとると、各命令のオペコード部分のみを利用してもよいし、オペランド部分も含めてハッシュ値を計算してもよい。なお、ここで計算されたハッシュ値は、後述のコードブロックの集合の比較を行う際に、計算を容易にするためのものであり、計算のコストを考慮しないのであれば、ハッシュ値を求める処理は必ずしも必要ではない。
【００２５】
続いて、生成部１３２は、分割部１３１によって分割された各ブロックのうち、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックを抽出し、該抽出したコードブロックのシグネチャを生成する。例えば、生成部１３２は、パッカー１でパッキングした実行ファイル１〜ｎの各実行トレースのコードブロックのハッシュ値の集合同士を比較し、共通で出現するハッシュ値を求める。これは、言い換えると、各実行トレースの中で共通する命令コードを探しだしていることとなる。
【００２６】
上記の共通で出現するコードブロックを求める処理は、下記（１）式で定義される。つまり、パッカーｑでパッキングしたｉ番目（０≦ｉ≦ｎ)の実行ファイルの実行トレースのブロックの集合をＢｑ，ｉとすると、ｎ個の実行ファイルの中に共通で出現するブロックは下記（１）式で定義される。そして、生成部１３２は、図２に例示するように、全てのパッカー１〜ｍについて、パッキングされた実行ファイルの展開コードの実行トレースに共通で出現するコードブロックを抽出する。
【００２７】
【数１】
0005687593.tif 000002
【００２８】
上記の処理では、生成部１３２は、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックのシグネチャを生成する場合を説明したが、以下の（２）〜（５）式を用いて説明するように、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックであって、且つ、他のパッカーでパッキングされた実行ファイルでは出現しないコードブロックのシグネチャを生成するようにしてもよい。
【００２９】
例えば、生成部１３２は、全てのパッカー１〜ｍについて、パッキングされた実行ファイルの展開コード部分の実行トレースに共通で出現するコードブロックの計算が終わると、次にあるパッカーに対しては共通的に表れるが、他のパッカーの共通なコードブロックとしては出現しないコードブロックの集合を求め、これをそのパッカーに対するシグネチャとする。これを式で定義すると下記（２）式となる。パッカーの集合をＰとし、パッカーのシグネチャをＳｑｊとする。
【００３０】
【数２】
0005687593.tif 000003
【００３１】
また、生成部１３２は、あるパッカーで共通で出現するコードブロックから、他のパッカーの共通なコードブロック全てにおいて共通に出現するコードブロックを省くことで、シグネチャＳｑｊを求める。これを式で定義すると下記（３）式となる。
【００３２】
【数３】
0005687593.tif 000004
【００３３】
また、他にも、生成部１３２は、あるパッカーで共通で出現するコードブロックから、他の各パッカーの実行トレースのコードブロックに一つでも出現したコードを省いたコードブロックの集合をシグネチャＳｑｊとしてもよい。これを式で定義すると下記（４）式となる。
【００３４】
【数４】
0005687593.tif 000005
【００３５】
さらには、生成部１３２は、あるパッカーで共通で出現するコードブロックから、各パッカー内で複数の実行ファイル全てに出現するわけではないが、全てのパッカーに共通して出現するコードブロックを省くことでシグネチャＳｑｊを作成してもよい。これを式で定義すると下記（５）式となる。
【００３６】
【数５】
0005687593.tif 000006
【００３７】
また、シグネチャ生成部１３ａは、分割部によって分割された各ブロックのうち、同一のパッカーでパッキングされた実行ファイル間で共通して出現するブロックであって、且つ、パッキングされていない実行ファイルでは出現しないブロックのシグネチャを生成するようにしてもよい。
【００３８】
例えば、図３に示すように、シグネチャ生成部１３ａは、パッカーによりパッキングされた実行ファイルのみならず、パッキングされる前の実行ファイルを実行ファイル記憶部１４ａから取得する。そして、シグネチャ生成部１３ａは、ある特定のパッカーのシグネチャを生成する際に、そのパッカーに共通的に表れるコードブロックの集合から、他のパッカーに出現するコードブロックのみならず、各実行ファイルに出現するコードブロックも併せて省くことでシグネチャを作成するようにしてもよい。
【００３９】
これにより、通常の実行ファイルに出現しやすいコードブロックを当該パッカーのシグネチャから省くことができ、よりパッカー特有のシグネチャが作成できるものと考えられる。
【００４０】
難読化ツール識別部１３ｂは、図４に示すように、シグネチャ生成部１３ａが生成したシグネチャを用いて、入力された検査対象実行ファイルで利用されているパッカーを特定し、特定した結果を出力する。具体的には、難読化ツール識別部１３ｂは、検査対象実行ファイルを入力部１１を介して受け付けると、検査対象実行ファイルを動作させて、実行トレースを取得する。ここで、難読化ツール識別部１３ｂは、検査対象の実行ファイルを一旦動作させているので、２段目以降の展開コードが現れ、この部分もシグネチャと比較され、パッカーの識別処理に利用される。これにより、２段目以降の展開コードもパッカーの識別処理に利用することが可能となり、精度の高いパッカー識別処理を行うことが可能となる。
【００４１】
そして、難読化ツール識別部１３ｂは、実行トレースを特定のブロックに区切り、コードブロックの集合を作成する。続いて、難読化ツール識別部１３ｂは、作成したコードブロックとシグネチャ記憶部１４ｃに記憶された各シグネチャＳｊ（０≦ｊ≦ｍ）を比較し、スコアを算出する。
【００４２】
ここで、スコアの算出方法について具体的に説明する。難読化ツール識別部１３ｂは、入力された検査対象の実行ファイルの実行トレースをシグネチャ生成部１３ａと同様の方法で取得し、この実行トレースから得られるコードブロックの集合Ｔとシグネチャ生成部１３ａで作成した各シグネチャを比較し、各シグネチャにおけるスコアを下記（６）式で計算する。この式により、各シグネチャのコードブロックのうち、どれだけのコードブロックが検査対象の実行ファイルの実行トレースに含まれているか（どれだけ適合するか）が分かる。
【００４３】
【数６】
0005687593.tif 000007
【００４４】
このスコアを全てのパッカー１〜ｍに対して求め、その中で最大値のもの（下記（７）式参照）を実行ファイルでパッキングされているパッカーとする。そして、難読化ツール識別部１３ｂは、最大スコアのシグネチャに対応するパッカーを検査対象の実行ファイルをパッキングしたパッカーとして出力部１２から出力する。なお、最大値のスコアでなく、ある閾値に基づき一定以上の値を示した場合に、その実行ファイルをパッキングしたパッカーとして識別してもよい。
【００４５】
【数７】
0005687593.tif 000008
【００４６】
なお、パッカーには、正確な逆アセンブルを行うのが困難であるという事情がある。これは、ｘ８６のコードを例にとると、コードの最適化やキャッシュ効率を上げるためなどの理由でコード領域の中にデータを含ませることが可能なアーキテクチャになっている。パッカーでは、この特徴を悪用しコードブロックの途中にデータを含ませるなどの方法で逆アセンブルを困難にする解析妨害機能を持つことが多い。この結果としてパッキングされた実行ファイルの展開コード部分を自動的に特定するのが難しく、正確な逆アセンブル結果を得るために人手の介入が必要となることが多い。これに対して、解析装置１０では、実行トレースは実際にＣＰＵが実行した命令コードを基にしているため、明らかにコードと断定することができ、逆アセンブルの際のデータとコードの見分けがつかなくなる問題も発生しない。
【００４７】
［解析装置による処理］
次に、図５および図６を用いて、実施例１に係る解析装置１０による処理を説明する。図５は、実施例１に係る解析装置のシグネチャ生成処理の手順を説明するためのフローチャートである。図６は、実施例１に係る解析装置のパッカー識別処理の手順を説明するためのフローチャートである。
【００４８】
図５に示すように、解析装置１０のシグネチャ生成部１３ａは、シグネチャ生成の指示を入力部１１から受け付けると（ステップＳ１０１肯定）、パッキング済み実行ファイル記憶部１４ｂに記憶されたパッキング済み実行ファイルを取得し、パッキング済み実行ファイルを動作させる（ステップＳ１０２）。
【００４９】
そして、シグネチャ生成部１３ａは、パッキング済み実行ファイルの展開コードの実行トレースを取得する（ステップＳ１０３）。続いて、シグネチャ生成部１３ａは、実行トレースを特定のブロックに区切り、コードブロックの集合を生成する（ステップＳ１０４）。
【００５０】
そして、シグネチャ生成部１３ａは、各実行トレースのコードブロックの集合同士を比較し（ステップＳ１０５）、共通で出現するコードブロックの集合を抽出し、シグネチャを生成する（ステップＳ１０６）。具体的には、シグネチャ生成部１３ａは、あるパッカーに対しては共通的に表れるが、他のパッカーの共通なコードブロックとしては出現しないコードブロックの集合を求め、このコードブロックの集合をそのパッカーに対するシグネチャとして生成し、シグネチャ記憶部１４ｃに記憶させて、処理を終了する。
【００５１】
次に、図６を用いて、パッカー識別処理について説明する。図６に示すように、解析装置１０の難読化ツール識別部１３ｂは、検査対象実行ファイルを入力部１１を介して受け付けると（ステップＳ２０１）、検査対象実行ファイルの実行トレースを取得する（ステップＳ２０２）。
【００５２】
そして、難読化ツール識別部１３ｂは、実行トレースを特定のブロックに区切り、コードブロックの集合を作成する（ステップＳ２０３）。続いて、難読化ツール識別部１３ｂは、作成したコードブロックとシグネチャ記憶部１４ｃに記憶された各シグネチャを比較し、スコアを算出する（ステップＳ２０４）。
【００５３】
具体的には、難読化ツール識別部１３ｂは、入力された検査対象の実行ファイルの実行トレースをシグネチャ生成部１３ａと同様の方法で取得し、この実行トレースから得られるコードブロックの集合Ｔとシグネチャ生成部１３ａで作成した各シグネチャを比較し、各シグネチャにおけるスコアを算出する。そして、難読化ツール識別部１３ｂは、最大スコアのシグネチャに対応するパッカーを検査対象の実行ファイルで利用されているパッカーとして出力部１２から出力する（ステップＳ２０５）。
【００５４】
[実施例１の効果]
上述してきたように、解析装置１０は、複数の実行ファイルに対して複数のパッカーそれぞれを用いてパッキングされた各実行ファイルを動作させ、該各実行ファイルの動作結果として得られた各命令コードを複数のブロックごとに分割する。そして、解析装置１０は、分割された各ブロックのうち、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックを抽出し、該抽出したコードブロックのシグネチャを生成する。そして、解析装置１０は、生成されたコードブロックのシグネチャを用いて、検査対象の実行ファイルのパッキングに用いられたパッカーを特定する。このため、精度の高いシグネチャを生成することができる結果、パッカーの識別精度の向上を図ることが可能である。
【００５５】
また、実施例１によれば、分割された各コードブロックのうち、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックであって、且つ、他のパッカーでパッキングされた実行ファイルでは出現しないシグネチャを生成する。このため、よりパッカー特有のシグネチャを生成することができる結果、パッカーの識別精度の向上を図ることが可能である。
【００５６】
また、実施例１によれば、分割された各コードブロックのうち、同一のパッカーでパッキングされた実行ファイル間で共通して出現するコードブロックであって、且つ、パッキングされていない実行ファイルでは出現しないコードブロックの特徴に関する情報を生成する。このため、よりパッカー特有のシグネチャを生成することができる結果、パッカーの識別精度の向上を図ることが可能である。
【００５７】
また、実施例１によれば、検査対象の実行ファイルを動作させ、検査対象の実行ファイルの動作結果として得られた命令コードと生成されたシグネチャとの適合度合いを算出し、算出した結果に応じて、検査対象の実行ファイルのパッキングに用いられたパッカーを特定するので、パッカーの識別精度の向上を図ることが可能である。
【００５８】
［解析プログラム］
図７は、解析プログラムによる処理がコンピュータを用いて具体的に実現されることを示す図である。図７に例示するように、コンピュータ１０００は、例えば、メモリ１００１と、ＣＰＵ１００２と、ハードディスクドライブインタフェース１００３と、ディスクドライブインタフェース１００４と、シリアルポートインタフェース１００５と、ビデオアダプタ１００６と、ネットワークインタフェース１００７とを有し、これらの各部はバス１００８によって接続される。
【００５９】
メモリ１００１は、図７に例示するように、ＲＯＭ（Read  Only  Memory）１００１ａ及びＲＡＭ（Random  Access  Memory）１００１ｂを含む。ＲＯＭ１００１ａは、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１００３は、図７に例示するように、ハードディスクドライブ１００９に接続される。ディスクドライブインタフェース１００４は、図７に例示するように、ディスクドライブ１０１０に接続される。例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０１０に挿入される。シリアルポートインタフェース１００５は、図７に例示するように、例えばマウス１０１１、キーボード１０１２に接続される。ビデオアダプタ１００６は、図７に例示するように、例えばディスプレイ１０１３に接続される。
【００６０】
ここで、図７に例示するように、ハードディスクドライブ１００９は、例えば、ＯＳ１００９ａ、アプリケーションプログラム１００９ｂ、プログラムモジュール１００９ｃ、プログラムデータ１００９ｄを記憶する。すなわち、解析プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１００９ｃとして、例えばハードディスクドライブ１００９に記憶される。具体的には、上記実施例で説明したシグネチャ生成部１３ａと同様の処理を実行するシグネチャ生成手順と、難読化ツール識別部１３ｂと同様の処理を実行する難読化ツール識別手順とが記述されたプログラムモジュール１００９ｃが、ハードディスクドライブ１００９に記憶される。また、解析プログラムによる処理に用いられるデータは、プログラムデータ１００９ｄとして、例えばハードディスクドライブ１００９に記憶される。そして、ＣＰＵ１００２が、ハードディスクドライブ１００９に記憶されたプログラムモジュール１００９ｃやプログラムデータ１００９ｄを必要に応じてＲＡＭ１００１ｂに読み出し、シグネチャ生成手順、難読化ツール識別手順を実行する。
【００６１】
なお、解析プログラムに係るプログラムモジュール１００９ｃやプログラムデータ１００９ｄは、ハードディスクドライブ１００９に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１０１０等を介してＣＰＵ１００２によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール１００９ｃやプログラムデータ１００９ｄは、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１００７を介してＣＰＵ１００２によって読み出されてもよい。
【符号の説明】
【００６２】
１０  解析装置
１１  入力部
１２  出力部
１３  制御部
１３ａ  シグネチャ生成部
１３ｂ  難読化ツール識別部
１４  記憶部
１４ａ  実行ファイル記憶部
１４ｂ  パッキング済み実行ファイル記憶部
１４ｃ  シグネチャ記憶部
【図１】
0005687593.tif 000009
【図２】
0005687593.tif 000010
【図３】
0005687593.tif 000011
【図４】
0005687593.tif 000012
【図５】
0005687593.tif 000013
【図６】
0005687593.tif 000014
【図７】
0005687593.tif 000015