IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 大塚 玲の特許一覧

<>
  • 特許-識別装置、識別プログラム及び学習装置 図1
  • 特許-識別装置、識別プログラム及び学習装置 図2
  • 特許-識別装置、識別プログラム及び学習装置 図3
  • 特許-識別装置、識別プログラム及び学習装置 図4
  • 特許-識別装置、識別プログラム及び学習装置 図5
  • 特許-識別装置、識別プログラム及び学習装置 図6
  • 特許-識別装置、識別プログラム及び学習装置 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-01
(45)【発行日】2023-09-11
(54)【発明の名称】識別装置、識別プログラム及び学習装置
(51)【国際特許分類】
   G06F 8/75 20180101AFI20230904BHJP
   G06F 8/74 20180101ALI20230904BHJP
   G06F 21/56 20130101ALI20230904BHJP
   G06N 3/02 20060101ALI20230904BHJP
   G06N 20/00 20190101ALI20230904BHJP
【FI】
G06F8/75
G06F8/74
G06F21/56 320
G06N3/02
G06N20/00
【請求項の数】 9
(21)【出願番号】P 2020566362
(86)(22)【出願日】2019-01-15
(86)【国際出願番号】 JP2019000965
(87)【国際公開番号】W WO2020148811
(87)【国際公開日】2020-07-23
【審査請求日】2021-06-29
【新規性喪失の例外の表示】特許法第30条第2項適用 1.2018年6月14日 https://arxiv.org/abs/1806.05328にて発表 2.2018年10月15日 https://www.iwsec.org/css/2018/program.html#i4C2 https://ipsj.ixsq.nii.ac.jp/ej/index.php?active_action=repository_view_main_item_detail&page_id=13&block_id=8&item_id=192272&item_no=1にて発表 3.2018年10月15日 コンピュータセキュリティシンポジウム2018 論文集 第1259-1265頁にて発表 4.2018年10月25日 コンピュータセキュリティシンポジウム2018にて発表 5.2018年1月23日 https://www.iwsec.org/scis/2018/program.htmlにて発表 6.2018年1月23日 2018年暗号と情報セキュリティシンポジウム概要集 第1-7頁にて発表 7.2018年1月25日 2018年暗号と情報セキュリティシンポジウム(SCIS2018)にて発表
(73)【特許権者】
【識別番号】508190090
【氏名又は名称】大塚 玲
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(74)【代理人】
【識別番号】100108855
【弁理士】
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100103034
【弁理士】
【氏名又は名称】野河 信久
(74)【代理人】
【識別番号】100179062
【弁理士】
【氏名又は名称】井上 正
(74)【代理人】
【識別番号】100153051
【弁理士】
【氏名又は名称】河野 直樹
(74)【代理人】
【識別番号】100199565
【弁理士】
【氏名又は名称】飯野 茂
(74)【代理人】
【識別番号】100162570
【弁理士】
【氏名又は名称】金子 早苗
(72)【発明者】
【氏名】大塚 玲
(72)【発明者】
【氏名】大坪 雄平
【審査官】打出 義尚
(56)【参考文献】
【文献】特表2018-524735(JP,A)
【文献】米国特許出願公開第2013/0291111(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/75
G06F 8/74
G06F 21/56
G06N 3/02
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
バイナリデータから複数個の命令を抽出する抽出部と、
前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成するパディング部と、
一命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する生成部と、
を具備する識別装置。
【請求項2】
前記入力データ列に対応するビット列を入力層データ列とするエンコード処理を実行する変換部をさらに具備し、
前記生成部は、前記エンコード処理が適用された入力層データ列を、前記畳み込みニューラルネットワークへ入力することで、前記特徴ベクトルまたは前記クラス分類結果を生成する請求項1に記載の識別装置。
【請求項3】
前記畳み込み層における1層目の畳み込みフィルタサイズおよびストライドは、前記命令単位で処理されるように決定される請求項1または請求項2に記載の識別装置。
【請求項4】
前記クラス分類結果は、前記プログラムであるか非プログラムであるかの分類と、前記プログラムの生成に用いられたコンパイラ種別の分類と、前記プログラムの生成に用いられたプログラム変換ツールの種別の分類と、前記プログラムに含まれる機能種別の分類とのうちの少なくともいずれか1つの分類結果を示す請求項1から請求項3のいずれか1項に記載の識別装置。
【請求項5】
前記抽出部は、ディスアセンブラ処理を含む請求項1から請求項4のいずれか1項に記載の識別装置。
【請求項6】
前記プログラムは、対象ファイルに埋め込まれたマルウェアである、請求項1から請求項5のいずれか1項に記載の識別装置
【請求項7】
コンピュータに、
バイナリデータから複数個の命令を抽出する抽出機能と、
前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成するパディング機能と、
一命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する生成機能と、
を実現させるための識別プログラム。
【請求項8】
バイナリデータから抽出された複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングおよびエンコード処理を行うことで生成された複数の入力層データ列を入力データとし、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を出力データとする学習用データを取得する取得部と、
前記学習用データに基づいて、前記複数の入力層データ列から前記特徴ベクトルまたは前記クラス分類結果を出力するように、畳み込み層を含む畳み込みニューラルネットワークを学習させる学習部と、を具備し、
前記畳み込み層における畳み込みフィルタサイズおよびストライドは、一命令単位で処理されるように決定される学習装置。
【請求項9】
前記プログラムは、対象ファイルに埋め込まれたマルウェアである請求項8に記載の学習装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、識別装置、識別プログラム及び学習装置に関する。
【背景技術】
【0002】
マルウェアは一日数十万個もの新種が出現しているといわれ、セキュリティ強化の観点ではマルウェアを自動的に解析、分類することが急務である。マルウェアの検出方法としては、例えば、攻撃コードの値の分布が一定の範囲内にあることを利用してRoP(Return Oriented Programming)攻撃コードを検出する手法がある(例えば、特許文献1参照)。また、ドキュメントファイルを処理するプログラムを実際に実行して、プログラムカウンタの値の範囲が一定範囲内に収まるか否かを判定することで、処理プログラムの制御フローを意図的に変更するマルウェアが含まれるか否かを検出する手法がある(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2016-9405号公報
【文献】特許第5265061号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、特許文献1に示す手法では、識別器で識別可能な特徴が線形分離可能なものに限られるという問題がある。また、特許文献2に示す方法では、分析対象のドキュメントファイルの処理プログラムに別途、検査コードを埋め込む必要があるため手間と時間がかかるという問題がある。
【0005】
本発明は、上述した事情を考慮してなされたものであり、対象プログラムを高精度かつ詳細に識別できる識別装置、識別プログラム及び学習装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
上述の課題を解決するため、本実施形態にかかる識別装置は、抽出部と、パディング部と、生成部とを含む。抽出部は、バイナリデータから複数個の命令を抽出する。パディング部は、前記複数個の命令のデータ列に対し、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成する。生成部は、命令単位で処理する畳み込み層を含む学習済みの畳み込みニューラルネットワークを用いて、前記複数の入力データ列に基づき、前記複数個の命令を含むプログラムの特徴ベクトルまたは前記プログラムに関するクラス分類結果を生成する。
【発明の効果】
【0007】
本発明の識別装置、識別プログラム及び学習装置によれば、対象プログラムを高精度かつ詳細に識別できる。
【図面の簡単な説明】
【0008】
図1】本実施形態に係る識別装置を示すブロック図。
図2】本実施形態に係る識別装置の動作例を示すフローチャート。
図3】本実施形態に係る入力データの変換処理の具体例を示す図。
図4】本実施形態に係る学習済みCNNの構成例を示す図。
図5】本実施形態に係る識別装置のクラス分類結果の表示例を示す図。
図6】本実施形態に係る識別装置のクラス分類結果の表示例を示す図。
図7】本実施形態に係る学習装置を示すブロック図。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら本発明の実施形態に係る識別装置、識別プログラム及び学習装置について詳細に説明する。なお、以下の実施形態中では、同一の番号を付した部分については同様の動作を行うものとして、重ねての説明を省略する。
【0010】
本実施形態に係る識別装置1は、格納部11と、取得部12と、抽出部13と、パディング部14と、変換部15と、生成部16とを含む。図1では、取得部12と、抽出部13と、パディング部14と、変換部15と、生成部16とは、電子回路10に実装される例を示す。電子回路10は、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などの1つの処理回路、またはASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路により構成される。電子回路10と格納部11とはバスでデータ送受信可能に接続される。なお、これに限らず、各部が単独の処理回路または単独の集積回路として構成されてもよい。
【0011】
格納部11は、処理対象となるファイル(以下、対象ファイルと呼ぶ)のバイナリデータと、学習済みの畳み込みニューラルネットワーク(CNN:Convolutional Newral Network)モデル(以下、学習済みCNNと呼ぶ)を格納する。格納部11は、ROM(Read Only Memory)やRAM(Random Access Memory)、HDD(Hard Disk Drive)、SSD(Solid State Drive)、集積回路記憶装置等の記憶装置により構成される。
本実施形態では、対象ファイルとして、プログラム(シェルコード)が埋め込まれた文書ファイル(Word(登録商標)ファイルなど)を想定するが、実行ファイル、PDFファイル、画像ファイル、音声ファイルなど他の種類のファイルにプログラムが埋め込まれたファイルであっても同様に処理できる。また、格納部11は、バイナリデータの形式で格納せずに対象ファイルのファイル形式そのままで格納してもよい。学習済みCNNは、順伝播型の畳み込みニューラルネットワークを想定するが、いわゆるResNetおよびDenseNetといった、一般的なCNNと異なる特殊な多層CNNでも同様に適用することができる。ここで、学習済みCNNに含まれる畳み込み層は、プログラムの命令単位で処理するように設計される。なお、本実施形態に係る学習済みCNNの学習方法および利用方法については後述する。
【0012】
取得部12は、格納部11から対象ファイルのバイナリデータを取得する。格納部11において対象ファイルがバイナリデータ形式で格納されていない場合は、取得部12が対象ファイルを取得し、取得部12またはバイナリ変換部(図示せず)が、対象ファイルに対して一般的なバイナリ変換処理を施すことで、対象ファイルのバイナリデータを生成すればよい。なお、取得部12は、外部から対象ファイルまたは対象ファイルのバイナリデータを取得してもよい。
【0013】
抽出部13は、バイナリデータを命令の集合とみなし、オペランドを含む複数個の命令のデータ列を抽出する。1命令の抽出手法としては、例えばディスアセンブラ処理を実行することで1命令のデータ列を抽出すればよい。なお、1命令のデータ列を抽出できる手法であればどのような手法を用いてもよい。なお、本実施形態に係る「命令」は、演算子を意味するオペコードと被演算子を意味するオペランドとを包含する概念である。また、バイナリデータが実際に命令の集合か否かは問わない。
パディング部14は、複数個の命令のデータ列に対し、1命令ごとに固定長となるように固定文字のパディングを行い、複数の入力データ列を生成する。
【0014】
変換部15は、複数の入力データ列に対してビットエンコード処理を実行することにより、複数の入力層データ列を生成する。
生成部16は、学習済みCNNを用いて、複数の入力データ列または入力層データ列に基づき、プログラムの特徴ベクトルまたはクラス分類結果を生成する。クラス分類結果としては、プログラムであるか非プログラムであるかの分類と、プログラムの生成に用いられたコンパイラ種別の分類と、プログラムの生成に用いられたプログラム変換ツール(難読化ツール、パッカーなど)の種別の分類と、プログラムに含まれる機能種別の分類とのうちの少なくともいずれか1つの分類結果を想定する。
【0015】
なお、本実施形態に係る識別装置1の利用例としては、例えば文書ファイルに埋め込まれたマルウェアの検出およびマルウェアのプログラムを生成した際のコンパイラの種別など、マルウェアのプログラムの詳細情報を検出することを想定するが、これに限らず、どのようなプログラムについても識別し、当該プログラムに関する詳細情報を得ることができる。
【0016】
次に、本実施形態に係る識別装置1の動作例について図2のフローチャートを参照して説明する。
ステップS201では、取得部12が、対象ファイルのバイナリデータを取得する。
ステップS202では、抽出部13が、取得したバイナリデータを命令の集合とみなし、1命令ずつ分割することで複数個の命令を抽出する。各命令について、オペコードにオペランドが存在する場合、当該オペコード及びオペランドのセットが命令として抽出される。抽出する命令の個数は、ここでは16個以上を想定する。なお、CNNの学習および設計過程においてクラス分類が可能であれば、命令は16個未満でもよい。抽出部13は、バイナリデータから16個の命令が抽出されるまでバイナリデータを先頭から検索していけばよい。
【0017】
ステップS203では、パディング部14が、抽出された複数個の命令のデータ列について、固定長となるように命令ごとに固定文字のパディングを行い、複数の入力データ列を生成する。固定長は、アーキテクチャの最大命令長以上となるように設定されればよい。ここでは、固定長として128ビット(16バイト)を想定し、命令ごとに128ビットのデータ列となるようにゼロパディングするが、使用するアーキテクチャの最大命令長に従って変更すればよい。なお、固定文字は、0(ゼロ)に限らず、「F」で埋めるなどパディングであることを認識できる文字であればよい。
一般に、命令の種類によってデータ長(ビット長)が異なるため、そのままCNNへの入力とした場合は命令単位での処理が難しい。一方、上述のステップS203の処理によれば、1命令を固定長とすることができるため、CNNにおいて命令ごとに処理することができる。
【0018】
ステップS204では、変換部15が、ステップS203において生成された複数の入力データ列のうちの入力データ列ごとに、1つ以上のエンコード処理を実行し、入力データ列を変換した入力層データ列を生成する。具体的に、変換部15は、128ビットの入力データ列に対し、第1エンコード処理から第3エンコード処理までの複数のエンコード処理を実行し、1024個の入力層ニューロンに対応した固定長の入力層データ列とする。なお、入力層データ列の一要素は、浮動小数でもよいし、1ビット(0と1との2値)でもよい。また、固定長は1024に限らず、どのような値に設定してもよい。
【0019】
エンコード処理としては、例えば、入力データ列を1つの「1」ビットとその他複数のビットを「0」として表した入力層データ列に変換する単一ビット処理(第1エンコード処理とも呼ぶ)、入力データ列に対応するビット列を直接に入力層データ列とする処理(第2エンコード処理とも呼ぶ)、および入力データ列で表現される数値をスカラー値である単一の入力層データに変換する処理(第3エンコード処理とも呼ぶ)が挙げられる。
【0020】
具体的に第1エンコード処理を説明すると、まず、1命令を示す入力データ列の先頭から8ビットずつ分割し、8ビットのビット列を256ビットのビット列で表現する。すなわち、8ビットでは「0(00000000(2))」から「255(11111111(2))」までの256通りの値を表現できる。256ビットのビット列を先頭から数え、表現したい値と一致する位置でのビットを立て(1ビットとし)、他のビットを「0」とすることで表現する。つまり、変換部15が、入力データ列「00000001(2)」に対して第1エンコード処理を適用すると、256ビットのビット列で先頭から2番目のビットを立て、他のビットを0とした入力層データ列「01000・・・0」を得ることができる。
【0021】
第2エンコード処理は、入力データ列のビット列をそのまま入力層データ列として並べる処理である。なお、10進数から2進数へ変換するなどの処理も第2エンコード処理に含むとする。
【0022】
第3エンコード処理の適用例を説明する。例えば、あるアドレスへの移動を示す機械語「JMP 008A」を想定すると、オペランドとして与えられるアドレスは、1ビットアドレス値が異なったとしても命令の処理に影響がない場合もある。この場合、入力データ列のうちオペランドを示すビット列を、「0~1」の範囲で示されるようなスカラー値に変換してもよい。つまり、オペランドを示すビット列、ここでは16ビットで表現される値を浮動小数点などで表現すればよい。これにより、オペランドがスカラー値で表現されるため、オペランドの下位ビットの値が異なっても差分が強調されないエンコード処理となる。
例えば、ある入力データ列に対し、第2エンコード処理により得られる128ビットのデータ列を入力層データ列の1番目から128番目とし、当該入力データ列の先頭8ビットについて、第1エンコード処理より得られる256ビットのデータ列を入力層データ列の129番目から384番目とし、当該入力データ列のオペランド部分について、第3エンコード処理により得られるスカラー値を385番目とする、といったようにエンコード処理したデータを結合し、入力層データ列を生成すればよい。
【0023】
ステップS205では、生成部16が、複数の入力層データ列を学習済みCNNに入力し、学習済みCNNの出力であるクラス分類結果を生成する。学習済みCNNにおける畳み込み層では、命令単位で処理されればよい。例えば入力層データ列が入力される畳み込み層において、入力層データ列のデータ長単位で処理されればよい。なお、生成部16は、学習済みCNNの出力として、複数個の命令に関するプログラムの特徴ベクトルを出力してもよい。特徴ベクトルを出力する場合は、生成部16が、畳み込み層の出力を1次元ベクトルに変換して出力する学習済みCNNに複数の入力層データ列を入力して処理すればよい。
【0024】
なお、入力データ列に対してステップS204に示すエンコード処理を行わずに、入力データ列をそのまま学習済みCNNの入力としてもよい。また、命令の種類またはオペランドの種類に応じて、ステップS204に示す第1エンコード処理から第3エンコード処理のうち適用するエンコード処理が決定されてもよい。
【0025】
次に、ステップS202からステップS204までの処理、すなわち入力データの変換処理の具体例について図3を参照して説明する。
【0026】
ステップS202の処理により、処理対象のバイナリデータ301から、複数個の命令を抽出する。抽出結果が命令セットテーブル303に示される。具体的に、バイナリデータ301を検索して、命令のデータ列「83EC14」(アセンブラでは「SUB ESP,0x14))、命令のデータ列「53」(アセンブラでは「PUSH EBX」)といったように、抽出された命令が順次蓄積される。ここでは、16個の命令となるまで抽出される。
ステップS203の処理により、抽出された複数個の命令のデータ列各々が、128ビットの固定長になるようにゼロパディングされ、複数の入力データ列305が生成される。
ステップS204の処理により、1命令につき128ビットの入力データ列305がエンコード処理され、128ビットが1024個の入力層ニューロンに対応するよう固定長になるまで増加した複数の入力層データ列307が生成される。
【0027】
次に、ステップS205の処理で利用する学習済みCNNの構成例について図4を参照して説明する。
本実施形態に係るCNNは、第1の畳み込み層401、第2の畳み込み層403、第1の全結合層405、第2の全結合層407および出力層である第3の全結合層409を含む。
【0028】
ここで、複数の入力層データ列307が入力される第1の畳み込み層401では、入力層データ列に対し使用される畳み込みフィルタサイズおよびフィルタを移動させる幅を示すストライドの値が、入力層データ列ごと、つまり1命令ごとに処理されるように決定される。具体的には、上述した入力層データ列の固定長と等しくなるように、畳み込みフィルタサイズを「1024」、ストライドを「1024」に設定する。これにより、1命令ごとに畳み込み処理を実行することができ、固定長命令の認識に特化した局所受容野を形成することができる。なお、第1の畳み込み層401のチャネル数は64または96とするが、これに限らずどのようなチャネル数が設定されてもよい。
【0029】
第2の畳み込み層403では、第1の畳み込み層401の出力が入力される。第2の畳み込み層403では、2つの命令間の関係の特徴が得られるように畳み込みフィルタサイズおよびストライドを決定する。ここでは、畳み込みフィルタサイズを2、ストライドを1、チャネル数を256と設定するが、これに限らず、2つの命令にまたがるような畳み込みフィルタサイズおよびストライドが決定されればよい。
【0030】
第1の全結合層405および第2の全結合層407では、一般的な全結合処理であり、ここでは詳細な説明は省略する。
出力層である第3の全結合層409は、活性化関数としてSoftmax関数を採用し、学習済みCNNからの出力としてクラス分類結果を出力する。
【0031】
次に、本実施形態に係る識別装置1のクラス分類結果の表示例について図5および図6を参照して説明する。
図5は、バイナリデータをビットイメージとして可視化した図である。図5左図は、対象ファイルのバイナリデータのビットイメージである。当該対象ファイルには、バイナリデータの前半部分にプログラムが書き込まれているが、ビットイメージを目視してもプログラムが書き込まれていることを把握することは困難である。
一方、図5右図は、本実施形態に係る識別装置1の出力結果として、プログラムのコンパイラ種別を分類した結果を、対象ファイルのバイナリデータで該当する部分に色分けして反映させたものである。右図に示すように、一目して、プログラムがバイナリデータのどの位置に書き込まれているかを把握することができる。さらには、どのコンパイラにより処理されたコードがバイナリデータのどの位置に存在するかについても容易に把握することができる。
【0032】
次に、図6は、図5に表示したデータについて、プログラムのコンパイル時に最適化をしたか否かによりバイナリデータを色分けしたものである。
図6右図に示すように、コンパイル時に最適化したか否かという詳細な情報についても、ビットイメージから容易に把握することができる。
【0033】
次に、本実施形態で用いるCNNを学習させる学習装置について図7を参照して説明する。
学習装置70は、取得部701と、格納部703と、抽出部13と、パディング部14と、変換部15と、学習部705とを含む。
【0034】
取得部701は、外部から、または格納部703に学習用データが格納されている場合は格納部703から、学習用データを取得する。学習用データは、入力データおよび正解データ(出力データ)の組であり、CNNの出力として得たいクラス分類結果に応じて用意される。例えば、マルウェアのコンパイラ種別を分類する場合、ドキュメントファイルおよび画像ファイルなどの非プログラムのバイナリデータ列および一般的な実行コード(プログラム)のバイナリデータ列を入力データとし、当該一般的な実行コードのコンパイラ種別(Visual C++、GCCおよびClangなど)を正解データとした学習用データを用いればよい。
その他のクラス分類結果としては、上述したように、プログラムコードであるか否かの2値分類でもよい。または、プログラムコードの生成に用いられたプログラム変換ツールの種別(パッカー、暗号化ツールなど)でもよい。または、プログラムコードに含まれる機能の種別(例えば、ソースコードにおける“print”の処理など)でもよい。
【0035】
なお、学習時においては、マルウェアのプログラムだけを学習させなくても、一般的なプログラムに基づくコンパイラ種別などを学習させることで、プログラムに対する識別感度を十分に向上させることができる。さらに、一般的なプログラムであれば大量のデータを準備しやすいため、学習効率を向上させることができる。
【0036】
格納部703は、学習前のCNNを格納する。なお、格納部703は、事前に学習用データを格納してもよい。
なお、入力データのバイナリデータ列は、抽出部13、パディング部14および変換部15により、上述の識別装置1での処理対象データと同様に処理されることで生成されればよい。
【0037】
学習部705は、学習用データを用いて、入力データを入力し、正解データが出力されるようにCNNを学習させ、伝播法などによりCNNにおけるパラメータを決定すればよい。ここで学習部705は、少なくとも1つの畳み込み層において命令単位で処理するようにCNNを学習させればよい。つまり、図4に示す第1の畳み込み層401では、1命令ごとに畳み込み処理されるように畳み込みフィルタサイズおよびストライドが設定されればよい。具体的には、畳み込みフィルタサイズおよびストライドは、入力層データ列が入力される場合は、入力層データ列が入力される畳み込み層において、入力層データ列のデータ長単位で処理されるように設定されればよい。第2の畳み込み層403では、2つの命令間にまたがって畳み込み処理されるように、畳み込みフィルタサイズおよびストライドが設定さればよい。
以上のように学習させた学習済みCNNが、識別装置1に格納されバイナリデータ列に対する処理が実行される。
【0038】
なお、本実施形態に係る識別装置1では、例えばコンパイラの種別を分類するように学習させた学習済みCNNにおける重み(パラメータ)を固定し、コンパイラの種別の分類以外の他のクラス分類、例えばプログラム変換ツールの種別の分類など他のクラス分類を行うために当該学習済みCNNを流用してもよい。
具体的には、コンパイラの種別を分類する学習済みCNNに含まれる第1の畳み込み層401および第2の畳み込み層403を、それぞれの重みを固定したまま、未学習のCNNの一部として含める。学習装置は、第1の畳み込み層401および第2の畳み込み層403から出力される値(特徴ベクトルの値)は重みを固定したまま計算し、第2の畳み込み層403の後に続く層(例えば、プーリング層、全結合層および出力層)を難読化ツールまたはパッカーの種別を分類できるように、難読化ツールおよびパッカーの種別に関する正解データを含む学習用データを用いて重みを学習させればよい(転移学習させる)。
【0039】
プログラムコードの分類に際し、畳み込み層において命令ごとに畳み込み処理を行うことが重要であるため、コンパイラ種別の分類であるか、プログラム変換ツールの種別の分類であるかは、畳み込み層以降の層構成により分類の仕方を方向付けることができる。よって、学習済みCNNに含まれる第1の畳み込み層401および第2の畳み込み層403を流用することで、大量の学習用データを比較的用意しやすいコンパイラ種別の分類に関する学習用データでCNNを学習させた知見を、大量の学習用データを用意することが困難なクラス分類に適用することができる。
【0040】
以上に示した本実施形態によれば、学習装置により対象ファイルのプログラムに関して命令単位で処理するようにCNNを学習させ、学習済みCNNを含む識別装置により、対象ファイルをクラス分類する。これにより、例えば未知のマルウェアに感染した文書ファイルに含まれるプログラム(シェルコード)に対して、プログラムの検出、文書ファイル中の感染位置の特定、およびプログラムコードを作成する際に使用したコンパイラ種別、プログラム変換ツールなどの開発環境を高精度かつ詳細に識別することができる。
上記の通り、本実施形態に係る命令は、オペコードとオペランドとを含むので、CNNは、オペランドを含む命令単位で畳み込み処理を実行する。オペランドには、レジスタの使われ方等のコンパイラ固有の情報が反映されている。よって、本実施形態に係るCNNのように、オペコードだけでなく、オペランドも活用することにより、より高精度かつ詳細にコンパイラ種別等を識別することができる。
【0041】
上述の実施形態の中で示した処理手順に示された指示は、ソフトウェアであるプログラムに基づいて実行されることが可能である。汎用の計算機システムが、このプログラムを予め記録媒体に記憶しておき、記憶されたプログラムを読み込むことにより、上述した識別装置による効果と同様な効果を得ることも可能である。さらに、本実施形態における記録媒体は、コンピュータあるいは組み込みシステムと独立した媒体に限らず、LANやインターネット等により伝達されたプログラムをダウンロードして記憶または一時記憶した記録媒体も含まれる。
【0042】
なお、本願発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。
【符号の説明】
【0043】
1…識別装置、10…電子回路、11,703…格納部、12,701…取得部、13…抽出部、14…パディング部、15…変換部、16…生成部、70…学習装置、301…バイナリデータ、303…命令セットテーブル、305…入力データ列、307…入力層データ列、401…第1の畳み込み層、403…第2の畳み込み層、405…第1の全結合層、407…第2の全結合層、409…第3の全結合層(出力層)、705…学習部。
図1
図2
図3
図4
図5
図6
図7