JP2011034377A - 情報処理装置及び情報処理方法及びプログラム - Google Patents

情報処理装置及び情報処理方法及びプログラム Download PDF

Info

Publication number
JP2011034377A
JP2011034377A JP2009180379A JP2009180379A JP2011034377A JP 2011034377 A JP2011034377 A JP 2011034377A JP 2009180379 A JP2009180379 A JP 2009180379A JP 2009180379 A JP2009180379 A JP 2009180379A JP 2011034377 A JP2011034377 A JP 2011034377A
Authority
JP
Japan
Prior art keywords
function
sample
operation code
appearance distribution
identification
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009180379A
Other languages
English (en)
Inventor
Takeshi Yoshida
剛 吉田
Toru Inada
徹 稲田
Michiaki Harada
道明 原田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2009180379A priority Critical patent/JP2011034377A/ja
Publication of JP2011034377A publication Critical patent/JP2011034377A/ja
Pending legal-status Critical Current

Links

Abstract

【課題】様々な環境で実装された関数を対象にして、これらの関数が特定の演算アルゴリズムを実装した関数であるか否かを識別する。
【解決手段】関数抽出部120は、互いに異なる環境で作成された複数の学習サンプル200の各々から、特定の演算アルゴリズムを実装したサンプル関数を抽出する。関数モデル生成部140は、各サンプル関数におけるオペコードの出現分布を用いて算出した各サンプル関数同士の適合度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、グループにおけるオペコードの出現分布を示す関数モデルを生成する。関数識別部150は、各グループの関数モデルと識別対象プログラム400内の関数におけるオペコードの出現分布とを用いて算出した当該関数の各グループに対する適合度に基づき、当該関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別する。
【選択図】図2

Description

