(57)【要約】本実施形態に係る識別装置は、抽出部と、パディング部と、生成部とを含む。抽出部は、バイナリデータから複数個の命令を抽出する。パディング部は、前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成する。生成部は、命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する。
2020148811.tif 000002
【特許請求の範囲】
【請求項１】
バイナリデータから複数個の命令を抽出する抽出部と、
前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成するパディング部と、
命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する生成部と、
を具備する識別装置。
【請求項２】
前記入力データ列を１つの１ビットと複数の０ビットとで表した入力層データ列に変換する第１エンコード処理と、前記入力データ列に対応するビット列を入力層データ列とする第２エンコード処理と、前記入力データ列で表現される数値をスカラー値である入力層データ列に変換する第３エンコード処理との少なくとも１つを実行する変換部をさらに具備し、
前記生成部は、前記第１エンコード処理から前記第３エンコード処理までの少なくとも１つのエンコード処理が適用された入力層データ列を、前記畳み込みニューラルネットワークへ入力することで、前記特徴ベクトルまたは前記クラス分類結果を生成する請求項１に記載の識別装置。
【請求項３】
前記畳み込み層における畳み込みフィルタサイズおよびストライドは、前記命令単位で処理されるように決定される請求項１または請求項２に記載の識別装置。
【請求項４】
前記クラス分類結果は、前記プログラムであるか非プログラムであるかの分類と、前記プログラムの生成に用いられたコンパイラ種別の分類と、前記プログラムの生成に用いられたプログラム変換ツールの種別の分類と、前記プログラムに含まれる機能種別の分類とのうちの少なくともいずれか１つの分類結果を示す請求項１から請求項３のいずれか１項に記載の識別装置。
【請求項５】
前記抽出部は、ディスアセンブラ処理を含む請求項１から請求項４のいずれか１項に記載の識別装置。
【請求項６】
コンピュータに、
バイナリデータから複数個の命令を抽出する抽出機能と、
前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成するパディング機能と、
命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する生成機能と、
を実現させるための識別プログラム。
【請求項７】
バイナリデータから抽出された複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングおよびエンコード処理を行うことで生成された複数の入力層データ列を入力データとし、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を出力データとする学習用データを取得する取得部と、
前記学習用データに基づいて、前記複数の入力層データ列から前記特徴ベクトルまたは前記クラス分類結果を出力するように、畳み込み層を含む畳み込みニューラルネットワークを学習させる学習部と、を具備し、前記畳み込み層における畳み込みフィルタサイズおよびストライドは、前記命令単位で処理されるように決定される学習装置。
【請求項８】
前記プログラムは、対象ファイルに埋め込まれたマルウェアである、請求項１から請求項５のいずれか１項に記載の識別装置または請求項７に記載の学習装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、識別装置、識別プログラム及び学習装置に関する。
【背景技術】
【０００２】
マルウェアは一日数十万個もの新種が出現しているといわれ、セキュリティ強化の観点ではマルウェアを自動的に解析、分類することが急務である。マルウェアの検出方法としては、例えば、攻撃コードの値の分布が一定の範囲内にあることを利用してＲｏＰ（Return Oriented Programming）攻撃コードを検出する手法がある（例えば、特許文献１参照）。また、ドキュメントファイルを処理するプログラムを実際に実行して、プログラムカウンタの値の範囲が一定範囲内に収まるか否かを判定することで、処理プログラムの制御フローを意図的に変更するマルウェアが含まれるか否かを検出する手法がある（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−９４０５号公報
【特許文献２】特許第５２６５０６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１に示す手法では、識別器で識別可能な特徴が線形分離可能なものに限られるという問題がある。また、特許文献２に示す方法では、分析対象のドキュメントファイルの処理プログラムに別途、検査コードを埋め込む必要があるため手間と時間がかかるという問題がある。【０００５】
本発明は、上述した事情を考慮してなされたものであり、対象プログラムを高精度かつ詳細に識別できる識別装置、識別プログラム及び学習装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述の課題を解決するため、本実施形態にかかる識別装置は、抽出部と、パディング部と、生成部とを含む。抽出部は、バイナリデータから複数個の命令を抽出する。パディング部は、前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成する。生成部は、命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する。
【発明の効果】
【０００７】
本発明の識別装置、識別プログラム及び学習装置によれば、対象プログラムを高精度かつ詳細に識別できる。
【図面の簡単な説明】
【０００８】
【図１】本実施形態に係る識別装置を示すブロック図。
【図２】本実施形態に係る識別装置の動作例を示すフローチャート。
【図３】本実施形態に係る入力データの変換処理の具体例を示す図。
【図４】本実施形態に係る学習済みＣＮＮの構成例を示す図。
【図５】本実施形態に係る識別装置のクラス分類結果の表示例を示す図。
【図６】本実施形態に係る識別装置のクラス分類結果の表示例を示す図。
【図７】本実施形態に係る学習装置を示すブロック図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら本発明の実施形態に係る識別装置、識別プログラム及び学習装置について詳細に説明する。なお、以下の実施形態中では、同一の番号を付した部分については同様の動作を行うものとして、重ねての説明を省略する。
【００１０】
本実施形態に係る識別装置１は、格納部１１と、取得部１２と、抽出部１３と、パディング部１４と、変換部１５と、生成部１６とを含む。図１では、取得部１２と、抽出部１３と、パディング部１４と、変換部１５と、生成部１６とは、電子回路１０に実装される例を示す。電子回路１０は、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphics Processing Unit）などの１つの処理回路、またはＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの集積回路により構成される。電子回路１０と格納部１１とはバスでデータ送受信可能に接続される。なお、これに限らず、各部が単独の処理回路または単独の集積回路として構成されてもよい。
【００１１】
格納部１１は、処理対象となるファイル（以下、対象ファイルと呼ぶ）のバイナリデータと、学習済みの畳み込みニューラルネットワーク（ＣＮＮ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｗｒａｌ  Ｎｅｔｗｏｒｋ）モデル（以下、学習済みＣＮＮと呼ぶ）を格納する。格納部１１は、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）、集積回路記憶装置等の記憶装置により構成される。
本実施形態では、対象ファイルとして、プログラム（シェルコード）が埋め込まれた文書ファイル（Ｗｏｒｄ（登録商標）ファイルなど）を想定するが、実行ファイル、ＰＤＦファイル、画像ファイル、音声ファイルなど他の種類のファイルにプログラムが埋め込まれたファイルであっても同様に処理できる。また、格納部１１は、バイナリデータの形式で格納せずに対象ファイルのファイル形式そのままで格納してもよい。学習済みＣＮＮは、順伝播型の畳み込みニューラルネットワークを想定するが、いわゆるＲｅｓＮｅｔおよびＤｅｎｓｅＮｅｔといった、一般的なＣＮＮと異なる特殊な多層ＣＮＮでも同様に適用することができる。ここで、学習済みＣＮＮに含まれる畳み込み層は、プログラムの命令単位で処理するように設計される。なお、本実施形態に係る学習済みＣＮＮの学習方法および利用方法については後述する。
【００１２】
取得部１２は、格納部１１から対象ファイルのバイナリデータを取得する。格納部１１において対象ファイルがバイナリデータ形式で格納されていない場合は、取得部１２が対象ファイルを取得し、取得部１２またはバイナリ変換部（図示せず）が、対象ファイルに対して一般的なバイナリ変換処理を施すことで、対象ファイルのバイナリデータを生成すればよい。なお、取得部１２は、外部から対象ファイルまたは対象ファイルのバイナリデータを取得してもよい。
【００１３】
抽出部１３は、バイナリデータを命令の集合とみなし、オペランドを含む複数個の命令のデータ列を抽出する。１命令の抽出手法としては、例えばディスアセンブラ処理を実行することで１命令のデータ列を抽出すればよい。なお、１命令のデータ列を抽出できる手法であればどのような手法を用いてもよい。なお、本実施形態に係る「命令」は、演算子を意味するオペコードと被演算子を意味するオペランドとを包含する概念である。また、バイナリデータが実際に命令の集合か否かは問わない。
パディング部１４は、複数個の命令のデータ列に対し、１命令ごとに固定長となるように固定文字のパディングを行い、複数の入力データ列を生成する。
【００１４】
変換部１５は、複数の入力データ列に対してビットエンコード処理を実行することにより、複数の入力層データ列を生成する。
生成部１６は、学習済みＣＮＮを用いて、複数の入力データ列または入力層データ列に基づき、プログラムの特徴ベクトルまたはクラス分類結果を生成する。クラス分類結果としては、プログラムであるか非プログラムであるかの分類と、プログラムの生成に用いられたコンパイラ種別の分類と、プログラムの生成に用いられたプログラム変換ツール（難読化ツール、パッカーなど）の種別の分類と、プログラムに含まれる機能種別の分類とのうちの少なくともいずれか１つの分類結果を想定する。
【００１５】
なお、本実施形態に係る識別装置１の利用例としては、例えば文書ファイルに埋め込まれたマルウェアの検出およびマルウェアのプログラムを生成した際のコンパイラの種別など、マルウェアのプログラムの詳細情報を検出することを想定するが、これに限らず、どのようなプログラムについても識別し、当該プログラムに関する詳細情報を得ることができる。
【００１６】
次に、本実施形態に係る識別装置１の動作例について図２のフローチャートを参照して説明する。
ステップＳ２０１では、取得部１２が、対象ファイルのバイナリデータを取得する。
ステップＳ２０２では、抽出部１３が、取得したバイナリデータを命令の集合とみなし、１命令ずつ分割することで複数個の命令を抽出する。各命令について、オペコードにオペランドが存在する場合、当該オペコード及びオペランドのセットが命令として抽出される。抽出する命令の個数は、ここでは１６個以上を想定する。なお、ＣＮＮの学習および設計過程においてクラス分類が可能であれば、命令は１６個未満でもよい。抽出部１３は、バイナリデータから１６個の命令が抽出されるまでバイナリデータを先頭から検索していけばよい。
【００１７】
ステップＳ２０３では、パディング部１４が、抽出された複数個の命令のデータ列について、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成する。固定長は、アーキテクチャの最大命令長以上となるように設定されればよい。ここでは、固定長として１２８ビット（１６バイト）を想定し、命令ごとに１２８ビットのデータ列となるようにゼロパディングするが、使用するアーキテクチャの最大命令長に従って変更すればよい。なお、固定文字は、０（ゼロ）に限らず、「Ｆ」で埋めるなどパディングであることを認識できる文字であればよい。
一般に、命令の種類によってデータ長（ビット長）が異なるため、そのままＣＮＮへの入力とした場合は命令単位での処理が難しい。一方、上述のステップＳ２０３の処理によれば、１命令を固定長とすることができるため、ＣＮＮにおいて命令ごとに処理することができる。
【００１８】
ステップＳ２０４では、変換部１５が、ステップＳ２０３において生成された複数の入力データ列のうちの入力データ列ごとに、１つ以上のエンコード処理を実行し、入力データ列を変換した入力層データ列を生成する。具体的に、変換部１５は、１２８ビットの入力データ列に対し、第１エンコード処理から第３エンコード処理までの複数のエンコード処理を実行し、１０２４個の入力層ニューロンに対応した固定長の入力層データ列とする。なお、入力層データ列の一要素は、浮動小数でもよいし、１ビット（０と１との２値）でもよい。また、固定長は１０２４に限らず、どのような値に設定してもよい。
【００１９】
エンコード処理としては、例えば、入力データ列を１つの「１」ビットとその他複数のビットを「０」として表した入力層データ列に変換する単一ビット処理（第１エンコード処理とも呼ぶ）、入力データ列に対応するビット列を直接に入力層データ列とする処理（第２エンコード処理とも呼ぶ）、および入力データ列で表現される数値をスカラー値である単一の入力層データに変換する処理（第３エンコード処理とも呼ぶ）が挙げられる。
【００２０】
具体的に第１エンコード処理を説明すると、まず、１命令を示す入力データ列の先頭から８ビットずつ分割し、８ビットのビット列を２５６ビットのビット列で表現する。すなわち、８ビットでは「０（００００００００（２））」から「２５５（１１１１１１１１（２））」までの２５６通りの値を表現できる。２５６ビットのビット列を先頭から数え、表現したい値と一致する位置でのビットを立て（１ビットとし）、他のビットを「０」とすることで表現する。つまり、変換部１５が、入力データ列「０００００００１（２）」に対して第１エンコード処理を適用すると、２５６ビットのビット列で先頭から２番目のビットを立て、他のビットを０とした入力層データ列「０１０００・・・０」を得ることができる。
【００２１】
第２エンコード処理は、入力データ列のビット列をそのまま入力層データ列として並べる処理である。なお、１０進数から２進数へ変換するなどの処理も第２エンコード処理に含むとする。
【００２２】
第３エンコード処理の適用例を説明する。例えば、あるアドレスへの移動を示す機械語「ＪＭＰ  ００８Ａ」を想定すると、オペランドとして与えられるアドレスは、１ビットアドレス値が異なったとしても命令の処理に影響がない場合もある。この場合、入力データ列のうちオペランドを示すビット列を、「０〜１」の範囲で示されるようなスカラー値に変換してもよい。つまり、オペランドを示すビット列、ここでは１６ビットで表現される値を浮動小数点などで表現すればよい。これにより、オペランドがスカラー値で表現されるため、オペランドの下位ビットの値が異なっても差分が強調されないエンコード処理となる。
例えば、ある入力データ列に対し、第２エンコード処理により得られる１２８ビットのデータ列を入力層データ列の１番目から１２８番目とし、当該入力データ列の先頭８ビットについて、第１エンコード処理より得られる２５６ビットのデータ列を入力層データ列の１２９番目から３８４番目とし、当該入力データ列のオペランド部分について、第３エンコード処理により得られるスカラー値を３８５番目とする、といったようにエンコード処理したデータを結合し、入力層データ列を生成すればよい。
【００２３】
ステップＳ２０５では、生成部１６が、複数の入力層データ列を学習済みＣＮＮに入力し、学習済みＣＮＮの出力であるクラス分類結果を生成する。学習済みＣＮＮにおける畳み込み層では、命令単位で処理されればよい。例えば入力層データ列が入力される畳み込み層において、入力層データ列のデータ長単位で処理されればよい。なお、生成部１６は、学習済みＣＮＮの出力として、複数個の命令に関するプログラムの特徴ベクトルを出力してもよい。特徴ベクトルを出力する場合は、生成部１６が、畳み込み層の出力を１次元ベクトルに変換して出力する学習済みＣＮＮに複数の入力層データ列を入力して処理すればよい。
【００２４】
なお、入力データ列に対してステップＳ２０４に示すエンコード処理を行わずに、入力データ列をそのまま学習済みＣＮＮの入力としてもよい。また、命令の種類またはオペランドの種類に応じて、ステップＳ２０４に示す第１エンコード処理から第３エンコード処理のうち適用するエンコード処理が決定されてもよい。
【００２５】
次に、ステップＳ２０２からステップＳ２０４までの処理、すなわち入力データの変換処理の具体例について図３を参照して説明する。
【００２６】
ステップＳ２０２の処理により、処理対象のバイナリデータ３０１から、複数個の命令を抽出する。抽出結果が命令セットテーブル３０３に示される。具体的に、バイナリデータ３０１を検索して、命令のデータ列「８３ＥＣ１４」（アセンブラでは「ＳＵＢ  ＥＳＰ，０ｘ１４））、命令のデータ列「５３」（アセンブラでは「ＰＵＳＨ  ＥＢＸ」）といったように、抽出された命令が順次蓄積される。ここでは、１６個の命令となるまで抽出される。
ステップＳ２０３の処理により、抽出された複数個の命令のデータ列各々が、１２８ビットの固定長になるようにゼロパディングされ、複数の入力データ列３０５が生成される。
ステップＳ２０４の処理により、１命令につき１２８ビットの入力データ列３０５がエンコード処理され、１２８ビットが１０２４個の入力層ニューロンに対応するよう固定長になるまで増加した複数の入力層データ列３０７が生成される。
【００２７】
次に、ステップＳ２０５の処理で利用する学習済みＣＮＮの構成例について図４を参照して説明する。
本実施形態に係るＣＮＮは、第１の畳み込み層４０１、第２の畳み込み層４０３、第１の全結合層４０５、第２の全結合層４０７および出力層である第３の全結合層４０９を含む。
【００２８】
ここで、複数の入力層データ列３０７が入力される第１の畳み込み層４０１では、入力層データ列に対し使用される畳み込みフィルタサイズおよびフィルタを移動させる幅を示すストライドの値が、入力層データ列ごと、つまり１命令ごとに処理されるように決定される。具体的には、上述した入力層データ列の固定長と等しくなるように、畳み込みフィルタサイズを「１０２４」、ストライドを「１０２４」に設定する。これにより、１命令ごとに畳み込み処理を実行することができ、固定長命令の認識に特化した局所受容野を形成することができる。なお、第１の畳み込み層４０１のチャネル数は６４または９６とするが、これに限らずどのようなチャネル数が設定されてもよい。
【００２９】
第２の畳み込み層４０３では、第１の畳み込み層４０１の出力が入力される。第２の畳み込み層４０３では、２つの命令間の関係の特徴が得られるように畳み込みフィルタサイズおよびストライドを決定する。ここでは、畳み込みフィルタサイズを２、ストライドを１、チャネル数を２５６と設定するが、これに限らず、２つの命令にまたがるような畳み込みフィルタサイズおよびストライドが決定されればよい。
【００３０】
第１の全結合層４０５および第２の全結合層４０７では、一般的な全結合処理であり、ここでは詳細な説明は省略する。
出力層である第３の全結合層４０９は、活性化関数としてＳｏｆｔｍａｘ関数を採用し、学習済みＣＮＮからの出力としてクラス分類結果を出力する。
【００３１】
次に、本実施形態に係る識別装置１のクラス分類結果の表示例について図５および図６を参照して説明する。
図５は、バイナリデータをビットイメージとして可視化した図である。図５左図は、対象ファイルのバイナリデータのビットイメージである。当該対象ファイルには、バイナリデータの前半部分にプログラムが書き込まれているが、ビットイメージを目視してもプログラムが書き込まれていることを把握することは困難である。
一方、図５右図は、本実施形態に係る識別装置１の出力結果として、プログラムのコンパイラ種別を分類した結果を、対象ファイルのバイナリデータで該当する部分に色分けして反映させたものである。右図に示すように、一目して、プログラムがバイナリデータのどの位置に書き込まれているかを把握することができる。さらには、どのコンパイラにより処理されたコードがバイナリデータのどの位置に存在するかについても容易に把握することができる。
【００３２】
次に、図６は、図５に表示したデータについて、プログラムのコンパイル時に最適化をしたか否かによりバイナリデータを色分けしたものである。
図６右図に示すように、コンパイル時に最適化したか否かという詳細な情報についても、ビットイメージから容易に把握することができる。
【００３３】
次に、本実施形態で用いるＣＮＮを学習させる学習装置について図７を参照して説明する。
学習装置７０は、取得部７０１と、格納部７０３と、抽出部１３と、パディング部１４と、変換部１５と、学習部７０５とを含む。
【００３４】
取得部７０１は、外部から、または格納部７０３に学習用データが格納されている場合は格納部７０３から、学習用データを取得する。学習用データは、入力データおよび正解データ（出力データ）の組であり、ＣＮＮの出力として得たいクラス分類結果に応じて用意される。例えば、マルウェアのコンパイラ種別を分類する場合、ドキュメントファイルおよび画像ファイルなどの非プログラムのバイナリデータ列および一般的な実行コード（プログラム）のバイナリデータ列を入力データとし、当該一般的な実行コードのコンパイラ種別（Visual C++、GCCおよびClangなど）を正解データとした学習用データを用いればよい。
その他のクラス分類結果としては、上述したように、プログラムコードであるか否かの２値分類でもよい。または、プログラムコードの生成に用いられたプログラム変換ツールの種別（パッカー、暗号化ツールなど）でもよい。または、プログラムコードに含まれる機能の種別（例えば、ソースコードにおける“print”の処理など）でもよい。
【００３５】
なお、学習時においては、マルウェアのプログラムだけを学習させなくても、一般的なプログラムに基づくコンパイラ種別などを学習させることで、プログラムに対する識別感度を十分に向上させることができる。さらに、一般的なプログラムであれば大量のデータを準備しやすいため、学習効率を向上させることができる。
【００３６】
格納部７０３は、学習前のＣＮＮを格納する。なお、格納部７０３は、事前に学習用データを格納してもよい。
なお、入力データのバイナリデータ列は、抽出部１３、パディング部１４および変換部１５により、上述の識別装置１での処理対象データと同様に処理されることで生成されればよい。
【００３７】
学習部７０５は、学習用データを用いて、入力データを入力し、正解データが出力されるようにＣＮＮを学習させ、伝播法などによりＣＮＮにおけるパラメータを決定すればよい。ここで学習部７０５は、少なくとも１つの畳み込み層において命令単位で処理するようにＣＮＮを学習させればよい。つまり、図４に示す第１の畳み込み層４０１では、１命令ごとに畳み込み処理されるように畳み込みフィルタサイズおよびストライドが設定されればよい。具体的には、畳み込みフィルタサイズおよびストライドは、入力層データ列が入力される場合は、入力層データ列が入力される畳み込み層において、入力層データ列のデータ長単位で処理されるように設定されればよい。第２の畳み込み層４０３では、２つの命令間にまたがって畳み込み処理されるように、畳み込みフィルタサイズおよびストライドが設定さればよい。
以上のように学習させた学習済みＣＮＮが、識別装置１に格納されバイナリデータ列に対する処理が実行される。
【００３８】
なお、本実施形態に係る識別装置１では、例えばコンパイラの種別を分類するように学習させた学習済みＣＮＮにおける重み（パラメータ）を固定し、コンパイラの種別の分類以外の他のクラス分類、例えばプログラム変換ツールの種別の分類など他のクラス分類を行うために当該学習済みＣＮＮを流用してもよい。
具体的には、コンパイラの種別を分類する学習済みＣＮＮに含まれる第１の畳み込み層４０１および第２の畳み込み層４０３を、それぞれの重みを固定したまま、未学習のＣＮＮの一部として含める。学習装置は、第１の畳み込み層４０１および第２の畳み込み層４０３から出力される値（特徴ベクトルの値）は重みを固定したまま計算し、第２の畳み込み層４０３の後に続く層（例えば、プーリング層、全結合層および出力層）を難読化ツールまたはパッカーの種別を分類できるように、難読化ツールおよびパッカーの種別に関する正解データを含む学習用データを用いて重みを学習させればよい（転移学習させる）。
【００３９】
プログラムコードの分類に際し、畳み込み層において命令ごとに畳み込み処理を行うことが重要であるため、コンパイラ種別の分類であるか、プログラム変換ツールの種別の分類であるかは、畳み込み層以降の層構成により分類の仕方を方向付けることができる。よって、学習済みＣＮＮに含まれる第１の畳み込み層４０１および第２の畳み込み層４０３を流用することで、大量の学習用データを比較的用意しやすいコンパイラ種別の分類に関する学習用データでＣＮＮを学習させた知見を、大量の学習用データを用意することが困難なクラス分類に適用することができる。
【００４０】
以上に示した本実施形態によれば、学習装置により対象ファイルのプログラムに関して命令単位で処理するようにＣＮＮを学習させ、学習済みＣＮＮを含む識別装置により、対象ファイルをクラス分類する。これにより、例えば未知のマルウェアに感染した文書ファイルに含まれるプログラム（シェルコード）に対して、プログラムの検出、文書ファイル中の感染位置の特定、およびプログラムコードを作成する際に使用したコンパイラ種別、プログラム変換ツールなどの開発環境を高精度かつ詳細に識別することができる。
上記の通り、本実施形態に係る命令は、オペコードとオペランドとを含むので、ＣＮＮは、オペランドを含む命令単位で畳み込み処理を実行する。オペランドには、レジスタの使われ方等のコンパイラ固有の情報が反映されている。よって、本実施形態に係るＣＮＮのように、オペコードだけでなく、オペランドも活用することにより、より高精度かつ詳細にコンパイラ種別等を識別することができる。
【００４１】
上述の実施形態の中で示した処理手順に示された指示は、ソフトウェアであるプログラムに基づいて実行されることが可能である。汎用の計算機システムが、このプログラムを予め記録媒体に記憶しておき、記憶されたプログラムを読み込むことにより、上述した識別装置による効果と同様な効果を得ることも可能である。さらに、本実施形態における記録媒体は、コンピュータあるいは組み込みシステムと独立した媒体に限らず、ＬＡＮやインターネット等により伝達されたプログラムをダウンロードして記憶または一時記憶した記録媒体も含まれる。
【００４２】
なお、本願発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。
【符号の説明】
【００４３】
１…識別装置、１０…電子回路、１１，７０３…格納部、１２，７０１…取得部、１３…抽出部、１４…パディング部、１５…変換部、１６…生成部、７０…学習装置、３０１…バイナリデータ、３０３…命令セットテーブル、３０５…入力データ列、３０７…入力層データ列、４０１…第１の畳み込み層、４０３…第２の畳み込み層、４０５…第１の全結合層、４０７…第２の全結合層、４０９…第３の全結合層（出力層）、７０５…学習部。
【図１】
2020148811.tif 000003
【図２】
2020148811.tif 000004
【図３】
2020148811.tif 000005
【図４】
2020148811.tif 000006
【図５】
2020148811.tif 000007
【図６】
2020148811.tif 000008
【図７】
2020148811.tif 000009
【国際調査報告】
2020148811.tif 000010
2020148811.tif 000011
2020148811.tif 000012
2020148811.tif 000013