説明

セキュリティを提供するためのプログラムの解析および補完のための装置および方法

コンピュータ読み出し可能格納媒体は、プログラム命令の自動解析を行うための実行可能命令を有する。自動解析は、インジェクション脆弱性の自動解析、潜在的な反復的な攻撃の自動解析、機密情報の自動解析、特定のHTTP属性の自動解析から選択される、少なくとも2つの解析を含む。保護命令は、プログラム命令に挿入される。保護命令は、プログラム命令の実行中に、攻撃を検出して応答するために利用される。

【発明の詳細な説明】
【優先権の主張】
【0001】
[0001]本出願は、「Apparatus and Method for Analyzing Binary Code and Inserting Binary Code to Provide Security」という名称で2005年8月25日に出願された米国仮特許出願第60/711,972号の利益を主張するものである。尚、この内容は、全体が参照によって本明細書に組み込まれる。
【本発明の簡単な説明】
【0002】
[0002]本発明は一般に、ソフトウェアセキュリティに関する。さらに詳細には、本発明は、セキュリティの欠陥を識別し、保護コードを応答可能に挿入するためのコードの解析に関する。
【発明の背景】
【0003】
[0003]既存のソフトウェアセキュリティシステムに関連する欠点が多くある。特に、既存のソフトウェアセキュリティシステムは通常、ホストオペレーティングシステムを介したイベントの監視またはプログラムとやり取りするネットワークトラフィックの観察に限定される。
【0004】
[0004]この手法は、プログラムの外部の情報に限定される。したがって、従来技術は、プログラム内のコンテキスト情報を利用することができない。その結果、アプリケーションファイアウォールおよび侵入防御システムなどの従来技術の技法は通例、許容可能でない量の検出漏れおよび誤判定を生成する。
【0005】
[0005]既存のソフトウェアセキュリティシステムに関連する検出漏れおよび誤判定の数を減少させることがきわめて望ましいと思われる。さらに、既存のソフトウェアセキュリティシステムを用いて可能であるよりも高い精度および正確さで、多くの広範囲な範疇の攻撃を検出することがきわめて望ましいと思われる。
【発明の概要】
【0006】
[0006]本発明は、プログラム命令の自動解析を行うための実行可能命令を備えたコンピュータ読み出し可能格納媒体を含む。自動解析は、インジェクション脆弱性の自動解析、潜在的な反復的な攻撃の自動解析、機密情報の自動解析、特定のHTTP属性の自動解析から、選択される少なくとも2つの解析を含む。保護命令は、プログラム命令に挿入される。保護命令は、プログラム命令の実行中に、攻撃を検出して応答するために利用される。
【0007】
[0007]本発明は、添付図面に関連して行われる以下の詳細な説明との関連において、さらに十分に理解される。
類似の参照符号は、図面の複数の図を通して対応する部分を指す。
【本発明の詳細な説明】
【0008】
[0012]図1は、本発明の実施形態によって構成されるコンピュータ100を示す。コンピュータ100は、バス104に接続される中央処理装置102を含む。一連の入力/出力デバイス106もまた、バス104に接続される。一連の入力/出力デバイス106は、キーボード、マウス、ディスプレイ、プリンタ、ネットワーク接続などを含んでもよい。メモリ108もまた、バス104に接続される。メモリ108は、ソースコードプログラム110を格納する。たとえば、ソースコードプログラム110は、コンピュータ100上で生成されてもよく、入力/出力デバイス106を介して、コンピュータ100と通信するネットワーク型コンピュータから受信されてもよい。
【0009】
[0013]メモリ108はまた、コンパイラ112を格納し、コンパイラ112は、コンパイルされる(またはバイナリ)プログラム114を作成するためにソースプログラム110をコンパイルする。前述の構成要素は、標準的なものである。本発明は、メモリ108に格納されるセキュリティモジュール116およびランタイムセキュリティモジュール117に関する。セキュリティモジュール116は、ソースプログラム110またはコンパイルされた(バイナリ)プログラム114内のセキュリティ脆弱性を識別する。そのような脆弱性に応じて、セキュリティモジュール116は、コード、たとえばソースコードまたはバイナリコードを挿入する。その後で、実行時にコンパイルされたプログラムに挿入されたコードは、セキュリティイベントを生成する。これらのセキュリティイベントは、セキュリティイベントに応答することができるランタイムセキュリティモジュール117によって解析される。たとえば、疑わしいイベントは、ログに記録されてもよく、攻撃は妨害されてもよく、防御行為がとられてもよい。
【0010】
[0014]グラフィカルユーザインターフェイスモジュール118は、セキュリティモジュール116に関連してもよい。グラフィカルユーザインターフェイスモジュール118は、保護すべきプログラムの選択および種々の保護措置の選択を可能にするユーザインターフェイスを生成するための実行可能なコードを含む。
【0011】
[0015]図2は、保護すべきアプリケーションを選定するために用いられるグラフィカルユーザインターフェイス200を示す。グラフィカルユーザインターフェイスモジュール118は、このインターフェイスを生成するために用いられてもよい。この実施形態において、ユーザは、ボタン202を用いて保護すべきJ2EEアプリケーションを選択する。次に、ファイル名が、ブロック204で指定される。
【0012】
[0016]図3は、本発明の実施形態によって用いられてもよい別のグラフィカルユーザインターフェイス300を示す。グラフィカルユーザインターフェイスモジュール118に関連する実行可能命令は、このインターフェイスを生成するために用いられてもよい。この実施形態において、多種多様なガード(たとえば、SQLインジェクション、情報漏洩など)が、選択されてもよい。さらに、種々のフィルタ(たとえば、ホワイトリストおよびブラックリスト)が、選択されてもよい。ガードおよびフィルタはまた、ユーザの介入なしに、デフォルトで設定されてもよい。
【0013】
[0017]図4は、本発明の実施形態に関連する処理動作を示す。図4の第1の動作は、プログラムを選定すること400である。図2のグラフィカルユーザインターフェイスは、この目的のために用いられてもよい。場合により、保護措置が、選択されてもよい(402)。図3のグラフィカルユーザインターフェイスは、この機能を実行するために用いられてもよい。あるいは、保護措置は、デフォルトで割り当てられてもよい。次に、セキュリティ脆弱性が、プログラム内で識別される(404)。セキュリティモジュール116は、この動作を実行するために用いられてもよい。次に、保護コードが、セキュリティモジュール116を用いてコンパイルされたプログラム408に選択的に挿入される。次に、コンパイルされたプログラムが、実行時モードで動作されてもよい。種々の実施形態において、実行時モードは、セキュリティ挙動をログに記録し、攻撃を迎撃し、防御措置をとる。これらの動作は、ランタイムセキュリティモジュール117によって調整されてもよい。
【0014】
[0018]セキュリティモジュール116は、保護コードを挿入するための任意の数の技法を用いてもよい。保護ソースコードの挿入は、ソースコードを自動的に補足するための任意の数の技法を用いて実行されてもよい。バイナリコードの場合には、バイナリプログラムを復号化して、変更するための多数の利用可能なツールがある。そのような1つのツールが、BCELライブラリ(HTTP://jakarta.apace.org/bcel/)である。BCELは、コンパイルされたJavaコード(すなわち、Javaバイトコード)を解析して操作することのできるプログラムをユーザが構築可能にする。バイトコードを操作するための別のツールは、AspectJ(HTTP://www.eclipse.org/aspecti/)である。AspectJは、プログラマが学びやすいという点で、コードが挿入されるべき位置をユーザが特定可能にするために、BCELライブラリを用いる。これは、位置を指定している人が、バイトコードを理解する必要がなく、それを行うことを可能にする。さらに、AspectJは、ユーザがJavaソースコード命令文に挿入すべきコードを指定することを可能にする。AspectJは、ソースコードを挿入する前に、ソースコードをバイトコードに変換する。これは、修正を書いている人が、コンパイルされたコードに関してではなく、ソースコードに関して考えることを可能にするために有用である。
【0015】
[0019]AspectJのようなツールは、コンパイルされたコードがどのように見えるかについての詳細について考える必要がなく、コンパイルされたコードをプログラマが修正することを可能にするため、例がソースコードの形態で提供される。本発明の実施形態において、プログラム変換が、コンパイルされたコードで行われる場合であっても、ソースコードに関して考え、AspectJのようなツールが低レベルの変換を管理することを可能にすることは効率的である。当然のことながら、プログラム変換はまた、ソースコードの中で行われてもよい。
【0016】
[0020]本発明の一般的な動作について記載してきたが、ここで、本発明の実施形態によって利用されるセキュリティ脆弱性およびそれに応答する保護措置の特定の例に注意を向ける。SQLインジェクションの問題を考える。SQLインジェクションは、データが信頼できないソースからプログラムに入り、データが次にSQLクエリーを動的に行うために用いられる場合に、発生しうる。
【0017】
[0021]以下のJavaコードは、特定の名前に適合する項目を探索するように設計されたSQLクエリーを動的に構成し、実行する。クエリーは、所有者が現在認証されたユーザのユーザ名に等しい場合に表示されるべき項目を制限する。
【数1】

実行されることになっているこのクエリーコードは、以下の通りである。
【数2】

しかし、クエリーが一定のベースクエリー文字列およびユーザ入力文字列を連結することによって、動的に構成されるため、itemNameが単一引用符で囲まれた文字を含まない場合に、クエリーが唯一正確に作用する。ユーザ名wileyを有する攻撃者がitemNameに文字列“name’ OR ‘a’=‘a”を入れる場合には、クエリーは以下の通りになる。
【数3】

OR ‘a’=‘a’条件の追加は、where節を常に真であると評価する原因となるため、クエリーは、さらに簡素なクエリーと論理的に等しくなる。
【数4】

クエリーをこのように簡素化すると、認証されたユーザによって所有されている項目をクエリーが返すだけの要件を攻撃者がバイパスすることを可能にする。クエリーはここで、指定された所有者に関係なく、項目表に格納されるすべてのエントリを返す。
【0018】
[0022]別の例として、上記の例で構成され、実行されるクエリーに渡される異なる不正な値の影響を考える。ユーザ名hackerを有する攻撃者がitemNameに文字列“hacker’);DELETE FROM items;−−”を入れた場合、クエリーは、以下の2つのクエリーとなる。
【数5】