本発明は、情報処理装置及び情報処理方法及びプログラムに関するものである。本発明は、特に、プログラムの実行ファイルを検査し、特定の演算アルゴリズムの実現コードを含むかどうかを判定するための方法(プログラムコード解析方法)、及び、その方法を実現する装置(プログラムコード解析装置)に関するものである。
近年、ウイルスやP2P(ピアツーピア)通信を利用したファイル共有のように、社会的に問題となるプログラム(以下、マルウェアと呼ぶ)が増加している。マルウェアによる被害を防ぐためには、マルウェアがどのような挙動をするのかを知り、マルウェア自身もしくはマルウェアの行動を識別する必要がある。
例えば、マルウェアの通信方法を知ることができれば、該当する通信を遮断することでマルウェアの行動を防止することが可能であるし、マルウェアのデータに特定のパターンがあることが分かれば、そのパターン(シグネチャと呼ばれる)を利用して、マルウェアであるかを識別することが可能である。同様に、マルウェアがどのような機能(演算アルゴリズムを備えた関数やAPI(Application・Programming・Interface))を備えているか知ることにより、マルウェアの挙動の解析に役立てることができる。
プログラムの挙動や備えている機能(演算アルゴリズムを備えた関数やAPI)を解析する方法としては、大きく分けて静的、動的の2つのタイプがある。静的な方法では、プログラムの実行ファイルやプログラムのソースコードを解析する。動的な方法では、プログラムを動作させ、その挙動や出力されるデータ等を収集・解析する。以下では、静的な方法を対象として説明する。
マルウェア等のプログラムを静的な方法で解析する手法としては、様々な技術が知られている(例えば、特許文献1〜7参照)。静的な解析を行う場合、人間が理解しやすい記述となっているソースコードがあれば、プログラムの挙動を比較的容易に知ることができる。しかしながら、マルウェア等のプログラムについては解析の手助けとなるソースコードが得られないことが多いため、実行ファイルを解析してプログラムの挙動を解析しなくてはならない。実行ファイルはオブジェクトコードで構成されており、逆アセンブルを実行することでアセンブリコードに変換することができるが、完全に元のソースコードが再現されるわけではなく、また、アセンブリコードは人間が理解しにくい記述となっているため、プログラムを解析するために非常に大きなコストがかかるという問題がある。
例えば、プログラムの実行ファイルからウイルスを検出する手法として、特許文献1に記載のものがある。特許文献1では、実行プログラムにウイルスや悪意のあるコードが含まれているかを検出するために、まず、コンパイラを特定し、特定の処理実行時におけるコンパイラの特徴(例えば、Aという処理を実行すると、必ずBというオペコード(オペレーションコード)が出現するといった特徴)を利用して、ある特定の処理の実行回数に対して、対応するオペコードの出現分布が一定の範囲内であるかどうかを算出することで本来のコードにウイルス等の別のコードが埋め込まれているかを判断する方法について記載されている。
また、例えば、実行ファイル内に存在するウイルスや悪意のあるコード等、特定の演算アルゴリズムを実装した関数を識別する手法として、シグネチャ方式がある。シグネチャ方式とは、プログラムコード上の固有の特徴(パターン)を記したパターンファイルを用いて、ファイルを精査し、一致すれば該当するモジュールが含まれていると判断する方法である。暗号アルゴリズムを例にとると、S−BOXや置換表や初期値等が固定パターンとして用いられる。しかしながら、動的にS−BOXを生成するRC4(Rivest・Cipher・4)や、数学的手法で鍵を生成するRSA(登録商標)(Rivest・Shamir・Adleman)のような暗号アルゴリズムについては、前述のような特徴となる固定的なデータ列が存在しないため、識別が困難であるという課題があった。
このような課題を解決する手法として、特許文献2に記載のものがある。特許文献2では、演算アルゴリズムにおけるオペコード出現回数と識別対象プログラムにおけるオペコード出現回数とを用いて演算アルゴリズムと識別対象プログラムとの近似度を算出するので、特定のライブラリ等を用いることなく、識別対象プログラムに特定の演算アルゴリズムが用いられているか否かを判断することができる。
非特許文献1には、マルウェアには悪意のないプログラム(非特許文献1内ではGoodwareと表記)と比べて実行ファイルに含まれるオペコードの分布に違いがあるという研究成果が記載されている。
特表2006−510089号公報 特開2008−299361号公報 特開平6−67870号公報 特開平6−250861号公報 特表2006−522395号公報 特開2008−192122号公報 特開2009−37545号公報
Daniel Bilar, "Opcodes as predictor for malware," International Journal of Electronic Security and Digital Forensics, Vol. 1, No. 2, pp. 156−168, May 2007
特許文献1に記載の手法においては、コンパイラに特徴のない部分にウイルス等の悪意のあるコードが含まれている場合、それを検出できないという課題があった。固定パターンをシグネチャとする従来手法においては、検出対象部分を修正したり、実行ファイルの生成環境を変更したりするだけで簡単に検出できなくなるという弱点があり、日々大量の亜種が発生している現在では全てのマルウェアに対応しきれないという課題があった。他の従来手法においても、様々な環境で作成されるマルウェア等のプログラムの全てを対象にして、特定の演算アルゴリズムを実装した関数を含むプログラムを自動的に識別することは困難であるという課題があった。
本発明は、例えば、様々な環境で実装された関数を対象にして、これらの関数が特定の演算アルゴリズムを実装した関数であるか否かを識別することを目的とする。
本発明の一の態様に係る情報処理装置は、
複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理装置であって、
前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出部と、
前記関数抽出部により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成部と、
前記オペコード出現分布生成部により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成部により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成部とを備えることを特徴とする。
本発明の一の態様によれば、互いに異なる環境で作成された複数のプログラムの各プログラムから、特定の演算アルゴリズムを実装したサンプル関数を抽出し、各サンプル関数におけるオペレーションコードの出現分布を用いて算出した各サンプル関数同士の近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、グループにおけるオペレーションコードの出現分布を示す関数モデルを生成するため、様々な環境で実装された関数を対象にして、これらの関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別することが可能となる。
実施の形態1に係るプログラムコード解析システムの構成例を示す図である。 実施の形態1に係るプログラムコード解析装置の構成例を示すブロック図である。 実施の形態1に係るプログラムコード解析装置のハードウェア構成の一例を示す図である。 実施の形態1に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態1に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態1に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態1に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態2に係るプログラムコード解析システムの構成例を示す図である。 実施の形態2に係るプログラムコード解析装置の構成例を示すブロック図である。 実施の形態2に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態2に係るプログラムコード解析システムの動作を示すフローチャートである。 実施の形態2に係るプログラムコード解析システムの動作を示すフローチャートである。
以下、本発明の実施の形態について、図を用いて説明する。
実施の形態1.
本実施の形態では、処理内容に特徴のある演算アルゴリズムを備えたプログラムは一般的なプログラムとオペコード(オペレーションコード)の出現分布が異なることを利用し(例えば、非特許文献1参照)、1つ以上の学習サンプルからオペコードの出現分布に関して関数モデルを生成し、識別対象関数に含まれるオペコードの出現分布と関数モデルとの適合度判定を実施して識別対象プログラムに特定の演算アルゴリズムが含まれているか識別する。ここで、識別対象プログラムとは、識別対象となるプログラムのことをいう。識別対象関数とは、識別対象プログラムの実行ファイルから抽出した関数のことをいう。学習サンプルとは、識別させたい演算アルゴリズムを実装した関数を含むプログラムのことをいう。関数モデルとは、学習により生成した、特定の演算アルゴリズムに用いられる関数に含まれるオペコードの出現回数をオペコードごとに示す情報のことをいう。適合度判定については後述する。
図1は、本実施の形態に係るプログラムコード解析システム1000の構成例を示す図である。
図1において、プログラムコード解析システム1000は、プログラムコード解析装置100(情報処理装置)を備える。
まず、プログラムコード解析装置100は、識別させたい演算アルゴリズムを実装した1つ以上の学習サンプル200の入力を受け付ける(P1)。そして、プログラムコード解析装置100は、学習サンプル200から、識別させたい演算アルゴリズムについて学習し、オペコードの出現分布に対する関数モデルを生成する。ここで、同じ演算アルゴリズムでも生成環境(実装方法やコンパイル方法)によって生成されるプログラムに出現するオペコードには差異が発生する。そのため、プログラムコード解析装置100は、学習サンプル200内の関数を、それぞれ環境が近いもの同士でグループ化し、グループごとの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成する。即ち、プログラムコード解析装置100は、学習サンプル200内の関数(サンプル関数)に出現するオペコードの数を学習し、プログラムの実行ファイルの生成環境におけるオペコードの出現分布の違いを考慮して生成環境が近いもの同士で1つ以上のグループを生成し、グループごとに上記演算アルゴリズムの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成する(P2)。図1において、三日月、星、十字の印は同じ演算アルゴリズムだが生成環境に違いがあるプログラム(学習サンプル200)及び当該プログラムから生成された関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)であることを示している。
次に、プログラムコード解析装置100は、識別対象プログラム400の入力を受け付ける(P3)。そして、プログラムコード解析装置100は、識別対象関数のオペコードの出現分布と関数モデルとの適合度を算出し、適合度が閾値より大きければ、識別対象プログラム400に特定の演算アルゴリズムが含まれていると識別する。即ち、プログラムコード解析装置100は、グループごとの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)に対する識別対象プログラム400内の関数(識別対象関数)の適合度を算出し(P4)、適合度から識別対象プログラム400に上記演算アルゴリズムが含まれているか解析し、解析結果をユーザ端末500に出力する(P5)。ここで、ユーザ端末500は、ユーザによって利用される端末装置であり、例えばPC(パーソナルコンピュータ)である。
上記のように、本実施の形態において、プログラムコード解析装置100(情報処理装置)は、関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成する。関数モデルは、複数のオペコードを含む関数が特定の演算アルゴリズム(例えば、マルウェアに特有の演算アルゴリズム)を実装した関数であるか否かを識別するために用いられる。具体的には、関数モデルと識別対象となる識別対象関数(例えば、マルウェアだと疑われるプログラムに含まれる関数)との適合度(近似度)が算出され、算出された適合度に基づいて識別対象関数が上記特定の演算アルゴリズムを実装した関数であるか否かが識別される。
適合度の算出には適合度判定を利用することができる。本実施の形態では、適合度判定に必要な標本として、プログラムの関数内に出現するオペコードを利用する。
以下、適合度判定について説明する。
適合度判定とは、あるモデルに対して、識別対象がどれほど適合しているかをΧ(カイ二乗)とΧ分布を利用して判定する手法である。まず、Χを以下の式1を用いて算出する。
本実施の形態では、式1のEとOを次のように定義する。
ここで、関数モデルに出現するn種類のオペコードの出現数をA〜A、その和をΣAと表し、識別対象関数について、各オペコードの出現数をB〜B、その和をΣBと表すと、式1は以下のように表せる。
ここで、Aが0である場合、Eが0となってしまい、式2に適用できない。しかし、Aが0である場合には、関数モデルに存在しないオペコードiが識別対象関数に出現しているということになり、この場合のEは、大いに関数モデルと識別対象関数を識別する特徴となり得るものである。したがって、この場合のEが式2に代入できないためにΧに影響しないのでは識別性能の低下に繋がる可能性がある。そこで、本実施の形態では、Aが0である場合、Aに0より大きく1より小さい値(0に近いほど、関数モデルにないオペコードが識別対象関数に含まれることによる影響が大きくなる)を適用することで、関数モデルに存在しないオペコードが識別対象関数に出現している場合の適合度への影響を結果に反映することができる。
次に、式2で算出したΧをΧ分布に適用し、関数モデルに対する適合度を算出する。適合度P(x,k)は式3で表されるΧ分布の確率密度関数f(x,k)においてx以上の値となる確率を表し、以下の式4で表される。
ここで、kはΧ分布の自由度を表し、適合度判定に用いる標本の数から1を引いた数がkとして用いられる。つまり、本実施の形態では適合度判定に用いたオペコードの種類nから1を引いたn−1を自由度として用いる。
適合度P(x,k)は0〜1の範囲で表され、xにΧを代入することで得られる。適合度が大きいほど識別対象関数が関数モデルに適合していることを示しており、適合度が設定した有意水準より高ければ識別対象関数が関数モデルに適合していると識別され、逆に有意水準より低ければ識別対象関数が関数モデルに適合していないと識別される。一般に有意水準には0.01か0.05が用いられることが多いが、本実施の形態では、有意水準を自由に設定可能である。なお、後述する他の実施の形態のように、自動的に推奨するパラメータとして有意水準を算出することもできる。
図2は、プログラムコード解析装置100の構成例を示すブロック図である。
図2において、プログラムコード解析装置100は、逆アセンブラ部110と、関数抽出部120と、オペコード出現分布生成部130と、関数モデル生成部140と、関数識別部150と、パラメータ格納部160とを備える。関数モデル生成部140は、グループ化実行部141と関数モデルデータベース部142とを備える。関数識別部150は、適合度算出部151と判定部152と識別結果データベース部153とを備える。
また、図示していないが、プログラムコード解析装置100は、処理装置、記憶装置、入力装置、出力装置等のハードウェアを備える。ハードウェアはプログラムコード解析装置100の各部によって利用される。例えば、処理装置は、プログラムコード解析装置100の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータや情報を記憶するために利用される。入力装置は、そのデータや情報を入力するために、出力装置は、そのデータや情報を出力するために利用される。
逆アセンブラ部110は、1つ以上の学習サンプル200、識別対象プログラム400等のプログラムを処理装置により逆アセンブルし、アセンブリコードを生成する。関数抽出部120は、逆アセンブラ部110により生成されたアセンブリコードに含まれる関数を処理装置により抽出する。なお、学習サンプル200としては、異なる環境(実装方法やコンパイル方法)で生成されたものを2つ以上用いることが望ましい。また、学習サンプル200は、元からアセンブリコードの形式のものを用いてもよい。
オペコード出現分布生成部130は、関数抽出部120によりアセンブリコードから抽出された関数に含まれるオペコードごとにオペコードの出現回数を処理装置により計数し、オペコードの出現分布を生成する。
関数モデル生成部140は、1つ以上の学習サンプル200から抽出された関数(サンプル関数)それぞれのオペコードの出現分布を利用して、1つ以上の関数モデルを生成する。関数モデル生成部140において、グループ化実行部141は、オペコード出現分布生成部130により生成されたサンプル関数ごとのオペコードの出現分布とパラメータ格納部160に格納されているグループ化パラメータとに基づいて、オペコードの出現分布の近いもの同士を同じグループに処理装置により分類する。即ち、前述した適合度判定を行ってサンプル関数をグループ化する。ここで、グループ化パラメータは適合度の閾値である。グループ化実行部141は、グループごとに関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成し、生成した関数モデルを記憶装置に実装される関数モデルデータベース部142に登録する。
関数識別部150は、識別対象プログラム400から抽出された関数(識別対象関数)の関数モデルに対する適合度(近似度)を算出し、識別パラメータと比較して識別対象関数が関数モデルに適合するかどうかを判定する。即ち、前述した適合度判定を行って識別対象関数を識別する。ここで、識別パラメータは適合度の閾値である。関数識別部150において、適合度算出部151は、オペコード出現分布生成部130により生成された識別対象関数ごとのオペコードの出現分布と関数モデルデータベース部142に登録された関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)とを用いて、識別対象関数の関数モデルに対する適合度を処理装置により算出する。判定部152は、適合度算出部151により算出された適合度とパラメータ格納部160に格納されている識別パラメータに基づき、識別対象プログラム400に特定の演算アルゴリズムが用いられているか否かを処理装置により判定し、判定結果(識別結果)を記憶装置に実装される識別結果データベース部153に登録する。
パラメータ格納部160は、グループ化、識別におけるパラメータを格納する。パラメータ格納部160において、パラメータ格納部160は、オペコードの出現分布のグループ化のためのパラメータとして、グループ化パラメータを記憶装置に格納する。前述したように、グループ化パラメータの値を超える適合度が算出されたオペコードの出現分布の組み合わせは、同一グループに分類される。また、パラメータ格納部160は、識別対象関数が関数モデルで表される演算アルゴリズムに類似するかどうかを判断するためのパラメータとして、識別パラメータを記憶装置に格納する。前述したように、識別パラメータの値を超える適合度が算出された場合、識別対象関数が関数モデルの基となる演算アルゴリズムを実装した関数であると判断される。さらに、パラメータ格納部160は、前述した適合度判定にて、関数モデルに含まれないオペコードが識別対象関数に含まれていた場合、即ち、Aが0となる場合のAの値を設定する適合度パラメータを記憶装置に格納する。前述したように、適合度パラメータは0より大きく1より小さい値を取り、0に近いほど、関数モデルに含まれないオペコードが識別対象関数に含まれていた場合に、Χの値が大きくなる(適合度が小さくなる)。
上記のように、本実施の形態において、関数抽出部120は、複数(1つでもよいが、複数が望ましい)の学習サンプル200(複数のプログラム)の各プログラムから、サンプル関数を処理装置により抽出する。学習サンプル200は、特定の演算アルゴリズム(例えば、マルウェアに特有の演算アルゴリズム)を実装した関数をサンプル関数として含むプログラムである。複数の学習サンプル200の間で、サンプル関数が実装する演算アルゴリズムは共通するが、それぞれの学習サンプル200は、互いに異なる環境で作成されたものであることが望ましい。例えば、それぞれの学習サンプル200は、互いに異なるプログラミング言語又は異なるコンパイラを用いて作成されたものであることが望ましい。逆アセンブラ部110が複数の学習サンプル200の実行ファイルを処理装置により逆アセンブルして複数のアセンブリコードを生成するのであれば、関数抽出部120は、逆アセンブラ部110により生成された複数のアセンブリコードの各アセンブリコードに含まれるサンプル関数を処理装置により抽出する。
オペコード出現分布生成部130は、関数抽出部120により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペコードを抽出して、当該サンプル関数におけるオペコードの出現回数をオペコードごとに処理装置により計数する。そして、オペコード出現分布生成部130は、計数した各サンプル関数のオペコードごとの出現回数から、各サンプル関数におけるオペコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶する。
関数モデル生成部140は、オペコード出現分布生成部130により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペコードの出現分布を用いて、各サンプル関数同士の適合度(近似度)を処理装置により算出する。そして、関数モデル生成部140は、算出した適合度(近似度)に基づき、各サンプル関数を複数のグループに分類する。具体的には、関数モデル生成部140は、算出した適合度(近似度)が記憶装置(パラメータ格納部160)に予め格納されているグループ化パラメータ(第2閾値)より高いサンプル関数同士を同じグループに分類する。関数モデル生成部140は、分類したグループごとに、オペコード出現分布生成部130により計数された同じグループに属するサンプル関数のオペコードごとの出現回数から、当該グループにおけるオペコードの出現分布を示す関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成する。
また、本実施の形態において、関数抽出部120は、さらに、識別対象プログラム400(例えば、マルウェア)から、識別対象関数を処理装置により抽出する。具体的には、関数抽出部120は、逆アセンブラ部110が識別対象プログラム400の実行ファイルを逆アセンブルして生成したアセンブリコードに含まれる関数を識別対象関数として処理装置により抽出する。
オペコード出現分布生成部130は、さらに、関数抽出部120により抽出された識別対象関数に含まれる複数のオペコードを抽出して、識別対象関数におけるオペコードの出現回数をオペコードごとに処理装置により計数する。そして、オペコード出現分布生成部130は、計数した識別対象関数のオペコードごとの出現回数から、識別対象関数におけるオペコードの出現分布を示すオペコード出現分布情報を生成し、生成した識別対象関数のオペコード出現分布情報を記憶装置に記憶する。
関数識別部150は、関数モデル生成部140により生成された各グループの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)が示す各グループにおけるオペコードの出現分布と、オペコード出現分布生成部130により記憶された識別対象関数のオペコード出現分布情報が示す識別対象関数におけるオペコードの出現分布とを用いて、識別対象関数の各グループに対する適合度(近似度)を算出する。このとき、オペコード出現分布生成部130により識別対象関数から抽出されたオペコードが抽出されなかったサンプル関数がある場合、関数識別部150は、関数モデル生成部140により生成された各グループの関数モデルを修正し、修正した各グループの関数モデルが示す各グループにおけるオペコードの出現分布と、オペコード出現分布生成部130により記憶された識別対象関数のオペコード出現分布情報が示す識別対象関数におけるオペコードの出現分布とを用いて、識別対象関数の各グループに対する適合度(近似度)を算出する。そして、関数識別部150は、算出した適合度(近似度)に基づき、識別対象関数が上記特定の演算アルゴリズムを実装した関数であるか否かを処理装置により識別する。具体的には、関数識別部150は、算出した適合度(近似度)が記憶装置(パラメータ格納部160)に予め格納されている識別パラメータ(第1閾値)より高い場合に、識別対象関数が上記特定の演算アルゴリズムを実装した関数であると識別する。
上記のような各部の機能により、本実施の形態では、様々な環境で実装された関数を対象にして、これらの関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別することが可能となる。
図3は、プログラムコード解析装置100のハードウェア構成の一例を示す図である。
図3において、プログラムコード解析装置100は、コンピュータであり、LCD901(Liquid・Crystal・Display)、キーボード902(K/B)、マウス903、FDD904(Flexible・Disk・Drive)、CDD905(Compact・Disc・Drive)、プリンタ906といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。LCD901の代わりに、CRT(Cathode・Ray・Tube)、あるいは、その他の表示装置が用いられてもよい。マウス903の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
プログラムコード解析装置100は、プログラムを実行するCPU911(Central・Processing・Unit)を備えている。CPU911は、処理装置の一例である。CPU911は、バス912を介してROM913(Read・Only・Memory)、RAM914(Random・Access・Memory)、通信ボード915、LCD901、キーボード902、マウス903、FDD904、CDD905、プリンタ906、HDD920(Hard・Disk・Drive)と接続され、これらのハードウェアデバイスを制御する。HDD920の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、HDD920は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード915、キーボード902、マウス903、FDD904、CDD905は、入力装置の一例である。また、通信ボード915、LCD901、プリンタ906は、出力装置の一例である。
通信ボード915は、LAN(Local・Area・Network)等に接続されている。通信ボード915は、LANに限らず、IP−VPN(Internet・Protocol・Virtual・Private・Network)、広域LAN、ATM(Asynchronous・Transfer・Mode)ネットワークといったWAN(Wide・Area・Network)、あるいは、インターネットに接続されていても構わない。LAN、WAN、インターネットは、ネットワークの一例である。
HDD920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。プログラム群923には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、CPU911により読み出され実行される。ファイル群924には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ID(識別子)」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、RAM914やHDD920等の記憶媒体に記憶される。RAM914やHDD920等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU911の処理(動作)に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU911の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、RAM914等のメモリ、FDD904のフレキシブルディスク(FD)、CDD905のコンパクトディスク(CD)、HDD920の磁気ディスク、光ディスク、DVD(Digital・Versatile・Disc)、あるいは、その他の記録媒体に記録される。また、データや信号は、バス912、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
以下、プログラムコード解析システム1000の動作について説明する。
図4〜図7は、プログラムコード解析システム1000の動作を示すフローチャートである。これらのフローチャートにおいて、Uから始まる通し番号が付与されている四角の項目はユーザ端末500が実施する処理を表している。また、Sから始まる通し番号が付与されている四角の項目はプログラムコード解析装置100が実施する処理を表しており、Bから始まる通し番号が付与されているひし形の項目は分岐処理を表している。
図4は、プログラムコード解析システム1000の動作の全体像を示すフローチャートである。
図4において、プログラムコード解析システム1000の動作の全体の流れを複数のフェーズに分けている。プログラムコード解析システム1000の動作は、大きく関数モデルを生成する学習フェーズF1100と、生成した関数モデルを利用して識別対象関数を識別する識別フェーズF1200とに分けられる。学習フェーズF1100は、学習サンプル200を読み込むサンプル読み込みフェーズF1110と、読み込んだ学習サンプル200から1つ以上のグループを生成してグループごとに関数モデルを生成するグループ化フェーズF1120とに分けられる。以下では、各フェーズにおけるプログラムコード解析システム1000の動作について説明する。
図5は、プログラムコード解析システム1000のサンプル読み込みフェーズF1110の動作を示すフローチャートである。
図5のU001において、ユーザは、ユーザ端末500を用いて学習サンプル200をプログラムコード解析装置100に入力する。入力された学習サンプル200は逆アセンブラ部110に送られる。S002において、逆アセンブラ部110は、入力された学習サンプル200を逆アセンブルしてアセンブリコードを処理装置により生成し、関数抽出部120に入力する。S003において、関数抽出部120は、アセンブリコードから関数部分を処理装置により抽出し、ユーザ端末500の画面に表示する。
図5のU004において、ユーザが学習させたい演算アルゴリズムを実装した関数部分を指定すると、関数抽出部120は、指定部分のアセンブリコードをオペコード出現分布生成部130に入力する。S005において、オペコード出現分布生成部130は、入力された演算アルゴリズムを実装した関数部分内に出現する全てのオペコードを処理装置により抽出し、オペコードごとの出現回数を処理装置により計数し、オペコードの出現分布を生成し、関数モデル生成部140に入力する。B006において、さらに学習サンプル200を追加する場合はU001に戻る。これ以上学習サンプル200を追加しない場合はサンプル読み込みフェーズF1110を終了する。
図6は、プログラムコード解析システム1000のグループ化フェーズF1120の動作を示すフローチャートである。
図6のB007において、グループ化実行部141は、保持しているオペコードの出現分布(サンプル読み込みフェーズF1110から入力されたもの、及び、後述するS010にて生成されたもの)が2つ以上あるかどうか確認し、2つ以上あればS008に、1つしかなければS011に進む。
図6のS008において、グループ化実行部141は、保持している2つ以上のオペコードの出現分布から2つのオペコードの出現分布を取り得る全ての組み合わせで抽出し、組み合わせごとに適合度を処理装置により算出し、最も適合度が高い組み合わせ(出現分布Aと出現分布Bとする)を選択する。B009において、グループ化実行部141は、パラメータ格納部160からグループ化パラメータをを取得する。そして、グループ化実行部141は、S008にて選択した出現分布Aと出現分布Bが、互いに類似する環境にて実装された関数から抽出したもの(同一グループであると分類するもの)であるかどうかを、グループ化パラメータを用いて処理装置により判別する。適合度がグループ化パラメータを超えていればS010に、超えていなければS011に進む。
図6のS010において、グループ化実行部141は、S008にて抽出した出現分布Aと出現分布Bが類似する環境にて実装された関数のものであると処理装置により判断し、出現分布Aと出現分布Bを加算することで1つの出現分布にまとめ、B007に戻る。
図6のS011において、グループ化実行部141は、現時点で残っているオペコードの出現分布(出現分布1、出現分布2、・・・、出現分布M)を関数モデル(関数1、関数2、・・・、関数M)として、関数モデルデータベース部142に登録する。
このように、グループ化フェーズF1120では、入力されたオペコードの出現分布のうち、最も適合度の高い組み合わせから順にグループ化を実施し、適合度の最大値がグループ化パラメータを超えなくなるか、オペコードの出現分布が1つになるまで、グループ化を繰り返すことにより、実装方法やコンパイラの違い等によりオペコードの出現分布の違いが発生することを考慮した関数モデルを生成する。
図7は、プログラムコード解析システム1000の識別フェーズF1200の動作を示すフローチャートである。
図7のU012において、ユーザは、ユーザ端末500を用いて識別対象プログラム400をプログラムコード解析装置100に入力する。入力された識別対象プログラム400は、逆アセンブラ部110に送られる。S013において、逆アセンブラ部110は、入力された識別対象プログラム400を逆アセンブルしてアセンブリコードを処理装置により生成し、関数抽出部120に入力する。S014において、関数抽出部120は、アセンブリコードから関数部分(関数1、関数2、・・・、関数N)を抽出し、関数ごとのアセンブリコードをオペコード出現分布生成部130に入力する。S015において、オペコード出現分布生成部130は、入力された関数部分内に出現する全てのオペコードを処理装置により抽出し、オペコードごとの出現回数を処理装置により計数し、オペコードの出現分布(出現分布1、出現分布2、・・・、出現分布N)を生成し、関数ごとのオペコードの出現分布を関数識別部150に入力する。
図7のS016において、適合度算出部151は、関数モデルデータベース部142から関数モデルJ(Jは1〜M)を取得する。そして、適合度算出部151は、関数モデルJ(Jは1〜M)それぞれに対する、S015で入力されたオペコードの出現分布I(Iは1〜N)の適合度を処理装置により算出し、判定部152に入力する。S017において、判定部152は、パラメータ格納部160から識別パラメータを取得する。そして、判定部152は、S016で算出された適合度が識別パラメータより大きければ、関数I(Iは1〜N)が関数モデルJ(Jは1〜M)に適合すると処理装置により判断する。S018において、判定部152は、S017の結果を識別結果データベース部153に登録する。B019において、全ての関数I(Iは1〜N)に対する処理が終了していればS020に進み、処理がまだ終了していなければS016に戻る。
図7のS020において、識別結果データベース部153は、識別対象プログラム400に対して登録されている結果(識別された関数のリスト)をユーザ端末500に対して出力する(例えば、画面に表示する)。
上記のように、本実施の形態では、識別対象プログラム400と特定の演算アルゴリズムとの類似度を比較解析して、識別対象プログラム400内に学習した演算アルゴリズムが含まれているかどうかを識別することができる。また、関数をグループ化することにより、プログラムの実行ファイルの生成環境の違いを考慮した精度の高い識別ができる。
本実施の形態では、マルウェアには悪意のないプログラムと比べて実行ファイルに含まれるオペコードの分布に違いがあること(例えば、非特許文献1参照)等を利用して、マルウェア等、一般のプログラムと比べて処理に特徴のある演算アルゴリズムを持つプログラムをオペコードの分布の近似度を判定して識別する。まず、ある演算アルゴリズム(関数Xとする)に対して1つ以上の学習サンプル200を利用し、関数Xにおけるオペコードの出現分布に関する学習を行い、実装環境に応じて1つ以上の関数Xの関数モデルを生成する。次に、識別対象関数のオペコードの出現分布と学習により生成した関数モデルとの適合度(近似度)を算出することで、識別対象プログラム400内に演算アルゴリズムが含まれているかどうかを識別する。このように、マルウェアのように、例えばソフトウェア割り込み命令の割合が多い等、一般的なプログラムとは異なる特徴を持つ演算アルゴリズムを実装した関数が識別対象プログラム400の実行ファイルに含まれるかどうか識別することで、プログラムの解析に必要な時間を大幅に短縮することが可能となる。
前述したように、実装方法や用いるコンパイラ等、プログラムの実行ファイルの生成環境の違いにより、大小はあるが、生成されるプログラムの実行ファイルに含まれるオペコードの出現分布には違いがある。このとき、違いが大きいものを同じ関数モデルにまとめてしまうと、プログラムの実行ファイルの生成環境の違いによって生じた特徴を平滑化することになり、識別性能の低下に繋がる可能性がある。そのため、本実施の形態では、プログラムコード解析装置100が、関数モデル生成時に学習サンプル200を適合度によりオペコードの出現分布が近いもの同士のグループに分類し、グループごとに関数モデルを生成する。つまり、プログラムコード解析装置100が各関数モデルを実装方法やコンパイラの違いによる亜種のモデルとして利用するため、識別性能の低下を回避することができる。
以上説明したように、本実施の形態に係るプログラムコード解析装置100は、
入力したプログラムの実行ファイルを逆アセンブルし、アセンブリコードに変換する逆アセンブラ部110と、
逆アセンブラ部110から得たアセンブリコード内に存在する関数を抽出する関数抽出部120と、
抽出した関数に含まれるオペコードの出現分布を生成するオペコード出現分布生成部130と、
識別させたい関数(関数Xとする)を実装した1つ以上のプログラム(学習サンプル200)から得た、1つ以上のオペコードの出現分布から、1つ以上の関数Xのオペコード出現分布のモデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成する関数モデル生成部140と、
関数モデル生成部140において、学習サンプル200同士のオペコードの出現分布の適合度から1つ以上のグループに分類し、グループごとに関数モデルを生成するグループ化実行部141と、
関数Xの関数モデルに対して識別対象プログラム400から抽出した関数(識別対象関数)との適合度を算出し、識別対象関数が関数Xであるかどうか識別する関数識別部150と、
グループ化及び識別を実施するためのパラメータを格納するパラメータ格納部160とを備えることを特徴とする。
したがって、本実施の形態によれば、識別対象関数に含まれるオペコード出現分布と関数モデルのオペコードの出現分布とを用いて識別対象関数が関数モデルに適合するかを識別するため、特定のライブラリ等を用いることなく、識別対象プログラム400に特定の演算アルゴリズムが用いられているか否かを識別することができる。また、グループ化することで、プログラムの実行ファイルの生成環境の違いを考慮したより性能の高い識別が可能となる。
実施の形態2.
本実施の形態について、主に実施の形態1との差異を説明する。
図8は、本実施の形態に係るプログラムコード解析システム1001の構成例を示す図である。
図8において、プログラムコード解析システム1001は、図1に示した実施の形態1に係るプログラムコード解析装置100の内部に推奨パラメータ自動生成の機能を追加したプログラムコード解析装置101(情報処理装置)を備える。推奨パラメータ自動生成の機能については後述する。
まず、プログラムコード解析装置101は、実施の形態1と同様に、識別させたい演算アルゴリズムを実装した1つ以上の学習サンプル200の入力を受け付けるとともに(P1)、本実施の形態では、上記推奨パラメータ自動生成における評価のための評価サンプル600の入力を受け付ける(P2)。評価サンプル600は、学習サンプル200とは逆に、識別させたい演算アルゴリズムを実装していない関数のみを含むプログラムである。プログラムコード解析装置101は、実施の形態1と同様に、学習サンプル200内の関数(サンプル関数)に出現するオペコードの数を学習し、プログラムの実行ファイルの生成環境におけるオペコードの出現分布の違いを考慮して生成環境が近いもの同士で1つ以上のグループを生成し、グループごとに上記演算アルゴリズムの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)を生成するとともに、上記推奨パラメータ自動生成を実行する(P3)。図8において、三日月、星、十字の印は同じ演算アルゴリズムだが生成環境に違いがあるプログラム(学習サンプル200)及び当該プログラムから生成された関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)であることを示している。一方、バツの印は異なる演算アルゴリズムを実装したプログラム(評価サンプル600)であることを示している。
次に、プログラムコード解析装置101は、実施の形態1と同様に、識別対象プログラム400の入力を受け付ける(P4)。そして、プログラムコード解析装置101は、実施の形態1と同様に、グループごとの関数モデル(関数モデルA300、関数モデルB301、関数モデルC302、・・・)に対する識別対象プログラム400内の関数(識別対象関数)の適合度を算出し(P5)、適合度から識別対象プログラム400に上記演算アルゴリズムが含まれているか解析し、解析結果をユーザ端末500に出力する(P6)。
図9は、プログラムコード解析装置100の構成例を示すブロック図である。
図9において、プログラムコード解析装置101は、図2に示した実施の形態1に係るプログラムコード解析装置100のパラメータ格納部160の内部に、推奨パラメータ自動生成の機能を具備する推奨パラメータ自動生成部162を追加したパラメータ格納部161を備える。その他の構成については、図2に示したものと同様である。
パラメータ格納部161は、図2に示したパラメータ格納部160と同様に、グループ化パラメータ、識別パラメータ、適合度パラメータを格納するほか、グループ化パラメータ自動算出パラメータとして、グループ化パラメータの最小値(gmin)、最大値(gmax)、生成パラメータ数(gp)、識別パラメータ自動算出パラメータとして、識別パラメータの最小値(dmin)、最大値(dmax)、生成パラメータ数(dq)、パラメータ評価用のパラメータ(評価パラメータ)として、識別性能の重み(TPW)を記憶装置に格納する。ここで、識別性能の重み(TPW)とは、特定の演算アルゴリズムを実装した関数であると識別すべき関数を正しく識別する事象(事象Aとする)と、特定の演算アルゴリズムを実装した関数であると識別すべきでない関数(即ち、特定の演算アルゴリズムを実装していない関数)を正しく識別しない事象(事象B)について、事象Bに対する事象Aの相対的な重みのことをいう。事象Aと事象Bの重みが同等であれば1を、事象Aをより優先する場合は1より大きな値を、事象Bをより優先する場合は1より小さな値(最小値は0)を設定することで、運用環境により適応した推奨パラメータを得ることができる。
パラメータ格納部161において、推奨パラメータ自動生成部162は、グループ化パラメータ自動算出パラメータとして設定される最小値(gmin)、最大値(gmax)、生成パラメータ数(gp)、識別パラメータ自動算出パラメータとして設定される最小値(dmin)、最大値(dmax)、生成パラメータ数(dq)、評価パラメータとして設定される識別性能の重み(TPW)を利用して、gp×dqパターンのグループ化パラメータ及び識別パラメータにおけるモデル化の結果を評価し、最も評価値の高いパラメータを決定する。このとき、推奨パラメータ自動生成部162は、関数モデル生成部140及び関数識別部150にgp×dqパターンのグループ化パラメータ及び識別パラメータを与えて、各パターンにおけるグループ化パラメータを用いて関数モデル生成部140に関数モデルを生成させ、各パターンにおける識別パラメータ及び対応する関数モデルを用いて関数識別部150に複数の関数(特定の演算アルゴリズムを実装した関数であると識別すべき関数及びそうでない関数の両方を含む)を識別させる。そして、事象A及び事象Bの割合等に基づいて評価を行う。
上記のように、本実施の形態において、パラメータ格納部160は、関数識別部150に識別対象関数として各サンプル関数を入力する。また、パラメータ格納部160は、識別パラメータ(第1閾値)として識別パラメータDPq(qは1〜dq)(複数の第1候補値)を入力する。そして、パラメータ格納部160は、入力した識別パラメータDPqごとに、各サンプル関数が上記特定の演算アルゴリズム(例えば、マルウェアに特有の演算アルゴリズム)を実装した関数であるか否かを関数識別部150に識別させる。パラメータ格納部160は、関数識別部150による識別結果に応じて、識別パラメータDPqのいずれかを選択し、選択した識別パラメータDPqを、使用する識別パラメータとして記憶装置に格納する。
また、本実施の形態において、パラメータ格納部160は、さらに、関数モデル生成部140にグループ化パラメータ(第2閾値)としてグループ化パラメータGPp(pは1〜gp)(複数の第2候補値)を入力する。そして、パラメータ格納部160は、入力したグループ化パラメータGPpごとに、各グループの関数モデルを関数モデル生成部140に生成させる。パラメータ格納部160は、入力したグループ化パラメータGPpと識別パラメータDPqとの組み合わせごとに、関数識別部150に各サンプル関数が上記特定の演算アルゴリズムを実装した関数であるか否かを識別させる。パラメータ格納部160は、関数識別部150による識別結果に応じて、グループ化パラメータGPpのいずれかと識別パラメータDPqのいずれかとの組み合わせを選択し、選択した組み合わせを、使用するグループ化パラメータと識別パラメータとして記憶装置に格納する。
また、本実施の形態において、パラメータ格納部160は、さらに、関数識別部150に識別対象関数として上記特定の演算アルゴリズムを実装していない関数である複数の評価関数を入力して、入力した識別パラメータDPqごとに、各評価関数が上記特定の演算アルゴリズムを実装した関数であるか否かを関数識別部150に識別させ、関数識別部150による識別結果に応じて、識別パラメータDPqのいずれかを選択する。
以下、プログラムコード解析システム1001の動作について説明する。
図10〜図12は、プログラムコード解析システム1001の動作を示すフローチャートである。
図10は、プログラムコード解析システム1001の動作の全体像を示すフローチャートである。
図10において、プログラムコード解析システム1001の動作の全体の流れを複数のフェーズに分けている。プログラムコード解析システム1001の動作は、実施の形態1と同様に、大きく関数モデルを生成する学習フェーズF1101と、生成した関数モデルを利用して識別対象関数を識別する識別フェーズF1200とに分けられる。ここで、識別フェーズF1200は実施の形態1と同じであるため説明を省く。学習フェーズF1101は、学習サンプル200を読み込むサンプル読み込みフェーズF1110と、パラメータ格納部161にて設定されたグループ化パラメータ、識別パラメータ、評価パラメータに応じて自動的に推奨するパラメータを算出する推奨パラメータ算出フェーズF1130とに分けられる。ここで、サンプル読み込みフェーズF1110は実施の形態1と同じであるため説明を省き、以下では、推奨パラメータ算出フェーズF1130におけるプログラムコード解析システム1000の動作について説明する。
図11は、プログラムコード解析システム1000の推奨パラメータ算出フェーズF1130の動作を示すフローチャートである。
図11のS021において、推奨パラメータ自動生成部162は、パラメータ格納部161にて設定されたグループ化パラメータの最小値(gmin)、最大値(gmax)、生成パラメータ数(gp)、識別パラメータの最小値(dmin)、最大値(dmax)、生成パラメータ数(dq)から評価するグループ化パラメータGPp、識別パラメータDPqを以下の式5及び式6で順番に処理装置により抽出し、全部でgp×dqパターンの組み合わせを生成する。そして、推奨パラメータ自動生成部162は、グループ化パラメータGPpを関数モデル生成部140に、識別パラメータDPq、及び、評価パラメータとして設定される識別性能の重み(TPW)を関数識別部150に入力する。
図11のグループ化フェーズF1120において、グループ化実行部141は、S021にて入力されたグループ化パラメータGPpとサンプル読み込みフェーズF1110で入力されたオペコードの出現分布を基に関数モデル(関数1p、関数2p、・・・、関数Mp)を生成し、関数モデルデータベース部142に登録する。グループ化フェーズF1120でグループ化パラメータGPpの各々について関数モデルを生成する処理の詳細については実施の形態1と同様である。
図11のパラメータ評価フェーズF1131において、関数識別部150は、グループ化パラメータGPpによりグループ化フェーズF1120で生成された関数モデルと、S021にて入力された識別パラメータDPq、評価パラメータTPWを基に、パラメータの評価値を処理装置により算出する。パラメータ評価フェーズF1131の詳細については後述する。
図11のB022において、推奨パラメータ自動生成部162は、全通り(gp×dqパターン)のパラメータについて評価が完了していればS023に進み、評価が完了していなければS021に戻る。
図11のS023において、推奨パラメータ自動生成部162は、最大の評価値を得られたグループ化パラメータGPr及び識別パラメータDPsのパターンをパラメータ格納部161に登録し、そのパターンに対応される関数モデル(関数1r、関数2r、・・・、関数Mr)を関数モデルデータベース部142に登録する。
このように、推奨パラメータ算出フェーズF1130では、評価パラメータに応じたグループ化パラメータ、識別パラメータの評価を自動的に実施することで、運用環境により適応したパラメータの決定を自動的に実行することができる。
図12は、プログラムコード解析システム1000のパラメータ評価フェーズF1131の動作を示すフローチャートである。
図12のU024において、ユーザは、識別すべきでない関数を正しく識別しない性能に関する評価もパラメータ評価に含める場合、ユーザ端末500を用いて1つ以上の評価サンプル600をプログラムコード解析装置100に入力する。プログラムコード解析装置100は、評価サンプル600ごとにサンプル読み込みフェーズF1110を実行して、オペコードの出現分布を生成する。このとき入力された評価サンプル600の数をTとする。
図12のS025において、関数識別部150は、関数モデルを生成するために入力された学習サンプル200ごとに、推奨パラメータ算出フェーズF1130のグループ化フェーズF1120にて生成された関数モデル(関数1p、関数2p、・・・、関数Mp)それぞれに対して適合度を処理装置により算出し、算出した適合度の少なくとも1つが識別パラメータDPqの値を超えている学習サンプル200の数Y(識別すべき関数を正しく識別できた数)を記録する。このとき入力された学習サンプル200の数をLとする。S026において、関数識別部150は、U024にて評価サンプル600が入力されていれば、評価サンプル600ごとに、推奨パラメータ算出フェーズF1130のグループ化フェーズF1120にて生成された関数モデル(関数1p、関数2p、・・・、関数Mp)それぞれに対して適合度を処理装置により算出し、算出した適合度の少なくとも1つが識別パラメータDPqの値を超えている学習サンプル200の数Z(識別すべきでない関数を誤って識別した数)を記録する。S027において、推奨パラメータ自動生成部162は、以下の式7、式8にてパラメータの評価値Scoreを算出する。Scoreは、識別すべき関数を正しく識別する識別率、識別すべきでない関数を正しく識別しない識別率、さらにそれらの優先度を表す重み(TPW)を利用して算出される。
上記のように、本実施の形態では、推奨パラメータ自動生成部162が、gp×dqパターンのグループ化パラメータと識別パラメータの組み合わせに対する評価パラメータで示された評価基準に対応する評価を行い、自動的に運用環境に適応したパラメータを決定することができる。さらに、パラメータ調整にかかる時間も大幅に短縮できる。
実施の形態1において、グループ化の際、学習サンプル200同士の適合度からグループに含めるか含めないかを判断するためのパラメータ(グループ化パラメータ)の設定値によって、生成される関数モデルが変化する。また、識別の際、識別対象関数と関数モデルとの適合度から識別対象関数が関数モデルに適合するかどうかを判別するためのパラメータ(識別パラメータ)の設定値によって、識別結果が変化する。したがって、グループ化パラメータ、識別パラメータについて、適切なパラメータ設定が必要となるが、手動でパラメータ設定を行うと、多くの時間がかかったり、確認ミスが発生したりする等の事態が発生する可能性がある。本実施の形態によれば、プログラムコード解析装置101が、複数のケース(パラメータ値)を自動的に設定し、各ケースで生成されるグループ及び関数モデル識別性能を自動的に評価して、最も評価の高いパラメータを自動的に算出することで、上記のような事態を回避することができる。
以上説明したように、本実施の形態に係るプログラムコード解析装置100は、
パラメータ格納部161において、自動的に複数のグループ化パラメータ、識別パラメータのテストケースを作成し、それぞれのテストケースにおける関数モデルの評価値を算出し、評価値が最大値となるパラメータ(推奨パラメータ)を決定する推奨パラメータ自動生成部162を備えることを特徴とする。また、推奨パラメータ自動生成部162は、関数モデルの評価値を算出する際に、学習サンプル200を利用して、関数Xと識別すべき関数を正しく関数Xであると識別する性能の評価値に加えて、関数X以外の関数を実装したプログラム(評価サンプル600)を利用して、関数Xでないと識別すべき関数を正しく関数Xでないと識別する性能の評価値を算出することを特徴とする。
したがって、本実施の形態によれば、グループ化、識別に関するパラメータを自動的に算出することで、パラメータ設定にかかる時間を大幅に短縮できる。
100,101 プログラムコード解析装置、110 逆アセンブラ部、120 関数抽出部、130 オペコード出現分布生成部、140 関数モデル生成部、141 グループ化実行部、142 関数モデルデータベース部、150 関数識別部、151 適合度算出部、152 判定部、153 識別結果データベース部、160,161 パラメータ格納部、162 推奨パラメータ自動生成部、200 学習サンプル、300 関数モデルA、301 関数モデルB、302 関数モデルC、400 識別対象プログラム、500 ユーザ端末、600 評価サンプル、901 LCD、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 HDD、921 オペレーティングシステム、922 ウィンドウシステム、923 プログラム群、924 ファイル群、1000,1001 プログラムコード解析システム。

