(57)【要約】  ブラウザエミュレータマネージャ（２３）は、ブラウザエミュレータ（２５）よりウェブサイトへアクセスさせる。そして、ブラウザエミュレータ（２５）は、ウェブサイトにアクセスすることにより発生した、ブラウザ上のコンテンツ解釈やスクリプト実行を追跡し、転送を検知した場合に、その転送方法と転送元URLおよび転送先URLを転送情報に記録し、また、スクリプト実行を検知した場合に、その実行方法や実行元スクリプトを転送情報に記録する。そして、グラフ構築部（２７４）は、転送情報に基づき有向グラフを構築する。その後、グラフ解析部（２７５）は、有向グラフを辿ることで、当該転送の原因となったコンテンツやスクリプトの箇所を特定する。
2017077847.tif 000002
【特許請求の範囲】
【請求項１】
ウェブサイトのコンテンツおよびスクリプトを解析する解析装置であって、
ブラウザを用いて前記ウェブサイトにアクセスするアクセス部と、
前記ウェブサイトのスクリプトの実行により、他のウェブサイトへ転送されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記転送に用いられた前記スクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録し、また、前記ウェブサイトのスクリプトが、新たなスクリプトを生成するとき、前記ウェブサイトにおける実行元スクリプトとして前記新たなスクリプトの生成元スクリプトの識別情報、生成されたスクリプトとして前記新たなスクリプトの識別情報、および、スクリプト実行方法として前記生成に用いられた前記生成元スクリプトの関数名またはプロパティ名を転送情報に記録するスクリプト解析部と、
前記転送情報に記録された転送元URLおよび転送先URLをノードとし、また、前記転送元URLにおける実行元スクリプトおよび生成されたスクリプトを前記転送元URLのノードに内包されるノードとし、前記転送情報に記録された転送方法およびスクリプトの実行方法をエッジとし、前記ブラウザがアクセスした一連のウェブサイトのURL、前記URLへの転送方法、転送に用いられたスクリプト、および、前記スクリプトの実行方法を示した有向グラフを構築するグラフ構築部と
を備えることを特徴とする解析装置。
【請求項２】
前記ウェブサイトへのアクセス時におけるHTTP応答が、転送を通知するHTTP応答である場合、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記ウェブサイトからのHTTP応答ヘッダに含まれる転送先URL、前記転送先URLへの転送方法として前記HTTP応答ヘッダに含まれるHTTPステータスコード番号を転送情報に記録するHTTPヘッダ解析部と、
前記ウェブサイトへのアクセス時におけるHTTP応答が、転送を通知するHTTP応答ではない場合において、前記ウェブサイトのコンテンツのHTMLタグの解釈により、他のウェブサイトへ転送されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記HTMLタグを転送情報に記録するコンテンツ解析部と
をさらに備えることを特徴とする請求項１に記載の解析装置。
【請求項３】
前記スクリプト解析部は、
前記スクリプトの実行により、前記ウェブサイトのコンテンツに、他のウェブサイトへの転送を指示するHTMLタグが挿入されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記HTMLタグと前記HTMLタグを挿入したスクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録することを特徴とする請求項１に記載の解析装置。
【請求項４】
前記スクリプト解析部は、
前記ウェブサイトのコンテンツの解釈により、他のウェブサイトから読み込んだスクリプトを実行し、異なるウェブサイトへ転送されるとき、転送元URLとして前記他のウェブサイトのURL、転送先URLとして前記異なるウェブサイトのURL、転送方法として前記転送に用いられたスクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録することを特徴とする請求項１に記載の解析装置。
【請求項５】
前記有向グラフを構成するいずれかのノードを起点として、前記有向グラフのルートとなるノードまで逆順に辿ることで、前記有向グラフのルートとなるノードから前記起点としたノードに至るまでの転送過程、スクリプトの実行過程、および、前記起点としたノードへの転送を発生させる原因となったコンテンツの箇所またはスクリプトの箇所を解析する解析部をさらに備えることを特徴とする請求項１に記載の解析装置。
【請求項６】
ウェブサイトのコンテンツおよびスクリプトを解析する解析方法であって、
ブラウザを用いて前記ウェブサイトにアクセスするステップと、
前記ウェブサイトのスクリプトの実行により、他のウェブサイトへ転送されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記転送に用いられた前記スクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録し、また、前記ウェブサイトのスクリプトが、新たなスクリプトを生成するとき、前記ウェブサイトにおける実行元スクリプトとして前記新たなスクリプトの生成元スクリプトの識別情報、生成されたスクリプトとして前記新たなスクリプトの識別情報、および、スクリプト実行方法として前記生成に用いられた前記生成元スクリプトの関数名またはプロパティ名を転送情報に記録するステップと、
前記転送情報に記録された転送元URLおよび転送先URLをノードとし、また、前記転送元URLにおける実行元スクリプトおよび生成されたスクリプトを前記転送元URLのノードに内包されるノードとし、前記転送情報に記録された転送方法およびスクリプトの実行方法をエッジとし、前記ブラウザがアクセスした一連のウェブサイトのURL、前記URLへの転送方法、転送に用いられたスクリプト、および、前記スクリプトの実行方法を示した有向グラフを構築するステップと
を含んだことを特徴とする解析方法。
【請求項７】
ウェブサイトのコンテンツおよびスクリプトを解析するための解析プログラムであって、
ブラウザを用いて前記ウェブサイトにアクセスするステップと、
前記ウェブサイトのスクリプトの実行により、他のウェブサイトへ転送されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記転送に用いられた前記スクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録し、また、前記ウェブサイトのスクリプトが、新たなスクリプトを生成するとき、前記ウェブサイトにおける実行元スクリプトとして前記新たなスクリプトの生成元スクリプトの識別情報、生成されたスクリプトとして前記新たなスクリプトの識別情報、および、スクリプト実行方法として前記生成に用いられた前記生成元スクリプトの関数名またはプロパティ名を転送情報に記録するステップと、
前記転送情報に記録された転送元URLおよび転送先URLをノードとし、また、前記転送元URLにおける実行元スクリプトおよび生成されたスクリプトを前記転送元URLのノードに内包されるノードとし、前記転送情報に記録された転送方法およびスクリプトの実行方法をエッジとし、前記ブラウザがアクセスした一連のウェブサイトのURL、前記URLへの転送方法、転送に用いられたスクリプト、および、前記スクリプトの実行方法を示した有向グラフを構築するステップと
をコンピュータに実行させることを特徴とする解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法、および、解析プログラムに関する。
【背景技術】
【０００２】
ドライブバイダウンロード攻撃（Drive-by  Download攻撃）は、攻撃の起点となるウェブサイト（以下、入口URLと呼ぶ。）にアクセスしたクライアントを、主にHTML（HyperText  Markup  Language）タグやJavaScript（登録商標）等のコードを用いて複数のウェブサイト（以下、踏台URLと呼ぶ。）へ転送した後、攻撃コードを実行する悪性なウェブサイト（以下、攻撃URLと呼ぶ。）へ転送する。クライアントが攻撃URLにアクセスすると、ブラウザやブラウザのプラグイン（以下、プラグインと呼ぶ。）の脆弱性を悪用する攻撃コードが実行され、クライアントは特定のウェブサイト（以下、マルウェア配布URLと呼ぶ。）からコンピュータウィルスなどの悪性プログラム（マルウェア）をダウンロード、インストールしてしまう。【０００３】
特定のURLへ転送する方法は、HTMLタグで指定したURLへ転送する方法やJavaScript等のコードを用いて指定したURLへ転送する方法、HTTP（HyperText  Transfer  Protocol）の300番台ステータスコードを用いて転送する方法等、様々である。また、JavaScript等のコードでHTMLタグを動的に生成し、ブラウザに読み込んだHTMLに挿入することで、挿入したHTMLタグに指定されたURLへ転送することもできる（以下、転送コードと呼ぶ。）。ドライブバイダウンロード攻撃では、様々な転送コードを組み合わせて、入口URLにアクセスしてきたクライアントをマルウェア配布URLへ転送する。【０００４】
入口URLに使用されるウェブサイトは、スパムメールやSNS（Social  Network  Service）のメッセージングサービスに含まれるURLのウェブサイトや攻撃者によって不正に改ざんされた一般のウェブサイトであることが多い。中でも、ウェブサイト改ざんにより一般ウェブサイトが入口URLとなり、ドライブバイダウンロード攻撃に加担させられる事例は影響力が大きく、多くのマルウェア感染被害を引き起こす要因となっている。このようなウェブサイト改ざんは後を絶たず、改ざんされたことをいち早く検知し、改ざんされたウェブサイトのコンテンツ（例えば、改ざんにより挿入された転送コード）を特定、修正することで、ドライブバイダウンロード攻撃による感染拡大を防ぐ必要がある。【０００５】
ドライブバイダウンロード攻撃を検知する手法は、マルウェア配布URLからマルウェアをダウンロードすることにより生じるファイルシステムの変化を検知する手法（非特許文献１参照）やJavaScriptをブラウザのエミュレータ（以下、ブラウザエミュレータと呼ぶ。）で実行し、実行結果を解析することで悪性なJavaScriptを検知する手法（非特許文献２参照）等が知られている。【０００６】
そのほか、入口URLからマルウェア配布URLまでのリンク構造を特定し、マルウェア配布URLから逆順にリンク構造を辿ることで、当該悪性ウェブサイトの近傍に存在する悪性ウェブサイトを効率的に探索する手法（非特許文献３参照）や複数のウェブサイト巡回により収集したリンク構造を用いて、各リンク構造に共通するURLを特定することで、ドライブバイダウンロード攻撃を仕掛ける攻撃URLやマルウェア配布URLといった悪性URLへのアクセスを効率良く検知、遮断するURLシグネチャ生成手法（非特許文献４参照）等が知られている。【０００７】
しかし、上述した手法はいずれも、悪性URLを検知する手法であり、検知した悪性URLのウェブサイトにおいて、攻撃に関与しているコンテンツやスクリプトまでは特定できない。すなわち、入口URLが改ざんされたウェブサイトであった場合に、ウェブサイトのコンテンツのどの箇所が改ざんされた箇所なのかまでは特定できない。【０００８】
ウェブサイト改ざんを検知する手法は、改ざんされる前のコンテンツ（オリジナルコンテンツ）と改ざんされたコンテンツと比較する手法が知られている。例えば、HTMLをオリジナルコンテンツとして比較検知する手法（非特許文献５参照）やJavaScriptの著名なライブラリやフレームワークをオリジナルコンテンツとして比較検知する手法（非特許文献６参照）等が知られている。【０００９】
そのほか、あらかじめ管理するウェブサーバ上に保存してあるファイルを監視し、ファイルの内容変更や削除といった操作を検出した場合に、ウェブサーバ管理者へメール通知するTripWire（非特許文献７参照）というツールもある。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】L.  Lu,  V.  Yegneswaran,  P.  Porras,  and  W.  Lee,  “BLADE  :  An  Attack-Agnostic  Approach  for  Preventing  Drive-By  Malware  Infections”,  in  Proceedings  of  the  ACM  Conference  on  Computer  and  Communications  Security  (CCS),  2010.,[平成27年7月24日検索],インターネット＜URL：http://www.csl.sri.com/users/vinod/papers/blade.pdf＞
【非特許文献２】M.  Cova,  C.  Kruegel,  and  G.  Vigna,  “Detection  and  Analysis  of  Drive-by-Download  Attacks  and  Malicious  JavaScript  Code”,  in  Proceedings  of  the  World  Wide  Web  Conference  (WWW),  2010.,[平成27年7月24日検索],インターネット＜URL：http://www.cs.ucsb.edu/~vigna/publications/2010_cova_kruegel_vigna_Wepawet.pdf＞
【非特許文献３】J.  W.  Stokes,  R.  Andersen,  C.  Seifert,  and  K.  Chellapilla,  “WebCop  :  Locating  Neighborhoods  of  Malware  on  the  Web”,  in  Proceedings  of  3rd  USENIX  conference  on  Large-scale  exploits  and  emergent  threats  (LEET),  2010.,[平成27年7月24日検索],インターネット＜URL：https://www.usenix.org/legacy/event/leet10/tech/full_papers/Stokes.pdf＞
【非特許文献４】J.  Zhang,  C.  Seifert,  J.  W.  Stokes,  and  W.  Lee,  “ARROW:  Generating  Signatures  to  Detect  Drive-by  Downloads”,  in  Proceedings  of  the  World  Wide  Web  Conference  (WWW),  2011.,[平成27年7月24日検索],インターネット＜URL：http://research.microsoft.com:8082/pubs/150143/zhangArrow.pdf＞
【非特許文献５】K.  Borgolte,  C.  Kruegel,  and  G.  Vigna,“Delta  :  Automatic  Identification  of  Unknown  Web-based  Infection  Campaigns”,  in  Proceedings  of  the  ACM  Conference  on  Computer  and  Communications  Security  (CCS),  2013.,[平成27年7月24日検索],インターネット＜https://www.cs.ucsb.edu/~chris/research/doc/ccs13_delta.pdf＞
【非特許文献６】Z.  Li,  S.  Alrwais,  X.  Wang,  and  E.  Alowaisheq,“Hunting  the  Red  Fox  Online:  Understanding  and  Detection  of  Mass  Redirect-Script  Injections”,  in  Proceedings  of  the  IEEE  Symposium  on  Security  and  Privacy  (S&P),  2014.,[平成27年7月24日検索],インターネット＜http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6956553＞
【非特許文献７】TripWire  Inc.,“TripWire”,[平成27年7月24日検索],インターネット＜http://www.tripwire.org/＞
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかし、前記したウェブサイト改ざん検知手法は、改ざん前のコンテンツが必要であったり、自身が管理するウェブサーバ上のウェブサイトしか対応していなかったり、制限が存在する。このため、ドライブバイダウンロード攻撃において、転送の原因となったコンテンツの箇所やスクリプトの箇所、転送に関連したURLを特定することが困難な場合があった。そこで、本発明は、前記した問題を解決し、ドライブバイダウンロード攻撃において、転送の原因となったコンテンツの箇所やスクリプトの箇所、転送に関連したURLを特定することを課題とする。
【課題を解決するための手段】
【００１２】
前記した課題を解決するため、本発明は、ウェブサイトのコンテンツおよびスクリプトを解析する解析装置であって、ブラウザを用いて前記ウェブサイトにアクセスするアクセス部と、前記ウェブサイトのスクリプトの実行により、他のウェブサイトへ転送されるとき、転送元URLとして前記ウェブサイトのURL、転送先URLとして前記他のウェブサイトのURL、前記転送先URLへの転送方法として前記転送に用いられた前記スクリプトの関数名またはプロパティ名、実行元スクリプトとして前記スクリプトの識別情報を転送情報に記録し、また、前記ウェブサイトのスクリプトが、新たなスクリプトを生成するとき、前記ウェブサイトにおける実行元スクリプトとして前記新たなスクリプトの生成元スクリプトの識別情報、生成されたスクリプトとして前記新たなスクリプトの識別情報、および、スクリプト実行方法として前記生成に用いられた前記生成元スクリプトの関数名またはプロパティ名を転送情報に記録するスクリプト解析部と、前記転送情報に記録された転送元URLおよび転送先URLをノードとし、また、前記転送元URLにおける実行元スクリプトおよび生成されたスクリプトを前記転送元URLのノードに内包されるノードとし、前記転送情報に記録された転送方法およびスクリプトの実行方法をエッジとし、前記ブラウザがアクセスした一連のウェブサイトのURL、前記URLへの転送方法、転送に用いられたスクリプト、および、前記スクリプトの実行方法を示した有向グラフを構築するグラフ構築部とを備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、ドライブバイダウンロード攻撃において、転送の原因となったコンテンツの箇所やスクリプトの箇所、転送に関連したURLを特定することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本実施形態のシステム構成例を示す図である。
【図２】図２は、ブラウザエミュレータマネージャの構成例を示す図である。
【図３Ａ】図３Ａは、HTTP要求ヘッダの例を示す図である。
【図３Ｂ】図３Ｂは、HTTP応答ヘッダの例を示す図である。
【図４】図４は、URLを参照するHTMLタグの例を示す図である。
【図５Ａ】図５Ａは、JavaScriptによる転送に使用される関数およびプロパティの例を示す図である。
【図５Ｂ】図５Ｂは、HTMLタグや属性を操作するJavaScriptの関数およびプロパティの例を示す図である。
【図６】図６は、内部参照のJavaScriptによる転送の例を示す図である。
【図７】図７は、外部参照のJavaScriptによる転送の例を示す図である。
【図８】図８は、転送の有向グラフの構築例を示す図である。
【図９】図９は、スクリプト実行の有向グラフを内包するよう拡張した転送の有向グラフの例を示す図である。
【図１０Ａ】図１０Ａは、既存手法で構築される転送の有向グラフの例を示す図である。
【図１０Ｂ】図１０Ｂは、本実施形態のグラフ構築部で構築される転送の有向グラフの例を示す図である。
【図１１Ａ】図１１Ａは、解析情報データベースに蓄積されるアクセスログの例を示す図である。
【図１１Ｂ】図１１Ｂは、解析情報データベースに蓄積される転送情報の例を示す図である。
【図１２】図１２は、システム処理手順の例を示すフローチャートである。
【図１３】図１３は、ウェブサイト挙動解析の例を示すフローチャートである。
【図１４】図１４は、スクリプトの動的解析の例を示すフローチャートである。
【図１５】図１５は、解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら、本発明を実施するための形態（実施形態）について説明する。なお、本発明は本実施形態に限定されない。
【００１６】
まず、図１を用いて本実施形態のシステム構成例を説明する。システムは、例えば、図１に示すようにネットワーク１とネットワーク２とを備える。ネットワーク１とネットワーク２とはパケット転送装置３により接続される。
【００１７】
ネットワーク１は、解析対象ウェブサイト１２を備える。ネットワーク１は、インターネットのように広域なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークである場合やクラウド環境やホスティング環境のネットワークであってもよい。
【００１８】
解析対象ウェブサイト１２は、ブラウザエミュレータマネージャ（解析装置）２３による解析対象ウェブサイトである。この解析対象ウェブサイト１２は、例えば、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイトや検索エンジンから収集できるウェブサイト等である。
【００１９】
また、ネットワーク２は、ブラウザエミュレータマネージャ２３と、解析情報データベース２４と、グラフ記憶部２８とを備える。ネットワーク２は、ローカルエリアネットワークのように小規模なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークである場合やクラウド環境やホスティング環境のネットワークであってもよい。
【００２０】
ブラウザエミュレータマネージャ２３は、１以上のブラウザエミュレータ２５を管理し、このブラウザエミュレータ２５に所定のウェブサイト（解析対象ウェブサイト１２）へアクセスさせる。そして、ブラウザエミュレータマネージャ２３は、ブラウザエミュレータ２５がアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコンテンツやスクリプトの解析により得られた情報を解析情報データベース２４へ蓄積する。
【００２１】
ブラウザエミュレータ２５は、ブラウザの動作を模擬する装置である。このブラウザエミュレータ２５は、例えば、ハニーネットプロジェクトが提供しているブラウザエミュレータや、オープンソースとして開発されたHtmlUnitやPhantom  JSが適用できるが、これらに限るものではない。このブラウザエミュレータ２５の詳細は後記する。なお、図１においてブラウザエミュレータ２５は、ブラウザエミュレータマネージャ２３内に構築されるように描かれているが、ブラウザエミュレータマネージャ２３外に構築されてももちろんよい。
【００２２】
解析情報データベース２４は、ブラウザエミュレータ２５がアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコンテンツの解釈により発生した転送に関する情報等を蓄積する。この解析情報データベース２４における情報の保存は、RDBMS（Relational  DataBase  Management  System）を用いてもよいし、テキスト形式で保存してもよい。この解析情報データベース２４の詳細は後記する。
【００２３】
グラフ記憶部２８は、ブラウザエミュレータマネージャ２３により構築されたURL間の転送を示す有向グラフ（図９、図１０Ａ、図１０Ｂ参照）を記憶する。この有向グラフの詳細は後記する。
【００２４】
なお、本実施形態では、ブラウザエミュレータマネージャ２３、ブラウザエミュレータ２５および解析情報データベース２４を同じネットワークに配置しているが、それぞれ別のネットワークに配置してもよい。また、各構成をセキュアに接続するため、既存の暗号技術を適用して通信情報を暗号化したり、各機能が配置されたネットワーク間または各機能間をVPN（Virtual  Private  Network）で接続したりしてもよい。
【００２５】
次に、図２を用いてブラウザエミュレータマネージャ２３およびブラウザエミュレータ２５を詳細に説明する。ブラウザエミュレータマネージャ２３はブラウザエミュレータ２５、制御部２７を備える。制御部２７は、ブラウザエミュレータマネージャ２３の備えるホストシステム２６上でブラウザエミュレータ２５を動作させる。このホストシステム２６は、例えば、ブラウザエミュレータマネージャ２３が備えるOSを用いる。制御部２７の詳細は後記する。
【００２６】
（ブラウザエミュレータ）
次に、ブラウザエミュレータ２５を説明する。ブラウザエミュレータ２５は、クライアント環境模擬部２５１と、アクセス部２５２と、HTTPヘッダパーサ部２５３と、コンテンツパーサ部２５４と、スクリプトインタプリタ部２５５とを備える。HTTPヘッダパーサ部２５３は、HTTPヘッダ解析部２５６を備え、コンテンツパーサ部２５４はコンテンツ解析部２５７を備え、スクリプトインタプリタ部２５５はスクリプト解析部２５８を備える。このHTTPヘッダ解析部２５６、コンテンツ解析部２５７、スクリプト解析部２５８は、ブラウザエミュレータ２５が解析対象ウェブサイト１２から取得したコンテンツを解析し、異なるウェブサイトへの転送を検知した場合に、転送元URL、転送先URL、転送方法等を記録する。HTTPヘッダ解析部２５６、コンテンツ解析部２５７、スクリプト解析部２５８の詳細は後記する。
【００２７】
クライアント環境模擬部２５１は、ブラウザエミュレータ２５で模擬するクライアント環境（例えば、OS、ブラウザ、プラグイン等）の情報を設定する。
【００２８】
アクセス部２５２は、ウェブサイト（例えば、図１の解析対象ウェブサイト１２）と、HTTPまたはHTTPS（HyperText  Transfer  Protocol  Secure）による通信を行い、当該HTTP通信時にHTTPヘッダ情報およびHTTPボディ情報（コンテンツ）を取得する。このアクセス部２５２には、例えば、フリーソフトウェアとして開発されたcURLを用いる。
【００２９】
また、アクセス部２５２は、ウェブサイトのアクセス結果をログとして記録する。例えば、アクセス部２５２は、アクセスしたウェブサイトのURLや、アクセスした日時、アクセス時のブラウザの環境情報をログとして記録する。また、ログには当該ウェブサイトへのアクセスにより、異なるウェブサイトへの転送が発生した場合に、HTTPヘッダ解析部２５６、コンテンツ解析部２５７、スクリプト解析部２５８により特定した転送先URL、転送元URL、転送方法等も記録される。つまり、ログには、アクセス部２５２がアクセスしたウェブサイトのURL、当該URLへアクセスした日時、当該URLへのアクセス時におけるブラウザの環境情報等の情報（アクセスログ）と、転送が発生した場合の転送先URL、転送元URL、転送方法等の情報（転送情報）との２種類の情報がある。このログは後記する登録処理部２７３により解析情報データベース２４に登録される。
【００３０】
HTTPヘッダパーサ部２５３は、アクセス部２５２で取得したHTTPヘッダ情報を解釈する。HTTPヘッダ情報を解釈した結果は、HTTPヘッダ解析部２５６を用いて解析する。
【００３１】
HTTPヘッダ解析部２５６は、HTTPによる転送コードを特定するため、HTTPヘッダパーサ部２５３でHTTPヘッダ情報を解釈した結果を解析する。具体的には、HTTPヘッダ解析部２５６は、HTTP応答ヘッダのHTTPステータスコードの番号が300番台（転送を通知するHTTPステータスコード）であった場合に、転送先URLはHTTP応答ヘッダのLocationフィールドのURL、転送元URLは当該HTTP応答に対するHTTP要求ヘッダの要求URLを記録し、転送方法はHTTPステータスコードの番号を記録する。
【００３２】
図３ＡはHTTP要求ヘッダの例を示し、図３Ｂは図３Ａに示すHTTP要求ヘッダに対するHTTP応答ヘッダの例を示す。例えば、図３Ｂに示すHTTP応答ヘッダの内容により、HTTP応答が「HTTP/1.1  301  Moved  Permanently」による転送コードであることが分かる。また、図３Ｂに示すHTTP応答ヘッダのLocationフィールドの情報から転送先URLは「http://redirect.example/」であることが分かる。また、図３Ａに示すHTTP要求ヘッダのHostフィールドの情報から転送元URLは「http://landing.example/」であることが分かる。したがって、HTTPヘッダ解析部２５６は、転送先URLとして「http://redirect.example/」、転送元URLとして「http://landing.example/」、転送方法として「HTTP/1.1  301  Moved  Permanently」を記録する。
【００３３】
コンテンツパーサ部２５４は、アクセス部２５２で取得したコンテンツを解釈する。コンテンツを解釈した結果は、コンテンツ解析部２５７を用いて解析する。また、当該コンテンツにスクリプトが含まれている場合、スクリプトインタプリタ部２５５を用いて当該スクリプトを解釈する。例えば、コンテンツがHTMLやXML（Extensible  Markup  Language）であった場合、コンテンツパーサ部２５４は、オープンソースとして開発されたNekoHTMLやBeautifulSoup等のHTML/XMLパーサを用いて、コンテンツを解釈する。
【００３４】
コンテンツ解析部２５７は、コンテンツ中からURLを参照するHTMLタグを特定するため、コンテンツパーサ部２５４でコンテンツを解釈した結果を解析する。具体的には、コンテンツ解析部２５７は、コンテンツがHTMLで記述され、かつ、コンテンツにURLが指定された属性を持つHTMLタグが含まれていた場合、転送先URLは当該指定されたURL、転送元URLは当該コンテンツのURLを記録し、転送方法はHTMLタグ名を記録する。
【００３５】
URLを参照するHTMLタグの例を図４に示す。図４の一行目に示すHTMLタグ（iframeタグ）の場合、転送元URLは当該HTMLタグが含まれるコンテンツのURL、転送先URLは「http://tag.example/」となり、転送方法は「iframe」となる。したがって、コンテンツ解析部２５７は、転送先URLとして「http://tag.example/」、当該iframeタグが含まれるコンテンツのURL、転送方法として「iframe」を記録する。なお、図４に示したHTMLタグは、指定されたURLを参照するHTMLタグを網羅的に列挙しているわけではないが、いずれもブラウザが読み込んだ時点で、指定されたURLを自動的に参照するHTMLタグを列挙している。もちろん図４に示したHTMLタグ以外のURLを参照するHTMLタグを解析対象に加えてもよいし、加えなくてもよい。
【００３６】
スクリプトインタプリタ部２５５は、コンテンツパーサ部２５４で取得されたスクリプトを解釈する。例えば、スクリプトがJavaScriptにより記述されている場合、スクリプトインタプリタ部２５５は、オープンソースとして開発されたSpiderMonkeyやV8  JavaScript  Engine、Rhino等のJavaScriptインタプリタを用いて、スクリプトを解釈する。
【００３７】
スクリプト解析部２５８は、異なるURLへ転送するスクリプトを特定するため、スクリプトインタプリタ部２５５でスクリプトを解釈した結果を解析する。例えば、スクリプト解析部２５８は、コンテンツパーサ部２５４で取得されたスクリプトがJavaScriptであり、かつ、当該JavaScriptにより指定されたURLへ転送する関数の呼び出しまたはプロパティ代入が実行された場合を考える。この場合、スクリプト解析部２５８は、転送先URLとして当該JavaScriptにより指定されたURLを記録し、転送元URLとして当該JavaScriptを含むコンテンツのURLを記録し、転送方法として当該JavaScriptにより呼び出された関数名またはプロパティ名を記録する。また、スクリプト解析部２５８は、当該JavaScriptのハッシュ値等を実行元スクリプトとして記録する。指定されたURLへ転送する関数呼び出しおよびプロパティ代入のスクリプトの例を図５Ａに示す。図５Ａの一行目に示すプロパティ代入のスクリプトの場合、転送元URLは当該スクリプトを含むコンテンツのURL、転送先URLは「http://js.example/」となり、転送方法は「location.href」となる。なお、以下の説明においてスクリプトの識別情報として、当該スクリプトのハッシュ値を用いることとしたがこれ以外の識別情報を用いてももちろんよい。
【００３８】
また、スクリプトの中には、HTMLタグを生成し、生成したHTMLタグを、当該スクリプトを読み込んだコンテンツに挿入したり、属性を操作したりするスクリプトもある。このようなスクリプト（JavaScript）の例を、図５Ｂに示す。
【００３９】
例えば、JavaScriptによりコンテンツに挿入されたHTMLタグが、図４に示すいずれかのHTMLタグであった場合、生成したHTMLタグに指定されたURLへの転送が発生する。例えば、図５Ｂの一行目に示すJavaScriptの場合、転送元URLは当該JavaScriptが含まれるコンテンツのURL、転送先URLはscriptタグに指定されたURLとなり、転送方法は「script」となる。このとき、単純なHTMLタグによる転送とJavaScriptにより挿入されたHTMLタグによる転送とを区別するため、挿入されたHTMLタグに識別子（例えば、HTMLタグが指定するURL）を設定し、「document.write」という転送方法とともに一意に特定できるようにする。つまり、スクリプト解析部２５８は、図５Ｂの一行目に示すJavaScriptによりscriptタグが挿入される場合、転送方法は「script」ではなく「document.writeおよびscript」を記録する。これにより、後記するグラフ解析部２７５は、転送先URLへの転送が単純なHTMLタグによる転送ではなく、スクリプトにより挿入されたHTMLタグによる転送であることを特定できる。
【００４０】
なお、スクリプト解析部２５８の解析対象は、図５Ａおよび図５Ｂに示したJavaScriptの関数やプロパティ以外の関数やプロパティであってももちろんよい。
【００４１】
また、上記のようなスクリプトによるHTMLタグの生成と挿入は、同一コンテンツ内のHTMLおよびスクリプトであれば、転送元URLと転送先URLを正しく特定できる。例えば、図６に示すように、アクセス部２５２がアクセスしたURLがURL1であり、このURL1のコンテンツ内のJavaScriptの実行によりiframeタグを生成し（（１））、このiframeタグによりURL2が参照される（（２））場合を考える。この場合、転送元URL（URL1）と転送先URL（URL2）は、従来技術においても正しく特定できる。しかし、スクリプトによるHTMLタグの生成と挿入が、外部のウェブサイトのコンテンツのHTMLおよびスクリプトを参照したものである場合、従来技術では、転送元URLの情報が欠落する場合がある。
【００４２】
このことを、図７を用いて説明する。図７においてアクセス部２５２が最初にアクセスしたURLをURL1とし、URL1のscriptタグの参照先URLをURL2とし、URL2のJavaScriptの実行により生成されるiframeタグの参照先URLをURL3とする。このような場合、アクセス部２５２がURL1にアクセスすると、このURL1のコンテンツ内のscriptタグにより、URL2を参照し（（１））、URL2のJavaScriptの実行によりiframeタグを生成し（（２））、生成したiframeタグによりURL3が参照される（（３））。
【００４３】
このときコンテンツ解析部２５７によるHTMLタグの解析により、転送元URLはURL1、転送先URLはURL3と特定できる。また、通常のブラウザの実装においても、参照元URLが記録されるHTTP要求ヘッダのリファラ（Referer）フィールドに、URL2への要求ではURL1が設定され、URL3への要求でもURL1が設定される。つまり、実際は、URL2のJavaScriptの実行が原因でURL3への要求が発生しているため、転送元URLはURL2、転送先URLはURL3というURL2からURL3への転送情報が必要である。しかし、従来技術におけるHTMLタグによる特定やリファラ情報による特定では、当該転送情報は欠落してしまう。
【００４４】
そこで、スクリプト解析部２５８は、外部のウェブサイトのスクリプトを実行する際に、当該スクリプトを含むウェブサイトのURL（例えば、上記のURL2）を別途記録し、当該URLを転送元URLに設定する。そして、スクリプト解析部２５８は、当該スクリプトの実行により別のURL（例えば、URL3）への要求が発生したことを捉えると、転送元URLを上記の外部のウェブサイト（例えば、URL2）、転送先URLを当該スクリプトの実行による要求先のURL（例えば、URL3）とした転送情報を記録する。つまり、スクリプト解析部２５８は、上記のURL2からURL3への転送情報を記録する。
【００４５】
また、JavaScript等のスクリプトの中には、新たなスクリプトを生成するものもある。このようなスクリプトの動的生成は、コードの難読化や所定時間間隔を置いたコード実行等に用いられ、eval、setInterval、setTimeout等の関数が用いられる。
【００４６】
スクリプト解析部２５８は、上記のように動的に生成されるスクリプトによる転送を特定するため、当該スクリプトの実行において呼び出される関数を監視し、実行処理を追跡する。例えば、スクリプト解析部２５８は、当該スクリプトの実行において上記のeval、setInterval、setTimeout等の関数が用いられたことを捉えると、新たに生成されたスクリプトの生成元のスクリプトのハッシュ値、新たに生成されたスクリプトのハッシュ値、生成元のスクリプトの実行方法（例えば、生成元スクリプトにより呼び出された関数名またはプロパティ名）を記録する。なお、スクリプト解析部２５８がスクリプトの実行を追跡する際に、スクリプトのハッシュ値ではなくスクリプトそのものを記録してももちろんよい。
【００４７】
（制御部）
次に、制御部２７を説明する。制御部２７は、URLリスト作成部２７１と、アクセス指示部２７２と、登録処理部２７３と、グラフ構築部２７４と、グラフ解析部２７５とを備える。
【００４８】
URLリスト作成部２７１は、各ブラウザエミュレータ２５が巡回するウェブサイト（解析対象ウェブサイト１２）のURLリストである巡回対象URLリストを作成する。例えば、URLリスト作成部２７１は、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイトのURLをもとに巡回対象URLリストを作成する。
【００４９】
アクセス指示部２７２は、各ブラウザエミュレータ２５のアクセス部２５２へ巡回対象URLリスト（URLリスト）に示されるURLへのアクセスを指示する。
【００５０】
登録処理部２７３は、各ブラウザエミュレータ２５のログを取得し、解析情報データベース２４に登録する。
【００５１】
グラフ構築部２７４は、解析情報データベース２４の転送情報を結合し、解析対象ウェブサイト１２へのアクセスに起因して発生した転送を示す有向グラフを構築する。そして、グラフ構築部２７４は、構築した有向グラフをグラフ記憶部２８に出力する。この有向グラフは、転送情報に示される転送元URLや転送元URLをノードとし、転送方法をエッジとした有向グラフであり、例えば、図８に示す有向グラフである。
【００５２】
図８に示す有向グラフは、「http://a.example/」のiframタグにより「http://b.example/red1」に転送され、この「http://b.example/red1」のスクリプトのlocation.hrefという関数により「http://b.example/red2」に転送され、この「http://b.example/red2」のスクリプトのlocation.replaceという関数により、「http://b.example/exploit」に転送されることを示す。
【００５３】
また、グラフ構築部２７４は、上記のような有向グラフに、スクリプト実行処理の追跡結果を反映した有向グラフを内包するよう加える。例えば、グラフ構築部２７４は、図８に示す有向グラフをベースとし、当該有向グラフに、スクリプト実行処理の追跡結果を反映した有向グラフを内包するよう加え、図９に示す有向グラフを構築する。つまり、グラフ構築部２７４は、解析情報データベース２４の転送情報を参照して、「http://b.example/red1」に含まれるスクリプト「JavaScript  A」のノードをノード「http://b.example/red1」内に加える。また、グラフ構築部２７４は、「http://b.example/red2」に含まれるスクリプト「JavaScript  B」のノードを、ノード「http://b.example/red2」内に加え、また、スクリプト「JavaScript  B」により生成されたスクリプト「JavaScript  C」もノード「http://b.example/red2」内に加える。また、グラフ構築部２７４はスクリプト「JavaScript  B」のノードとスクリプト「JavaScript  C」とをスクリプト「JavaScript  C」の実行に用いられた関数（eval）を示すエッジで接続する。また、グラフ構築部２７４は、「http://b.example/exploit」に含まれるスクリプト「JavaScript  D」のノードを「http://b.example/exploit」のノード内に加える。
【００５４】
このように、グラフ構築部２７４は、解析情報データベース２４の転送情報に基づき、HTMLタグによる転送は、転送元URLのコンテンツ内において、転送先URLを指定した転送方法のHTMLタグを探し出し、このHTMLタグを転送元URLのノードから転送先URLのノードへのエッジとする。また、グラフ構築部２７４は、スクリプトによる転送については、転送元URLのコンテンツ内において、転送先URLを指定した転送コードの実行元スクリプトを探し出す。そして、グラフ構築部２７４は、当該実行元スクリプトで用いられた関数を、転送元URLの実行元スクリプトのノードから転送先URLのノードへのエッジとする。なお、スクリプトが動的生成されている場合、グラフ構築部２７４は、最終的に生成されたスクリプトから生成元スクリプトを辿り、生成元スクリプトから生成されたスクリプトをエッジで接続する。
【００５５】
グラフ解析部２７５は、グラフ記憶部２８に記憶される有向グラフを解析し、解析結果を出力する。例えば、図９に示す有向グラフのノード「http://b.example/exploit」において、攻撃コードを含むJavaScript  Dを検知した場合に、グラフ解析部２７５は、このJavaScript  Dを出発点として有向グラフを逆順に辿り、図９のノード「http://b.example/red2」において生成された「JavaScript  C」やその生成元である「JavaScript  B」、ノード「http://b.example/red1」に含まれる「JavaScript  A」、ノード「http://a.example/」に含まれるiframeタグが攻撃に関与していることを特定できる。そして、この結果を解析結果として出力する。
【００５６】
すなわち、グラフ解析部２７５は、「http://a.example/」を入口URL、「http://b.example/red1」および「http://b.example/red2」を踏台URL、「http://b.example/exploit」を攻撃URLと特定し、また、「http://a.example/」に含まれるiframeタグが攻撃に関与していることを特定できる。これにより、例えば、a.exampleドメインのウェブサイトが一般のウェブサイトであった場合に、システムは、当該ウェブサイトの管理者に対して、上記で特定したiframeタグ（すなわち、改ざんされたと思われる箇所）を通知し、当該タグの削除の推奨等を行うことができる。
【００５７】
なお、グラフ構築部２７４は、外部のウェブサイトのコンテンツを参照した転送が行われる場合（図７参照）は、以下のようにして有向グラフを構築する。ここでは、比較のため、既存手法により構築される転送の有向グラフの例を図１０Ａに示す。また、本実施形態のグラフ構築部２７４により構築される転送の有向グラフの例を図１０Ｂに示す。
【００５８】
ここでは、「http://c.example/c.js」に含まれる「JavaScript  E」のdocument.writeという関数の実行により、「http://d.example/red3」へ転送するiframeタグが「http://c.example/test.html」に挿入され、当該iframeタグにより「http://d.example/red3」に転送された後、「http://d.example/red3」から、HTTP301により「http://d.example/exploit」に転送される場合を例に説明する。
【００５９】
このような場合、図１０Ａに例示する既存手法では、実際に転送が発生するiframeタグがノード「http://c.example/test.html」に挿入されるため、ノード「http://c.example/test.html」を起点にノード「http://c.example/c.js」およびノード「http://d.example/red3」へのエッジを持つ有向グラフが生成される。一方、本実施形態のグラフ構築部２７４によれば、転送情報に、「JavaScript  E」のdocument.writeという関数によりiframeタグが挿入されたことが記載されているので、図１０Ｂに例示する、ノード「http://d.example/red3」への転送が、ノード「http://c.example/c.js」に含まれる「JavaScript  Eのdocument.write＋iframeタグ（document.write/iframe）」による転送であることを特定できる。これにより、グラフ構築部２７４は、ノード「http://c.example/test.html」を起点に、ノード「http://c.example/c.js」を経由して、ノード「http://d.example/red3」へのエッジを持つ有向グラフを構築できる。
【００６０】
このようにグラフ構築部２７４が外部のウェブサイトのコンテンツを参照した転送についても、これを表現した有向グラフを構築することで、以下のような効果が得られる。例えば、図１０Ｂに示す有向グラフにおけるノード「http://d.example/exploit」に攻撃コードを含むJavaScript  Fを検知した場合に、グラフ解析部２７５は、図１０Ｂに示す有向グラフを逆順にたどることで、ノード「http://d.example/red3」、ノード「http://c.example/c.js」、このノード「http://c.example/c.js」に含まれるJavaScript  E、このJavaScript  Eにより挿入されるiframeタグ、ノード「http://c.example/test.html」に含まれるscriptタグ等が攻撃に関与していることを特定できる。
【００６１】
そして、仮に、c.exampleドメインのウェブサイトが一般のウェブサイトであった場合に、システムは、当該ウェブサイト管理者に対して、上記で特定したscriptタグ（すなわち、改ざんされたと思われる箇所）を通知し、当該タグの削除の推奨等を行うことができる。なお、改ざんされたと思われる箇所は、有向グラフを逆順にたどる過程で、ドメインに変更が生じるような転送が発生した箇所（例えば、JavaScript  E  のdocument.write）や、特定の方法による転送（例えば、document.writeによる転送）が発生した箇所であってもよい。
【００６２】
（解析情報データベース）
次に、解析情報データベース２４を説明する。解析情報データベース２４は、解析情報として、アクセスログと、転送情報とを記憶する。アクセスログは、例えば、図１１Ａに示すとおり、アクセスログの識別情報である「ID」、ブラウザエミュレータ２５が解析対象ウェブサイト１２のURLにアクセスした際にアクセスしたURLである「アクセスURL」、当該URLにアクセスした日時を表す「タイムスタンプ」、当該URLにアクセスした際にブラウザエミュレータ２５が模擬したクライアント環境情報を表す「環境情報」等を対応付けた情報である。また、転送情報は、例えば、図１１Ｂに示すとおり、どのIDのアクセスログに示されるアクセスURLを入口URLとした転送情報かを示す「ID」、転送またはスクリプトの実行がされた日時を表す「タイムスタンプ」、転送元URLを表す「転送元URL」、転送先URLを表す「転送先URL」、転送方法や実行方法を表す「方法」、転送コードが実行されたスクリプトの識別情報（例えば、ハッシュ値）を記録する「実行スクリプト」、スクリプト実行により動的生成されたスクリプトの識別情報（例えば、ハッシュ値）を記録する「生成されたスクリプト」等を対応付けた情報である。なお、アクセスログおよび転送情報は、上記以外の情報を含んでいてももちろんよい。
【００６３】
ここで、図１１Ａに示すアクセスログおよび図１１Ｂに示す転送情報を用いた、グラフ構築部２７４によるグラフ構築方法の例を説明する。
【００６４】
例えば、図１１ＡのID＝１に対応する「http://a.example/」へのアクセスは、図１１ＢのID＝１に対応する情報から、「http://a.example/」のiframeタグにより、「http://a.example/」から「http://b.example/red1」へ転送されることがわかる。続いて、「http://b.example/red1」では、スクリプト「0123456789abcdef」が実行され、location.hrefにより「http://b.example/red2」へ転送されることが分かる。次に、「http://b.example/red2」では、スクリプト「abcdef9876543210」はevalによりスクリプト「012345678901234」を生成することが分かる。そして、スクリプト「012345678901234」が実行され、location.replaceにより「http://b.example/exploit/」へ転送されることが分かる。
【００６５】
グラフ構築部２７４は、このように解析情報データベース２４の転送情報を辿ることで、入口URL「http://a.example/」から「http://b.example/exploit/」までの有向グラフを構築する（図９参照）。
【００６６】
また、図１１ＡのID＝５１に対応する「http://c.example/test.html」へのアクセスは、図１１ＢのID＝５１に対応する情報から、「http://c.example/test.html」のscriptタグにより、「http://c.example/test.html」から「http://c.example/c.js」へ転送されることが分かる。続いて、「http://c.example/c.js」では、スクリプト「fedcbaaaaaabcdef」が実行され、document.writeにより「http://d.example/red3」へ転送するiframeタグが「http://c.example/test.html」に挿入されることが分かる。そして、転送先である「http://d.example/red3」へアクセスすると、HTTP301の自動転送により「http://d.example/exploit」へ転送されることが分かる。
【００６７】
グラフ構築部２７４は、このように解析情報データベース２４の転送情報を辿ることで、入口URL「http://c.example/test.html」から「http://d.example/exploit」までの有向グラフを構築する（図１０Ｂ参照）。
【００６８】
以上説明したシステムによれば、ウェブサイトへのアクセスにより、異なるウェブサイトへ自動的に転送された場合に、ウェブサイトのコンテンツ解釈処理やコンテンツに含まれるスクリプト実行処理を追跡し、転送情報を記録し、蓄積する。そして、最終的に、ドライブバイダウンロード攻撃を仕掛ける悪性ウェブサイトへ転送された場合に、蓄積された転送情報をもとに有向グラフを構築し、この有向グラフを逆順に辿ることで、転送の原因となったコンテンツの箇所やスクリプトの箇所および転送に関与したウェブサイトのURLを特定できる。
【００６９】
（処理手順）
次に、図１２を用いて、システムの処理手順の例を説明する。
【００７０】
まず、URLリスト作成部２７１は、巡回対象URLリストを作成する（Ｓ１）。例えば、URLリスト作成部２７１は、公開されている悪性ウェブサイトのブラックリストや検索エンジンで収集できるウェブサイト等をもとに巡回対象URLリストを作成する。
【００７１】
そして、アクセス指示部２７２は、ブラウザエミュレータ２５に巡回対象URLリストのURLを入力し（Ｓ２）、ブラウザエミュレータ２５はアクセス部２５２で、Ｓ２で入力されたURLにアクセスする（Ｓ３）。
【００７２】
アクセス部２５２は、アクセスしたウェブサイトのコンテンツをHTTPヘッダパーサ部２５３、コンテンツパーサ部２５４、スクリプトインタプリタ部２５５で解釈し、解釈した結果に基づき、HTTPヘッダ解析部２５６、コンテンツ解析部２５７、スクリプト解析部２５８で、それぞれ解析する（Ｓ４：ウェブサイト挙動解析）。また、巡回対象URLへのアクセスにより転送されたウェブサイトについても、同様にコンテンツを取得し、解析を実施する。このＳ４の処理の詳細は後記する。
【００７３】
なお、Ｓ２においてアクセス指示部２７２は、１つのブラウザエミュレータ２５に複数URLへアクセスさせてもよいし、複数のブラウザエミュレータ２５にそれぞれ異なるURLへアクセスさせるようにしてもよい。
【００７４】
Ｓ４の後、アクセス部２５２はアクセスログを出力する（Ｓ５）。つまり、アクセス部２５２は、アクセス指示部２７２により入力されたURLへのアクセス結果をアクセスログとして出力する。そして、登録処理部２７３は、Ｓ５で出力されたアクセスログおよびＳ４での解析結果（転送情報）を整形し、解析情報データベース２４（図１１Ａおよび図１１Ｂ参照）へ蓄積する（Ｓ６）。
【００７５】
Ｓ６の後、巡回対象URLリストに次の巡回URLが存在すれば（Ｓ７でＹｅｓ）、Ｓ２へ戻る。一方、巡回対象URLリストに次の巡回URLが存在しなければ（Ｓ７でＮｏ）、処理を終了する。
【００７６】
上記のようにして、解析情報データベース２４にアクセスログおよび転送情報が蓄積されると、グラフ構築部２７４は、解析情報データベース２４に蓄積されたアクセスログおよび転送情報からURL間の転送を示す有向グラフを構築し、グラフ記憶部２８に記憶する。そして、グラフ解析部２７５は、グラフ記憶部２８の有向グラフを参照して、例えば、転送の原因となっているコンテンツ箇所やスクリプト箇所や攻撃に関与しているURLを特定する。
【００７７】
次に、図１３を用いて、図１２のＳ４のウェブサイト挙動解析の処理を詳細に説明する。
【００７８】
まず、アクセス部２５２は、巡回対象URLにアクセスした際に発生したHTTP通信から、HTTPヘッダをHTTPヘッダパーサ部２５３に解釈させ、解釈した結果をHTTPヘッダ解析部２５６に解析させる。つまり、HTTPヘッダ解析部２５６は巡回対象URLへのHTTP通信から取得したHTTPヘッダ情報を解析する（Ｓ８）。
【００７９】
ここで、HTTPヘッダ解析部２５６による解析の結果、HTTP応答ヘッダのHTTPステータスコードが300番台（リダイレクト（転送）を表す番号）であった場合に（Ｓ９でＹｅｓ）、転送元URLはHTTP要求ヘッダの要求URL、転送先URLはHTTP応答ヘッダのLocationフィールドのURL、転送方法は当該HTTPステータスコードとした転送情報を記録し（Ｓ１０：HTTPヘッダ情報に基づく転送情報の記録）、処理を終了する。一方、HTTP応答ヘッダのステータスコードが300番台ではない場合に（Ｓ９でＮｏ）、Ｓ１１へ進む。
【００８０】
Ｓ１１において、アクセス部２５２は、巡回対象URLにアクセスした際に発生したHTTP通信から、HTTPボディをコンテンツパーサ部２５４に解釈させ、解釈した結果をコンテンツ解析部２５７に解析させる。つまり、コンテンツ解析部２５７は上記のHTTP通信により取得したHTTPボディ情報（コンテンツ）を解析する（Ｓ１１）。ここで、コンテンツ解析部２５７による解析の結果、HTTPボディ情報にHTMLが含まれている場合に（Ｓ１２でＹｅｓ）、Ｓ１３へ進む。一方、HTTPボディ情報にHTMLが含まれない場合は（Ｓ１２でＮｏ）、Ｓ１７へ進む。
【００８１】
Ｓ１３において、当該HTMLにURLを指定した属性を持つHTMLタグが含まれる場合（Ｓ１３でＹｅｓ）、Ｓ１４へ進む。一方、HTMLにURLを指定した属性を持つHTMLタグが含まれない場合（Ｓ１３でＮｏ）、Ｓ１７へ進む。
【００８２】
Ｓ１４において、当該HTMLタグがスクリプトによって挿入されたHTMLタグである場合（Ｓ１４でＹｅｓ）、スクリプト解析部２５８は、転送元URLは当該コンテンツ（つまり当該スクリプトの属するコンテンツ）のURL、転送先URLは当該HTMLタグにより指定されたURL、転送方法はスクリプトの関数名またはプロパティ名（つまり、当該HTMLの挿入に用いられた関数の関数名または代入されたプロパティ名）＋当該HTMLタグ名とした転送情報を記録する（Ｓ１５：転送方法をスクリプトの関数名またはプロパティ名＋HTMLタグ名としたHTMLタグに基づく転送情報の記録）。
【００８３】
一方、当該HTMLタグがスクリプトによって挿入されたHTMLタグではない場合（Ｓ１４でＮｏ）、スクリプト解析部２５８は、転送元URLは当該コンテンツ（つまり当該HTMLタグの属するコンテンツ）のURL、転送先URLは当該HTMLタグにより指定されたURL、転送方法は当該HTMLタグ名とした転送情報を記録する（Ｓ１６：転送方法をHTMLタグ名としたHTMLタグに基づく転送情報の記録）。その後、Ｓ１７へ進む。
【００８４】
Ｓ１７において、コンテンツ解析部２５７によるHTTPボディ情報の解析の結果、HTTPボディ情報にスクリプトが含まれると判断した場合（Ｓ１７でＹｅｓ）、当該スクリプトをスクリプトインタプリタ部２５５に解釈させ、解釈の過程でスクリプト解析部２５８によるスクリプトの動的解析を実行する（Ｓ１８）。一方、HTTPボディ情報にスクリプトが含まれない場合は（Ｓ１７でＮｏ）、処理を終了する。Ｓ１８におけるスクリプトの動的解析の処理の詳細は後記する。なお、ブラウザエミュレータ２５は、上記のウェブサイト挙動解析処理が終了した際に、異なるURLへの転送が発生した場合には、当該URLのウェブサイトを前記と同様に解析する。
【００８５】
続いて、図１４を用いて、図１３のＳ１８のスクリプトの動的解析の処理を詳細に説明する。
【００８６】
まず、スクリプト解析部２５８は、HTTPボディ情報（コンテンツ）から取得したスクリプトの動的解析を実行し（Ｓ１９）、当該スクリプトが外部のウェブサイトのファイルに含まれるスクリプトか否かを判定する。つまり、スクリプト解析部２５８は、当該スクリプトが外部参照したスクリプトか否かを判定する（Ｓ２０）。ここでスクリプト解析部２５８が、当該スクリプトが外部参照したスクリプトであると判定した場合（Ｓ２０のＹｅｓ）、外部参照先URL（つまり、当該スクリプトの属するウェブサイトのURL）を別途保持し（Ｓ２１）、Ｓ２２へ進む。一方、スクリプト解析部２５８が、当該スクリプトが外部参照したスクリプトではないと判定した場合（Ｓ２０でＮｏ）、Ｓ２２へ進む。
【００８７】
Ｓ２２において、スクリプト解析部２５８が、当該スクリプトの実行中に、指定されたURLへ転送する関数の呼び出しまたはプロパティ代入を検知した場合に（Ｓ２２でＹｅｓ）、Ｓ２３へ進む。一方、スクリプト解析部２５８が、指定されたURLへ転送する関数の呼び出しもプロパティ代入も検知しなかった場合（Ｓ２２でＮｏ）、Ｓ２６へ進む。Ｓ２６については後記する。
【００８８】
Ｓ２３において、外部参照先URLが保持されている場合（Ｓ２３でＹｅｓ）、スクリプト解析部２５８は、転送元URLは外部参照先URL、転送先URLは外部参照されたスクリプトにより指定されたURL、転送方法は外部参照されたスクリプトの関数名またはプロパティ名（つまり、当該スクリプトにより呼び出された関数の関数名または代入されたプロパティ名）とした転送情報を記録する。また、スクリプト解析部２５８は、転送情報に実行元スクリプト（外部参照されたスクリプト）を記録する（Ｓ２４：外部参照したスクリプトの実行に基づく転送情報の記録）。その後、Ｓ２６へ進む。
【００８９】
一方、Ｓ２３において、外部参照先URLが保持されていない場合（Ｓ２３でＮｏ）、スクリプト解析部２５８は、転送元URLは当該コンテンツ（つまり当該スクリプトの属するコンテンツ）のURL、転送先URLは当該スクリプトにより指定されたURL、転送方法は当該スクリプトの関数名またはプロパティ名（つまり、当該スクリプトにより呼び出された関数の関数名または代入されたプロパティ名）とした転送情報を記録する。また、スクリプト解析部２５８は、転送情報に実行元スクリプト（当該スクリプト）を記録する（Ｓ２５：コンテンツから取得したスクリプトの実行に基づく転送情報の記録）。その後、Ｓ２６へ進む。
【００９０】
なお、これ以降、スクリプト解析部２５８は、上記同様、外部参照先URLが保持されていれば、外部参照先URLを優先して記録し、保持されていなければ、実行中のスクリプトの属するコンテンツのURLを転送情報に記録する。
【００９１】
Ｓ２６において、スクリプト解析部２５８は、スクリプトの実行中に、当該コンテンツ（つまり当該スクリプトの属するコンテンツ）の内容を変更する関数の呼び出しまたはプロパティ代入を検知した場合に（Ｓ２６でＹｅｓ）、変更対象コンテンツに識別子を設定する（Ｓ２７）。つまり、スクリプト解析部２５８は、どのコンテンツに対し変更が加えられたかを記録しておく。その後、Ｓ２８へ進む。一方、スクリプト解析部２５８は、当該コンテンツの内容を変更する関数の呼び出しもプロパティ代入も検知しなかった場合に（Ｓ２６でＮｏ）、Ｓ２８へ進む。
【００９２】
なお、上記のコンテンツの内容の変更とは、例えば、コンテンツ内に新たなHTMLタグを挿入することである。新たなHTMLタグが挿入された場合は、挿入されたHTMLタグにおいても同様に、Ｓ１３からＳ１８までの処理を実行する。また、Ｓ２７で変更対象コンテンツに設定する識別子には、例えば、当該コンテンツの内容を変更する原因となったスクリプトのハッシュ値やURLを用いる方法等が考えられるが、これ以外の方法であってももちろんよい。
【００９３】
Ｓ２８において、スクリプト解析部２５８は、当該スクリプトの実行中に、新たに生成されたスクリプトを実行する関数の呼び出しを検知した場合（Ｓ２８でＹｅｓ）、生成元スクリプト、生成されたスクリプト、実行方法（生成元スクリプトの実行方法）を転送情報に記録する（Ｓ２９）。つまり、スクリプト解析部２５８は、スクリプトの実行により新たなスクリプトが生成されたことを検知すると、転送元URLは生成元スクリプトの属するコンテンツのURLとし、実行方法は生成元スクリプトの実行方法とし、生成されたスクリプトは生成元スクリプトにより生成されたスクリプトとし、実行スクリプトは生成元スクリプトとした転送情報を記録する。
【００９４】
一方、Ｓ２８において、スクリプト解析部２５８は、スクリプトの実行中に、新たに生成されたスクリプトを実行する関数の呼び出しを検知しなかった場合（Ｓ２８でＮｏ）、処理を終了する。
【００９５】
なお、上記のＳ２２、Ｓ２６、Ｓ２８において、スクリプト解析部２５８がスクリプト実行中に監視する関数の呼び出しやプロパティ代入等の各処理は、図１４に示した手順で実行してもよいし、順序を入れ替えてももちろんよい。
【００９６】
以上説明したシステムによれば、ウェブサイトへのアクセスにより、異なるウェブサイトへ自動的に転送された場合に、ウェブサイトのコンテンツ解釈処理やコンテンツに含まれるスクリプト実行処理を追跡し、転送情報を記録し、蓄積する。そして、最終的に、ドライブバイダウンロード攻撃を仕掛ける悪性ウェブサイトへ転送された場合に、蓄積された転送情報をもとに有向グラフを構築し、この有向グラフを逆順に辿ることで、転送の原因となったコンテンツの箇所やスクリプトの箇所および転送に関与したウェブサイトのURLを特定できる。
【００９７】
また、上記の実施形態で述べたブラウザエミュレータマネージャ２３は、上記の処理を実行するブラウザエミュレータマネージャ２３を所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のブラウザエミュレータマネージャ２３を情報処理装置に実行させることにより、情報処理装置をブラウザエミュレータマネージャ２３として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）等のスレート端末等がその範疇に含まれる。また、ブラウザエミュレータマネージャ２３を、Ｗｅｂサーバやクラウドとして実装してもよい。
【００９８】
（プログラム）
図１５は、解析プログラムを実行するコンピュータを示す図である。図１５に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ（Central  Processing  Unit）１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００９９】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【０１００】
ここで、図１５に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した各情報、データは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【０１０１】
また、解析プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１０９３として、ハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明したブラウザエミュレータマネージャ２３が実行する各処理が記述されたプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。
【０１０２】
また、解析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【０１０３】
なお、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１０４】
１，２  ネットワーク
３      パケット転送装置
１２    解析対象ウェブサイト
２３    ブラウザエミュレータマネージャ
２４    解析情報データベース
２５    ブラウザエミュレータ
２６    ホストシステム
２７    制御部
２８    グラフ記憶部
２５１  クライアント環境模擬部
２５２  アクセス部
２５３  HTTPヘッダパーサ部
２５４  コンテンツパーサ部
２５５  スクリプトインタプリタ部
２５６  HTTPヘッダ解析部
２５７  コンテンツ解析部
２５８  スクリプト解析部
２７１  URLリスト作成部
２７２  アクセス指示部
２７３  登録処理部
２７４  グラフ構築部
２７５  グラフ解析部
【図１】
2017077847.tif 000003
【図２】
2017077847.tif 000004
【図３Ａ】
2017077847.tif 000005
【図３Ｂ】
2017077847.tif 000006
【図４】
2017077847.tif 000007
【図５Ａ】
2017077847.tif 000008
【図５Ｂ】
2017077847.tif 000009
【図６】
2017077847.tif 000010
【図７】
2017077847.tif 000011
【図８】
2017077847.tif 000012
【図９】
2017077847.tif 000013
【図１０Ａ】
2017077847.tif 000014
【図１０Ｂ】
2017077847.tif 000015
【図１１Ａ】
2017077847.tif 000016
【図１１Ｂ】
2017077847.tif 000017
【図１２】
2017077847.tif 000018
【図１３】
2017077847.tif 000019
【図１４】
2017077847.tif 000020
【図１５】
2017077847.tif 000021
【国際調査報告】
2017077847.tif 000022
2017077847.tif 000023
2017077847.tif 000024
2017077847.tif 000025