(57)【要約】  特定装置（１０）は、解析対象のマルウェア（１１）を監視し、該マルウェア（１１）と、通信先からダウンロードされたダウンロードデータと、マルウェア（１１）またはダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する。そして、特定装置（１０）は、取得されたログデータを用いて、マルウェア、ダウンロードデータおよび通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する。そして、特定装置（１０）は、作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する。
2016060067.tif 000002
【特許請求の範囲】
【請求項１】
解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視部と、
前記監視部によって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成部と、
前記作成部によって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定部と
を備えることを特徴とする特定装置。
【請求項２】
前記監視部は、前記マルウェアのファイルに対してタグを付与して監視を行い、該マルウェアが監視対象のＡＰＩを呼び出した場合には、該ＡＰＩに関するデータに対して、当該データの送信元を一意に特定可能なタグを付与し、該タグが付与されたデータの伝搬を追跡することで、前記ログデータを取得することを特徴とする請求項１に記載の特定装置。
【請求項３】
前記特定部は、前記悪性なノードであると特定したノードが通信先のノードである場合には、該通信先のノードを悪性なサイトとして特定することを特徴とする請求項１または２に記載の特定装置。
【請求項４】
前記特定部は、前記悪性なノードであると特定したノードが通信先のノードである場合には、該通信先のノードを悪性なサイトとして特定し、さらに該通信先のノードに至る直前のノードが前記ダウンロードデータのノードである場合には、前記悪性なサイトとして特定したノードをマルウェアダウンロードサイトとして検出することを特徴とする請求項３に記載の特定装置。
【請求項５】
特定装置で実行される特定方法であって、
解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視工程と、
前記監視工程によって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成工程と、
前記作成工程によって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定工程と
を含んだことを特徴とする特定方法。
【請求項６】
解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視ステップと、
前記監視ステップによって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成ステップと、
前記作成ステップによって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定ステップと
をコンピュータに実行させるための特定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定装置、特定方法および特定プログラムに関する。
【背景技術】
【０００２】
近年、ボットやダウンローダをはじめとするマルウェアの多くは、悪性なプログラムが設置されたサイト（以降、マルウェアダウンロードサイトと呼ぶ）からプログラムコードを取得・実行し、機能拡充を行うことが知られている。このような機能拡充では、外部サーバへの攻撃や情報搾取など更なる被害をもたらすための機能が追加される。このため、感染後の被害を最小限に抑制するには、マルウェアダウンロードサイトへの通信を妨害し、機能拡充を阻害しなければならない。【０００３】
現在、マルウェアダウンロードサイトへの通信を妨害するために、マルウェアの動的解析により得られた通信先をブラックリスト化する対策が講じられている。マルウェアは正規サイトからもプログラムコードを取得・実行するため、動的解析で得られた通信先の全てをブラックリスト化すると、通信の誤遮断を行ってしまうことになる。【０００４】
このため、非特許文献１で述べられているように、ダウンロードされたファイルがマルウェアであるか否かに基づいたダウンロードサイトの特定が行われてきた。一般に、マルウェアであるか否かの判定処理は、アンチウイルスソフトの検査結果や、ファイル実行時に発生したレジストリ操作などの挙動に基づいて行われる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】畑田充弘、田中恭之、稲積孝紀、「サンドボックス解析結果に基づくＵＲＬブラックリスト生成についての一検討」  コンピュータセキュリティシンポジウム２０１３論文集
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記した従来の技術では、悪性なサイトや悪性なダウンロードデータを適切に特定することができない場合があるという課題があった。つまり、従来の技術では、マルウェアとダウンロードされたデータを正確に識別することができていなかった。このため、マルウェアの動的解析中に発生した通信の通信先とＯＳ上のオブジェクト（プログラムコードやファイル）の依存関係を解析することができず、通信発生の原因やファイルデータの取得元を特定できていなかった。【０００７】
その結果、実行データを直接悪性判定できない場合や、ダウンロードサイトから取得したプログラムコードがさらに別のダウンロードサイトからプログラムコードを取得して実行するといった多段構成になっている場合には、悪性なサイトや悪性なダウンロードデータの見逃しが発生してしまっていたという課題があった。【０００８】
また、マルウェアの多くはマルウェアダウンロードサイトからプログラムコードを取得・実行して機能拡充を行う。上記した従来の技術では、この機能拡充を防ぐためにマルウェアがマルウェアダウンロードサイトへ通信するのを妨害するためのブラックリストを動的解析により得ていたが、動的解析で得られるサイトには正規サイトも含まれるため、正規サイトを誤ってダウンロードサイトとして特定してしまう場合があった。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明の特定装置は、解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視部と、前記監視部によって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成部と、前記作成部によって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定部とを備えることを特徴とする。【００１０】
また、本発明の特定方法は、特定装置で実行される特定方法であって、解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視工程と、前記監視工程によって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成工程と、前記作成工程によって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定工程とを含んだことを特徴とする。【００１１】
また、本発明の特定プログラムは、解析対象のマルウェアを監視し、該マルウェアと、通信先からダウンロードされたダウンロードデータと、前記マルウェアまたは前記ダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する監視ステップと、前記監視ステップによって取得されたログデータを用いて、前記マルウェア、前記ダウンロードデータおよび前記通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する作成ステップと、前記作成ステップによって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する特定ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、悪性なサイトや悪性なダウンロードデータを適切に特定することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、第一の実施の形態に係る特定装置の全体構成を示す概略構成図である。
【図２】図２は、タグの構成例を示す図である。
【図３】図３は、依存関係グラフの例を示す図である。
【図４】図４は、既知の悪性情報を用いて悪性なノードを判定する悪性判定処理について説明する図である。
【図５】図５は、悪性なノードを起点に依存関係を遡って悪性な通信先を特定する特定処理について説明する図である。
【図６】図６は、第一の実施の形態に係る特定装置によるログの取得処理の流れを示すフローチャートである。
【図７】図７は、第一の実施の形態に係る特定装置による悪性通信先の特定処理の流れを示すフローチャートである。
【図８】図８は、特定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願に係る特定装置、特定方法および特定プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る特定装置、特定方法および特定プログラムが限定されるものではない。
【００１５】
［第一の実施の形態］
以下の実施の形態では、第一の実施の形態に係る特定装置の構成および処理の流れを順に説明し、最後に第一の実施の形態による効果を説明する。
【００１６】
［第一の実施の形態に係る特定装置の構成］
まず、図１を用いて、第一の実施の形態に係る特定装置１０について説明する。図１は、第一の実施の形態に係る特定装置の全体構成を示す概略構成図である。図１に示すように、特定装置１０は、マルウェア１１、ゲストＯＳ１２、仮想計算機１３、ログＤＢ１４、作成部１５および特定部１６を有する。また、特定装置１０は、複数の悪性情報ＤＢ２０と接続されており、悪性情報ＤＢ２０から既知の悪性情報を取得する。
【００１７】
特定装置１０のマルウェア実行環境部１０ａは、マルウェア１１、ゲストＯＳ１２および仮想計算機１３から構成される。ゲストＯＳ１２は、マルウェア１１を動的解析するための環境である。また、マルウェア１１は、ゲストＯＳ１２上で実行され、ＡＰＩ（Application  Programming  Interface）呼び出しやシステムコールの発行といった命令を実行する。なお、ゲストＯＳ１２上では、ブラウザなどのマルウェア１１の攻撃対象となるプロセスを動作させてもよい。
【００１８】
マルウェア実行環境部１０ａは、マルウェア１１をゲストＯＳ１２上で動作させ、テイント解析技術を用いてマルウェア１１が実行した命令と実行時のデータフローを追跡する。テイント解析技術とは、データに対してタグを設定し、伝搬ルールに従ってタグを伝搬させることで、解析システム内のデータの伝搬を追跡する技術である。タグとはデータに対して付与される属性情報であり、データの出自や種類が設定される。また、伝搬ルールとはタグを伝搬させる条件であり、一般にデータのコピーや演算が伝搬の条件として設定される。例えば、受信データの利用用途を解析する場合には、受信データに対して取得元を一意に特定可能なタグを設定し、データのコピーや演算に応じてタグを伝搬させる。ＡＰＩの引数として渡されたデータにタグが設定されていることを確認することで、受信データはＡＰＩの引数として利用されるデータであることが解析できる。なお、テイント解析技術は仮想計算機技術を用いて実現されることが一般的であり、タグはデータとは異なる専用の記録領域にデータと対応が取れるように保持される。具体的には、マルウェア実行環境部１０ａは、まず解析対象となるマルウェア１１をゲストＯＳ１２上に設置し、マルウェア１１のファイルに対応するディスク領域に監視対象タグ（監視対象フラグが有効になっているタグ）を設定する。その後、マルウェア実行環境部１０ａは、解析対象のマルウェア１１を実行する。
【００１９】
マルウェア実行環境部１０ａでは、命令監視部１３ａがマルウェア１１が実行した命令を監視し、データフロー解析部１３ｂがデータ受信ＡＰＩとマルウェアのプログラムコードデータを起点にマルウェア実行環境部１０ａ内でのデータフローを追跡する。仮想計算機１３は、命令監視部１３ａおよびデータフロー解析部１３ｂを具備する。
【００２０】
命令監視部１３ａは、解析対象のマルウェア１１を監視し、該マルウェア１１と、通信先からダウンロードされたダウンロードデータと、マルウェア１１またはダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する。
【００２１】
具体的には、命令監視部１３ａは、マルウェア１１のファイルに対してタグを付与して監視を行い、該マルウェア１１が監視対象のＡＰＩであるデータ受信ＡＰＩを呼び出した場合には、該ＡＰＩに関するデータに対して、当該データの送信元を一意に特定可能なタグを、監視対象フラグを有効にした上で付与し、該タグが付与されたデータの伝搬を追跡することでログデータを取得する。
【００２２】
命令監視部１３ａの処理を詳細に説明すると、まず、命令監視部１３ａは、マルウェア１１の解析中に、命令ポインタレジスタの値を取得し、命令ポインタレジスタの指すメモリ領域に監視対象タグがついているか否かをデータフロー解析部１３ｂに問い合わせる。そして、命令監視部１３ａは、問い合わせの結果、データに監視対象タグが設定されていた場合、当該命令を監視対象と判断する。監視対象のｃａｌｌ命令が実行され、該ｃａｌｌ命令で呼び出す対象が監視対象ＡＰＩでない場合には、当該命令より深いネストの全命令を監視対象のｃａｌｌ命令を実行したプログラムコードの動作内容であると判断し、監視対象とする。なお、命令監視部１３aはコールスタックも考慮した上で監視対象の各命令を識別する。この登録は、ｃａｌｌ命令の次のアドレスに戻ってきた際に解除される。
【００２３】
次に、命令監視部１３ａは、監視対象のＡＰＩを呼出している場合には、監視対象ＡＰＩのカテゴリに応じた処理を行う。カテゴリには大きく３つ存在する。１つは、タグを設定するためのＡＰＩ、もう１つはタグを確認するためのＡＰＩ、最後の１つは設定と確認の両方を行うＡＰＩである。どのＡＰＩがどのカテゴリに属するかは事前に設定するものとする。
【００２４】
例えば、データ受信ＡＰＩは、タグを設定するＡＰＩであるものとし、データ送信ＡＰＩは、タグを確認するＡＰＩとする。また、ファイル書き込みＡＰＩおよびコードインジェクションに用いられるメモリ書き込みＡＰＩは、タグを確認してタグを設定するＡＰＩとする。タグを設定するＡＰＩでは、取得元を一意に特定可能なタグを設定する。このような処理を行うことにより、マルウェア解析時におけるマルウェアのプログラムコードと受信データの受信用途を分析し、その結果はログＤＢ１４に格納される。
【００２５】
ここで、図２を用いて、設定するタグの構成例について説明する。図２は、タグの構成例を示す図である。図２の例では、６４ｂｉｔ長のタグを表している。図２に示すように、タグは、監視対象フラグ、書き込みＩＤ、データＩＤで構成される。
【００２６】
監視対象フラグは、実行を監視する対象であることを示すフラグ値である。また、書き込みＩＤは、タグが付与されているデータがファイルやメモリに書き込まれたデータであるか否かを管理する値であり、ファイル書き込み時とコードインジェクション時にユニークな値が与えられる。最後のデータＩＤは、データの取得元を一意に特定可能な値である。
【００２７】
ここで取得元とは、受信データの送付元に関する情報である通信先情報（ＩＰアドレス、ＦＱＤＮ（Fully  Qualified  Domain  Name）、ＵＲＬ（Uniform  Resource  Locator）など）である。通信先情報の粒度は特定部１６で抽出したい情報に応じて解析前に事前に決定する。なお、書き込みＩＤやデータＩＤは、設定されていない状態の値に０をとる。つまり、監視対象フラグが１（有効）であり、それ以外は０となっている状態のタグが解析対象のマルウェアに対して設定される監視対象タグである。また、データ受信ＡＰＩで受信したデータに対して設定されるのは監視対象フラグが１であり、書き込みＩＤが０でデータＩＤが０以外のタグとなる。なお、タグに紐づく通信先情報は、マルウェア解析実行時にマルウェアによって実行されたネットワーク関連ＡＰＩを監視・記録することで特定でき、このタグの長さは実装に応じて監視対象フラグ、書き込みＩＤ、データＩＤを保持できる範囲で任意に変更できる。
【００２８】
データフロー解析部１３ｂは、命令監視部１３ａから命令ポインタレジスタの指すメモリ領域に監視対象タグが付いているか否かの問い合わせを受け付けると、該問い合わせがあったメモリ領域に監視対象タグが付いているか判定し、判定した結果を問い合わせの結果として命令監視部１３ａに通知する。ログＤＢ１４は、マルウェア実行環境部１０ａで収集したログを保持する。
【００２９】
作成部１５は、命令監視部１３ａによって取得されたログデータを用いて、マルウェア１１、ダウンロードデータおよび通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する。ここで、各ノードについては、既存の悪性情報をマッピングできる粒度のノードを依存関係グラフに持つものとする。また、ノード間を結ぶエッジは終点ノードの悪性を根拠に始点ノードの悪性を説明できる関係性としてデータ依存関係を保持する。具体的には、エッジを用いてデータ実行に関わる依存関係、データ保存に関わる依存関係、通信先決定に関わる依存関係を保持する。
【００３０】
データ実行に関わる依存関係では、プログラムコードの取得元情報を保持し、データの実行有無を表す。この依存関係には、通信先からの受信データがメモリ上で直接実行される場合とファイルから読み込んだデータが実行される場合、別プログラムによってインジェクションされたデータが実行される場合が該当する。この依存関係は終点ノードにプログラムコードを持つエッジにより表現される。
【００３１】
データ保存に関わる依存関係では、ファイルデータの取得元情報を保持する。この依存関係を保持することで、ファイルの悪性判定結果に基づいてファイル内データの取得元を悪性判定することが可能となる。通信先から受信したデータがファイルに保存される場合、ファイルのコピーが行われる場合、プログラムコードが自分自身をファイルとして切り出す場合がこの依存関係に該当する。この依存関係は、終点ノードにファイルを持つエッジにより表現される。
【００３２】
通信先決定に関わる依存関係では、本依存関係は、通信先情報の出自を保持する。通信先の悪性判定結果に基づいて悪性を判断する場合、通信内容の出自ではなく、通信先を決定した通信先情報の出自が重要となる。本依存関係は、通信先の悪性情報に基づいて通信先情報の出自の悪性判定を可能とする。通信先やファイル、プログラムコードによる通信先の決定がこの依存関係に該当し、終点ノードに通信先を持つエッジが本依存関係を表現する。
【００３３】
ここで、図３を用いて、依存関係グラフの例について説明する。図３は、依存関係グラフの例を示す図である。図３に例示するように、通信先Ａからダウンロードされたファイルが実行され、通信先Ｂと通信先Ｃとの通信が発生し、通信先Ｃから新たなファイルがダウンロードされた際の依存関係を表している。この例では、依存関係グラフは通信先とプログラムコード、ファイルをノードに持つ。通信先に対しては、公開ブラックリスト、プログラムコードに対しては特定ＡＰＩを呼び出したなどのヒューリスティック検知結果、ファイルに対してはアンチウイルスソフトによる検査結果をそれぞれマッピングすることができる。
【００３４】
また、これらのノード間には次のような依存関係が存在する。まず、終点ノードに通信先を持つ場合、通信を行ったプログラムコード自体ではなく通信先を決定した要因が悪性であるため通信先情報の出自を始点ノードにとる。また、ファイルノードを終点ノードに持つ場合にはファイルデータの出自を始点ノードにとる。最後に、プログラムコードノードを終点に持つ場合には、プログラムコードデータの出自を始点ノードにとる。以上のノードとエッジを用いて、図３は、通信先ＡからダウンロードされたファイルＡが実行され、通信先Ｃから新たなファイルＢを取得するまでの一連の依存関係を表している。
【００３５】
ここで、依存関係グラフが作成される過程について説明する。ここでの例では、図３に例示した依存関係グラフを作成するにあたり、マルウェア実行環境部１０ａで以下の動作があったものとする。まず、解析対象のマルウェア１１が通信先Ａを指定して通信し、通信先ＡからはファイルＡがダウンロードされた。その後、ファイルＡはプログラムコードとして実行され、当該プログラムコードは通信先Ｂと通信先Ｃをそれぞれ指定して通信を行った。この結果、通信先Ｃからは新たなファイルＢがダウンロードされた。このような動作がマルウェア実行環境部１０ａであったものとして、以下に依存関係グラフが作成される過程について説明する。
【００３６】
まず、解析対象プログラムコードが引き起こした動作のみを監視するため、マルウェア実行環境部１０ａは、監視対象タグを設定した後に解析対象のマルウェア１１を実行する。そして、解析対象のマルウェア１１が実行されている間、命令監視部１３ａは、通信やファイル書き込み、メモリ書き込みに関わるＡＰＩ呼出、監視対象タグのついたデータの実行有無を監視する。命令監視部１３ａは、解析中にプログラムコードがデータ送信ＡＰＩを呼び出した場合、データ送信ＡＰＩに引数として渡された通信先情報を指定するデータについて、設定されているタグを確認し、通信先情報と合わせてログに記録する。
【００３７】
このとき、作成部１５は、引数として渡された通信先情報を指定するデータにデータ送信ＡＰＩを呼び出したプログラムコードと同じタグが設定されている場合や、タグが設定されていない場合には当該プログラムコードが通信先を指定したと判断する。これにより、マルウェアと通信先Ａの依存関係（図４の（１））、プログラムコードと通信先Ｂの依存関係（図４の（４））およびプログラムコードと通信先Ｃの依存関係（図４の（５））が明らかになり、作成部１５は、解析対象プログラムコードと通信先Ａとをエッジで結び、また、プログラムコードと通信先Ｂとをエッジで結ぶ。
【００３８】
また、命令監視部１３ａは、データ受信ＡＰＩが呼び出された場合には、マルウェア実行環境部は受信データに対してデータＩＤを持つタグを設定し、取得元の通信先情報と合わせてログに記録する。
【００３９】
その後、プログラムコードがファイル書き込みＡＰＩを呼び出した場合、命令監視部１３ａは、書き込みＩＤを設定した上でファイルデータへタグを伝搬させる。これにより、通信先Ａからの受信データがファイルＡに書き込まれたことを示す依存関係（図４の（２））や通信先Ｃから受け取ったデータがファイルＢに書き込まれたことを示す依存関係（図４の（６））が追跡可能となる。なお、書き込みＩＤが既に設定されていた場合、書き込みＩＤを上書きする。命令監視部１３ａは、当該依存関係を表現させるため、ファイル名と合わせてファイルに書き込まれるデータに設定されていたタグとファイルに書き込むデータに対して新たに設定したタグをログＤＢ１４に格納する。作成部１５は、ログＤＢ１４に記憶されたログを用いて、通信先ＡとファイルＡをエッジで結び、また、通信先ＣとファイルＢをエッジで結ぶ。
【００４０】
また、受信データやファイルに書き込まれたデータが実行されたか否かは、命令ポインタレジスタの指すメモリ領域にデータＩＤや書き込みＩＤを持つタグが設定されているか否かで判断される。例えば、通信先Ａからダウンロードされたファイルが実行された場合、実行されたデータには書き込みＩＤが設定されている。書き込みＩＤがファイルに書き込まれたデータに設定されたタグと同じであれば、ファイルが実行されたと判断できる。一方、コードインジェクション時に設定されたタグと同じであれば、インジェクションされたデータが実行されたと判断できる。
【００４１】
なお、データＩＤのみが設定されている場合には受信データがそのままメモリ上で実行されたと判断できる。この仕組みにより、通信先ＡからダウンロードされたファイルＡがプログラムコードとして実行されたという依存関係（図４の（３））が追跡可能になる。命令監視部１３ａは、作成部１５で通信先とプログラムコード、およびファイルとプログラムコード間の依存関係をグラフ上に表現できるように、実行されたデータに紐付くタグをログに記録する。作成部１５は、ログＤＢ１４に記憶されたログを用いて、ファイルＡとプログラムコードをエッジで結ぶ。
【００４２】
特定部１６は、作成部１５によって作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する。また、特定部１６は、悪性なノードであると特定したノードが通信先のノードである場合には、該通信先のノードを悪性なサイトとして特定し、さらに該通信先のノードに至る直前のノードがファイルやプログラムコードなどのダウンロードデータであった場合には該通信先のノードをマルウェアダウンロードサイトとして検出する。
【００４３】
具体的には、特定部１６は、作成部１５によって作成された依存関係グラフに対して、既存の悪性情報をマッピングする。例えば、通信先のホスト名が「example.co.jp」であり、公開ブラックリストなどの既存の悪性情報に当該ホスト名が登録されている場合には依存関係グラフ上の該当するノードに対して悪性であることを示す情報を付与する。
【００４４】
最後に、特定部１６は、マッピング処理によって悪性と判定されたノードを起点に依存関係を遡り、当該ノードから到達可能な通信先を悪性と判定する。また、到達可能なファイルを悪性なファイルと特定する。その後、特定部１６では、マルウェアダウンロードサイトを含む悪性通信先一覧とその過程で悪性と判定されたファイル情報を出力する。このように、依存関係グラフでは、終点ノードの悪性を理由に始点ノードの悪性を言及できる依存関係が保持されている。
【００４５】
例えば、特定部１６は、図４に例示するように、依存関係グラフの各ノードを既知の悪性情報と照合してマルウェアのノードと通信先Ｃのノードを悪性なノードとして検出する。そして、図５に例示するように、特定部１６は、悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードとして、通信先Ａ、ファイルＡ、プログラムコードを悪性なノードとして特定する。このため、エッジで結ばれた２つのノード間の依存関係を順番に遡り、悪性判定することが可能となる。
【００４６】
また、上記の悪性判定処理において、依存関係の向きが誤検知を防ぐための重要な役割を果たす。一般に、マルウェア１１は、解析環境での実行を回避するために、解析妨害機能を備えている。その１つが、正規サイトを利用したインターネットへの接続確認であり、マルウェア１１は正規サイトへの接続性有無を確認することでインターネットから隔離された解析環境であるか否かを見分けている。
【００４７】
マルウェア１１の動的解析中に接続確認が行われた場合、接続確認用のサイトも依存関係グラフ上の１つのノードとして表現され、データ依存関係が通信先情報の出自から通信先に向かうエッジで表現される。このため、例えば、図４のように既知の悪性情報によって通信先Ｃが悪性であると判定されたとしても、プログラムコードと通信先Ｂの依存関係は遡ることができないため、図５のような悪性判定結果となる。したがって、通信先Ｂが悪性と判定されることは無い。このように、データ依存関係を依存関係グラフとして保持して利用する本手法は接続確認などを目的とした正規サイトとの通信が発生したとしても、誤検知しない。
【００４８】
なお、上記の説明では、解析対象がマルウェアであるという前提で説明したが、解析対象が被疑プログラムコードでも構わない。この場合、特定装置１０を用いて、被疑プログラムコードの悪性を判定することも可能である。つまり、マルウェアと疑われる被疑プログラムを動作させて、既存の悪性情報とマッチしたノードから辿っていき、当該被疑プログラムにたどり着くことにより、マルウェアを特定する手法にも適用が可能である。
【００４９】
また、上記の説明では、既知の悪性情報のみを参照したが、既知の良性情報を用いて適用する悪性情報を限定してもよい。既知の良性情報としては、例えば、ファイルであればＯＳ上に標準でインストールされているファイルのハッシュ値、通信先であればＤＮＳ（Domain  Name  System）サーバなど解析中に必ず通信が発生する通信先、有名サイトの一覧などが挙げられる。
【００５０】
［特定装置の処理の一例］
次に、図６および図７を用いて、特定装置１０の処理について説明する。図６は、第一の実施の形態に係る特定装置によるログの取得処理の流れを示すフローチャートである。図７は、第一の実施の形態に係る特定装置による悪性通信先の特定処理の流れを示すフローチャートである。
【００５１】
まず、図６を用いて、特定装置１０によるログの取得処理の流れを説明する。図６に示すように、特定装置１０のマルウェア実行環境部１０ａは、まず解析対象となるマルウェア１１をゲストＯＳ１２上に設置し（ステップＳ１０１）、マルウェア１１のファイルに対応するディスク領域に監視対象タグを設定する（ステップＳ１０２）。その後、マルウェア実行環境部１０ａは、マルウェア１１を実行する（ステップＳ１０３）。
【００５２】
そして、命令監視部１３ａは、マルウェア１１の解析中に、命令ポインタレジスタの値を取得し（ステップＳ１０４）、データフロー解析部１３ｂに命令ポインタレジスタの指すメモリ領域に監視対象タグがついているか否かを問い合わせる。そして、データフロー解析部１３ｂは、命令ポインタレジスタが指すアドレス領域のタグを取得し（ステップＳ１０５）、問い合わせ結果を命令監視部１３ａに通知する。そして、命令監視部１３ａは、問い合わせの結果、データに監視対象タグがついていない場合には（ステップＳ１０６否定）、現在監視しているスレッドが監視対象であるか否かを判定する（ステップＳ１０７）。この結果、命令監視部１３ａは、現在監視しているスレッドが監視対象でないと判定した場合には（ステップＳ１０７否定）、ステップＳ１０４に戻る。また、命令監視部１３ａは、現在監視しているスレッドが監視対象であると判定した場合には（ステップＳ１０７肯定）、ステップＳ１０８の処理に移行する。
【００５３】
ステップＳ１０８の処理では、命令監視部１３ａは、当該命令を監視対象と判断し、監視対象のｃａｌｌ命令が実行されるか判定する（ステップＳ１０８）。この結果、命令監視部１３ａは、ｃａｌｌ命令が実行されないと判定した場合には（ステップＳ１０８否定）、Ｒｅｔ命令で監視対象登録直後の命令ポインタアドレスに戻るか判定する（ステップＳ１０９）。
【００５４】
この結果、命令監視部１３ａは、Ｒｅｔ命令で監視対象登録直後の命令ポインタアドレスに戻らないと判定した場合には（ステップＳ１０９否定）、ステップＳ１０４に戻る。また、命令監視部１３ａは、Ｒｅｔ命令で監視対象登録直後の命令ポインタアドレスに戻ると判定した場合には（ステップＳ１０９肯定）、監視対象から解除して（ステップＳ１１０）、ステップＳ１０４に戻る。
【００５５】
また、命令監視部１３ａは、ｃａｌｌ命令が実行されると判定した場合には（ステップＳ１０８肯定）、監視対象ＡＰＩが呼び出されたか判定する（ステップＳ１１１）。この結果、命令監視部１３ａは、監視対象ＡＰＩが呼び出されなかった場合には（ステップＳ１１１否定）、スレッドを監視対象として登録して（ステップＳ１１２）、ステップＳ１０４に戻る。
【００５６】
また、命令監視部１３ａは、監視対象ＡＰＩが呼び出された場合には（ステップＳ１１１肯定）、タグ設定ＡＰＩであるか否かを判定する（ステップＳ１１３）。この結果、命令監視部１３ａは、タグ設定ＡＰＩであると判定した場合には（ステップＳ１１３肯定）、取得元を一意に特定可能なタグを設定し（ステップＳ１１４）、取得元の通信先情報と合わせてタグをログＤＢ１４に記録する（ステップＳ１１５）。例えば、命令監視部１３ａは、データ受信ＡＰＩである場合には、データ受信ＡＰＩにより受信されたデータに対して、タグを設定し、受信データの取得元の通信先情報と合わせてタグをログＤＢ１４に記録する。
【００５７】
また、命令監視部１３ａは、タグ設定ＡＰＩでないと判定した場合には（ステップＳ１１３否定）、タグ確認ＡＰＩであるか否かを判定する（ステップＳ１１６）。この結果、命令監視部１３ａは、タグ確認ＡＰＩであると判定した場合には（ステップＳ１１６肯定）、タグを確認し（ステップＳ１１７）、タグなどのログをログＤＢ１４に記録する（ステップＳ１１８）。例えば、命令監視部１３ａは、データ送信ＡＰＩである場合には、通信先情報として引数に渡されたデータについて、設定されたタグを確認し、通信先情報、該ＡＰＩの実行原因となった直前の監視対象タグと合わせてタグをログＤＢ１４に記録する。なお、実行原因となった直前の監視対象タグはコールスタックを辿り、直近の監視対象タグのついたプログラムコードを確認することで特定する。
【００５８】
また、命令監視部１３ａは、タグ確認ＡＰＩでないと判定した場合には（ステップＳ１１６否定）、タグ確認後にタグを設定し（ステップＳ１１９）、書き込み先名と合わせてタグをログＤＢ１４に記録する（ステップＳ１２０）。例えば、命令監視部１３ａは、ファイル書き込みＡＰＩおよびコードインジェクションに用いられるメモリ書き込みＡＰＩである場合には、タグ確認後にタグを設定し、書き込み先名、該ＡＰＩの実行原因となった直前の監視対象タグと合わせて、確認したタグと設定したタグをログＤＢ１４に記録する。ここで、書き込み先名とはファイル書き込みＡＰＩであればファイル名、コードインジェクションに用いられるメモリ書き込みＡＰＩであれば書き込み先のプロセス名である。
【００５９】
ステップＳ１１５、ステップＳ１１８またはステップＳ１２０の処理が終わった後、命令監視部１３ａは、一定時間が経過したか否かを判定し（ステップＳ１２１）、一定時間が経過していないと判定した場合には（ステップＳ１２１否定）、ステップＳ１０４の処理に戻る。また、命令監視部１３ａは、一定時間が経過していると判定した場合には（ステップＳ１２１肯定）、処理を終了する。
【００６０】
次に、依存関係グラフの構築方法を説明する。作成部１５では、ログＤＢ１４に記憶されたログから依存関係グラフのノード、エッジを抽出する。依存関係グラフで保持される依存関係は、データ実行に関わる依存関係、データ保存に関わる依存関係、通信先決定に関わる依存関係である。
【００６１】
データ実行に関わる依存関係を保持するエッジでは、終点ノードにプログラムコードを持ち、始点ノードにプログラムコードかファイル、通信先を持つ。このエッジはログＤＢ１４に記録されているログに基づいて次のように作成される。
【００６２】
終点ノードと始点ノードともにプログラムコードであるエッジは、実行原因となった直前の監視対象タグがメモリ書き込みＡＰＩによって書き込まれたタグである場合に作成される。このとき、メモリ書き込みＡＰＩの実行原因となった直前の監視対象タグのついたプログラムコードが始点ノードとなる。
【００６３】
終点ノードがプログラムコードであり、始点ノードがファイルであるエッジは、実行原因となった直前の監視対象タグがファイル書き込みＡＰＩによって書き込まれたタグである場合に作成される。このとき、該タグが設定されているファイルが始点ノードになる。
【００６４】
終点ノードがプログラムコードであり、始点ノードが通信先であるエッジは、実行原因となった直前の監視対象タグが該通信先からの受信データに設定したタグである場合に生成される。このとき、該通信先が始点ノードになる。
【００６５】
データ保存に関わる依存関係を保持するエッジでは、終点ノードにファイルを持ち、始点ノードにプログラムコードかファイル、通信先を持つ。このエッジはログＤＢ１４に記録されているログに基づいて次のように作成される。
【００６６】
始点ノードと終点ノードともにファイルであるエッジは、ファイル書き込みＡＰＩで、あるファイルに設定したタグが異なるファイルへの書き込みデータにおいて観測されていた場合に作成される。例えば、ファイルＸへの書き込み時に設定したタグが、ファイルＹに書き込むデータに設定されている場合が該当する。このとき、ファイルＸが始点ノードとなり、ファイルＹが終点ノードとなる。
【００６７】
終点ノードがファイルであり、始点ノードがプログラムコードであるエッジは、プログラムコードがプログラムコードと同じタグを持つデータをファイル書き込きこんだことが観測されていた場合に作成される。
【００６８】
終点ノードがファイルであり、始点ノードが通信先であるエッジは、ファイル書き込みＡＰＩにおいて、ファイルに書き込まれるデータのタグを確認して、確認された書き込みＩＤの設定を行う前のタグが該通信先からの受信データに設定したタグである場合に生成される。
【００６９】
通信先決定に関わる依存関係を保持するエッジでは、終点ノードに通信先を持ち、始点ノードにプログラムコードかファイル、通信先を持つ。このエッジはログＤＢ１４に記録されているログに基づいて次のように作成される。
【００７０】
始点ノードと終点ノードともに通信先であるエッジは、データ送信ＡＰＩに通信先情報として渡されたデータに設定されていたタグが、データ受信ＡＰＩにおいて受信データに設定したタグと同じである場合に作成される。始点ノードは該受信データの送付元となる。
【００７１】
終点ノードが通信先であり、始点ノードがプログラムコードであるエッジは、データ送信ＡＰＩに通信先情報として渡されたデータにタグが設定されていなかった場合、もしくは設定されていたタグが該データ送信ＡＰＩの実行原因となった直前の監視対象タグと同じである場合に作成される。このとき、始点ノードは該データ送信ＡＰＩの実行原因となった直前の監視対象タグを持つプログラムコードとなる。
【００７２】
終点ノードが通信先であり、始点ノードがファイルであるエッジは、データ送信ＡＰＩに通信先情報として渡されたデータに設定されていたタグが、ファイル書き込みＡＰＩで書き込みデータに新たに設定したタグと同じである場合に作成される。このとき、始点ノードは該ファイル書き込みＡＰＩの書き込み先ファイルとなる。以上の方法で作成したエッジの始点ノードと終点ノードが依存関係グラフ上のノードとなる。
【００７３】
次に、図７を用いて、特定装置１０による悪性通信先の特定処理の流れを説明する。図７に示すように、特定装置１０の作成部１５は、ログＤＢ１４に記憶されたログを用いて、依存関係グラフを構築する（ステップＳ２０１）。そして、特定部１６は、依存関係グラフにノードが存在しているか否かを判定する（ステップＳ２０２）。この結果、特定部１６は、ノードが存在していない場合には（ステップＳ２０２否定）、この処理を終了する。
【００７４】
また、特定部１６は、ノードが存在している場合には（ステップＳ２０２肯定）、作成部１５によって作成された依存関係グラフに対して、既存の悪性情報をマッピングする（ステップＳ２０３）。そして、特定部１６は、悪性情報がマッピングされたノードが存在しているか否かを判定する（ステップＳ２０４）。この結果、特定部１６は、悪性情報がマッピングされたノードが存在していない場合には（ステップＳ２０４否定）、処理を終了する。また、特定部１６は、悪性情報がマッピングされたノードが存在している場合には（ステップＳ２０４肯定）、依存関係グラフのエッジを逆向きに変更して（ステップＳ２０５）、悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、悪性情報がマッピングされたノードから到達可能な全ノードを悪性と判定して（ステップＳ２０６）、処理を終了する。このとき、悪性なノードと判定された通信先のノードに対応する通信先を悪性なサイトとして検出し、さらに該通信先のノードに至る直前のノードがファイルやプログラムコードなどのダウンロードデータであった場合には該通信先ノードをマルウェアダウンロードサイトとして検出する。なお、必ずしも依存関係グラフのエッジを逆向きに変更してからエッジを辿る必要はなく、エッジを逆向きにせずに、終点から始点方向へエッジを逆方向に辿ってもよい。
【００７５】
［第一の実施形態の効果］
このように、第一の実施形態に係る特定装置１０は、解析対象のマルウェア１１を監視し、該マルウェア１１と、通信先からダウンロードされたダウンロードデータと、マルウェア１１またはダウンロードデータの通信先との間で行われるデータの受け渡し関係をログデータとして取得する。そして、特定装置１０は、取得されたログデータを用いて、マルウェア、ダウンロードデータおよび通信先をノードとし、各ノードの依存関係をエッジとする有向グラフである依存関係グラフを作成する。そして、特定装置１０は、作成された依存関係グラフの各ノードを既知の悪性情報と照合して悪性なノードを検出し、該悪性なノードを基点としてエッジを終点から始点方向へと辿っていき、辿ったノードを新たな悪性なノードとして特定する。このため、悪性なサイトや悪性なダウンロードデータを適切に特定することが可能である。つまり、特定装置１０は、マルウェアダウンロードサイトを含む悪性通信先の特定に有用であり、実行データを悪性判定できない場合や、ダウンロードサイトが多段で構成されている場合に効果的である。
【００７６】
例えば、特定したノードが通信先であれば、そのノードはマルウェアダウンロードサイトとして検出することができる。また、マルウェア１１が行った正規サイトへの通信は、既知の悪性情報から辿っていけない（エッジが終点から始点方向へ繋がらない）ため、正規サイトを誤ってマルウェアダウンロードサイトとして誤って検知しないという効果も奏する。
【００７７】
（システム構成等）
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。例えば、作成部１５と特定部１６を統合してもよい。
【００７８】
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７９】
（プログラム）
また、上記実施形態に係る特定装置１０が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。この場合、コンピュータがプログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるプログラムをコンピュータで読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、特定装置１０と同様の機能を実現する特定プログラムを実行するコンピュータの一例を説明する。
【００８０】
図８は、特定プログラムを実行するコンピュータを示す図である。図８に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００８１】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１０４１に接続される。ディスクドライブ１０４１には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００８２】
ここで、図８に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した各テーブルは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００８３】
また、特定プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、ハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明した特定装置１０が実行する各処理が記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００８４】
また、特定プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００８５】
なお、特定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、特定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８６】
１０  特定装置
１０ａ  マルウェア実行環境部
１１  マルウェア
１２  ゲストＯＳ
１３  仮想計算機
１３ａ  命令監視部
１３ｂ  データフロー解析部
１４  ログＤＢ
１５  作成部
１６  特定部
２０  悪性情報ＤＢ
【図１】
2016060067.tif 000003
【図２】
2016060067.tif 000004
【図３】
2016060067.tif 000005
【図４】
2016060067.tif 000006
【図５】
2016060067.tif 000007
【図６】
2016060067.tif 000008
【図７】
2016060067.tif 000009
【図８】
2016060067.tif 000010
【国際調査報告】
2016060067.tif 000011
2016060067.tif 000012
2016060067.tif 000013
2016060067.tif 000014