Claims (9)

  1. 複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理装置であって、
    前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出部と、
    前記関数抽出部により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成部と、
    前記オペコード出現分布生成部により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成部により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成部とを備えることを特徴とする情報処理装置。
  2. 前記オペコード出現分布生成部は、さらに、前記識別対象関数に含まれる複数のオペレーションコードを抽出して、前記識別対象関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した前記識別対象関数のオペレーションコードごとの出現回数から、前記識別対象関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した前記識別対象関数のオペコード出現分布情報を記憶装置に記憶し、
    前記情報処理装置は、さらに、
    前記関数モデル生成部により生成された各グループの関数モデルが示す各グループにおけるオペレーションコードの出現分布と、前記オペコード出現分布生成部により記憶された前記識別対象関数のオペコード出現分布情報が示す前記識別対象関数におけるオペレーションコードの出現分布とを用いて、前記識別対象関数の各グループに対する近似度を算出し、算出した近似度に基づき、前記識別対象関数が前記特定の演算アルゴリズムを実装した関数であるか否かを処理装置により識別する関数識別部を備えることを特徴とする請求項1に記載の情報処理装置。
  3. 前記関数識別部は、算出した近似度が記憶装置に予め格納されている第1閾値より高い場合に、前記識別対象関数が前記特定の演算アルゴリズムを実装した関数であると識別し、
    前記情報処理装置は、さらに、
    前記関数識別部に前記識別対象関数として各サンプル関数を入力するとともに前記第1閾値として複数の第1候補値を入力して、入力した第1候補値ごとに、各サンプル関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第1候補値のいずれかを選択し、選択した第1候補値を前記第1閾値として記憶装置に格納するパラメータ格納部を備えることを特徴とする請求項2に記載の情報処理装置。
  4. 前記関数モデル生成部は、算出した近似度が記憶装置に予め格納されている第2閾値より高いサンプル関数同士を同じグループに分類し、
    前記パラメータ格納部は、さらに、前記関数モデル生成部に前記第2閾値として複数の第2候補値を入力して、入力した第2候補値ごとに、各グループの関数モデルを生成させ、入力した第1候補値と第2候補値との組み合わせごとに、前記関数識別部に各サンプル関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第1候補値のいずれかと前記複数の第2候補値のいずれかとの組み合わせを選択し、選択した組み合わせを前記第1閾値と前記第2閾値として記憶装置に格納することを特徴とする請求項3に記載の情報処理装置。
  5. 前記パラメータ格納部は、さらに、前記関数識別部に前記識別対象関数として前記特定の演算アルゴリズムを実装していない関数である複数の評価関数を入力して、入力した第1候補値ごとに、各評価関数が前記特定の演算アルゴリズムを実装した関数であるか否かを識別させ、前記関数識別部による識別結果に応じて、前記複数の第1候補値のいずれかを選択することを特徴とする請求項3又は4に記載の情報処理装置。
  6. 前記関数識別部は、前記オペコード出現分布生成部により前記識別対象関数から抽出されたオペレーションコードが抽出されなかったサンプル関数がある場合、前記関数モデル生成部により生成された各グループの関数モデルを修正し、修正した各グループの関数モデルが示す各グループにおけるオペレーションコードの出現分布と、前記オペコード出現分布生成部により記憶された前記識別対象関数のオペコード出現分布情報が示す前記識別対象関数におけるオペレーションコードの出現分布とを用いて、前記識別対象関数の各グループに対する近似度を算出することを特徴とする請求項2から5までのいずれかに記載の情報処理装置。
  7. 前記情報処理装置は、さらに、
    異なるプログラミング言語又は異なるコンパイラを用いて作成された複数のプログラムの実行ファイルを処理装置により逆アセンブルして複数のアセンブリコードを生成する逆アセンブラ部を備え、
    前記関数抽出部は、前記逆アセンブラ部により生成された複数のアセンブリコードの各アセンブリコードに含まれるサンプル関数を処理装置により抽出することを特徴とする請求項1から6までのいずれかに記載の情報処理装置。
  8. 複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成する情報処理方法であって、
    コンピュータが、前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出ステップと、
    コンピュータが、前記関数抽出ステップにより抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成ステップと、
    コンピュータが、前記オペコード出現分布生成ステップにより記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成ステップにより計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成ステップとを備えることを特徴とする情報処理方法。
  9. 複数のオペレーションコードを含む関数が特定の演算アルゴリズムを実装した関数であるか否かを識別するために識別対象となる識別対象関数との近似度が算出される関数モデルを生成するプログラムであって、
    前記特定の演算アルゴリズムを実装した関数をサンプル関数として含む複数のプログラムであり、互いに異なる環境で作成された複数のプログラムの各プログラムから、当該サンプル関数を処理装置により抽出する関数抽出処理と、
    前記関数抽出処理により抽出されたサンプル関数ごとに、サンプル関数に含まれる複数のオペレーションコードを抽出して、当該サンプル関数におけるオペレーションコードの出現回数をオペレーションコードごとに処理装置により計数し、計数した各サンプル関数のオペレーションコードごとの出現回数から、各サンプル関数におけるオペレーションコードの出現分布を示すオペコード出現分布情報を生成し、生成した各サンプル関数のオペコード出現分布情報を記憶装置に記憶するオペコード出現分布生成処理と、
    前記オペコード出現分布生成処理により記憶された各サンプル関数のオペコード出現分布情報が示す各サンプル関数におけるオペレーションコードの出現分布を用いて、各サンプル関数同士の近似度を処理装置により算出し、算出した近似度に基づき、各サンプル関数を複数のグループに分類し、分類したグループごとに、前記オペコード出現分布生成処理により計数された同じグループに属するサンプル関数のオペレーションコードごとの出現回数から、当該グループにおけるオペレーションコードの出現分布を示す関数モデルを生成する関数モデル生成処理とをコンピュータに実行させることを特徴とするプログラム。
