(57)【要約】  指令サーバ特定装置（１０）は、マルウェア（１１ａ）の実行時に、マルウェア（１１ａ）が受信したデータに対して、データの送信元の識別情報を一意に特定できるタグを付与し、タグが付与されたデータの伝搬を追跡する。また、指令サーバ特定装置（１０）は、追跡されたデータのうち、マルウェア（１１ａ）が実行した分岐命令により参照されたデータのタグを取得する。また、指令サーバ特定装置（１０）は、分岐命令の後にマルウェア（１１ａ）が実行しなかった分岐先の命令に関する情報を解析する。そして、指令サーバ特定装置（１０）は、解析結果に基づいて、取得されたタグに対応する送信元の識別情報からマルウェア（１１ａ）に指令を発する指令サーバの識別情報を特定する。
2016093182.tif 000002
【特許請求の範囲】
【請求項１】
マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元を識別する識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡部と、
前記追跡部によって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視部と、
前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析部と、
前記解析部の解析結果に基づいて、前記監視部によって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定部と、
を有することを特徴とする特定装置。
【請求項２】
前記解析部は、前記分岐命令の後に前記マルウェアが実行しなかった分岐先で、当該マルウェアが呼び出すＡＰＩまたはシステムコールの少なくとも一方を解析し、
前記特定部は、前記分岐命令の後に前記マルウェアが実行しなかった分岐先で所定のＡＰＩが呼び出される場合、または、所定のシステムコールが呼び出される場合は、該分岐命令により参照されたデータのタグに対応する送信元の識別情報を、前記指令サーバの識別情報とすることを特徴とする請求項１に記載の特定装置。
【請求項３】
前記特定部は、前記分岐命令の後に前記マルウェアが実行しなかった分岐先で所定のＡＰＩが所定の順番で呼び出される場合、または、所定のシステムコールが所定の順番で呼び出される場合は、該分岐命令により参照されたデータのタグに対応する送信元の識別情報を、前記指令サーバの識別情報とすることを特徴とする請求項２に記載の特定装置。
【請求項４】
前記解析部はさらに、前記マルウェアが実行しなかった分岐先の制御構造を解析することで、前記マルウェアが実行した分岐先と前記マルウェアが実行しなかった分岐先との合流点を特定し、
前記特定部は、前記分岐命令から前記合流点までの命令に関する情報の解析結果に基づいて、前記マルウェアに指令を発する指令サーバの識別情報を特定することを特徴とする請求項１に記載の特定装置。
【請求項５】
前記マルウェアの実行時におけるメモリの内容を取得する取得部を有し、
前記解析部は、前記取得部が取得したメモリの内容を用いて、前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を静的解析することを特徴とする請求項１に記載の特定装置。
【請求項６】
前記マルウェアを実行した仮想マシンのスナップショットを記録する記録部を有し、
前記解析部は、前記記録部が記録したスナップショットを用いて、前記分岐命令の後に前記マルウェアが実行しなかった分岐先を強制的に実行させ、当該分岐先の命令に関する情報を動的解析することを特徴とする請求項１に記載の特定装置。
【請求項７】
特定装置が実行する特定方法であって、
マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元の識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡工程と、
前記追跡工程によって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視工程と、
前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析工程と、
前記解析工程の解析結果に基づいて、前記監視工程によって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定工程と、
を含んだことを特徴とする特定方法。
【請求項８】
マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元の識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡ステップと、
前記追跡ステップによって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視ステップと、
前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析ステップと、
前記解析ステップの解析結果に基づいて、前記監視ステップによって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定ステップと、
をコンピュータに実行させるための特定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定装置、特定方法および特定プログラムに関する。
【背景技術】
【０００２】
近年、情報漏えいや不正アクセスといった脅威をもたらすマルウェアが猛威を振るっている。このようなマルウェアへの対策を行う場合、感染そのものを防ぐことが理想である。しかしながら、マルウェアに感染させる手法は高度化・多様化の一途を辿っており、全てのマルウェア感染を未然に防ぐことは困難な状況にある。そのため、マルウェアへの感染を防止する対策だけでなく、感染後の被害を最小限に抑制する対策が求められている。【０００３】
このような感染後の対策への需要を背景に、ブラックリストを用いた感染端末検知や通信遮断などの対策が講じられている。例えば、マルウェアの多くは、感染後に、攻撃者の命令を送信してマルウェアの動作を決定する指令サーバと通信する特徴を持っており、指令サーバからの命令に応じて情報漏えいやさらなる感染活動を行う。このため、指令サーバをあらかじめブラックリスト化しておくことができれば、指令サーバとの通信の検知による感染端末発見や、指令サーバとの通信の遮断による感染端末の無害化が実現できる。しかしながら、この対策はブラックリストをあらかじめ生成しておかなければならない。【０００４】
一般に、ブラックリストに掲載すべき通信先はマルウェアを解析することで抽出できるため、マルウェア解析によるブラックリスト生成が行われている。しかし、マルウェアは指令サーバだけでなく解析妨害などの目的のために正規サイトとも通信をするため、正規サイトを含む複数の通信先の中から指令サーバのみを抽出することが求められている。このため、非特許文献１や非特許文献２のように指令サーバがマルウェアを制御する方法に着目した手法の研究が行われている。【０００５】
ここで、指令サーバがマルウェアを制御する方法は大きく分けて２つある。１つは、マルウェアが実行するプログラムコードに加えてシステムコールやＡＰＩ（Application  Programming  Interface）の引数を指定する方法である。もう１つは、マルウェアが実行するプログラムコードのみを指定する方法である。【０００６】
そこで、非特許文献１では、マルウェアのプログラムコード内の分岐命令と分岐先で実行されるＡＰＩ呼出列に着目し、同一の通信先からの受信データによって各分岐先で所定のＡＰＩが呼び出された場合に、かかる通信先を指令サーバとして特定する。また、非特許文献２では、マルウェアの送受信データに関連して発行されたシステムコール間のデータの受け渡し関係に着目し、システムコールやＡＰＩの引数が指定された場合に、指令サーバを特定する。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】幾世知範，青木一史，針生剛男「制御フローと通信の関連性分析に基づくC&Cサーバ特定手法の提案」信学技報  ICSS2013-81
【非特許文献２】G.  Jacob,  R.  Hund,  C.  Kruegel,  and  T.  Holz,  「Jackstraws:  Picking  Command  and  Control  Connections  from  Bot  Traffic,」  In  Proceedings  of  the  20th  USENIX  Conference  on  Security
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来の技術では、マルウェアが実行するプログラムコードを指定する命令等、分岐命令にのみ影響を与える指令を１種類のみ受信しただけでは、指令サーバの特定が困難であるという課題があった。【０００９】
例えば、実行するプログラムコードのみを指定する制御方法では、指令サーバから受信されるデータは、分岐命令にのみ影響を与え、システムコールやＡＰＩの引数として利用されない。このため、非特許文献２に記載の方法では、マルウェアが実行するプログラムコードのみが指定された場合に、指令サーバを見逃してしまう恐れがある。一方、非特許文献１に記載の方法では、分岐命令に着目するため、いずれの制御方法であっても対処可能であるが、正規サイトも分岐命令に影響を与える場合があるため、指令サーバを精度良く検知するためには、分岐命令にのみ影響を与える指令を２種類以上受信する必要がある。【００１０】
本発明は、上述した従来技術の課題を解決するためになされたものであり、分岐命令にのみ影響を与える指令を１種類のみ受信した場合にも、指令サーバを特定することができる特定装置、特定方法および特定プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、特定装置は、マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元の識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡部と、前記追跡部によって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視部と、前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析部と、前記解析部の解析結果に基づいて、前記監視部によって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定部と、を有することを特徴とする。【００１２】
また、特定方法は、特定装置が実行する特定方法であって、マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元の識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡工程と、前記追跡工程によって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視工程と、前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析工程と、前記解析工程の解析結果に基づいて、前記監視工程によって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定工程と、を含んだことを特徴とする。【００１３】
また、特定プログラムは、マルウェアの実行時に、該マルウェアが受信したデータに対して、該データの送信元の識別情報を一意に特定できるタグを付与し、該タグが付与されたデータの伝搬を追跡する追跡ステップと、前記追跡ステップによって追跡されたデータのうち、マルウェアが実行した分岐命令により参照されたデータのタグを取得する監視ステップと、前記分岐命令の後に前記マルウェアが実行しなかった分岐先の命令に関する情報を解析する解析ステップと、前記解析ステップの解析結果に基づいて、前記監視ステップによって取得されたタグに対応する送信元の識別情報から前記マルウェアに指令を発する指令サーバの識別情報を特定する特定ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１４】
本願に開示する特定装置、特定方法および特定プログラムは、分岐命令にのみ影響を与える指令を１種類のみ受信した場合にも、指令サーバを特定することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、第１の実施の形態に係る指令サーバ特定装置の概要を示す構成図である。
【図２】図２は、第１の実施の形態に係る識別情報ＤＢが保持する情報の一例を示す図である。
【図３】図３は、第１の実施の形態に係る実行トレースＤＢが保持する情報の一例を示す図である。
【図４】図４は、第１の実施の形態に係るメモリダンプＤＢが保持する情報の一例を示す図である。
【図５】図５は、第１の実施の形態に係る未実行領域解析部が解析する制御構造の一例を示す図である。
【図６】図６は、第１の実施の形態に係る指令サーバ特定装置による未実行領域を静的解析する処理の流れを示すフローチャートである。
【図７】図７は、第１の実施の形態に係る指令サーバ特定装置による指令サーバの特定処理の流れを示すフローチャートである。
【図８】図８は、第２の実施の形態に係る指令サーバ特定装置の概要を示す構成図である。
【図９】図９は、第２の実施の形態に係る実行時状態ＤＢが保持する情報の一例を示す図である。
【図１０】図１０は、第２の実施の形態に係る指令サーバ特定装置による未実行領域を動的解析する処理の流れを示すフローチャートである。
【図１１】図１１は、特定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１６】
以下の実施の形態では、第１の実施の形態に係る指令サーバ特定装置の構成および処理の流れを順に説明し、その後、最後に第１の実施の形態による効果を説明する。
【００１７】
［第１の実施の形態］
まず、図１を用いて、指令サーバ特定装置１０の構成を説明する。図１は、第１の実施の形態に係る指令サーバ特定装置の概要を示す構成図である。図１に示すように、指令サーバ特定装置１０は、マルウェア実行環境部１１、識別情報ＤＢ（Data  Base）１２、実行トレースＤＢ１３、メモリダンプＤＢ１４、未実行領域解析部１５、および指令サーバ特定部１６を有する。以下にこれらの各部の処理を説明する。
【００１８】
マルウェア実行環境部１１は、マルウェア１１ａ、ゲストＯＳ（Operating  System）１１ｂと仮想マシンモニタ１１ｃとから構成され、マルウェアを実際に動作させながら解析する。マルウェア１１ａは、情報漏洩や不正アクセス等の脅威をもたらす不正プログラムであり、解析対象のプログラムとして、ゲストＯＳ１１ｂ上で実行される。ゲストＯＳ１１ｂは、マルウェア１１ａを動的解析するための環境である。
【００１９】
仮想マシンモニタ１１ｃは、メモリダンプ取得部１１０と、データ伝搬追跡部１１１および命令監視部１１２によって構成され、マルウェア実行時の動作を監視する。例えば、仮想マシンモニタ１１ｃは、ゲストＯＳ１１ｂ上に、仮想ＣＰＵ（Central  Processing  Unit）や仮想メモリ等を有する仮想マシンを構築し、マルウェア１１ａを仮想マシンに実行させ、その動作を監視する。
【００２０】
メモリダンプ取得部１１０は、マルウェア１１ａの動作を監視するため、メモリダンプを取得して、メモリダンプＤＢ１４に登録する。例えば、メモリダンプ取得部１１０は、仮想マシンがマルウェア１１ａを実行する際における仮想マシンが有する仮想メモリの内容を取得して、取得した内容をメモリダンプＤＢ１４に記録する。
【００２１】
データ伝搬追跡部１１１は、マルウェア１１ａが受信したデータに対して送信元および何番目の受信データであるかを一意に特定できるタグを設定し、テイント解析によってマルウェア１１ａの実行時のデータの伝搬を追跡する。
【００２２】
ここで、テイント解析技術とは、データフロー解析を自動化する手法の１つであり、データに対してタグを設定し、伝搬ルールに従ってタグを伝搬させることで解析システム内のデータの伝搬を追跡する技術である。また、タグとは、データに対して付与される属性情報であり、データの出自や種類が設定される。また、伝搬ルールとは、タグを伝搬させる条件であり、一般にデータのコピーや演算が伝搬の条件として設定される。
【００２３】
例えば、データ伝搬追跡部１１１は、受信データの利用用途を解析する場合には、受信データに対して取得元を一意に特定可能なタグを設定し、データのコピーや演算に応じてタグを伝搬させる。この結果、指令サーバ特定装置１０は、ＡＰＩの引数として渡されたデータにタグが設定されていることを確認することで、受信データがＡＰＩの引数として利用されるデータであることが解析できる。なお、テイント解析技術では、仮想計算機技術を用いて実現されることが一般的であり、データとは異なる専用の記録領域にタグをデータと対応が取れるように保持する。
【００２４】
データ伝搬追跡部１１１が実行する処理の一例を説明すると、データ伝搬追跡部１１１は、マルウェア１１ａが受信したデータに対して送信元を一意に特定できるタグを設定し、ＩＰ（Internet  Protocol）アドレスやＦＱＤＮ（Fully  Qualified  Domain  Name）、ＵＲＬ（Uniform  Resource  Locator）といったデータの送信元を示す識別情報と対応するタグを識別情報ＤＢ１２に記録した上で、仮想マシンモニタ１１ｃ上でのデータの伝搬の追跡を行う。また、データ伝搬追跡部１１１は、複数の送信元からデータを受信して新たなデータが生成された場合には、複数の送信元の識別情報を一意に特定できる新たなタグを生成してデータに付与し、該タグが付与されたデータの伝搬を追跡する。また、データ伝搬追跡部１１１は、関数内で受信データが参照された場合には、関数の戻り値に対してタグを付与し、該タグが付与されたデータの伝搬を追跡する。
【００２５】
命令監視部１１２は、マルウェア１１ａのプログラムコードが実行した分岐命令のうち、マルウェア１１ａが受信したデータであることを示すタグの付いたデータを参照した分岐命令やＡＰＩ呼び出し、およびこれらを呼び出した際のコールスタック等をログとして実行トレースＤＢ１３に記録する。具体的には、命令監視部１１２は、マルウェア１１ａが実行したＡＰＩ呼び出しやシステムコールの発行、ｊｍｐ命令、ｊｃｃ命令、ｃａｌｌ命令、ｒｅｔ命令などの分岐命令、命令実行時のコールスタック、分岐命令が参照したデータのタグを取得し、実行トレースＤＢ１３に記録する。すなわち、命令監視部１１２は、マルウェア１１ａが実行した分岐命令により参照されたデータのタグを取得し、実行トレースＤＢ１３に記録する。
【００２６】
識別情報ＤＢ１２は、マルウェア実行時に発生した通信の識別情報と当該識別情報が示す通信先からの受信データに対して設定したタグを対応付けて記憶する。例えば、図２は、第１の実施の形態に係る識別情報ＤＢが保持する情報の一例を示す図である。図２に示すように、識別情報ＤＢ１２は、識別情報と、識別情報が示す通信先から受信した受信データに付与されたタグとを対応付けて記憶する。
【００２７】
例えば、図２に示す例では、識別情報であるＩＰアドレス「192.168.2.150」に対応するタグは「1」であり、識別情報であるＩＰアドレス「192.168.5.140」に対応するタグは「2」である。このように、識別情報ＤＢ１２は、通信先とタグを関連付けて記憶しておくことで、データに設定されているタグの確認によって取得元を把握する。
【００２８】
なお、識別情報ＤＢ１２に登録されるタグは、例えば、データ伝搬追跡部１１１によって設定されるが、かかるタグを設定する粒度は、最終的に特定したい指令サーバの識別情報の粒度に応じて、任意の設定を行ってもよい。例えば、データ伝搬追跡部１１１は、ＦＱＤＮやＵＲＬごとに受信データに対応するタグを変更してもよく、ポート番号も考慮した上でセッションごとにタグを変更してもよい。ただし、データ伝搬追跡部１１１は、図２に示す例のように、通信先を一意に特定可能なタグを設定する。
【００２９】
図１に戻り、実行トレースＤＢ１３は、命令監視部１１２によって取得されたログを記憶する。例えば、図３は、第１の実施の形態に係る実行トレースＤＢが保持する情報の一例を示す図である。実行トレースＤＢ１３には、ログを特定するためのＩＤ（IDentifier）、マルウェアが解析中に実行した分岐命令、分岐命令を実行した実行アドレス、実行時のコールスタック、実行された分岐先、実行されなかった分岐先、分岐先決定に影響を与えたタグ、ＡＰＩ名が記録される。ここで、ＡＰＩ名は、分岐先がＡＰＩであった場合に記録される情報である。また、分岐先決定に影響を与えたタグ、および実行されなかった分岐先は、これらが存在した場合にのみ記録される情報である。
【００３０】
図１に戻り、メモリダンプＤＢ１４は、メモリダンプ取得部１１０がマルウェア１１ａの実行時に取得したメモリダンプを記録する。例えば、図４は、第１の実施の形態に係るメモリダンプＤＢが保持する情報の一例を示す図である。図４に示す例では、メモリダンプＤＢ１４は、メモリダンプを特定するためのＩＤ、実行ログＩＤ、およびダンプ内容を対応付けて記録する。ここで、実行ログＩＤとは、メモリダンプを取得した場所を示す情報として実行トレースＤＢ１３に登録されたログのＩＤである。また、ダンプ内容とは、メモリダンプ取得部１１０が取得したメモリダンプである。これにより、メモリダンプＤＢ１４には、未実行領域解析時に解析の対象となるメモリダンプが特定可能となる。
【００３１】
図１に戻り、未実行領域解析部１５は、マルウェア１１ａが実行した分岐命令の後に、マルウェア１１ａが実行しなかった分岐先の命令に関する情報を解析する。具体的には、未実行領域解析部１５は、識別情報ＤＢ１２と、実行トレースＤＢ１３と、メモリダンプＤＢ１４とに格納された情報に基づいて、マルウェア１１ａが未実行の分岐先のプログラムコードを静的解析する。また、未実行領域解析部１５は、マルウェア１１ａが実行しなかった分岐先における命令や処理の構造である制御構造を解析することで、マルウェア１１ａが実行した分岐先と、マルウェア１１ａが実行しなかった分岐先との合流点を特定する。
【００３２】
ここで、図５は、第１の実施の形態に係る未実行領域解析部１５が解析する制御構造の一例を示す図である。図５に示す例では、外部のサーバから受信したデータにより分岐先が変化する分岐命令によって、マルウェア１１ａが実行する処理が分岐先Ａと分岐先Ｂとに分岐した後、合流点Ｃで各分岐が合流する場合の制御構造を示した。図５に示す場合、未実行領域解析部１５は、マルウェアを動的解析している際に分岐先Ａのみが実行された場合、マルウェア１１ａによって実行されなかった分岐先Ｂと分岐先Ａとの合流点Ｃを特定することで、マルウェア１１ａによって実行された分岐先Ｂの範囲を特定する。
【００３３】
続いて、未実行領域解析部１５が実行する処理を具体的に説明する。例えば、未実行領域解析部１５は、実行トレースＤＢ１３を参照し、受信データが分岐先の決定に影響を与えた分岐命令を特定し、特定した分岐命令の各分岐先をマルウェア１１ａが実行したか否かを判定する。このとき、各分岐命令は、コールスタックと実行アドレスの値（命令ポインタレジスタの値）を考慮して識別される。そして、未実行領域解析部１５は、実行トレースＤＢ１３から特定した分岐命令について、各分岐先を実行した際のログである実行ログが確認できた場合には、未実行領域は存在しないものとして、特定した分岐命令に対する処理を終了する。
【００３４】
一方、未実行領域解析部１５は、未実行の分岐先が存在した場合、マルウェア１１ａの実行時に記録されたメモリダンプを用いて、未実行の分岐先で呼び出されるＡＰＩおよび分岐先の制御構造を静的解析する。例えば、未実行領域解析部１５は、メモリダンプのデータを逆アセンブルする静的解析を行う。ここで、逆アセンブルの具体的なアルゴリズムとしては、公知のリニアスイープアルゴリズムや再帰的アルゴリズムが用いられる。
【００３５】
また、未実行領域解析部１５は、未実行の分岐先で呼び出されるＡＰＩを、マルウェア１１ａが実行した分岐先の動的解析中にロードされたモジュールおよびそのエクスポートアドレステーブル、呼び先のアドレス、解析対象のインポートアドレステーブルの情報を照らし合わせることで特定する。なお、未実行領域解析部１５は、テイント解析を応用して解析妨害への耐性を持たせた公知のＡＰＩ読出し監視手法を用いて、未実行領域を監視してもよい。その後、未実行領域解析部１５は、解析結果として、特定したＡＰＩや制御構造を指令サーバ特定部１６に通知する。
【００３６】
なお、本形態では、未実行領域解析部１５は、静的解析を用いるため、呼び先のアドレスを動的に決定する場合など、呼び先を特定できない場合は、特定できたＡＰＩ呼び出しのみを分岐先で実行されるＡＰＩとして特定し、指令サーバ特定部１６に通知する。また、未実行領域解析部１５は、制御構造についても分岐先が不明な命令は、考慮しない。
【００３７】
指令サーバ特定部１６は、未実行領域解析部１５の解析結果と、実行トレースＤＢ１３および識別情報ＤＢ１２に格納された情報に基づいて、指令サーバを特定する。具体的には、指令サーバ特定部１６は、未実行領域解析部１５の解析結果に基づいて、命令監視部１１２によって取得されたタグに対応する送信元の識別情報から、マルウェア１１ａに指令を発する指令サーバの識別情報を特定する。
【００３８】
例えば、指令サーバ特定部１６は、未実行領域解析部１５から、マルウェア１１ａが未実行の分岐先である未実行領域で呼び出されるＡＰＩおよび未実行領域の制御構造を受信する。また、指令サーバ特定部１６は、実行トレースＤＢ１３が保持する実行ログと、識別情報ＤＢ１２が保持する情報とを読み込む。その後、指令サーバ特定部１６は、受信データによって分岐先の決定に影響を受けた全分岐命令について、次の条件に当てはまるか否かを確認する。すなわち、指令サーバ特定部１６は、分岐命令の各分岐の先に合流点が存在する場合には分岐点と合流点の間で呼び出されているＡＰＩ、合流点が存在しない場合には終点までの間で呼び出されているＡＰＩを特定し、特定したＡＰＩに所定のＡＰＩまたは所定のＡＰＩ列が含まれているか否かを判定する。
【００３９】
また、指令サーバ特定部１６は、特定したＡＰＩに所定のＡＰＩないしは所定のＡＰＩ列が含まれている場合は、分岐する際に参照されたデータのタグを実行トレースＤＢ１３から取得した後、タグに紐づいた通信先を識別情報ＤＢ１２から取得することで、指令サーバを特定する。すなわち、指令サーバ特定部１６は、ある分岐命令の分岐先のうち、マルウェア１１ａが実行していない分岐先で所定のＡＰＩまたはＡＰＩ列が呼びされている場合は、かかる分岐命令に影響を与えたデータの送信元を指令サーバと判定する。
【００４０】
なお、上述した所定のＡＰＩとは、一般的にマルウェアが好んで呼び出す等、マルウェア解析において着目すべきＡＰＩであり、別途リストとして用意し、リストと照らし合わせることで所定のＡＰＩであるか否かを確認できる。また、所定のＡＰＩ列とは、マルウェアが指令サーバからの指令を受信した後に実行する、マルウェア解析において着目すべきＡＰＩの順番である。
【００４１】
ここで、所定のＡＰＩ列には、例えば、指令サーバからファイル読出し命令がくる場合を想定し、端末内のファイルを開くＡＰＩ、ファイル内データを読み込むＡＰＩ、読み込んだデータを外部サーバに送信するＡＰＩといった順番のＡＰＩ列が設定される。また、所定のＡＰＩ列には、例えば、指令サーバからファイル書込み命令がくる場合を想定し、端末内のファイルを開くＡＰＩ、ファイル内データを検索するＡＰＩ、ファイル内にデータを書き込むＡＰＩ、ファイルを閉じるＡＰＩといった順番のＡＰＩ列が設定される。
【００４２】
これら所定のＡＰＩおよびＡＰＩ列は、事前のマルウェア解析によって調査し、リスト化することができる。なお、確認するＡＰＩおよびＡＰＩ列は、ＡＰＩが操作する計算資源に応じて制限してもよいし、事前に解析したマルウェア１１ａが呼び出したＡＰＩで制限してもよい。また、検知精度向上のため、指令サーバと判定する際に動的解析時に呼び出されたＡＰＩおよびＡＰＩ呼び出し列のみを検知の対象としてもよい。
【００４３】
また、指令サーバ特定部１６は、未実行領域で呼び出されるシステムコールに所定のシステムコールが含まれる場合や、所定のシステムコールが所定の順番で呼び出される場合は、分岐命令により参照されたデータのタグに対応する送信元を指令サーバと判定してもよい。また、指令サーバ特定部１６は、呼び出されたＡＰＩとシステムコールとの両方に基づいて、指令サーバの判定を行ってもよい。
【００４４】
なお、指令サーバ特定部１６は、上述した処理に加えて、マルウェア１１ａが実行した分岐先で呼び出したＡＰＩやシステムコール等に基づいて、指令サーバの特定を行う。例えば、指令サーバ特定部１６は、複数の分岐先でＡＰＩ呼び出しまたはシステムコールの発行が行われた分岐命令について、分岐する際に参照されたデータのタグに対応する識別情報が複数の分岐先において共通する場合には、該識別情報を指令サーバの識別情報として特定する。
【００４５】
例えば、指令サーバ特定部１６は、実行トレースＤＢ１３が保持するマルウェア１１ａが実行したＡＰＩ呼び出しやシステムコールの発行、分岐命令およびコールスタックの情報を分析することで、複数の分岐先でＡＰＩ呼び出しやシステムコールの発行が行われた分岐命令を抽出し、ＡＰＩ呼び出しやシステムコールの発行が行われた分岐先に分岐する際に参照したデータのタグを実行トレースＤＢ１３から取得する。
【００４６】
さらに、指令サーバ特定部１６は、識別情報ＤＢ１２からタグに対応する通信先を取得することで分岐命令に影響を与えた通信先を分岐先ごとに取得し、分岐先間に共通する通信先を指令サーバと判定する。すなわち、指令サーバ特定部１６は、マルウェア１１ａの動的解析を行うことで、指令サーバを特定するとともに、分岐命令ごとに、マルウェア１１ａが実行しなかった分岐先を静的解析し、静的解析の結果、所定のＡＰＩやＡＰＩ列が呼びされている場合は、処理対象となる分岐命令に影響を与えたデータの送信元を指令サーバであると判定する。
【００４７】
また、未実行領域を解析することで、分岐の合流点が明らかとなり、結果として動的解析中に実行された側にのみ所定のＡＰＩ列が呼び出されている場合も考えられる。かかる場合にも、指令サーバ特定部１６は、マルウェア１１ａが呼び出すＡＰＩ列に基づいて、指令サーバを特定することができる。
【００４８】
なお、指令サーバ特定部１６は、マルウェア１１ａが実行した分岐先から、他の公知の手法を用いて、指令サーバの特定を行ってもよい。例えば、指令サーバ特定部１６は、マルウェア１１ａが実行した分岐先で、所定のＡＰＩまたはシステムコールが呼びされていた場合等には、処理対象となる分岐命令に影響を与えたデータの送信元を指令サーバであると判定してもよい。
【００４９】
このように、指令サーバ特定装置１０は、マルウェア１１ａの実行時の受信データにタグを付与した上で伝搬を追跡し、マルウェア１１ａが実行したＡＰＩ呼び出し、分岐命令、命令実行時のコールスタックおよび分岐命令で参照したデータに設定されていたタグを監視し、取得する。そして、指令サーバ特定装置１０は、受信データによって分岐先を決定された分岐命令において、マルウェア１１ａにより実行されなかった分岐先で呼び出されるＡＰＩもしくはＡＰＩ列、および制御構造に基づいて、指令サーバを特定する。
【００５０】
ここで、指令サーバがマルウェア１１ａを制御する場合は、プログラムコードに加えてシステムコールやＡＰＩの引数を指定する方法と、実行するプログラムコードのみを指定する方法とのいずれの指令においても、分岐命令に影響を与えることで実行するプログラムコードの指定が行われる。このため、指令サーバ特定装置１０は、呼びされるＡＰＩまたはＡＰＩ列等を確認することで、実際に通信先がマルウェアを操作し得るのか否かを判断できるため、通信先は指令サーバであると特定できる。
【００５１】
また、指令サーバ特定装置１０は、分岐命令に影響を与えた受信データとその取得元、および分岐先で呼び出されるＡＰＩもしくはＡＰＩ列に着目することで指令サーバを特定でき、複数の分岐先において当該ＡＰＩ列を確認することでその確度は高くなる。つまり指令サーバ特定装置１０は、未実行領域の分岐先も分析を行うので、実行するプログラムコードの切り換えのみを指示する指令が１種類のみ送られてきた場合においても、指令サーバの特定が可能となる。
【００５２】
なお、指令サーバ特定装置１０により特定された指令サーバは、既知の悪性なＩＰアドレスやＵＲＬ等を掲載した指令サーバのブラックリストに登録される。指令サーバのＩＰアドレス等の識別情報をブラックリストに登録することで、指令サーバとの通信を遮断したり、感染端末の発見・隔離を行うことが可能である。
【００５３】
［指令サーバ特定装置による処理］
次に、図６、図７を用いて、第１の実施形態に係る指令サーバ特定装置１０による処理を説明する。図６は、第１の実施の形態に係る指令サーバ特定装置による未実行領域を静的解析する処理の流れを示すフローチャートである。図７は、第１の実施の形態に係る指令サーバ特定装置による指令サーバの特定処理の流れを示すフローチャートである。
【００５４】
まず、図６を用いて、第１の実施の形態に係る指令サーバ特定装置１０の未実行領域解析部１５による未実行領域の解析処理の流れについて説明する。図６に示すように、未実行領域解析部１５は、実行トレースＤＢ１３から受信データが分岐先の決定に影響を与えた分岐命令を取得する（ステップＳ１０１）。続いて、未実行領域解析部１５は、取得した分岐命令をすべて確認したか否かを判定し（ステップＳ１０２）、確認していない場合は（ステップＳ１０２：Ｎｏ）、全分岐先が実行されたか否かを判定する（ステップＳ１０３）。
【００５５】
ここで、未実行領域解析部１５は、全分岐先が実行されていない場合（ステップＳ１０３：Ｎｏ）、すなわち、未実行領域が存在する場合は、未実行領域を静的解析する（ステップＳ１０４）。続いて、未実行領域解析部１５は、静的解析した結果、特定した制御構造と未実行領域で呼び出されるＡＰＩを指令サーバ特定部１６に通知し（ステップＳ１０５）、再度ステップＳ１０２を実行する。一方、未実行領域解析部１５は、全分岐先が実行されていた場合は（ステップＳ１０３：Ｙｅｓ）、再度、ステップＳ１０２を実行する。そして、未実行領域解析部１５は、取得した分岐命令をすべて確認した場合は（ステップＳ１０２：Ｙｅｓ）、処理を終了する。
【００５６】
次に、図７を用いて、第１の実施の形態に係る指令サーバ特定装置１０による指令サーバの特定処理の流れについて説明する。図７に示すように、指令サーバ特定部１６は、実行トレースＤＢ１３から実行ログを取得する（ステップＳ２０１）。続いて、指令サーバ特定部１６は、未実行領域解析部１５から、解析結果を取得する（ステップＳ２０２）。そして、指令サーバ特定部１６は、実行トレースＤＢ１３から、受信データが分岐先の決定に影響を与えた分岐命令を取得する（ステップＳ２０３）。
【００５７】
そして、指令サーバ特定部１６は、取得した分岐命令をすべて確認したか否かを判定し（ステップＳ２０４）、確認していない場合は（ステップＳ２０４：Ｎｏ）、確認していない分岐命令について、以下の処理を実行する。すなわち、指令サーバ特定部１６は、分岐点から合流点ないしはプログラムによって実行される処理の終点までに呼び出されるＡＰＩ、すなわち、未実行領域で呼びされるＡＰＩを取得する（ステップＳ２０５）。そして、指令サーバ特定部１６は、取得したＡＰＩに所定のＡＰＩないしはＡＰＩ列が呼び出されているか否かを判定し（ステップＳ２０６）、呼び出されている場合は（ステップＳ２０６：Ｙｅｓ）、処理対象とした分岐命令で参照されたデータのタグに紐づく識別情報を識別情報ＤＢ１２から取得する（ステップＳ２０７）。
【００５８】
その後、指令サーバ特定部１６は、取得した識別情報が示す通信先を指令サーバと判定し（ステップＳ２０８）、再度ステップＳ２０４を実行する。一方、指令サーバ特定部１６は、取得したＡＰＩに所定のＡＰＩないしはＡＰＩ列が呼び出されていない場合は（ステップＳ２０６：Ｎｏ）、再度ステップＳ２０４を実行する。また、指令サーバ特定部１６は、取得した分岐命令をすべて確認した場合は（ステップＳ２０４：Ｙｅｓ）、処理を終了する。
【００５９】
[第１の実施の形態の効果]
上述してきたように、指令サーバ特定装置１０は、マルウェア１１ａの実行時に、マルウェア１１ａが受信したデータに対して、データの送信元の識別情報を一意に特定できるタグを付与し、タグが付与されたデータの伝搬を追跡する。また、指令サーバ特定装置１０は、追跡されたデータのうち、マルウェア１１ａが実行した分岐命令により参照されたデータのタグを取得する。また、指令サーバ特定装置１０は、分岐命令の後にマルウェア１１ａが実行しなかった分岐先の命令に関する情報を解析し、解析結果に基づいて、取得されたタグに対応する送信元の識別情報からマルウェア１１ａに指令を発する指令サーバの識別情報を特定する。
【００６０】
このため、指令サーバ特定装置１０は、分岐命令にのみ影響を与える指令を１種類のみ受信した場合にも、指令サーバを特定することができる。また、指令サーバ特定装置１０は、マルウェアの通信内容が難読化・暗号化されている場合において指令サーバを自動で特定することができる。
【００６１】
また、指令サーバ特定装置１０は、分岐命令の後にマルウェア１１ａが実行しなかった分岐先で、マルウェア１１ａが呼び出すＡＰＩまたはシステムコールの少なくとも一方を解析する。そして、指令サーバ特定装置１０は、分岐命令の後にマルウェア１１ａが実行しなかった分岐先で所定のＡＰＩが呼び出される場合、または、所定のシステムコールが呼び出される場合は、分岐命令により参照されたデータのタグに対応する送信元の識別情報を、指令サーバの識別情報とする。このため、指令サーバ特定装置１０は、所定のＡＰＩやシステムコールを呼び出すマルウェア１１ａの指令サーバを特定することができる。
【００６２】
また、指令サーバ特定装置１０は、分岐命令の後にマルウェア１１ａが実行しなかった分岐先で所定のＡＰＩが所定の順番で呼び出される場合、または、所定のシステムコールが所定の順番で呼び出される場合は、分岐命令により参照されたデータのタグに対応する送信元の識別情報を、指令サーバの識別情報とする。このため、指令サーバ特定装置１０は、所定のＡＰＩやシステムコールを所定の順番で呼び出すマルウェア１１ａの指令サーバを特定することができる。
【００６３】
また、指令サーバ特定装置１０は、マルウェアが実行しなかった分岐先の制御構造を解析することで、マルウェアが実行した分岐先とマルウェアが実行しなかった分岐先との合流点を特定し、分岐命令から合流点までの命令に関する情報の解析結果に基づいて、マルウェアに指令を発する指令サーバの識別情報を特定する。このため、指令サーバ特定装置１０は、精度良く、マルウェア１１ａの指令サーバを特定することができる。
【００６４】
また、指令サーバ特定装置１０は、マルウェア１１ａの実行時におけるメモリの内容を取得し、取得されたメモリの内容を用いて、分岐命令の後にマルウェア１１ａが実行しなかった分岐先の命令に関する情報を静的解析する。このため、指令サーバ特定装置１０は、分岐先を解析するために何度もマルウェア１１ａを実行させずとも良いので、解析の処理負荷を軽減することができる。
【００６５】
［第２の実施の形態］
上述した第１の実施の形態では、指令サーバ特定装置１０が未実行領域を静的解析し、未実行領域で呼びされるＡＰＩやシステムコールに基づいて、指令サーバを特定した。しかしながら、実施の形態は、これに限定されるものではない。例えば、指令サーバ特定装置１０は、未実行領域を動的解析することによって、未実行領域で呼びされるＡＰＩ、システムコール、および未実行領域の制御構造を解析してもよい。かかる処理を実行した場合、指令サーバ特定装置１０は、命令を実行する過程で動的にｃａｌｌ命令での呼び先が決定される場合など、静的解析だけでは解析が困難な状況においても分岐先に存在するＡＰＩ、システムコール、および制御構造を解析することができる。
【００６６】
以下、図を用いて、第２の実施の形態にかかる指令サーバ特定装置１０ａについて説明する。なお、以下の説明では、第１の実施の形態と同様の処理を実行するものについては、同一の符号を付し、以下の説明を省略する。
【００６７】
まず、図８を用いて、指令サーバ特定装置１０ａの構成を説明する。図８は、第２の実施の形態に係る指令サーバ特定装置の概要を示す構成図である。図８に示す例では、指令サーバ特定装置１０ａは、マルウェア実行環境部１１ｄ、識別情報ＤＢ１２、実行トレースＤＢ１３、実行時状態ＤＢ１７、実行時状態記録ファイル１８、未実行領域解析部１５ａ、および指令サーバ特定部１６を有する。
【００６８】
また、マルウェア実行環境部１１ｄは、マルウェア１１ａ、ゲストＯＳ１１ｂ、仮想マシンモニタ１１ｅを有し、マルウェア実行環境部１１と同様に、マルウェア１１ａを実際に動作させながら解析する。
【００６９】
仮想マシンモニタ１１ｅは、データ伝搬追跡部１１１、命令監視部１１２、実行時状態記録部１１３を有し、仮想マシンモニタ１１ｃと同様に、ゲストＯＳ１１ｂ上で動作する仮想マシンが実行するマルウェア１１ａの実行時の動作を監視する。
【００７０】
ここで、仮想マシンモニタ１１ｅが有する実行時状態記録部１１３は、マルウェア実行時における仮想マシンのスナップショットを記録する。例えば、実行時状態記録部１１３は、マルウェア１１ａを実行する仮想マシンのスナップショットを取得し、取得したスナップショットを実行時状態記録ファイル１８として記録するとともに、スナップショットの取得場所を実行時状態ＤＢ１７に記録する。
【００７１】
なお、実行時状態記録部１１３がスナップショットを取得する処理は、仮想マシンモニタ１１ｅが一般的に具備するスナップショット機能を利用することで取得できる。ただし、データを追跡するためにデータ伝搬追跡部１１１がデータに付与したタグに関わる情報を記録する機能は一般的には存在しない。このため、実行時状態記録部１１３は、スナップショット取得時に、タグが保存されているメモリ領域内のデータ全てを実行時状態記録ファイル１８にスナップショットと合わせて保存する。一般に、スナップショットは、メモリ内容を含む仮想マシンの全ての状態の差分を記録できるので、メモリダンプを用いて仮想マシンの状態を記録するよりもよりも、多くの情報を取得できる。なお、以下の説明では、データ伝搬追跡部１１１が取得した仮想マシンのスナップショットと、タグが保存されているメモリ領域内のデータとを合わせてスナップショットと記載する。
【００７２】
実行時状態ＤＢ１７は、実行時状態記録部１１３が取得したスナップショットを取得した場所を記録する。例えば、図９は、第２の実施の形態にかかる実行時状態ＤＢが保持する情報の一例を示す図である。図９に示すように、実行時状態ＤＢ１７は、スナップショットのＩＤと、スナップショットを取得した際に実行される命令に対応する実行ログの実行ログＩＤと、ファイル名とを対応付けて記憶する。ここで、ファイル名とは、実行時状態記録ファイル１８に記録されたスナップショットのバイナリデータに付与される名称であり、例えば、スナップショットの取得日時等である。
【００７３】
図８に戻り、実行時状態記録ファイル１８とは、実行時状態記録部１１３が取得したスナップショットのバイナリデータである。なお、実行時状態記録ファイル１８は、指令サーバ特定装置１０ａが有する所定の記憶装置もしくは外部装置が有する所定の記憶装置に記録される。
【００７４】
未実行領域解析部１５ａは、マルウェア１１ａが実行していない未実行領域で呼びされるＡＰＩ、システムコール、および制御構造を動的解析する。具体的には、未実行領域解析部１５ａは、実行トレースＤＢ１３から受信データが分岐先の決定に影響を与えた分岐命令を取得し、各分岐先が実行されたか否かを判定する。
【００７５】
そして、未実行領域解析部１５ａは、未実行の分岐先が存在した場合、実行時状態ＤＢ１７に記録されたスナップショットを用いて、分岐命令実行時の状態を復元し、復元した箇所から未実行の分岐先を強制的に実行し、未実行の分岐先で呼びされるＡＰＩ、システムコール、および制御構造を動的解析する。例えば、未実行領域解析部１５ａは、復元した箇所から、単純に命令ポインタレジスタを強制的に分岐先のアドレスに書き換える強制実行か、分岐条件をシンボル化して実行するシンボリック実行によって未実行の分岐先を強制的に実行する。そして、未実行領域解析部１５ａは、分岐先で呼び出されるＡＰＩやシステムコール、および制御構造を動的に解析する。
【００７６】
なお、いずれの場合も強制的な実行であるため、コンテキスト情報が一致せず、途中で解析対象プログラムがエラー終了してしまう可能性がある。このため、未実行領域解析部１５ａは、エラー終了した場合、それまでに取得されたＡＰＩ呼び出し、システムコール、および制御構造に関する情報を指令サーバ特定部１６に通達する。なお、未実行領域解析部１５ａは、コンテキスト情報を一致させるため、シンボリック実行によって得た入力値に対する制約条件に基づいて入力データを生成し、マルウェアを解析し直してもよい。
【００７７】
上述した処理の結果、指令サーバ特定部１６は、未実行領域解析部１５ａが動的解析した未実行領域で呼び出されるＡＰＩ、システムコール、および制御構造に基づいて、指令サーバの特定を行う。例えば、指令サーバ特定部１６は、未実行領域で所定のＡＰＩやシステムコール、若しくは所定のＡＰＩ列等が呼び出されている場合は、処理対象となる分岐命令に影響を与えたデータの送信元を指令サーバと判定する。
【００７８】
［未実行領域解析部による処理］
次に、図１０を用いて、第２の実施形態に係る指令サーバ特定装置１０ａによる処理を説明する。図１０は、第２の実施の形態に係る指令サーバ特定装置による未実行領域を動的解析する処理の流れを示すフローチャートである。図１０に示すように、未実行領域解析部１５ａは、実行トレースＤＢ１３から受信データが分岐先の決定に影響を与えた分岐命令を取得する（ステップＳ３０１）。続いて、未実行領域解析部１５ａは、取得した分岐命令をすべて確認したか否かを判定し（ステップＳ３０２）、確認していない場合は（ステップＳ３０２：Ｎｏ）、全分岐先が実行されたか否かを判定する（ステップＳ３０３）。
【００７９】
ここで、未実行領域解析部１５ａは、全分岐先が実行されていない場合（ステップＳ３０３：Ｎｏ）、すなわち、未実行領域が存在する場合は、以下の処理を実行する。まず、未実行領域解析部１５ａは、実行時状態ＤＢ１７を参照し、処理対象となる分岐命令実行時のスナップショットを特定し、実行時状態記録ファイル１８から特定したスナップショットを取得して復元する（ステップＳ３０４）。そして、未実行領域解析部１５ａは、未実行領域を強制的に実行して動的解析する（ステップＳ３０５）。その後、未実行領域解析部１５ａは、特定した制御構造と未実行領域で呼び出されるＡＰＩを指令サーバ特定部１６に通知し（ステップＳ３０６）、再度ステップＳ３０２を実行する。一方、未実行領域解析部１５ａは、全分岐先が実行されていた場合は（ステップＳ３０３：Ｙｅｓ）、再度、ステップＳ３０２を実行する。そして、未実行領域解析部１５ａは、取得した分岐命令をすべて確認した場合は（ステップＳ３０２：Ｙｅｓ）、処理を終了する。
【００８０】
[第２の実施の形態の効果]
上述したように、指令サーバ特定装置１０ａは、マルウェア１１ａを実行した仮想マシンのスナップショットを記録する。そして、指令サーバ特定装置１０ａは、スナップショットを用いて、分岐命令の後にマルウェア１１ａが実行しなかった分岐先を強制的に実行させ、分岐先の命令に関する情報を動的解析する。
【００８１】
すなわち、指令サーバ特定装置１０ａは、仮想マシンのスナップショットを用いて、マルウェア１１ａが実行しなかった分岐先を動的解析するので、メモリダンプの内容だけでは特定できない指令サーバを特定することができる場合がある。この結果、指令サーバ特定装置１０ａは、指令サーバを精度良く特定することができる。なお、指令サーバ特定装置１０ａは、仮想マシンのスナップショットを用いるため、指令サーバ特定装置１０と比較して、各種データベースを保持するための記憶容量や解析の処理負担が増大する。
【００８２】
［他の実施の形態］
これまで第１の実施の形態および第２の実施の形態について説明したが、開示する発明は上述した実施の形態以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では他の実施の形態について説明する。
【００８３】
［メモリダンプの保持方法について］
上述した指令サーバ特定装置１０は、取得したメモリダンプをメモリダンプＤＢ１４にＤＢ形式で保存した。しかしながら、実施の形態は、これに限定されるものではない。例えば、指令サーバ特定装置１０は、取得したメモリダンプをバイナリ形式のファイルで保存するとともに、メモリダンプのＩＤやメモリダンプを取得した日時をファイル名に設定してもよい。すなわち、指令サーバ特定装置１０は、メモリダンプを任意の方式で記録することができる。
【００８４】
［テイント解析について］
上述した指令サーバ特定装置１０、１０ａは、テイント解析を用いて、データの伝搬を追跡した。ここで、一般にデータ伝搬の追跡に利用されるテイント解析技術には、タグの伝搬途切れという問題が存在する。この問題を緩和するため、指令サーバ特定装置１０、１０ａは、関数の引数から戻り値にタグを伝搬させる手法や、特定のタグを読み込んだ関数では関数の戻り値および関数内での書き込み内容に対してタグを伝搬させる手法といった強制伝搬の仕組みを用いてもよい。
【００８５】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８６】
一例を挙げると、データ伝搬追跡部１１１と命令監視部１１２とを一つの部として統合してもよく、仮想マシンモニタ１１ｃを仮想マインと仮想マシンを監視する監視部とに分離してもよい。また、識別情報ＤＢ１２、実行トレースＤＢ１３、メモリダンプＤＢ１４は、指令サーバ特定装置１０の外部装置が保持し、指令サーバ特定装置１０とネットワーク経由で接続するようにしてもよい。また、未実行領域解析部１５と指令サーバ特定部１６とを別の装置がそれぞれ有し、ネットワークに接続されて協働することで、上記した指令サーバ特定装置１０の機能を実現するようにしてもよい。
【００８７】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８８】
また、本実施の形態において説明した各処理のうち、自動的に行なわれるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８９】
［プログラム］
また、上記実施形態において説明した指令サーバ特定装置１０、１０ａが実行する処理について、コンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第１の実施の形態に係る指令サーバ特定装置１０が実行する処理について、コンピュータが実行可能な言語で記述した特定プログラムを作成することもできる。この場合、コンピュータが特定プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる特定プログラムをコンピュータで読み取り可能な記録媒体に記録して、この記録媒体に記録され特定プログラムをコンピュータに読み込ませて実行することにより上記第１の実施の形態と同様の処理を実現してもよい。以下に、図１に示した指令サーバ特定装置１０と同様の機能を実現する特定プログラムを実行するコンピュータの一例を説明する。
【００９０】
図１１は、特定プログラムを実行するコンピュータを示す図である。図１１に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【００９１】
メモリ１０１０は、図１１に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図１１に例示するように、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、図１１に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。シリアルポートインタフェース１０５０は、図１１に例示するように、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、図１１に例示するように、例えばディスプレイ１１３０に接続される。
【００９２】
ここで、図１１に例示するように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記の特定プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。
【００９３】
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、追跡ステップ、解析ステップ、特定ステップを実行する。
【００９４】
なお、特定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、特定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００９５】
これまでいくつかの実施の形態を説明したが、本願が開示する技術はこれらの実施の形態に限定されるものではない。すなわち、これらの実施の形態は、その他の様々な形態で実施されることが可能であり、種々の省略、置き換え、変更を行うことができる。
【００９６】
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９７】
１０、１０ａ  指令サーバ特定装置
１１、１１ｄ  マルウェア実行環境部
１１ａ  マルウェア
１１ｂ  ゲストＯＳ
１１ｃ、１１ｅ  仮想マシンモニタ
１１０  メモリダンプ取得部
１１１  データ伝搬追跡部
１１２  命令監視部
１１３  実行時状態記録部
１２  識別情報ＤＢ
１３  実行トレースＤＢ
１４  メモリダンプＤＢ
１５、１５ａ  未実行領域解析部
１６  指令サーバ特定部
１７  実行時状態ＤＢ
１８  実行時状態記録ファイル
【図１】
2016093182.tif 000003
【図２】
2016093182.tif 000004
【図３】
2016093182.tif 000005
【図４】
2016093182.tif 000006
【図５】
2016093182.tif 000007
【図６】
2016093182.tif 000008
【図７】
2016093182.tif 000009
【図８】
2016093182.tif 000010
【図９】
2016093182.tif 000011
【図１０】
2016093182.tif 000012
【図１１】
2016093182.tif 000013
【国際調査報告】
2016093182.tif 000014
2016093182.tif 000015