(57)【要約】  コンピュータ読み出し可能格納媒体は、プログラム命令の自動解析を行うための実行可能命令を有する。自動解析は、インジェクション脆弱性の自動解析、潜在的な反復的な攻撃の自動解析、機密情報の自動解析、特定のＨＴＴＰ属性の自動解析から選択される、少なくとも２つの解析を含む。保護命令は、プログラム命令に挿入される。保護命令は、プログラム命令の実行中に、攻撃を検出して応答するために利用される。【選択図】  図４
2009506439.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ読み出し可能格納媒体であって、
プログラム命令の自動解析を行う実行可能命令と、
保護命令を前記プログラム命令に挿入する実行可能命令と、
前記プログラム命令の実行中に、前記保護命令を利用し、潜在的な反復的な攻撃を検出して応答する実行可能命令と、
を備え、
前記自動解析が、インジェクション脆弱性の自動解析、前記攻撃の自動解析、機密情報の自動解析および特定のＨＴＴＰ属性の自動解析の中から選択される少なくとも２つの解析を含む、コンピュータ読み出し可能格納媒体。
【請求項２】
前記インジェクション脆弱性が、ＳＱＬインジェクション、コマンドインジェクション、リソースインジェクション、ログ偽造およびクロスサイトスクリプティングのうちの１つ以上から選択される、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項３】
前記反復的な攻撃が、セッションＩＤ推測、信任状推測、クリック詐欺およびサイトプロービングのうちの１つ以上から選択される、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項４】
前記機密情報が、エラーマイニング、機密データ抽出およびプライバシ侵害のうちの１つ以上から選択される、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項５】
前記特定のＨＴＴＰ属性が、セッション固定化、匿名のアクセス、公に利用可能な攻撃ツールおよび強制的ブラウズのうちの１つ以上から選択される、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項６】
前記攻撃に応答する実行可能命令が、情報をログに記録する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項７】
前記攻撃に応答する実行可能命令が、警告を発生する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項８】
前記攻撃に応答する実行可能命令が、要求の処理を休止する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項９】
前記攻撃に応答する実行可能命令が、前記攻撃を無害化する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項１０】
前記攻撃に応答する実行可能命令が、乱数を発行する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項１１】
前記攻撃に応答する実行可能命令が、アプリケーションの処理速度を減じる実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項１２】
前記攻撃に応答する実行可能命令が、アプリケーションを停止する実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【請求項１３】
前記攻撃に応答する実行可能命令が、ユーザ定義の応答を呼び出す実行可能命令を含む、請求項１に記載のコンピュータ読み出し可能格納媒体。
【発明の詳細な説明】
【優先権の主張】
【０００１】
[0001]本出願は、「Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ａｎａｌｙｚｉｎｇ  Ｂｉｎａｒｙ  Ｃｏｄｅ  ａｎｄ  Ｉｎｓｅｒｔｉｎｇ  Ｂｉｎａｒｙ  Ｃｏｄｅ  ｔｏ  Ｐｒｏｖｉｄｅ  Ｓｅｃｕｒｉｔｙ」という名称で２００５年８月２５日に出願された米国仮特許出願第６０／７１１，９７２号の利益を主張するものである。尚、この内容は、全体が参照によって本明細書に組み込まれる。
【本発明の簡単な説明】
【０００２】
[0002]本発明は一般に、ソフトウェアセキュリティに関する。さらに詳細には、本発明は、セキュリティの欠陥を識別し、保護コードを応答可能に挿入するためのコードの解析に関する。
【発明の背景】
【０００３】
[0003]既存のソフトウェアセキュリティシステムに関連する欠点が多くある。特に、既存のソフトウェアセキュリティシステムは通常、ホストオペレーティングシステムを介したイベントの監視またはプログラムとやり取りするネットワークトラフィックの観察に限定される。
【０００４】
[0004]この手法は、プログラムの外部の情報に限定される。したがって、従来技術は、プログラム内のコンテキスト情報を利用することができない。その結果、アプリケーションファイアウォールおよび侵入防御システムなどの従来技術の技法は通例、許容可能でない量の検出漏れおよび誤判定を生成する。
【０００５】
[0005]既存のソフトウェアセキュリティシステムに関連する検出漏れおよび誤判定の数を減少させることがきわめて望ましいと思われる。さらに、既存のソフトウェアセキュリティシステムを用いて可能であるよりも高い精度および正確さで、多くの広範囲な範疇の攻撃を検出することがきわめて望ましいと思われる。
【発明の概要】
【０００６】
[0006]本発明は、プログラム命令の自動解析を行うための実行可能命令を備えたコンピュータ読み出し可能格納媒体を含む。自動解析は、インジェクション脆弱性の自動解析、潜在的な反復的な攻撃の自動解析、機密情報の自動解析、特定のＨＴＴＰ属性の自動解析から、選択される少なくとも２つの解析を含む。保護命令は、プログラム命令に挿入される。保護命令は、プログラム命令の実行中に、攻撃を検出して応答するために利用される。
【０００７】
[0007]本発明は、添付図面に関連して行われる以下の詳細な説明との関連において、さらに十分に理解される。
類似の参照符号は、図面の複数の図を通して対応する部分を指す。
【本発明の詳細な説明】
【０００８】
[0012]図１は、本発明の実施形態によって構成されるコンピュータ１００を示す。コンピュータ１００は、バス１０４に接続される中央処理装置１０２を含む。一連の入力／出力デバイス１０６もまた、バス１０４に接続される。一連の入力／出力デバイス１０６は、キーボード、マウス、ディスプレイ、プリンタ、ネットワーク接続などを含んでもよい。メモリ１０８もまた、バス１０４に接続される。メモリ１０８は、ソースコードプログラム１１０を格納する。たとえば、ソースコードプログラム１１０は、コンピュータ１００上で生成されてもよく、入力／出力デバイス１０６を介して、コンピュータ１００と通信するネットワーク型コンピュータから受信されてもよい。
【０００９】
[0013]メモリ１０８はまた、コンパイラ１１２を格納し、コンパイラ１１２は、コンパイルされる（またはバイナリ）プログラム１１４を作成するためにソースプログラム１１０をコンパイルする。前述の構成要素は、標準的なものである。本発明は、メモリ１０８に格納されるセキュリティモジュール１１６およびランタイムセキュリティモジュール１１７に関する。セキュリティモジュール１１６は、ソースプログラム１１０またはコンパイルされた（バイナリ）プログラム１１４内のセキュリティ脆弱性を識別する。そのような脆弱性に応じて、セキュリティモジュール１１６は、コード、たとえばソースコードまたはバイナリコードを挿入する。その後で、実行時にコンパイルされたプログラムに挿入されたコードは、セキュリティイベントを生成する。これらのセキュリティイベントは、セキュリティイベントに応答することができるランタイムセキュリティモジュール１１７によって解析される。たとえば、疑わしいイベントは、ログに記録されてもよく、攻撃は妨害されてもよく、防御行為がとられてもよい。
【００１０】
[0014]グラフィカルユーザインターフェイスモジュール１１８は、セキュリティモジュール１１６に関連してもよい。グラフィカルユーザインターフェイスモジュール１１８は、保護すべきプログラムの選択および種々の保護措置の選択を可能にするユーザインターフェイスを生成するための実行可能なコードを含む。
【００１１】
[0015]図２は、保護すべきアプリケーションを選定するために用いられるグラフィカルユーザインターフェイス２００を示す。グラフィカルユーザインターフェイスモジュール１１８は、このインターフェイスを生成するために用いられてもよい。この実施形態において、ユーザは、ボタン２０２を用いて保護すべきＪ２ＥＥアプリケーションを選択する。次に、ファイル名が、ブロック２０４で指定される。
【００１２】
[0016]図３は、本発明の実施形態によって用いられてもよい別のグラフィカルユーザインターフェイス３００を示す。グラフィカルユーザインターフェイスモジュール１１８に関連する実行可能命令は、このインターフェイスを生成するために用いられてもよい。この実施形態において、多種多様なガード（たとえば、ＳＱＬインジェクション、情報漏洩など）が、選択されてもよい。さらに、種々のフィルタ（たとえば、ホワイトリストおよびブラックリスト）が、選択されてもよい。ガードおよびフィルタはまた、ユーザの介入なしに、デフォルトで設定されてもよい。
【００１３】
[0017]図４は、本発明の実施形態に関連する処理動作を示す。図４の第１の動作は、プログラムを選定すること４００である。図２のグラフィカルユーザインターフェイスは、この目的のために用いられてもよい。場合により、保護措置が、選択されてもよい（４０２）。図３のグラフィカルユーザインターフェイスは、この機能を実行するために用いられてもよい。あるいは、保護措置は、デフォルトで割り当てられてもよい。次に、セキュリティ脆弱性が、プログラム内で識別される（４０４）。セキュリティモジュール１１６は、この動作を実行するために用いられてもよい。次に、保護コードが、セキュリティモジュール１１６を用いてコンパイルされたプログラム４０８に選択的に挿入される。次に、コンパイルされたプログラムが、実行時モードで動作されてもよい。種々の実施形態において、実行時モードは、セキュリティ挙動をログに記録し、攻撃を迎撃し、防御措置をとる。これらの動作は、ランタイムセキュリティモジュール１１７によって調整されてもよい。
【００１４】
[0018]セキュリティモジュール１１６は、保護コードを挿入するための任意の数の技法を用いてもよい。保護ソースコードの挿入は、ソースコードを自動的に補足するための任意の数の技法を用いて実行されてもよい。バイナリコードの場合には、バイナリプログラムを復号化して、変更するための多数の利用可能なツールがある。そのような１つのツールが、ＢＣＥＬライブラリ（ＨＴＴＰ：／／ｊａｋａｒｔａ．ａｐａｃｅ．ｏｒｇ／ｂｃｅｌ／）である。ＢＣＥＬは、コンパイルされたＪａｖａコード（すなわち、Ｊａｖａバイトコード）を解析して操作することのできるプログラムをユーザが構築可能にする。バイトコードを操作するための別のツールは、ＡｓｐｅｃｔＪ（ＨＴＴＰ：／／ｗｗｗ．ｅｃｌｉｐｓｅ．ｏｒｇ／ａｓｐｅｃｔｉ／）である。ＡｓｐｅｃｔＪは、プログラマが学びやすいという点で、コードが挿入されるべき位置をユーザが特定可能にするために、ＢＣＥＬライブラリを用いる。これは、位置を指定している人が、バイトコードを理解する必要がなく、それを行うことを可能にする。さらに、ＡｓｐｅｃｔＪは、ユーザがＪａｖａソースコード命令文に挿入すべきコードを指定することを可能にする。ＡｓｐｅｃｔＪは、ソースコードを挿入する前に、ソースコードをバイトコードに変換する。これは、修正を書いている人が、コンパイルされたコードに関してではなく、ソースコードに関して考えることを可能にするために有用である。
【００１５】
[0019]ＡｓｐｅｃｔＪのようなツールは、コンパイルされたコードがどのように見えるかについての詳細について考える必要がなく、コンパイルされたコードをプログラマが修正することを可能にするため、例がソースコードの形態で提供される。本発明の実施形態において、プログラム変換が、コンパイルされたコードで行われる場合であっても、ソースコードに関して考え、ＡｓｐｅｃｔＪのようなツールが低レベルの変換を管理することを可能にすることは効率的である。当然のことながら、プログラム変換はまた、ソースコードの中で行われてもよい。
【００１６】
[0020]本発明の一般的な動作について記載してきたが、ここで、本発明の実施形態によって利用されるセキュリティ脆弱性およびそれに応答する保護措置の特定の例に注意を向ける。ＳＱＬインジェクションの問題を考える。ＳＱＬインジェクションは、データが信頼できないソースからプログラムに入り、データが次にＳＱＬクエリーを動的に行うために用いられる場合に、発生しうる。
【００１７】
[0021]以下のＪａｖａコードは、特定の名前に適合する項目を探索するように設計されたＳＱＬクエリーを動的に構成し、実行する。クエリーは、所有者が現在認証されたユーザのユーザ名に等しい場合に表示されるべき項目を制限する。
【数１】
2009506439.tif 000003
実行されることになっているこのクエリーコードは、以下の通りである。
【数２】
2009506439.tif 000004
しかし、クエリーが一定のベースクエリー文字列およびユーザ入力文字列を連結することによって、動的に構成されるため、ｉｔｅｍＮａｍｅが単一引用符で囲まれた文字を含まない場合に、クエリーが唯一正確に作用する。ユーザ名ｗｉｌｅｙを有する攻撃者がｉｔｅｍＮａｍｅに文字列“ｎａｍｅ’  ＯＲ  ‘ａ’＝‘ａ”を入れる場合には、クエリーは以下の通りになる。
【数３】
2009506439.tif 000005
ＯＲ  ‘ａ’＝‘ａ’条件の追加は、ｗｈｅｒｅ節を常に真であると評価する原因となるため、クエリーは、さらに簡素なクエリーと論理的に等しくなる。
【数４】
2009506439.tif 000006
クエリーをこのように簡素化すると、認証されたユーザによって所有されている項目をクエリーが返すだけの要件を攻撃者がバイパスすることを可能にする。クエリーはここで、指定された所有者に関係なく、項目表に格納されるすべてのエントリを返す。
【００１８】
[0022]別の例として、上記の例で構成され、実行されるクエリーに渡される異なる不正な値の影響を考える。ユーザ名ｈａｃｋｅｒを有する攻撃者がｉｔｅｍＮａｍｅに文字列“ｈａｃｋｅｒ’）；ＤＥＬＥＴＥ  ＦＲＯＭ  ｉｔｅｍｓ；−−”を入れた場合、クエリーは、以下の２つのクエリーとなる。
【数５】
2009506439.tif 000007
Ｍｉｃｒｏｓｏｆｔ（Ｒ）ＳＱＬサーバ２０００を含む多くのデータベースサーバは、セミコロンによって区切られた複数のＳＱＬ命令文を一度に実行することを可能にする。この攻撃文字列は、セミコロンによって区切られた命令文のバッチ実行を可能にしないＯｒａｃｌｅおよび他のデータベースサーバ上でエラーという結果を生じるが、これがサポートされているデータベース上では、このタイプの攻撃は、データベースに対する任意のコマンドの実行を可能にする。
【００１９】
[0023]ハイフン（−−）の終わりのペアに注意されたい。これらは、大部分のデータベースサーバには命令文の残りがコメントとして扱われ、実行されないことを示す。この場合には、コメントは、修正されたクエリーから終わりの単一引用符の残りを除去するために用いられる。コメントをこのように用いることが可能でないデータベース上では、一般的な攻撃は、第１の実施形態に類似のトリックを用いて依然として有効とすることが可能である。攻撃者が、以下の３つの妥当な命令文を形成するために、文字列“ｎａｍｅ’）；ＤＥＬＥＴＥ  ＦＲＯＭ  ｉｔｅｍｓ；ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ｉｔｅｍｓ  ＷＨＥＲＥ  ‘ａ’＝‘ａ”を入れた場合、
【数６】
2009506439.tif 000008
ＳＱＬインジェクション攻撃を防止する１つの伝統的な手法は、それらを入力妥当性検査問題として扱い、ＳＱＬクエリーに用いられる前に、潜在的に不正な値を避けることである。この手法は、ＳＱＬインジェクション攻撃の防止時にはその手法を無効とする抜け穴で満ちている。攻撃者は、引用されないフィールドを標的としてもよく、一定の回避されるメタ文字の必要性をバイパスする方法を見つけてもよく、インジェクトされるメタ文字を隠すためのストアドプロシージャまたは他の可能性の配列を用いてもよい。ＳＱＬクエリーへの入力において文字を回避することは、役立つ可能性があるが、ＳＱＬインジェクション攻撃からアプリケーションを安全にすることにはならない。
【００２０】
[0024]ＳＱＬインジェクション攻撃に対処するために提案される別の共通の解決法は、ストアドプロシージャを用いることである。ストアドプロシージャは、ある種のＳＱＬインジェクション攻撃を防止するのに役立つが、その他多くの攻撃に対して保護することはできない。ストアドプロシージャが通常ＳＱＬインジェクション攻撃を防止するのに役立つ方法は、それらのパラメータに渡されることができる命令文のタイプに制約を加えることによる。ストアドプロシージャに依然として渡されることができる制約および多数の関心のある命令文の周囲には、多数の方法がある。再び、ストアドプロシージャが一部のエクスプロイトを防止するのに役立ったとしても、ＳＱＬインジェクション攻撃からアプリケーションを安全にすることにはならない。
【００２１】
[0025]本発明は、ＳＱＬインジェクション攻撃に対する防衛するための種々の技法を利用する。第一に、前述のＳＱＬセキュリティ脆弱性が、セキュリティモジュール１１６に関連する実行可能命令によって識別される。次に、セキュリティモジュール１１６は、ＳＱＬインジェクション攻撃が起こり得る位置付近のプログラムに保護コードを挿入する。第１の実施形態からＪａｖａソースに関するバイトコードが、以下のソースコードに等しいように修正される。
【数７】
2009506439.tif 000009
ＣｈｅｃｋＦｏｒＳＱＬＩｎｊｅｃｔｉｏｎ（  ）への呼び出しを挿入することによって、ＳＱＬクエリーが実行される前に、実行時に、プログラムはここで、ランタイムセキュリティモジュール１１７に、データベースに送られる前に、クエリー文字列を調べる機会を与える。ランタイムセキュリティモジュール１１７は、ＳＱＬインジェクション攻撃パターンの集合に対するクエリーを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから行われるクエリーの履歴を検討することによって、クエリーが、ＳＱＬインジェクション攻撃を含むかどうかを決定する。たとえば、クエリーがコメント（部分文字列“−−”によって表される）、複数の命令文（セミコロン文字“；”によって表される）または重複した述語（“１＝１”など）を含む場合に、前のクエリーが、コメント、複数の命令文または重複した述語を含んでいなかったときには、クエリー文字列は、ＳＱＬインジェクション攻撃である可能性が高い。一実施形態において、ランタイムセキュリティモジュール１１７は、ＳＱＬインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【００２２】
[0026]クエリー文字列がＳＱＬインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール１１７は管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【００２３】
[0027]別のタイプのセキュリティ脆弱性は、コマンドインジェクションである。コマンドインジェクション脆弱性は、２つの形態をとる。
１．攻撃者は、プログラムが実行するコマンドを変更することができる。攻撃者は、コマンドであるものを明示的に制御する。
２．攻撃者は、プログラムが実行する環境を変更することができる。攻撃者は、コマンドが意味しているものを暗示的に制御する。
【００２４】
[0028]第１のシナリオに関して、コマンドインジェクション脆弱性は、以下の場合に発生する。
１．データが、信頼できないソースからアプリケーションに入る場合。
２．データが、アプリケーションによって実行されるコマンドを表す文字列として、またはその一部として用いられる場合。
３．コマンドを実行することによって、アプリケーションが、攻撃者がそうでなければ有さない特権または能力を攻撃者に与える場合。
【００２５】
[0029]実施形態１：システムユーティリティからの以下のコードは、インストールされるディレクトリを決定して、特定のディレクトリからの関連パスに基づく初期化スクリプトを実行するために、システム特性ＡＰＰＨＯＭＥを用いる。
【数８】
2009506439.tif 000010
実施形態１のコードは、ＩＮＩＴＣＭＤの不正なバージンを含む異なるパスに向けるようにシステム特性ＡＰＰＨＯＭＥを修正することによって、アプリケーションの高い特権を有する任意のコマンドを攻撃者が実行可能にする。プログラムは環境から読み出される値を有効にしないため、攻撃者がシステム特性ＡＰＰＨＯＭＥの値を制御することができる場合には、不正なコードを実行するようにアプリケーションを欺き、システムの制御を行うことができる。
【００２６】
[0030]実施形態２：以下のコードは、管理ウェブアプリケーションからのものである。このアプリケーションは、ｒｍａｎユーティリティの周囲のバッチファイルラッパを用いて、ユーザがＯｒａｃｌｅデータベースのバックアップを開始し、いくつかの現在生成された一次ファイルを消去するために、ｃｌｅａｎｕｐ．ｂａｔスクリプトを実行することができるように設計される。スクリプトｒｍａｎＤＢ．ｂａｔは、行われるべきバックアップのタイプを指定する単一のコマンドラインパラメータを受理する。データベースへのアクセスが制限されるため、アプリケーションは、特権ユーザとしてバックアップを実行する。
【数９】
2009506439.tif 000011
ここでの問題は、プログラムがユーザから読み出されたｂａｃｋｕｐｔｙｐｅパラメータに関する妥当性検査を行わないことである。通常、Ｒｕｎｔｉｍｅ．ｅｘｅｃ（  ）関数は、複数のコマンドを実行するのではない。プログラムは、この場合には、Ｒｕｎｔｉｍｅ．ｅｘｅｃ（  ）への１回の読み出しによって、複数のコマンドを実行するために、第一に、最初のｃｍｄ．ｅｘｅシェルを実行する。一旦、シェルが呼び出されると、２つのアンパーサンドによって区切られる複数のコマンドを実行する。攻撃者が“＆＆  ｄｅｌ  ｃ：＼＼ｄｂｍｓ＼＼＊．＊”の形態の文字列を渡すと、アプリケーションは、プログラムによって指定されたコマンドと共に、このコマンドを実行する。アプリケーションの性質のために、アプリケーションは、データベースと対話するために必要な特権を利用して実行する。攻撃者がインジェクトするいずれのコマンドもまたそのような特権を利用して動作することを意味する。
【００２７】
[0031]一旦、コマンドインジェクション脆弱性がセキュリティモジュール１１６によって識別されると、セキュリティモジュール１１６は、コマンドインジェクション攻撃が起こり得る位置付近に保護コードを挿入する。実施形態１に基づくＪａｖａソース用のバイトコードは、以下のソースコードと等価であるように修正される。
【数１０】
2009506439.tif 000012
コマンドが実行される前に、ＣｈｅｃｋＦｏｒＣｍｄＩｎｊｅｃｔｉｏｎ（  ）への呼び出しを挿入することによって、プログラムはここで、実行時に、ランタイムセキュリティモジュール１１７に、呼び出される前にコマンドを調べる機会を与える。ランタイムセキュリティモジュール１１７は、攻撃パターンの集合に対するクエリーを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから発行されたコマンドの履歴を検討することによって、コマンドが、不正であるかどうかを決定する。たとえば、コマンドが、親ディレクトリへの参照（部分文字列“．．”によって表される）または複数のサブコマンド（セミコロン文字”；”または”＆＆”によって表される）を含む場合に、前のクエリーが、親ディレクトリへの参照または複数のサブコマンドを含んでいなかったときには、文字列は、コマンドインジェクション攻撃を含む可能性が高い。アプリケーション防御は、コマンドインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【００２８】
[0032]コマンド文字列が、コマンドインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール１１７は管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【００２９】
[0033]本発明の実施形態によって処理される別のセキュリティ脆弱性は、リソースインジェクションである。リソースインジェクション発行は、以下の２つの状態が満たされた場合に生じる。
１．攻撃者は、システムリソースにアクセスするために用いられる識別子を指定することを許容される。たとえば、攻撃者は、開かれるファイルの名前または用いられるポート番号の一部を指定することができる可能性がある。
２．リソースを指定することによって、攻撃者は、そうでなければ有さない能力を獲得する。たとえば、プログラムは、攻撃者に、指定されたフィルを上書きする能力または攻撃者によって制御される構成を利用して実行する能力を攻撃者に与える可能性がある。
実施形態１：以下のコードは、ファイル名を形成するためのＨＴＴＰ要求からの入力を用いる。作成者は、アプリケーションにそれ自体の設定ファイルの１つを消去させる“．．／．．／ｔｏｍｃａｔ／ｃｏｎｆ／ｓｅｒｖｅｒ．ｘｍｌ”のようなファイル名を攻撃者に提供する可能性がある可能性を考慮していない。
【数１１】
2009506439.tif 000013
実施形態２：以下のコードは、どのファイルを開いて、ユーザにエコーバックするかを決定するために、構成ファイルからの入力を用いる。プログラムが特権を利用して実行され、不正なユーザが設定ファイルを変更することができる場合には、プログラムを用いて、拡張子“．ｔｘｔ”で終わるシステム上の任意のファイルを読み出すことができる。
【数１２】
2009506439.tif 000014
データが影響を与えるリソースの種類は、危険と考えられるコンテンツの種類を示す。たとえば、ファイルシステムにピリオド、スラッシュおよびバックスラッシュなどを含むことを許容される入力は、ファイルシステムと対話する方法に達することができるときに、注意に値する。同様に、ＵＲＬおよびＵＲＩを保持する可能性があるデータは、遠隔接続を生成するために用いられる関数に関してリスクがある。攻撃者がウェブサーバにおけるファイルシステムリソースを制御することができる場合には、Ｐａｔｈ操作として公知のリソースインジェクションの１つの特殊な場合が生じる。
【００３０】
[0034]ＳＱＬインジェクションおよびコマンドインジェクションに対する防御と同様に、セキュリティモジュール１１６は、リソースインジェクション攻撃が起こり得る位置付近にコードを挿入する。実施形態１からＪａｖａソースに関するバイトコードが、以下のソースコードに等しいように修正される。
【数１３】
2009506439.tif 000015
リソースアクセスが生じる前に、ＣｈｅｃｋＦｏｒＲｓｒｃＩｎｊｅｃｔｉｏｎ（  ）への呼び出しを挿入することによって、実行時に、プログラムはここで、リソース名が用いられる前に、ランタイムセキュリティモジュール１１７にリソース名を調べる機会を与える。ランタイムセキュリティモジュール１１７は、攻撃パターンの集合に対するリソース名を比較し、履歴情報が利用可能である場合には、この呼び出しサイトからアクセスされたリソースの履歴を検討することによって、リソース名が、不正であるかどうかを決定する。たとえば、リソース名が、親ディレクトリへの参照（部分文字列”．．”によって表される）を含む場合に、前のクエリーが、親ディレクトリへの参照を含んでいなかったときには、文字列は、コマンドインジェクション攻撃である可能性がある。ランタイムセキュリティモジュール１１７は、コマンドインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【００３１】
[0035]リソース文字列がインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール１１７は、管理者によって指定される防御措置を呼び出す。防御措置が、以下に説明される。
【００３２】
[0036]本発明によって処理される別のセキュリティ脆弱性は、ログ偽造である。ログ偽造の脆弱性は、以下の場合に生じる。
１．データが信頼できないソースからアプリケーションに入る場合
２．データがアプリケーションまたはシステムログファイルに書き込まれる場合
アプリケーションは、通常、イベントの履歴、または後の精査、統計データの収集またはデバッギングのためのトランザクションを格納するために、ログファイルを用いる。アプリケーションの性質に応じて、ログファイルを精査するタスクは、必要に応じて手動で行われるか、または重要な情報または傾向情報のためにログを自動的に選抜するツールを利用して自動化されてもよい。
【００３３】
[0037]攻撃者が、続いて逐語的にログに記録されるアプリケーションにデータを供給することができる場合には、ログファイルの調査は、妨害されるか、または誤った方向に誘導される可能性がある。最も害のない場合において、攻撃者は、提供されるデータに適当な文字を含めることによって、ログファイルに偽造エントリを挿入することができる可能性がある。ログファイルが自動的な方式で処理される場合には、攻撃者は、ファイルのフォーマットを破損することによって、または予期しない文字をインジェクトすることによって、ファイルを使用不能にすることができるようにする可能性がある。さらに巧妙な攻撃は、ログファイルの統計データを歪曲することを伴う場合がある。偽造されたログファイルまたは他の方法で破損されたログファイルは、攻撃者の痕跡を隠すため、または不正な行為の犯行において別の当事者を巻き込むためにも用いられる可能性がある。最悪の場合には、攻撃者は、ログファイルにコードまたは他のコマンドをインジェクトし、ログ処理ユーティリティにおける脆弱性を利用する可能性がある。
実施形態：ウェブアプリケーションからの以下のコードは、要求オブジェクトから整数値を読み出そうとしている。値が整数として解析できない場合には、入力が、起こったことを示すエラーメッセージと共に、ログに記録される。
【数１４】
2009506439.tif 000016
ユーザがｖａｌに文字列“ｔｗｅｎｔｙ−ｏｎｅ”をサブミットする場合には、以下のエントリがログに記録される。
【数１５】
2009506439.tif 000017
しかし、攻撃者が“ｔｗｅｎｔｙ−ｏｎｅ％０ａ％０ａＩＮＦＯ：＋Ｕｓｅｒ＋ｌｏｇｇｅｄ＋ｏｕｔ％３ｄｂａｄｇｕｙ”をサブミットする場合には、以下のエントリがログに記録される。
【数１６】
2009506439.tif 000018
はっきり言えば、攻撃者は、この同一の機構を用いて、任意のログエントリを挿入することができる。
【００３４】
[0038]本発明の実施形態によれば、セキュリティモジュール１１６は、ログ偽造攻撃が起こり得る位置付近にコードを挿入する。上記の実施形態に基づくＪａｖａソース用のバイトコードは、以下のソースコードと等価であるように修正される。
【数１７】
2009506439.tif 000019
ログファイルエントリが書き込まれる前に、ＣｈｅｃｋＦｏｒＬｏｇＦｏｒｇｉｎｇ（  ）への呼び出しを挿入することによって、実行時に、プログラムはここで、ログに書き込まれる前に、ランタイムセキュリティモジュール１１７にデータを調べる機会を与える。ランタイムセキュリティモジュール１１７は、攻撃パターンの集合に対するデータを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから書き込まれたログエントリの履歴を検討することによって、データが不正であるかどうかを決定する。たとえば、データがキャリッジリターンまたは改行（新しいログファイルエントリの開始を示すために通常用いられる文字）を含むのであれば、前のクエリーが、これらの文字を含んでいなかった場合には、文字列は、ログ偽造に対する試みである可能性がある。ランタイムセキュリティモジュール１１７は、ログ偽造攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【００３５】
[0039]データがログ偽造攻撃を含む場合には、ランタイムセキュリティモジュール１１７は、管理者によって指定される防御措置を呼び出す。防御措置が、以下に説明される。
【００３６】
[0040]本発明の実施形態は、バッファオーバーフローに対して保護する。攻撃者が、標的にしたプログラムを、割り当てられたメモリのブロックの境界の外側に書き込ませることができる場合には、プログラムは、それ自体のデータを破損するか、強制終了するかまたは攻撃者のために不正なコードを実行する可能性がある。ＪａｖａおよびＣ＃のような言語は、バッファオーバーフローを防止する配列境界検査および強い型検査のような中に組み込まれた特徴を有するが、これらの保護手段は、脆弱なバックエンドソフトケアに対するバッファオーバーフロー攻撃を供給するために、攻撃者がこれらのプログラムを用いるのを防止するわけではない。
【００３７】
[0041]ＪａｖａおよびＣ＃のような言語は、ＣまたはＣｏｂｏｌのようなより古い言語に書き込まれたより古いシステム用のフロントエンドインターフェイスに書き込むために用いられることが多い。たとえば、仲買エンティティは、ユーザが株式取引を行うことを可能にするウェブサイトを有する確率が高い。ウェブページを生成するソフトウェアは、Ｊａｖａに書き込まれる可能性があるのに対し、取引ソフトウェアはＣで書かれている。このシナリオでは、Ｊａｖａフロントエンドは、バックエンドシステムと取引情報を通信する責任がある。バックエンド取引システムがバッファオーバーフロー脆弱性を含む場合には、攻撃データをＪａｖａフロントエンドに供給し、Ｊａｖａコードに脆弱なバックエンドシステムに対して攻撃させることによって、攻撃者が脆弱性を悪用することが可能である場合がある。
【００３８】
[0042]方法＃１：入力長さの制限
バッファオーバーフロー攻撃は、攻撃者が異常に大量のデータを提供するよう要求することが多い。ランタイムセキュリティモジュール１１７は、プログラムによって受信されるときに、各ＨＴＴＰ要求を調べ、要求のコンテンツが過度に大きくならないことを確認するために検査する。要求データは、ＵＲＬ、クエリー文字列、ＨＴＴＰヘッダ名（クッキーを含む）、パラメータ名および値、マルチパートフォームデータを含む。
管理者が、要求の各部分に関するサイズ限界を設定することができ、要求されるＵＲＬ、ＨＴＴＰヘッダまたはパラメータの名前またはこれらの因子の組み合わせに応じて、異なるサイズ限界を指定することができる。
【００３９】
[0043]セキュリティモジュール１１６は、ランタイムセキュリティモジュール１１７に、要求がアプリケーションに対して見える前に、要求を調査することを可能にする。セキュリティモジュール１１６は、プログラム設定を修正することによって、これを行う。Ｊ２ＥＥアプリケーションの場合には、これは、アプリケーション配備記述子を修正することによって達成される（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００４０】
[0044]ランタイムセキュリティモジュール１１７は、要求が指定された長さ限界を超えるデータを含むと決定する場合には、管理者によって与えられた防御措置を呼び出す。防御措置は、以下で説明される。
【００４１】
[0045]方法＃２：バッファオーバーフロースレッドの検出
不正なコードを実行するためにバッファオーバーフローを利用するためには、攻撃者は、標的プログラムに送信する入力を注意深く構成しなければならない。バッファオーバーフローが、攻撃者にスタックへのデータの書き込みを可能にする場合には、攻撃者は、関数リターンポインタに関する新たな値を指定することができる。（関数リターンポインタは、現在の関数が終わるときに、プログラムが飛び越して、実行命令を開始するメモリアドレスを指定する。）攻撃者が、不正なコードを含む入力バッファが書き込まれたスタックにアドレスを指定する場合には、プログラムは、不正なコードの実行に進むことになる。
【００４２】
[0046]攻撃者にとって、この攻撃を実行する最も難しい部分は、関数リターンポインタに関して指定すべきメモリアドレスを知ることである。攻撃が始められる前に、スタックの正確な状態を知ることはできないため、不正なコードがメモリに書き込まれる場所を１００％の精度で知ることはできない。攻撃者が指定するアドレスが完全に正確でない場合には、不正なコードの一部またはすべてが飛ばされることになる。これは、攻撃者の側から見れば望ましくない。コンピュータが不正なコードの途中で実行を開始する場合には、攻撃が意図された影響を及ぼす確率は低い。
【００４３】
[0047]バッファオーバーフロースレッド（「スライド」と呼ばれることもある）の目的は、成功するバッファオーバーフロー攻撃に必要な精度を低下させることである。スレッドは、コンピュータが任意の点で開始を実行することができる簡単な命令の長くて反復的なシーケンスである。不正なコードの開始にスレッドを添付することによって、攻撃者はここで、容易な目的を有する。攻撃者がスレッドにおける任意のメモリアドレスを指す関数リターンポインタを指定する場合には、コンピュータは、遭遇するスレッドのいずれかの部分を実行し、次に不正なコードのすべてを実行する。スレッドが長ければ長いほど、結果として生じる攻撃はさらに強くなる。最も簡素で可能なスレッドは、無演算命令（ｎｏ−ｏｐ）のシーケンスである。より複雑なスレッドはまた、飛び越し命令または他の簡単な動作を含んでもよい。
【００４４】
[0048]ランタイムセキュリティモジュール１１７が、バッファオーバーフロースレッドを検出することによって、バッファオーバーフロー攻撃を検出することができる。外部プログラムまたはネイティブコードで実行される関数への呼び出しなど、アプリケーションが脆弱である位置を監視することによって、ランタイムセキュリティモジュール１１７は、無演算命令または他の共通スレッドコンテンツの長いシーケンスを探すことができる。たとえば、以下の呼び出しを含むプログラムである。
【数１８】
2009506439.tif 000020
これは、さらなる調査を含むように以下のように変換される。
【数１９】
2009506439.tif 000021
ランタイムセキュリティモジュール１１７は、潜在的に脆弱な呼び出しが、バッファオーバーフロースレッドを含む入力を受信しようとしていると決定する場合には、管理者によって指定された防御措置を呼び出す。防御措置は、以下で説明される。
【００４５】
[0049]本発明の実施形態はまた、クロスサイトスクリプティングおよびＨＴＴＰレスポンス分割にも対処する。クロスサイトスクリプティング（ＸＳＳ）脆弱性は、以下の場合に生じる。
１．データが、信頼できないソースを介してウェブアプリケーション、最も頻繁なウェブ要求に入る場合
２．データが、不正なコードを正当化することなく、ウェブユーザに送信される動的コンテンツに含まれる場合
ウェブブラウザに送信される不正なコンテンツは、ＪａｖａＳｃｒｉｐｔのセグメントの形態をとることが多いが、ＨＴＭＬ、ＨＴＴＰ、Ｆｌａｓｈまたはブラウザによって実行されることが可能な任意の他のタイプのコードを含んでもよい。
ＨＴＴＰレスポンス分割は、ＨＴＴＰヘッダでウェブユーザに送信される不当なコンテンツが、攻撃者によって巧妙に作られたＨＴＴＰレスポンスに続く回避されないキャリッジリターン（またはキャリッジリターン／改行の組み合わせ）を含む場合に行われるクロスサイトスクリプティングの特殊なクラスに関する名前である。キャリッジリターンは、ユーザのブラウザに新たなＨＴＴＰレスポンスとして続くデータを解釈させる。この挙動は、ブラウザに表示された情報の完全な制御を攻撃者に与える。
実施形態１：以下のＪＳＰコードセグメントは、ＨｔｔｐＳｅｒｖｌｅｔＲｅｑｕｅｓｔから被雇用者のＩＤ番号を読み出して、ユーザにそれを出力する。
【数２０】
2009506439.tif 000022
実施形態１のコードは、ｅｉｄが標準的な英数字のテキストのみを含む場合には、正確に振る舞う。しかし、ｅｉｄがメタ文字またはソースコードを含む場合には、攻撃者は、その値を含むコンテンツを見ている任意のユーザのウェブブラウザで不正なコマンドを実行することができる。一見したところ、「要求を行ったユーザもまた、結果として生じるデータを見ている。何故彼らは、自分自身を攻撃しようとするのか？」と尋ねたくなる。このため、このコードを無害だと分類する誘惑を回避せよ。よく用いられる攻撃は、犠牲者に電子メールまたは他の手段を介して不正なＵＲＬを訪問することを説得し、犠牲者に脆弱なウェブアプリケーションから不正なコンテンツを無意識に反映させて、しばしばＪａｖａＳｃｒｉｐｔのセグメントの形で局所的に実行させる。脆弱なウェブアプリケーションを不当に利用するこの仕組みは、反射型クロスサイトスクリプティング（Ｒｅｌｆｅｃｔｅｄ  Ｃｒｏｓｓ−Ｓｉｔｅ  Ｓｃｒｉｐｔｉｎｇ）として周知である。
実施形態２：以下のＪＳＰコードセグメントは、所与の被雇用者のＩＤを有する被雇用者に関するデータベースを照会し、ＩＤに対応する名前を印刷する。
【数２１】
2009506439.tif 000023
実施形態１の場合のように、実施形態２のコードは、ｎａｍｅの値が十分に型にはまっている場合には、正確に振る舞うが、ｎａｍｅの値が型にはまっていないイベントにおけるエクスプロイトを防止するものは何もない。実施形態１とは対照的に、アプリケーションがそのコンテンツを管理するｎａｍｅの値がデータベースから読み出されないため、コードを危険と見なす確率はさらに低いと考えられる。ここでの脆弱性は、データベースから読み出されるデータの結果ではなく、むしろデータベースに格納されるデータの元のソースによって生じる結果にある。ユーザに端を発するｎａｍｅの値がデータに供給される場合には、データベースは、危険なデータのための経路として機能するに過ぎない。データベースに格納されたすべてのデータに関して適切な入力妥当性検査がなく、攻撃者は、ユーザのウェブブラウザで不正なコマンドを実行することができる可能性がある。格納型クロスサイトスクリプティング（Ｓｔｏｒｅｄ  Ｃｒｏｓｓ−Ｓｉｔｅ  Ｓｃｒｉｐｔｉｎｇ）として公知であるエクスプロイトのこの種類は、データによって生じた間接的技法は識別することをさらに困難にし、攻撃がマルチユーザに影響を及ぼす見込みを増大することから、特に狡猾である。
【００４６】
[0050]クロスサイトスクリプティング脆弱性は、ユーザに表示される動的コンテンツにおいて不当なデータを含むことによって生じる。危険なデータをユーザに向ける３つの一般的なベクトルがある。
１．実施形態１の場合と同様に、データは、信頼できないソースから直接的に、最も頻繁にはウェブ要求から読み出され、動的コンテンツに含まれる。
２．実施形態２の場合と同様に、アプリケーションは、データベースまたは他の信頼できるデータ格納に危険なデータを格納する。危険なデータは続いて、アプリケーションの中に読み返され、動的コンテンツに含まれる。
３．現在のアプリケーション以外のソースが、データベースまたは他の信頼できるデータ格納部に危険なデータを格納し、この場合も危険なデータは続いて、信頼できるデータとしてアプリケーションの中に読み返され、動的コンテンツに含まれる。
反射型ＸＳＳエクスプロイトは、攻撃者がユーザに脆弱なウェブアプリケーションに危険なコンテンツを供給させ、危険なコンテンツがユーザに戻すように反映され、ウェブブラウザによって実行されるときに生じる。不正なコンテンツを供給する最も一般的な仕組みは、公に投稿されるか、ユーザに直接的に電子メールが送られるＵＲＬにおけるパラメータとして、不正なコンテンツを含むことである。このような態様で構成されるＵＲＬは、攻撃者が脆弱なサイトを指すＵＲＬを訪問することを犠牲者に説得する多くのフィッシングスキームの心臓部である。サイトがユーザに攻撃者コンテンツを反映する場合には、ユーザのマシンから攻撃者にクッキーなどの個人情報を伝送するか、または他の非道な行為を行うことに進む。
【００４７】
[0051]格納型ＸＳＳエクスプロイトは、攻撃者が、後で読み出され、ユーザによって見られる動的コンテンツに含まれる危険なコンテンツをデータベースまたは他のデータ格納部に潜り込ませる場合に生じる。攻撃者の観点からみれば、不正なコンテンツをインジェクトすることが最も望ましい場所は、多くのユーザまたは関心のあるユーザのいずれかに表示される領域にある。関心のあるユーザは、アプリケーションにおいて高い特権を有するか、または攻撃者にとって価値のある機密データと対話する可能性がある。これらのユーザの１人が不正なコンテンツを実行する場合には、攻撃者は、ユーザのために特権化された動作を行うか、またはユーザに属する機密データに近づくことができる可能性がある。
【００４８】
[0052]セキュリティモジュール１１６は、クロスサイトスクリプティングペイロードがＨＴＴＰレスポンス（本体またはヘッダのいずれか）に書き込まれる可能性がある位置付近にコードを挿入する。実施形態１からＪａｖａソースに関するバイトコードが、以下のＪＳＰソースコードに等しいように修正される。
【数２２】
2009506439.tif 000024
ＣｈｅｃｋＦｏｒＸｓｓ（  ）への呼び出しを挿入することによって、文字列が出力ストリームに書き込まれる前に、実行時に、プログラムはここで、ランタイムセキュリティモジュール１１７に、ユーザに送り返される前に、データを調べる機会を与える。データがユーザに送り返される前に、最後の可能な点で仲裁に入ることによって、ランタイムセキュリティモジュール１１７は、クロスサイトスクリプティングが反射型または格納型のいずれの系統であるかに関係なく、クロスサイトスクリプティングを検出することができる。ランタイムセキュリティモジュール１１７はまた、データがＨＴＴＰ要求またはデータベースまたは別のデータ格納部から読み出されるときに、クロスサイトスクリプティング攻撃パターンに関して調べることもできる。
【００４９】
[0053]ランタイムセキュリティモジュール１１７は、攻撃パターンの集合に対して比較し、履歴情報が利用可能である場合には、問題の呼び出しサイトから書き出されるデータの履歴を検討することによって、データのピースがクロスサイトスクリプティング攻撃を含むかどうかを決定する。たとえば、データがスクリプトタグ（（部分文字列“＜ｓｃｒｉｐｔ＞”によって表される）を含むのであれば、前のクエリーが、スクリプトタグを含んでいなかった場合には、文字列は、クロスサイトスクリプティング攻撃である可能性がある。ランタイムセキュリティモジュール１１７は、クロスサイトスクリプティング攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【００５０】
[0054]文字列がクロスサイトスクリプティング攻撃を含む場合には、ランタイムセキュリティモジュール１１７は、管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【００５１】
[0055]サイト改変は、本発明の実施形態によって対処される別の問題である。攻撃者がサーバに基づくアプリケーションに関してプログラムファイルを破損または変更する方法を見つけ出す場合には、アプリケーションの正規ユーザが誤った方向に導かれたり、不便を感じたり、または搾取されたりする可能性がある。攻撃者が、ウェブページのコンテンツの変更、新たな未認証のウェブページの追加またはアプリケーション自体の論理の変更を行う可能性がある。攻撃者は、アプリケーションを変更するための多くの可能な手段を有する。攻撃者は、アプリケーション自体に脆弱性を利用することができる可能性があり、基礎を成すアプリケーションサーバ、オペレーティングシステムまたはネットワークにおける弱点を利用する可能性がある。攻撃者がまた、システム管理者に変更させる賄賂を贈ったり、不正をさせたりまたは罠にかけたりすることができる可能性もある。
【００５２】
[0056]不正な意図で行われる変更に加えて、プログラムファイルが開発者または善意であるが、組織の変更制御プロセスに関して知識不足である管理者によって更新される可能性がある。善意であるが、間違った方向への改変は、不正な改変と全く同程度の損傷である可能性がある。
【００５３】
[0057]プログラムの制御からサイト改変が生じることができるきわめて多くの手法があるため、本発明は、サイト改変を防止しようという試みはしていない。代わりに、サイト改変が生じた場合を検出することに焦点を置き、プログラムが防御行為をとることができるようにする。
【００５４】
[0058]ランタイムセキュリティモジュール１１７は、以下の方法でサイト改変を検出する。セキュリティモジュール１１６がプログラムにコードを挿入した後であるが、プログラムが実行される前に、セキュリティモジュール１１６は、名前、サイズ、アプリケーションを備える各ファイルの安全ハッシュを列挙するマニフェストを作成する。（安全ハッシュは、ＭＤ５またはＳＨＡのようなアルゴリズムを用いて計算される。）次に、プログラムが実行されるときには、ランタイムセキュリティモジュール１１７は、コンピュータに存在するアプリケーションファイルに対して、マニフェストのコンテンツを定期的に調べる。ファイルの追加、消去または修正が行われる場合には、ランタイムセキュリティモジュール１１７は、サイト改変攻撃が行われた可能性があることを認識する。
【００５５】
[0059]サイトプロービングは、本発明の実施形態によって対処される別の問題である。攻撃者がプログラムに対する成功する標的となる攻撃を始めることができる前に、その潜在的な弱点に関して学ぶために、プログラムを探索する必要がある。この探索は普通、標準的なユーザが行わない方法でプログラムを探ることを伴う。たとえば、攻撃者は、アプリケーションのユーザが見えるウェブページから参照されないＵＲＬに関する要求を行うことによって、期限切れのウェブページ、バックアップファイルおよび管理ウェブページに関して探る可能性がある。攻撃者はまた、脆弱性を発見する目的で、ＵＲＬパラメータ、ＨＴＴＰヘッダおよびＰＯＳＴパラメータを変更する可能性もある。
【００５６】
[0060]本発明は、２つの方法でサイトプロービングに対して保護することができる。
１．ユーザが生成するＨＴＴＰエラーを監視することによって、ランタイムセキュリティモジュール１１７は、ユーザが異常な数のエラーを生成するときを決定する。たとえば、ＨＴＴＰ４０４エラーは、アプリケーションに存在しないページをユーザが要求したことを示す。大部分のユーザは、エラーを全く生成しないか、またはきわめて少数のエラーを生成するかのいずれかである。攻撃者が、エラーの長いシーケンスを生成する。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、エラーを生成したユーザに関する情報にアクセスすることを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
２．アプリケーションが生成するＨＴＴＰレスポンスを修正することによって、セキュリティモジュールは、不正な意図を暴露する方法で、攻撃者を誘惑してアプリケーションを探らせることができる。たとえば、セキュリティモジュールは、ＨＴＴＰレスポンスにクッキーを追加することができる。クッキーは、アプリケーションに対して意味を持たず、アプリケーションの規則的なユーザは、クッキーに気付かず、その値を変更するための機会（または動機）を有することもない。他方、攻撃者は、クッキーを変更することが自分たちに好都合である可能性があると考えている可能性がある。セキュリティモジュールが変更されたクッキー値をみると、アプリケーションが探られており、防御行為をとることができることを認識する。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、ＨＴＴＰレスポンスを修正することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００５７】
[0061]セキュリティ脆弱性を推測するセッションＩＤもまた、本発明の実施形態によって識別される。多くのウェブベースのアプリケーションは、ユーザがユーザ名およびパスワード（または他の認証信任状）を提供するログインページを有する。ユーザがアプリケーションを用いた認証に成功した後、再び認証することなく一定の期間、ユーザがアプリケーションを用いることが許容される。アプリケーションは、ユーザとセッション識別子を関連付けることによって、これを達成する。セッション識別子は通常、ユーザのブラウザにクッキーとして格納される。認証後、ユーザがアプリケーションに対して要求するたびに、セッション識別子を含んでいるクッキーがアプリケーションに送信され、アプリケーションは、セッション識別子が正確に認証されたユーザに対応しているかを確認する。
【００５８】
[0062]攻撃者が認証されたユーザに関するセッション識別子を推測することができる場合には、攻撃者は、そのセッション識別子を用いて要求し始めることができる。セッション識別子を推測することによって、攻撃者は、ユーザのセッションを本質的に乗っ取ることができる。アプリケーションは、セッション識別子が認証されたユーザに対応していることが分かり、攻撃者に、真のユーザがアクセスするいずれへのアクセスも喜んで許可する。このため、セッション識別子に関して、推測することが困難であるようにすることが重要である。一般的な攻撃において、攻撃者は、妥当なセッション識別子を見つける前に、多数の推測を行わなければならない。
【００５９】
[0063]ランタイムセキュリティモジュール１１７が、すべてが不当なセッション識別子を用いる爆発的な量の要求を見つけることによって、セッション識別子推測に対して防御する。この爆発的な量の要求は、特に大量の要求が同じＩＰアドレスから来る場合には、攻撃を表す確率が高い。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、すべてのＨＴＴＰ要求（妥当なセッション識別子を有する要求および不当なセッション識別子を有する要求の両方）を監視することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００６０】
[0064]強制的ブラウズは、本発明の実施形態によって識別される別のセキュリティ脆弱性である。ウェブベースのアプリケーションとの多くの対話は、一連のウェブページ上で行う。たとえば、ユーザが、１つのページでショッピングカートに品目を追加し、次のページでその名前および住所を記入し、最後のページでクレジットカード番号を指定することによってチェックアウトを完了する可能性がある。強制的ブラウズは、攻撃者がアプリケーションの正常な流れを覆す場合に、攻撃を指すために用いられるような用語である。たとえば、アプリケーションが住所のページが満たされた後で、その注文で支払われるべき税金を計算する場合に、攻撃者は、名前および住所のページをバイパスすることによって免税の行われた注文をサブミットすることができる可能性がある。よく書かれたアプリショーンは、たとえあるとしても、きわめて少数のこのタグの脆弱性を含むため、攻撃者は、脆弱性を識別するために、ページのさまざまな組み合わせおよびシーケンスを試す必要がある確率が高い。
【００６１】
[0065]ランタイムセキュリティモジュール１１７は、３つの方法で強制的ブラウズ攻撃に対して保護することができる。３つの方法のそれぞれにおいて、セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、すべてのＨＴＴＰ要求のヘッダおよび他の部分を監視することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
１．ＨＴＴＰ要求における“ｒｅｆｅｒｒｅｒ”ヘッダは、ユーザを現在の要求に導いたページの名前を与える。アプリケーションの正常な流れにおいて、このヘッダは、アプリケーションの流れで、先行するページを訂正するために常に設定されるべきである。ランタイムセキュリティモジュール１１７が、要求中の現在のページに基づき、不正確であるリファラヘッダを探索する。攻撃者によって、リファラヘッダを偽造することは可能であることを留意されたい。あまり巧みでない攻撃者は、これを行うことはなく、この保護が、より抜け目のない攻撃者に対して成功を収めることもない。
２．あまり巧みでない攻撃者によって通常適用される別の技術は、アプリケーションが正常に用いられる方法とは異なるＨＴＴＰ方法を用いて、強制的ブラウズ要求を行うことである。大部分の状況では、ユーザは、ウェブページで雛型を記入してサブミットするときに、要求がＨＴＴＰ  ＰＯＳＴ要求を用いてサーバに送信される。攻撃者がブラウザウィンドウにおいてＵＲＬを変更することによって、アプリケーションの特定の部分に直接的に飛ぼうとする場合には、情報は、ＨＴＴＰ  ＧＥＴ要求としてサーバに送信されることになる。ランタイムセキュリティモジュール１１７は、どの方法がページにアクセスするために正常に用いられるかを追跡することができ、強制的ブラウズにおける試みとして、このパターンから矛盾を記録する。
３．強制的ブラウズは、プログラムがユーザの注文以外の要求を満たそうとするときに、異常な数のアプリケーションエラーを生じる確率が高い。攻撃者は、脆弱性を見つける前に、要求の多数のシーケンスを試す確率が高いため、アプリケーションは、多数のエラーに遭遇することになる。ユーザが生成するエラーの数を追跡することによって、ランタイムセキュリティモジュール１１７は、強制的ブラウズにおける潜在的な試みを検出する。
【００６２】
[0066]本発明の実施形態はまた、信任状推測（Ｃｒｅｄｅｎｔｉａｌ  Ｇｕｅｓｓｉｎｇ）および登録情報推測（Ｒｅｇｉｓｔｒａｔｉｏｎ  Ｇｕｅｓｓｉｎｇ）に対処する。ネットワークに基づくアプリケーションは通常、機密情報を見たり修正したりすることを許容される前に、ユーザのそれらを認証させることを必要とする。今日用いられている認証の最も一般的な形態は、ユーザ名／パスワードの組み合わせである。攻撃者が正規ユーザに関してユーザ名およびパスワードの両方を推測することができる場合には、攻撃者は、ユーザのふりをすることができる。
【００６３】
[0067]攻撃者が、無制限の数のユーザ名／パスワードの推測を行うことが許容される場合には、攻撃者は最終的にはシステムにアクセスすることになる。一部のアプリケーションは、１つのユーザ名に関して行うことができる連続的な認証の試みの数を限定する。たとえば、アプリケーションは、ユーザが顧客サポートに連絡しなければならなくなる前に、ユーザに５回の連続的な不成功のログイン試行に限定する可能性がある。（一般的に言えば、このタイプの防御措置は、以下で説明される理由のために、高度の利用可能性を維持しなければならないシステムでは容認しがたい。）
【００６４】
[0068]しかし、攻撃者がシステムに特定のアカウントを有することではなく、システムに任意のアカウントを有することにさらに関心を抱いている場合には、この限定は、認証システムにおける攻撃を少しも阻まない。攻撃者が、異なるユーザ名／パスワードの組み合わせを簡単に推測し、４回を超えて同一のユーザ名を試すことは決してできない。
【００６５】
[0069]あるいは、攻撃者は、正規ユーザに対してアクセスを拒絶するために、アプリケーションの防御挙動を用いる可能性がある。上記の実施形態を続けると、大量のアカウントに関して不良なパスワードを反復的に推測することによって、攻撃者は、顧客サポートに連絡するまでに、ユーザがアプリケーションにアクセスすることを防止することができる。（ユーザに不便をかけることに加えて、これは、顧客サポートに重い負担をかける可能性がある。
【００６６】
[0070]攻撃の別の形態は、登録情報推測であり、攻撃者が、ユーザに自己登録を可能にするシステムから正規ユーザ名のリストを収集することを可能にする。たとえば、ウェブベースの電子メールサービスを取り上げる。サービスが、自由なトライアルアカウントのために人々がサインアップをすることを可能にする場合には、新規ユーザに登録情報処理の一部として、電子メールアドレスを選ぶことを求める。新規ユーザが別のユーザによって既に取得された電子メールアドレスを選ぶ場合には、システムは、異なるアドレスを選ぶことを新規ユーザに求める。この挙動は、攻撃者にとって有用である。システムが、特定の電子メールアドレスが既に取得されていることを通知する場合には、システムを利用して既に登録された者に属するユーザ名を攻撃者が認識する。大量のアドレスを推測することによって、攻撃者は、正規のアカウント名のリストを構築することができる。次に、攻撃者は、フィッシングまたはパスワード推測などの異なる攻撃の一部としてこのリストを用いる可能性がある。
【００６７】
[0071]ランタイムセキュリティモジュール１１７は、すべてが失敗する爆発的な量の認証要求を見つけることによって、信任状推測に対して防御する。同様に、本発明は、完了していない登録試行または、既存のユーザとの衝突を発生した登録試行の長いシーケンスを見つけることによって、登録情報推測攻撃に対して防御する。これらの爆発的な量の要求は、特に大量の要求が同じＩＰアドレスから来る場合には、攻撃を表す確率が高い。セキュリティモジュール１１６は、ランタイムセキュリティモジュール１１７が、認証関数への呼び出しまたは登録関数への呼び出しが失敗したときをランタイムセキュリティモジュール１１７に通知することを実行可能にするコードを挿入することによって、ランタイムセキュリティモジュール１１７に失敗した認証要求および失敗した登録要求を監視することを可能にする。
【００６８】
[0072]エラーマイニングは、本発明の実施形態を利用して対処される別の脆弱性である。攻撃者が脆弱性を見つけるためにウェブサイトを探るときに、サイトが攻撃者に返すように提供する情報の量は、攻撃の最終的な成功または失敗に対して決定的である。アプリケーションが攻撃者にスタックトレースを示す場合には、アプリケーションは攻撃者のジョブを著しく簡単にする情報を引き渡す。たとえば、スタックトレースが、攻撃者に出来損ないのＳＱＬクエリー文字列、用いられているデータベースのタイプおよびアプリケーションコンテナのバージョンを攻撃者に示す可能性がある。この情報は、攻撃者にとって、これらの構成要素における周知の脆弱性を標的にすることを可能にする。
【００６９】
[0073]アプリケーション設定は、アプリケーションがデフォルトエラーページを指定することによって、攻撃者にエラーメッセージを漏洩することが決してできないことを保証すべきである。標準的なＨＴＴＰエラーコードを扱うことは、有用でユーザにとって使いやすいことであるが、良好な設定は、アプリケーションによって捨てられる可能性がある任意の例外を捕捉する最後の機会のエラーハンドラを定義することになる。
【００７０】
[0074]ランタイムセキュリティモジュール１１７が、最上位のエラーキャッチャとして作用することによって、エラーマイニングに対して防御する。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、最上位のエラーキャッチャとして作用することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）アプリケーションがそれ自体を扱わない任意のエラーは、ランタイムセキュリティモジュール１１７によって扱われる。それによって、アプリケーションコンテナのデフォルトエラーに応答する仕組みが攻撃者に対して機密システム情報を表示することをも防止する。ランタイムセキュリティモジュール１１７は、機密情報を暴露しないエラーページを提供することによって受信する任意のエラーを扱う。このエラーページは、管理者によってカスタマイズされることができる。
【００７１】
[0075]機密データ抽出（Ｓｅｎｓｉｔｉｖｅ  Ｄａｔａ  Ｅｘｔｒａｃｔｉｏｎ）は、本発明の実施形態によって対処される別の問題点である。システム情報漏洩は、出力ストリームまたはロギング関数を介して、システムデータまたはデバッギング情報がプログラムから出るときに生じる。
実施形態：以下のコードは、標準的なエラーストリームに対する例外を印刷する。
【数２３】
2009506439.tif 000025
システム設定に応じて、この情報は、端末ウィンドウに表示されてもよく、ログファイルに書き込まれてもよく、またはリモートユーザに公開されてもよい。一部の場合において、エラーメッセージは、攻撃者に、システムが脆弱な攻撃の種類を正確に伝えることができる。たとえば、データベースエラーメッセージは、アプリケーションがＳＱＬインジェクション攻撃に対して脆弱であることを暴露する可能性がある。他のエラーメッセージは、システムに関するさらに間接的な手がかりをさらに暴露する可能性がある。ユーザにクラスパスを示すことは、オペレーティングシステムのタイプ、システムにインストールされるアプリケーション、管理者がプログラムを設定する配慮の量に関する情報を暗示する可能性がある。
【００７２】
[0076]ランタイムセキュリティモジュール１１７は、アプリケーションが放出する情報を監視することによって、機密データ実行に対して保護する。書き出されている最中のデータにおけるパターンを探ることによって、セキュリティモジュールは、機密データがシステムに残っているときおよび場所を決定する。たとえば、スタックトレースは、独特の外観を有する。
【数２４】
2009506439.tif 000026
この手法は、否定的なパターン集合、すなわちアプリケーションが公開すべきでないデータをを表すパターンの集合を作成することを含むため、「ブラックリスティング」と呼ばれる。
【００７３】
[0077]ランタイムセキュリティモジュール１１７が、アプリケーションに残すこの形態の情報を認識する場合には、情報を書き出することを防止し、もはや機密でないように情報を変更し、または機密データがシステムに残っている管理者を単に変更することによって、応答することができる。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７にすべての出ていくＨＴＴＰレスポンスデータにフィルタをかけることを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００７４】
[0078]考慮すべき別の問題点は、プライバシ侵害である。プライバシ侵害は、以下の場合に生じる。
１．クレジットカード番号、パスワードまたは社会保障番号などのプライベートユーザ情報が、プログラムに入る場合
２．データが、コンソール、ファイルシステムまたはネットワークなどの外部リソースに書き込まれる場合
実施形態：以下のコードは、ログファイルに格納することによってデータベースに追加されるレコードのコンテンツを追跡するように設計されたロギング命令文を含む。格納される値の中でもｇｅｔＰａｓｓｗｏｒｄ（  ）関数は、アカウントに関連するユーザが供給する平文パスワードを返す。
【数２５】
2009506439.tif 000027
上記の実施形態のコードは、平文パスワードをファイルシステムにログとして記録する。多くの開発者はファイルシステムをデータに関する安全な格納位置として信頼するが、特にプライバシが関連する場合には、ファイルシステムは盲目的に信頼されるべきではない。
【００７５】
[0079]個人データは、種々の方法でプログラムに入力することができる。パスワードまたは個人情報の形態でユーザに直接的に入力されてもよい。アプリケーションによって必要とされるまで保持されるデータベースまたは他のデータ格納部からアクセスされてもよい。データは、提携先または他の第三者から間接的に届いてもよい。プライベートとして分類される必要がないデータは、さらなるプライベートの意味合いを搬送することが時々ある。たとえば、学生の識別番号は、個別の学生の個人情報に戻る公に利用可能なマッピングでは一般にないために、プライベートと見なされることがあまりない。しかし、学校が学生の社会保障番号に基づいて識別番号を生成することを決定した場合には、番号はプライベートと見なされる必要があるであろう。
【００７６】
[0080]セキュリティおよびプライバシに関する問題の場合には、一見、互いに競合することが珍しいわけではない。セキュリティの観点から、任意の異常行為が後に識別されることができるように生じる重要な動作を記録することが得策であることがしばしばある。しかし、プライベートデータがこれらの動作に入り込む場合には、これ以外の善意の実行は実際には危険となる可能性がある。
【００７７】
[0081]プライベートデータが種々の理由から安全でなく扱われる可能性があるが、最も一般的なものの１つは、間違った対象に寄せられる信頼である。開発者は、完全に信頼されていない場合にはプログラムが部分的に実行する動作環境を考慮することが多い。このため、プログラマは、ファイルシステム、レジストリまたは他の局所的に制御されたリソースにプライベート情報を格納することに関して２回考えることはない可能性がある。しかし、一定のリソースが任意のユーザに対してアクセス可能ではないという事実は、特に潜在的に有用なプライベートデータに関して、それらにアクセスする個人が完全に信頼されることができることを保証しているわけではない。２００４年には、ＡＯＬは、プライベート顧客情報を入手した邪な被雇用者が約９２００万人のＡＯＬ顧客の電子メールアドレスを、外国のギャンブルウェブサイトを売り込んでいるスパマに販売したときに、損害を被った。
【００７８】
[0082]ＡＯＬによって被られたのと類似の高いプロファイルのエクスプロイトに応じて、プライベートデータの収集および管理は、ますます規則的に行われるようになっている。その位置、行われるビジネスのタイプおよびそれを扱う任意のプライベートデータの性質に応じて、組織は、１つ以上の以下の連邦規則および州規則、すなわちＳａｆｅ  Ｈａｒｂｏｒ  Ｐｒｉｖａｃｙ  Ｆｒａｍｅｗｏｒｋ、グラム・リーチ・ブライリー法（ＧＬＢＡ）、医療保険の携行性と責任に関する法律（ＨＩＰＡＡ）およびＣａｌｉｆｏｒｎｉａ  ＳＢ−  １３８６の範囲の下で理解してもよい。規則の豊富さにもかかわらず、プライバシ侵害は依然として憂慮すべき頻度で生じ続けている。
【００７９】
[0083]機密データ抽出に対する保護と同様に、ランタイムセキュリティモジュール１１７は、アプリケーションが放出する情報を監視し、アプリケーションが公開すべきでないプライベート情報を表すパターンの集合（ブラックリスト）をその情報と比較することによって、プライバシ侵害に対して保護する。たとえば、このセキュリティモジュール１１７は、アプリケーションが社会保障番号を書き出していることを識別するために、パターンｄｄｄ−ｄｄ−ｄｄｄｄを見つけてもよい（文字“ｄ”は、任意の数字を代表する）。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７にすべての出ていくＨＴＴＰレスポンスデータにフィルタをかけることを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００８０】
[0084]クリック詐欺は、本発明の実施形態を利用して対処される別の脆弱性である。インターネットにおける宣伝は、ビッグビジネスである。当然のことながら、広告看板、雑誌のページおよびテレビのチャネルの代わりに、宣伝は、ウェブページ上で行われる。１つの現在の協定の下で、広告主は、広告中のリンクをクリックする人の数に基づいて、ウェブページの所有者に補償する。この協定は、詐欺の可能性をもたらす。ウェブサイト所有者は、広告の収益を増大するために、自身のウェブページにおけるリンクを反復的にクリックする可能性がある。同様に、大損害を起こしたい攻撃者は、クリックを生成するようにプログラムに設定することによって、企業の広告コストをつり上げる可能性がある。これらの実行は、クリック詐欺として周知である。
【００８１】
[0085]ランタイムセキュリティモジュール１１７は、ＵＲＬ要求を追跡することによって、クリック詐欺の検出に役立つ。特定のＵＲＬに関する要求の履歴、それらの要求に関するタイミングおよび他の詳細を調査することによって、セキュリティモジュール１１６は、疑わしい要求の集合を指摘する。たとえば、疑わしい要求の１つの定義は、以下のように定義されてもよい。
・特定のＵＲＬに関する要求の頻度の急激な増大
・少数のＩＰアドレスから来る多数の要求
・ブラウザ文字列などのＨＴＴＰヘッダが同一である場合
セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７にＵＲＬ要求に関連する統計データを収集することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００８２】
[0086]未認証のアクセスは、本発明の実施形態によって対処されることができる別のセキュリティ脆弱性である。アプリケーションによってとられるセキュリティ措置に関係なく、ユーザが認証信任状の制御を失う可能性が常にある。ユーザは、詐欺師の電子メールメッセージに騙され、（この手法は、フィッシングと呼ばれる）、攻撃者によって危うくされたＤＮＳサーバの犠牲となる（ファーミングと呼ばれる）。ユーザ名およびパスワードを記載し、安全でない位置に格納するか、またはキー打ちのすべてをログに記録し、それらを攻撃者に伝送するスパイウェアプログラムを故意にインストールする可能性がある。
【００８３】
[0087]ランタイムセキュリティモジュール１１７は、ユーザの認証信任状が盗まれたことを示す可能性がある異常なアカウントの行為を検出することができる。ランタイムセキュリティモジュール１１７は、異常なアカウントの行為を検出するための３つの手法をとる。
１．ユーザの挙動のモデルを作成して、観察された挙動がモデルから導出される状況を識別する。ランタイムセキュリティモジュール１１７は、各ユーザが行う要求のタイプのモデルを作成し、ユーザが行う要求のタイプがモデルから突然に、かつ著しく逸脱する場合には、セキュリティモジュールが異常なアカウントの行為のフラグを立てる。同様に、ＪａｖａＳｃｒｉｐｔ、ＡｐｐｌｅｔまたはＡｃｔｉｖｅＸ制御を用いることによって、セキュリティモジュールは、アプリケーションのウェブページフィールド（たとえば、ユーザ名およびパスワードフィールド）に打ち込むときのキー打ちの間にユーザが休止する少量の時間を監視する。このキー間のタイミング情報は、ユーザのタイピングのモデルを構築するために用いられることができる。ランタイムセキュリティモジュール１１７は、大きな変化は、真のユーザ以外の人間がタイピングしていることを示す可能性があるため、ユーザがタイプする方法における著しい変化にフラグを立てる。
２．アカウントにわたる行為を追跡し、アカウント間で異常に類似する挙動を見つける。攻撃者が多数のアカウントから認証信任状を取り入れている場合には、アカウントのすべてにわたって同一に振る舞うスクリプトを設定する可能性がある。たとえば、スパム発信者は、スパムを送信するために、ウェブベースの電子メールサービスにおける多数の妥協したアカウントを用いてもよい。セキュリティモジュールは、多数のユーザが同じ電子メールメッセージを送信していることを検出するように設定されることができる。
３．前のアカウント妥協案からの行為を追跡し、それらの妥協案に適合する挙動のフラグを立てる。これは、管理者が妥協されたアカウントアクセスに関連するシステム行為をセキュリティモジュールに識別させるために、必要とされる。
【００８４】
[0088]ランタイムセキュリティモジュール１１７はまた、匿名のアクセスの発行に対処するように設定されてもよい。ＩＰアドレスは、インターネットにおけるパケットを経路指定するために用いられる識別子である。正常な状況下で、ウェブブラウザがウェブサイトからページを検索するために要求を行うときに、ウェブサイトの名前がＩＰアドレスに変換され、次に、要求がそのＩＰアドレスを有するウェブサーバに経路指定される。ウェブサーバは、要求を発したコンピュータのＩＰアドレスにページを返送することによって応答する。このように、ＩＰアドレスは、インターネット上のコンピュータを識別するために機能する。
【００８５】
[0089]一部の状況において、コンピュータユーザは、匿名であることを望む場合がある。例は、以下の通りである。
・反乱分子のグループは、政府には、訪れているウェブサイトの集合について知られることが望ましくないと考える可能性がある。
・犯罪者は、任意の識別情報を明らかにすることなく、脆弱性に関してウェブサイトを探りたいと考える可能性がある。
匿名であるためには、ユーザは、真のＩＰアドレスを公開することなく、自分たちのコンピュータに戻るようにパケットを経路指定する方法を見つけなければならない。この目的を達成するプロトコルは、匿名経路指定プロトコルと呼ばれる。オニオンルーティング（Ｏｎｉｏｎ  Ｒｏｕｔｉｎｇ）は、最も人気のある匿名経路指定プロトコルであり、オニオンルーティングの最も人気のある実行は、“ＴＯＲ”と呼ばれる。さらなる情報に関しては、ｈｔｔｐ：／／ｔｏｒ．ｅｆｆ．ｏｒｇ／を参照のこと。
【００８６】
[0090]ウェブアプリケーションに関する管理者は、匿名のユーザからのトラフィックを扱いたくてもよく、または扱いたくなくてもよい。たとえばＴＯＲなどの一部の匿名経路指定の実施は、正常なＨＴＴＰ要求と匿名のＨＴＴＰ要求との間を区別することを可能にするが、そのことは重要ではない。
【００８７】
[0091]ランタイムセキュリティモジュール１１７は、ＨＴＴＰ要求がＴＯＲに伝わるかどうかに基づいて、アプリケーションにその挙動を変更させることを可能にする。要求がｈｔｔｐ：／／ｔｏｒ．ｎｏｒｅｐｌｙ．ｏｒｇ：９０３０／で発行されたＴＯＲ「出口サーバ」のリストと端を発しているように見えるＩＰアドレスとを比較することによって、これを行う。このように、ランタイムセキュリティモジュール１１７を用いるシステムは、匿名ユーザへのアクセスを拒絶することができ、匿名ユーザが行うことを許容する行為の制限またはセキュリティモジュールが正常な用途と潜在的な攻撃との間を区別するために用いる閾値の変更を行う。たとえば、定期的なユーザは、長さ１０００文字までのパラメータを利用する要求を送信することができてもよいが、匿名ユーザは１００文字のパラメータに制限される。
【００８８】
[0092]ランタイムセキュリティモジュール１１７はまた、公に利用可能な攻撃（Ｐｕｂｌｉｃｌｙ  Ａｖａｉｌａｂｌｅ  Ａｔｔａｃｋ）ツールに対処するように設定されてもよい。あまり巧妙でない攻撃者は、脆弱性に関してウェブアプリケーションを探るために既存のツールを用いる可能性がある。そのようなツールとしては、ＡｃｕｎｅｔｉｘによるＷＶＳ（Ｗｅｂ  Ｖｕｌｎｅｒａｂｉｌｉｔｙ  Ｓｃａｎｎｅｒ）、Ｆｏｒｔｉｆｙ  ＳｏｆｔｗａｒｅによるＲｅｄＴｅａｍ  Ｗｏｒｋｂｅｎｃｈ、ＳＰＩ  ＤｙｎａｍｉｃｓによるＡｐｐＳｃａｎが挙げられる。これらのツールは、クロスサイトスクリプティングまたはバッファオーバーフローなどのウェブアプリケーション脆弱性を見つけることができる。インターフェイスに用いることを容易に提供することによって、これらのツールは、多数のウェブページおよびそれらのページ上のパラメータにわたる脆弱性を見つける反復タスクを自動化する。こういったツールはまた、不正な意図を有するが、ほとんど知識を有さない者が、有効な攻撃を作成することを可能にする。
【００８９】
[0093]ランタイムセキュリティモジュール１１７は、自動化された攻撃ツールのいくつかのタイプに由来する攻撃を検出することができる。これらのツールの一部は、攻撃者が行う前に、脆弱性を見つけるために、アプリケーションテスタによって用いられることを意図している。これらのツールは、トラフィックを観察している誰かが、要求が来る場所を理解することを容易にするために、生成するＨＴＴＰ要求における個別のシグネチャを生成する。他のツールは、さらに難解な手がかりを残す。ＷＶＳは、文字列“ＷＶＳ＿”を含むクロスサイトスクリプティング攻撃を生成する。ＡｐｐＳｃａｎは、１５個の‘ａ’の文字からなるバッファオーバーフロー攻撃を生成する。
【００９０】
[0094]アプリケーションシグネチャまたはアプリケーションに対して行われるＨＴＴＰ要求におけるさらに難解な手がかりを見つけて、それらを遮断または他の方法で無害化することによって、ランタイムセキュリティモジュール１１７は、攻撃者が、公に利用可能な攻撃ツールを用いてアプリケーションにおける脆弱性を見つけることを不可能にする。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７が、公知の攻撃ツールの特性に適合するＨＴＴＰ要求を調査可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００９１】
[0095]既に説明したように、ウェブベースのアプリケーションのセキュリティは、正規ユーザのセッション識別子を学習することができていない攻撃者に左右される。攻撃者が妥当なセッション識別子を推測することができる場合には、ユーザのセッションを簡単に乗っ取ることができる。当然のことながら、良好なセッション識別子は長くて、完全にランダムであるため、推測することは困難である。
【００９２】
[0096]攻撃者は、推測するのではなく、攻撃者が指定する特定のセッション識別子を用いるようにユーザを罠にかける場合がある。攻撃者がセッション識別子を推測した場合と同様の結果となり、ここで、攻撃者は、ユーザのセッションを支配することができる。この攻撃は、「セッション固定化」として公知である。
【００９３】
[0097]ここに、攻撃者が、ユーザに特定のセッション識別子を有するように強制することが可能な１つのシナリオがある。一部のＳｅｒｖｌｅｔコンテナ、特にＴｏｍｃａｔは、２つの方法でセッション識別子を渡すことを可能にする。
１）クッキーとして
２）ＵＲＬパラメータとして
大部分の現在のアプリケーションは、クッキーを用いるだけである。この決定のための良好なセキュリティ動機付けがある。ＵＲＬパラメータとしてセッション識別子を渡すことは、値をログに記録させ、ブラウザの履歴に書き込むか、または他の方法で攻撃者に公開させる可能性がある。Ｔｏｍｃａｔが、クッキーとしてセッション識別子を渡すように設定され、ＵＲＬパラメータとして渡されるセッション識別子を見るようにする場合には、パラメータ値を解釈し、それをクッキーに伝達することになる。
【００９４】
[0098]この伝達の仕組みは、犠牲者にセッション識別子を強制する機会を、攻撃者に与える。セッション識別子のクッキーまたはパラメータは、伝統的に“ｊｓｅｓｓｉｏｎｉｄ”と名づけられる。攻撃者が犠牲者にこのようなリンクｈｔｔｐ：／／ｗｗｗ．ｖｕｌｎｅｒａｂｌｅｓｉｔｅ．ｃｏｍ／ｌｏｇｉｎ．ｊｓｐ？ｊｓｅｓｓｉｏｎｉｄ＝ａｂｃ１２３を含む電子メールメッセージまたは他の通信を送信する場合には、犠牲者がリンクをクリックすると、ｔｏｍｃａｔは、犠牲者のセッション識別子として”ａｂｃｌ２３”を用い始める。攻撃者はここで、犠牲者のセッション識別子を認識する。
【００９５】
[0099]アプリケーションは、ユーザが認証処理に進むときにはいつも、新たなセッション識別子を発行することによって、セッション固定化を防止することができる。このように、攻撃者によって供給される任意のセッション識別子は、廃棄される。残念なことに、すべてのアプリケーションがこれを行うとは限らず、この挙動をアプリケーションに追加することは困難であろう。
ランタイムセキュリティモジュール１１７は、攻撃者がユーザに特定のセッション識別子を強制しようとする状況を決定することができる。セッション識別子は普通、クッキーとして渡される。そのため、セキュリティモジュールがＵＲＬパラメータとして渡されるセッション識別子を見る場合には、セッション固定化攻撃の結果であるとして要求にフラグを立てて、適切に応答することができる。セキュリティモジュール１１６は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール１１７にセッション識別子パラメータに関してすべてのＨＴＴＰ要求を調査することを可能にする。（セキュリティモジュール１１６による修正前後の配備記述子の一例に関する付録Ａ参照。）
【００９６】
[0100]本発明は、攻撃に応答する多数の技法を用いる。管理者は、応答がアプリケーションのタイプおよび攻撃のタイプに適するように、ランタイムセキュリティモジュール１１７を設定する。管理者は、プログラムの現在の脅威に対する管理者の認識に応じて、アプリケーションが増大するか、またはさらに緩和される防御姿勢をとることを可能にするように、モジュールがプログラムを再起動することなく攻撃に応答する方法を変更することができる。
【００９７】
[0101]ランタイムセキュリティモジュール１１７は、以下の方法のうちの１つ以上の方法において攻撃に応答することができる。
・ログ：攻撃が行われたことを示すログファイルエントリを生成する。
・警告：行われた攻撃の短い概要を有する電子メールメッセージを送信するか、行われた攻撃の短い概要を有するページャに接触する。
・処理要求の停止：例外を捨てることによって、またはプログラムに要求を渡さないことによって、ＨＴＴＰ要求の処理を中断する。
・攻撃の無害化：データの危険なピースを除去するか、変更するかまたは無効にする。たとえば、プライバシ侵害は、クレジットカード番号の数字の大部分を文字”Ｘ”で置換することによって無害化される可能性がある。これは、危険な行動方針であり、攻撃者が、データを自分たちに都合よく修正するように保護論理を罠にかけることができる可能性がある。しかし、攻撃者に対してプログラムが不正な意図を検出したことを直ちに認めないことが望ましい場合がある。攻撃を無害化するが、要求を拒絶しないことによって、プログラムは、プログラムの防御能力を曖昧にすることに成功する可能性がある。
・乱数の発行：攻撃のいくつかの形態は、アプリケーションの正常な流れを妨害し、ユーザに乱数を提示することによって打破されることができる。乱数は、人間とコンピュータとの間で差異を見分けようとするだけである。（このタイプの乱数はカップチャ（ｋａｐｔｃｈａ）として公知である。）あるいは、識別情報の一部（たとえば、家の住所または電話番号など）を提供することによって、ユーザに身元照明を求めてもよい。
・アプリケーションの減速：攻撃者に著しい数の反復推測（たとえば、セッションＩＤ推測）を行うことを必要とする攻撃の場合の有効な対抗策は、アプリケーションの応答速度を減速することである。アプリケーションは、攻撃者が正規セッションＩＤを推測しようとしていることを検知する場合、アプリケーションが通常の数分の１の速度で攻撃者の推測に応答する場合には、攻撃が成功するために攻撃者が必要とする時間の長さを増加させることになる。この防御は、必要とされるすべてであってもよく、プログラム管理者が状況を見極めることができるまで、時間稼ぎ戦術として単に機能してもよい。
・アプリケーションの停止：アプリケーションにさらなるユーザ要求に応答することをやめさせる。これは、過激な行為であるが、アプリケーションが攻撃者によって破壊されたのであれば、唯一の安全策である場合がある。
・ユーザ定義：攻撃情報をこの目的のために書かれたプログラム専用のハンドラに引き継ぐ。
【００９８】
[0102]ここで、本発明の種々の実施形態によって対処される問題をグループ化する種々の方法に注意を向ける。本発明は、インジェクション脆弱性に対して保護するために用いられてもよい。インジェクション脆弱性は、攻撃者が不正なデータをアプリケーションに送信する共通の属性を共有する。攻撃者がアプリケーションを許容するように設計されていない行為をとることを許容する場合には、アプリケーションは、不正なデータを機密事項処理動作に送信する。ＳＱＬインジェクション、コマンドインジェクション、リソースインジェクション、ログ偽造およびクロスサイトスクリプティングは、本発明の実施形態によって対処されるインジェクション脆弱性の例である。
【００９９】
[0103]本発明の実施形態はまた、反復的な攻撃に対しても有効である。反復的な攻撃は、異常な動作またはエラーの、増大頻度によって特徴付けられる。セッションＩＤ推測、信任状推測、クリック詐欺およびサイトプロービングは、本発明の実施形態によって対処される反復的な攻撃の例である。
【０１００】
[0104]本発明の実施形態はまた、機密情報に対する攻撃に対して保護する。機密情報に対する攻撃は、攻撃者への未認証の情報のリターンを結果として生じる。エラーマイニング、機密データ抽出およびプライバシ侵害は、本発明の実施形態によって防止される機密情報に対する攻撃の例である。
【０１０１】
[0105]本発明の実施形態はまた、個別のＨＴＴＰ要求の特定の属性を調査することによって、属性攻撃に対して保護する。セッション固定化、匿名のアクセス、公に利用可能な攻撃ツールおよび強制的ブラウズは、本発明の実施形態によって対処される属性攻撃の例である。
【０１０２】
[0106]本発明は、攻撃および不正な使用に対してソフトウェアを保護する。本発明は、第一にプログラムにコードを挿入し、次に、挿入されたコードを用いて、疑わしい挙動のログを記録し、攻撃を迎撃し、防御行為をとるために、実行時にプログラムの挙動を監視することによって、動作する。手段となったプログラムは、中央サーバと通信することができ、プログラムが複数のコンピュータで実行される場合には、中央サーバは、コンピュータに広がる攻撃を検出することができるようになっている。中央サーバはまた、管理者がシステムの性能および挙動を監視することを可能にし、状況がそのように正当化される場合には、管理者がプログラムの防御設定（プログラムが攻撃に応答する方法）を修正することを可能にする。
【０１０３】
[0107]プログラムを修正することによって、本発明は、ホストオペレーティングシステムを介して、またはプログラムとやり取りするネットワークトラフィックを観察することによって、監視するだけのこれまでの手法より高い精度および正確さで、多くの広範囲な範疇の攻撃を検出することができる。したがって、本発明は、実行プログラム以外の利用可能でないコンテキスト情報を利用することによって、アプリケーションファイアウォールおよび侵入防御システムに通例関連する検出漏れおよび誤判定を減少させる。本発明の実施形態は、ウェブベースの攻撃に焦点を置き、２台以上のコンピュータで実行するアプリケーションをサポートする。
【０１０４】
[0108]本発明の実施形態は、種々のコンピュータ実行動作を行うために、その上にコンピュータコードを有するコンピュータ可読媒体を利用したコンピュータ格納製品に関する。媒体およびコンピュータコードは、本発明の目的のために特別に設計および構成されたものであってもよく、コンピュータソフトウェア業界の当業者には周知で利用可能である類のものであってもよい。コンピュータ読み出し可能媒体の例としては、ハードディスク、フロッピーディスクおよび磁気テープなどの磁気媒体、ＣＤ−ＲＯＭおよびホログラフィックデバイスなどの光媒体、フロプティカルディスクなどの光磁気媒体、アプリケーション専用の集積回路（「ＡＳＩＣ」）などのプログラムコードを格納して実行するように特別に設定されたハードウェアデバイス、プログラム可能な論理デバイス（「ＰＬＤ」）およびＲＯＭデバイスおよびＲＡＭデバイスが挙げられるが、これらに限定されるわけではない。コンピュータコードの例としては、コンパイラによって作成されるなどの機械コード、インタプリタを用いてコンピュータによって実行されるより高度なコードを含むファイルなどが挙げられる。たとえば、本発明の実施形態は、Ｊａｖａ、Ｃ＋＋または他のオブジェクト指向型プログラミング言語および開発ツールを用いて実行されてもよい。本発明の別の実施形態は、機械で実現可能なソフトウェア命令の代わりに、または機械で実現可能なソフトウェア命令と組み合わせたハードウェアに組み込まれた回路で実行されてもよい。
【０１０５】
[0109]説明のための前述の記述は、本発明の完全な理解を提供するために特有の用語を用いた。しかし、当業者には、特定の詳細が本発明を実行するために必要とされないことは明白であろう。したがって、本発明の特定の実施形態の前述の記述は、例示および記述のために提供され、包括的ではなく、開示された正確な形態に本発明を限定することを意図しておらず、上記の教示を鑑みて、多くの修正および変形が可能であることは明白である。実施形態は、本発明の原理およびその実際の用途を最適に説明するために選定および記載され、それによって、当業者が、検討された特定の用途に適しているような種々の修正を利用して、本発明および種々の実施形態を最適に利用することをできる。以下の特許請求の範囲およびその等価物が、本発明の範囲を画成することが意図される。
（付録Ａ：配備記述子）
【０１０６】
以下は、アプリケーション防御による修正前のサンプルの配備記述子である。
【数２６】
2009506439.tif 000028
2009506439.tif 000029
2009506439.tif 000030
【０１０７】
以下は、アプリケーション防御による修正後の同じアプリケーション配備記述子である。追加は、ボールド体である。
【数２７】
2009506439.tif 000031
2009506439.tif 000032
2009506439.tif 000033
【図面の簡単な説明】
【０１０８】
【図１】本発明の実施形態によって構成されるコンピュータを示す。
【図２】本発明の実施形態によって用いられてもよいグラフィカルユーザインターフェイスを示す。
【図３】本発明の実施形態によって用いられてもよい別のグラフィカルユーザインターフェイスを示す。
【図４】本発明の実施形態に関連する処理動作を示す。
【図１】
2009506439.tif 000034
【図２】
2009506439.tif 000035
【図３】
2009506439.tif 000036
【図４】
2009506439.tif 000037
【国際調査報告】
2009506439.tif 000038