JP2009180379A 2009-08-03 2009-08-03 情報処理装置及び情報処理方法及びプログラム Pending JP2011034377A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009180379A JP2011034377A (ja) 2009-08-03 2009-08-03 情報処理装置及び情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009180379A JP2011034377A (ja) 2009-08-03 2009-08-03 情報処理装置及び情報処理方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2011034377A true JP2011034377A (ja) 2011-02-17

Family

ID=43763379

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009180379A Pending JP2011034377A (ja) 2009-08-03 2009-08-03 情報処理装置及び情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2011034377A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015011690A (ja) * 2013-07-02 2015-01-19 ニフティ株式会社 効果測定プログラム、方法及び装置
JP2017021776A (ja) * 2015-06-30 2017-01-26 エーオー カスペルスキー ラボAO Kaspersky Lab モバイルデバイスでの悪質なファイルを検出するシステム及び方法
JP2021193571A (ja) * 2015-03-02 2021-12-23 ブルヴェクター, インコーポレーテッドBluvector, Inc. 機械学習アプリケーション用の方法、コンピュータ読み取り可能な媒体、装置およびシステム。
JP2022520041A (ja) * 2019-05-21 2022-03-28 ▲ギ▼南大學 ビッグデータモバイルソフトウェアの類似性についての記述エントロピーに基づくインテリジェントな決定方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015011690A (ja) * 2013-07-02 2015-01-19 ニフティ株式会社 効果測定プログラム、方法及び装置
JP2021193571A (ja) * 2015-03-02 2021-12-23 ブルヴェクター, インコーポレーテッドBluvector, Inc. 機械学習アプリケーション用の方法、コンピュータ読み取り可能な媒体、装置およびシステム。
JP2017021776A (ja) * 2015-06-30 2017-01-26 エーオー カスペルスキー ラボAO Kaspersky Lab モバイルデバイスでの悪質なファイルを検出するシステム及び方法
JP2022520041A (ja) * 2019-05-21 2022-03-28 ▲ギ▼南大學 ビッグデータモバイルソフトウェアの類似性についての記述エントロピーに基づくインテリジェントな決定方法
JP7197942B2 (ja) 2019-05-21 2022-12-28 ▲ギ▼南大學 ビッグデータモバイルソフトウェアの類似性についての記述エントロピーに基づくインテリジェントな決定方法

