以下、本発明の実施の形態を図面に基づいて説明する。本実施例に係る動態解析は、プログラムの動作を検証する動作シミュレーションに相当し、コンピュータウイルス、ワーム等のマルウエアを解析する。
本実施例に係る動態解析は、以下のことを前提とする。
・特定の観測プロセスにのみ適用されるサンドボックス環境において行われるシミュレーションであり、システム全体の速度を加減速するものではない。
・外部I/Oは、非同期のTCP/IP通信であり、基本的に速度を可変にできないI/Oである。
図1は、本実施例における動態解析システムのネットワーク構成例を示す図である。図1において、動態解析システム1000は、制御端末3と、動態サーバ100と、種々のホスト51、52等と、ルータ6とを有する。動態解析サーバ100と、種々のホスト51、52等と、ルータ6は、ネットワーク4に接続される。また、図示しない外部ネットワークへは、ルータ6を介して接続される。
制御端末3は、回線2によって動態解析サーバ100に接続され、動態解析サーバ100を制御する。制御端末3は、解析のターゲットプログラムであるマルウエア9の動態解析を動態解析サーバ100で実行するために、ユーザによって使用される。
動態解析サーバ100は、情報処理装置であり、OS(Operating System)カーネル7、上にサンドボックス環境8を備える。サンドボックス環境8において、マルウエア9を動作させ、動態解析が行われる。
ホスト51、52等は、動態解析サーバ100が属するネットワーク4に存在するDNS(Domain Name System)サーバ、Webサーバ、IRC(Internet Relay Chat)サーバ(C&Cサーバ)等である。本実施例において、ホスト51のIPアドレスは「192.163.0.11」とし、ホスト52のIPアドレスは「192.163.0.12」とする。
ルータ6は、外部ネットワークと接続し、異なるネットワークへの中継を行う通信装置である。ルータ6は、データの中継先の宛先サーバが存在しない場合、通信エラーをネットワーク4の送信元に返す。
動態解析サーバ100は、図2に示すようなハードウェア構成を有する。図2は、動態解析サーバのハードウェア構成を示す図である。図2において、動態解析サーバ100は、コンピュータによって制御される端末であって、CPU(Central Processing Unit)11と、主記憶装置12と、補助記憶装置13と、入力装置14と、表示装置15と、通信I/F(インタフェース)17と、ドライブ装置18とを有し、バスBに接続される。
CPU11は、主記憶装置12に格納されたプログラムに従って動態解析サーバ100を制御する。主記憶装置12には、RAM(Random Access Memory)、ROM(Read Only Memory)等が用いられ、CPU11にて実行されるプログラム、CPU11での処理に必要なデータ、CPU11での処理にて得られたデータ等を記憶又は一時保存する。
補助記憶装置13には、HDD(Hard Disk Drive)等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置13に格納されているプログラムの一部が主記憶装置12にロードされ、CPU11に実行されることによって、各種処理が実現される。記憶部130は、主記憶装置12及び/又は補助記憶装置13を有する。
入力装置14は、マウス、キーボード等を有し、ユーザが動態解析サーバによる処理に必要な各種情報を入力するために用いられる。表示装置15は、CPU11の制御のもとに必要な各種情報を表示する。通信I/F17は、有線又は無線などのネットワークを通じて通信を行う。通信I/F17による通信は無線又は有線に限定されるものではない。
動態解析サーバ100によって行われる処理を実現するプログラムは、例えば、CD−ROM(Compact Disc Read-Only Memory)等の記憶媒体19によって動態解析サーバに提供される。
ドライブ装置18は、ドライブ装置18にセットされた記憶媒体19(例えば、CD−ROM等)と動態解析サーバ100とのインタフェースを行う。
また、記憶媒体19に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体19に格納されたプログラムは、ドライブ装置18を介して動態解析サーバ100にインストールされる。インストールされたプログラムは、動態解析サーバ100により実行可能となる。
尚、プログラムを格納する媒体としてCD−ROMに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、CD−ROMの他に、DVDディスク、USBメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
図3は、動態解析サーバの機能構成例を示す図である。図3において、動態解析サーバ100は、主な処理部として、OSカーネル7kと、サンドボックス環境8と、マルウエア9と、API(Application Program Interface)制御部41と、計時調整指示部61と、サンドボックス実行ランチャー91とを有する。また、記憶部130には、スチールAPI選択データベース(DB)31が記憶されている。
サンドボックス実行ランチャー91は、ユーザがマルウエア9の動態解析に係る操作を容易に行うためのアプリケーションである。
API制御部41は、更に、通信宛先管理部42を有する。通信宛先管理部42は、マルウエア9からの通信APIの呼び出しに対して、通信宛先がネットワーク4上の存在有無に応じた処理を行う。また、通信宛先管理部42は、記憶部130内の通信宛先管理部42に割り当てられた記憶領域に通信管理テーブル42aとノード管理テーブル42bとを有する。
通信管理テーブル42aは、ファイルディスクリプタ(fd)毎に通信状態を管理するテーブルである。ノード管理テーブル42bは、ネットワーク4に実在するホストのIPアドレスを管理するテーブルである。通信宛先管理部42は、通信管理テーブル42aを用いて、通信状態を管理した後、ノード管理テーブル42bを参照して、通信宛先がネットワーク4上に存在するか否かを判断する。
通信宛先がネットワーク4に存在しない場合、通信宛先管理部42は、通信を抑止し、ルータ6に代わってマルウエア9へ通信エラーを返す処理を行う。この処理によって、マルウエア9による探索パケットの送信に対して、存在しないホスト(以下、「ノード」とも言う)への探索時間を省略するため、通信が処理の多くを示すマルウエア9の動態解析に要する時間を短縮することができる。
通信宛先がネットワーク4に存在する場合、通信宛先管理部42は、通信管理テーブル42aを参照して通信中を判断した場合、通信中通知をサンドボックス環境8に対して行って、運針を通常に戻し、ホスト51、52等の通信宛先からのレスポンスを受信できるようにする。
API制御部41は、マルウエア9のAPIの呼び出しに応じて、スチールAPI選択DB31を参照して、OSカーネル7kのAPIとして振舞うか、OSカーネル7kのAPIを呼び出すかを制御する。
マルウエア9等のソフトウェアは、通信API711、時計API721、その他のAPI731を呼び出すことで動作している。一般的なOSの時間関連のAPI(時計API)には、主に2種類のタイマに関するAPIが存在する。
・ハードウェアタイマに連動した時計機能へのAPI(時刻の取得)
例えば、gettimeofday()等である。
・タイマ割り込みに関するAPI(一定時間毎の間欠処理)
例えば、poll()、select()、signal()等である。
マルウエア9のAPIの呼び出しが、通信API、計時API以外のその他のAPIである場合、API制御部41は、サンドボックス環境8を介して、OSカーネル7kのAPIを呼び出す。一方、時計APIの場合、API制御部41は、サンドボックス環境8が提供する時計API制御部80を呼び出す。
サンドボックス環境8は、他のプログラムやデータなどを操作できない保護された領域を提供する。サンドボックス環境8により、マルウエア9を動作させたとしても、マルウエア9による影響が及ばないように動態解析システム1000全体を保護することができる。
サンドボックス環境8は、OS上の隔離環境の1プロセスとして動作する。、主に、計時API制御部80と、時計間隔調整部82とを提供する。計時API制御部80と、時計間隔調整部82とは、時間に係る処理に関して、あたかもOSカーネル7kのAPIが呼び出されたかのように処理を行い、その結果をAPI制御部41を介してマルウエア9へ提供する処理部である。
計時API制御部80は、マルウエア9によるOSカーネル7kの計時API721の呼び出しに対して、調整された計時間隔に基づいて、OSカーネル7kに代わって、時刻関連の処理を実行する。
計時API制御部80は、タイマ割込API811と、タイマ割込API制御部812と、時刻取得API821と、時刻取得API制御部822とを有する。
タイマ割込API811は、マルウエア9の計時API721の呼び出しに応じて、API制御部41によって、タイマ割り込みの場合に呼び出されるインタフェースである。タイマ割込API制御部812は、タイマ割込API811を介して実行される処理部であり、計時間隔調整部82によって調整された計時間隔に基づいた時刻でタイマ割込を行う。
時刻取得API821は、マルウエア9の計時API721の呼び出しに応じて、API制御部41によって、時刻取得の場合に呼び出されるインタフェースである。時刻取得API制御部822は、時刻取得API821を介して実行される処理部であり、計時間隔調整部82によって調整された計時間隔に基づいた時刻を提供する。
時計間隔調整部82は、時計調整指示部61による時刻の運針の倍率を示す計時指示に基づいて時計間隔を調整する。時計間隔調整部82は、時計調整指示部61から指示された運針の倍率をタイマ管理テーブル43に記憶して管理し、タイマ管理テーブル43を参照することによって、通常時間をタイマ倍率を用いて変換した時間を計時API制御部に提供する。
タイマ管理テーブル43は、計時調整指示部61によって指示された運針の倍率を管理するテーブルであり、記憶部130内の時計間隔調整部82に割り当てられた記憶領域に記憶される。
計時調整指示部61は、OSカーネル7kの計時APIとサンドボックス環境8の計時とを比較してタイマの運針を速くするか、遅くするかを計時間隔調整部82に指示する。この仕組みによりタイマの運針が調整される。計時調整指示部61は、動態解析の実行時に、タイマをプリセットする。
計時調整指示部61が計時を通常時間より遅く指示するとは、時刻の運針を遅くすることを意味する。時刻の運針が負(−)の方向に設定される。例えば、「−1」は、通常時の運針に対して3/4倍の速度への調整、「−2」は、通常時の運針に対して1/2倍の速度への調整を示し、「−4」は、通常時の運針に対して1/4倍の速度への調整等に、予め定められる。
また、計時調整指示部61が計時を通常時間より速く指示するとは、時刻の運針を早くすることを意味する。時刻の運針が正(+)の方向に設定される。例えば、「+1」は、通常時の運針に対して3/2倍の速度への調整、「+2」は、通常時の運針に対して2倍の速度への調整を示し、「+4」は、通常時の運針に対して9/4倍の速度への調整等に、予め定められる。
OSカーネル7kは、プログラムに提供される種々のAPIとして、通信API711、計時API721、及びその他のAPI731と、夫々APIに対応する通信処理部712、計時処理部722、その他の処理部732を有する。本実施例では、API制御部41を介して、種々のAPIがマルウエア9に提供される。
通信API711は、マルウエア9からの呼び出しにより、ネットワーク4上のホスト51、52等や、ルータ6を介した外部装置との通信を行うためのインタフェースに相当する。通信処理部712は、通信API711を介してマルウエア9からホスト51、52等の外部装置への通信を行う。
計時API721は、マルウエア9からの呼び出しにより、OSの時計を変更するためのインタフェースに相当する。時計処理部722は、計時API721を介してマルウエア9から時刻設定等に応じた処理を行う。
その他のAPI731は、マルウエア9とその他の処理部732とのインタフェースに相当する。その他の処理部732は、その他のAPI731を介してマルウエア9からの要求に応じた処理を行う。
上述した動態解析サーバ100の機能構成において、マルウエア9が通信系のAPIを呼び出した場合について説明する。図4は、通信系のAPIを呼び出した場合を説明するための図である。図4では、図3の全体の機能構成のうち説明に必要な構成部分のみを示す。
図4において、マルウエア9が動作開始後、通信APIを呼び出すと、API制御部41の通信宛先管理部42が、通信宛先管理部42は、通信管理テーブル42aを用いて、通信状態を管理した後、ノード管理テーブル42bを参照して、通信宛先のノードが実在すると判断した場合、通信宛先管理部42は、OSカーネル7kの通信API711を呼び出して、通信処理部712による通信を行わせる。
マルウエア9が呼び出す通信APIは、send()、recv()、sendto()、recvfrom()、 bind()、connect()等である。
通信に関するfdが、例えば、
bind()
connect()
の場合、指定されたアドレスのエンドポイントに対応するfdが使用される。通信宛先管理部42は、通信宛先毎に通信管理テーブル42aで管理されているfdが使用される場合、計時間隔調整部82に時刻を通常の運針に戻す通常運針指示を行う。
一方、通信宛先のノードが実在しないと判断した場合、OSカーネル7kの通信API711を呼ぶことなく、ルータ6に代わって、マルウエア9へ通信エラーを通知する。このように、マルウエア9によるAPI呼び出しに対して通信エラーで即時復帰させることにより、探索捜査に掛かる時間を削減でき、高速に処理を行うことができる。
次に、マルウエア9が計時関係のAPIを呼び出した場合について説明する。図5は、計時関係のAPIを呼び出した場合を説明するための図である。図5では、図3の全体の機能構成のうち説明に必要な構成部分のみを示す。
図5において、マルウエア9が動作開始後、計時APIを呼び出しに対して、API制御部41は、スチールAPI選択DB31を参照して、APIが計時調整を行う対象の処理であると判断した場合、サンドボックス環境8の計時API制御部80を呼び出す。
計時API制御部80において、タイマ割込API811が呼び出された場合、タイマ割込API制御部812は、計時間隔調整部82から、通常時間より遅く又は速くなるように調整された計時間隔に基づく時間(調整時間と言う)を取得して、取得した調整時間でタイマ割り込み行う。マルウエア9は、調整時間を通常時間として扱って、調整時間に基づいてタイマ割り込みで処理を行う。
また、計時API制御部80において、時刻取得API821が呼び出された場合、時刻取得API制御部822は、計時間隔調整部82から、通常時間より遅く又は速くなるように調整された計時間隔に基づく調整時刻を取得して、取得した調整時刻をマルウエア9に通知する。マルウエア9は、調整時間を通常時間として取得する。
図6は、スチールAPI選択DBのデータ構成例を示す図である。図6において、スチールAPI選択DB31は、API名称、API種類、引数等の項目を有する。
API名称は、マルウエア9等のプログラムから呼び出し可能なAPIの名称を示す。API種類は、API毎に通信系のAPIか、時計関係のAPIかを示す。通信系のAPIの場合、API種類は「1」を示す。時計関係のAPIの場合、API種類は「0」を示す。引数は、API毎に定義された引数を示す。
図7は、各種テーブルのデータ構成例を示す図である。図7において、通信管理テーブル42aは、ファイルディスクリプタ(fd)、通信状態等の項目を有する。ファイルディスクリプタ(fd)は、ファイルディスクリプタを識別する識別子を示す。通信状態は、ファイルディスクリプタ毎に通信状態を示す。通信状態「1」は通信中を示し、「0」は未通信を示す。
ノード管理テーブル42bは、実在するノードのIPアドレスを管理するテーブルであり、実在ノードのIP等の項目を有する。この例では、図1に対応させて、ホスト51のIPアドレス「192.163.0.11」と「192.163.0.12」とが記憶されている。
タイマ管理テーブル43は、fd毎に時刻の運針を記憶するテーブルであり、ファイルディスクリプタ(fd)、時刻の運針速度(倍率)等の項目を有する。この例では、fd「4」のみが通常の運針速度の「1」(1倍)を示し、fd「3」では、時計を通常時間に対して+2方向(2倍)に早くすることを示し、fd「5」では、時計を通常時間に対して−2方向(1/2倍)に遅くすることを示している。
次に、動態解析サーバ100における動態解析処理について説明する。図8及び図9は、動態解析処理を説明するための図である。図8及び図9で説明される動態解析処理は、動態解析サーバ100のCPU11が動態解析プログラムを実行することにより実現される。
図8において、サンドボックス実行ランチャー91からの指示に応じて、実行するマルウエア9がサンドボックス環境8に読み込まれる(ステップS11)。
API制御部41は、マルウエア9(プログラム)から次に実行する命令が読み込むと(ステップS12)、スチールAPI選択DB31を検索して、API種別31aを取得する(ステップS13)。取得したAPI種別31aは、記憶部130の作業領域に一時的に格納される。
計時調整指示部61が計時間隔調整部42に実行速度を指示すると(ステップS14)、計時間隔調整部42は、基準クロックに対する実行時間の倍率を計算してタイマ管理テーブル43に設定する(ステップS15)。
そして、API制御部41は、API種別31aに基づいて、実行するAPIは、通信系のAPI呼び出しか否かを判断する(ステップS16)。通信系のAPIの場合、API制御部41は、図9のステップS20へと進む。一方、通信系のAPIでない場合、API制御部41は、更に、実行するAPIは計時関係のAPI呼び出しか否かを判断する(ステップS17)。計時関係のAPIである場合、API制御部41は、図9のステップS25へと進む。
一方、計時関係のAPIでない場合、API制御部41は、実行したAPIと実行結果とをログDB32に記録する(ステップS18)。ログDB32は、記憶部130に記憶され、プログラム(この例ではマルウエア9)のAPI呼び出し毎にAPIを特定するAPI名と、API呼び出しによって実行された処理の結果とが記録される。
その後、API制御部41は、マルウエア9は動作を終了したか否かを判断する(ステップS19)。動作を終了していない場合、API制御部41は、ステップS12へと戻り、上述同様の処理を行う。
図9にて、図8のステップS17において、実行するAPIが通信系のAPI呼び出しであると判断した場合、API制御部41の通信宛先管理部42は、通信管理テーブル42aの該当するfdに対して状態を通信中に設置する(ステップS20)。そして、通信宛先管理部42は、fdに該当する宛先がノード管理テーブル42bに存在するか否かを判断する(ステップS21)。
fdに該当する宛先が存在しない場合、通信宛先管理部42は、宛先アドレスに該当するノードが存在しないため、実際に通信を行わずAPIは正常復帰させ(ステップS21−2)、API制御部41は、図8のステップS12へと戻り、上述同様の処理を実行する。
fdに該当する宛先が存在する場合、通信宛先管理部42は、更に、タイマ割り込みが使用中であるか否かを判断する(ステップS22)。タイマ割り込みが使用中である場合、通信中の時刻の運針を通常の基準クロック(1倍)に戻す通常運針指示を計時間隔調整部82に行って(ステップS22−2)、ステップS24へと進む。
ここでの通常運針指示では、割り込み設定時刻までの経過時間が通常の基準クロック(即ち、1倍)にリセットすることが指示される。計時間隔が2倍速で動態解析が行われていた場合、計時間隔が1倍速にリセットされることにより、割り込み設定時刻が先延ばしされることになる。レスポンスを正常に受信するためである。通信が正常に終了した後は、計時調整指示部61が指定した計時間隔でタイマ割り込みが行われる。
一方、タイマ割り込みが使用中でない場合、通信宛先管理部42は、通信中の時刻の運針を通常に戻す通常運針指示を計時間隔調整部82に行って、時刻の運針を通常の基準クロック(1倍)に合わせる(ステップS23)。ここでの通常運針指示では、タイマ割り込みがないため、単に、計時間隔が1倍速にリセットすることが指示される。
通信宛先管理部42は、OSカーネル7kの通信API711を呼び出して(ステップS24)、図8のステップS12へと戻り、上述同様の処理を繰り返す。
図8のステップS17において、実行するAPIが計時関係のAPI呼び出しであると判断した場合、図9にて、API制御部41は、時計管理を行い(ステップS25)、API種別31aを参照して、タイマ割り込みAPIか否かを判断する(ステップS26)。
タイマ割り込みAPIでない場合、API制御部41は、時計API制御部80の時刻取得API822を呼び出す。時計API制御部80の時刻取得API制御部822は、時刻の運針に合わせたタイマ割り込み時間を計時間隔調整部82に問い合わせして(ステップS27)、計時間隔調整部82から取得した時刻を時刻取得API821に通知する(ステップS28)。その後、API制御部41は、図8のステップS12へ戻り、上述同様の処理を繰り返す。
一方、タイマ割り込みAPIの場合、API制御部41は、時刻の運針に合わせたタイマ割り込み時間を計時間隔調整部82に設定して(ステップS27−2)、計時間隔調整部82は割り込み設定完了をタイマ割込API811に通知する(ステップS28−2)。その後、API制御部41は、図8のステップS12へ戻り、上述同様の処理を繰り返す。
以下に、計時を通常時間より早く又は遅く調整した夫々の時計調整の場合について説明する。先ず、計時を通常時間の2倍に早くした場合、即ち、時刻の運針を2倍速くするプリセットを行った場合について説明する。
図10は、2倍速の場合を説明するための図である。図10において、時計調整指示部61が、時計を通常時間の2倍にする計時指示を計時間隔調整部82に指示した場合の、(a)ソフトウェア割込処理、(b)時刻取得処理、及び(c)通信API処理の概要を示す。計時間隔調整部82は、時計調整指示部61からの2倍速の計時指示に応じて、割込間隔及び割込時刻を変換する。
図11は、OSカーネルのAPIの呼び出し例を示す図である。
(a)ソフトウェア割込APIの例として、sleep(unsigned int seconds)でAPI呼び出しが行われる。引数secondsで秒数が指定される。
(b)時刻取得APIの例として、time(time_t *tloc)でAPI呼び出しが行われる。引数tlocによって秒数が戻り値として設定される。
(c)通信APIの例として、bind(int socket, const struct sockaddr *address, socklen_t addr_len)でAPI呼び出しが行われる。引数socketでソケットfdが指定され、sockaddr構造体へのポインタであるaddressによってアドレスが指定される。また、引数addr_lenでアドレス長が示される。
(a)ソフトウェア割込処理では、マルウエア9が上述したようなソフトウェア割込APIを呼び出す。マルウエア9によってタイマ割込API811が呼び出され、タイマ割込制御部812に10秒毎の割込が指示される。
10秒毎の割込指示に対して、時計API制御部80のタイマ割込制御部812は、時計間隔調整部82に対してOSカーネル7kへの10秒毎の割込指示を要求する。時計間隔調整部82は、時計調整指示部61による時計の運針を2倍速にする指示に基づいて、10秒の1/2の間隔である5秒で割り込みを行うようOSカーネル7kへ要求する。
OSカーネル7kからの5秒毎の割り込みは、時計間隔調整部82を介してタイマ割込API制御部812に通知され、タイマ割込API制御部812は、タイマ割込API811を介してマルウエア9に割り込みを発生させる。
(b)時刻取得処理では、マルウエア9が上述したような時刻取得APIを呼び出す。マルウエア9によって時刻取得API821が呼び出されることにより、時刻取得API制御部822は、時計間隔調整部82を介してOSカーネル7kから時刻を取得する。OSカーネル7kから通知される時刻は通常時刻である。
通常時刻は、計時間隔調整部82によって時計調整指示部61が指定した時計の運針(2倍)に換算され、時刻取得API制御部822に通知される。時刻取得API制御部822に通知された時刻は、時刻取得API821の呼び出しに対する戻り値としてマルウエア9へ通知される。マルウエア9は、2倍速で換算された時刻を取得する。
(c)通信API処理では、マルウエア9が上述したような通信APIを呼び出す。API制御部41の通信宛先管理部42は、サンドボックス環境8に対して通常運針に戻す通常運針指示を行う。
サンドボックス8に宛先アドレス依存処理部83を備え、宛先アドレス依存処理部83で通常運針指示を受けるようにしても良い。宛先アドレス依存処理部83は、通信APIで指定されたfdに関して通信中は通常運針に戻す指示を時計間隔調整部82に行う。また、宛先アドレス依存処理部83は、OSカーネル7kの通信API711を呼び出す。宛先アドレス依存処理部83は、fd毎に通信中の管理を行い、レスポンスを正常に受信し、マルウエア9へ通信API呼び出しに対して応答できるようにする。
マルウエア9からの通信以外のAPIの呼び出しでは、サンドボックス環境8を介してOSカーネル7kが提供するAPIが直接呼び出される。
図12は、2倍速の場合のソフトウェア割込処理を説明するためのフローチャート図である。図12において、API制御部41は、マルウエア9からpoll API呼び出しで10秒毎の割り込みを指示した割込指示を受信する(ステップS111)。
API制御部41では、スチールAPI選択DB31(図6)よりAPIの種類が時刻であることから、通信APIの呼び出しではないと判断し、API制御部41の通信先管理部42が、通信管理テーブル42aを参照して通信系のAPIでfdが実行中か否かを判断する(ステップS112)。
通信系のAPIが実行中でない場合(ステップS112のNO)、通信先管理部42は、poll APIに対応する時計API制御部80のタイマ割込API811を呼び出す。タイマ割込API制御部812は、マルウエア9の割込指示から割り込み間隔(例えば、10秒)を取得して、時計間隔調整部82に通知する(ステップS113)。
時計間隔調整部82は、時計調整指示部61から指示された時計の運針(2倍)に変換した割り込み間隔(5秒)をOSカーネル7kに設定する(ステップS114)。その後、OSカーネル7kからのソフトウェア割り込みの通知がタイマ割込API制御部812に通知する(ステップS115)。ソフトウェア割込処理を終了する。
一方、API制御部41において、通信系のAPIが実行中であると判断された場合(ステップS112のYES)、通信先管理部42は、ノード管理テーブル42bを参照して、poll APIで指定される通信相手先(ノード)が実在するか否かをチェックする(ステップS112−2)。
実在した場合(ステップS112−2のYES)、通信先管理部42は、通常運針指示を宛先アドレス依存処理部83に通知する。宛先アドレス依存処理部83は、割り込み間隔を通常の運針に戻して、割り込み間隔(10秒)をOSカーネル7kに設定する(ステップS114−2)。その後、OSカーネル7kからのソフトウェア割り込みの通知がタイマ割込API制御部812に通知する(ステップS115)。ソフトウェア割込処理を終了する。
図13は、2倍速の場合の時刻取得処理を説明するためのフローチャート図である。図13において、API制御部41は、マルウエア9からgettimeofday()APIで時刻取得要求を受信する(ステップS121)。API制御部41は、gettimeofday()APIに対応する時刻取得API821を介して時刻取得API制御部822に処理を渡す。
時刻取得API821は、時刻が記憶されている時刻格納領域を時計間隔調整部82に通知する(ステップS122)。時計間隔調整部82は、OSカーネル7kから現在時刻を取得する(ステップS123)。
時計間隔調整部82は、通信系のAPIが実行中か否かを判断する(ステップS124)。通信系のAPIが実行中でない場合(ステップS124のNO)、時計間隔調整部82は、OSカーネル7kから取得した時刻を、時計間隔調整部82で設定された時計の運針(2倍)に換算して、時刻取得API制御部822に通知する(ステップS125)。時刻取得API制御部822によって、換算された時刻がマルウエア9に通知され、時刻取得処理は終了する。
一方、通信系のAPIが実行中の場合(ステップS124のYES)、時計間隔調整部82は、OSカーネル7kから取得した時刻を、そのまま時刻取得API制御部822に通知する(ステップS126)。この場合、時刻取得API制御部822によって、通常時刻がマルウエア9に通知され、時刻取得処理は終了する。
図14は、2倍速の場合の通信API処理を説明するためのフローチャート図である。図14において、マルウエア9のファイルの通信API呼び出しにより通信要求を受信すると(ステップS131)、API制御部41は、通信APIの使用を検出し、通常運針指示を宛先アドレス依存処理部83に対して行う(ステップS132)。
API制御部41の通信先管理部42は、通信APIの呼び出しで指定されたfdの宛先ノードが存在するか否かを判断する(ステップS133)。存在しない場合(ステップS133のNO)、通信先管理部42は、存在しないノードへの要求に対してAPIを正常復帰させて(ステップS133−2)、この2倍速の場合の通信API処理を終了する。
一方、存在する場合(ステップS133のYES)、通信先管理部42はfdを宛先アドレス依存処理部83に通信APIが使用する通知し、宛先アドレス依存処理部83は、時間間隔調整部82にそのfdを通知する(ステップS134)。時計間隔調整部82は、通信APIが使用するfdに関して、「通信中」は運針を通常に戻す。
また、宛先アドレス依存処理部83は、OSカーネル7kに対して通信API711を呼び出す(ステップS135)。通信相手先からレスポンスを受信すると、宛先アドレス依存処理部83は、時計間隔調整部82に通信終了とfdとを通知し、マルウエア9に対してレスポンスを通知して、通信API処理は終了する。時計間隔調整部82は、レスポンスの受信によるfdの通知によって、一時的に通常に戻していた運針を、時計調整指示部61によって指示されていた運針の倍率に戻す。
上述した通信API処理によって、「通信中」は運針が通常に戻されるため、レスポンスを正常に受信でき、通信エラーを回避することができる。また、通信の終了によって、運針の速度を時計調整指示部61によって指示されていた運針の倍率に合わせるため、マルウエア9の動態解析を効果的に行うことができる。
図15は、2倍速の場合の観測時間の比較例を示す図である。図15において、マルウエア9の動態解析を通常時間で行った場合と、本実施例における調整して時間を2倍速にした場合の観測時間の差を例示している。この例では、マルウエア9により10秒毎のソフトウェア割込処理(a)が指定されたとする。
通常時間では、時間調整を行わず通常時間をマルウエア9に提供して観測した場合のマルウエア9(収集したプログラム)の挙動例を示している。マルウエア9は、起動後凡そ10分後にC&Cサーバと接続した後、凡そ30分後に周辺を探索開始する。
マルウエア9は、多数のIPアドレスをランダムで生成し、10秒間隔でネットワーク4に送出して探索する。その後、マルウエア9は、存在するIPアドレスのホスト、サーバ等の装置からレスポンスを得る。
凡そ60分後に、マルウエア9は、探索によりレスポンスを得られた周辺装置に対して感染させて、目的の情報を収集する。凡そ24時間後、マルウエア9は、感染した周辺装置から収集して得た情報収集結果をC&Cサーバへ提供する。
この例では、凡そ10分後にマルウエア9が活動を開始した例を示しているが、マルウエア9は、感染後にすぐに活動するとは限らない。一定時間が経過しないと動作開始しない場合であっても、観測し続けなければならない。
2倍速では、本実施例を適用して通常時間を1/2に短縮してマルウエア9に提供して観測した場合のマルウエア9(収集したプログラム)の挙動例を示している。通信中以外では、時間が2倍の早さで進むため、マルウエア9は2倍速く動作する。凡そ5分後にマルウエア9は、C&Cサーバと接続した後、凡そ15分後に周辺を探索開始する。
マルウエア9は、多数のIPアドレスをランダムで生成し、5秒間隔でネットワーク4に送出して探索する。本実施例では、API制御部41の通信制御により、ネットワーク4に存在するノードに対してのみ通信が行われ、存在しないノードへの通信は抑制される。従って、マルウエア9による探索処理に要する時間を大幅に短縮することができる。マルウエア9は、存在するIPアドレスのホスト、サーバ等の装置からレスポンスを得る。
凡そ30分後、探索によりレスポンスを得られた周辺装置に対して感染させて、目的の情報を収集する。凡そ12時間後、マルウエア9は、感染した周辺装置から収集して得た情報収集結果をC&Cサーバへ提供する。
通常時間では凡そ24時間の観測に対して、本実施例における2倍速では、凡そ12hの観測となり、マルウエア9の挙動を解析する時間を大幅に短縮することが可能である。
次に、計時を通常時間の1/2倍に遅くした場合、即ち、時刻の運針を1/2倍遅くするプリセットを行った場合について説明する。
図16は、1/2倍の場合を説明するための図である。図16において、時計調整指示部61が、時計を通常時間の2倍にする計時指示を計時間隔調整部82に指示した場合の、(a)ソフトウェア割込処理、(b)時刻取得処理、及び(c)通信API処理の概要を示す。計時間隔調整部82は、時計調整指示部61からの2倍速の計時指示に応じて、割込間隔及び割込時刻を変換する。OSカーネルのAPIの呼び出し例については、上述した2倍速の場合と同様である。
(a)ソフトウェア割込処理では、マルウエア9が2倍速の場合で説明したようなソフトウェア割込APIを呼び出す。マルウエア9によってタイマ割込API811が呼び出され、タイマ割込制御部812に10秒毎の割込が指示される。
10秒毎の割込指示に対して、時計API制御部80のタイマ割込制御部812は、時計間隔調整部82に対してOSカーネル7kへの10秒毎の割込指示を要求する。時計間隔調整部82は、時計調整指示部61による時計の運針を1/2倍速にする指示に基づいて、10秒の2倍の間隔である20秒で割り込みを行うようOSカーネル7kへ要求する。
OSカーネル7kからの20秒毎の割り込みは、時計間隔調整部82を介してタイマ割込API制御部812に通知され、タイマ割込API制御部812は、タイマ割込API811を介してマルウエア9に割り込みを発生させる。
(b)時刻取得処理では、マルウエア9が2倍速の場合で説明したような時刻取得APIを呼び出す。マルウエア9によって時刻取得API821が呼び出されることにより、時刻取得API制御部822は、時計間隔調整部82を介してOSカーネル7kから時刻を取得する。OSカーネル7kから通知される時刻は通常時刻である。
通常時刻は、計時間隔調整部82によって時計調整指示部61が指定した時計の運針(1/2倍)に換算され、時刻取得API制御部822に通知される。時刻取得API制御部822に通知された時刻は、時刻取得API821の呼び出しに対する戻り値としてマルウエア9へ通知される。マルウエア9は、1/2倍速で換算された時刻を取得する。
(c)通信API処理では、マルウエア9が上述したような通信APIを呼び出す。API制御部41の通信宛先管理部42は、サンドボックス環境8に対して通常運針に戻す通常運針指示を行う。
サンドボックス8に宛先アドレス依存処理部83を備え、宛先アドレス依存処理部83で通常運針指示を受けるようにしても良い。宛先アドレス依存処理部83は、通信APIで指定されたfdに関して通信中は通常運針に戻す指示を時計間隔調整部82に行う。また、宛先アドレス依存処理部83は、OSカーネル7kの通信API711を呼び出す。宛先アドレス依存処理部83は、fd毎に通信中の管理を行い、レスポンスを正常に受信し、マルウエア9へ通信API呼び出しに対して応答できるようにする。
マルウエア9からの通信以外のAPIの呼び出しでは、2倍速の場合と同様に、サンドボックス環境8を介してOSカーネル7kが提供するAPIが直接呼び出される。
図17は、1/2倍速の場合のソフトウェア割込処理を説明するためのフローチャート図である。図17において、API制御部41は、マルウエア9からpoll API呼び出しで10秒毎の割り込みを指示した割込指示を受信する(ステップS211)。
API制御部41では、スチールAPI選択DB31(図6)よりAPIの種類が時刻であることから、通信APIの呼び出しではないと判断し、API制御部41の通信先管理部42が、通信管理テーブル42aを参照して通信系のAPIでfdが実行中か否かを判断する(ステップS212)。
通信系のAPIが実行中でない場合(ステップS212のNO)、通信先管理部42は、poll APIに対応する時計API制御部80のタイマ割込API811を呼び出す。タイマ割込API制御部812は、マルウエア9の割込指示から割り込み間隔(例えば、10秒)を取得して、時計間隔調整部82に通知する(ステップS213)。
時計間隔調整部82は、時計調整指示部61から指示された時計の運針(1/2倍)に変換した割り込み間隔(20秒)をOSカーネル7kに設定する(ステップS214)。その後、OSカーネル7kからのソフトウェア割り込みの通知がタイマ割込API制御部812に通知する(ステップS215)。ソフトウェア割込処理を終了する。
一方、API制御部41において、通信系のAPIが実行中であると判断された場合(ステップS212のYES)、通信先管理部42は、ノード管理テーブル42bを参照して、poll APIで指定される通信相手先(ノード)が実在するか否かをチェックする(ステップS122−2)。
実在した場合(ステップS212−2のYES)、通信先管理部42は、通常運針指示を宛先アドレス依存処理部83に通知する。宛先アドレス依存処理部83は、割り込み間隔を通常の運針に戻して、割り込み間隔(20秒)をOSカーネル7kに設定する(ステップS214−2)。その後、OSカーネル7kからのソフトウェア割り込みの通知がタイマ割込API制御部812に通知する(ステップS115)。ソフトウェア割込処理を終了する。
図18は、1/2倍速の場合の時刻取得処理を説明するためのフローチャート図である。図13において、API制御部41は、マルウエア9からgettimeofday()APIで時刻取得要求を受信する(ステップS221)。API制御部41は、gettimeofday()APIに対応する時刻取得API821を介して時刻取得API制御部822に処理を渡す。
時刻取得API821は、時刻が記憶されている時刻格納領域を時計間隔調整部82に通知する(ステップS222)。時計間隔調整部82は、OSカーネル7kから現在時刻を取得する(ステップS223)。
時計間隔調整部82は、通信系のAPIが実行中か否かを判断する(ステップS224)。通信系のAPIが実行中でない場合(ステップS224のNO)、時計間隔調整部82は、OSカーネル7kから取得した時刻を、時計間隔調整部82で設定された時計の運針(1/2倍)に換算して、時刻取得API制御部822に通知する(ステップS225)。時刻取得API制御部822によって、換算された時刻がマルウエア9に通知され、時刻取得処理は終了する。
一方、通信系のAPIが実行中の場合(ステップS224のYES)、時計間隔調整部82は、OSカーネル7kから取得した時刻を、そのまま時刻取得API制御部822に通知する(ステップS226)。この場合、時刻取得API制御部822によって、通常時刻がマルウエア9に通知され、時刻取得処理は終了する。
図19は、1/2倍速の場合の通信API処理を説明するためのフローチャート図である。図19において、マルウエア9のファイルの通信API呼び出しにより通信要求を受信すると(ステップS231)、API制御部41は、通信APIの使用を検出し、通常運針指示を宛先アドレス依存処理部83に対して行う(ステップS232)。
API制御部41の通信先管理部42は、通信APIの呼び出しで指定されたfdの宛先ノードが存在するか否かを判断する(ステップS233)。存在しない場合(ステップS233のNO)、通信先管理部42は、存在しないノードへの要求に対してAPIを正常復帰させて(ステップS233−2)、この1/2倍速の場合の通信API処理を終了する。
一方、存在する場合(ステップS233のYES)、通信先管理部42はfdを宛先アドレス依存処理部83に通信APIが使用する通知し、宛先アドレス依存処理部83は、時間間隔調整部82にそのfdを通知する(ステップS234)。時計間隔調整部82は、通信APIが使用するfdに関して、「通信中」は運針を通常に戻す。
また、宛先アドレス依存処理部83は、OSカーネル7kに対して通信API711を呼び出す(ステップS235)。通信相手先からレスポンスを受信すると、宛先アドレス依存処理部83は、時計間隔調整部82に通信終了とfdとを通知し、マルウエア9に対してレスポンスを通知して、通信API処理は終了する。時計間隔調整部82は、レスポンスの受信によるfdの通知によって、一時的に通常に戻していた運針を、時計調整指示部61によって指示されていた運針の倍率に戻す。
上述した通信API処理によって、「通信中」は運針が通常に戻されるため、レスポンスを正常に受信でき、通信エラーを回避することができる。また、通信の終了によって、運針の速度を時計調整指示部61によって指示されていた運針の倍率に合わせるため、マルウエア9の動態解析を効果的に行うことができる。
図20は、1/2倍速の場合の観測時間の比較例を示す図である。図20において、マルウエア9の動態解析を通常時間で行った場合と、本実施例における調整して時間を1/2倍速にした場合の観測時間の差を例示している。この例では、マルウエア9により10秒毎のソフトウェア割込処理(a)が指定されたとする。
通常時間では、時間調整を行わず通常時間をマルウエア9に提供して観測した場合のマルウエア9(収集したプログラム)の挙動例を示している。マルウエア9は、起動後凡そ10分後にC&Cサーバと接続した後、凡そ30分後に周辺を探索開始する。
マルウエア9は、多数のIPアドレスをランダムで生成し、10秒間隔でネットワーク4に送出して探索する。その後、マルウエア9は、存在するIPアドレスのホスト、サーバ等の装置からレスポンスを得る。
凡そ40分後に、マルウエア9は、探索によりレスポンスを得られた周辺装置に対して感染させて、目的の情報を収集する。凡そ60分後、マルウエア9は、感染した周辺装置から収集して得た情報収集結果をC&Cサーバへ提供する。
この例では、凡そ10分後にマルウエア9が活動を開始した例を示しているが、マルウエア9は、感染後にすぐに活動するとは限らない。一定時間が経過しないと動作開始しない場合であっても、観測し続けなければならない。
2倍速では、本実施例を適用して通常時間を2倍に延伸させてマルウエア9に提供して観測した場合のマルウエア9(収集したプログラム)の挙動例を示している。通信中以外では、時間が1/2倍の早さで進むため、マルウエア9は2倍遅く動作する。凡そ20分後にマルウエア9は、C&Cサーバと接続した後、凡そ40分後に周辺を探索開始する。
マルウエア9は、多数のIPアドレスをランダムで生成し、20秒間隔でネットワーク4に送出して探索する。本実施例では、API制御部41の通信制御により、ネットワーク4に存在するノードに対してのみ通信が行われ、存在しないノードへの通信は抑制される。マルウエア9が、存在するIPアドレスのホスト、サーバ等の装置からレスポンスを得る。
凡そ80分後、探索によりレスポンスを得られた周辺装置に対して感染させて、目的の情報を収集する。凡そ120分後、マルウエア9は、感染した周辺装置から収集して得た情報収集結果をC&Cサーバへ提供する。
1/2倍速での動態解析では、周辺装置への感染前からマルウエア9の情報収集結果がC&Cサーバへ提供されるまでを、時間を掛けて行うことができる。マルウエア9の挙動を詳細に解析することができる。
マルウエア9は、ネットワーク4内で感染を広げるためにIPアドレスをランダムにスキャンし探索を行う。探索した結果、ネットワーク4に存在するホスト51、52等から応答があった場合、ホストが存在すると判断し、ホストを通信相手先に指定して感染パケットを送信する。このような、マルウエア9が行う探索処理では、ネットワーク4に対して大量のIPアドレスを生成して探索するため、応答のないIPアドレスが多い。
ネットワーク4に存在しないIPアドレスに対する探索処理を省略できるため、効率的にマルウエア9の動態解析を行うことができる。本実施例を適用しない場合と、本実施例を適用した場合の比較について図21で説明する。
図21は、マルウエアによる探索処理に関する比較例を示す図である。本実施例を適用しない場合(図21(A))と、本実施例を適用した場合(図21(B))とにおいて、マルウエア9が、不在ホストa、b、c、d、e、実在ホスト51、・・・に対して探索を行った場合を示している。
図21(A)の本実施例を適用しない場合では、不在ホストaを通信相手先とした探索パケットを送信すると、ルータ6がエラー通知を示すパケットを送り返す。不在ホストbを通信相手先とした探索パケットを送信すると、ルータ6がエラー通知を示すパケットを送り返す。
ルータ6からエラー通知がない、不在ホストc及びeに対する探索パケットに対しては、動態解析サーバ100のOSカーネル7kは、再送タイムアウトまで繰り返し探索パケットを送信し、再送タイムアウトで、OSカーネル7kからエラー通知をマルウエア9に通知する。
時間Taは、不在ホストa〜eの夫々を指定した通信API呼び出しから、エラー通知がマルウエア9に通知されるまでの時間長を示している。
実在するホスト51を通信相手先とした探索パケットを送信した場合、ホスト51からレスポンスが送信され、マルウエア9へ正常終了が通知される。
図21(B)の本実施例を適用した場合では、API制御部41がマルウエア9からの通信API呼び出しに対して、通信相手先となるノードが存在するか否かを判断する。不在ホストa〜eに対しては、API制御部41で即時に正常終了をマルウエア9に通知する。従って、不在ホストa〜eを指定した探索パケットがネットワーク4へ送出されることはない。
実在するホスト51を指定した通信API呼び出しに対しては、API制御部41がその存在を確認した上で、ネットワーク4へ探索パケットが送信され、ホスト51から正常終了が返信される。
本実施例を適用した場合では、不在ホストa〜eの夫々を指定した通信API呼び出しから、エラー通知がマルウエア9に通知されるまでの時間長は、時間Tbで示される。図21(A)の時間Taと比べると、時間Tbがより短い時間であることが分かる。不在ホストの数が多い程、本実施例による観測時間を短縮する効果は大きい。
本実施例では、時刻の運針を早く又は遅くした場合であっても通信異常を回避できることについて、本実施例を適用しない場合と比較して以下に説明する。
図22は、2倍速の場合における通信異常回避を説明するための図である。図22では、マルウエア9とホスト52(例えばDNSサーバ)との通信例を時間軸で示している。
図22(A)では、本実施例の適用無く、通信中においても2倍速で観測が行われた場合の例を示している。通信中は、ホスト52は、通常時間に基づく単位時間tuで動作し、マルウエア9は、単位時間tuの2倍の早さの単位時間tu_2で動作する。
従って、マルウエア9では、応答を受け取るまでのタイムアウト待ち時間T1が、ホスト52の通常時間に基づく応答を受け取るまでのタイムアウト待ち時間T2に対して1/2に縮小される。ここで、マルウエア9側のタイムアウト待ち時間T1とホスト52側のタイムアウト待ち時間T2とは、単位時間の長さは異なるものの、単位時間に基づくカウント値としては同じ値である。
マルウエア9が単位時間tu_2でリクエストをホスト52へ送信する。ホスト52は、マルウエア9からのリクエストを受信して、そのリクエストに応じて正常にレスポンスを送信する。
マルウエア9では、通信中も2倍の早さで時間が経過するため、タイムアウト待ち時間T1の後にホスト52からのレスポンスを受信する。よって、タイムアウトによる通信エラーとなる。
このように、単に、単位時間を短くした場合では、マルウエア9の動態解析を適切に行うことができない。
図22(B)では、本実施例における動態解析サーバ100でマルウエア9を観測し、通信中は通常時間に戻して観測が行われた場合の例を示している。マルウエア9のリクエスト送信時に、時刻の運針が基準クロック(1倍)に設定され(図9のステップS22−2)、単位時間tu_2が単位時間tuに戻される。
従って、ホスト52の単位時間tuと一致し、ホスト52がリクエストを受信して、レスポンスで返信した場合、マルウエア9は、タイムアウト待ち時間T2内で正常に受信し、通信を正常終了することができる。
図23は、1/2倍速の場合における通信異常回避を説明するための図である。図23では、マルウエア9とホスト52(例えばDNSサーバ)との通信例を時間軸で示している。
図23(A)では、本実施例の適用無く、通信中においても1/2倍速で観測が行われた場合の例を示している。通信中は、ホスト52は、通常時間に基づく単位時間tuで動作し、マルウエア9は、単位時間tuの1/2倍の早さの単位時間tu_3で動作する。
従って、マルウエア9では、応答を受け取るまでのタイムアウト待ち時間T3が、ホスト52の通常時間に基づく応答を受け取るまでのタイムアウト待ち時間T2に対して2倍に延伸される。ここで、マルウエア9側のタイムアウト待ち時間T3とホスト52側のタイムアウト待ち時間T2とは、単位時間の長さは異なるものの、単位時間に基づくカウント値としては同じ値である。
マルウエア9が単位時間tu_3でリクエストをホスト52へ送信する。ホスト52は、マルウエア9からのリクエストを受信して、そのリクエストに応じて正常にレスポンスを送信する。
マルウエア9では、通信中も1/2倍の早さでゆっくりと時間が経過するため、ホスト52からのレスポンスをリクエスト送信時の時間単位tu_3内で受信してしまう。よって、受信待ちの状態前でホスト52のレスポンスを受信することができず、通信エラーとなる。
このように、単に、単位時間を長くした場合では、マルウエア9の動態解析を適切に行うことができない。
図23(B)では、本実施例における動態解析サーバ100でマルウエア9を観測し、通信中は通常時間に戻して観測が行われた場合の例を示している。マルウエア9のリクエスト送信時に、時刻の運針が基準クロック(1倍)に設定され(図9のステップS22−2)、単位時間tu_3が単位時間tuに戻される。
従って、ホスト52の単位時間tuと一致し、ホスト52がリクエストを受信して、レスポンスで返信した場合、マルウエア9は、タイムアウト待ち時間T3内で正常に受信し、通信を正常終了することができる。
図24は、マルウェアの処理フェーズにおける本実施例の効果を説明するための図である。図24より、マルウェア9の処理(活動)フェーズには、実行又は感染、レジストリ登録、C&Cサーバ接続、探索、そしてマルウエア本体のDL感染の処理フェーズがある。
本実施例に係る動態解析サーバ100においてマルウエア9を実行又は感染する実行又は感染の処理フェーズ、及びマルウエア9によるレジストリを登録するレジストリ登録の処理フェーズでは、時計調整指示部61からの指示に従って時間間隔を短く又は長く調整した時間間隔でマルウエア9を観測する。時間間隔を短く調整した場合には、実行又は感染の処理フェーズ及びレジストリ登録の処理フェーズは高速化される。
C&Cサーバ接続の処理フェーズからは、マルウエア9の処理は通信が大半を占めるため、時刻の運針は通常に戻される。C&Cサーバ接続の処理フェーズでは、マルウエア9は通信を開始するため、タイムアウトのカウントを開始する。タイムアウトのカウント開始と共に、時刻の運針をリセットし、通常時間でマルウエア9を観測する。本実施例では、通信中に、時間間隔(単位時間の長さ)の調整による通信エラーが発生することはないため、マルウエア9の挙動が阻害されることはない。よって、通信中のマルウエア9の挙動を適切に観測することができる。
マルウエア9によって、接続可能なホストの探索が開始すると、探索パケットを送信する毎にタイムアウトのカウントを開始する。通信中は、時刻の運針を通常に戻す。一方で、ノード管理テーブル42bに登録されていないIPアドレスのノード(即ち、ネットワーク4に存在しないホスト)に対しては、API制御部41で正常終了がマルウエア9に通知される。
従って、本実施例の適用の無い場合では、ネットワーク4に存在しないノードに費やされていた観測時間を大幅に省略でき、高速に動態解析を行うことができる。
マルウエア本体のDL感染の処理フェーズでは、マルウエア9がレスポンスの有ったノードへ、マルウエア本体をダウンロードして感染させる。ノードへのダウンロードの開始時にタイムアウトのカウントを開始する。通信中は、時刻の運針は通常に戻されるため、舞うウエア9の挙動を阻害することなく観測することができる。
結果として、本実施例では、時刻の運針を通常に戻したとしても、C&Cサーバ接続、探索、そしてマルウエア本体のDL感染の処理フェーズで行われる通信に係る合計時間を短縮することができる。
マルウエア9の時間の早さは、例えば、図25に示すような実行速度の設定画面を制御端末2に表示させ、ユーザに設定させてもよい。
図25は、実行速度の設定画面の例を示す図である。図25において、設定画面G70は、ユーザが時計の運針の進む速さを倍率で設定するための画面である。設定画面G70では、実行速度の倍率の値を速度を速くする方向へ一列に配列した実行速度(倍率)軸を表示し、ユーザは、実行速度(倍率)軸の上の△マークをマウス等で操作することにより容易に所望の実行速度(倍率)を設定可能としている。
ユーザにより倍率を指定したらOKボタンを選択されると、時計調整指示部61により時計間隔調整部82へ指示が行われる。
また、設定画面G70には、ユーザへの参照として、APIログ、ファイルログ等の最大容量の値を表示するようにしても良い。
上述より、本実施例に係る動態解析装置100では、以下を行う。
・サンドボックス8内で、マルウエア9を実行し、動態解析の観測時間を調整する。
・OSの計時API721とサンドボックス8内の計時とを比較して時刻の運針を速くするか、遅くするかを決定し、時刻の運針を調整する。又は、実行速度の設定画面を制御端末3に表示させ、ユーザに設定させてもよい。
・サンドボックス8でスチールするAPIは、スチールAPI選択DB31に登録されている情報に従って、API制御部41で、通常のOSカーネル7kが提供するAPIを呼び出すか、サンドボックス8がOSカーネル7kのAPIとして処理を実行する(スチールして処理を実行する)かを決定する。
また、
・外部との通信系のAPI(socket()、send()、recv()等)で通信fdに対する要求は、通常のOSカーネル7kのAPIをそのまま呼び出すことで、1倍速で実行し、通信の正常性保つ。この時、通信時の応答待ちを正常にするため時刻の運針を1倍速の運針にする。
・通信系のAPIであっても、fdの示す宛先が、ノード管理テーブル42bに存在しない場合は、実際の通信を行わすAPI制御部41で正常終了として復帰させることで、高速に処理させ、通信時間が処理の多くを示すマルウエア9の処理を高速化する。
・タイマ関連のAPI(計時API721)は、通信中の呼び出し以外では、時計調整指示部61が指定した運針で加減速した状態で、OSカーネル7kの計時API721を呼び出す。
・その他のAPI731の呼び出しに対しては、サンドボックス環境8側でスチールし実行制御して必要に応じて呼び出す。
このような仕組みにより、本実施例では、
・マルウエア9の処理時間の多くを占める、ネットワーク4上のノード探索を予め存在するノードを示すノード管理テーブル42bを作成しておくことで、存在するノードに対しては、実際に探索に係る通信を行い、存在するノードの数より相当数となる存在しないノードに対しては、通信を行わずにAPI制御部41で正常終了で復帰させることで、大幅に通信時間を短縮できる。
・また、実際に通信を行う際には、通信のタイムアウトのタイミングが変化しないように、通信中(通信API711の呼び出し時)は、タイマの運針を通常の1倍速にすることで、通信が正常に行えるようになり、TCP/IP(Transmission Control Protocol/Internet Protocol)による通信において外部との通信においてレスポンスを適切に受信できないことによる通信エラーが発生しないようにできる。
従来の動態解析では、マルウエア9の処理では、通信処理が比較的多く全体の処理の高速化を実現することが困難であったが、本実施例では、マルウエア9の通信の特徴である比較的処理時間を要する探索活動に着目し、相手先となるノードがネットワーク4に存在しない場合は実際の通信を行わず、相手先のノードが存在する場合には1倍速で時刻の運針を進めることで、通信全体の高速化を実現できる。
また、マルウエア9の動態解析には現象の発現に時間を要する場合があるが、本実施例によれば、マルウエア9からの通信系のAPI呼び出し、及び、通信中のAPI呼び出し以外では、時計の運針を早くするため、効率的に動態解析を行うことができる。
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
コンピュータによって実行される動態解析方法であって、
プログラムが格納された通信装置とネットワークを介して接続されたノードの情報を記憶部に記憶し、
前記記憶部を参照し、前記通信装置の通信相手先のノードの存在有無に応じて前記プログラムの実行時間を設定し、
前記プログラムに従って、前記通信装置から前記ノードの探索にかかる通信を実行する、
ことを特徴とする動態解析方法。
(付記2)
前記通信相手先のノードが存在しない場合、通信を行うことなく正常終了で復帰することを特徴とする付記1記載の動態解析方法。
(付記3)
前記通信以外のプログラムの利用に係るインタフェースの呼び出しを、該インタフェースに代わって受信し、
通信状態に応じて前記プログラムの実行時間を変更する
ことを特徴とする付記1又は2記載の動態解析方法。
(付記4)
前記インタフェースはソフトウェア割込処理に係るインタフェースであることを特徴とする付記3記載の動態解析方法。
(付記5)
前記インタフェースは時間取得処理に係るインタフェースであることを特徴とする付記3又は4記載の動態解析方法。
(付記6)
前記実行時間は、ユーザによって変更可能であることを特徴とする付記1乃至5のいずれか一項記載の動態解析方法。
(付記7)
プログラムが格納された通信装置とネットワークを介して接続されたノードの情報を記憶部に記憶し、
前記記憶部を参照し、前記通信装置の通信相手先のノードの存在有無に応じて前記プログラムの実行時間を設定する処理と、
前記プログラムに従って、前記通信装置から前記ノードの探索にかかる通信を実行する処理と、
をコンピュータに実行させることを特徴とする動態解析プログラム。
(付記8)
プログラムが格納された通信装置とネットワークを介して接続されたノードの情報を記憶部に記憶する通信先管理部と、
前記記憶部を参照し、前記通信装置の通信相手先のノードの存在有無に応じて前記プログラムの実行時間を変更する制御部と、
前記プログラムに従って、前記通信装置から前記ノードの探索にかかる通信を実行する通信処理部と、
を有することを特徴とする動態解析装置。