Microsoft(R)SQLサーバ2000を含む多くのデータベースサーバは、セミコロンによって区切られた複数のSQL命令文を一度に実行することを可能にする。この攻撃文字列は、セミコロンによって区切られた命令文のバッチ実行を可能にしないOracleおよび他のデータベースサーバ上でエラーという結果を生じるが、これがサポートされているデータベース上では、このタイプの攻撃は、データベースに対する任意のコマンドの実行を可能にする。
【0019】
[0023]ハイフン(−−)の終わりのペアに注意されたい。これらは、大部分のデータベースサーバには命令文の残りがコメントとして扱われ、実行されないことを示す。この場合には、コメントは、修正されたクエリーから終わりの単一引用符の残りを除去するために用いられる。コメントをこのように用いることが可能でないデータベース上では、一般的な攻撃は、第1の実施形態に類似のトリックを用いて依然として有効とすることが可能である。攻撃者が、以下の3つの妥当な命令文を形成するために、文字列“name’);DELETE FROM items;SELECT * FROM items WHERE ‘a’=‘a”を入れた場合、
【数6】

SQLインジェクション攻撃を防止する1つの伝統的な手法は、それらを入力妥当性検査問題として扱い、SQLクエリーに用いられる前に、潜在的に不正な値を避けることである。この手法は、SQLインジェクション攻撃の防止時にはその手法を無効とする抜け穴で満ちている。攻撃者は、引用されないフィールドを標的としてもよく、一定の回避されるメタ文字の必要性をバイパスする方法を見つけてもよく、インジェクトされるメタ文字を隠すためのストアドプロシージャまたは他の可能性の配列を用いてもよい。SQLクエリーへの入力において文字を回避することは、役立つ可能性があるが、SQLインジェクション攻撃からアプリケーションを安全にすることにはならない。
【0020】
[0024]SQLインジェクション攻撃に対処するために提案される別の共通の解決法は、ストアドプロシージャを用いることである。ストアドプロシージャは、ある種のSQLインジェクション攻撃を防止するのに役立つが、その他多くの攻撃に対して保護することはできない。ストアドプロシージャが通常SQLインジェクション攻撃を防止するのに役立つ方法は、それらのパラメータに渡されることができる命令文のタイプに制約を加えることによる。ストアドプロシージャに依然として渡されることができる制約および多数の関心のある命令文の周囲には、多数の方法がある。再び、ストアドプロシージャが一部のエクスプロイトを防止するのに役立ったとしても、SQLインジェクション攻撃からアプリケーションを安全にすることにはならない。
【0021】
[0025]本発明は、SQLインジェクション攻撃に対する防衛するための種々の技法を利用する。第一に、前述のSQLセキュリティ脆弱性が、セキュリティモジュール116に関連する実行可能命令によって識別される。次に、セキュリティモジュール116は、SQLインジェクション攻撃が起こり得る位置付近のプログラムに保護コードを挿入する。第1の実施形態からJavaソースに関するバイトコードが、以下のソースコードに等しいように修正される。
【数7】

CheckForSQLInjection( )への呼び出しを挿入することによって、SQLクエリーが実行される前に、実行時に、プログラムはここで、ランタイムセキュリティモジュール117に、データベースに送られる前に、クエリー文字列を調べる機会を与える。ランタイムセキュリティモジュール117は、SQLインジェクション攻撃パターンの集合に対するクエリーを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから行われるクエリーの履歴を検討することによって、クエリーが、SQLインジェクション攻撃を含むかどうかを決定する。たとえば、クエリーがコメント(部分文字列“−−”によって表される)、複数の命令文(セミコロン文字“;”によって表される)または重複した述語(“1=1”など)を含む場合に、前のクエリーが、コメント、複数の命令文または重複した述語を含んでいなかったときには、クエリー文字列は、SQLインジェクション攻撃である可能性が高い。一実施形態において、ランタイムセキュリティモジュール117は、SQLインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【0022】
[0026]クエリー文字列がSQLインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール117は管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【0023】
[0027]別のタイプのセキュリティ脆弱性は、コマンドインジェクションである。コマンドインジェクション脆弱性は、2つの形態をとる。
1.攻撃者は、プログラムが実行するコマンドを変更することができる。攻撃者は、コマンドであるものを明示的に制御する。
2.攻撃者は、プログラムが実行する環境を変更することができる。攻撃者は、コマンドが意味しているものを暗示的に制御する。
【0024】
[0028]第1のシナリオに関して、コマンドインジェクション脆弱性は、以下の場合に発生する。
1.データが、信頼できないソースからアプリケーションに入る場合。
2.データが、アプリケーションによって実行されるコマンドを表す文字列として、またはその一部として用いられる場合。
3.コマンドを実行することによって、アプリケーションが、攻撃者がそうでなければ有さない特権または能力を攻撃者に与える場合。
【0025】
[0029]実施形態1:システムユーティリティからの以下のコードは、インストールされるディレクトリを決定して、特定のディレクトリからの関連パスに基づく初期化スクリプトを実行するために、システム特性APPHOMEを用いる。
【数8】

実施形態1のコードは、INITCMDの不正なバージンを含む異なるパスに向けるようにシステム特性APPHOMEを修正することによって、アプリケーションの高い特権を有する任意のコマンドを攻撃者が実行可能にする。プログラムは環境から読み出される値を有効にしないため、攻撃者がシステム特性APPHOMEの値を制御することができる場合には、不正なコードを実行するようにアプリケーションを欺き、システムの制御を行うことができる。
【0026】
[0030]実施形態2:以下のコードは、管理ウェブアプリケーションからのものである。このアプリケーションは、rmanユーティリティの周囲のバッチファイルラッパを用いて、ユーザがOracleデータベースのバックアップを開始し、いくつかの現在生成された一次ファイルを消去するために、cleanup.batスクリプトを実行することができるように設計される。スクリプトrmanDB.batは、行われるべきバックアップのタイプを指定する単一のコマンドラインパラメータを受理する。データベースへのアクセスが制限されるため、アプリケーションは、特権ユーザとしてバックアップを実行する。
【数9】

ここでの問題は、プログラムがユーザから読み出されたbackuptypeパラメータに関する妥当性検査を行わないことである。通常、Runtime.exec( )関数は、複数のコマンドを実行するのではない。プログラムは、この場合には、Runtime.exec( )への1回の読み出しによって、複数のコマンドを実行するために、第一に、最初のcmd.exeシェルを実行する。一旦、シェルが呼び出されると、2つのアンパーサンドによって区切られる複数のコマンドを実行する。攻撃者が“&& del c:\\dbms\\*.*”の形態の文字列を渡すと、アプリケーションは、プログラムによって指定されたコマンドと共に、このコマンドを実行する。アプリケーションの性質のために、アプリケーションは、データベースと対話するために必要な特権を利用して実行する。攻撃者がインジェクトするいずれのコマンドもまたそのような特権を利用して動作することを意味する。
【0027】
[0031]一旦、コマンドインジェクション脆弱性がセキュリティモジュール116によって識別されると、セキュリティモジュール116は、コマンドインジェクション攻撃が起こり得る位置付近に保護コードを挿入する。実施形態1に基づくJavaソース用のバイトコードは、以下のソースコードと等価であるように修正される。
【数10】

コマンドが実行される前に、CheckForCmdInjection( )への呼び出しを挿入することによって、プログラムはここで、実行時に、ランタイムセキュリティモジュール117に、呼び出される前にコマンドを調べる機会を与える。ランタイムセキュリティモジュール117は、攻撃パターンの集合に対するクエリーを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから発行されたコマンドの履歴を検討することによって、コマンドが、不正であるかどうかを決定する。たとえば、コマンドが、親ディレクトリへの参照(部分文字列“..”によって表される)または複数のサブコマンド(セミコロン文字”;”または”&&”によって表される)を含む場合に、前のクエリーが、親ディレクトリへの参照または複数のサブコマンドを含んでいなかったときには、文字列は、コマンドインジェクション攻撃を含む可能性が高い。アプリケーション防御は、コマンドインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【0028】
[0032]コマンド文字列が、コマンドインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール117は管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【0029】
[0033]本発明の実施形態によって処理される別のセキュリティ脆弱性は、リソースインジェクションである。リソースインジェクション発行は、以下の2つの状態が満たされた場合に生じる。
1.攻撃者は、システムリソースにアクセスするために用いられる識別子を指定することを許容される。たとえば、攻撃者は、開かれるファイルの名前または用いられるポート番号の一部を指定することができる可能性がある。
2.リソースを指定することによって、攻撃者は、そうでなければ有さない能力を獲得する。たとえば、プログラムは、攻撃者に、指定されたフィルを上書きする能力または攻撃者によって制御される構成を利用して実行する能力を攻撃者に与える可能性がある。
実施形態1:以下のコードは、ファイル名を形成するためのHTTP要求からの入力を用いる。作成者は、アプリケーションにそれ自体の設定ファイルの1つを消去させる“../../tomcat/conf/server.xml”のようなファイル名を攻撃者に提供する可能性がある可能性を考慮していない。
【数11】

実施形態2:以下のコードは、どのファイルを開いて、ユーザにエコーバックするかを決定するために、構成ファイルからの入力を用いる。プログラムが特権を利用して実行され、不正なユーザが設定ファイルを変更することができる場合には、プログラムを用いて、拡張子“.txt”で終わるシステム上の任意のファイルを読み出すことができる。
【数12】

データが影響を与えるリソースの種類は、危険と考えられるコンテンツの種類を示す。たとえば、ファイルシステムにピリオド、スラッシュおよびバックスラッシュなどを含むことを許容される入力は、ファイルシステムと対話する方法に達することができるときに、注意に値する。同様に、URLおよびURIを保持する可能性があるデータは、遠隔接続を生成するために用いられる関数に関してリスクがある。攻撃者がウェブサーバにおけるファイルシステムリソースを制御することができる場合には、Path操作として公知のリソースインジェクションの1つの特殊な場合が生じる。
【0030】
[0034]SQLインジェクションおよびコマンドインジェクションに対する防御と同様に、セキュリティモジュール116は、リソースインジェクション攻撃が起こり得る位置付近にコードを挿入する。実施形態1からJavaソースに関するバイトコードが、以下のソースコードに等しいように修正される。
【数13】