Similar Documents

Publication Publication Date Title
Ilyas et al. Black-box adversarial attacks with limited queries and information
US11714905B2 (en) Attribute relevance tagging in malware recognition
US8401982B1 (en) Using sequencing and timing information of behavior events in machine learning to detect malware
JP5569935B2 (ja) ソフトウェア検出方法及び装置及びプログラム
US11025649B1 (en) Systems and methods for malware classification
JP6592177B2 (ja) 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム
Abawajy et al. Iterative classifier fusion system for the detection of Android malware
KR102074909B1 (ko) 소프트웨어 취약점 분류 장치 및 방법
KR101963756B1 (ko) 소프트웨어 취약점 예측 모델 학습 장치 및 방법, 소프트웨어 취약점 분석 장치 및 방법
Gülmez et al. Graph-based malware detection using opcode sequences
JP7207540B2 (ja) 学習支援装置、学習支援方法、及びプログラム
JP2011034377A (ja) 情報処理装置及び情報処理方法及びプログラム
Naeem et al. Digital forensics for malware classification: An approach for binary code to pixel vector transition
CN113222053B (zh) 基于RGB图像和Stacking多模型融合的恶意软件家族分类方法、系统和介质
Yang et al. RecMaL: Rectify the malware family label via hybrid analysis
Ravi et al. EfficientNet deep learning meta-classifier approach for image-based android malware detection
US11836251B2 (en) Malware detection using a machine learning model
Zheng et al. A new malware detection method based on vmcadr in cloud environments
Vashishtha et al. An Ensemble approach for advance malware memory analysis using Image classification techniques
Yadav et al. Deep learning in malware identification and classification
Zhao et al. A malware detection system based on intermediate language
Thompson et al. Polymorphic malware detection and identification via context-free grammar homomorphism
US11934533B2 (en) Detection of supply chain-related security threats to software applications
Kawaguchi et al. Malware function estimation using API in initial behavior
Singh et al. Static Malware Analysis Using Machine and Deep Learning