(58)【調査した分野】(Int.Cl.,DB名)
前記通信コンポーネントは、前記サーバでのプロキシファイアウォールアプリケーションであり、前記サーバは、前記HTTPリクエスト/レスポンストラフィックを処理するプロキシサーバまたはリバースプロキシサーバであり、かつ、
前記フィルタコンポーネントは、前記XSS攻撃をフィルタリングするために、前記ファイアウォールアプリケーションの一部として動作する、
請求項5に記載のシステム。
前記フィルタコンポーネントは、前記XSS攻撃の発生を判定するために、前記サーバから前記クライアントへの前記レスポンスにおいて、置換のための1または複数の無効文字列を選択する、
請求項1乃至3いずれか一項に記載のシステム。
【発明を実施するための形態】
【0013】
開示されるアーキテクチャは、完全にクライアントに重点を置く、折り返し型クロスサイトスクリプティング(XSS)軽減フィルタリング技術である。フィルタは、パフォーマント(performant)であり、互換性がありかつ安全である。互換性は、部分的にはウェブサイトの破壊を防ぐフィルタをいう。ブラウザは、デフォルトで利用可能な特徴としてフィルタリング技術を使用して、関連するユーザを保護する能力を提供する。従って、フィルタが少数であってもウェブサイトを壊してしまう場合、フィルタがデフォルトで使用可能な特徴として実装されるのは困難であるかまたは不可能である。
【0014】
クライアント側のフィルタは、適切に十分なXSS軽減手段を有していないサーバに関連するXSS攻撃に対する防御を行う。この技術は、ヒューリスティクス及びヒューリスティックに生成されたシグネチャ(signature)を使用して、URL及びPOSTデータの疑わしい部分と折り返されたページコンテンツとをマッチングすることによってXSS攻撃を正確に識別する。フィルタは、安全とみなされるトラフィックを迅速に認識して通過させ、クライアント処理におけるフィルタのパフォーマンスインパクトを最小限にする。クライアント側のXSSフィルタは、ブラウザからウェブサーバへの特定のMIMEタイプのHTTPリクエスト及びHTTPレスポンスを監視可能である。非HTML(hypertext markup language)MIME(multipurpose Internet mail extentions)タイプは、同一サイトであるリクエストと同様に迅速に通過させられ得る。残りのリクエストに関して、正規表現は、XSSヒューリスティクスがHTTP(hypertext transfer protocol)リクエストURLにおいてマッチングしない限り、フルHTTPレスポンスに亘っては実行されない。
【0015】
ここで、添付の図面を参照する。図面において、全体に亘って同じ参照符号は同等な要素を示すのに使用される。以下の記述においては、説明のために、全体の理解をもたらすべく様々の具体的な詳細が示される。新規な実施形態がこれらの具体的な詳細無しに実施され得ることは明らかである。他の例においては、説明を容易にするために周知の構造及び周知のデバイスがブロックダイアグラムの形式で示される。
【0016】
図1は、XSS攻撃をフィルタリングするシステム100を示している。システム100は、クライアント104とサーバ106との間のトラフィックを処理するクライアント104の通信コンポーネント102と、XSSフィルタリングロジック110を使用して、トラフィックからの折り返し型XSS攻撃をフィルタリングするフィルタコンポーネント108と、を含む。通信コンポーネント102は、サーバ106にHTTPリクエストの形式でトラフィックを送信するブラウザであり得、クライアント104において動作しているフィルタコンポーネント108は、返送トラフィックからのXSS攻撃をフィルタリングする。当該攻撃はHTTPレスポンスの一部である。
【0017】
完全にクライアント104においてフィルタリングがなされる場合、通信コンポーネント102は、HTTPリクエストをサーバ106に送信するクライアントのブラウザであり、フィルタコンポーネント108は、クライアント104において動作してXSS攻撃をフィルタリングする。サーバ側の実装例が以下に説明される。
【0018】
トラフィックはHTTPリクエスト/レスポンストラフィックである可能性があり、フィルタコンポーネント108は、リクエストトラフィックを解析して、レスポンストラフィックにおけるXSS攻撃を確認する。このことは、フィルタコンポーネント108がリクエストトラフィックのリファラヘッダ(referer header)を解析することによってなされ得る。フィルタコンポーネント108は、ヒューリスティクスを有し、当該ヒューリスティクスをサーバ106へ向けたクライアント104の外部へのトラフィック(例えば、HTTPリクエスト)に対して処理し、シグネチャを生成し、サーバ106からの受信するトラフィック(例えば、HTTPレスポンス)に対するシグネチャを処理してXSS攻撃をフィルタリングする。
【0019】
ヒューリスティクス処理は、フィルタコンポーネント108を組み込んで1または複数の無効文字(neuter character)を選択する。HTTPレスポンスにおいて識別された無効文字は、無効置換文字に置換される。換言すれば、1または複数のヒューリスティクスが、入力URL及びPOSTデータに亘って実行されてシグネチャが生成される。シグネチャ生成の処理は、無効文字を識別する処理である。そして、シグネチャは、サーバ106からの受信トラフィックに亘って実行されて、XSS攻撃の存在が判定される。このことは、本明細書でさらに詳細に説明される。1つの実装例において、フィルタコンポーネント108は、ブラウザにおいてHTMLとしてレンダリングされるレスポンスをもたらすMIME型を有する受信トラフィックのコンテンツに基づいたXSS攻撃に関する受信トラフィックを処理する。
【0020】
代替実装例において、フィルタコンポーネント108は、クライアントのブラウザの一部であり、ブラウザのスクリプトエンジンへの全ての入力を監視する。スクリプトブロックが認識された場合、フィルタコンポーネント108は、リクエストに関するオリジナルの外部へのトラフィック(例えば、オリジナルのURL及び/またはPOSTデータ)を再度スキャンし、実行されようとしているスクリプトを発見する。スクリプトが発見されかつ当該スクリプトがマッチングしないものである場合、当該スクリプトは同一サイトスクリプト(same−site script)であり、通過を許可され得る。しかし、当該スクリプトがマッチングするものである場合、それは折り返し型XSSであるとみなされ、この場合、当該スクリプトはフィルタリングされるかまたはさらに処理される。
【0021】
図2は、XSSフィルタリングロジック110のさらに詳細なブロックダイアグラムを示している。フィルタリングロジック110は、ヒューリスティクスのセット200を含むように示され、ヒューリスティクスのセット200は、ヒューリスティクス処理コンポーネント202を介して外部へのトラフィック(例えば、クライアントブラウザからの)に適用され得る。ヒューリスティクス200の処理はシグネチャ204をもたらし、シグネチャ204は、シグネチャチェックロジック206を使用して受信トラフィック(例えば、クライアントブラウザへの)に対して適用され得る。
【0022】
XSS解析は、2ステップの処理である。最初に、受信するリクエストトラフィック(例えば、URLまたはpostデータ)においてヒューリスティクスに基づいてシグネチャを形成し、2番目に、レスポンストラフィックに対してシグネチャを処理し、マッチングするものを発見する(リフレクテッドバック(reflected back)とも称される)。換言すれば、クライアントからサーバへ達するURLまたはpostデータ(HTTPリクエスト)内のコンテンツを探索するだけではなく、HTTPレスポンス内へ同一のデータがリプレイ(replay)されているか否かも判別する。下位のフィルタは「1ステップ」であり、リクエスト内の不良は探索するが、エコーバックされ実行されるコンテンツとリクエストとをマッチングする試行は行わない。
【0023】
1つのXSS攻撃方法は、フィルタに二重引用符等の文字を排除させることによってフィルタを操作して、別の方法ではXSSは不可能であるXSSを可能にするものである。この攻撃を無効にする技術は、HTTPレスポンス内で変更される文字の良好な抽出を行う技術である。この正規のウェブページ以外のXSS部分だけの選択的な無効化は、ユーザへの最小限の干渉でXSSをブロックする。これは、ページのブロッキング及び/または高いレベルのユーザ対話の要求とは対照的である。実行に影響する文字またはこのタイプの攻撃を可能とする文字は選択されないだろう。構文解析ツールがスクリプトに遭遇した際に、スクリプトが即時に実行されることを効果的に阻止するハッシュシンボルが使用され得る。従って、脅威は、問題となっているレスポンス内において置換されるだろう文字のインテリジェントな(intelligent)抽出によって軽減される。
【0024】
第2の攻撃手法は、文字がサーバへリプレイされるかまたはサーバからリプレイされる際にドロップ(drop)されるかまたは解釈されるリクエストに、文字を加えることによってフィルタを操作するものである。攻撃は、URL内に存在するスクリプトタグを含み得る。これは、実際に攻撃の一般的な形式である。従って、フィルタリングロジック110は、潜在的なスクリプトタグに関してURLまたはpostデータを解析する。このスクリプトタグがリプレイされている場合、ロジック110は、レスポンス内の同一のタグまたは同一のテキストを認識可能である必要がある。攻撃者が場違いなユニコード文字またはエクスクラメーションマーク(exclamation mark)を、例えばスクリプトタグの途中に追加可能であると判断し、サーバがこれらをリプレイする前にこれらの文字またはマークをドロップする場合、フィルタはバイパスされ得る。なぜならば、フィルタはスクリプトタグを探索するが、途中にエクスクラメーションマークを有するスクリプトタグは探索しないからである。
【0025】
この第2の攻撃手法を無効にする方法は、フィルタリングの第1のステージ(リクエスト)に基づいてシグネチャ204を作成すること、すなわち、シグネチャ204をHTTPレスポンス内において予期されるものに正確にマッチングするものにするのではなく、XSS攻撃の本質を形作る重要な文字にマッチングするものとするものである。換言すれば、リクエスト内への1または複数の追加の文字の挿入は、フィルタロジックの有効性を無効化しないだろう。
【0026】
ヒューリスティクス200は所定のセットであり、ブラウザにおいてスクリプト実行をもたらし得るスクリプトタグ及び/またはスクリプト表現のリクエストトラフィック(URLまたはpostデータ)を解析する第1のステージにおいて使用される。このような情報の識別は最終的なものではない。従って、ヒューリスティクス200において見出される情報は、HTTPレスポンスにおいてリプレイされるXSS攻撃の証拠として機能するシグネチャ204を生成するのに使用される。攻撃が時とともに進化すると、異なったヒューリスティクスがコード化されてヒューリスティクス200に追加されてこれらの新しい攻撃が認識され得る。新しいヒューリスティクスは、フィルタリングロジック110へのアップデートの形式で提供され得る。
【0027】
図3は、新しい脅威が検出された際に使用されて展開され得るヒューリスティクス200のセットの一例を示している。URLをスキャンするためのヒューリスティクスは、限定するわけではないが以下のものを含んでいる。
【0028】
ヒューリスティクス300は、(が続きその後に)が続く″または′を検出する。最初の″または′の後にはマッチングのための非英数字が続く。このことは、これらのものが誤ってURLにマッチングをすることを防止する。ヒューリスティクス302は、″;something.something=somethingelseを検出する。ヒューリスティクス304は、スクリプトブロックを明示的に検出する。ヒューリスティクス306は、″expression(″が後に続く″style″を検出する。ヒューリスティクス308は、ある表現を有するSTYLEエレメントを検出する。ヒューリスティクス310は、script src=blocksを検出する。ヒューリスティクス312は、第1の形式のjavaスクリプトURLを検出する。ヒューリスティクス314は、第2の形式のjavaスクリプトURLを検出する。ヒューリスティクス316は、vbスクリプトURLを検出する。ヒューリスティクス318は、EMBEDされたオブジェクトを検出する。ヒューリスティクス320は、デフォルトの動作を含む動作を検出する。ヒューリスティクス322は、スタイルシートを参照し得るLINKエレメントを検出する。ヒューリスティクス324は、データ結合を有するエレメントを検出する(スクリプトはXMLデータアイランド内に隠され得る)。ヒューリスティクス326は、アプレットを参照し得るAPPLETエレメントを検出する。ヒューリスティクス328は、型属性を有するOBJECTエレメントを検出する。ヒューリスティクス330は、<[TAG]ON[EVENT]=SomeFunction()...and...<[TAG]ON[EVENT]=SomeFunction()を検出し、ヒューリスティクス332は、クッキーを設定するかまたは無名コンテンツ(obscure content)型を設定し得るMETAエレメントを検出する。
【0029】
新しい脅威が検出された際には、他のヒューリスティクスも追加され得る。例えば、ブロックFRAMEs/IFRAMEsを検出するヒューリスティクスが提供され得る。入力の様々な置換が、必要に応じてシグネチャ生成処理においてプッシュ(push)され得る。例えば、いくつかのウェブサーバプラットフォームは、同一の名前を有するパラメータを暗黙のうちに組み合わせる。例えば、
http://microsoft.com/microsoft.asp?Name=asdf&Name=zzzzは、「asdf,zzzz」としてリプレイする名前付き因数(name variable)をもたらし得る。攻撃は、このサーバ側の動作を利用してフィルタを操作可能である。従って、フィルタは、類似のパラメータ名前収集を実行してこのサーバ側の動作を模倣する。シグネチャ生成処理におけるオリジナルのURLのプッシュに加えて、同一の名前のパラメータがある場合、フィルタはこれらを組み合わせて結果として得られたURLをシグネチャ生成プロセスにおいてプッシュする。上述の例示において、第2のURLがシグネチャ生成処理においてプッシュされる:
http://microsoft.com/microsoft.asp?Name=asdf,zzzz
【0030】
図4は、XSS攻撃をフィルタリングするフィルタコンポーネント108を含むブラウザ実装例400を示している。クライアントブラウザ402(通信コンポーネント)は、ウェブサーバ406にHTTPリクエスト404を送信する。フィルタコンポーネント108は、リクエスト内のURL及び/またはPOSTデータにヒューリスティクスを適用することによってリクエストを処理し、シグネチャを生成する。ヒューリスティクスが、リクエストは疑わしいと示した場合、フィルタコンポーネント108は、HTTPレスポンス408にシグネチャを適用し、折り返し型XSS攻撃をフィルタリングして排除する。
【0031】
代替の実施形態において、ブラウザ内のフィルタは、特定のHTTPレスポンスヘッダを送信することによって、特定のレスポンスに対するXSSフィルタを無効にすることをサーバに可能とさせる。非常に独特でかなり希な脆弱性(例えば「レスポンス分割」脆弱性)が無い限り、攻撃者がこのヘッダをスプーフィング(spoof)することは不可能であるので、攻撃者はこのフィルタを無効化することはできない。この特徴は、アプリケーション互換性手段として意図され、サーバ側XSSフィルタリングを行うウェブサイト、すなわちクライアント側のXSSフィルタがサーバに全く影響を与えてほしくないウェブサイトがブラウザ内の当該機能を無効化し得ることを保証する。
【0032】
図5は、サーバ実装例500を示しており、フィルタリングロジックがウェブサーバ502に適用されている。ここで、フィルタコンポーネント108は、サーバファイアウォールアプリケション504(この例においては通信コンポーネント)の一部として含まれ得る。ファイアウォールアプリケーション504は、ネットワーク508を通じたデータの通信を容易にする1または複数のサーバプロトコル506において動作する。ファイアウォールアプリケーション504とサーバ502との間のトラフィックは、HTTPリクエストトラフィック510及びHTTPレスポンストラフィック512を含み得る。フィルタコンポーネント108は、リクエストトラフィック510において動作し、ヒューリスティクスを利用してレスポンストラフィック512における処理のためのシグネチャを生成する。換言すれば、通信コンポーネントは、トラフィックを処理するサーバ502におけるファイアウォールアプリケーション504であり、フィルタコンポーネント108は、ファイアウォールアプリケーション504の一部として動作してXSS攻撃をフィルタリングする。
【0033】
図6は、サーバ実装例600を示しており、フィルタリングロジックがプロキシサーバ602に適用されている。ここにおいて、フィルタコンポーネント108は、プロキシサーバファイアウォール604(この例において通信コンポーネント)の一部として含まれ得る。プロキシファイアウォール604は、ネットワーク508を介したデータの通信を容易にする1または複数のサーバプロトコル506において動作する。プロキシファイアウォール604とプロキシサーバ602との間のトラフィックは、HTTPリクエストトラフィック510及びHTTPレスポンストラフィック512を含み得る。フィルタコンポーネント108は、リクエストトラフィック510において動作し、ヒューリスティクスを使用してレスポンストラフィック512における処理のためのシグネチャを生成する。換言すれば、通信コンポーネントは、トラフィックを処理するプロキシサーバ602におけるプロキシファイアウォール604であり、フィルタコンポーネント108は、プロキシファイアウォール604の一部として動作してXSS攻撃をフィルタリングする。
【0034】
サーバ実装例600と同一の構成は、一揃いのウェブサーバによる使用に関するリバースプロキシサーバにも適用可能である。従って、一揃いのサーバへ入ってくる全てのトラフィックは、最初にプロキシに到達し、プロキシは当該プロキシにおいてトラフィックを取り扱い得るか、またはさらなる処理のために指定されたサーバ(1または複数)にトラフィックを転送する。従って、プロキシからウェブサーバ(1または複数)に送られたリクエストは、レスポンストラフィックとともにチェックされ、仕掛けられたXSS攻撃の存在が確認され、XSS攻撃がブロックされる。
【0035】
以下に示すのは、開示されたアーキテクチャの新規な特徴を実行するための例示の手順の代表的な一連のフローチャートである。説明の簡潔さのために、本明細書に示された1または複数の手順、例えばフローチャートまたはフローダイアグラムとして示された手順が一連の動作として示されて説明されているが、手順は、この動作の順序に限定されるものではなく、いくつかの動作は本明細書に示されかつ説明されたのと異なった順序で行われかつ/または他の動作と同時に行われ得ると理解されるべきである。例えば当業者は、手順が、一連の相互に関連する状態または事象として、状態ダイアグラム等において代替的に示され得ることを理解するべきである。さらに、手順において説明された全ての動作が新規な実装例に対して必要とされるわけでは無い。
【0036】
図7は、コンピュータに実装されて折り返し型XSS攻撃をフィルタリングする方法を示している。700において、リクエストはサーバに送信される。リクエストは、HTTPリクエストか、または他の適切なプロトコルに従った他のリクエストであり得る。702において、リクエストがヒューリスティクスを使用して処理されて、シグネチャが生成されるべきかが判定される。704において、レスポンスがサーバから受信される。このレスポンスは、HTTPレスポンスか、またはXSS攻撃に使用される他の同様のレスポンス型であり得る。706において、このレスポンスは、シグネチャの生成に基づいて折り返し型XSS攻撃としてフィルタリングされる。
【0037】
図8は、XSSフィルタを使用する例示の方法を示している。800において、HTTPレスポンスが受信される。1つのパフォーマンス志向の実装例において、フィルタはスクリプトの実行をもたらし得るMIME型を有するダウンロードされたコンテンツに対してのみ有効である。従って、802において、HTML MIME型に対してチェックが行われる。レスポンスがHTML MIME型ではない場合、フローは804に進み、HTTPレスポンスがクライアントウェブブラウザに送られる。レスポンスがHTML MIME型を含む場合、フローは802から806に進み、フィルタがHTTPリクエスト内のリファラヘッダをチェックする。同一のリファラの場合、これは同一サイトスクリプティングであり、フローは804に進んでレスポンスが送られる。なぜならば、さらなるフィルタリングが実行される必要が無いからである。
【0038】
リファラヘッダ内の完全に記述したドメイン名が、取得されるURLの完全に記述したドメイン名とマッチングしない場合、リクエストはクロスサイトスクリプトである可能性があり、フィルタリングされる。従って、フローは806から808に進み、マッチングするヒューリスティックが発見される。マッチングするものが発見されない場合、フローは804にすすみ、ウェブブラウザにレスポンスが転送される。その後、フィルタはリクエストに関連するURL及びPOSTデータを取得し、正規表現を使用してXSS攻撃を示す特定のパターンを認識する。これらのケースインセンシティブ(case-insensitive)なパターンは、フィルタに関するヒューリスティクスである。以下は、正規表現形式のフィルタからのヒューリスティクスの例である。
【0040】
ヒューリスティクス内の内側中括弧{}内の文字は「無効文字」と称され、後にHTTP応答内で認識され無効化される。ヒューリスティクスは、1または複数の無効文字を有し得る。ヒューリスティクスは、スクリプトタグを認識するだろう。スクリプトタグがHTML内で共通であり得るならば、URLまたはPOSTデータ内のスクリプトタグの存在は、XSS攻撃を示す。フィルタは、ブラウザにおいて使用されてクロスサイトスクリプティングをトリガし得る個々のメカニズムを、各々が認識するヒューリスティクスを含み得る。追加のメカニズムが後に認識されたならば、新しいヒューリスティクスがフィルタに追加され得る。
【0041】
無効文字の各々(この例の場合文字「r」)は、クロスサイトスクリプティング攻撃をブロックするためにHTTPレスポンスボディ内でフィルタによって結果的に変更されるだろう文字を示す。文字「#」は、無効置換文字として使用され得る。これは、HTMLエレメント及びHTMLエレメントが挿入されるスクリプトブロックを破壊するのに有効である。無効置換文字は、ヒューリスティクス毎ベースで設定可能である。
【0042】
フィルタの無効文字の抽出は、フィルタが妨害され得るか否かを判定し得る。あるヒューリスティクスに関して選択された不正な無効文字は、妨害され得るフィルタをもたらし得る。例として、無効文字としての引用記号の抜き取りは、フィルタに引用符を無効化させるだろう。抜け目のない攻撃者は、このことを利用してページ上で強制的にマッチングさせて引用符を無効化し、クロスサイトスクリプティング攻撃を実際に可能とする。これ以外の方法では攻撃は不可能である。
【0043】
ヒューリスティクスにおけるマッチングは、必ずしもフィルタをトリガしてクロスサイトスクリプティングを検出するわけではない。しかし、マッチングは、フィルタに、HTTPレスポンスボディが分析されて、URLまたはPOSTデータが実際に出力ページに対してリプレイされたことが立証されるだろうことを示す。
【0044】
ヒューリスティクスがマッチングした場合、フローは808から810へ進み、フィルタはマッチングする対象の各々に対して1つのシグネチャを生成する。シグネチャは、リプレイされた疑わしい入力に関してHTTPレスポンスをスキャンするために使用され得る新しい正規表現である。無効置換文字は、シグネチャがマッチングされた後にURL内の所定の位置に一時的に置かれ、URLにおいてもはやマッチングするものが発見され得なくなるまでヒューリスティクスに関するマッチングが継続する。シグネチャは、無効置換文字を使用せずに適切に生成される。さもなければ、シグネチャは自分自身で無効置換文字を包含し、HTTPレスポンス内に存在する攻撃と正確にマッチングしないだろう。引用符、それに続く1セットの丸括弧を無効化するだろうヒューリスティクスを考える。
【0046】
正規表現は、丸括弧の最初のセットまたは丸括弧の最後のセットにマッチングさせるのに十分に有効である。しかし、正規表現は、丸括弧の真ん中のセットをマッチングすることができない。このため、全てのシグネチャが特定のヒューリスティクスに対して識別されるまで、繰り返しのマッチング/無効化処理が行われることが求められる。
【0047】
ヒューリスティクスの各々によって、安全な文字のリストが提供される。スクリプトタグを検出するヒューリスティクスに関して、安全な文字は、大なり記号(>)及び小なり記号(<)並びに英数字である。安全な文字は、マッチングに重要である文字であり、かつヒューリスティクスがブロックしようとするある種の攻撃に必要な文字である。シグネチャベースの方法は、フィルタが逐語的なマッチングで単純に検索する場合にフィルタが必ずしもマッチングするものを発見しない故に用いられる。ウェブサーバは、特定の文字を偶然に除去または解釈し得る。実際にこのようにウェブサーバ動作の監視をすることは一般的であり、攻撃者はこの動作を有利に利用する。例えば、以下の様な攻撃者URLを考える。
【0049】
サーバが入力から偶然にドル記号を除去した場合、この攻撃はマッチングしない。この種の攻撃を回避するために、逐語的テキストマッチングよりもシグネチャ手法が使用される。
【0050】
以下は、スクリプトタグを検出するヒューリスティクスのマッチング対象の一例である。
【0052】
このマッチング対象に対して生成されるシグネチャは以下のものであり得る。
【0056】
の各々は、オリジナルのマッチング対象内の安全ではない文字を示している。0から10の特定されない文字列は、
【0058】
にマッチングし得る。フローは810から812に進み、シグネチャとマッチングするものがチェックされる。特定のページに対してシグネチャが生成されていない場合、フローは812から804に進み、フィルタがページに変更無しでロードすることを許可する、すなわちXSS攻撃は検出されなかった。
【0059】
しかし、シグネチャが存在する場合、フローは812から814に進み、フィルタは、シグネチャの各々に関してHTTPレスポンスボディをスキャンし、シグネチャとマッチングするものの各々に関して適切な文字を無効化する。一度認識がなされると、フィルタは、中括弧内の文字によってシグネチャ内に示されるように、どの文字(1または複数)が無効化されるべきかを正確に記録する。一度全てのシグネチャがHTTPレスポンスボディに亘って実行されると、無効文字が所定の位置に置かれ、HTTPレスポンスボディはブラウザに返送される。816において、XSSが特定のURL(及び、適当ならばPOSTデータ)に関してブロックされた事実が記録され、ユーザは仕掛けられたXSS攻撃を通知される。816からフローは804に進み、804において、XSS攻撃が無効化されるだろう場合を除いて、ページは通常にレンダリングされるだろう。
【0060】
本願に使用されている「コンポーネント」及び「システム」は、コンピュータ関連エンティティ、ハードウェア、ハードウェア及びソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアをいう。例えば、コンポーネントは、限定するものではないが、プロセッサにおいて実行されている処理、プロセッサ、ハードディスクドライブ、(光学及び/または磁気記憶媒体)複数の記憶デバイス、オブジェクト、実行可能ファイル、実行の脈絡(thread of execution)、プログラム及び/またはコンピュータであり得る。例として、サーバにおいて実行されているアプリケーション及びサーバ自体の両方がコンポーネントであり得る。1または複数のコンポーネントが、処理及び/または実行の脈絡内に存在し得、コンポーネントは、1のコンピュータ内に置かれ得るかまたは2以上のコンピュータ間に分散され得る。
【0061】
図9を参照すると、開示されたアーキテクチャに従ってXSSフィルタリングを実行するコンピューティングシステム900のブロックダイアグラムが示されている。システム900の様々な特徴に関して追加の説明を提供するために、
図9及び以下の説明は、当該様々な特徴が実装され得る適切なコンピューティングシステム900の概要的で一般的な説明を提供することを目的としている。上述の説明は1または複数のコンピュータにおいて実行され得るコンピュータ実行可能命令の一般的な条件においてなされているが、当業者は新規な実施形態も他のプログラムモジュールとの組み合わせにおいて実装され得かつ/またはハードウェア及びソフトウェアの組み合わせとして実装可能であり得ることも理解するだろう。
【0062】
通常は、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。さらに、当業者は、本発明の方法が、単一プロセッサもしくはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、並びに、パーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースもしくはプログラム制御可能家電等を含む他のコンピュータシステム構成を用いて実施され得、各々が1または複数の関連するデバイスと動作可能に結合され得ることを理解するだろう。
【0063】
説明された特徴は、いくつかのタスクが通信ネットワークを通じて接続されているリモート処理デバイスによって実行される分散型コンピューティング環境においても実施され得る。分散型コンピューティング環境において、プログラムモジュールは、ローカル及びリモートのメモリ記憶デバイス内に配され得る。
【0064】
コンピュータは一般的に様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータよってアクセス可能な任意の市場入手可能媒体であり得、揮発性媒体及び不揮発性媒体、リムーバブル媒体及び非リムーバブル媒体を含む。例示の目的であり限定するものではないが、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を含み得る。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータ等の情報の記憶の任意の方法及び技術において実装される揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を含む。コンピュータ記憶媒体は、限定するわけではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、DVD(digital video disk)もしくは他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または他の媒体であって、所望の情報を保存するために使用可能でありかつコンピュータによってアクセス可能な媒体を含む。
【0065】
図9を再度参照すると、様々な特徴を実装する例示のコンピュータシステム900は、コンピュータ902を含み、コンピュー902は、処理ユニット904、システムメモリ906及びシステムバス908を有する。システムバス908は、限定するわけではないがシステムメモリ906を含むシステムコンポーネントと処理ユニット904とのインタフェースを提供する。処理ユニット904は、様々な市場入手可能なプロセッサのいずれかであり得る。デュアルマイクロプロセッサ及び他のマルチプロセッサアーキテクチャも、処理ユニット904として使用され得る。
【0066】
システムバス908は、メモリバス(メモリコントローラを有りまたは無しの)、周辺機器バス、及びローカルバスであって、様々な商用利用されているバスアーキテクチャを使用するバスをさらに相互に接続し得る様々なタイプのバス構造のいずれかであり得る。システムメモリ906は、不揮発性メモリ(不揮発性)910及び/または揮発性メモリ912(例えばRAM(random access memory))を含み得る。BIOS(basic input/output system)は、不揮発性メモリ910(ROM、EPROM、EEPROM等)内に保存され得、BIOSは、起動中等におけるコンピュータ902内の要素間の情報の伝送を行う基本ルーチンを保存している。揮発性メモリ912は、データのキャッシュのためのスタティックRAM等の高速RAMも含む。
【0067】
コンピュータ902は、内蔵ハードディスクドライブ(HDD)914(EIDE、SATA等)、磁気フロッピー(登録商標)ディスクドライブ(FDD)916(例えば、リムーバブルディスケット918に書き込むかまたはそこから読み出しを行うもの)及び光学ディスクドライブ920(例えば、CD−ROMディスク922から読み出しを行うもの、またはDVD等の他の大容量の光学媒体からの読み出しもしくはそこへの書き込みをするもの)、をさらに含む。内蔵HDD914は、適切なシャーシにおける外部使用のために構成されても良い。HDD914、FDD916及び光学ディスクドライブ920は、それぞれHDDインタフェース924、FDDインタフェース926及び光学ドライブインタフェース928によってシステムバス908に接続され得る。外部ドライブ実装用のHDDインタフェース924は、USB(Universal Serial Bus)及びIEEE1394インタフェース技術のうちの少なくとも1つまたはこれらの両方を含み得る。
【0068】
ドライブ及び関連するコンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令等の不揮発性記憶装置を提供する。コンピュータ902に関して、ドライブ及び媒体は、適切なデジタルフォーマットで任意のデータの保存を行う。上述のコンピュータ可読媒体の説明が、HDD、リムーバブル磁気ディスケット(例えばFDD)、及びCDもしくはDVD等のリムーバブル光学媒体に言及しているが、ジップ(Zip)ドライブ、磁気カセット、フラッシュメモリカード、カートリッジ等の、コンピュータよって可読な他のタイプの媒体も例示の動作環境において使用され得、さらにこのような媒体のいずれかが、開示されたアーキテクチャの新規な方法を実行するコンピュータ実行可能命令を含み得ることが当業者に理解されるべきである。
【0069】
多数のプログラムモジュールがドライブ及び揮発性メモリ912に保存され得、プログラムモジュールには、オペレーティングシステム930、1または複数のアプリケーションプログラム932、他のプログラムモジュール934、及びプログラムデータ936を含む。1または複数のアプリケーションプログラム932、他のプログラムモジュール934、及びプログラムデータ936は、通信コンポーネント102(ブラウザ等)、クライアント104、フィルタコンポーネント108、XSSフィルタロジック110、ヒューリスティクス処置コンポーネント202、ヒューリスティクス200、シグネチャ204、シグネチャチェックロジック206、ブラウザ402、サーバファイアウォール504、及びプロキシファイアウォール604を含み得る。
【0070】
オペレーティングシステムの全てまたは一部、アプリケーション、モジュール、及び/またはデータは、揮発性メモリ912内にもキャッシュされ得る。開示されたアーキテクチャが様々な市場入手可能なオペレーティングシステム、またはオペレーティングシステムの組み合わせとともに実装され得ることが理解されるべきである。
【0071】
ユーザは、1または複数の有線/無線入力デバイス、例えばキーボード938及びマウス940等のポインティングデバイスを用いて、コンピュータ902にコマンド及び情報を入力し得る。他の入力デバイス(図示せず)は、マイクロフォン、IR遠隔コントローラ、ジョイスティック、ゲームパッド、スタイラスペン、タッチスクリーン等を含み得る。これら及び他の入力デバイスは、システムバス908に接続されている入力デバイスインタフェース942を介して処理ユニット904にしばしば接続されるが、パラレルポート、IEEE1394シリアルポート、ゲームポート、USBポート、IRインタフェース等の他のインタフェースによっても接続され得る。
【0072】
モニタ944または他のタイプの表示デバイスも、ビデオアダプタ946等のインタフェースを介してシステムバス908に接続される。モニタ944に加えて、コンピュータは一般的に、スピーカ、プリンタ等の他の周辺機器出力デバイス(図示せず)を含む。
【0073】
コンピュータ902は、リモートコンピュータ(1または複数)948等の1または複数のリモートコンピュータとの有線及び/または無線通信を介した論理接続を使用してネットワーク環境において動作し得る。リモートコンピュータ(1または複数)948は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースのエンタテイメント電化製品、ピアデバイスまたは他の共通ネットワークノードであり得、一般的にコンピュータ902に関して説明される要素の多くまたは全てを含むが、簡潔さのためにメモリ/記憶デバイス950のみが図示されている。示された論理接続は、LAN(local area network)952及び/またはさらに大きなネットワーク、例えばWAN(wide area network)954との有線/無線接続性を有する。このようなLAN及びWANネットワーク環境は、オフィス及び会社において一般的であり、イントラネット等の企業規模広域コンピュータネットワークを容易にし、これらのネットワークの全ては、インターネット等のグローバル通信ネットワークに接続され得る。
【0074】
LANネットワーク環境において使用される場合、コンピュータ902は、有線及び/または無線通信ネットワークインタフェースまたはアダプタ956を介してLAN952に接続される。アダプタ956は、LAN952への有線及び/または無線通信を容易にし得、LAN952は、アダプタ956のワイヤレス機能と通信するために設けられたワイアレスアクセスポイントも含み得る。
【0075】
WANネットワーク環境において使用される場合、コンピュータ902は、モデム958を含む、すなわちWAN954上の通信サーバに接続されるか、またはインターネット等によってWAN954を介した通信を確立する他の手段を有する。内蔵または外部デバイスであり、有線及び/または無線デバイスであり得るモデム958は、入力デバイスインタフェース942を介してシステムバス908に接続されている。ネットワーク環境において、コンピュータ902またはその一部に関連して示されているプログラムモジュールは、リモートメモリ/記憶デバイス950内に保存され得る。示されたネットワーク接続は例示であり、コンピュータ間の通信接続を確立する他の手段も使用され得る。
【0076】
コンピュータ902は、無線通信内に動作可能に設けられている任意の無線デバイスまたはエンティティ、例えばプリンタ、スキャナ、デスクトップ及び/またはポータブルコンピュータ、ポータブルデータアシスタント、通信衛星、無線で検出可能なタグと関連した装置または場所(キオスク、ニューススタンド、化粧室)の任意の一部、並びに電話と通信可能である。これらには、少なくともWi-Fi(すなわちワイヤレスフィディリティ)及びブルートゥース(Bluetooth(登録商標))無線技術を含む。従って、通信は、従来のネットワークまたは少なくとも2つのデバイス間の単純なアドホック通信のような所定の構造であり得る。Wi-Fiネットワークは、IEEE 802.11x(a、b、g等)と称される無線通信技術を使用して、安全で、信頼性があり、高速な無線接続性を提供する。Wi-Fiネットワークは、コンピュータ同士を接続するため、コンピュータとインターネットを接続するため、及びコンピュータと有線ネットワーク(IEEE802.3またはイーサネット(登録商標)を使用する)を接続するために使用され得る。
【0077】
図10を参照すると、折り返し型XSS攻撃をフィルタリングする例示のコンピューティング環境1000の概略ブロックダイアグラムが示されている。環境1000は、1または複数のクライアント1002を含んでいる。クライアント1002は、ハードウェア及び/またはソフトウェア(スレッド、プロセス、コンピューティングデバイス等)であり得る。例えば、クライアント1002は、クッキー(1または複数)及び/または関連する文脈情報(contextual information)を保有し得る。
【0078】
環境1000は、1または複数のサーバ1004も含む。サーバ1004もハードウェア及び/またはソフトウェア(スレッド、プロセス、コンピューティングデバイス等)であり得る。例えば、サーバ104はスレッドを保有して、そのアーキテクチャを使用して変換を行い得る。クライアント1002とサーバ1004との間の1つの可能な通信は、2または3以上のコンピュータプロセス間で伝送される様に成されたデータパケット形式であり得る。例えば、データパケットは、クッキー及び/または文脈情報を含み得る。環境1000は、通信フレームワーク1006(例えば、インターネット等のグローバル通信ネットワーク)を含み、通信フレームワーク1006は、クライアント1002とサーバ1004との間の通信を容易にするべく使用され得る。
【0079】
通信は、有線(光ファイバを含む)及び/または無線技術によって容易にされ得る。クライアント1002は、1または複数のクライアントデータストア1008に動作可能に接続され、クライアントデータストア1008は、情報をクライアント1002にローカルに保存するべく使用され得る(クッキー(1または複数)及び/または関連する文脈情報)。同様に、サーバ1004は、1または複数のサーバデータストア1010に動作可能に接続され、サーバデータストア1010は、情報をサーバ1004にローカルに保存するべく使用され得る。
【0080】
クライアント1002は、クライアント104を含み得、サーバ1004は、ウェブサーバ406、サーバ502及びサーバ602を含み得る。ファイアウォール504及び604は、サーバシステムにインストールされている。
【0081】
上述の説明は、開示されたアーキテクチャの例を含んでいる。当然ながら考えられるコンポーネント及び/または手順の組み合わせの全てを説明することは不可能であり、当業者は他の多くの組み合わせ及び配列が可能であることを理解するだろう。従って、新規なアーキテクチャは、添付の特許請求の範囲の趣旨及び範囲に含まれる全ての代替例、変更例及び変形例を包含する。さらに、「含む」は、発明を実施するための形態または特許請求の範囲において使用されている範囲において、特許請求の範囲における移行句として使用される際の「含む」と同様に解釈される。
【0082】
上記の実施形態につき以下の付記を残しておく。
(付記1)
クロスサイトスクリプティング(XSS)攻撃を処理するコンピュータ実装システム(100)であって、
クライアントとサーバとの間のトラフィックを処理する通信コンポーネント(102)と、
前記トラフィックからの折り返し型XSS攻撃をフィルタリングするフィルタコンポーネント(108)と、
を含むことを特徴とするシステム。
(付記2)
前記通信コンポーネントが前記サーバにHTTPリクエストを送信する前記クライアントのブラウザであり、前記フィルタコンポーネントが前記クライアントにおいて動作して前記XSS攻撃をフィルタリングすることを特徴とする付記1に記載のシステム。
(付記3)
前記トラフィックがHTTPリクエスト/レスポンストラフィックであり、前記フィルタコンポーネントが前記リクエストトラフィックを解析して前記レスポンストラフィック内の前記XSS攻撃を確認することを特徴とする付記1に記載のシステム。
(付記4)
前記通信コンポーネントが前記HTTPリクエスト/レスポンストラフィックを処理する前記サーバにおけるファイアウォールアプリケーションであり、前記フィルタコンポーネントが前記ファイアウォールアプリケーションの一部として動作して前記XSS攻撃をフィルタリングすることを特徴とする付記3に記載のシステム。
(付記5)
前記通信コンポーネントが前記サーバにおけるプロキシファイアウォールアプリケーションであり、前記サーバは前記HTTPリクエスト/レスポンストラフィックを処理するプロキシサーバまたはリバースプロキシサーバであり、前記フィルタコンポーネントが前記プロキシファイアウォールアプリケーションの一部として動作して前記XSS攻撃をフィルタリングすることを特徴とする付記3に記載のシステム。
(付記6)
前記サーバが、特定のHTTPレスポンスヘッダに基づいて特定のレスポンスに対して前記フィルタコンポーネントを無効化することを特徴とする付記1に記載のシステム。
(付記7)
前記フィルタコンポーネントが、前記クライアントから前記サーバへ送信されるトラフィックに対してヒューリスティクスの処理をしてシグネチャを生成し、前記サーバから受信されるトラフィックに対して前記シグネチャを処理して前記XSS攻撃をフィルタリングすることを特徴とする付記1に記載のシステム。
(付記8)
前記フィルタコンポーネントが、前記サーバから前記クライアントへのレスポンスにおける置換に関する1または複数の無効文字を選択して、前記XSS攻撃の存在を判定することを特徴とする付記1に記載のシステム。
(付記9)
前記フィルタコンポーネントが前記サーバから受信されたトラフィックに対して1または複数のシグネチャを処理して前記XSS攻撃の存在を判定し、前記攻撃がMIME型を有する前記受信されたトラフィックのコンテンツに基づいていることを特徴とする付記1に記載のシステム。
(付記10)
前記フィルタコンポーネントがスクリプトエンジンへの全ての入力を処理し、スクリプトブロックが認識された場合に、前記フィルタコンポーネントがリクエストに関するオリジナルの送信トラフィックをスキャンして実行される直前のスクリプトを発見し、前記スクリプトと前記スクリプトブロックとのマッチングに基づいて前記スクリプトブロックをフィルタリングすることを特徴とする付記1に記載のシステム。
(付記11)
XSS攻撃を処理するコンピュータ実装システムであって、
クライアントとサーバとの間のリクエスト及びレスポンスを処理するクライアントブラウザ(402)と、
前記クライアントブラウザの一部であり、前記リクエストをヒューリスティクスを使用して解析するとともに前記レスポンスを前記ヒューリスティクスから生成されたシグネチャを使用して解析し、前記シグネチャに基づいて前記レスポンストラフィックからの折り返し型XSS攻撃をフィルタリングするフィルタコンポーネント(108)と、
を含むことを特徴とするシステム。
(付記12)
折り返し型のXSS攻撃をフィルタリングする方法であって、
サーバにリクエストを送信するステップ(700)と、
ヒューリスティクスを使用して前記リクエストを処理してシグネチャが生成されたかを判定するステップ(702)と、
前記サーバからレスポンスを受信するステップ(704)と、
前記シグネチャの前記生成に基づいて折り返し型のXSS攻撃として前記レスポンスをフィルタリングするステップ(706)と、
を含むことを特徴とする方法。
(付記13)
前記リクエストの疑わしい部分を折り返されたウェブページコンテンツとマッチングして前記レスポンス内にXSS攻撃が存在するかを判定するステップをさらに含むことを特徴とする付記12に記載の方法。
(付記14)
前記リクエストが1または複数のURLまたはPOSTデータを含むことを特徴とする付記12に記載の方法。
(付記15)
正規表現を使用して前記リクエストの前記1または複数のURLまたはPOSTデータ内の文字の特定のパターンを認識するステップをさらに含むことを特徴とする付記14に記載の方法。
(付記16)
非HTML MIME型及び同一サイトリクエストをフィルタ処理及びシグネチャ生成無しに通過させるステップをさらに含むことを特徴とする付記12に記載の方法。
(付記17)
リファラヘッダの完全に記述したドメイン名と取得されたURLの完全に記述したドメイン名とを比較することによって前記リクエストのリファラヘッダをチェックするステップと、マッチングしなかった場合またはリファラヘッダが存在しないかもしくは空の場合に前記リクエストをフィルタリングするステップと、をさらに含むことを特徴とする付記12に記載の方法。
(付記18)
1または複数の無効文字を選択して前記1または複数の無効文字を前記ヒューリスティクスに挿入して、前記レスポンスの処理において変更に関する前記リクエスト内の疑わしい文字を認識するステップをさらに含むことを特徴とする付記12に記載の方法。
(付記19)
前記ヒューリスティックスによって定義された前記リクエスト内の文字の特定のパターンのマッチングに基づいてヒューリスティクスから前記シグネチャを生成するステップをさらに含むことを特徴とする付記12に記載の方法。
(付記20)
前記シグネチャを使用して前記レスポンスをスキャンするステップと、前記シグネチャに基づいて無効置換文字を使用して前記レスポンスを無効化するステップと、クライアントブラウザに前記レスポンスを返送するステップと、をさらに含むことを特徴とする付記12に記載の方法。