リソースアクセスが生じる前に、CheckForRsrcInjection( )への呼び出しを挿入することによって、実行時に、プログラムはここで、リソース名が用いられる前に、ランタイムセキュリティモジュール117にリソース名を調べる機会を与える。ランタイムセキュリティモジュール117は、攻撃パターンの集合に対するリソース名を比較し、履歴情報が利用可能である場合には、この呼び出しサイトからアクセスされたリソースの履歴を検討することによって、リソース名が、不正であるかどうかを決定する。たとえば、リソース名が、親ディレクトリへの参照(部分文字列”..”によって表される)を含む場合に、前のクエリーが、親ディレクトリへの参照を含んでいなかったときには、文字列は、コマンドインジェクション攻撃である可能性がある。ランタイムセキュリティモジュール117は、コマンドインジェクション攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【0031】
[0035]リソース文字列がインジェクション攻撃を含む場合には、ランタイムセキュリティモジュール117は、管理者によって指定される防御措置を呼び出す。防御措置が、以下に説明される。
【0032】
[0036]本発明によって処理される別のセキュリティ脆弱性は、ログ偽造である。ログ偽造の脆弱性は、以下の場合に生じる。
1.データが信頼できないソースからアプリケーションに入る場合
2.データがアプリケーションまたはシステムログファイルに書き込まれる場合
アプリケーションは、通常、イベントの履歴、または後の精査、統計データの収集またはデバッギングのためのトランザクションを格納するために、ログファイルを用いる。アプリケーションの性質に応じて、ログファイルを精査するタスクは、必要に応じて手動で行われるか、または重要な情報または傾向情報のためにログを自動的に選抜するツールを利用して自動化されてもよい。
【0033】
[0037]攻撃者が、続いて逐語的にログに記録されるアプリケーションにデータを供給することができる場合には、ログファイルの調査は、妨害されるか、または誤った方向に誘導される可能性がある。最も害のない場合において、攻撃者は、提供されるデータに適当な文字を含めることによって、ログファイルに偽造エントリを挿入することができる可能性がある。ログファイルが自動的な方式で処理される場合には、攻撃者は、ファイルのフォーマットを破損することによって、または予期しない文字をインジェクトすることによって、ファイルを使用不能にすることができるようにする可能性がある。さらに巧妙な攻撃は、ログファイルの統計データを歪曲することを伴う場合がある。偽造されたログファイルまたは他の方法で破損されたログファイルは、攻撃者の痕跡を隠すため、または不正な行為の犯行において別の当事者を巻き込むためにも用いられる可能性がある。最悪の場合には、攻撃者は、ログファイルにコードまたは他のコマンドをインジェクトし、ログ処理ユーティリティにおける脆弱性を利用する可能性がある。
実施形態:ウェブアプリケーションからの以下のコードは、要求オブジェクトから整数値を読み出そうとしている。値が整数として解析できない場合には、入力が、起こったことを示すエラーメッセージと共に、ログに記録される。
【数14】

ユーザがvalに文字列“twenty−one”をサブミットする場合には、以下のエントリがログに記録される。
【数15】

しかし、攻撃者が“twenty−one%0a%0aINFO:+User+logged+out%3dbadguy”をサブミットする場合には、以下のエントリがログに記録される。
【数16】

はっきり言えば、攻撃者は、この同一の機構を用いて、任意のログエントリを挿入することができる。
【0034】
[0038]本発明の実施形態によれば、セキュリティモジュール116は、ログ偽造攻撃が起こり得る位置付近にコードを挿入する。上記の実施形態に基づくJavaソース用のバイトコードは、以下のソースコードと等価であるように修正される。
【数17】

