(57)【特許請求の範囲】
【請求項１】
圧縮又は暗号化されたプログラムの領域を含むデータが所定の容量ごとにメモリから読み出される当該所定の容量のデータによって示される第１の値と、前記メモリから読み出され、復元されて書き込まれる所定の容量のデータによって示される第２の値とを取得する取得部と、
前記取得部によって取得された前記第１の値を用いて所定の回数の読み出しに相当するデータ量のデータの第１エントロピー値、および前記取得部によって取得された前記第２の値を用いて所定の回数の書き込みに相当するデータ量のデータの第２エントロピー値を算出する算出部と、
前記算出部によって算出された前記第１エントロピー値が所定の閾値よりも高くなった時点から、前記第２エントロピー値が所定の閾値よりも低くなった時点までの時間区間の中で前記メモリに対して書き込まれた前記所定の容量のデータのうち、最も早く実行されたデータの書き込み先を、復元された前記プログラムが実行される際の開始位置として特定する特定部と、
を有することを特徴とするデータ特定装置。
【請求項２】
前記特定部は、前記第１エントロピー値が第１の閾値よりも高い時点からなる高区間と、前記第２エントロピー値が第２の閾値よりも低い時点からなり、かつ、発生時点が前記高区間よりも遅い低区間とを抽出し、前記高区間の開始時点から前記低区間の終了時点までの間を、前記圧縮又は暗号化された領域が前記メモリから読み出され、復元されて当該メモリに書き込まれるまでの前記時間区間として特定することを特徴とする請求項１に記載のデータ特定装置。
【請求項３】
データ特定装置によって実行されるデータ特定方法であって、
前記データ特定装置が備える取得手段が、
圧縮又は暗号化されたプログラムの領域を含むデータが所定の容量ごとにメモリから読み出される当該所定の容量のデータによって示される第１の値と、前記メモリから読み出され、復元されて書き込まれる所定の容量のデータによって示される第２の値とを取得する取得工程と、
前記データ特定装置が備える算出手段が、
前記取得工程によって取得された前記第１の値を用いて所定の回数の読み出しに相当するデータ量のデータの第１エントロピー値、および前記取得工程によって取得された前記第２の値を用いて所定の回数の書き込みに相当するデータ量のデータの第２エントロピー値を算出する算出工程と、
前記データ特定装置が備える特定手段が、
前記算出工程によって算出された前記第１エントロピー値が所定の閾値よりも高くなった時点から、前記第２エントロピー値が所定の閾値よりも低くなった時点までの時間区間の中で前記メモリに対して書き込まれた前記所定の容量のデータのうち、最も早く実行されたデータの書き込み先を、復元された前記プログラムが実行される際の開始位置として特定する特定工程と、
を含んだことを特徴とするデータ特定方法。
【請求項４】
コンピュータを請求項１又は２に記載のデータ特定装置として機能させるためのデータ特定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ特定装置、データ特定方法及びデータ特定プログラムに関する。
【背景技術】
【０００２】
従来、マルウェア（Malware）などのプログラムには、解析を困難にさせるためにパッキングと呼ばれる圧縮処理や暗号化処理が施されている場合がある。パッキングが施されたプログラムは、元のプログラムであるオリジナルコードに加えて、自己解凍を行うためのコードなどが付加されている。そして、オリジナルコードがメモリ上に復元された後に、プログラムが実行される。
【０００３】
このようなパッキングが施されたプログラムについて解析を行う場合には、メモリ上に復元されるオリジナルコードを抽出するアンパッキングが行われる。アンパッキングでは、オリジナルコードとそれ以外のコードとの境界を知るために、復元されるオリジナルコードのメモリ上の開始アドレスであるＯＥＰ（Original  Entry  Point）を特定することが重要となる。しかしながら、ＯＥＰの特定は、手動の動的解析によって行われるために、手間がかかり、作業の効率化が求められている。
【０００４】
そこで、近年、書き込み命令が実行された際に、書き込み先のメモリアドレスに印を付加し、印が付加されたメモリアドレスの値が命令として実行された際に、当該アドレスをＯＥＰ候補として出力する技術が知られている。これにより、解析者は、出力された候補のみを解析対象とすることができ、アンパッキングに係る負担が軽減される。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Min Gyung Kang, Pongsin Poosankam, Heng Yin, “Renovo: A Hidden Code Extractor for Packed Executables”, In Proceedings of the 2007 ACM workshop on Recurring malcode, pages 46-53, 2007
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、アンパッキングに係る作業の効率化に一定の限界があった。具体的には、上述した従来技術では、複数のＯＥＰ候補が出力されることが多く、その中から正しいＯＥＰを特定する作業が必要となり、アンパッキングの効率化に一定の限界があった。
【０００７】
そこで、本願に開示する技術は、上述した従来技術の問題に鑑みてなされたものであって、アンパッキングに係る作業の効率化を可能にするデータ特定装置、データ特定方法及びデータ特定プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、開示の装置は、圧縮又は暗号化されたプログラムの領域を含むデータが所定の容量ごとにメモリから読み出される当該所定の容量のデータによって示される第１の値と、前記メモリから読み出され、復元されて書き込まれる所定の容量のデータによって示される第２の値とを取得する取得部と、前記取得部によって取得された前記第１の値を用いて所定の回数の読み出しに相当するデータ量のデータの第１エントロピー値、および前記取得部によって取得された前記第２の値を用いて所定の回数の書き込みに相当するデータ量のデータの第２エントロピー値を算出する算出部と、前記算出部によって算出された前記第１エントロピー値が所定の閾値よりも高くなった時点から、前記第２エントロピー値が所定の閾値よりも低くなった時点までの時間区間の中で前記メモリに対して書き込まれた前記所定の容量のデータのうち、最も早く実行されたデータの書き込み先を、復元された前記プログラムが実行される際の開始位置として特定する特定部とを有することを特徴とする。
【発明の効果】
【０００９】
開示の装置は、アンパッキングに係る作業の効率化を可能にする。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係るデータ特定装置の構成の一例を説明するための図である。
【図２】図２は、実施例１に係る監視対象プロセスを説明するための図である。
【図３】図３は、実施例１に係るメモリアクセス監視部によって取得されるデータの値を説明するための図である。
【図４】図４は、実施例１に係るエントロピー計算部によるエントロピー算出処理の一例を説明するための図である。
【図５】図５は、実施例１に係るログ解析部による第１の処理の一例を説明するための図である。
【図６】図６は、実施例１に係るログ解析部による第２の処理の一例を説明するための図である。
【図７】図７は、実施例１に係るログ解析部による第３の処理の一例を説明するための図である。
【図８】図８は、実施例１に係るデータ特定装置によるＯＥＰ特定処理の手順を示すフローチャートである。
【図９】図９は、実施例２に係るデータ特定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本願の開示するデータ特定装置、データ特定方法及びデータ特定プログラムの実施例を詳細に説明する。なお、本願の開示するデータ特定装置、データ特定方法及びデータ特定プログラムは、以下の実施例により限定されるものではない。
【実施例１】
【００１２】
［実施例１に係るデータ特定装置の構成］
実施例１に係るデータ特定装置の構成について説明する。図１は、実施例１に係るデータ特定装置１００の構成の一例を説明するための図である。図１に示すように、実施例１に係るデータ特定装置１００は、サブシステム１と、サブシステム２と、記憶領域６０とを有する。サブシステム１、サブシステム２及び記憶領域６０は、図１に示すように、ホストＯＳ（Operating  System）２０がインストールされたハードウェア１０で動作する。
【００１３】
ハードウェア１０は、物理的な計算機であり、各種演算処理を実行するＣＰＵ（Central  Processing  Unit）や、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）等を有する。ホストＯＳ２０は、ハードウェア１０上で動作する各種アプリケーションに種々のサービスを提供する基本ソフトである。ホストＯＳ２０は、通常は単にＯＳと呼ばれるが、本明細書では、物理的な計算機上で動作するＯＳと、仮想計算機上で動作するＯＳとを区別するために、前者をホストＯＳと呼び、後者をゲストＯＳと呼ぶこととする。
【００１４】
サブシステム１は、図１に示すように、下層レイヤーからハードウェア１０、ホストＯＳ２０、ＶＭＭ（Virtual  Machine  Monitor：ハイパーバイザー）３０、ゲストＯＳ４０から構成され、ゲストＯＳ４０上で監視対象プロセス５０が実行される。ＶＭＭ３０は、ハードウェアデバイスを全てソフトウェアにより実現した仮想ハードウェアにより構成されており、図１に示すように、メモリアクセス監視部３１と、ＯＥＰ候補生成部３２と、エントロピー計算部３３とを有する。ゲストＯＳ４０は、ＶＭＭ３０上にて動作させる仮想ＯＳであり、ゲストＯＳ４０上で監視対象プロセス５０が実行される。
【００１５】
ここで、ゲストＯＳ４０上で実行される監視対象プロセス５０について説明する。図２は、実施例１に係る監視対象プロセス５０を説明するための図である。実施例１に係る監視対象プロセス５０は、例えば、ＶＭＭ３０が有する仮想メモリに記憶されたプログラムが実行されたプロセスである。仮想メモリに記憶されるプログラムは、例えば、図２の（Ａ）に示すように、元のプログラムであるオリジナルコードが圧縮又は暗号化され、展開用コードが付加されたプログラムである。
【００１６】
このようなパッキングされたプログラムがマルウェアである場合には、プログラムがメモリに格納されると、自己解凍機能などにより以下に記す展開処理が実行された後、オリジナルコードが実行されることとなる。展開処理は、オリジナルコードが実行されるまでの前処理であり、例えば、図２の（Ｂ）に示すように、圧縮又は暗号化されたオリジナルコードを解凍又は復号し、メモリの他のアドレスにコピーする処理などである。展開処理においては、例えば、メモリからの読み込み及びメモリに対する書き込みが１バイト（Byte）ごとに実行される。展開用コードは、上述した展開処理を実行させるためのコードである。
【００１７】
監視対象プロセス５０は、上述した展開処理からメモリにコピーされたオリジナルコードの実行処理までの一連の処理に相当する。現在、ネットワーク上に配布されるマルウェアの大半は、このようなパッキングが施されており、マルウェア本体であるオリジナルコードを解析するために、オリジナルコードを抽出するアンパッキングが重要となっている。
【００１８】
図１に戻って、メモリアクセス監視部３１は、圧縮又は暗号化されたプログラムの領域を含むデータが所定の容量ごとにメモリから読み出される当該所定の容量のデータによって示される第１の値と、メモリから読み出され、復元されて書き込まれる所定の容量のデータによって示される第２の値とを取得する。具体的には、メモリアクセス監視部３１は、監視対象プロセス５０が図示しない仮想メモリ上で実行する展開処理に係る読み込み命令及び書き込み命令それぞれについて、データが読み書きされたメモリアドレス、読み書きされたデータの値、プログラムカウンタなどを取得する。
【００１９】
ここで、メモリアクセス監視部３１によって取得される読み書きされたデータの値について説明する。図３は、実施例１に係るメモリアクセス監視部３１によって取得されるデータの値を説明するための図である。例えば、メモリアクセス監視部３１は、図３に示すように、監視対象プロセス５０によって実行される展開処理において、メモリから読み込まれる１バイトごとのデータについて、８つのビット（bit）で構成された値を１つの値として取得する。一例を挙げると、メモリアクセス監視部３１は、図３に示す「１１０１００１１」を１つの値として取得する。
【００２０】
すなわち、メモリアクセス監視部３１は、１つのビットが「０」又は「１」のどちらかの値をとることから、メモリから読み込まれたデータの値として、「２8＝２５６」通りの値を取得することとなる。同様に、メモリアクセス監視部３１は、監視対象プロセス５０によって実行される展開処理において、メモリに対して書き込まれる１バイトごとのデータについて、８つのビットで構成された値を１つの値として取得する。そして、メモリアクセス監視部３１は、データが読み書きされたメモリアドレス、プログラムカウンタなども同時に取得し、取得した情報を後述するエントロピー計算部３３に送信する。
【００２１】
図１に戻って、ＯＥＰ候補生成部３２は、監視対象プロセス５０によって書き込み命令が実行された場合に、書き込み先のメモリアドレスに印を付加する。そして、ＯＥＰ候補生成部３２は、印が付加されたアドレスの値が実行された場合に、図１に示すように、当該アドレスをＯＥＰ候補として後述する記憶領域６０に出力する。
【００２２】
エントロピー計算部３３は、メモリアクセス監視部３１によって取得された第１の値を用いて所定の回数の読み出しに相当するデータ量のデータの第１エントロピー値、およびメモリアクセス監視部３１によって取得された第２の値を用いて所定の回数の書き込みに相当するデータ量のデータの第２エントロピー値を算出する。例えば、エントロピー計算部３３は、図１に示すように、読み込みバッファと書き込みバッファとを有し、メモリアクセス監視部３１によってデータの値が取得されるごとに、取得されたデータの値を読み込みバッファ又は書き込みバッファに格納する。そして、エントロピー計算部３３は、バッファに格納されたデータの値を用いてエントロピー値を算出する。
【００２３】
ここで、読み込みバッファ及び書き込みバッファは、それぞれ所定のサイズのＦＩＦＯ（First-In  First-Out）型のバッファである。すなわち、エントロピー計算部３３は、バッファのサイズごとのエントロピー値を算出する。なお、読み込みバッファは、メモリアクセス監視部３１によって取得された読み込みデータのデータ値を記憶し、エントロピー計算部３３によってエントロピー値が算出される。また、書き込みバッファは、メモリアクセス監視部３１によって取得された書き込みデータのデータ値を記憶し、エントロピー計算部３３によってエントロピー値が算出される。
【００２４】
エントロピー計算部３３は、読み込まれたデータ及び書き込まれたデータそれぞれについて、以下の式（１）により読み込み命令又は書き込み命令が実行されるごとのデータのエントロピー値を算出する。
【００２５】
【数１】
0005456715.tif 000002
【００２６】
例えば、エントロピー計算部３３は、式（１）に示すように、２５６通りのデータの値を「０」から「２５５」とした場合の読み込みデータ又は書き込みデータのエントロピー値を算出する。そして、エントロピー計算部３３は、読み込み命令及び書き込み命令が実行された時点ごとに、読み込みデータ及び書き込みデータのエントロピー値を算出する。なお、式（１）のｐiは、｛（あるデータＤにおける値ｉを取るバイト数）／（データＤの総バイト数）｝で表される。
【００２７】
図４は、実施例１に係るエントロピー計算部３３によるエントロピー算出処理の一例を説明するための図である。図４においては、読み込みデータのエントロピー値の算出を示す。例えば、エントロピー計算部３３は、図４の（Ａ）に示すように、読み込みデータのバイト１の値「１１０１００１１」から順に取得されると、取得された値を読み込みバッファに格納する。そして、エントロピー計算部３３は、図４の（Ｂ）に示すように、読み込みバッファのサイズ分のデータのエントロピー値を算出する。例えば、エントロピー計算部３３は、図４の（Ｂ）に示すように、読み込み命令が実行された時点で読み込みバッファに格納されたバイト１から３までのデータのエントロピー値を算出する。エントロピー計算部３３は、読み込み命令が実行されるごとに、当該命令が実行された時点で読み込みバッファに格納されたデータ値を用いてエントロピー値を算出する。
【００２８】
同様に、エントロピー計算部３３は、書き込みデータについても、メモリアクセス監視部３１によって取得されたデータの値をバッファに格納し、バッファのサイズごとにデータのエントロピー値を算出する。エントロピー計算部３３は、書き込み命令が実行されるごとに、当該命令が実行された時点で書き込みバッファに格納されたデータ値を用いてエントロピー値を算出する。そして、エントロピー計算部３３は、算出した読み込みデータのエントロピー値及び書き込みデータのエントロピー値を算出した順にログとして記憶領域６０に出力する。
【００２９】
図１に戻って、記憶領域６０は、ＯＥＰ候補生成部３２によって出力されたＯＥＰ候補を記憶するＯＥＰ候補記憶領域と、エントロピー計算部３３によって出力された読み込みデータのエントロピー値及び書き込みデータのエントロピー値とを記憶するログ記憶領域とを有する。ログ記憶領域は、エントロピー計算部３３によって出力された読み込みデータのエントロピー値及び書き込みデータのエントロピー値に加えて、書き込みデータのエントロピー値の算出に用いられたデータの書き込み先アドレスを記憶する。記憶領域６０は、例えば、ハードディスク、光ディスクなどの記憶装置、または、ＲＡＭ（Random Access Memory）、フラッシュメモリ（Flash Memory）などの半導体メモリ素子である。
【００３０】
サブシステム２は、図１に示すように、下層レイヤーからハードウェア１０、ホストＯＳ２０、解析部７０から構成される。解析部７０は、図１に示すように、ログ解析部７１と、フィルター７２とを有し、記憶領域６０のＯＥＰ候補記憶領域によって記憶されたＯＥＰ候補と、記憶領域６０のログ記憶領域に記憶された読み込みデータのエントロピー値及び書き込みデータのエントロピー値とを用いて、ＯＥＰを特定する。
【００３１】
ログ解析部７１は、エントロピー計算部３３によって算出された第１エントロピー値が所定の閾値よりも高くなった時点から、第２エントロピー値が所定の閾値よりも低くなった時点までの時間区間の中で前記メモリに対して書き込まれた前記所定の容量のデータのうち、最も早く実行されたデータの書き込み先を、復元された前記プログラムが実行される際の開始位置として特定する。また、ログ解析部７１は、第１エントロピー値が第１の閾値よりも高い時点からなる高区間と、前記第２エントロピー値が第２の閾値よりも低い時点からなり、かつ、発生時点が前記高区間よりも遅い低区間とを抽出し、前記高区間の開始時点から前記低区間の終了時点までの間を、前記圧縮又は暗号化された領域が前記メモリから読み出され、復元されて当該メモリに書き込まれるまでの前記時間区間として特定する。
【００３２】
具体的には、ログ解析部７１は、エントロピー計算部３３によって算出され、ログ記憶領域に記憶された読み込みデータのエントロピー値及び書き込みデータのエントロピー値に基づいて、ＯＥＰ及びオリジナルレコードが読み書きされた時間区間を特定する。より具体的には、ログ解析部７１は、読み込みデータのエントロピー値が所定の閾値を上回った時点から書き込みデータのエントロピー値が所定の値を下回った時点までの時間区間の中で書き込み命令が実行された書き込み先のメモリアドレスを抽出して、抽出したメモリアドレスを記憶したフィルター７２を生成する。
【００３３】
ここで、実施例１に係るログ解析部７１によって実行される処理について説明する。図５は、実施例１に係るログ解析部７１による第１の処理の一例を説明するための図である。図５においては、読み込みデータに対するログ解析部７１の処理について示す。例えば、ログ解析部７１は、図５の（Ａ）に示すように、ｉ回目の読み込み命令が実行された場合におけるデータのエントロピー値Ｒiが所定の閾値を上回ったか否かを判定する際に、以下に記すような処理を実行する。すなわち、ログ解析部７１は、エントロピー値Ｒiと、ｉ回目の前後Ｎ／２回の読み込み命令が実行された場合におけるデータそれぞれのエントロピー値の平均Ｐiと、所定の閾値Ｃとが「Ｒi−Ｐi＞Ｃ」を満たすか否かを判定する。
【００３４】
一例を挙げて説明すると、例えば、「Ｎ：３０００００、Ｃ：１．５」であった場合には、ログ解析部７１は、ｉ回目の前「１５００００」回分のエントロピー値及びｉ回目の後ろ「１５００００」回分のエントロピー値の平均値を算出する。そして、ログ解析部７１は、算出した平均値をＲiの値から減算して、「１．５」を上回るか否かを判定する。ログ解析部７１は、上述した処理を読み込みデータのエントロピー値を取得するごとに実行する。そして、ログ解析部７１は、図５の（Ｂ）に示すように、「Ｒi−Ｐi＞Ｃ」を満たすような「ｉ」の連続区間を全て算出し、図５の（Ｃ）に示すように、算出した連続区間の集合を高区間集合として抽出する。
【００３５】
図６は、実施例１に係るログ解析部７１による第２の処理の一例を説明するための図である。図６においては、書き込みデータに対するログ解析部７１の処理について示す。例えば、ログ解析部７１は、図６の（Ａ）に示すように、ｉ回目の書き込み命令が実行された場合におけるデータのエントロピー値Ｗiが所定の閾値を下回ったか否かを判定する際に、以下に記すような処理を実行する。すなわち、ログ解析部７１は、エントロピー値Ｗiと、ｉ回目の前後Ｎ／２回の読み込み命令が実行された場合におけるデータそれぞれのエントロピー値の平均Ｑiと、所定の閾値Ｃとが「−（Ｗi−Ｑi）＞Ｃ」を満たすか否かを判定する。
【００３６】
一例を挙げて説明すると、例えば、「Ｎ：３０００００、Ｃ：１．５」であった場合には、ログ解析部７１は、ｉ回目の前「１５００００」回分のエントロピー値及びｉ回目の後ろ「１５００００」回分のエントロピー値の平均値を算出する。そして、ログ解析部７１は、算出した平均値をＷiの値から減算して、減算した値に「−（マイナス）」を付加した値が「１．５」を上回るか否かを判定する。ログ解析部７１は、上述した処理を書き込みデータのエントロピー値を取得するごとに実行する。そして、ログ解析部７１は、図６の（Ｂ）に示すように、「−（Ｗi−Ｑi）＞Ｃ」を満たすような「ｉ」の連続区間を全て算出し、図６の（Ｃ）に示すように、算出した連続区間の集合を低区間集合として抽出する。
【００３７】
なお、高区間集合及び低区間集合を抽出する際に用いられる区間は、エントロピー値が閾値よりも高い時点及び低い時点が続く区間であれば、どのような区間を用いてもよい。すなわち、上述した連続区間は、あくまでも一例であり、他の例を挙げると、例えば、エントロピー値が閾値よりも高い時点及び低い時点が離散的に続く区間を用いる場合であってもよい。
【００３８】
さらに、ログ解析部７１は、抽出した高区間集合と低区間集合とを用いて、ＯＥＰを特定するためのフィルターを生成する。図７は、実施例１に係るログ解析部７１による第３の処理の一例を説明するための図である。例えば、ログ解析部７１は、図７の（Ａ）に示すように、高区間集合の中で一番早く出現した区間を区間Ｈとして抽出する。また、ログ解析部７１は、図７の（Ａ）に示すように、低区間集合の中で、区間Ｈの終点よりも始点及び終点が遅い区間の集合である集合Ｔを抽出する。そして、ログ解析部７１は、図７の（Ａ）に示すように、集合Ｔのなかで、一番早く出現した区間を区間Ｌとして抽出する。
【００３９】
そして、ログ解析部７１は、図７の（Ｂ）に示すように、区間Ｈの始点から区間Ｌの終点までの間に書き込み命令が実行された書き込み先アドレスを抽出する。その後、ログ解析部７１は、抽出した書き込み先アドレスを記憶させたフィルターを生成する。
【００４０】
ここで、読み込みデータのエントロピー値及び書き込みデータのエントロピー値を用いた処理において、以下に示す状態になった場合には、ログ解析部７１は、判定のための閾値を下げて、再度処理を実行する。具体的には、ログ解析部７１は、高区間集合又は低区間集合のいずれかがない場合、また、集合Ｔがない場合に、「閾値Ｃ」から「イテレーションごとの閾値の減少値δ」を減算し、減算後の値を新たな閾値として再度処理を実行する。すなわち、ログ解析部７１は、上述した場合には、「Ｃ:= Ｃ−δ」として再度高区間集合及び低区間集合の抽出処理を実行する。例えば、ログ解析部７１は、「δ」として「０．１」を用いる。
【００４１】
また、ログ解析部７１は、読み込みデータ及び書き込みデータともに、１回目からＮ／２回目までの間については、平均値の算出において不足する値にエントロピー値の最大値と最小値との中間値（loge２５６）／２を用いる。また、ログ解析部７１は、終了前Ｎ／２回については、計算の対象外とする。
【００４２】
図１に戻って、フィルター７２は、記憶領域６０によって記憶されたＯＥＰ候補を取得して、取得したＯＥＰ候補の中から自身が記憶する書き込み先アドレスに含まれないものを削除する。そして、フィルター７２は、削除後に残ったＯＥＰ候補のなかから一番早く実行されたＯＥＰ候補をＯＥＰとして特定し、特定したＯＥＰを図示しない出力部に出力する。解析者は、フィルター７２によって出力されたＯＥＰの情報を用いることで、正しいオリジナルコードの解析を実行することができる。
【００４３】
上述したように、実施例１に係るデータ特定装置１００は、メモリから読み込まれるデータ及びメモリに対して書き込まれるデータのエントロピー値の変化に基づいて、パッキングされたプログラムのオリジナルコードの開始アドレスであるＯＥＰを特定する。これは、読み込まれるデータと書き込まれるデータとが有する性質の違いを利用したものである。すなわち、データを解凍又は復号するためのメモリからデータを読み込む場合には、データは圧縮又は暗号化されているため規則性がなく、その結果、エントロピー値が高くなる。一方、メモリに対して書き込みが実行される場合には、データは、コードの終りにパディングと呼ばれる連続した「０」の値が書き込まれるケースが多く、その結果、エントロピー値が低くなる。すなわち、圧縮又は暗号化されたオリジナルコードに対して展開処理が実行されると、読み出しデータ及び書き込みデータのエントロピー値が上述したように推移することとなることから、読み込みデータのエントロピー値が高くなった時点から書き込みデータのエントロピー値が低くなった時点までの間に書き込まれたデータは、圧縮又は暗号化されたオリジナルコードである可能性が高い。そして、読み込みデータのエントロピー値が高くなった時点から書き込みデータのエントロピー値が低くなった時点までの間に出現した書き込み先アドレスのうち一番早いものが復元されたコードの開始アドレスであるＯＥＰである可能性が高い。従って、実施例１に係るデータ特定装置１００は、ＯＥＰを高確度で特定することができ、アンパッキングに係る作業の効率化を可能にする。
【００４４】
実施例１に係るデータ特定装置１００に利用されるパッキングとエントロピー値との関係については、以下に示す非特許文献においても言及されており、データ内における各バイト値の数の偏りが少ないほど、そのデータのエントロピー値が高くなり、パッキングによって圧縮もしくは暗号化されている情報は一般に高いエントロピー値を持つことが知られている。
【００４５】
「非特許文献：Robert Lyda , James Hamrock, Using Entropy Analysis to Find Encrypted and Packed Malware, IEEE Security and Privacy, v.5 n.2, p.40-45, March 2007」
【００４６】
［実施例１に係るデータ特定装置によるＯＥＰ特定処理の手順］
次に、実施例１に係るデータ特定装置１００によるＯＥＰ特定処理の手順について、図８を用いて説明する。なお、図８においては、監視対象プロセス５０が実行された後の手順について示している。図８は、実施例１に係るデータ特定装置１００によるＯＥＰ特定処理の手順を示すフローチャートである。
【００４７】
図８に示すように、実施例１に係るデータ特定装置１００においては、監視対象プロセス５０が実行されると、メモリアクセス監視部３１は、読み込みデータ及び書き込みデータの値を取得する（ステップＳ１０１）。そして、ＯＥＰ候補生成部３２は、書き込み命令が実行された書き込み先のアドレスに印を付加し、印が付加されたアドレスの値が実行された場合に、当該アドレスをＯＥＰ候補として生成する（ステップＳ１０２）。
【００４８】
その後、エントロピー計算部３３は、メモリアクセス監視部３１によって読み込みデータの値及び書き込みデータの値が取得されるごとに、各データのエントロピー値を算出する（ステップＳ１０３）。そして、ログ解析部７１は、読み込みデータからの高区間集合の抽出と、書き込みデータからの低区間集合とを実行する（ステップＳ１０４）。
【００４９】
ここで、ログ解析部７１は、高区間集合及び低区間集合が抽出されたか否かを判定する（ステップＳ１０５）。高区間集合及び低区間集合が抽出された場合には（ステップＳ１０５肯定）、ログ解析部７１は、高区間集合の中で一番早く出現する区間Ｈを抽出する（ステップＳ１０６）。一方、高区間集合又は低区間集合のいずれかが抽出されなかった場合には（ステップＳ１０５否定）、ログ解析部７１は、高区間集合及び低区間集合を抽出する際に用いる閾値を下げ（ステップＳ１０９）、再度高区間集合及び低区間集合の抽出を実行する。
【００５０】
ステップＳ１０６において、区間Ｈを抽出すると、ログ解析部７１は、低区間集合から区間Ｈよりも遅い集合Ｔの抽出を実行する（ステップＳ１０７）。ここで、ログ解析部７１は、集合Ｔが抽出されたか否かを判定する（ステップＳ１０８）。集合Ｔが抽出された場合には（ステップＳ１０８肯定）、ログ解析部７１は、集合Ｔの中で一番早く出現する区間Ｌを抽出する（ステップＳ１１０）。一方、集合Ｔが抽出されなかった場合には（ステップＳ１０８否定）、ログ解析部７１は、閾値を下げ（ステップＳ１０９）、再度高区間集合及び低区間集合の抽出を実行する（ステップＳ１０４）。
【００５１】
ステップＳ１１０において、区間Ｌを抽出すると、ログ解析部７１は、区間Ｈの始点から区間Ｌの終点までの間の書き込み命令の書き込み先アドレスを抽出する（ステップＳ１１１）。その後、フィルター７２は、ＯＥＰ候補生成部３２によって生成されたＯＥＰ候補のうち、抽出した書き込み先アドレスに含まれないものを削除する（ステップＳ１１２）。そして、フィルター７２は、残った候補のうち、一番早いものをＯＥＰと特定して（ステップＳ１１３）、処理を終了する。
【００５２】
［実施例１の効果］
上述したように、実施例１によれば、メモリアクセス監視部３１が、圧縮又は暗号化された領域を含むデータが所定の容量ごとにメモリから読み出される当該所定の容量のデータによって示される値と、メモリから読み出され、復元されて書き込まれる所定の容量のデータによって示される値とを取得する。エントロピー計算部３３が、メモリアクセス監視部３１によって取得された所定の容量のデータによって示される値を用いて、所定の回数の読み出し及び書き込みに相当するデータ量ごとに、当該データ量のデータのエントロピー値を算出する。ログ解析部７１が、エントロピー計算部３３によって算出された読み出しに係るエントロピー値が所定の閾値よりも高くなった時点から、書き込みに係るエントロピー値が所定の閾値よりも低くなった時点までの時間区間の中でメモリに対して最も早く書き込まれた所定の容量のデータの書き込み先を圧縮又は暗号化された領域の書き込み開始位置として特定する。従って、実施例１に係るデータ特定装置１００は、ＯＥＰを高確度で特定することができ、アンパッキングに係る作業の効率化を可能にする。
【００５３】
また、実施例１によれば、ログ解析部７１が、読み出しに係るエントロピー値が第１の閾値よりも高い時点からなる高区間と、書き込みに係るエントロピー値が第２の閾値よりも低い時点からなり、かつ、発生時点が高区間よりも遅い低区間とを抽出し、高区間の開始時点から低区間の終了時点までの間を、圧縮又は暗号化された領域がメモリから読み出され、復元されて当該メモリに書き込まれるまでの前記時間区間として特定する。実施例１に係るデータ特定装置１００は、マルウェアに相当するオリジナルコードを高確度で特定することができ、アンパッキングに係る作業の効率化を可能にする。
【００５４】
例えば、従来技術においては、複数のＯＥＰ候補が出力される場合が多く、解析者が出力された複数のＯＥＰ候補から正しいＯＥＰを特定する必要があった。そのため、オリジナルコードを抽出するアンパッキングに係る作業に手間がかかり、結果として、オリジナルコードの解析においても効率的に行うことが困難であった。開示の技術は、複数のＯＥＰ候補の中から、正しいＯＥＰを特定することができ、アンパッキングに係る作業の効率化を可能にする。その結果、開示の技術は、オリジナルコードの解析についても効率的に行うことを可能にする。
【実施例２】
【００５５】
これまで実施例１について説明したが、本願が開示する技術は実施例１に限定されるものではない。すなわち、実施例１は、その他の様々な形態で実施されることが可能であり、種々の省略、置き換え、変更を行うことができる。
【００５６】
上述した実施例１では、サブシステム１及び２が同一装置内に内蔵される場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、サブシステム１及び２がそれぞれ異なる装置内に内蔵される場合であってもよい。
【００５７】
上述した実施例１では、読み出しデータのエントロピー値に対する閾値と、書き込みデータのエントロピー値に対する閾値とが同一である場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、読み出しデータのエントロピー値に対する閾値と、書き込みデータのエントロピー値に対する閾値とで異なる値を用いる場合であってもよい。また、実施例１では、読み出しデータに対する処理及び書き込みデータに対する処理の双方において、イテレーションごとの閾値の減少値が同一である場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、イテレーションごとの閾値の減少値が読み出しデータに対する処理及び書き込みデータに対する処理とで異なる場合であってもよい。
【００５８】
上述した実施例１では、連続区間として始点と終点が異なる場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、始点と終点が同一である場合であってもよい。
【００５９】
上述した実施例１では、１バイトのデータの値を取得して、エントロピー値を算出する場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、２バイトのデータの値を取得して、エントロピー値を算出する場合であってもよい。
【００６０】
上述した実施例１では、監視対象プロセス５０がＶＭ上で実行される場合について説明した。これは、マルウェアの動的解析をＶＭＭ上で実行することにより、解析環境が感染しても容易に復旧することができる点や、耐デバッガ機能を有するマルウェアの解析に有利である点などの利点が得られるためである。すなわち、開示の技術は、これに限定されるものではなく、例えば、実施例１に記載したＶＭＭ３０で実行される処理を物理的計算機上で実行する場合であってもよい。なお、耐デバッガ機能とは、デバッガを検知した場合に、そのプログラムを終了させる機能である。
【００６１】
上述した実施例１では、読み出されるデータの容量と書き込まれるデータの容量とが同一である場合について説明した。しかしながら、開示の技術はこれに限定されるものではなく、例えば、読み出されるデータの容量と書き込まれるデータの容量とが異なる場合であってもよい。
【００６２】
[システム構成等]
例えば、各装置の分散・統合の具体的形態（例えば、図１の形態）は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合することができる。一例を挙げると、メモリアクセス監視部３１とＯＥＰ候補生成部３２とを一つの処理部として統合してもよく、一方、ログ解析部７１を、エントロピー値を解析するエントロピー値解析部と、フィルターを生成するフィルター生成部とに分散してもよい。
【００６３】
また、解析部７０をデータ特定装置１００の外部装置としてネットワーク経由で接続するようにしてもよく、或いは、ログ解析部７１を別の装置が有し、ネットワークに接続されて協働することで、上述したデータ特定装置１００の機能を実現するようにしてもよい。
【００６４】
[データ特定プログラム]
上記実施例で説明したデータ特定装置１００は、あらかじめ用意されたプログラムをコンピュータで実行することで実現することもできる。そこで、以下では、図１に示したデータ特定装置１００と同様の機能を実現するデータ特定プログラムを実行するコンピュータの一例を説明する。
【００６５】
図９は、実施例２に係るデータ特定プログラムを実行するコンピュータ１０００を示す図である。図９に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ（Central  Processing  Unit）１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。 
【００６６】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。 
【００６７】
ここで、図９に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ（Operating  System）１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。本実施例に係るデータ特定プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施例で説明したメモリアクセス監視部３１と同様の情報処理を実行する取得手順と、エントロピー計算部３３と同様の情報処理を実行する算出手順と、ログ解析部７１と同様の情報処理を実行する特定手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。 
【００６８】
また、上記実施例で説明した記憶領域６０に記憶されるデータのように、データ特定プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、取得手順と、算出手順と、特定手順とを実行する。
【００６９】
なお、情報送受信プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、情報送受信プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００７０】
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７１】
１０  ハードウェア
２０  ホストＯＳ
３０  ＶＭＭ
３１  メモリアクセス監視部
３２  ＯＥＰ候補生成部
３３  エントロピー計算部
４０  ゲストＯＳ
５０  監視対象プロセス
６０  記憶領域
７０  解析部
７１  ログ解析部
７２  フィルター
１００  データ特定装置
【図１】
0005456715.tif 000003
【図２】
0005456715.tif 000004
【図３】
0005456715.tif 000005
【図４】
0005456715.tif 000006
【図５】
0005456715.tif 000007
【図６】
0005456715.tif 000008
【図７】
0005456715.tif 000009
【図８】
0005456715.tif 000010
【図９】
0005456715.tif 000011