(57)【要約】【課題】取得された文字列データに基づいて、自動的に精度良く悪性ウェブコードの判別を行うことが可能な悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムを提供すること。【解決手段】悪性ウェブコード判別システム１は、ウェブページを介して取得された文字列データを複数の文字列に分割する文字列分割手段２０と、分割された文字列の中から、少なくとも行末コメントに該当する文字列をトークンとして抽出する文字列抽出手段２０と、抽出された文字列に基づいてウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成手段２０と、生成された特徴ベクトルに基づいて、文字列が、ＳＱＬインジェクションに該当するか否かを判別する判別手段２０とを有する。【選択図】図２
2012088803.tif 000002
【特許請求の範囲】
【請求項１】
ウェブページを介して取得された文字列データを複数の文字列に分割する文字列分割手段と、
該文字列分割手段により分割された文字列の中から、少なくとも行末コメントに該当する文字列をトークンとして抽出する文字列抽出手段と、
該文字列抽出手段により抽出された文字列に基づいて前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成手段と、
該特徴ベクトル生成手段により生成された特徴ベクトルに基づいて、前記文字列が、ＳＱＬインジェクションに該当するか否かを判別する判別手段と
を有することを特徴とする悪性ウェブコード判別システム。
【請求項２】
前記文字列抽出手段は、前記文字列分割手段により分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出すること
を特徴とする請求項１に記載の悪性ウェブコード判別システム。
【請求項３】
ウェブページを介して取得された文字列データを複数の文字列に分割する文字列分割手段と、
該文字列分割手段により分割された文字列の中から、少なくともタグに該当する文字列をトークンとして抽出する文字列抽出手段と、
該文字列抽出手段により抽出された文字列に基づいて前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成手段と、
該特徴ベクトル生成手段により生成された特徴ベクトルに基づいて、前記文字列が、クロスサイトスプリクティングに該当するか否かを判別する判別手段と
を有することを特徴とする悪性ウェブコード判別システム。
【請求項４】
前記文字列抽出手段は、前記文字列分割手段により分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出すること
を特徴とする請求項３に記載の悪性ウェブコード判別システム。
【請求項５】
前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ウェブサーバに設けられ、
前記文字列分割手段は、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを前記複数の文字列に分割すること
を特徴とする請求項１乃至請求項４のいずれか１項に記載の悪性ウェブコード判別システム。
【請求項６】
前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、
前記文字列分割手段は、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを前記複数の文字列に分割すること
を特徴とする請求項１乃至請求項４のいずれか１項に記載の悪性ウェブコード判別システム。
【請求項７】
ウェブページを介して取得された文字列データを、文字列分割手段が、複数の文字列に分割する文字列分割ステップと、
該文字列分割ステップにおいて分割された文字列の中から、文字列抽出手段が、少なくとも行末コメントに該当する文字列をトークンとして抽出する文字列抽出ステップと、
該文字列抽出ステップにおいて抽出された文字列に基づいて、特徴ベクトル生成手段が、前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成ステップと、
該特徴ベクトル生成ステップにおいて生成された特徴ベクトルに基づいて、前記文字列がＳＱＬインジェクションに該当するか否かを、判別手段が判別する判別ステップと
を有することを特徴とする悪性ウェブコード判別方法。
【請求項８】
前記文字列抽出ステップにおいて、前記文字列抽出手段が、前記文字列分割手段により分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出すること
を特徴とする請求項７に記載の悪性ウェブコード判別方法。
【請求項９】
ウェブページを介して取得された文字列データを、文字列分割手段が、複数の文字列に分割する文字列分割ステップと、
該文字列分割ステップにおいて分割された文字列の中から、文字列抽出手段が、少なくともタグに該当する文字列をトークンとして抽出する文字列抽出ステップと、
該文字列抽出ステップにおいて抽出された文字列に基づいて、特徴ベクトル生成手段が、前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成ステップと、
該特徴ベクトル生成ステップにおいて生成された特徴ベクトルに基づいて、前記文字列がクロスサイトスプリクティングに該当するか否かを、判別手段が判別する判別ステップと
を有することを特徴とする悪性ウェブコード判別方法。
【請求項１０】
前記文字列抽出ステップにおいて、前記文字列抽出手段が、前記文字列分割手段により分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出すること
を特徴とする請求項９に記載の悪性ウェブコード判別方法。
【請求項１１】
前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ウェブサーバに設けられ、
前記文字列分割ステップにおいて、前記文字列分割手段は、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを、前記複数の文字列に分割すること
を特徴とする請求項７乃至請求項１０のいずれか１項に記載の悪性ウェブコード判別方法。
【請求項１２】
前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、
前記文字列分割ステップにおいて、前記文字列分割手段は、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを、前記複数の文字列に分割すること
を特徴とする請求項７乃至請求項１０のいずれか１項に記載の悪性ウェブコード判別方法。
【請求項１３】
コンピュータに、
ウェブページを介して取得された文字列データを複数の文字列に分割させる文字列分割機能と、
該文字列分割機能によって分割された文字列の中から、少なくとも行末コメントに該当する文字列をトークンとして抽出させる文字列抽出機能と、
該文字列抽出機能によって抽出された文字列に基づいて、前記ウェブページの特徴を示した特徴ベクトルを生成させる特徴ベクトル生成機能と、
該特徴ベクトル生成機能によって生成された特徴ベクトルに基づいて、前記文字列がＳＱＬインジェクションに該当するか否かを判別させる判別機能と
を実行させることを特徴とする悪性ウェブコード判別用プログラム。
【請求項１４】
前記文字列抽出機能において、前記コンピュータに、前記文字列分割機能によって分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出させる
ことを特徴とする請求項１３に記載の悪性ウェブコード判別用プログラム。
【請求項１５】
コンピュータに、
ウェブページを介して取得された文字列データを複数の文字列に分割させる文字列分割機能と、
該文字列分割機能によって分割された文字列の中から、少なくともタグに該当する文字列をトークンとして抽出させる文字列抽出機能と、
文字列抽出機能によって抽出された文字列に基づいて、前記ウェブページの特徴を示した特徴ベクトルを生成させる特徴ベクトル生成機能と、
前記特徴ベクトル生成機能により生成された特徴ベクトルに基づいて、前記文字列がクロスサイトスプリクティングに該当するか否かを判別させる判別機能と
を実行させることを特徴とする悪性ウェブコード判別用プログラム。
【請求項１６】
前記文字列抽出機能において、前記コンピュータに、文字列分割機能によって分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出させる
ことを特徴とする請求項１５に記載の悪性ウェブコード判別用プログラム。
【請求項１７】
前記コンピュータは、ウェブサーバに設けられ、
前記文字列分割機能により、前記コンピュータに、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを、前記複数の文字列に分割させること
を特徴とする請求項１３乃至請求項１６のいずれか１項に記載の悪性ウェブコード判別用プログラム。
【請求項１８】
前記コンピュータは、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、
前記文字列分割機能により、前記コンピュータに、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを、前記複数の文字列に分割させること
を特徴とする請求項１３乃至請求項１６のいずれか１項に記載の悪性ウェブコード判別用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムに関し、より詳細には、取得した文字列に含まれ得る悪性ウェブコードを機械学習によって自動的に精度良く判別することが可能な悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムに関する。
【背景技術】
【０００２】
インターネットなどが発達した今日では、ユーザがブラウザ機能を備えた端末を用いてネットワークにアクセスすることにより、ウェブサーバによって提供される様々なサービスを、ブラウザに表示されたウェブサイト（ウェブページ）を通じて利用することが可能となっている。
【０００３】
具体的に、ウェブサイトでは、ユーザ（クライアント）が送信するクエリに応じて、様々な処理を動的に行うことが可能となっている。例えば、ブラウザに表示されたログインフォームに、ユーザがログインＩＤ、パスワード等を入力し、最後に送信ボタンをクリックすることによって、ウェブサイトでは、入力された内容に基づいてログイン可否の判断処理が行われる。また、例えば、ブラウザに表示されたウェブログのコメント投稿欄に、ユーザがコメントを記入して送信することにより、そのコメント表示欄に記入された内容と同じ内容の文面が、ウェブログに対するコメント情報として表示される処理が行われる。このように、ウェブサイトでは、様々な処理が動的な処理によって行われる。
【０００４】
一方で、ウェブサイトでは、ウェブサイトの提供者側が意図しない文字列を、コメント投稿欄などに自由に入力して、ウェブサーバへ送信することが可能となっている。このような性質を利用して、受信されたクエリに応じて動的な処理をウェブサイトで実行させることによって、ウェブサーバやクライアント等に攻撃を行う方法が知られている。例えば、ＳＱＬインジェクションやクロスサイトスクリプティングなどの悪性ウェブコードを用いる手法がその一例である（例えば、非特許文献１、非特許文献２参照）。
【０００５】
ＳＱＬインジェクションとは、データベースの操作に関連するクエリをウェブサイトの入力フォームなどからウェブサーバへ送信することによって、ウェブサイトの提供者側が通常意図しているプログラムの処理とは異なったプログラムの処理を、ウェブサイトで実行させることを目的とした攻撃手法である。
【０００６】
ＳＱＬインジェクションに対する脆弱性が存在するウェブサイトでは、ＳＱＬインジェクションによって、例えば、ウェブサイトの会員用ログインフォームに、ＩＤやパスワードなどを入力することなくログインすることができ、登録された会員のＩＤやパスワード等の情報を抽出したり、さらに、ウェブサイトのプログラムで利用されているデータベースを破壊したりすることが可能となる。
【０００７】
また、クロスサイトスクリプティングとは、ウェブサイトの提供者が想定していない入力文字列として、例えばＪａｖａＳｃｒｉｐｔ（登録商標、以下、スクリプトと呼ぶ）を入力・送信することによって、クロスサイトスクリプティングが施されたウェブサイトを閲覧するユーザに、被害を与えることを目的とした攻撃手法である。
【０００８】
例えば、ある動的な処理を行うウェブサイトのウェブページの入力フォームに、ページを開けば自動的に他のウェブサイトのウェブページを表示させるスクリプトが入力されて、ウェブサーバへ送信され、そのスクリプトがウェブページのデータ中に含まれた場合、そのページを見た閲覧者は強制的に閲覧者が意図していないページを閲覧することになる。遷移先のウェブページが、ブラウザの脆弱性を突いて、サーバにコンピューターウィルスを感染させるものである場合、閲覧者はそのウィルスによる被害を受ける可能性があり得る。
【０００９】
上述したような悪性ウェブコードを防ぐ手段として、サニタイジング、ホワイトリストおよびブラックリストと呼ばれる手法が存在する。サニタイジングとは、入力データからＨＴＭＬタグ、ＪａｖａＳｃｒｉｐｔおよびＳＱＬなどの文字列を取り出し、置き換えを行うことによって入力データを無害化する手法である。サニタイジングを用いることによって、入力データ中に含まれる悪意のあるＨＴＭＬタグ、ＪａｖａＳｃｒｉｐｔおよびＳＱＬ文などが解釈されて実行されることを防ぐことが可能となる。
【００１０】
また、ホワイトリストとは、入力された文字列について、警戒する必要がないと判断され得る文字列の一覧を示したものであり、ブラックリストとは、警戒する必要があると判断され得る文字列の一覧を示したものである。ホワイトリストを用いた手法では、入力された文字列のうちホワイトリストの一覧に該当する文字列のみの入力を許可する処理を行うことにより、悪性ウェブコードによる被害を防ぎ、ブラックリストを用いた手法では、入力された文字列のうちブラックリストの一覧に該当する文字列をブロックする処理を行うことにより、悪性ウェブコードによる被害を防いている。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】"SQLインジェクション攻撃とその対策"、［online］、マイクロソフト株式会社、［平成２２年１０月１日検索］、インターネット〈URL：http://technet.microsoft.com/ja-jp/library/dd362952.aspx〉
【非特許文献２】"クロスサイトスクリプティング対策の基本"、［online］、アイティメディア株式会社、［平成２２年１０月１日検索］、インターネット〈URL：http://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html〉
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、サニタイジングやホワイトリストを用いた手法では、ブロックされた文字列が悪意をもって作成されたものであるか否かの判別を行うことが困難であった。
【００１３】
これに対し、ブラックリストを用いた手法では、悪意をもって作成された文字列をブロックするので文字列の悪意性を判断することは可能である。このため、ブラックリストに基づいてブロックした文字列の送信元のIPアドレスを遮断することにより、ウェブサイトの安全性を高めることができる。
【００１４】
しかしながら、ブラックリストおよびホワイトリストを用いた手法では、人間が予め定めたルールに基づいて、入力された文字列が悪性であるか否かの判別をしているため、ウェブサイトの提供者が人手でルールを作成する必要が生ずるという問題があった。
【００１５】
本発明は、上記問題に鑑みてなされたものであり、取得された文字列データに基づいて、自動的に精度良く悪性ウェブコードの判別を行うことが可能な悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムを提供することを課題とする。
【課題を解決するための手段】
【００１６】
上記課題を解決するために、本発明に係る悪性ウェブコード判別システムは、ウェブページを介して取得された文字列データを複数の文字列に分割する文字列分割手段と、該文字列分割手段により分割された文字列の中から、少なくとも行末コメントに該当する文字列をトークンとして抽出する文字列抽出手段と、該文字列抽出手段により抽出された文字列に基づいて前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成手段と、該特徴ベクトル生成手段により生成された特徴ベクトルに基づいて、前記文字列が、ＳＱＬインジェクションに該当するか否かを判別する判別手段とを有することを特徴とする。
【００１７】
また、本発明に係る悪性ウェブコード判別方法は、ウェブページを介して取得された文字列データを、文字列分割手段が、複数の文字列に分割する文字列分割ステップと、該文字列分割ステップにおいて分割された文字列の中から、文字列抽出手段が、少なくとも行末コメントに該当する文字列をトークンとして抽出する文字列抽出ステップと、該文字列抽出ステップにおいて抽出された文字列に基づいて、特徴ベクトル生成手段が、前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成ステップと、該特徴ベクトル生成ステップにおいて生成された特徴ベクトルに基づいて、前記文字列がＳＱＬインジェクションに該当するか否かを、判別手段が判別する判別ステップとを有することを特徴とする。
【００１８】
さらに、本発明に係る悪性ウェブコード判別用プログラムは、コンピュータに、ウェブページを介して取得された文字列データを複数の文字列に分割させる文字列分割機能と、該文字列分割機能によって分割された文字列の中から、少なくとも行末コメントに該当する文字列をトークンとして抽出させる文字列抽出機能と、該文字列抽出機能によって抽出された文字列に基づいて、前記ウェブページの特徴を示した特徴ベクトルを生成させる特徴ベクトル生成機能と、該特徴ベクトル生成機能によって生成された特徴ベクトルに基づいて、前記文字列がＳＱＬインジェクションに該当するか否かを判別させる判別機能とを実行させるプログラムであることを特徴とする。
【００１９】
本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、ウェブページを介して取得された文字列データが複数の文字列に分割され、分割された文字列の中から、少なくとも行末コメントに該当する文字列がトークンとして抽出され、抽出された文字列に基づいてウェブページの特徴を示した特徴ベクトルが生成される。つまり、ウェブページの特徴を示した特徴ベクトルには、少なくとも行末コメントに該当する文字列の特徴が反映されることになる。
【００２０】
ＳＱＬインジェクションにおいて、本来のＳＱＬ文から悪性ウェブコードを挿入するにあたり、行末コメントを用いて、不必要な部分をコメントアウトする手口が多く用いられる。この手口はＳＱＬインジェクション特有のものである。このため、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、行末コメントに該当する文字列を優先して独立に抽出している。このように行末コメントに該当する文字列を独立して抽出することにより、ＳＱＬインジェクションで用いられる可能性が高い行末コメントの文字列を精度良く抽出することが可能になる。
【００２１】
さらに、行末コメントに該当する文字列を独立して抽出した上でウェブページの特徴を示した特徴ベクトルを生成することによって、特徴ベクトルに対して、ＳＱＬインジェクションで用いられる可能性が高い行末コメントの文字列の特徴を顕著に反映させることが可能となり、文字列がＳＱＬインジェクションに該当するか否かの判別精度を向上させることが可能となる。
【００２２】
なお、ウェブページの特徴を示した特徴ベクトルは、例えば、用語出現頻度などの代表的な数値の割当計算法を用いて、分割された文字列に数値割り当てを行い、分割された文字列のカテゴリ（トークンの種類）をベクトルの方向とし、割り当てられた数値をベクトルの長さとすることにより求めることができる。
【００２３】
また、特徴ベクトルに基づいて、文字列がＳＱＬインジェクションに該当するか否かの判別は、予め用意した悪性ウェブコードの文字列と無害な文字列とを、機械学習に必要な教師データとして用い、機械学習において、教師データにあるデータのパターンとそのデータのクラスの関連性を学習することによって求められる分類手法（この分類手法により分類を行うことが可能な分類器）を用いることにより行うことが可能となる。この分類手法（分類器）を用いることにより、新たな文字列がＳＱＬインジェクションに該当するか否かの判別を判別手段において自動的に行うことが可能となる。
【００２４】
また、上述した悪性ウェブコード判別システムにおいて、前記文字列抽出手段は、前記文字列分割手段により分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出するものであってもよい。
【００２５】
さらに、上述した悪性ウェブコード判別方法は、前記文字列抽出ステップにおいて、前記文字列抽出手段が、前記文字列分割手段により分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出するものであってもよい。
【００２６】
また、上述した悪性ウェブコード判別用プログラムは、前記文字列抽出機能において、前記コンピュータに、前記文字列分割機能によって分割された文字列の中から、少なくとも演算子、論理演算子、区切り子、又は予約語に該当する文字列を抽出させることを特徴とするものであってもよい。
【００２７】
ＳＱＬインジェクションにおいては、上述した行末コメントの他に、演算子、論理演算子、区切り子、予約語などの文字列が、他の文字列と比較して悪性ウェブコードに含まれる可能性が高い。このため、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、これらの文字列を独立して抽出することにより、ＳＱＬインジェクションにおける悪性ウェブコードの検出精度を高めることが可能となる。
【００２８】
一方で、本発明に係る悪性ウェブコード判別システムは、ウェブページを介して取得された文字列データを複数の文字列に分割する文字列分割手段と、該文字列分割手段により分割された文字列の中から、少なくともタグに該当する文字列をトークンとして抽出する文字列抽出手段と、該文字列抽出手段により抽出された文字列に基づいて前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成手段と、該特徴ベクトル生成手段により生成された特徴ベクトルに基づいて、前記文字列が、クロスサイトスプリクティングに該当するか否かを判別する判別手段とを有することを特徴とする。
【００２９】
また、本発明に係る悪性ウェブコード判別方法は、ウェブページを介して取得された文字列データを、文字列分割手段が、複数の文字列に分割する文字列分割ステップと、該文字列分割ステップにおいて分割された文字列の中から、文字列抽出手段が、少なくともタグに該当する文字列をトークンとして抽出する文字列抽出ステップと、該文字列抽出ステップにおいて抽出された文字列に基づいて、特徴ベクトル生成手段が、前記ウェブページの特徴を示した特徴ベクトルを生成する特徴ベクトル生成ステップと、該特徴ベクトル生成ステップにおいて生成された特徴ベクトルに基づいて、前記文字列がクロスサイトスプリクティングに該当するか否かを、判別手段が判別する判別ステップとを有することを特徴とする。
【００３０】
さらに、本発明に係る悪性ウェブコード判別用プログラムは、コンピュータに、ウェブページを介して取得された文字列データを複数の文字列に分割させる文字列分割機能と、該文字列分割機能によって分割された文字列の中から、少なくともタグに該当する文字列をトークンとして抽出させる文字列抽出機能と、文字列抽出機能によって抽出された文字列に基づいて、前記ウェブページの特徴を示した特徴ベクトルを生成させる特徴ベクトル生成機能と、前記特徴ベクトル生成機能により生成された特徴ベクトルに基づいて、前記文字列がクロスサイトスプリクティングに該当するか否かを判別させる判別機能とを実行させるプログラムであることを特徴とする。
【００３１】
本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、ウェブページを介して取得された文字列データが複数の文字列に分割され、分割された文字列の中から、少なくともタグに該当する文字列がトークンとして抽出され、抽出された文字列に基づいてウェブページの特徴を示した特徴ベクトルが生成される。つまり、ウェブページの特徴を示した特徴ベクトルには、少なくともタグに該当する文字列の特徴が反映されることになる。
【００３２】
クロスサイトスクリプティングにおいては、タグを含んだ悪性ウェブコードが多く用いられる傾向がある。このため、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、タグに該当する文字列を他の要素から優先して独立に抽出することにより、クロスサイトスクリプティングで用いられる可能性が高いタグに該当する文字列を精度良く抽出することが可能になる。
【００３３】
さらに、タグに該当する文字列を独立して抽出した上でウェブページの特徴を示した特徴ベクトルを生成することによって、特徴ベクトルに対して、クロスサイトスクリプティングで用いられる可能性が高いタグに該当する文字列の特徴を顕著に反映させることが可能となり、文字列がクロスサイトスクリプティングに該当するか否かの判別精度を向上させることが可能となる。
【００３４】
また、上述した悪性ウェブコード判別システムにおいて、前記文字列抽出手段は、前記文字列分割手段により分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出するものであってもよい。
【００３５】
さらに、上述した悪性ウェブコード判別方法は、前記文字列抽出ステップにおいて、前記文字列抽出手段が、前記文字列分割手段により分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出するものであってもよい。
【００３６】
また、上述した悪性ウェブコード判別用プログラムは、前記文字列抽出機能において、前記コンピュータに、文字列分割機能によって分割された文字列の中から、少なくとも区切り子、関数・プロパティ・メソッド、記号に該当する文字列を抽出させることを特徴とするものであってもよい。
【００３７】
クロスサイトスクリプティングにおいては、上述したタグの他に、区切り子、関数・プロパティ・メソッド（ＦＰＭ）、記号などの文字列が、他の文字列に比較して悪性ウェブコードに含まれる可能性が高い。このため、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、これらの文字列を独立して抽出することにより、クロスサイトスクリプティングにおける悪性ウェブコードの検出精度を高めることが可能となる。
【００３８】
また、上述した悪性ウェブコード判別システムにおいて、前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ウェブサーバに設けられ、前記文字列分割手段は、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを前記複数の文字列に分割するものであってもよい。
【００３９】
さらに、上述した悪性ウェブコード判別方法は、前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ウェブサーバに設けられ、前記文字列分割ステップにおいて、前記文字列分割手段は、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを、前記複数の文字列に分割するものであってもよい。
【００４０】
また、上述した悪性ウェブコード判別用プログラムは、前記コンピュータが、ウェブサーバに設けられ、前記文字列分割機能により、前記コンピュータに、ネットワークを介してクライアントから前記ウェブサーバへ送信された文字列データを、前記複数の文字列に分割させることを特徴とするものであってもよい。
【００４１】
このように、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムを、ウェブサーバにおいて機能させることにより、ネットワークを介して受信されたクライアントからの情報（文字列データ）が、悪性のウェブコードであるか否かの判断を、ウェブサーバにおいて自動的に行うことが可能となる。このため、ウェブサイトを提供するウェブサーバが、クライアントからウェブサーバに対して送信される悪性ウェブコードによって被る被害を未然に防ぐことが可能となる。
【００４２】
また、上述した悪性ウェブコード判別システムにおいて、前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、前記文字列分割手段は、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを前記複数の文字列に分割するものであってもよい。
【００４３】
さらに、上述した悪性ウェブコード判別方法は、前記文字列分割手段、前記文字列抽出手段および前記判別手段が、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、前記文字列分割ステップにおいて、前記文字列分割手段は、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを、前記複数の文字列に分割するものであってもよい。
【００４４】
また、上述した悪性ウェブコード判別用プログラムは、前記コンピュータが、ネットワークを介してウェブサーバに接続されたクライアントに設けられ、前記文字列分割機能により、前記コンピュータに、前記クライアントのブラウザにおいて表示されたウェブページより取得された文字列データを、前記複数の文字列に分割させることを特徴とするものであってもよい。
【００４５】
このように本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムを、ネットワークを介してウェブサーバに接続されたクライアントにおいて機能させることにより、クライアントにおいて悪性のウェブコードであるか否かの判断を自動的に行うことが可能となる。このため、ブラウザを用いてウェブサイトを利用するクライアントにおける悪性ウェブコードの被害を、未然に防ぐことが可能となる。
【発明の効果】
【００４６】
本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、行末コメントに該当する文字列やタグに該当する文字列を優先して独立に抽出するので、悪性ウェブコードとして可能性が高い文字列を精度良く抽出することが可能になる。
【００４７】
さらに、本発明に係る悪性ウェブコード判別システム、悪性ウェブコード判別方法および悪性ウェブコード判別用プログラムでは、悪性ウェブコードに該当する可能性の高い文字列を独立して抽出した上でウェブページの特徴を示した特徴ベクトルを生成することによって、特徴ベクトルに対して、悪性ウェブコードで用いられる可能性が高い文字列の特徴を顕著に反映させることが可能となり、文字列が悪性ウェブコードに該当するか否かの判別精度を向上させることが可能となる。
【図面の簡単な説明】
【００４８】
【図１】本実施の形態に係るサーバが、ネットワークを介してクライアントに接続された様子を示した概略図である。
【図２】本実施の形態に係るサーバの概略構成を示したブロック図である。
【図３】本実施の形態に係る制御部において行われる悪性ウェブコードの判別処理の処理内容を機能的に示した機能ブロック図である。
【図４】（ａ）に示す例１は、ＳＱＬインジェクションに該当し得る文字列データを例示したものであり、（ｂ）に示す例２は、クロスサイトスクリプティングに該当し得る文字列データを例示したものであり、（ｃ）に示す例３は、無害な文字列データを例示したものである。
【図５】（ａ）に示す例４は、ＳＱＬインジェクション用の文字列分割パターンを例示したものであり、（ｂ）に示す例５は、クロスサイトスクリプティング用の文字列分割パターンを例示したものであり、（ｃ）に示す例６は、空白文字を利用した文字列分割パターンを例示したものである。
【図６】（ａ）に示す例７は、ＳＱＬインジェクション用の文字列分割パターンによって分割された文字列を例示したものであり、（ｂ）に示す例８は、クロスサイトスクリプティング用の文字列分割パターンによって分割された文字列を例示したものであり、（ｃ）に示す例９は、例１の文字列データを例４に示す文字列分割パターンで分割した場合の分割結果を示したものであり、（ｄ）に示す例１０は、例２の文字列データを例５に示す文字列分割パターンで分割した場合の分割結果を示したものである。
【図７】ＳＱＬインジェクションにおけるトークン化処理のトークン名とトークンの文字列表現との対応表を示した図である。
【図８】クロスサイトスクリプティングにおけるトークン化処理のトークン名とトークンの文字列表現との対応表を示した図である。
【図９】本実施の形態に係る制御部において行われるＳＱＬインジェクション用のトークン化処理の一部を示したフローチャートである。
【図１０】本実施の形態に係る制御部において行われるＳＱＬインジェクション用のトークン化処理の残りを示したフローチャートである。
【図１１】データ操作にある文字列を除いてＭｙＳＱＬに規定された予約語の一覧を一例として示した表である。
【図１２】本実施の形態に係る制御部において行われるクロスサイトスクリプティング用のトークン化処理を示したフローチャートである。
【図１３】クロスサイトスクリプティングにおける区切り子の一覧を一例として示した表である。
【図１４】ＪａｖａＳｃｒｉｐｔのオブジェクト名を表した文字列の一覧を一例として示した表である
【図１５】ＪａｖａＳｃｒｉｐｔの関数、プロパティ、メソッドを表した文字列の一覧を一例として示した表である。
【図１６】ＪａｖａＳｃｒｉｐｔに規定されている予約語を表した文字列の一覧を一例として示した表である。
【図１７】（ａ）に示す例１３は、例１の文字列データを例４に示す文字列分割パターンに従って文字列に分割し、例１１および図９・図１０に示すフローチャートに従って、分割された文字列をトークン化することで得られた結果を示し、（ｂ）に示す例１４は、例２の文字列データを例５に示す文字列分割パターンに従って文字列に分割し、例１２および図１２に示すフローチャートに従って、分割された文字列をトークン化することで得られた結果を示し、（ｃ）に示す例１５は、無害な文字列を例４に示す文字列分割パターンに従って文字列に分割し、例１１および図９・図１０に示すフローチャートに従って、分割された文字列をトークン化することで得られた結果を示している。
【図１８】図１８（ａ）に示す例１６は、図１７（ａ）に示す例１３によって抽出されたトークンに対してＴＦの割当計算法によって数値の割当計算を行った計算結果を示し、図１８（ｂ）に示す例１７は、図１７（ｂ）に示す例１４によって抽出されたトークンに対してＴＦの割当計算法によって数値の割当計算を行った計算結果を示し、図１８（ｃ）に示す例１８は、図１７（ｃ）に示す例１５によって抽出されたトークンに対してＴＦの割当計算法によって数値の割当計算を行った計算結果を示している。
【図１９】図１９（ａ）に示す例１９は、例１の文字列に対してバイグラムにより生成された素性とその素性に対してＴＦの割当計算法による数値の割当を行った結果を例示し、図１９（ｂ）に示す例２０、図１９（ｃ）に示す例２１、および図１９（ｄ）に示す例２２は、ＳＱＬインジェクションに対する文字列の分類例を示している。
【図２０】本実施の形態に係る制御部において、予め用意した悪性ウェブコードの文字列データと無害な文字列データとに基づいて機械学習に必要な教師データを生成して、悪性ウェブコードであるか否か判断するための分類手法を求める処理を示したフローチャートである。
【図２１】本実施の形態に係る制御部において、機械学習により求められた分類手法を用いることにより、クライアントより取得した文字列データが悪性ウェブコードに該当するか否かの判断を行う処理を示したフローチャートである。
【発明を実施するための形態】
【００４９】
以下、本発明に係る悪性ウェブコード判別システムの一例であるウェブコード判別サーバ（悪性ウェブコード判別システム、ウェブサーバ）について、図面を参照して説明を行う。
【００５０】
図１は、ウェブコード判別サーバ（以下、サーバとする。）が、ネットワークを介してクライアントに接続された様子を示した概略図である。サーバ１は、ネットワーク接続機能（後述する通信部など）を備えており、このネットワーク接続機能を利用することによりネットワーク２を介して接続されるクライアント３へ、さまざまなウェブ情報（ウェブページ、動画、音楽など）を提供することが可能となっている。
【００５１】
ネットワーク２は、世界的に広く公開されており、数多くの人たちと情報の送受信を行うことが可能なインターネットであってもよく、また、一定のユーザに情報の送受信が限定されるＬＡＮ（ローカルエリアネットワーク）であってもよい。
【００５２】
クライアント３には、サーバ１と同様にネットワーク接続機能が設けられており、ネットワーク２を介してサーバ１へウェブ情報の要求を行ったり、サーバ１より提供されたウェブ情報を取得することが可能となっている。具体的に、一般的なクライアント３には、ブラウザがインストールされている。ユーザが、ブラウザに対して所定のＵＲＬやコメントなどを入力し、所定のアクションを行うことによって、サーバ１への様々な要求を行うことが可能となっている。また、サーバ１より提供されたウェブ情報をクライアント３で取得した場合には、ブラウザにウェブ情報を表示することが可能となっている。
【００５３】
サーバ１は、所謂、ウェブサーバに該当し、ネットワーク２を介してクライアント３より取得した要求に応じてウェブ情報を提供することが可能となっている。サーバ１からクライアント３に対して提供されるウェブ情報は、例えば、クライアント３のブラウザにおけるＵＲＬ入力欄に入力されたＵＲＬに基づいて判断され、また、ブラウザに表示されたウェブページのコメント入力欄への入力内容等に応じて判断される。
【００５４】
なお、図１には、説明の便宜上、サーバ１とクライアント３とが１台ずつしか示されていないが、サーバ１およびクライアント３の接続台数はそれぞれ１台ずつには限定されず、複数台ずつ接続されるものであってもよい。
【００５５】
図２は、サーバ１の概略構成を示したブロック図である。サーバ１は、ディスプレイ部１１と、入力操作部１２と、本体部１３とを有している。
【００５６】
ディスプレイ部１１は、本体部１３における処理内容を、ユーザに対して視認可能に表示させる役割を有している。ディスプレイ部１１には、液晶ディスプレイや、ＣＲＴディスプレイなどの一般的な表示装置が用いられる。また、入力操作部１２は、ユーザがサーバ１の本体部１３に対してデータ等の入力を行う場合に操作される入力手段であって、例えば、キーボードやマウスなどの一般的な入力デバイスによって構成される。
【００５７】
なお、本実施の形態に係るサーバ１においては、ディスプレイ部１１や入力操作部１２が設けられているが、サーバ１としての機能を確保するためには、本体部１３のみが少なくとも設けられていればよいため、ディスプレイ部１１や入力操作部１２は必要に応じて省略することも可能である。
【００５８】
本体部１３は、制御部（文字列分割手段、文字列抽出手段、特徴ベクトル生成手段、判別手段）２０と、データ記憶部２１と、通信部２２とを有している。
【００５９】
データ記憶部２１は、ハードディスク、ＳＳＤ（Solid State Drive）などの補助記憶装置により構成されている。データ記憶部２１には、制御部２０において実行される悪性ウェブコードの判別処理に関するプログラムが記録されている。また、データ記憶部２１は、クライアント３からの要求に応じてクライアント３に提供するウェブ情報が記録されている。
【００６０】
通信部２２は、制御部２０の指示に従って、ネットワーク２を介してクライアント３にウェブ情報を送信すると共に、クライアント３より受信したウェブ情報の要求（要求情報）を受信する役割を有している。通信部２２は、ＬＡＮボードやＬＡＮカードなどの一般的なＮＩＣ（Network Interface Card）により構成されている。
【００６１】
制御部２０は、データ記憶部２１に記録されるプログラムに従って、後述する悪性ウェブコードの判別処理を行う役割を有している。従って、制御部２０は、プログラムに基づいて悪性ウェブコードの判別処理を行う分類部４０としての機能を有している（後述する図３参照）。
【００６２】
また、制御部２０は、通信部２２を介して受信されたクライアント３からのウェブ情報の要求（要求情報）に応じて、ウェブ情報を、通信部２２を介して提供する処理を行うことが可能となっている。
【００６３】
制御部２０は、ＣＰＵ（Central Processing Unit）３０と、ＲＡＭ（Random Access Memory）３１とを有している。ＣＰＵ３０は、制御部２０における悪性ウェブコードの判別処理を実質的に実行する役割を有している。ＲＡＭ３１は、ＣＰＵ３０の処理に利用されるワークエリアとして用いられる。
【００６４】
次に、制御部２０のＣＰＵ３０による悪性ウェブコードの判別処理について説明する。ＣＰＵ３０は、データ記憶部２１に記録されるプログラムに従って、悪性ウェブコードの判別処理を実行する。
【００６５】
悪性ウェブコードとして、ＳＱＬインジェクションとクロスサイトスクリプティングとが知られている。これらの悪性ウェブコードを防ぐ手段がいくつか存在するが、その代表的な手法がサニタイジングである。
【００６６】
ＳＱＬインジェクションにおけるサニタイジングでは、ＳＱＬインジェクションを行う場合に主として必要とされる一定の文字データに対して、エスケープ処理を施す方法を用いる。例えば 「’（シングルクォーテーション）」は、ＳＱＬのクエリにおいて、文字列を表現する場合に用いられる記号（文字）である。例えば、「‘テスト’」のように 「‘」「’」を「テスト」の文字の前後に付加することによって、ＳＱＬのクエリ内で文字列と判断されて文字列として扱われることになる。
【００６７】
エスケープ処理を施す場合には、対象となる文字の前に「￥（バックスラッシュに相当する文字）」を付加することで、ＳＱＬクエリ内で対象となる文字データを文字列として処理できるようにする。例えば、「’」を「￥’」とすることで、ＳＱＬクエリ内では文字列を表現するための文字ではなく単なる文字として扱われることになる。
【００６８】
クロスサイトスクリプティングにおけるサニタイジングでは、ＪａｖａＳｃｒｉｐｔの生成に必要な「＜」や「＞」を「％ｌｔ；」や「＆ｇｔ；」のようにＨＴＭＬ実体参照文字列に変換する事によって、ＪａｖａＳｃｒｉｐｔとして認識されないようにするための処理を行う。
【００６９】
また、悪性ウェブコードを防ぐ手段として、ホワイトリストやブラックリストを用いる防衛手法も知られている。ホワイトリストは、サーバ１における処理を許可する文字列を予め決めたものである。サーバ１の制御部２０では、ネットワーク２を介してクライアント３より取得（受信）した文字列が、許可された文字列（ホワイトリストの対象となる文字列）であれば、受信した文字列に応じた通常の処理を行い、許可された文字列でなければ（ホワイトリストの対象とならない文字列の場合には）、取得（受信）した文字列に対する通常の処理を行わないような対処を行う。
【００７０】
ブラックリストは、サーバ１における処理を許可しない文字列を予め決めたものであり、クライアント３から取得（受信）された文字列が、許可しない文字列（ブラックリストの対象となる文字列）であれば、サーバ１の制御部２０において、受信した文字列に対応する処理を行わないような対処を行う。
【００７１】
このようなサニタイジング処理を用いることによって、効果的に悪性ウェブコードの攻撃を防衛する事はできるが、ブロックされた文字列が悪意のあるものであったか否かという判別をすることはできない。この点はホワイトリストによる防衛手法にも共通することであり、ホワイトリストによってブロックされた文字列が悪意のあるものであったか否かは、ホワイトリストのリスト一覧によって判別することが不可能である。
【００７２】
このため、サニタイジング処理やホワイトリストによる防衛手法では、制御部２０のＣＰＵ３０において、受信された文字列データが悪意のあるものであるか否かを積極的に判定させ、その判定結果に応じて悪性ウェブコードの攻撃に柔軟に対応することが不可能であった。
【００７３】
本実施の形態に係るサーバ１の制御部２０では、ネットワーク２を介してクライアント３より取得した文字列データが悪意のあるものであるか否かを判断し、その判断結果に応じて効果的に悪性ウェブコードの攻撃を防衛する方法を実現する。
【００７４】
図３は、悪性ウェブコードの判別処理のために制御部２０において行われる処理を機能ブロックで示したものである。制御部２０では、データ記憶部２１に記録されるプログラムに基づいて分類部４０として機能する。より詳細に説明すると、制御部２０は、字句解析部（文字列分割手段、文字列抽出手段）４１と、数値割当部４２と、特徴ベクトル生成部（特徴ベクトル生成手段）４３と、機械学習部４４と、判定部（判別手段）４５とを有している。
【００７５】
字句解析部４１は、ユーザがブラウザのコメント入力欄（入力フォーム）などに入力した文字列データ（入力フォームのデータ）を分割し、分割された文字列をトークン化する役割を有している。ここで、トークンとは、プログラミング言語のソースコードを構成する単語や記号の最小単位を意味する。従って、字句解析部４１は、ウェブサイト（ウェブページ）を構成するＨＴＭＬ言語などのソースコードを文字列データとして捉え、一定の分割パターンに従って文字列データを分割し、分割した文字列の中からソースコードを構成する単語や記号の最小単位となる文字列を求めてトークンとして文字列を抽出する役割を有している。
【００７６】
本実施の形態に係るサーバ１では、字句解析部４１において文字列データを分割し、トークン化する処理を行うに際し、取得した文字列データがＳＱＬインジェクションに該当する文字列か、クロスサイトスクリプティングに該当する文字列かの２種類の判断を行う。このため、字句解析部４１は、ＳＱＬインジェクションに該当するか否かの判断を行うために用いられるＳＱＬインジェクション用分割部（文字列分割手段）５１とＳＱＬインジェクション用トークン処理部（文字列抽出手段）５２とを有し、さらに、クロスサイトスクリプティングに該当するか否かの判断を行うために用いられるクロスサイトスクリプティング用分割部（文字列分割手段）５３とクロスサイトスクリプティング用トークン処理部（文字列抽出手段）５４とを有している。
【００７７】
文字列データに対してＳＱＬインジェクションの判断処理を行う場合には、ＳＱＬインジェクション用分割部５１において文字列データの分割処理を行い、分割処理された文字列を、ＳＱＬインジェクション用トークン処理部５２でトークン化する処理を行う。一方で、文字列データに対してクロスサイトスクリプティングの判断処理を行う場合には、クロスサイトスクリプティング用分割部５３において文字列データの分割処理を行い、分割処理された文字列を、クロスサイトスクリプティング用トークン処理部５４でトークン化する処理を行う。これらの分割処理およびトークン化処理については後述する。
【００７８】
数値割当部４２は、トークン化処理された文字列に対して、トークンのカテゴリ毎に数値割り当てを行う役割を有している。さらに特徴ベクトル生成部４３においては、数値割当部４２において数値割り当てされた文字列について、トークンのカテゴリをベクトルの向きとし、数値割り当てされた値をベクトルの長さとして、特徴ベクトルを生成する役割を有している。この特徴ベクトルを生成することにより、取得された文字列データがＳＱＬインジェクションに該当し得るデータであるか、あるいは、クロスサイトスクリプティングに該当し得るデータであるか否かの判断を行うことが可能となる。
【００７９】
機械学習部４４は、ＳＱＬインジェクションおよびクロスサイトスクリプティングに該当する悪性ウェブコードの特徴ベクトルと、悪性ウェブコードに該当しない文字列（無害な文字列）の特徴ベクトルとに基づいて、悪性ウェブコードに該当するか否かの判別を行うための機械学習を行う役割を有している。
【００８０】
判定部４５は、特徴ベクトルに基づいて悪性ウェブコードに該当するか否かの判定を行う役割を有している。判定部４５では、機械学習部４４における機械学習の学習結果に基づいて文字列の特徴ベクトルを分類し、悪性ウェブコードに該当するか否かの判断を行う。
【００８１】
次に、具体的に、入力された文字列からＳＱＬインジェクションとクロスサイトスクリプティングとの判別を行う方法について説明を行う。
【００８２】
ＳＱＬインジェクションとクロスサイトスクリプティングとの判別を行うために、制御部２０は、入力された文字列データを所定のルールに従って複数の文字列に分割してカテゴリ別（文字列の種類別）に分ける処理を行う。制御部２０におけるこの分割処理は、ＳＱＬインジェクションとクロスサイトスクリプティングとに関してそれぞれ行われる。制御部２０は、ＳＱＬインジェクション用の分割処理を行うことから、上述したＳＱＬインジェクション用分割部５１として機能し、また、クロスサイトスクリプティング用の分割処理を行うことから、上述したクロスサイトスクリプティング用分割部５３として機能することになる。
【００８３】
さらに、分割された文字列に基づいて、トークン化処理を行うことにより、文字列のカテゴリ（種類）に応じて文字列の分類を行う。制御部２０では、このトークン化処理を、ＳＱＬインジェクションとクロスサイトスクリプティングとに関してそれぞれ行う。このため、制御部２０は、ＳＱＬインジェクション用のトークン化処理を行うＳＱＬインジェクション用トークン処理部５２として機能し、また、クロスサイトスクリプティング用のトークン化処理を行うクロスサイトスクリプティング用トークン処理部５４として機能することになる。
【００８４】
（１）字句解析部による文字列の素性抽出
本実施の形態において字句解析部４１とは、一般的にプログラミング言語で記述されたソースコードを構成する文字の並びを、トークンの並びに変換する処理を行うものを意味する。本実施の形態に係るサーバ１では、ウェブサイトに入力された文字列からＳＱＬインジェクションの特徴を示す素性とクロスサイトスクリプティングの特徴を示す素性を抽出する。このため、字句解析部４１は、ＳＱＬインジェクション用の字句解析機能（ＳＱＬインジェクション用分割部５１およびＳＱＬインジェクション用トークン処理部５２）とクロスサイトスクリプティング用の字句解析機能（クロスサイトスクリプティング用分割部５３およびクロスサイトスクリプティング用トークン処理部５４）とを有している。
【００８５】
ここで、ＳＱＬインジェクション用に設けられるＳＱＬインジェクション用分割部５１の文字列データの文字列分割パターン（分割ルール）と、クロスサイトスクリプティング用に設けられるクロスサイトスクリプティング用分割部５３の文字列分割パターン（分割ルール）とは、それぞれ異なる分割パターンとなっている。
【００８６】
ＳＱＬインジェクションの特徴を示す素性とクロスサイトスクリプティングの特徴を示す素性とを抽出する場合において、ＳＱＬインジェクション用分割部５１やクロスサイトスクリプティング用分割部５３をそのまま用いて素性の抽出に利用するのでは、悪性ウェブコードの素性を効果的に抽出することが困難である。このため、制御部２０では、ＳＱＬインジェクションやクロスサイトスクリプティングを行う場合に頻繁に利用される文字列に注目し、これらの文字列に対しては、既存の字句解析により求められるものと異なるトークンを抽出する。
【００８７】
図４（ａ）に示す例１は、ＳＱＬインジェクションに該当し得る文字列データの例を示したものであり、図４（ｂ）に示す例２は、クロスサイトスクリプティングに該当し得る文字列データの例を示したものである。また、ウェブサイトに入力される文字列には一般的な利用者が入力するような無害な文字列が含まれることが多い。図４（ｃ）に示す例３は、このような無害な文字列のデータを示している。
【００８８】
ＳＱＬインジェクションやクロスサイトスクリプティングに該当し得る文字列、又は無害な文字列から素性を抽出するためには、まず、制御部２０において、図５（ａ）に示した例４や、図５（ｂ）に示した例５のような文字列分割パターン（分割ルール）を用いて、予め規定される文字列に適合する文字列を、該当する文字列毎に分割する処理を行う。制御部２０では、例４の文字列分割パターンに基づいて文字列の分割を行うことにより、ＳＱＬインジェクションに対応する文字列の分割処理を行うことが可能となっている。また、同様に、制御部２０では、例５の文字列分割パターンに基づいて文字列の分割を行うことにより、クロスサイトスクリプティングに対応する文字列の分割処理を行うことが可能となっている。
【００８９】
なお、図５（ｃ）に示す例６は、「‘  ｏｒ  １＝１；  ――」からなる文字列データを分割前の文字列データとし、この文字列データのうち空白文字（スペース）が存在する場合に、空白文字を境界として文字列データの分割を行うという分割パターンを用いて、文字列データの分割処理を行った例を示したものである。例６に示すように空白文字の存在を基準として文字列データの分割を行う方法を用いることも可能である。しかしながら、例４に示すような手法で文字列データの分割を行うことにより、ＳＱＬインジェクションの判定精度を向上させ得るような分割処理を行うことができ、また、例５に示すような手法で文字列データの分割を行うことにより、クロスサイトスクリプティングの判定精度を向上させ得るような分割処理を行うことができる。
【００９０】
具体的に、例４や例５に示す文字列分割パターンでは、分割対象となる規定の文字列の表現に正規表現を利用している。例４と例５とに示す正規表現は、Ｊａｖａ（登録商標) ＳＥ６のＰａｔｔｅｒｎクラスにおいて定義されるものである。例４に示される正規表現の意味をわかりやすく示すと、図６（ａ）に示す例７のように、例４に示す文字列分割パターンによって、入力された文字列が、英数字の単語と、行末コメントと、数値と、文字列リテラルと、その他の文字列とに分割されることになる。また同様に、図６（ｂ）に示す例８のように、例５に示す文字列分割パターンによって、入力された文字列が、英数字の単語と、数字と、タグと、文字列リテラルと、その他の文字列とに分割されることになる。
【００９１】
例７に示された分割後の文字列の種類と、例８に示された分割後の文字列の種類とを比較すると、互いに相異する文字列が含まれている。例７に示される分割後の文字列の種類は、ＳＱＬインジェクションの判定精度を高めるための分割パターンに基づくものであり、例８に示される分割後の文字列の種類は、クロスサイトスクリプティングの判定精度を高めるための分割パターンに基づくものであるためである。
【００９２】
このように、制御部２０が、文字列データを例４や例５のような文字列分割パターンに基づいて所定の文字列に分割することにより、ＳＱＬインジェクションの判定精度を向上させるような分割処理、また、クロスサイトスクリプティングの判定精度を向上させるような分割処理を行うことが可能となる。
【００９３】
なお、図６（ｃ）に示す例９は、例１に示した文字列データを、例４に示した文字列分割パターンに従って複数の文字列に分割した分割結果が示されている。また、図６（ｄ）に示す例１０は、例２に示した文字列データを、例５に示した文字列分割パターンに従って文字列に分割した分割結果が示されている。例９および例１０に示すようにして分割された文字列の境界には、空白文字が設けられている。
【００９４】
次に、制御部２０では、トークン化処理を行う。トークン化処理とは、分割された文字列に対して、意味を付与する処理を意味する。分割された文字列の集合は、トークン化処理によってトークンに変換される。制御部２０では、トークン化を行うために、予め規定したトークンと、それぞれのトークンに対応する文字列の表現を規定しておき、データ記憶部２１に記録しておく。
【００９５】
制御部２０では、分割された文字列が、予め規定したトークンの表現文字列に適合した場合に、該当する文字列のトークン化を行う。図７の例１１は、ＳＱＬインジェクションにおけるトークン化処理のトークン名とトークンの文字列表現との対応表を示している。制御部２０では、分割された文字列の中に、図７の例１１に示すトークンの文字列表現に該当する文字列が存在するか否かを判断し、該当する文字列が存在する場合に、該当する文字列を例１１に示すトークン名にトークン化する処理を行う。具体的には、該当する文字列を、行末コメント、演算子、論理演算子、区切り子、予約語を含む複数のトークンに変換する。このように制御部２０では、ＳＱＬインジェクションにおけるトークン化処理も行うことから、制御部２０がＳＱＬインジェクション用トークン処理部５２として機能することになる。
【００９６】
また、図８に示す例１２は、クロスサイトスクリプティングにおけるトークン化処理のトークン名とトークンの文字列表現との対応表を示している。制御部２０では、分割された文字列の中に、図８の例１２に示すトークンの文字列表現に該当する文字列が存在するか否かを判断し、該当する文字列が存在する場合に、該当する文字列を例１２に示すトークン名にトークン化する処理を行う。具体的には、該当する文字列を、タグ、区切り子、ＦＰＭ（JavaScriptの関数、プロパティ、メソッドを表す）、記号を含む複数のトークンに変換する。このように制御部２０では、クロスサイトスクリプティングにおけるトークン化処理も行うことから、制御部２０がクロスサイトスクリプティング用トークン処理部５４として機能することになる。
【００９７】
図９および図１０は、図７に示したＳＱＬインジェクションにおけるトークン化処理の具体的な処理手順をフローチャートで示した図である。
【００９８】
まず制御部２０は、ＳＱＬインジェクション用分割部５１で分割された文字列が、「−」で始まる文字列、もしくは、「＃」で始まる文字列に該当する文字列であるか否かを判断する（ステップＳ．１）。ウェブサイトの入力フォームにおいて、行末コメントが入力された場合には、「−」で始まる文字列、もしくは、「＃」で始まる文字列として行末コメントが記録されることになる。このため、「−」で始まる文字列、もしくは、「＃」で始まる文字列を抽出してトークン化することにより、行末コメントとして入力された文字列を他の文字列と区別することが可能となる。分割された文字列が、「−」で始まる文字列、もしくは、「＃」で始まる文字列に該当する場合（ステップＳ．１に該当する文字列の場合）、制御部２０は、該当する文字列（ステップＳ．１においてＹｅｓとなる文字列）を行末コメントとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．２）。
【００９９】
次に、制御部２０は、ステップＳ．１またはステップＳ．２による処理を経た文字列が、「／＊」と「＊／」とで囲まれた任意の文字列に該当する文字列であるか否かを判断する（ステップＳ．３）。「／＊」と「＊／」とで囲まれた任意の文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３においてＹｅｓとなる文字列）をコメントとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．４）。
【０１００】
次に、制御部２０は、ステップＳ．３またはステップＳ．４による処理を経た文字列が、「＜＞、＜＝＞、＞＝、＜＝、＝＝、＝、！＝、＜＜、＞＞、＜、＞、−、＋、％、？」のいずれかの記号に該当する文字列であるか否かを判断する（ステップＳ．５）。「＜＞、＜＝＞、＞＝、＜＝、＝＝、＝、！＝、＜＜、＞＞、＜、＞、−、＋、％、？」のいずれかの記号に該当する文字列の場合、制御部２０は、該当する文字列（ステップＳ．５においてＹｅｓとなる文字列）を演算子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．６）。
【０１０１】
次に、制御部２０は、ステップＳ．５またはステップＳ．６による処理を経た文字列が、「ＮＯＴ、ＡＮＤ、ＯＲ、ＸＯＲ、！、＆＆、｜｜」のいずれかの文字または記号に該当するか否かを判断する（ステップＳ．７）。「ＮＯＴ、ＡＮＤ、ＯＲ、ＸＯＲ、！、＆＆、｜｜」のいずれかの文字または記号に該当する場合、制御部２０は、該当する文字列（ステップＳ．７においてＹｅｓとなる文字列）を論理演算子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．８）。
【０１０２】
次に、制御部２０は、ステップＳ．７またはステップＳ．８による処理を経た文字列が、「［、］、（、）、，、；、．」のいずれかの記号に該当するか否かを判断する（ステップＳ．９）。「［、］、（、）、，、；、．」のいずれかの記号に該当する場合、制御部２０は、該当する記号（ステップＳ．９においてＹｅｓとなる文字列）を区切り子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．１０）。
【０１０３】
次に、制御部２０は、ステップＳ．９またはステップＳ．１０による処理を経た文字列が、「‘」と「’」とで囲まれた任意の文字列、もしくは、「“」と「”」とで囲まれた任意の文字列に該当するか否かを判断する（ステップＳ．１１）。「‘」と「’」とで囲まれた任意の文字列、もしくは、「“」と「”」とで囲まれた任意の文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．１１においてＹｅｓとなる文字列）を文字リテラルとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．１２）。
【０１０４】
次に、制御部２０は、ステップＳ．１１またはステップＳ．１２による処理を経た文字列が、「ＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥ、ＣＲＥＡＴＥ、ＤＲＯＰ、ＡＬＴＥＲ、ＲＥＮＡＭＥ」のいずれかの文字列に該当する文字列であるか否かを判断する（ステップＳ．１３）。「ＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥ、ＣＲＥＡＴＥ、ＤＲＯＰ、ＡＬＴＥＲ、ＲＥＮＡＭＥ」のいずれかの文字列に該当する文字列である場合、制御部２０は、該当する文字列（ステップＳ．１３においてＹｅｓとなる文字列）をデータ操作としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．１４）。
【０１０５】
次に、制御部２０は、ステップＳ．１３またはステップＳ．１４による処理を経た文字列が、数値を表す文字列（例えば、０．１や−０．０１など）に該当する文字列であるか否かを判断する（ステップＳ．１５）。数値を表す文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．１５においてＹｅｓとなる文字列）を数値としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．１６）。
【０１０６】
次に、制御部２０は、ステップＳ．１５またはステップＳ．１６による処理を経た文字列が、図１１に示す予約語のいずれかの文字列に該当するか否かを判断する（ステップＳ．１７）。図１１は、データ操作にある文字列（ステップＳ．１３においてＹｅｓに該当する文字列）を除いたＭｙＳＱＬ（世界的に知られているオープンソースデータベース）に規定されている予約語の一覧を一例として示した表である。ここで、予約語とは、プログラミング言語において識別子（変数名、関数名、クラス名など）としてのルールを満たしているにもかかわらず、識別子として使えない字句要素を意味している。
【０１０７】
図１１に示す予約語のいずれかの文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．１７においてＹｅｓとなる文字列）を予約語としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．１８）。
【０１０８】
次に、制御部２０は、ステップＳ．１７またはステップＳ．１８による処理を経た文字列が、アルファベットの大文字（Ａ〜Ｚ）と小文字（ａ〜ｚ）と「＿」とで構成された文字列に該当するか否かを判断する（ステップＳ．１９）。アルファベットの大文字（Ａ〜Ｚ）と小文字（ａ〜ｚ）と「＿」とで構成された文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．１９においてＹｅｓとなる文字列）を予約語ではない単語を構成する文字列を示す識別子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．２０）。
【０１０９】
そして、制御部２０は、ステップＳ．１９またはステップＳ．２０による処理を経た文字列であって、ステップＳ．１、ステップＳ．３、ステップＳ．５、ステップＳ．７、ステップＳ．９、ステップＳ．１１、ステップＳ．１３、ステップＳ．１５、ステップＳ．１７、ステップＳ．１９の全ての処理においてＮｏであった文字列（これらの全てのステップにおける条件を満たさない文字列）に該当するか否かを判断する（ステップＳ．２１）。そして、全ての処理においてＮｏであった文字列（全ての条件を満たさない文字列）に該当する場合（ステップＳ．２１においてＹｅｓの場合）に、制御部２０は、該当する文字列（ステップＳ．２１においてＹｅｓに該当する文字列）を記号としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録して（ステップＳ．２２）、トークン化処理を終了する。一方で、全ての処理においてＮｏであった文字列に該当しなかった場合（ステップＳ．２１においてＮｏの場合）、つまり、いずれかの処理においてＹｅｓと判断されてトークン化された文字列に対しては、そのままトークン化処理を終了する。
【０１１０】
ＳＱＬインジェクションでは、本来のＳＱＬ文から悪性ウェブコードを挿入するにあたり、行末コメントを用いて、不必要な部分をコメントアウトする手口が多く用いられる。この手口はＳＱＬインジェクション特有のものである。このため、本実施の形態に係る制御部２０は、図９および図１０に示すように、行末コメントのトークン化処理を、演算子や区切り子のトークン化処理から独立して行っている。このように、演算子や区切り子よりも優先して独立した形で、行末コメントをトークン化処理することによって、ＳＱＬインジェクションで用いられる可能性が高い行末コメントの文字列を精度良く抽出することが可能になり、結果として効果的なトークン化処理を行うことが可能となる。
【０１１１】
一方で、図１２は、図８に示したクロスサイトスクリプティングにおけるトークン化処理の具体的な処理手順をフローチャートで示した図である。
【０１１２】
まず制御部２０は、クロスサイトスクリプティング用分割部５３で分割された文字列が、「＜」と「＞」とで囲まれた任意の文字列、もしくは、「＜／」と「＞」とで囲まれた任意の文字列に該当するか否かを判断する（ステップＳ．３１）。「＜」と「＞」とで囲まれた任意の文字列、もしくは、「＜／」と「＞」とで囲まれた任意の文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３１においてＹｅｓとなる文字列）をタグとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．３２）。
【０１１３】
次に、制御部２０は、ステップＳ．３１またはステップＳ．３２による処理を経た文字列が、図１３に示す区切り子のいずれかの文字列に該当するか否かを判断する（ステップＳ．３３）。図１３に示す区切り子のいずれかの文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３３においてＹｅｓとなる文字列）を区切り子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．３４）。
【０１１４】
次に、制御部２０は、ステップＳ．３３またはステップＳ．３４による処理を経た文字列が、「‘」と「’」とで囲まれた任意の文字列、もしくは、「“」と「”」とで囲まれた任意の文字列に該当する文字列であるか否かを判断する（ステップＳ．３５）。「‘」と「’」とで囲まれた任意の文字列、もしくは、「“」と「”」とで囲まれた任意の文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３５においてＹｅｓとなる文字列）を文字列リテラルとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．３６）。
【０１１５】
次に、制御部２０は、ステップＳ．３５またはステップＳ．３６による処理を経た文字列が、数値を表す文字列（例えば、０．１や−０．０１など）に該当する文字列であるか否かを判断する（ステップＳ．３７）。数値を表す文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３７においてＹｅｓとなる文字列）を数値としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．３８）。
【０１１６】
次に、制御部２０は、ステップＳ．３７またはステップＳ．３８による処理を経た文字列が、図１４に示すオブジェクトのいずれかの文字列に該当するか否かを判断する（ステップＳ．３９）。図１４は、ＪａｖａＳｃｒｉｐｔのオブジェクト名を表した文字列の一覧を一例として示したものである。図１４に示すオブジェクトのいずれかの文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．３９においてＹｅｓとなる文字列）をオブジェクトとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．４０）。
【０１１７】
次に、制御部２０は、ステップＳ．３９またはステップＳ．４０による処理を経た文字列が、図１５に示すＦＰＭのいずれかの文字列に該当するか否かを判断する（ステップＳ．４１）。図１５は、ＪａｖａＳｃｒｉｐｔの関数、プロパティ、メソッドを表した文字列の一覧を一例として示したものである。図１５に示すＦＰＭのいずれかの文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．４１においてＹｅｓとなる文字列）をＦＰＭとしてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．４２）。
【０１１８】
次に、制御部２０は、ステップＳ．４１またはステップＳ．４２による処理を経た文字列が、図１６に示す予約語のいずれかの文字列に該当するか否かを判断する（ステップＳ．４３）。図１６は、ＪａｖａＳｃｒｉｐｔに規定されている予約語を表した文字列の一覧を一例として示したものである。図１６に示す予約語のいずれかの文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．４３においてＹｅｓとなる文字列）を予約語としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．４４）。
【０１１９】
次に、制御部２０は、ステップＳ．４３またはステップＳ．４４による処理を経た文字列が、アルファベットの大文字（Ａ〜Ｚ）と小文字（ａ〜ｚ）と「＿」とで構成された文字列に該当するか否かを判断する（ステップＳ．４５）。アルファベットの大文字（Ａ〜Ｚ）と小文字（ａ〜ｚ）と「＿」とで構成された文字列に該当する場合、制御部２０は、該当する文字列（ステップＳ．４５においてＹｅｓとなる文字列）を予約語ではない単語を構成する文字列を示す識別子としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録する（ステップＳ．４６）。
【０１２０】
そして、制御部２０は、ステップＳ．４５またはステップＳ．４６による処理を経た文字列であって、ステップＳ．３１、ステップＳ．３３、ステップＳ．３５、ステップＳ．３７、ステップＳ．３９、ステップＳ．４１、ステップＳ．４３、ステップＳ．４５の全ての処理においてＮｏであった文字列（これらの全てのステップにおける条件を満たさない文字列）に該当するか否かを判断する（ステップＳ．４７）。そして、全ての処理においてＮｏであった文字列（全ての条件を満たさない文字列）に該当する場合（ステップＳ．４７においてＹｅｓの場合）に、制御部２０は、該当する文字列（ステップＳ．４７においてＹｅｓに該当する文字列）を記号としてトークン化し、データ記憶部２１あるいはＲＡＭ３１に記録して（ステップＳ．４８）、トークン化処理を終了する。一方で、全ての処理においてＮｏであった文字列に該当しなかった場合（ステップＳ．４７においてＮｏの場合）、つまり、いずれかの処理においてＹｅｓと判断されてトークン化された文字列に対しては、そのままトークン化処理を終了する。
【０１２１】
クロスサイトスクリプティングにおいては、タグを含んだ悪性ウェブコードが多く用いられる傾向があるため、タグに該当する文字列を他の要素から独立してトークン化している。このように、タグに該当する文字列を他の要素よりも優先して独立にトークン化することによって、クロスサイトスクリプティングで用いられる可能性が高いタグの文字列を精度良く抽出することが可能になり、結果として効果的なトークン化処理を行うことが可能となる。なお、ウェブページにタグを含まない悪性ウェブコードを挿入しても、ただの文字列として認識されて、悪性ウェブコードが実行されない。
【０１２２】
また、ＳＱＬインジェクションにおいては、上述した行末コメントの他に、演算子、論理演算子、区切り子、予約語などの文字列は他の文字列と比較して悪性ウェブコードに含まれる可能性が高い。このため、これらの文字列を独立してトークンに変換することにより、ＳＱＬインジェクションにおける悪性ウェブコードの検出精度を高めることが可能なトークン化処理を行うことが可能となる。また、同様に、クロスサイトスクリプティングにおいても、上述したタグの他に、区切り子、ＦＰＭ、記号などの文字列は、他の文字列に比較して悪性ウェブコードに含まれる可能性が高い。このため、これらの文字列を独立してトークンに変換することにより、クロスサイトスクリプティングにおける悪性ウェブコードの検出精度を高めることが可能なトークン化処理を行うことが可能となる。
【０１２３】
例えば、図１７（ａ）に示す例１３は、例１の文字列を例４に示す文字列分割パターンに従って、制御部２０で文字列に分割し、その後に、例１１および図９・図１０に示すフローチャートに従って、分割された文字列をトークン化することで得られた結果を示している。
【０１２４】
また、図１７（ｂ）に示す例１４は、例２の文字列を例５に示す文字列分割パターンに従って、制御部２０で文字列に分割し、その後に、例１２および図１２に示すフローチャートに従って、分割された文字列をトークン化することで得られた結果を示している。
【０１２５】
なお、図１７（ｃ）に示す例１５は、例３に示した無害な文字列をトークン化した結果を示している。このような無害な文字列は、悪性ウェブコードに該当する可能性が低い。このため、例３に示す無害な文字列を、例４に示す文字列分割パターンに従って文字列に分割し、その後に、例１１および図９・図１０に示すフローチャートに従って、分割された文字列をトークン化すると、無害な文字列が、図９・図１０のフローチャートにおけるステップＳ．１、ステップＳ．３、ステップＳ．５、ステップＳ．７、ステップＳ．９、ステップＳ．１１、ステップＳ．１３、ステップＳ．１５、ステップＳ．１７、ステップＳ．１９の全ての処理において該当しない文字列（これらの全てのステップにおける条件を満たさない文字列）として判断されて、記号としてトークン化されることになる。
【０１２６】
上述したように、図９・図１０および図１２に示したような処理を行うことによって、与えられた文字列は最終的にトークンの集合として表されることになる。集合として表されたトークンを素性と見なすことにより、文字列から悪性ウェブコードの特徴を捉える素性を、機械学習を用いて抽出することが可能となる。ここで、機械学習とは、教師データにあるデータのパターンとそのデータのクラスの関連性を学習することによって、悪性ウェブデータに該当するか否かの分類手法を求め、教師データにはない新たに与えられたデータを分類手法に基づいて解析し、教師データで規定されたクラスのいずれかに分類する処理を行う。
【０１２７】
機械学習を用いて悪性ウェブコードの特徴を捉える素性を抽出するためには、各データの素性に対して数値の割当を行う必要がある。最も代表的な数値の割当計算法として、例えば、用語出現頻度（Ｔｅｒｍ Ｆｒｅｑｕｅｎｃｙ：以下、ＴＦと称する）や、Ｔｅｒｍ Ｆｒｅｑｕｅｎｃｙ Ｉｎｖｅｒｓｅ Ｄｏｃｕｍｅｎｔ Ｆｒｅｑｕｅｎｃｙ（以下、ＴＦ−ＩＤＦと称する）などが知られている。
【０１２８】
どの割当計算法が良いかは、事前に交差検定等の評価を行って、一番良い割当計算法を選ぶことが好ましい。例えば、図１７（ａ）に示す例１３によって抽出されたトークンに対して、ＴＦの割当計算法によって数値の割当計算を行うと、図１８（ａ）に示す例１６のような計算結果となり、図１７（ｂ）に示す例１４によって抽出されたトークンに対して、ＴＦの割当計算法によって数値の割当計算を行うと、図１８（ｂ）に示す例１７のような計算結果となり、図１７（ｃ）に示す例１５によって抽出されたトークンに対して、ＴＦの割当計算法によって数値の割当計算を行うと、図１８（ｃ）に示す例１８のような計算結果となる。
【０１２９】
図１８に示すように、ＴＦによる割当計算法などを用いて数値計算を行うことによって、文字列データから機械学習に必要となる素性の生成処理を行うことが可能となる。本実施の形態に係るサーバ１では、制御部２０が、データ記憶部２１またはＲＡＭ３１に記録されているトークン化された文字列を読み出し、トークン化された文字列の数値割り当て処理を行う。このため、本実施の形態に係る制御部２０は、数値割当部４２として機能することになる。
【０１３０】
図１８に示した抽出手法ではユニグラムを用いており、ユニグラムとして抽出されるトークンの一つ一つを素性として扱う方法を用いている。しかしながら、連続して出現した二つないしは、三つのトークンを一つの素性として抽出するバイグラム、トライグラムと呼ばれる手法を用いることも、抽出されたトークンの出現順序を考慮すると、素性の生成処理として有効であると考えられる。
【０１３１】
ユニグラム、バイグラム、またはトライグラムのどの抽出方法が良いかは、トークンに割り当てる数値の計算方法と同じように、交差検定等による評価で一番良い結果が得られるものから判断すれば良い。図１９（ａ）に示す例１９は、例１の文字列に対してバイグラムにより生成された素性とその素性に対してＴＦの割当計算法による数値の割当を行った結果を例示している。
【０１３２】
さらに、制御部２０では、数値割り当て処理が行われた文字列について、トークン化されたカテゴリ（トークンの種類）をベクトルの方向として、割り当てられた数値をベクトルの長さとして、文字列の特徴ベクトルを生成する。このように特徴ベクトルを生成することにより、文字列の素性を機械学習によって判断するために必要なデータを得ることが可能となる。本実施の形態に係るサーバ１では、制御部２０が、トークンのカテゴリと割り当てられた数値とに基づいて特徴ベクトルの生成を行うため、特徴ベクトル生成部４３として機能することになる。次に、生成された特徴ベクトルを用いて、悪性ウェブコードを判定する手法について説明する。
【０１３３】
（２）機械学習による悪性ウェブコードの判定
本実施の形態に係る制御部２０では、予め用意した悪性ウェブコードの文字列と無害な文字列とを、トークンを素性としたデータとして表現することにより、機械学習に必要な教師データを生成することができる。機械学習により、上述したように、教師データにあるデータのパターンとそのデータのクラスの関連性を学習することによって分類手法を求め（この分類手法により分類を行うことが可能な分類器を生成し）、教師データにない新たなデータを、求められた分類手法に基づいて（制御部２０が分類器として機能して）解析することにより、教師データで規定されたクラスのいずれかに分類する処理を行う。
【０１３４】
つまり、本実施の形態に係るサーバ１では、悪性ウェブコードの文字列における特徴ベクトルの特性と無害な文字列における特徴ベクトルの特性とに基づいて、悪性ウェブコードに対応する教師データを生成し、この教師データに基づいて機械学習を行うことによって求められる分類手法を用いて（生成される分類器を用いて）、悪性ウェブコードであるか否かを制御部２０で自動的に判別させることが可能となる。
【０１３５】
機械学習には様々な手法があるが、ＳＶＭ（T. Joachims, Text Categorization with Support Vector Machines: Learning with Many Relevant Features. Proceedings of the European Conference on Machine Learning, Springer, 1998）やＡｄａＢｏｏｓｔ（Robert E. Schapire and Yoram Singer. BoosTexter: A boosting-based system for text categorization, Machine Learning, 39(2/3):135-168, 2000）などが、これまで提案されてきた手法の中で比較的良い性能を得られる手法として確認されている。制御部２０は、上述したように、悪性ウェブコードの文字列と無害な文字列とに基づいて教師データを生成し、教師データに基づいて機械学習を行うことによって分類手法を求める役割を有している。このため、制御部２０は、機械学習部４４として機能することになる。
【０１３６】
図２０は、制御部２０において、予め用意した悪性ウェブコードの文字列データと無害な文字列データとに基づいて機械学習に必要な教師データを生成して、悪性ウェブコードであるか否か判断するための分類手法を求める処理を示したフローチャートである。図２０に示すフローチャートによる処理を行う前提として、悪性ウェブコードの文字列と無害な文字列のデータとが予め用意されて、データ記憶部２１に一時的に記録されているものとする。
【０１３７】
まず、制御部２０は、悪性ウェブコードの文字列データと無害な文字列データとの両方のデータを、データ記憶部２１より読み出す（ステップＳ．５１）。次に、制御部２０は、用意した文字列データを文字列に分割し（ステップＳ．５２）、分割された文字列をトークン化する（ステップＳ．５３）、それぞれのトークンに対してＴＦによる割当計算法などを用いて数値の割り当てを行い（ステップＳ．５４）、悪性ウェブコードの文字列と無害な文字列との両方の特徴ベクトルを求めて教師データを生成する（ステップＳ．５５）。
【０１３８】
その後、制御部２０は、生成された全ての教師データについて、文字列データの悪性か無害かを示すクラスとその文字列のデータにおけるトークンの数値とを、機械学習によって学習させることにより、分類手法を求める（分類器を生成する）（ステップＳ．５６）。このようにして分類手法を求めることにより、その後にクライアントより取得した文字列データにおける悪性ウェブコード判定を行うことが可能となる。
【０１３９】
なお、本実施の形態に係る制御部２０では、分類手法を用いて（分類器として機能することによって）ＳＱＬインジェクションであるか否かの判定と、クロスサイトスクリプティングであるか否かの判定とを行う。このため、ＳＱＬインジェクションの判定を行う場合には、ＳＱＬインジェクション用の分類手法（分類器）を用意し、また、クロスサイトスクリプティングの判定を行う場合には、クロスサイトスクリプティング用の分類手法（分類器）を用意する必要がある。
【０１４０】
従って、ＳＱＬインジェクションの分類手法を求める（分類器を生成する）場合には、教師データとして、ＳＱＬインジェクションを示す文字列（悪性ウェブコード）データと無害な文字列データ（ノーマルデータ）との２種類のデータを用意して、ＳＱＬインジェクション用の分類手法を求める（分類器を生成する）必要が生ずる。一方で、クロスサイトスクリプティングの分類手法を求める（分類器を生成する）場合には、クロスサイトスクリプティングを示す文字列データ（悪性ウェブコード）と無害な文字列データ（ノーマルデータ）との２種類のデータを用意して、クロスサイトスクリプティング用の分類手法を求める（分類器を生成する）必要が生ずる。
【０１４１】
図２１は、機械学習により求められた分類手法を用いて、クライアントより取得した文字列データが悪性ウェブコードに該当するか否かの判別を、制御部２０で行う処理を示したフローチャートである。
【０１４２】
まず、制御部２０は、クライアントより取得した文字列データを、文字列に分割し（ステップＳ．６１）、分割された文字列をトークン化する（ステップＳ．６２）。この場合、制御部２０は、ＳＱＬインジェクション用分割部５１を用いた分割処理およびＳＱＬインジェクション用トークン処理部５２を用いたトークン化処理だけでなく、クロスサイトスクリプティング用分割部５３を用いた分割処理およびクロスサイトスクリプティング用トークン処理部５４を用いたトークン化処理も行う。このように、ＳＱＬインジェクションおよびクロスサイトスクリプティングの両方を考慮した処理を行うことによって、ＳＱＬインジェクションおよびクロスサイトスクリプティングの両方に対する判別を行うことが可能となる。
【０１４３】
次に、制御部２０は、トークンに対してＴＦによる割当計算法などを用いて数値の割り当てを行い（ステップＳ．６３）、トークンのカテゴリと割り当てられた数値とにより特徴ベクトルを求めて、判別用データを生成する（ステップＳ．６４）。なお、判別用データを生成する場合において、教師データに存在しないトークンは削除される。
【０１４４】
そして、制御部２０は、生成された判別用データを、図２０に示した処理により求められた分類手法に基づいて（制御部２０が分類器として機能して）分類することにより、得られたクラスを判別用データの分類クラスとしていずれかに分類する処理を行う（ステップＳ．６５）。この分類処理により、取得された文字列データが、悪性ウェブコードであるか否かを制御部２０において自動的に判別することが可能となる。そして、制御部２０は分類結果を出力し（ステップＳ．６６）、文字列データにおける悪性ウェブコード判別処理を終了する。
【０１４５】
図１９（ｂ）に示す例２０、図１９（ｃ）に示す例２１、および図１９（ｄ）に示す例２２は、ＳＱＬインジェクションに対する文字列の分類例を示している。例２０には、分類対象となる文字列データが示されている。例２１には、例２０に示す２つの文字列のデータに基づいて、制御部２０がＳＱＬインジェクション用分割部５１およびＳＱＬインジェクション用トークン処理部５２として機能することによって、文字列データの分割およびトークン化処理を行い、各トークンに対する数値を、ＴＦによる割当計算法などを用いて割り当てた結果を示している。そして、図２０に示したフローチャートに従って作成された分類手法（分類器）を用いて、制御部２０で、例２１に示した文字列の分類処理を行うと、図１９（ｄ）の例２２のように、例２０に示した文字列データが悪性ウェブコードに該当するか否かの分類結果が得られる。
【０１４６】
機械学習にＳＶＭを用い、数値の割り当てにＴＦ−ＩＤＦを用いた場合に、例６に示したような空白文字による分割処理を行って悪性ウェブコードの判別処理を行うと、求められる分類結果は、ＳＱＬインジェクションにおける分類精度が９８．３％、クロスサイトスクリプティングにおける分類精度が８７．４％となった。しかしながら、同じＳＶＭとＴＦ−ＩＤＦを用いた場合において、本実施の形態で説明した例４と例５との手法を用いて分割処理を行うと、ＳＱＬインジェクションにおける分類精度は９９．１％、クロスサイトスクリプティングにおける分類精度は９８．８％まで高めることができた。
【０１４７】
また、本実施の形態に係る制御部２０では、機械学習を利用することより効果的に悪性ウェブコードの分類を行うことができ、また未知の悪性コードを分類手法を用いて動的に適用することによって、悪性ウェブコードであるか否かの分類精度を大幅に改善することが可能となる。
【０１４８】
なお、悪性ウェブコードとノーマルデータとを効果的に分類するためには、悪性ウェブコードの文字列データを分割してトークン化する場合において、悪性ウェブコードを特徴づけるトークンが多く含まれるよう処理を行うことが好ましく、また、ノーマルデータを分割してトークン化する場合においても、ノーマルデータを特徴づけるトークンが多く含まれるよう処理を行うことが好ましい。
【０１４９】
本実施の形態に係る制御部２０では、図９・図１０および図１２に示したように、行末コメント、演算子、論理演算子、区切り子、予約語のようなプログラミング言語の基本要素が悪性ウェブコードの特徴を良く表すことに着目し、文字列をこれらのトークン毎に分割することで分類精度を高める方法を採用している。このように、文字列において、行末コメントなどに該当する文字列を独立してトークン化することにより、分解精度を最大９９．１％まで向上させることが可能となる。
【０１５０】
また、制御部２０では、機械学習を利用して効果的に悪性ウェブコードの分類を行うことができるので、文字列が悪性ウェブコードであるか、そうでないかの判別を自動的に行うことが可能となる。このように、悪性ウェブコードに該当するか否かの判断を制御部２０において自動的に行うことができるので、サイトの安全性を従来よりも大きく向上させることが可能となる。
【０１５１】
例えば、あるＩＰアドレスの端末から、ネットワークを介して幾度となく特定の文字列が送信されている場合には、その文字列に基づく悪性ウェブコード判別を行うことにより、該当する文字列が悪性ウェブコードに該当するものであるか、つまり、攻撃と見なされる悪質な文字列であるかを判断することが可能となる。このような場合に、サーバ１の管理者が該当するＩＰアドレスの端末のアクセスを遮断することにより、素早い対応処置を取ることができ、サイトの安全性を維持し、さらに高めることが可能となる。
【０１５２】
以上、本発明に係る悪性ウェブコード判別システムについて、サーバ１を一例として示すことにより詳細に説明を行ったが、本発明に係る悪性ウェブコード判別システムは、上述した実施の形態に示す事例のみには限定されない。当業者であれば、特許請求の範囲に記載された範疇内において、各種の変更例または修正例に想到しうることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
【０１５３】
例えば、本実施の形態に係るサーバ１では、サーバの制御部２０がデータ記憶部２１に記録されるプログラムに従って悪性ウェブコードの判別処理を行うことにより、ネットワークを介して受信されたクライアントからの情報（文字列データ）が、悪性のウェブコードであるか否かの判断を行う構成となっている。このような構成を採用することにより、ウェブサイトを提供するサーバが、クライアントからサーバに対して送信され得る悪性ウェブコードによって被る被害を、未然に防ぐことが可能となる。
【０１５４】
しかしながら、本発明に係る悪性ウェブコード判別システムとしての機能は、必ずしもサーバにだけ設けられる例には限定されず、クライアント側に設けられるものであっても良い。クライアントも、図２に示したようなディスプレイ部、入力操作部、本体部（制御部、通信部、データ記録部など）などが一般的に設けられていることが多い。このような構成からなるクライアントにおいて、クライアントの制御部がデータ記録部に記録されたプログラムに従って、ブラウザのコメント入力欄に入力されたコメント等を含む文字列を検出し、検出された文字列に悪性ウェブコードが含まれているか否かの判別を行う構成とすることも可能である。
【０１５５】
このようにクライアントにおいて悪性ウェブコード判別機能を実行させることによって、ブラウザを用いてウェブサイトを利用するクライアントにおける悪性ウェブコードの被害を未然防ぐことが可能となる。
【符号の説明】
【０１５６】
１     …サーバ（悪性ウェブコード判別システム、ウェブサーバ）
２     …ネットワーク
３     …クライアント
１１   …ディスプレイ部
１２   …入力操作部
１３   …本体部
２０   …制御部（文字列分割手段、文字列抽出手段、特徴ベクトル生成手段、判別手段）
２１   …データ記憶部
２２   …通信部
３０   …ＣＰＵ
３１   …ＲＡＭ
４０   …分類部
４１   …字句解析部（文字列分割手段、文字列抽出手段）
４２   …数値割当部
４３   …特徴ベクトル生成部（特徴ベクトル生成手段）
４４   …機械学習部
４５   …判定部（判別手段）
５１   …ＳＱＬインジェクション用分割部（文字列分割手段）
５２   …ＳＱＬインジェクション用トークン処理部（文字列抽出手段）
５３   …クロスサイトスクリプティング用分割部（文字列分割手段）
５４   …クロスサイトスクリプティング用トークン処理部（文字列抽出手段）
【図１】
2012088803.tif 000003
【図２】
2012088803.tif 000004
【図３】
2012088803.tif 000005
【図４】
2012088803.tif 000006
【図５】
2012088803.tif 000007
【図６】
2012088803.tif 000008
【図７】
2012088803.tif 000009
【図８】
2012088803.tif 000010
【図９】
2012088803.tif 000011
【図１０】
2012088803.tif 000012
【図１１】
2012088803.tif 000013
【図１２】
2012088803.tif 000014
【図１３】
2012088803.tif 000015
【図１４】
2012088803.tif 000016
【図１５】
2012088803.tif 000017
【図１６】
2012088803.tif 000018
【図１７】
2012088803.tif 000019
【図１８】
2012088803.tif 000020
【図１９】
2012088803.tif 000021
【図２０】
2012088803.tif 000022
【図２１】
2012088803.tif 000023