(57)【要約】【課題】機械語命令列の類似性を少ない計算量で高精度に算出すること。【解決手段】類似性算出装置１０は、複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列１３ｂを生成する縮約命令列生成部１４ｃと、縮約命令列生成部１４ｃによって生成された縮約命令列１３ｂを比較して、最長共通部分列を抽出する最長共通部分列抽出部１４ｄと、最長共通部分列抽出部１４ｄによって抽出された最長共通部分列に基づいて、機械語命令列の類似性を算出する類似性算出部１４ｅとを備える。【選択図】図１
2011086147.tif 000002
【特許請求の範囲】
【請求項１】
複数の機械語命令列の類似性を算出する類似性算出装置であって、
前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成手段と、
前記縮約命令列生成手段によって生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出手段と、
前記最長共通部分列抽出手段によって抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出手段と
を備えたことを特徴とする類似性算出装置。
【請求項２】
前記最長共通部分列抽出手段は、ビットベクトル化アルゴリズムに基づいて前記縮約命令列から前記最長共通部分列を抽出することを特徴とする請求項１に記載の類似性算出装置。
【請求項３】
前記縮約命令列生成手段は、所定のビット長の縮約命令の配列である縮約命令列を生成することを特徴とする請求項１または２に記載の類似性算出装置。
【請求項４】
前記類似性算出手段は、前記最長共通部分列の長さに基づいて、前記機械語命令列の類似性を算出することを特徴とする請求項１〜３のいずれか１つに記載の類似性算出装置。
【請求項５】
前記類似性算出手段は、前記最長共通部分列に基づいて、前記機械語命令列の差分を抽出することを特徴とする請求項１〜３のいずれか１つに記載の類似性算出装置。
【請求項６】
複数の機械語命令列の類似性を算出する類似性算出方法であって、
前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成工程と、
前記縮約命令列生成工程において生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出工程と、
前記最長共通部分列抽出工程において抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出工程と
を含んだことを特徴とする類似性算出方法。
【請求項７】
複数の機械語命令列の類似性を算出する類似性算出プログラムであって、
前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成手順と、
前記縮約命令列生成手順によって生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出手順と、
前記最長共通部分列抽出手順によって抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出手順と
をコンピュータに実行させることを特徴とする類似性算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械語命令列の類似性を算出する類似性算出装置、類似性算出方法および類似性算出プログラムに関する。
【背景技術】
【０００２】
近年、インターネット等のネットワークの普及にともなって、コンピュータウィルスやワームといったマルウェアへの対策に大きなコストがかかるようになっている。マルウェアへの対策にコストがかかることの要因の一つは、マルウェア作者によって積極的に亜種が開発されるために、マルウェアの種類数が増加し、マルウェアの解析作業に時間を要することにある。
【０００３】
そこで、マルウェアを分類することでその解析コストを抑える研究が行われている。マルウェアを分類する手法には、大きく分けて挙動に基づいて分類する手法とプログラムコード（機械語命令列）に基づいて分類する手法とがある。
【０００４】
挙動に基づいて分類する手法では、ファイルシステムやネットワーク等のシステムリソースへのアクセスを監視できる環境が用意され、その環境において実際にマルウェアを動作させることでマルウェアの挙動に関する情報が取得される。そして、取得された挙動に関する情報の類似性をマルウェアの類似性とみなすことでマルウェアが分類される（非特許文献１参照）。
【０００５】
一方、プログラムコードに基づいて分類する手法では、挙動による手法とは異なり、マルウェアに内在する機能も踏まえた分類が可能である。プログラムコードに基づいて分類する手法には、プログラムコードの類似性の算出方法によって、以下に説明するようないくつかの手法が存在する。
【０００６】
ある手法では、プログラムコードを逆アセンブルすることで命令種別の系列を抽出し、頻出するＮ−ｐｅｒｍｓ（順序性を持たないＮ個の命令種別系列）を特徴として用いることで、マルウェアの類似度が算出される（非特許文献２参照）。この手法によれば、順序性を持つＮ−ｇｒａｍｓと比較して順序性を持たないＮ−ｐｅｒｍｓを用いることで、コンパイラの最適化により発生する命令の入れ替えの影響を緩和することを期待できる。また、他の手法では、プログラムコードを逆アセンブルし、コールツリー（関数の呼び出し関係を表す木）を構築し、その木構造の類似性がマルウェアの類似性とされる（非特許文献３参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−１９３１６１号公報
【非特許文献】
【０００８】
【非特許文献１】M. Bailey, J. Oberheide, J. Andersen, Z. M. Mao, F. Jahanian, and J. Nazario. "Automated classification and analysis of internet malware".  In Proceedings of the 10th Symposium on Recent Advances in Intrusion Detection (RAID'07). pages 178--197, 2007.
【非特許文献２】Karim, M. E., Walenstein, A., Lakhotia, A., and Parida, L.  "Malware Phylogeny Generation using Permutations of Code". European Research Journal of Computer Virology 1, 1-2 (Nov. 2005) 13--23.
【非特許文献３】Ero Carrera and Gergely Erdelyi, "Digital Genome Mapping -- Advanced Binary Malware Analysis". Virus Bulletin Conference September 2004.
【非特許文献４】D.S. Hirschberg, A linear space algorithm for computing maximal common subsequences, Comm. Assoc. Comput. Mach., 18:6, 341.343, 1975.
【非特許文献５】Maxime Crochemore, Costas S. Iliopoulos, Yoan J. Pinzon: Speeding-up Hirschberg and Hunt-Szymanski LCS Algorithms. Fundam. Inform. 56(1-2): 89-103 (2003)
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術のうち、挙動に基づいて分類する手法は、マルウェアそのものを解析対象とする必要がないため容易に実現可能だが、ボットのように攻撃者からの指令なしには動作しないマルウェアについては、挙動を確認することが困難であるため、分類することができないという問題があった。
【００１０】
また、プログラムコードに基づいて分類する手法のうち、Ｎ−ｐｅｒｍｓを利用した手法には、Ｎが小さい場合は全く異なるマルウェアであっても類似度が高くなり、Ｎが大きい場合はわずかな差分であっても類似度に大きな影響を及ぼす可能性があるという問題があった。また、Ｎ−ｐｅｒｍｓの統計情報を比較することになるため、比較したマルウェアのどこが一致しどこが一致しなかったかを厳密に算出することが難しいという問題があった。
【００１１】
また、コールツリーの類似度を用いた手法には、多大な計算量を要する上に、関数の呼び出し関係のみをマルウェアの特徴とするため、全く異なるマルウェアに関しても類似度が高くなる可能性があるという問題があった。
【００１２】
本発明は、上記に鑑みてなされたものであって、マルウェア等の機械語命令列の類似性を少ない計算量で高精度に算出することができる類似性算出装置、類似性算出方法および類似性算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するために、本発明は、複数の機械語命令列の類似性を算出する類似性算出装置であって、前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成手段と、前記縮約命令列生成手段によって生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出手段と、前記最長共通部分列抽出手段によって抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出手段とを備えたことを特徴とする。
【００１４】
また、他の態様において、本発明は、複数の機械語命令列の類似性を算出する類似性算出方法であって、前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成工程と、前記縮約命令列生成工程において生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出工程と、前記最長共通部分列抽出工程において抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出工程とを含んだことを特徴とする。
【００１５】
また、他の態様において、本発明は、複数の機械語命令列の類似性を算出する類似性算出プログラムであって、前記複数の機械語命令列毎に、機械語命令列に含まれる各機械語命令からオペランド部分を取り除いた縮約命令の配列である縮約命令列を生成する縮約命令列生成手順と、前記縮約命令列生成手順によって生成された縮約命令列を比較して、最長共通部分列を抽出する最長共通部分列抽出手順と、前記最長共通部分列抽出手順によって抽出された最長共通部分列に基づいて、前記機械語命令列の類似性を算出する類似性算出手順とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１６】
本発明にかかる類似性算出装置、類似性算出方法および類似性算出プログラムは、機械語命令列の類似性を少ない計算量で高精度に算出することができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係る類似性算出装置の構成を示すブロック図である。
【図２】図２は、縮約命令の構成の例を示す図である。
【図３】図３は、類似度行列データの一例を示す図である。
【図４】図４は、実施例１に係る類似性算出装置の動作を示すフローチャートである。
【図５】図５は、実施例２に係る類似性算出装置の構成を示すブロック図である。
【図６】図６は、差分解析結果データの一例を示す図である。
【図７】図７は、実施例２に係る類似性算出装置の動作を示すフローチャートである。
【図８】図８は、類似性算出プログラムを実行するコンピュータを示す機能ブロック図である。
【発明を実施するための形態】
【００１８】
以下に、本発明にかかる類似性算出装置、類似性算出方法および類似性算出プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例では、本発明にかかる類似性算出装置、類似性算出方法および類似性算出プログラムをマルウェアの類似性を算出するために用いる場合について説明するが、これらの実施例によりこの発明が限定されるものではない。
【実施例１】
【００１９】
まず、本実施例に係る類似性算出装置１０の構成について説明する。図１は、類似性算出装置１０の構成を示すブロック図である。図１に示すように、類似性算出装置１０は、表示部１１と、入力部１２と、記憶部１３と、制御部１４とを有する。
【００２０】
表示部１１は、例えば、液晶表示装置や有機ＥＬ（Electro-Luminescence）表示装置であり、各種情報を利用者に対して表示する。入力部１２は、例えば、キーボードやマウスを含み、利用者からの指示を受け付ける。なお、表示部１１や入力部１２は、必須の構成要素ではなく、例えば、利用者からの指示をネットワーク経由で受け付け、受け付けた指示に対する応答をネットワーク経由で利用者へ送信するように類似性算出装置１０を構成してもよい。
【００２１】
記憶部１３は、例えば、ハードディスク装置や半導体メモリであり、実行モジュール１３ａ等の各種の電子情報を記憶する。実行モジュール１３ａは、例えば、マルウェアであり、類似性の算出対象の機械語命令列や、機械語命令列によって利用されるデータ列等を含む。実行モジュール１３ａは、例えば、ネットワークやＤＶＤ等の記憶媒体を経由して記憶部１３に格納される。
【００２２】
記憶部１３は、制御部１４が中間データとして生成する縮約命令列１３ｂや、制御部１４が処理結果として生成する類似度行列データ１３ｃの格納場所としても利用される。
【００２３】
制御部１４は、類似性算出装置１０を全体制御する制御部であり、アンパッキング部１４ａと、逆アセンブル部１４ｂと、縮約命令列生成部１４ｃと、最長共通部分列抽出部１４ｄと、類似性算出部１４ｅとを有する。
【００２４】
アンパッキング部１４ａは、記憶部１３に記憶されている各実行モジュール１３ａにアンパッキング処理を施して逆アセンブル部１４ｂへ出力する。マルウェアの多くは、解析を困難にするためにパッキングと呼ばれる処理が適用され、オリジナルの機械語命令列が隠蔽されている。アンパッキング部１４ａは、実行モジュール１３ａにパッキングが施されている場合、既存のアンパッキング技術を利用して、オリジナルの機械語命令列を再現する。なお、実行モジュール１３ａにパッキングが施されていない場合、アンパッキング部１４ａは、実行モジュール１３ａをそのまま逆アセンブル部１４ｂへ出力する。
【００２５】
逆アセンブル部１４ｂは、アンパッキング部１４ａから入力された実行モジュール１３ａを逆アセンブルし、逆アセンブルした機械語命令列を縮約命令列生成部１４ｃへ出力する。上述したように、実行モジュール１３ａには、機械語命令列以外に処理対象のデータ列等が含まれるが、逆アセンブル部１４ｂは、機械語命令列の逆アセンブル結果のみを縮約命令列生成部１４ｃへ出力する。なお、実行モジュール１３ａに含まれる機械語命令列の選別は、例えば、特許文献１にて開示されている技術を利用して実現することができる。
【００２６】
縮約命令列生成部１４ｃは、逆アセンブル部１４ｂから入力された機械語命令列から縮約命令列を生成する。ここで、縮約命令とは、機械語命令からオペランド部分を削除した命令をいい、縮約命令列とは、機械語命令列に含まれる各機械語命令から変換された縮約命令の配列をいう。
【００２７】
例えば、機械語命令が分岐命令の場合、機械語命令のオペランド部分には分岐先情報が含まれる。そして、分岐先情報は、マルウェア作者によってマルウェアの亜種が作成された場合のように、実行モジュールが改変された場合に、分岐元と分岐先の間に新たな命令が追加される等して変化してしまうことがある。
【００２８】
また、メモリアクセスに必要となる絶対アドレスもオペランドとして指定されるが、実行モジュールが動的リンクライブラリとして実装されている場合、ロードされるアドレスが一定ではなく、当該ライブラリがロードされるタイミングによっては絶対アドレスが変化する。
【００２９】
このように、機械語命令のオペランド部分の内容は、機械語命令列が実質的には改変されていない場合でも変化することがある。このため、類似性の算出にオペランド部分を含んだ機械語命令列を用いると、機械語命令列のうち実質的には改変されていない部分までも相違部分と判断されるおそれがある。
【００３０】
そこで、本実施例に係る類似性算出方法では、オペランド部分が除かれた縮約命令列を用いて類似性が算出される。オペランド部分が除かれた縮約命令列を用いて類似性を算出することにより、オペランド部分の内容の変化の影響をうけることなく、機械語命令列の類似性を高精度に算出することが可能になる。
【００３１】
ここで、縮約命令列生成部１４ｃが機械語命令から変換して生成する縮約命令について、ＩＡ−３２命令セットの場合を例としてさらに詳しく説明する。ＩＡ−３２命令セットにおける機械語命令は、命令の修飾語となるプレフィックス部、命令の種類を表すオペコード部、オペランドの型を表すＭｏｄ／ＲＭとＳＩＢ、オペランドがメモリ上である場合のアドレス部、オペランドが即値であった場合の即値部から構成される。
【００３２】
ＩＡ−３２命令セットにおけるプレフィックスは４つのグループに分けられ、グループ１には３通り、グループ２には６通り、グループ３には１通り、グループ４には１通りのプレフィックスが存在し、各グループで一つ以下のプレフィックスが選択される。また、オペコードに関しては、１バイト目が０ｘ０Ｆ以外の場合はその値、０ｘ０Ｆの場合は２バイト目の値が実質的なオペコードとなる。オペコードが決まると、オペランドの有無、Ｍｏｄ／ＲＭの有無、即値の有無が確定する。さらに、Ｍｏｄ／ＲＭの値によってＳＩＢの有無が確定し、ＳＩＢの値によってアドレス部の有無が確定する。
【００３３】
本実施例では、縮約命令として、プレフィックス部、オペコード部、Ｍｏｄ／ＲＭとＳＩＢの情報を組み合わせて利用する。本実施例における縮約命令の構成の例を図２に示す。図２に示す例では、縮約命令は、２ビットのＰ１と、３ビットのＰ２と、１ビットのＰ３、Ｐ４およびＯＬと、８ビットのＯＣ、ＭおよびＳとからなる。
【００３４】
Ｐ１は、グループ１のプレフィックスに対応する。具体的には、Ｐ１は、グループ１のプレフィックスが存在しない場合は「０」となり、グループ１のプレフィックスの値が「Ｆ０Ｈ」、「Ｆ２Ｈ」、「Ｆ３Ｈ」の場合はそれぞれ「１」、「２」、「３」となる。Ｐ２は、グループ２のプレフィックスに対応する。具体的には、Ｐ２は、グループ２のプレフィックスが存在しない場合は「０」となり、グループ２のプレフィックスの値が「２ＥＨ」、「３６Ｈ」、「３ＥＨ」、「２６Ｈ」、「６４Ｈ」、「６５Ｈ」の場合はそれぞれ「１」、「２」、「３」、「４」、「５」、「６」となる。
【００３５】
Ｐ３は、グループ３のプレフィックスに対応する。具体的には、Ｐ３は、グループ３のプレフィックスが存在しない場合は「０」となり、グループ３のプレフィックスの値が「６６Ｈ」の場合は「１」となる。Ｐ４は、グループ４のプレフィックスに対応する。具体的には、Ｐ４は、グループ４のプレフィックスが存在しない場合は「０」となり、グループ４のプレフィックスの値が「６７Ｈ」の場合は「１」となる。
【００３６】
ＯＬは、オペコードの１バイト目が０ｘ０Ｆであるかを示し、オペコードの１バイト目が０ｘ０Ｆであれば「１」となり、さもなければ「０」となる。ＯＣは、オペコードの実質的な値であり、オペコードの１バイト目が０ｘ０Ｆであればオペコードの２バイト目の値が設定され、さもなければオペコードの１バイト目の値が設定される。
【００３７】
Ｍは、ＭｏｄＲ／Ｍに対応し、ＭｏｄＲ／Ｍが存在する場合はＭｏｄＲ／Ｍの値が設定され、さもなければ「０」が設定される。Ｓは、ＳＩＢに対応し、ＳＩＢが存在する場合はＳＩＢの値が設定され、さもなければ「０」が設定される。
【００３８】
ＩＡ−３２命令セットにおける機械語命令は、命令の種別等によって長さが異なるが、図２に示すように、本実施例における縮約命令の長さは、命令の種類によらずに３２ビットの固定長となる。３２ビットというサイズは、ＩＡ−３２における汎用レジスタのビット幅と同じであり、縮約命令列を効率よく処理するのに好適である。また、縮約命令列を固定長の要素からなる配列として形成することは、後述するビットベクトル化アルゴリズムを利用した共通部分の抽出処理を容易に実現するために好適である。
【００３９】
最長共通部分列抽出部１４ｄは、縮約命令列生成部１４ｃによって生成された縮約命令列の全ての組合せについて、最長共通部分列（Longest Common Subsequence）を抽出する。例えば、｛ａ，ｂ，ｃ，ｄ，ｅ｝という５つの命令からなる縮約命令列と、｛ｆ，ｂ，ｇ，ｄ，ｈ｝という４つの命令からなる縮約命令列があった場合、これら縮約命令列の共通部分列は｛ｂ，ｄ｝である。縮約命令列からの最長共通部分列の抽出は、例えば、動的計画法および分割統治法に基づく計算量ｏ（ｍｎ）、メモリ使用量ｏ（ｎ）のアルゴリズム（非特許文献４参照）を利用することにより、少ない計算量で実現することができる。また、このアルゴリズムにビットベクトル化と呼ばれる手法を適用することで計算機における演算単位ビット数倍の高速化を達成するアルゴリズム（非特許文献５参照）を利用することもできる。
【００４０】
なお、ビットベクトル化を適用するアルゴリズムには、メモリ使用量が比較要素のアルファベットサイズをσとしたときｏ（σｎ）となるため、σが非常に大きくなるとビットベクトル化を適用することが困難になるという問題があることが知られている。本実施例に係る類似性算出方法では、比較要素として機械語命令からオペランドを取り除いた縮約命令を用いており、機械語命令を比較要素とする場合と比べてσを小さくすることができるため、ビットベクトル化を適用した際にもメモリ使用量を少なく抑えることが可能になっている。
【００４１】
類似性算出部１４ｅは、最長共通部分列抽出部１４ｄによって抽出された最長共通部分列の長さに基づいて全ての実行モジュール１３ａ（機械語命令列）の組合せについて類似性を算出し、算出結果を類似度行列データ１３ｃとして出力する。
【００４２】
２つの機械語命令列をＡ、Ｂとし、それぞれに対応する縮約命令列をＣＡ、ＣＢとし、それぞれ縮約命令列の長さをＬ（ＣＡ）、Ｌ（ＣＢ）とすると、ＣＡとＣＢの最長共通部分列ＬＣＳ（ＣＡ，ＣＢ）は、最長共通部分列抽出部１４ｄによって抽出される。そして、最長共通部分列ＬＣＳ（ＣＡ，ＣＢ）の長さをＬＬＣＳ（ＣＡ，ＣＢ）とすると、類似性算出部１４ｅは、以下の式（１）を用いて、０から１の値をとり類似比率を意味するＪａｃｃａｒｄ係数を計算することによって、機械語命令列Ａと機械語命令列Ｂの類似性を示す類似度を算出する。
【００４３】
【数１】
2011086147.tif 000003
【００４４】
なお、Ｊａｃｃａｒｄ係数を用いる手法は、最長共通部分列の長さに基づいて類似性を算出する手法の一例であり、最長共通部分列の長さに基づいて類似性を算出するものであれば他の手法を用いてもよい。例えば、最長共通部分列の長さそのものを類似性の指標として用いることとしてもよい。
【００４５】
類似性算出部１４ｅが出力する類似度行列データ１３ｃの一例を図３に示す。図３に示す例は、機械語命令列Ａ〜Ｄの４つの機械語命令列を対象として類似性を算出した場合の類似度行列データ１３ｃの例であり、機械語命令列Ａ〜Ｄの全ての組合せについて類似性がＪａｃｃａｒｄ係数として算出されている。
【００４６】
なお、このように出力された類似度行列データ１３ｃに基づいて、さらに、機械語命令列をクラスタリングすることとしてもよい。類似性に基づくクラスタリングを行うことにより、例えば、類似性を算出する対象の機械語命令列がマルウェアであれば、マルウェアの流行や廃りを効率的に把握したり、未知のマルウェアが出現した場合にそのマルウェアに最も類似しているマルウェアを判別したりすることが容易になる。
【００４７】
なお、類似度行列データ１３ｃについては、表形式やグラフ等による形式で類似度行列データ１３ｃを表示部１１や図示しない印刷装置にできるように類似性算出装置１０を構成することとしてもよいし、ネットワークや記憶媒体を介して類似度行列データ１３ｃを他の装置へ転送できるように類似性算出装置１０を構成することとしてもよい。
【００４８】
次に、図１に示した類似性算出装置１０の動作について、図４に示したフローチャートを参照しながら説明する。なお、ここでは、類似性を算出する対象である全ての実行モジュール１３ａが予め記憶部１３に記憶されているものとする。
【００４９】
図３に示すように、アンパッキング部１４ａが、記憶部１３に記憶されている実行モジュール１３ａのうち未選択のものを１つ選択する（ステップＳ１０１）。そして、選択できた場合（ステップＳ１０２否定）、アンパッキング部１４ａは、選択した実行モジュール１３ａがパッキングされていれば（ステップＳ１０３肯定）、その実行モジュール１３ａにアンパッキング処理を施して、逆アセンブル部１４ｂへ出力する（ステップＳ１０４）。一方、選択した実行モジュール１３ａがパッキングされていなければ（ステップＳ１０３否定）、アンパッキング部１４ａは、その実行モジュール１３ａをそのまま逆アセンブル部１４ｂへ出力する。
【００５０】
逆アセンブル部１４ｂは、入力された実行モジュール１３ａを逆アセンブルして機械語命令列を抽出する（ステップＳ１０５）。続いて、縮約命令列生成部１４ｃは、抽出された機械語命令列から縮約命令列１３ｂを生成する（ステップＳ１０６）。こうして、ステップＳ１０１で選択された実行モジュール１３ａに対応する縮約命令列１３ｂが生成された後、ステップＳ１０１から処理手順が再開され、アンパッキング部１４ａが、記憶部１３に記憶されている実行モジュール１３ａのうち未選択のものの選択を試みる。
【００５１】
そして、ステップＳ１０１において全ての実行モジュール１３ａを選択済であった場合（ステップＳ１０２肯定）、最長共通部分列抽出部１４ｄが、縮約命令列１３ｂの組合せのうち未選択のものを１つ選択する（ステップＳ１０７）。選択できた場合（ステップＳ１０８否定）、最長共通部分列抽出部１４ｄが、選択した縮約命令列１３ｂの組合せから最長共通部分列を抽出する（ステップＳ１０９）。そして、類似性算出部１４ｅが、抽出された最長共通部分列に基づいて、ステップＳ１０７で選択された縮約命令列１３ｂの組合せに対応する機械語命令列の組合せの類似性を表す類似度を算出する（ステップＳ１１０）。
【００５２】
こうして、ステップＳ１０７で選択された縮約命令列１３ｂの組合せに対応する機械語命令列の組合せの類似度が算出された後、ステップＳ１０７から処理手順が再開され、最長共通部分列抽出部１４ｄが、縮約命令列１３ｂの組合せのうち未選択のものの選択を試みる。そして、ステップＳ１０７において全ての組合せが選択済であった場合（ステップＳ１０８肯定）、類似性算出部１４ｅが、それまでに算出した各類似度から類似度行列データ１３ｃを生成し（ステップＳ１１１）、一連の処理が終了する。
【００５３】
上述してきたように、本実施例では、機械語命令列から各機械語命令のオペランド部分を除いた縮約命令列に基づいて機械語命令列の類似性を算出することとしたので、機械語命令列の類似性を少ない計算量で高精度に算出することができる。
【実施例２】
【００５４】
実施例１では、機械語命令列から縮約命令列を生成し、縮約命令列から抽出した最長共通部分列の長さに基づいて機械語命令列の類似性を算出することとしたが、縮約命令列を用いて機械語命令列の類似性を解析する方式は、これに限定されない。そこで、実施例２では、縮約命令列を用いて機械語命令列の類似性を解析する他の方式の例について説明する。なお、以下の説明では、既に説明した部位と同様の部位については、既に説明した部位と同一の符号を付して、重複する説明を省略する。
【００５５】
まず、本実施例に係る類似性算出装置２０の構成について説明する。図５は、類似性算出装置２０の構成を示すブロック図である。図５に示すように、類似性算出装置２０は、表示部１１と、入力部１２と、記憶部２３と、制御部２４とを有する。
【００５６】
記憶部２３は、制御部１４が処理結果として生成する類似度行列データ１３ｃではなく、制御部２４が処理結果として生成する差分解析結果データ２３ｃの格納場所として利用される点において、図１に示した記憶部１３と相違する。
【００５７】
制御部２４は、類似性算出部１４ｅに代えて類似性算出部２４ｅを有する点において、図１に示した制御部１４と相違する。類似性算出部２４ｅは、最長共通部分列抽出部１４ｄによって抽出された各最長共通部分列を、その最長共通部分列の抽出元である２つの縮約命令列のそれぞれと比較して、それぞれの縮約命令列に固有の命令を抽出し、差分解析結果データ２３ｃを生成する。そのようにそれぞれの縮約命令列に固有の命令を抽出することにより、例えば、改変が加えられたマルウェアについて、改変された箇所に注目して解析を行うことが容易になる。
【００５８】
２つの機械語命令列をＡ、Ｂとし、それぞれに対応する縮約命令列をＣＡ、ＣＢとし、それぞれ縮約命令列の長さをＬ（ＣＡ）、Ｌ（ＣＢ）とすると、最長共通部分列抽出部１４ｄによって抽出されるＣＡとＣＢの最長共通部分列をＬＣＳ（ＣＡ，ＣＢ）とする。この場合、類似性算出部２４ｅは、ＬＣＳ（ＣＡ，ＣＢ）とＣＡを先頭から順に比較することにより、ＣＡには存在するがＬＣＳ（ＣＡ，ＣＢ）に存在しない縮約命令と、ＣＡにもＬＣＳ（ＣＡ，ＣＢ）にも存在する縮約命令を特定する。このうち、前者がＣＡに固有の命令に相当する。また、類似性算出部２４ｅは、ＬＣＳ（ＣＡ，ＣＢ）とＣＢを先頭から順に比較することにより、ＣＢには存在するがＬＣＳ（ＣＡ，ＣＢ）に存在しない縮約命令と、ＣＢにもＬＣＳ（ＣＡ，ＣＢ）にも存在する縮約命令を特定する。このうち、前者がＣＢに固有の命令に相当する。
【００５９】
類似性算出部２４ｅが出力する差分解析結果データ２３ｃの一例を図６に示す。図６に示す例は、複数の機械語命令列のうち、機械語命令列Ａと機械語命令列Ｂを対象として差分を抽出した場合の差分解析結果データ２３ｃの例であり、ＸＭＬ形式で作成されている。なお、図６に示す例では、機械語命令列Ａと機械語命令列Ｂの差分以外に、最長共通部分列に含まれる命令が、機械語命令列Ａと機械語命令列Ｂの共通部分として出力されている。
【００６０】
図６に示す例では、「機械語命令列１」というタグが、差分の抽出対象の一方が機械語命令列Ａであることを示しており、「機械語命令列２」というタグが、差分の抽出対象の他方が機械語命令列Ｂであることを示している。また、「固有縮約命令１」というタグは、機械語命令列Ａに固有の縮約命令を含むタグであり、「固有縮約命令２」というタグは、機械語命令列Ｂに固有の縮約命令を含むタグであり、「共通縮約命令」というタグは、機械語命令列Ａと機械語命令列Ｂに固有の縮約命令を含むタグである。「固有縮約命令１」、「固有縮約命令２」、「共通縮約命令」の各タグには、縮約命令列における当該縮約命令の行番号と、当該縮約命令の各項目の値を含んだ「縮約命令」というタグが０個以上含まれている。
【００６１】
なお、図６に示す例では、差分として縮約命令の内容が出力されているが、縮約命令列内の各縮約命令を何らかの方式で変換元の機械語命令と予め関連付けておいたり、縮約命令列における縮約命令の行番号に基づいて縮約命令の変換元の機械語命令を動的に特定したりすることによって、差分として縮約命令の変換元の機械語命令の内容を出力することとしてもよい。
【００６２】
また、差分解析結果データ２３ｃについては、表形式やグラフィカルな形式で差分解析結果データ２３ｃを表示部１１や図示しない印刷装置にできるように類似性算出装置２０を構成することとしてもよいし、ネットワークや記憶媒体を介して差分解析結果データ２３ｃを他の装置へ転送できるように類似性算出装置２０を構成することとしてもよい。
【００６３】
次に、図５に示した類似性算出装置２０の動作について、図７に示したフローチャートを参照しながら説明する。なお、ステップＳ２０１〜Ｓ２０６については、図４に示したフローチャートと同一の内容であるため、説明を省略する。
【００６４】
ステップＳ２０１において全ての実行モジュール１３ａを選択済であった場合（ステップＳ２０２肯定）、最長共通部分列抽出部１４ｄが、縮約命令列１３ｂの組合せのうち未選択のものを１つ選択する（ステップＳ２０７）。選択できた場合（ステップＳ２０８否定）、最長共通部分列抽出部１４ｄが、選択した縮約命令列１３ｂの組合せから最長共通部分列を抽出する（ステップＳ２０９）。そして、類似性算出部２４ｅが、抽出された最長共通部分列に基づいて、ステップＳ２０７で選択された縮約命令列１３ｂの組合せの差分解析結果データ２３ｃを生成する（ステップＳ２１０）。
【００６５】
こうして、ステップＳ２０７で選択された縮約命令列１３ｂの組合せの差分解析結果データ２３ｃが生成された後、ステップＳ２０７から処理手順が再開され、最長共通部分列抽出部１４ｄが、縮約命令列１３ｂの組合せのうち未選択のものの選択を試みる。そして、ステップＳ２０７において全ての組合せが選択済であった場合（ステップＳ２０８肯定）、一連の処理手順が完了する。
【００６６】
上述してきたように、縮約命令列を用いることにより、縮約命令列から抽出した最長共通部分列の長さに基づいて機械語命令列の類似性を算出する以外にも、機械語命令列の類似性を多様に解析することができる。
【００６７】
なお、上述してきた各実施例の実施形式は、要旨を逸脱しない範囲で種々に変更することができる。例えば、各実施例の実施形式は、適宜組み合わせて実施することができる。また、図１に示した類似性算出装置１０の制御部１４や図２に示した類似性算出装置２０の制御部２４の機能をソフトウェアとして実装し、これをコンピュータで実行することにより、類似性算出装置１０や類似性算出装置２０と同等の機能を実現することもできる。以下に、類似性算出装置１０の制御部１４の機能をソフトウェアとして実装した類似性算出プログラム１７１を実行するコンピュータの一例を示す。
【００６８】
図８は、類似性算出プログラム１７１を実行するコンピュータ１００を示す機能ブロック図である。コンピュータ１００は、各種演算処理を実行するＣＰＵ（Central Processing Unit）１１０と、ユーザからのデータの入力を受け付ける入力装置１２０と、各種情報を表示するモニタ１３０と、記録媒体からプログラム等を読み取る媒体読取り装置１４０と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置１５０と、各種情報を一時記憶するＲＡＭ（Random Access Memory）１６０と、ハードディスク装置１７０とをバスで接続して構成される。
【００６９】
そして、ハードディスク装置１７０には、図１に示した制御部１４と同様の機能を有する類似性算出プログラム１７１と、図１に示した記憶部１３に記憶される実行モジュール１３ａに対応する機械語命令列１７２とが記憶される。なお、機械語命令列１７２は、ネットワークを介して接続された他のコンピュータに、コンピュータ１００がアクセス可能な態様で記憶されていてもよい。
【００７０】
そして、ＣＰＵ１１０が類似性算出プログラム１７１をハードディスク装置１７０から読み出してＲＡＭ１６０に展開することにより、類似性算出プログラム１７１は、類似性算出プロセス１６１として機能するようになる。そして、類似性算出プロセス１６１は、機械語命令列１７２等を適宜ＲＡＭ１６０上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行し、図１に示した類似度行列データ１３ｃに相当する算出結果データ１７３をハードディスク装置１７０等に記憶させる。
【００７１】
なお、上記の類似性算出プログラム１７１は、必ずしもハードディスク装置１７０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたこのプログラムを、コンピュータ１００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）等を介してコンピュータ１００に接続される他のコンピュータ（またはサーバ）等にこのプログラムを記憶させておき、コンピュータ１００がこれらからプログラムを読み出して実行するようにしてもよい。
【産業上の利用可能性】
【００７２】
本発明にかかる類似性算出装置、類似性算出方法および類似性算出プログラムは、マルウェアのように悪意に基づいて改変された機械語命令列の類似性を算出する目的だけでなく、例えば、機構追加や不具合修正等の目的で改変された機械語命令列の類似性を算出する目的や、ソースコードの盗用が疑われる機械語命令列の類似性を算出する目的のように多様な目的で利用することができる。
【符号の説明】
【００７３】
１０、２０  類似性算出装置
１１    表示部
１２    入力部
１３、２３  記憶部
１３ａ  実行モジュール
１３ｂ  縮約命令列
１３ｃ  類似度行列データ
１４、２４  制御部
１４ａ  アンパッキング部
１４ｂ  逆アセンブル部
１４ｃ  縮約命令列生成部
１４ｄ  最長共通部分列抽出部
１４ｅ、２４ｅ  類似性算出部
２３ｃ  差分解析結果データ
１００    コンピュータ
１１０    ＣＰＵ
１２０    入力装置
１３０    モニタ
１４０    媒体読取り装置
１５０    ネットワークインターフェース装置
１６０    ＲＡＭ
１６１    類似性算出プロセス
１７０    ハードディスク装置
１７１    類似性算出プログラム
１７２    機械語命令列
１７３    算出結果データ
【図１】
2011086147.tif 000004
【図２】
2011086147.tif 000005
【図３】
2011086147.tif 000006
【図４】
2011086147.tif 000007
【図５】
2011086147.tif 000008
【図６】
2011086147.tif 000009
【図７】
2011086147.tif 000010
【図８】
2011086147.tif 000011