ログファイルエントリが書き込まれる前に、CheckForLogForging( )への呼び出しを挿入することによって、実行時に、プログラムはここで、ログに書き込まれる前に、ランタイムセキュリティモジュール117にデータを調べる機会を与える。ランタイムセキュリティモジュール117は、攻撃パターンの集合に対するデータを比較し、履歴情報が利用可能である場合には、この呼び出しサイトから書き込まれたログエントリの履歴を検討することによって、データが不正であるかどうかを決定する。たとえば、データがキャリッジリターンまたは改行(新しいログファイルエントリの開始を示すために通常用いられる文字)を含むのであれば、前のクエリーが、これらの文字を含んでいなかった場合には、文字列は、ログ偽造に対する試みである可能性がある。ランタイムセキュリティモジュール117は、ログ偽造攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【0035】
[0039]データがログ偽造攻撃を含む場合には、ランタイムセキュリティモジュール117は、管理者によって指定される防御措置を呼び出す。防御措置が、以下に説明される。
【0036】
[0040]本発明の実施形態は、バッファオーバーフローに対して保護する。攻撃者が、標的にしたプログラムを、割り当てられたメモリのブロックの境界の外側に書き込ませることができる場合には、プログラムは、それ自体のデータを破損するか、強制終了するかまたは攻撃者のために不正なコードを実行する可能性がある。JavaおよびC#のような言語は、バッファオーバーフローを防止する配列境界検査および強い型検査のような中に組み込まれた特徴を有するが、これらの保護手段は、脆弱なバックエンドソフトケアに対するバッファオーバーフロー攻撃を供給するために、攻撃者がこれらのプログラムを用いるのを防止するわけではない。
【0037】
[0041]JavaおよびC#のような言語は、CまたはCobolのようなより古い言語に書き込まれたより古いシステム用のフロントエンドインターフェイスに書き込むために用いられることが多い。たとえば、仲買エンティティは、ユーザが株式取引を行うことを可能にするウェブサイトを有する確率が高い。ウェブページを生成するソフトウェアは、Javaに書き込まれる可能性があるのに対し、取引ソフトウェアはCで書かれている。このシナリオでは、Javaフロントエンドは、バックエンドシステムと取引情報を通信する責任がある。バックエンド取引システムがバッファオーバーフロー脆弱性を含む場合には、攻撃データをJavaフロントエンドに供給し、Javaコードに脆弱なバックエンドシステムに対して攻撃させることによって、攻撃者が脆弱性を悪用することが可能である場合がある。
【0038】
[0042]方法#1:入力長さの制限
バッファオーバーフロー攻撃は、攻撃者が異常に大量のデータを提供するよう要求することが多い。ランタイムセキュリティモジュール117は、プログラムによって受信されるときに、各HTTP要求を調べ、要求のコンテンツが過度に大きくならないことを確認するために検査する。要求データは、URL、クエリー文字列、HTTPヘッダ名(クッキーを含む)、パラメータ名および値、マルチパートフォームデータを含む。
管理者が、要求の各部分に関するサイズ限界を設定することができ、要求されるURL、HTTPヘッダまたはパラメータの名前またはこれらの因子の組み合わせに応じて、異なるサイズ限界を指定することができる。
【0039】
[0043]セキュリティモジュール116は、ランタイムセキュリティモジュール117に、要求がアプリケーションに対して見える前に、要求を調査することを可能にする。セキュリティモジュール116は、プログラム設定を修正することによって、これを行う。J2EEアプリケーションの場合には、これは、アプリケーション配備記述子を修正することによって達成される(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0040】
[0044]ランタイムセキュリティモジュール117は、要求が指定された長さ限界を超えるデータを含むと決定する場合には、管理者によって与えられた防御措置を呼び出す。防御措置は、以下で説明される。
【0041】
[0045]方法#2:バッファオーバーフロースレッドの検出
不正なコードを実行するためにバッファオーバーフローを利用するためには、攻撃者は、標的プログラムに送信する入力を注意深く構成しなければならない。バッファオーバーフローが、攻撃者にスタックへのデータの書き込みを可能にする場合には、攻撃者は、関数リターンポインタに関する新たな値を指定することができる。(関数リターンポインタは、現在の関数が終わるときに、プログラムが飛び越して、実行命令を開始するメモリアドレスを指定する。)攻撃者が、不正なコードを含む入力バッファが書き込まれたスタックにアドレスを指定する場合には、プログラムは、不正なコードの実行に進むことになる。
【0042】
[0046]攻撃者にとって、この攻撃を実行する最も難しい部分は、関数リターンポインタに関して指定すべきメモリアドレスを知ることである。攻撃が始められる前に、スタックの正確な状態を知ることはできないため、不正なコードがメモリに書き込まれる場所を100%の精度で知ることはできない。攻撃者が指定するアドレスが完全に正確でない場合には、不正なコードの一部またはすべてが飛ばされることになる。これは、攻撃者の側から見れば望ましくない。コンピュータが不正なコードの途中で実行を開始する場合には、攻撃が意図された影響を及ぼす確率は低い。
【0043】
[0047]バッファオーバーフロースレッド(「スライド」と呼ばれることもある)の目的は、成功するバッファオーバーフロー攻撃に必要な精度を低下させることである。スレッドは、コンピュータが任意の点で開始を実行することができる簡単な命令の長くて反復的なシーケンスである。不正なコードの開始にスレッドを添付することによって、攻撃者はここで、容易な目的を有する。攻撃者がスレッドにおける任意のメモリアドレスを指す関数リターンポインタを指定する場合には、コンピュータは、遭遇するスレッドのいずれかの部分を実行し、次に不正なコードのすべてを実行する。スレッドが長ければ長いほど、結果として生じる攻撃はさらに強くなる。最も簡素で可能なスレッドは、無演算命令(no−op)のシーケンスである。より複雑なスレッドはまた、飛び越し命令または他の簡単な動作を含んでもよい。
【0044】
[0048]ランタイムセキュリティモジュール117が、バッファオーバーフロースレッドを検出することによって、バッファオーバーフロー攻撃を検出することができる。外部プログラムまたはネイティブコードで実行される関数への呼び出しなど、アプリケーションが脆弱である位置を監視することによって、ランタイムセキュリティモジュール117は、無演算命令または他の共通スレッドコンテンツの長いシーケンスを探すことができる。たとえば、以下の呼び出しを含むプログラムである。
【数18】

これは、さらなる調査を含むように以下のように変換される。
【数19】

ランタイムセキュリティモジュール117は、潜在的に脆弱な呼び出しが、バッファオーバーフロースレッドを含む入力を受信しようとしていると決定する場合には、管理者によって指定された防御措置を呼び出す。防御措置は、以下で説明される。
【0045】
[0049]本発明の実施形態はまた、クロスサイトスクリプティングおよびHTTPレスポンス分割にも対処する。クロスサイトスクリプティング(XSS)脆弱性は、以下の場合に生じる。
1.データが、信頼できないソースを介してウェブアプリケーション、最も頻繁なウェブ要求に入る場合
2.データが、不正なコードを正当化することなく、ウェブユーザに送信される動的コンテンツに含まれる場合
ウェブブラウザに送信される不正なコンテンツは、JavaScriptのセグメントの形態をとることが多いが、HTML、HTTP、Flashまたはブラウザによって実行されることが可能な任意の他のタイプのコードを含んでもよい。
HTTPレスポンス分割は、HTTPヘッダでウェブユーザに送信される不当なコンテンツが、攻撃者によって巧妙に作られたHTTPレスポンスに続く回避されないキャリッジリターン(またはキャリッジリターン/改行の組み合わせ)を含む場合に行われるクロスサイトスクリプティングの特殊なクラスに関する名前である。キャリッジリターンは、ユーザのブラウザに新たなHTTPレスポンスとして続くデータを解釈させる。この挙動は、ブラウザに表示された情報の完全な制御を攻撃者に与える。
実施形態1:以下のJSPコードセグメントは、HttpServletRequestから被雇用者のID番号を読み出して、ユーザにそれを出力する。
【数20】

実施形態1のコードは、eidが標準的な英数字のテキストのみを含む場合には、正確に振る舞う。しかし、eidがメタ文字またはソースコードを含む場合には、攻撃者は、その値を含むコンテンツを見ている任意のユーザのウェブブラウザで不正なコマンドを実行することができる。一見したところ、「要求を行ったユーザもまた、結果として生じるデータを見ている。何故彼らは、自分自身を攻撃しようとするのか?」と尋ねたくなる。このため、このコードを無害だと分類する誘惑を回避せよ。よく用いられる攻撃は、犠牲者に電子メールまたは他の手段を介して不正なURLを訪問することを説得し、犠牲者に脆弱なウェブアプリケーションから不正なコンテンツを無意識に反映させて、しばしばJavaScriptのセグメントの形で局所的に実行させる。脆弱なウェブアプリケーションを不当に利用するこの仕組みは、反射型クロスサイトスクリプティング(Relfected Cross−Site Scripting)として周知である。
実施形態2:以下のJSPコードセグメントは、所与の被雇用者のIDを有する被雇用者に関するデータベースを照会し、IDに対応する名前を印刷する。
【数21】

実施形態1の場合のように、実施形態2のコードは、nameの値が十分に型にはまっている場合には、正確に振る舞うが、nameの値が型にはまっていないイベントにおけるエクスプロイトを防止するものは何もない。実施形態1とは対照的に、アプリケーションがそのコンテンツを管理するnameの値がデータベースから読み出されないため、コードを危険と見なす確率はさらに低いと考えられる。ここでの脆弱性は、データベースから読み出されるデータの結果ではなく、むしろデータベースに格納されるデータの元のソースによって生じる結果にある。ユーザに端を発するnameの値がデータに供給される場合には、データベースは、危険なデータのための経路として機能するに過ぎない。データベースに格納されたすべてのデータに関して適切な入力妥当性検査がなく、攻撃者は、ユーザのウェブブラウザで不正なコマンドを実行することができる可能性がある。格納型クロスサイトスクリプティング(Stored Cross−Site Scripting)として公知であるエクスプロイトのこの種類は、データによって生じた間接的技法は識別することをさらに困難にし、攻撃がマルチユーザに影響を及ぼす見込みを増大することから、特に狡猾である。
【0046】
[0050]クロスサイトスクリプティング脆弱性は、ユーザに表示される動的コンテンツにおいて不当なデータを含むことによって生じる。危険なデータをユーザに向ける3つの一般的なベクトルがある。
1.実施形態1の場合と同様に、データは、信頼できないソースから直接的に、最も頻繁にはウェブ要求から読み出され、動的コンテンツに含まれる。
2.実施形態2の場合と同様に、アプリケーションは、データベースまたは他の信頼できるデータ格納に危険なデータを格納する。危険なデータは続いて、アプリケーションの中に読み返され、動的コンテンツに含まれる。
3.現在のアプリケーション以外のソースが、データベースまたは他の信頼できるデータ格納部に危険なデータを格納し、この場合も危険なデータは続いて、信頼できるデータとしてアプリケーションの中に読み返され、動的コンテンツに含まれる。
反射型XSSエクスプロイトは、攻撃者がユーザに脆弱なウェブアプリケーションに危険なコンテンツを供給させ、危険なコンテンツがユーザに戻すように反映され、ウェブブラウザによって実行されるときに生じる。不正なコンテンツを供給する最も一般的な仕組みは、公に投稿されるか、ユーザに直接的に電子メールが送られるURLにおけるパラメータとして、不正なコンテンツを含むことである。このような態様で構成されるURLは、攻撃者が脆弱なサイトを指すURLを訪問することを犠牲者に説得する多くのフィッシングスキームの心臓部である。サイトがユーザに攻撃者コンテンツを反映する場合には、ユーザのマシンから攻撃者にクッキーなどの個人情報を伝送するか、または他の非道な行為を行うことに進む。
【0047】
[0051]格納型XSSエクスプロイトは、攻撃者が、後で読み出され、ユーザによって見られる動的コンテンツに含まれる危険なコンテンツをデータベースまたは他のデータ格納部に潜り込ませる場合に生じる。攻撃者の観点からみれば、不正なコンテンツをインジェクトすることが最も望ましい場所は、多くのユーザまたは関心のあるユーザのいずれかに表示される領域にある。関心のあるユーザは、アプリケーションにおいて高い特権を有するか、または攻撃者にとって価値のある機密データと対話する可能性がある。これらのユーザの1人が不正なコンテンツを実行する場合には、攻撃者は、ユーザのために特権化された動作を行うか、またはユーザに属する機密データに近づくことができる可能性がある。
【0048】
[0052]セキュリティモジュール116は、クロスサイトスクリプティングペイロードがHTTPレスポンス(本体またはヘッダのいずれか)に書き込まれる可能性がある位置付近にコードを挿入する。実施形態1からJavaソースに関するバイトコードが、以下のJSPソースコードに等しいように修正される。
【数22】

CheckForXss( )への呼び出しを挿入することによって、文字列が出力ストリームに書き込まれる前に、実行時に、プログラムはここで、ランタイムセキュリティモジュール117に、ユーザに送り返される前に、データを調べる機会を与える。データがユーザに送り返される前に、最後の可能な点で仲裁に入ることによって、ランタイムセキュリティモジュール117は、クロスサイトスクリプティングが反射型または格納型のいずれの系統であるかに関係なく、クロスサイトスクリプティングを検出することができる。ランタイムセキュリティモジュール117はまた、データがHTTP要求またはデータベースまたは別のデータ格納部から読み出されるときに、クロスサイトスクリプティング攻撃パターンに関して調べることもできる。
【0049】
[0053]ランタイムセキュリティモジュール117は、攻撃パターンの集合に対して比較し、履歴情報が利用可能である場合には、問題の呼び出しサイトから書き出されるデータの履歴を検討することによって、データのピースがクロスサイトスクリプティング攻撃を含むかどうかを決定する。たとえば、データがスクリプトタグ((部分文字列“<script>”によって表される)を含むのであれば、前のクエリーが、スクリプトタグを含んでいなかった場合には、文字列は、クロスサイトスクリプティング攻撃である可能性がある。ランタイムセキュリティモジュール117は、クロスサイトスクリプティング攻撃パターンの標準的な集合を含み、管理者は、標準的な集合へのさらなるパターンの追加および標準的な集合からのパターンの変更またはパターンの除去を自在に行う。
【0050】
[0054]文字列がクロスサイトスクリプティング攻撃を含む場合には、ランタイムセキュリティモジュール117は、管理者によって指定される防御措置を呼び出す。防御措置は、以下で説明される。
【0051】
[0055]サイト改変は、本発明の実施形態によって対処される別の問題である。攻撃者がサーバに基づくアプリケーションに関してプログラムファイルを破損または変更する方法を見つけ出す場合には、アプリケーションの正規ユーザが誤った方向に導かれたり、不便を感じたり、または搾取されたりする可能性がある。攻撃者が、ウェブページのコンテンツの変更、新たな未認証のウェブページの追加またはアプリケーション自体の論理の変更を行う可能性がある。攻撃者は、アプリケーションを変更するための多くの可能な手段を有する。攻撃者は、アプリケーション自体に脆弱性を利用することができる可能性があり、基礎を成すアプリケーションサーバ、オペレーティングシステムまたはネットワークにおける弱点を利用する可能性がある。攻撃者がまた、システム管理者に変更させる賄賂を贈ったり、不正をさせたりまたは罠にかけたりすることができる可能性もある。
【0052】
[0056]不正な意図で行われる変更に加えて、プログラムファイルが開発者または善意であるが、組織の変更制御プロセスに関して知識不足である管理者によって更新される可能性がある。善意であるが、間違った方向への改変は、不正な改変と全く同程度の損傷である可能性がある。
【0053】
[0057]プログラムの制御からサイト改変が生じることができるきわめて多くの手法があるため、本発明は、サイト改変を防止しようという試みはしていない。代わりに、サイト改変が生じた場合を検出することに焦点を置き、プログラムが防御行為をとることができるようにする。
【0054】
[0058]ランタイムセキュリティモジュール117は、以下の方法でサイト改変を検出する。セキュリティモジュール116がプログラムにコードを挿入した後であるが、プログラムが実行される前に、セキュリティモジュール116は、名前、サイズ、アプリケーションを備える各ファイルの安全ハッシュを列挙するマニフェストを作成する。(安全ハッシュは、MD5またはSHAのようなアルゴリズムを用いて計算される。)次に、プログラムが実行されるときには、ランタイムセキュリティモジュール117は、コンピュータに存在するアプリケーションファイルに対して、マニフェストのコンテンツを定期的に調べる。ファイルの追加、消去または修正が行われる場合には、ランタイムセキュリティモジュール117は、サイト改変攻撃が行われた可能性があることを認識する。
【0055】
[0059]サイトプロービングは、本発明の実施形態によって対処される別の問題である。攻撃者がプログラムに対する成功する標的となる攻撃を始めることができる前に、その潜在的な弱点に関して学ぶために、プログラムを探索する必要がある。この探索は普通、標準的なユーザが行わない方法でプログラムを探ることを伴う。たとえば、攻撃者は、アプリケーションのユーザが見えるウェブページから参照されないURLに関する要求を行うことによって、期限切れのウェブページ、バックアップファイルおよび管理ウェブページに関して探る可能性がある。攻撃者はまた、脆弱性を発見する目的で、URLパラメータ、HTTPヘッダおよびPOSTパラメータを変更する可能性もある。
【0056】
[0060]本発明は、2つの方法でサイトプロービングに対して保護することができる。
1.ユーザが生成するHTTPエラーを監視することによって、ランタイムセキュリティモジュール117は、ユーザが異常な数のエラーを生成するときを決定する。たとえば、HTTP404エラーは、アプリケーションに存在しないページをユーザが要求したことを示す。大部分のユーザは、エラーを全く生成しないか、またはきわめて少数のエラーを生成するかのいずれかである。攻撃者が、エラーの長いシーケンスを生成する。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、エラーを生成したユーザに関する情報にアクセスすることを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
2.アプリケーションが生成するHTTPレスポンスを修正することによって、セキュリティモジュールは、不正な意図を暴露する方法で、攻撃者を誘惑してアプリケーションを探らせることができる。たとえば、セキュリティモジュールは、HTTPレスポンスにクッキーを追加することができる。クッキーは、アプリケーションに対して意味を持たず、アプリケーションの規則的なユーザは、クッキーに気付かず、その値を変更するための機会(または動機)を有することもない。他方、攻撃者は、クッキーを変更することが自分たちに好都合である可能性があると考えている可能性がある。セキュリティモジュールが変更されたクッキー値をみると、アプリケーションが探られており、防御行為をとることができることを認識する。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、HTTPレスポンスを修正することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0057】
[0061]セキュリティ脆弱性を推測するセッションIDもまた、本発明の実施形態によって識別される。多くのウェブベースのアプリケーションは、ユーザがユーザ名およびパスワード(または他の認証信任状)を提供するログインページを有する。ユーザがアプリケーションを用いた認証に成功した後、再び認証することなく一定の期間、ユーザがアプリケーションを用いることが許容される。アプリケーションは、ユーザとセッション識別子を関連付けることによって、これを達成する。セッション識別子は通常、ユーザのブラウザにクッキーとして格納される。認証後、ユーザがアプリケーションに対して要求するたびに、セッション識別子を含んでいるクッキーがアプリケーションに送信され、アプリケーションは、セッション識別子が正確に認証されたユーザに対応しているかを確認する。
【0058】
[0062]攻撃者が認証されたユーザに関するセッション識別子を推測することができる場合には、攻撃者は、そのセッション識別子を用いて要求し始めることができる。セッション識別子を推測することによって、攻撃者は、ユーザのセッションを本質的に乗っ取ることができる。アプリケーションは、セッション識別子が認証されたユーザに対応していることが分かり、攻撃者に、真のユーザがアクセスするいずれへのアクセスも喜んで許可する。このため、セッション識別子に関して、推測することが困難であるようにすることが重要である。一般的な攻撃において、攻撃者は、妥当なセッション識別子を見つける前に、多数の推測を行わなければならない。
【0059】
[0063]ランタイムセキュリティモジュール117が、すべてが不当なセッション識別子を用いる爆発的な量の要求を見つけることによって、セッション識別子推測に対して防御する。この爆発的な量の要求は、特に大量の要求が同じIPアドレスから来る場合には、攻撃を表す確率が高い。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、すべてのHTTP要求(妥当なセッション識別子を有する要求および不当なセッション識別子を有する要求の両方)を監視することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0060】
[0064]強制的ブラウズは、本発明の実施形態によって識別される別のセキュリティ脆弱性である。ウェブベースのアプリケーションとの多くの対話は、一連のウェブページ上で行う。たとえば、ユーザが、1つのページでショッピングカートに品目を追加し、次のページでその名前および住所を記入し、最後のページでクレジットカード番号を指定することによってチェックアウトを完了する可能性がある。強制的ブラウズは、攻撃者がアプリケーションの正常な流れを覆す場合に、攻撃を指すために用いられるような用語である。たとえば、アプリケーションが住所のページが満たされた後で、その注文で支払われるべき税金を計算する場合に、攻撃者は、名前および住所のページをバイパスすることによって免税の行われた注文をサブミットすることができる可能性がある。よく書かれたアプリショーンは、たとえあるとしても、きわめて少数のこのタグの脆弱性を含むため、攻撃者は、脆弱性を識別するために、ページのさまざまな組み合わせおよびシーケンスを試す必要がある確率が高い。
【0061】
[0065]ランタイムセキュリティモジュール117は、3つの方法で強制的ブラウズ攻撃に対して保護することができる。3つの方法のそれぞれにおいて、セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、すべてのHTTP要求のヘッダおよび他の部分を監視することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
1.HTTP要求における“referrer”ヘッダは、ユーザを現在の要求に導いたページの名前を与える。アプリケーションの正常な流れにおいて、このヘッダは、アプリケーションの流れで、先行するページを訂正するために常に設定されるべきである。ランタイムセキュリティモジュール117が、要求中の現在のページに基づき、不正確であるリファラヘッダを探索する。攻撃者によって、リファラヘッダを偽造することは可能であることを留意されたい。あまり巧みでない攻撃者は、これを行うことはなく、この保護が、より抜け目のない攻撃者に対して成功を収めることもない。
2.あまり巧みでない攻撃者によって通常適用される別の技術は、アプリケーションが正常に用いられる方法とは異なるHTTP方法を用いて、強制的ブラウズ要求を行うことである。大部分の状況では、ユーザは、ウェブページで雛型を記入してサブミットするときに、要求がHTTP POST要求を用いてサーバに送信される。攻撃者がブラウザウィンドウにおいてURLを変更することによって、アプリケーションの特定の部分に直接的に飛ぼうとする場合には、情報は、HTTP GET要求としてサーバに送信されることになる。ランタイムセキュリティモジュール117は、どの方法がページにアクセスするために正常に用いられるかを追跡することができ、強制的ブラウズにおける試みとして、このパターンから矛盾を記録する。
3.強制的ブラウズは、プログラムがユーザの注文以外の要求を満たそうとするときに、異常な数のアプリケーションエラーを生じる確率が高い。攻撃者は、脆弱性を見つける前に、要求の多数のシーケンスを試す確率が高いため、アプリケーションは、多数のエラーに遭遇することになる。ユーザが生成するエラーの数を追跡することによって、ランタイムセキュリティモジュール117は、強制的ブラウズにおける潜在的な試みを検出する。
【0062】
[0066]本発明の実施形態はまた、信任状推測(Credential Guessing)および登録情報推測(Registration Guessing)に対処する。ネットワークに基づくアプリケーションは通常、機密情報を見たり修正したりすることを許容される前に、ユーザのそれらを認証させることを必要とする。今日用いられている認証の最も一般的な形態は、ユーザ名/パスワードの組み合わせである。攻撃者が正規ユーザに関してユーザ名およびパスワードの両方を推測することができる場合には、攻撃者は、ユーザのふりをすることができる。
【0063】
[0067]攻撃者が、無制限の数のユーザ名/パスワードの推測を行うことが許容される場合には、攻撃者は最終的にはシステムにアクセスすることになる。一部のアプリケーションは、1つのユーザ名に関して行うことができる連続的な認証の試みの数を限定する。たとえば、アプリケーションは、ユーザが顧客サポートに連絡しなければならなくなる前に、ユーザに5回の連続的な不成功のログイン試行に限定する可能性がある。(一般的に言えば、このタイプの防御措置は、以下で説明される理由のために、高度の利用可能性を維持しなければならないシステムでは容認しがたい。)
【0064】
[0068]しかし、攻撃者がシステムに特定のアカウントを有することではなく、システムに任意のアカウントを有することにさらに関心を抱いている場合には、この限定は、認証システムにおける攻撃を少しも阻まない。攻撃者が、異なるユーザ名/パスワードの組み合わせを簡単に推測し、4回を超えて同一のユーザ名を試すことは決してできない。
【0065】
[0069]あるいは、攻撃者は、正規ユーザに対してアクセスを拒絶するために、アプリケーションの防御挙動を用いる可能性がある。上記の実施形態を続けると、大量のアカウントに関して不良なパスワードを反復的に推測することによって、攻撃者は、顧客サポートに連絡するまでに、ユーザがアプリケーションにアクセスすることを防止することができる。(ユーザに不便をかけることに加えて、これは、顧客サポートに重い負担をかける可能性がある。
【0066】
[0070]攻撃の別の形態は、登録情報推測であり、攻撃者が、ユーザに自己登録を可能にするシステムから正規ユーザ名のリストを収集することを可能にする。たとえば、ウェブベースの電子メールサービスを取り上げる。サービスが、自由なトライアルアカウントのために人々がサインアップをすることを可能にする場合には、新規ユーザに登録情報処理の一部として、電子メールアドレスを選ぶことを求める。新規ユーザが別のユーザによって既に取得された電子メールアドレスを選ぶ場合には、システムは、異なるアドレスを選ぶことを新規ユーザに求める。この挙動は、攻撃者にとって有用である。システムが、特定の電子メールアドレスが既に取得されていることを通知する場合には、システムを利用して既に登録された者に属するユーザ名を攻撃者が認識する。大量のアドレスを推測することによって、攻撃者は、正規のアカウント名のリストを構築することができる。次に、攻撃者は、フィッシングまたはパスワード推測などの異なる攻撃の一部としてこのリストを用いる可能性がある。
【0067】
[0071]ランタイムセキュリティモジュール117は、すべてが失敗する爆発的な量の認証要求を見つけることによって、信任状推測に対して防御する。同様に、本発明は、完了していない登録試行または、既存のユーザとの衝突を発生した登録試行の長いシーケンスを見つけることによって、登録情報推測攻撃に対して防御する。これらの爆発的な量の要求は、特に大量の要求が同じIPアドレスから来る場合には、攻撃を表す確率が高い。セキュリティモジュール116は、ランタイムセキュリティモジュール117が、認証関数への呼び出しまたは登録関数への呼び出しが失敗したときをランタイムセキュリティモジュール117に通知することを実行可能にするコードを挿入することによって、ランタイムセキュリティモジュール117に失敗した認証要求および失敗した登録要求を監視することを可能にする。
【0068】
[0072]エラーマイニングは、本発明の実施形態を利用して対処される別の脆弱性である。攻撃者が脆弱性を見つけるためにウェブサイトを探るときに、サイトが攻撃者に返すように提供する情報の量は、攻撃の最終的な成功または失敗に対して決定的である。アプリケーションが攻撃者にスタックトレースを示す場合には、アプリケーションは攻撃者のジョブを著しく簡単にする情報を引き渡す。たとえば、スタックトレースが、攻撃者に出来損ないのSQLクエリー文字列、用いられているデータベースのタイプおよびアプリケーションコンテナのバージョンを攻撃者に示す可能性がある。この情報は、攻撃者にとって、これらの構成要素における周知の脆弱性を標的にすることを可能にする。
【0069】
[0073]アプリケーション設定は、アプリケーションがデフォルトエラーページを指定することによって、攻撃者にエラーメッセージを漏洩することが決してできないことを保証すべきである。標準的なHTTPエラーコードを扱うことは、有用でユーザにとって使いやすいことであるが、良好な設定は、アプリケーションによって捨てられる可能性がある任意の例外を捕捉する最後の機会のエラーハンドラを定義することになる。
【0070】
[0074]ランタイムセキュリティモジュール117が、最上位のエラーキャッチャとして作用することによって、エラーマイニングに対して防御する。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、最上位のエラーキャッチャとして作用することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)アプリケーションがそれ自体を扱わない任意のエラーは、ランタイムセキュリティモジュール117によって扱われる。それによって、アプリケーションコンテナのデフォルトエラーに応答する仕組みが攻撃者に対して機密システム情報を表示することをも防止する。ランタイムセキュリティモジュール117は、機密情報を暴露しないエラーページを提供することによって受信する任意のエラーを扱う。このエラーページは、管理者によってカスタマイズされることができる。
【0071】
[0075]機密データ抽出(Sensitive Data Extraction)は、本発明の実施形態によって対処される別の問題点である。システム情報漏洩は、出力ストリームまたはロギング関数を介して、システムデータまたはデバッギング情報がプログラムから出るときに生じる。
実施形態:以下のコードは、標準的なエラーストリームに対する例外を印刷する。
【数23】

システム設定に応じて、この情報は、端末ウィンドウに表示されてもよく、ログファイルに書き込まれてもよく、またはリモートユーザに公開されてもよい。一部の場合において、エラーメッセージは、攻撃者に、システムが脆弱な攻撃の種類を正確に伝えることができる。たとえば、データベースエラーメッセージは、アプリケーションがSQLインジェクション攻撃に対して脆弱であることを暴露する可能性がある。他のエラーメッセージは、システムに関するさらに間接的な手がかりをさらに暴露する可能性がある。ユーザにクラスパスを示すことは、オペレーティングシステムのタイプ、システムにインストールされるアプリケーション、管理者がプログラムを設定する配慮の量に関する情報を暗示する可能性がある。
【0072】
[0076]ランタイムセキュリティモジュール117は、アプリケーションが放出する情報を監視することによって、機密データ実行に対して保護する。書き出されている最中のデータにおけるパターンを探ることによって、セキュリティモジュールは、機密データがシステムに残っているときおよび場所を決定する。たとえば、スタックトレースは、独特の外観を有する。
【数24】

この手法は、否定的なパターン集合、すなわちアプリケーションが公開すべきでないデータをを表すパターンの集合を作成することを含むため、「ブラックリスティング」と呼ばれる。
【0073】
[0077]ランタイムセキュリティモジュール117が、アプリケーションに残すこの形態の情報を認識する場合には、情報を書き出することを防止し、もはや機密でないように情報を変更し、または機密データがシステムに残っている管理者を単に変更することによって、応答することができる。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117にすべての出ていくHTTPレスポンスデータにフィルタをかけることを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0074】
[0078]考慮すべき別の問題点は、プライバシ侵害である。プライバシ侵害は、以下の場合に生じる。
1.クレジットカード番号、パスワードまたは社会保障番号などのプライベートユーザ情報が、プログラムに入る場合
2.データが、コンソール、ファイルシステムまたはネットワークなどの外部リソースに書き込まれる場合
実施形態:以下のコードは、ログファイルに格納することによってデータベースに追加されるレコードのコンテンツを追跡するように設計されたロギング命令文を含む。格納される値の中でもgetPassword( )関数は、アカウントに関連するユーザが供給する平文パスワードを返す。
【数25】

上記の実施形態のコードは、平文パスワードをファイルシステムにログとして記録する。多くの開発者はファイルシステムをデータに関する安全な格納位置として信頼するが、特にプライバシが関連する場合には、ファイルシステムは盲目的に信頼されるべきではない。
【0075】
[0079]個人データは、種々の方法でプログラムに入力することができる。パスワードまたは個人情報の形態でユーザに直接的に入力されてもよい。アプリケーションによって必要とされるまで保持されるデータベースまたは他のデータ格納部からアクセスされてもよい。データは、提携先または他の第三者から間接的に届いてもよい。プライベートとして分類される必要がないデータは、さらなるプライベートの意味合いを搬送することが時々ある。たとえば、学生の識別番号は、個別の学生の個人情報に戻る公に利用可能なマッピングでは一般にないために、プライベートと見なされることがあまりない。しかし、学校が学生の社会保障番号に基づいて識別番号を生成することを決定した場合には、番号はプライベートと見なされる必要があるであろう。
【0076】
[0080]セキュリティおよびプライバシに関する問題の場合には、一見、互いに競合することが珍しいわけではない。セキュリティの観点から、任意の異常行為が後に識別されることができるように生じる重要な動作を記録することが得策であることがしばしばある。しかし、プライベートデータがこれらの動作に入り込む場合には、これ以外の善意の実行は実際には危険となる可能性がある。
【0077】
[0081]プライベートデータが種々の理由から安全でなく扱われる可能性があるが、最も一般的なものの1つは、間違った対象に寄せられる信頼である。開発者は、完全に信頼されていない場合にはプログラムが部分的に実行する動作環境を考慮することが多い。このため、プログラマは、ファイルシステム、レジストリまたは他の局所的に制御されたリソースにプライベート情報を格納することに関して2回考えることはない可能性がある。しかし、一定のリソースが任意のユーザに対してアクセス可能ではないという事実は、特に潜在的に有用なプライベートデータに関して、それらにアクセスする個人が完全に信頼されることができることを保証しているわけではない。2004年には、AOLは、プライベート顧客情報を入手した邪な被雇用者が約9200万人のAOL顧客の電子メールアドレスを、外国のギャンブルウェブサイトを売り込んでいるスパマに販売したときに、損害を被った。
【0078】
[0082]AOLによって被られたのと類似の高いプロファイルのエクスプロイトに応じて、プライベートデータの収集および管理は、ますます規則的に行われるようになっている。その位置、行われるビジネスのタイプおよびそれを扱う任意のプライベートデータの性質に応じて、組織は、1つ以上の以下の連邦規則および州規則、すなわちSafe Harbor Privacy Framework、グラム・リーチ・ブライリー法(GLBA)、医療保険の携行性と責任に関する法律(HIPAA)およびCalifornia SB− 1386の範囲の下で理解してもよい。規則の豊富さにもかかわらず、プライバシ侵害は依然として憂慮すべき頻度で生じ続けている。
【0079】
[0083]機密データ抽出に対する保護と同様に、ランタイムセキュリティモジュール117は、アプリケーションが放出する情報を監視し、アプリケーションが公開すべきでないプライベート情報を表すパターンの集合(ブラックリスト)をその情報と比較することによって、プライバシ侵害に対して保護する。たとえば、このセキュリティモジュール117は、アプリケーションが社会保障番号を書き出していることを識別するために、パターンddd−dd−ddddを見つけてもよい(文字“d”は、任意の数字を代表する)。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117にすべての出ていくHTTPレスポンスデータにフィルタをかけることを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0080】
[0084]クリック詐欺は、本発明の実施形態を利用して対処される別の脆弱性である。インターネットにおける宣伝は、ビッグビジネスである。当然のことながら、広告看板、雑誌のページおよびテレビのチャネルの代わりに、宣伝は、ウェブページ上で行われる。1つの現在の協定の下で、広告主は、広告中のリンクをクリックする人の数に基づいて、ウェブページの所有者に補償する。この協定は、詐欺の可能性をもたらす。ウェブサイト所有者は、広告の収益を増大するために、自身のウェブページにおけるリンクを反復的にクリックする可能性がある。同様に、大損害を起こしたい攻撃者は、クリックを生成するようにプログラムに設定することによって、企業の広告コストをつり上げる可能性がある。これらの実行は、クリック詐欺として周知である。
【0081】
[0085]ランタイムセキュリティモジュール117は、URL要求を追跡することによって、クリック詐欺の検出に役立つ。特定のURLに関する要求の履歴、それらの要求に関するタイミングおよび他の詳細を調査することによって、セキュリティモジュール116は、疑わしい要求の集合を指摘する。たとえば、疑わしい要求の1つの定義は、以下のように定義されてもよい。
・特定のURLに関する要求の頻度の急激な増大
・少数のIPアドレスから来る多数の要求
・ブラウザ文字列などのHTTPヘッダが同一である場合
セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117にURL要求に関連する統計データを収集することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0082】
[0086]未認証のアクセスは、本発明の実施形態によって対処されることができる別のセキュリティ脆弱性である。アプリケーションによってとられるセキュリティ措置に関係なく、ユーザが認証信任状の制御を失う可能性が常にある。ユーザは、詐欺師の電子メールメッセージに騙され、(この手法は、フィッシングと呼ばれる)、攻撃者によって危うくされたDNSサーバの犠牲となる(ファーミングと呼ばれる)。ユーザ名およびパスワードを記載し、安全でない位置に格納するか、またはキー打ちのすべてをログに記録し、それらを攻撃者に伝送するスパイウェアプログラムを故意にインストールする可能性がある。
【0083】
[0087]ランタイムセキュリティモジュール117は、ユーザの認証信任状が盗まれたことを示す可能性がある異常なアカウントの行為を検出することができる。ランタイムセキュリティモジュール117は、異常なアカウントの行為を検出するための3つの手法をとる。
1.ユーザの挙動のモデルを作成して、観察された挙動がモデルから導出される状況を識別する。ランタイムセキュリティモジュール117は、各ユーザが行う要求のタイプのモデルを作成し、ユーザが行う要求のタイプがモデルから突然に、かつ著しく逸脱する場合には、セキュリティモジュールが異常なアカウントの行為のフラグを立てる。同様に、JavaScript、AppletまたはActiveX制御を用いることによって、セキュリティモジュールは、アプリケーションのウェブページフィールド(たとえば、ユーザ名およびパスワードフィールド)に打ち込むときのキー打ちの間にユーザが休止する少量の時間を監視する。このキー間のタイミング情報は、ユーザのタイピングのモデルを構築するために用いられることができる。ランタイムセキュリティモジュール117は、大きな変化は、真のユーザ以外の人間がタイピングしていることを示す可能性があるため、ユーザがタイプする方法における著しい変化にフラグを立てる。
2.アカウントにわたる行為を追跡し、アカウント間で異常に類似する挙動を見つける。攻撃者が多数のアカウントから認証信任状を取り入れている場合には、アカウントのすべてにわたって同一に振る舞うスクリプトを設定する可能性がある。たとえば、スパム発信者は、スパムを送信するために、ウェブベースの電子メールサービスにおける多数の妥協したアカウントを用いてもよい。セキュリティモジュールは、多数のユーザが同じ電子メールメッセージを送信していることを検出するように設定されることができる。
3.前のアカウント妥協案からの行為を追跡し、それらの妥協案に適合する挙動のフラグを立てる。これは、管理者が妥協されたアカウントアクセスに関連するシステム行為をセキュリティモジュールに識別させるために、必要とされる。
【0084】
[0088]ランタイムセキュリティモジュール117はまた、匿名のアクセスの発行に対処するように設定されてもよい。IPアドレスは、インターネットにおけるパケットを経路指定するために用いられる識別子である。正常な状況下で、ウェブブラウザがウェブサイトからページを検索するために要求を行うときに、ウェブサイトの名前がIPアドレスに変換され、次に、要求がそのIPアドレスを有するウェブサーバに経路指定される。ウェブサーバは、要求を発したコンピュータのIPアドレスにページを返送することによって応答する。このように、IPアドレスは、インターネット上のコンピュータを識別するために機能する。
【0085】
[0089]一部の状況において、コンピュータユーザは、匿名であることを望む場合がある。例は、以下の通りである。
・反乱分子のグループは、政府には、訪れているウェブサイトの集合について知られることが望ましくないと考える可能性がある。
・犯罪者は、任意の識別情報を明らかにすることなく、脆弱性に関してウェブサイトを探りたいと考える可能性がある。
匿名であるためには、ユーザは、真のIPアドレスを公開することなく、自分たちのコンピュータに戻るようにパケットを経路指定する方法を見つけなければならない。この目的を達成するプロトコルは、匿名経路指定プロトコルと呼ばれる。オニオンルーティング(Onion Routing)は、最も人気のある匿名経路指定プロトコルであり、オニオンルーティングの最も人気のある実行は、“TOR”と呼ばれる。さらなる情報に関しては、http://tor.eff.org/を参照のこと。
【0086】
[0090]ウェブアプリケーションに関する管理者は、匿名のユーザからのトラフィックを扱いたくてもよく、または扱いたくなくてもよい。たとえばTORなどの一部の匿名経路指定の実施は、正常なHTTP要求と匿名のHTTP要求との間を区別することを可能にするが、そのことは重要ではない。
【0087】
[0091]ランタイムセキュリティモジュール117は、HTTP要求がTORに伝わるかどうかに基づいて、アプリケーションにその挙動を変更させることを可能にする。要求がhttp://tor.noreply.org:9030/で発行されたTOR「出口サーバ」のリストと端を発しているように見えるIPアドレスとを比較することによって、これを行う。このように、ランタイムセキュリティモジュール117を用いるシステムは、匿名ユーザへのアクセスを拒絶することができ、匿名ユーザが行うことを許容する行為の制限またはセキュリティモジュールが正常な用途と潜在的な攻撃との間を区別するために用いる閾値の変更を行う。たとえば、定期的なユーザは、長さ1000文字までのパラメータを利用する要求を送信することができてもよいが、匿名ユーザは100文字のパラメータに制限される。
【0088】
[0092]ランタイムセキュリティモジュール117はまた、公に利用可能な攻撃(Publicly Available Attack)ツールに対処するように設定されてもよい。あまり巧妙でない攻撃者は、脆弱性に関してウェブアプリケーションを探るために既存のツールを用いる可能性がある。そのようなツールとしては、AcunetixによるWVS(Web Vulnerability Scanner)、Fortify SoftwareによるRedTeam Workbench、SPI DynamicsによるAppScanが挙げられる。これらのツールは、クロスサイトスクリプティングまたはバッファオーバーフローなどのウェブアプリケーション脆弱性を見つけることができる。インターフェイスに用いることを容易に提供することによって、これらのツールは、多数のウェブページおよびそれらのページ上のパラメータにわたる脆弱性を見つける反復タスクを自動化する。こういったツールはまた、不正な意図を有するが、ほとんど知識を有さない者が、有効な攻撃を作成することを可能にする。
【0089】
[0093]ランタイムセキュリティモジュール117は、自動化された攻撃ツールのいくつかのタイプに由来する攻撃を検出することができる。これらのツールの一部は、攻撃者が行う前に、脆弱性を見つけるために、アプリケーションテスタによって用いられることを意図している。これらのツールは、トラフィックを観察している誰かが、要求が来る場所を理解することを容易にするために、生成するHTTP要求における個別のシグネチャを生成する。他のツールは、さらに難解な手がかりを残す。WVSは、文字列“WVS_”を含むクロスサイトスクリプティング攻撃を生成する。AppScanは、15個の‘a’の文字からなるバッファオーバーフロー攻撃を生成する。
【0090】
[0094]アプリケーションシグネチャまたはアプリケーションに対して行われるHTTP要求におけるさらに難解な手がかりを見つけて、それらを遮断または他の方法で無害化することによって、ランタイムセキュリティモジュール117は、攻撃者が、公に利用可能な攻撃ツールを用いてアプリケーションにおける脆弱性を見つけることを不可能にする。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117が、公知の攻撃ツールの特性に適合するHTTP要求を調査可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0091】
[0095]既に説明したように、ウェブベースのアプリケーションのセキュリティは、正規ユーザのセッション識別子を学習することができていない攻撃者に左右される。攻撃者が妥当なセッション識別子を推測することができる場合には、ユーザのセッションを簡単に乗っ取ることができる。当然のことながら、良好なセッション識別子は長くて、完全にランダムであるため、推測することは困難である。
【0092】
[0096]攻撃者は、推測するのではなく、攻撃者が指定する特定のセッション識別子を用いるようにユーザを罠にかける場合がある。攻撃者がセッション識別子を推測した場合と同様の結果となり、ここで、攻撃者は、ユーザのセッションを支配することができる。この攻撃は、「セッション固定化」として公知である。
【0093】
[0097]ここに、攻撃者が、ユーザに特定のセッション識別子を有するように強制することが可能な1つのシナリオがある。一部のServletコンテナ、特にTomcatは、2つの方法でセッション識別子を渡すことを可能にする。
1)クッキーとして
2)URLパラメータとして
大部分の現在のアプリケーションは、クッキーを用いるだけである。この決定のための良好なセキュリティ動機付けがある。URLパラメータとしてセッション識別子を渡すことは、値をログに記録させ、ブラウザの履歴に書き込むか、または他の方法で攻撃者に公開させる可能性がある。Tomcatが、クッキーとしてセッション識別子を渡すように設定され、URLパラメータとして渡されるセッション識別子を見るようにする場合には、パラメータ値を解釈し、それをクッキーに伝達することになる。
【0094】
[0098]この伝達の仕組みは、犠牲者にセッション識別子を強制する機会を、攻撃者に与える。セッション識別子のクッキーまたはパラメータは、伝統的に“jsessionid”と名づけられる。攻撃者が犠牲者にこのようなリンクhttp://www.vulnerablesite.com/login.jsp?jsessionid=abc123を含む電子メールメッセージまたは他の通信を送信する場合には、犠牲者がリンクをクリックすると、tomcatは、犠牲者のセッション識別子として”abcl23”を用い始める。攻撃者はここで、犠牲者のセッション識別子を認識する。
【0095】
[0099]アプリケーションは、ユーザが認証処理に進むときにはいつも、新たなセッション識別子を発行することによって、セッション固定化を防止することができる。このように、攻撃者によって供給される任意のセッション識別子は、廃棄される。残念なことに、すべてのアプリケーションがこれを行うとは限らず、この挙動をアプリケーションに追加することは困難であろう。
ランタイムセキュリティモジュール117は、攻撃者がユーザに特定のセッション識別子を強制しようとする状況を決定することができる。セッション識別子は普通、クッキーとして渡される。そのため、セキュリティモジュールがURLパラメータとして渡されるセッション識別子を見る場合には、セッション固定化攻撃の結果であるとして要求にフラグを立てて、適切に応答することができる。セキュリティモジュール116は、アプリケーション配備記述子を修正することによって、ランタイムセキュリティモジュール117にセッション識別子パラメータに関してすべてのHTTP要求を調査することを可能にする。(セキュリティモジュール116による修正前後の配備記述子の一例に関する付録A参照。)
【0096】
[0100]本発明は、攻撃に応答する多数の技法を用いる。管理者は、応答がアプリケーションのタイプおよび攻撃のタイプに適するように、ランタイムセキュリティモジュール117を設定する。管理者は、プログラムの現在の脅威に対する管理者の認識に応じて、アプリケーションが増大するか、またはさらに緩和される防御姿勢をとることを可能にするように、モジュールがプログラムを再起動することなく攻撃に応答する方法を変更することができる。
【0097】
[0101]ランタイムセキュリティモジュール117は、以下の方法のうちの1つ以上の方法において攻撃に応答することができる。
・ログ:攻撃が行われたことを示すログファイルエントリを生成する。
・警告:行われた攻撃の短い概要を有する電子メールメッセージを送信するか、行われた攻撃の短い概要を有するページャに接触する。
・処理要求の停止:例外を捨てることによって、またはプログラムに要求を渡さないことによって、HTTP要求の処理を中断する。
・攻撃の無害化:データの危険なピースを除去するか、変更するかまたは無効にする。たとえば、プライバシ侵害は、クレジットカード番号の数字の大部分を文字”X”で置換することによって無害化される可能性がある。これは、危険な行動方針であり、攻撃者が、データを自分たちに都合よく修正するように保護論理を罠にかけることができる可能性がある。しかし、攻撃者に対してプログラムが不正な意図を検出したことを直ちに認めないことが望ましい場合がある。攻撃を無害化するが、要求を拒絶しないことによって、プログラムは、プログラムの防御能力を曖昧にすることに成功する可能性がある。
・乱数の発行:攻撃のいくつかの形態は、アプリケーションの正常な流れを妨害し、ユーザに乱数を提示することによって打破されることができる。乱数は、人間とコンピュータとの間で差異を見分けようとするだけである。(このタイプの乱数はカップチャ(kaptcha)として公知である。)あるいは、識別情報の一部(たとえば、家の住所または電話番号など)を提供することによって、ユーザに身元照明を求めてもよい。
・アプリケーションの減速:攻撃者に著しい数の反復推測(たとえば、セッションID推測)を行うことを必要とする攻撃の場合の有効な対抗策は、アプリケーションの応答速度を減速することである。アプリケーションは、攻撃者が正規セッションIDを推測しようとしていることを検知する場合、アプリケーションが通常の数分の1の速度で攻撃者の推測に応答する場合には、攻撃が成功するために攻撃者が必要とする時間の長さを増加させることになる。この防御は、必要とされるすべてであってもよく、プログラム管理者が状況を見極めることができるまで、時間稼ぎ戦術として単に機能してもよい。
・アプリケーションの停止:アプリケーションにさらなるユーザ要求に応答することをやめさせる。これは、過激な行為であるが、アプリケーションが攻撃者によって破壊されたのであれば、唯一の安全策である場合がある。
・ユーザ定義:攻撃情報をこの目的のために書かれたプログラム専用のハンドラに引き継ぐ。
【0098】
[0102]ここで、本発明の種々の実施形態によって対処される問題をグループ化する種々の方法に注意を向ける。本発明は、インジェクション脆弱性に対して保護するために用いられてもよい。インジェクション脆弱性は、攻撃者が不正なデータをアプリケーションに送信する共通の属性を共有する。攻撃者がアプリケーションを許容するように設計されていない行為をとることを許容する場合には、アプリケーションは、不正なデータを機密事項処理動作に送信する。SQLインジェクション、コマンドインジェクション、リソースインジェクション、ログ偽造およびクロスサイトスクリプティングは、本発明の実施形態によって対処されるインジェクション脆弱性の例である。
【0099】
[0103]本発明の実施形態はまた、反復的な攻撃に対しても有効である。反復的な攻撃は、異常な動作またはエラーの、増大頻度によって特徴付けられる。セッションID推測、信任状推測、クリック詐欺およびサイトプロービングは、本発明の実施形態によって対処される反復的な攻撃の例である。
【0100】
[0104]本発明の実施形態はまた、機密情報に対する攻撃に対して保護する。機密情報に対する攻撃は、攻撃者への未認証の情報のリターンを結果として生じる。エラーマイニング、機密データ抽出およびプライバシ侵害は、本発明の実施形態によって防止される機密情報に対する攻撃の例である。
【0101】
[0105]本発明の実施形態はまた、個別のHTTP要求の特定の属性を調査することによって、属性攻撃に対して保護する。セッション固定化、匿名のアクセス、公に利用可能な攻撃ツールおよび強制的ブラウズは、本発明の実施形態によって対処される属性攻撃の例である。
【0102】
[0106]本発明は、攻撃および不正な使用に対してソフトウェアを保護する。本発明は、第一にプログラムにコードを挿入し、次に、挿入されたコードを用いて、疑わしい挙動のログを記録し、攻撃を迎撃し、防御行為をとるために、実行時にプログラムの挙動を監視することによって、動作する。手段となったプログラムは、中央サーバと通信することができ、プログラムが複数のコンピュータで実行される場合には、中央サーバは、コンピュータに広がる攻撃を検出することができるようになっている。中央サーバはまた、管理者がシステムの性能および挙動を監視することを可能にし、状況がそのように正当化される場合には、管理者がプログラムの防御設定(プログラムが攻撃に応答する方法)を修正することを可能にする。
【0103】
[0107]プログラムを修正することによって、本発明は、ホストオペレーティングシステムを介して、またはプログラムとやり取りするネットワークトラフィックを観察することによって、監視するだけのこれまでの手法より高い精度および正確さで、多くの広範囲な範疇の攻撃を検出することができる。したがって、本発明は、実行プログラム以外の利用可能でないコンテキスト情報を利用することによって、アプリケーションファイアウォールおよび侵入防御システムに通例関連する検出漏れおよび誤判定を減少させる。本発明の実施形態は、ウェブベースの攻撃に焦点を置き、2台以上のコンピュータで実行するアプリケーションをサポートする。
【0104】
[0108]本発明の実施形態は、種々のコンピュータ実行動作を行うために、その上にコンピュータコードを有するコンピュータ可読媒体を利用したコンピュータ格納製品に関する。媒体およびコンピュータコードは、本発明の目的のために特別に設計および構成されたものであってもよく、コンピュータソフトウェア業界の当業者には周知で利用可能である類のものであってもよい。コンピュータ読み出し可能媒体の例としては、ハードディスク、フロッピーディスクおよび磁気テープなどの磁気媒体、CD−ROMおよびホログラフィックデバイスなどの光媒体、フロプティカルディスクなどの光磁気媒体、アプリケーション専用の集積回路(「ASIC」)などのプログラムコードを格納して実行するように特別に設定されたハードウェアデバイス、プログラム可能な論理デバイス(「PLD」)およびROMデバイスおよびRAMデバイスが挙げられるが、これらに限定されるわけではない。コンピュータコードの例としては、コンパイラによって作成されるなどの機械コード、インタプリタを用いてコンピュータによって実行されるより高度なコードを含むファイルなどが挙げられる。たとえば、本発明の実施形態は、Java、C++または他のオブジェクト指向型プログラミング言語および開発ツールを用いて実行されてもよい。本発明の別の実施形態は、機械で実現可能なソフトウェア命令の代わりに、または機械で実現可能なソフトウェア命令と組み合わせたハードウェアに組み込まれた回路で実行されてもよい。
【0105】
[0109]説明のための前述の記述は、本発明の完全な理解を提供するために特有の用語を用いた。しかし、当業者には、特定の詳細が本発明を実行するために必要とされないことは明白であろう。したがって、本発明の特定の実施形態の前述の記述は、例示および記述のために提供され、包括的ではなく、開示された正確な形態に本発明を限定することを意図しておらず、上記の教示を鑑みて、多くの修正および変形が可能であることは明白である。実施形態は、本発明の原理およびその実際の用途を最適に説明するために選定および記載され、それによって、当業者が、検討された特定の用途に適しているような種々の修正を利用して、本発明および種々の実施形態を最適に利用することをできる。以下の特許請求の範囲およびその等価物が、本発明の範囲を画成することが意図される。
(付録A:配備記述子)
【0106】
以下は、アプリケーション防御による修正前のサンプルの配備記述子である。
【数26】





【0107】
以下は、アプリケーション防御による修正後の同じアプリケーション配備記述子である。追加は、ボールド体である。
【数27】





【図面の簡単な説明】
【0108】
【図1】本発明の実施形態によって構成されるコンピュータを示す。
【図2】本発明の実施形態によって用いられてもよいグラフィカルユーザインターフェイスを示す。
【図3】本発明の実施形態によって用いられてもよい別のグラフィカルユーザインターフェイスを示す。
【図4】本発明の実施形態に関連する処理動作を示す。

【特許請求の範囲】
【請求項1】
コンピュータ読み出し可能格納媒体であって、
プログラム命令の自動解析を行う実行可能命令と、
保護命令を前記プログラム命令に挿入する実行可能命令と、
前記プログラム命令の実行中に、前記保護命令を利用し、潜在的な反復的な攻撃を検出して応答する実行可能命令と、
を備え、
前記自動解析が、インジェクション脆弱性の自動解析、前記攻撃の自動解析、機密情報の自動解析および特定のHTTP属性の自動解析の中から選択される少なくとも2つの解析を含む、コンピュータ読み出し可能格納媒体。
【請求項2】
前記インジェクション脆弱性が、SQLインジェクション、コマンドインジェクション、リソースインジェクション、ログ偽造およびクロスサイトスクリプティングのうちの1つ以上から選択される、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項3】
前記反復的な攻撃が、セッションID推測、信任状推測、クリック詐欺およびサイトプロービングのうちの1つ以上から選択される、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項4】
前記機密情報が、エラーマイニング、機密データ抽出およびプライバシ侵害のうちの1つ以上から選択される、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項5】
前記特定のHTTP属性が、セッション固定化、匿名のアクセス、公に利用可能な攻撃ツールおよび強制的ブラウズのうちの1つ以上から選択される、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項6】
前記攻撃に応答する実行可能命令が、情報をログに記録する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項7】
前記攻撃に応答する実行可能命令が、警告を発生する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項8】
前記攻撃に応答する実行可能命令が、要求の処理を休止する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項9】
前記攻撃に応答する実行可能命令が、前記攻撃を無害化する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項10】
前記攻撃に応答する実行可能命令が、乱数を発行する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項11】
前記攻撃に応答する実行可能命令が、アプリケーションの処理速度を減じる実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項12】
前記攻撃に応答する実行可能命令が、アプリケーションを停止する実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。
【請求項13】
前記攻撃に応答する実行可能命令が、ユーザ定義の応答を呼び出す実行可能命令を含む、請求項1に記載のコンピュータ読み出し可能格納媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公表番号】特表2009−506439(P2009−506439A)
【公表日】平成21年2月12日(2009.2.12)
【国際特許分類】
【出願番号】特願2008−528245(P2008−528245)
【出願日】平成18年8月25日(2006.8.25)
【国際出願番号】PCT/US2006/033639
【国際公開番号】WO2007/025279
【国際公開日】平成19年3月1日(2007.3.1)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.フロッピー
【出願人】(506392908)フォーティファイ ソフトウェア, インコーポレイテッド (2)
【Fターム(参考)】