(57)【要約】  コンピュータに実装可能な例示的方法（３００）は、ソフトウェアサービスの既知の脆弱性につけこまれることの危険性を低減または除去するために情報を変換または「免疫付与（ｉｍｍｕｎｉｚｅｓ）」するものであって、要求に応答して情報を受信するステップ（３０４）と、この情報を変換して変換された情報を生成するステップ（３０８）と、この変換された情報を送信するステップ（３１２）とを含む。例示的なファイアウォールサーバ（１１２）は、ファイアウォールサーバ（１１２）がリソース（１０４、１０８）からネットワークを介して情報を受信することと、クライアントコンピュータ（１１４）上のブラウザソフトウェア（１５４）の脆弱性につけこまれることを阻止するために、クライアントコンピュータ（１１４）および免疫付与コンポーネント（２６４、２６８）に情報を送信することとを可能にする、サーバソフトウェア（１４４、１４８）を含む。さまざまな他の例示的な方法、デバイス、システムなども開示される。
2009501392.tif 000002
【特許請求の範囲】
【請求項１】
要求に応答して情報を受信するステップであって、前記受信情報はソフトウェアサービスが消費するためのものである、受信するステップ（３０４）と、
変換された情報を生成するために前記受信情報を変換するステップであって、前記変換は、前記受信情報を変換して、前記ソフトウェアサービスの既知の脆弱性につけこむ前記受信情報の能力を低減または除去する、変換するステップ（３０８）と、
前記変換された情報を送信するステップ（３１２）と
を備えたことを特徴とするコンピュータに実装可能な方法（３００）。
【請求項２】
サーバ（１１２）は、クライアント（１１４）の要求に応答して前記情報を受信することを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項３】
前記情報は、異なるサーバ（１０４、１０８）上に存在することを特徴とする請求項２に記載のコンピュータに実装可能な方法。
【請求項４】
前記送信するステップは、前記変換された情報をサーバ（１０４、１０８、１１２）からクライアント（１１４、１１８）に送信することを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項５】
前記受信情報を変換するステップは、ブラウザソフトウェアの脆弱性につけこむ能力についての前記情報（６０８，７０８）をチェックするステップを備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項６】
前記受信情報は、ＨＴＭＬコードを備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項７】
前記受信情報は、スクリプトを備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項８】
前記受信情報は、ブラウザソフトウェアサービスを用いて表示することができるウェブページを備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項９】
前記受信情報を変換するステップは、前記受信情報（７１８）内にフックを挿入するステップを備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項１０】
前記フックは、ランタイムイベントに応答して関数を呼び出すことを特徴とする請求項９に記載のコンピュータに実装可能な方法。
【請求項１１】
ＵＲＬが信頼できるリソースに対応するか否かを判定するステップをさらに備えたことを特徴とする請求項１に記載のコンピュータに実装可能な方法。
【請求項１２】
前記受信情報を変換するか否かを前記判定に基づいて決定するステップをさらに備えたことを特徴とする請求項１１に記載のコンピュータに実装可能な方法。
【請求項１３】
請求項１に記載の方法を実行するためのコンピュータ実行可能命令を有する１または複数のコンピュータ可読記録媒体。
【請求項１４】
スクリプトを含むＨＴＭＬコードを受信するステップ（７０４）と、
前記ＨＴＭＬコードにフックを挿入するステップであって、前記フックがランタイムイベントに応答して、前記スクリプトによるブラウザソフトウェアの脆弱性につけこまれることを阻止するための動作を呼び出す、挿入するステップ（７１８）と
を備えたことを特徴とするコンピュータに実装可能な方法。
【請求項１５】
前記フックは、関数（８５４）を呼び出すイベント処理フック（８７４）を備えたことを特徴とする請求項１４に記載のコンピュータに実装可能な方法。
【請求項１６】
前記関数（８５４）は、前記ＨＴＭＬコードがブラウザソフトウェアの脆弱性につけこむか否かを判定することを特徴とする請求項１５に記載のコンピュータに実装可能な方法。
【請求項１７】
請求項１４に記載の方法を実行するためのコンピュータ実行可能命令を有する１または複数のコンピュータ可読記録媒体。
【請求項１８】
ファイアウォールサーバ（１１２）が、ネットワークを介してリソース（１０４、１０８）から情報を受信し、情報をクライアントコンピュータ（１１４）に送信することを可能にするサーバソフトウェア（１４４、１４８）と、
前記情報に免疫付与して前記クライアントコンピュータ（１１４）上のブラウザソフトウェア（１５４）の脆弱性につけこまれることを阻止するための免疫付与コンポーネント（２６４、２６８）と
を備えることを特徴とするファイアウォールサーバ（１１２）。
【請求項１９】
前記サーバソフトウェア（１４４、１４８）は、前記ファイアウォールサーバ（１１２）が、前記クライアントコンピュータ（１１４）からＵＲＬを受信することをさらに可能にし、前記ＵＲＬは前記ネットワークを介してアクセス可能なリソース（１０４、１０８）に対応することを特徴とする請求項１８に記載のファイアウォールサーバ（１１２）。
【請求項２０】
前記ファイアウォールサーバ（１１２）は、前記ＵＲＬが、信頼できるリソースと関連するか否かを判定し、この判定に少なくとも部分的に基づいて前記情報を前記リソースから受信するか否か、または前記免疫付与コンポーネント（２６４、２６８）を使用して前記リソースから受信した情報に免疫付与するか否かを判断する信頼性コンポーネント（４６２、４６４）をさらに備えることを特徴とする請求項１９に記載のファイアウォールサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
多くの最近発見されたブラウザソフトウェアの脆弱性はＨＴＭＬコードと関連する。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
印刷このような脆弱性に対するパッチは、しばしば十分に迅速にインストールされることはなく、このため攻撃の危険が増加する。例えば、多くのケースにおいて、ユーザは最新パッチをインストールするまでに数週間または何ヶ月も放置しておくことがある。この期間、ユーザのソフトウェアは攻撃に対して脆弱である。ここに開示されるさまざまな例示的な技術は、ソフトウェアサービスへ、またはこれを通じての攻撃の危険性を低減または排除する方法に向けられる。
【課題を解決するための手段】
【０００３】
ここに説明されるさまざまな例示的な方法、デバイス、システムなどは、ソフトウェアサービス、例えば、ブラウザソフトウェアおよび関連する拡張機能内に存在する既知の脆弱性につけこまれることを阻止するように動作する。例えば、１つの例示的なソフトウェアフレームワークは、ＨＴＭＬウェブページを、このＨＴＭＬウェブページにスクリプトを挿入することで変換することができるが、ここでこの挿入されたスクリプトは、実行された際に、そのＨＴＭＬウェブページがユーザのウェブブラウザソフトウェアと関連する既知の脆弱性につけこむことを阻止する。
【０００４】
さまざまな例示的なメカニズムは、より一般的には、スクリプトおよび他のデータを入力動作のために取り込むソフトウェアサービス内に存在する既知の脆弱性につけこまれることを阻止するように動作する。このようなソフトウェアサービスには、例えば、ＳＱＬスクリプトを取り込むソフトウェアサービスが含まれる。さまざまな他の例示的な方法、デバイス、システムなども開示される。
【発明を実施するための最良の形態】
【０００５】
制限的でも網羅的でもない実施例が以下の図面を参照しながら説明されるが、類似する参照符号は一般に、別途指定されない限り、これらさまざまなビューに渡って類似の部分を示す。
【０００６】
ここに説明されるさまざまな例示的な方法、デバイス、システムなどは、例えば、ブラウザソフトウェアおよび関連する拡張機能などのソフトウェアサービス内に存在する既知の脆弱性につけこまれることを阻止するように動作する。例えば、１つの例示的なソフトウェアフレームワークは、ＨＴＭＬウェブページを、そのＨＴＭＬウェブページにスクリプトを挿入することで変換することができ、ここでこの挿入されたスクリプトは、実行された際に、そのＨＴＭＬウェブページが、ユーザのウェブブラウザソフトウェアと関連する既知の脆弱性につけこむことを阻止する。この例においては、この挿入されたスクリプトは、そのＨＴＭＬウェブページを、その既知のウェブブラウザソフトウェアの脆弱性に対して「免疫付与（ｉｍｍｕｎｉｚｅ）」する。すなわち、このように免疫付与されたこのＨＴＭＬウェブページは、このウェブブラウザソフトウェアを「感染させる（ｉｎｆｅｃｔ）」ことはできない。このような例示的なフレームワークは、このＨＴＭＬウェブページを、免疫付与する必要があるか調べることも、または単にこのＨＴＭＬウェブページを、脆弱性につけこむことのメカニズムの兆候を調べることなく、免疫付与することもできる。この免疫付与、すなわち変換の処理は、通常はコードを受信された情報（例えば、コード、データ、またはコードおよびデータ）内に挿入するか、もしくはこれと関連付けること、または受信された情報をその受信された情報をそれが既知の脆弱性につけこむことを防止するために修正する（例えば、変更、削除などを行う）ことを伴う。
【０００７】
挿入される免疫付与スクリプトに関しては、このようなコードは、通常は、ソフトウェアサービス（例えば、ウェブブラウザソフトウェアなど）と関連する１または複数の既知の脆弱性につけこむことを阻止する論理を含む。ここでも、この免疫付与コードは、そのようなコードまたはデータに依存するソフトウェアサービスによって受信されるべきコードもしくはデータ内に挿入されるか、またはこれと関連付けられる。いったん関連付けられると、そのコードは「免疫付与された（ｉｍｍｕｎｉｚｅｄ）」コードとみなされる。例示的な論理は、この免疫付与されたコードが実行されたとき、この免疫付与されたコードによってさらなる情報（例えば、追加のコードまたはデータ）を催促する要求が発行されたとき、または１または複数の他のイベントが発生したときトリガされる。トリガリングの目的に対しては、コード／データに免疫を付与するために１または複数のフックを用いることもできる。
【０００８】
さまざまな例示的なメカニズムは、より一般的には、入力動作のために、スクリプトまたは他のデータを取り込むソフトウェアサービス内に存在する既知の脆弱性につけこまれることを阻止するように動作する。このようなソフトウェアサービスには、例えば、ＳＱＬスクリプトが含まれる。
【０００９】
実装との関連では、様々な例示的なメカニズムをネットワークの（例えば、企業のファイアウォール上の）内部ノードとの関連、または端ノード（例えば、ソフトウェアサービスを有するクライアント）などとの関連で実装することができる。
【００１０】
以下の説明においては、様々な例示的な免疫付与メカニズムと関連するシステムおよび幾つかの可能な動作について説明される。勿論、実装は、他のシステム内にまたは他のやり方にて行うこともできる。ここでの説明においては、その後、さまざまな例示的な方法または処理について説明され、続いて、ＨＴＭＬコードの免疫付与に対する例示的なシナリオについて説明される。既に述べたように、様々な例示的なメカニズムは、動作のための入力としてスクリプトまたは他のデータに依存するソフトウェアサービスの脆弱性につけこむ危険性を低減または除去するために用いられる。
【００１１】
図１はシステム１００と、このようなシステム上に発生し得る処理１４０を示す。システム１００は、１または複数のサーバ１０４、１０８、１１２、１または複数のクライアント１１４、１１８、およびさまざまなサーバとクライアントとの間の通信のための１または複数のネットワーク１２０、１２４を含む。ネットワーク１２０はインターネットであってもよく、他方、ネットワーク１２４は、そこではサーバ１１２はローカルサーバとして動作するイントラネットでもよい。
【００１２】
このシステム１００内において、コンピュータは、ファイアウォールとして機能することも、またはルータデバイスとして機能することもある。ファイアウォールは、通常は、プライベートネットワークのリソースを他のネットワークからのユーザから保護するネットワークのゲートウェイサーバに配置されるセットの関連するプログラムである。その企業の従業員がより広いインターネット（例えば、ネットワーク１２０）にアクセスすることを可能にするイントラネット（例えば、ネットワーク１２４）を有する企業は、部外者が、自身のプライベートデータリソースにアクセスすることを阻止するため、および自身のユーザがどのような外部リソースにアクセスすることができるかを制御するために、ファイアウォールを（例えば、サーバ１１２上に）設置することができる。
【００１３】
ファイアウォールは、通常は、パケットを意図された宛先に転送すべか否かを判断するためにネットワークパケットを調べることができるルータプログラムと緊密に動作する。ファイアウォールは、更に、ユーザ（例えばクライアント１１４）に代わってネットワーク要求を行う代理サーバを含む、またはこれと共に動作することもできる。
【００１４】
さまざまなファイアウォールスクリーニング技術が存在する。例えば、ファイアウォールは、それらが許されるまたは信頼できる（例えば、あらかじめ識別されている）ドメイン名およびインターネットプロトコルアドレスからのものであることを確実にするために、要求をスクリーニングする。ファイアウォールは、更に、ドメイン名またはアドレス（例えば、ＵＲＬ）を、それらが許されるまたは信頼できるリソースと関連するか否かを判断するためにスクリーニングする。
【００１５】
図１の処理１４０は、クライアントソフトウェア１５４、例えば、ブラウザソフトウェアを用いてさまざまなリソースをブラウジングしているクライアントに関連する。この例においては、クライアントソフトウェア１５４は、ＨＴＭＬホスト１５６およびスクリプトホスト１５８を含む。クライアントソフトウェア１５４は、ユーザが、ＵＲＬ（ｕｎｉｖｅｒｓａｌ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｏｒ）と関連するあるリソース内に入ること、またはこれを選択することを許す。クライアントソフトウェア１５４は、このＵＲＬを、リソース、例えば、サーバ１０４、１０８、１１２の１つの上に格納されている情報の位置を見つけるために使用する。他の幾つかの例においては、サーバは、このようなＨＴＭＬホスト、スクリプトホスト、またはこれらの両方と関連するサーバソフトウェアを含むこともできる。すなわち、クライアントとして示されているが、この処理は、サーバのみを含むことも、クライアントとサーバの混合などを含むこともできる。
【００１６】
この処理１４０によると、サーバソフトウェア１４４を含むサーバは、１または複数のリソースに対する要求をクライアントソフトウェア１５４から受信する。すると、サーバソフトウェア１４４は、例えば、この要求に応答してコードを提供する手続きを実行する。サーバソフトウェア１４４は、コードを提供する代わりに、またはこれに加えて、コード以外のデータを提供することもできる。クライアントはこのコードを受信し、クライアントソフトウェア１５４は、このコードを使用して、例えば、ユーザスクリーン上に表示するためのフレームを生成する。サーバソフトウェア１４４がコード以外のデータを提供する場合には、クライアントソフトウェア１５４はそのデータを使用する。
【００１７】
このコードはマークアップ言語、例えばＨＴＭＬ（ハイパーテクストマークアップ言語）にて書かれているコードを含み、クライアントソフトウェア１５４はウェブブラウザソフトウェアであるような例について考える。ブラウザソフトウェア１５４のＨＴＭＬホスト１５６は、ＨＴＭＬパーサーを含み、したがって、ページ（例えば、ドキュメント）がこのブラウザによってアクセスされると、このＨＴＭＬパーサーは、このコード（例えば、通常はファイルの形式）を読み、このコード内に現れるＨＴＭＬタグからエレメントを生成する。例えば、ＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ（登録商標）ブラウザソフトウェア（Ｍｉｃｒｏｓoｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ，  Ｒｅｄｍｏｎｄ，  ＷＡ）は、ＨＴＭＬパージングおよびレンダリングを実行する「Ｍｓｈｔｍｌ．ｄｌｌ」なるコンポーネントを含み、これは、ＨＴＭＬドキュメントを動的ＨＴＭＬオブジェクトモデル（Ｄｙｎａｍｉｃ  ＨＴＭＬ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）を通じて表示する。このコンポーネントは、１または複数のスクリプティングエンジン、仮想マシン、ＡＣＴＩＶＥＸ（登録商標）コントロール、プラグ・イン、およびロードされたＨＴＭＬドキュメント内において参照されることがある他のオブジェクト（例えば、コード／データ）をホストすることができる。
【００１８】
処理１４０によると、このコードはスクリプトを含む。例えば、翻訳されたオブジェクトベースのスクリプティング言語であるＪＳｃｒｉｐｔ言語を用いることも、または他のスクリプト言語を用いることもできる。このようなスクリプトは、通常は、スクリプトインタプリタすなわち「ホスト（ｈｏｓｔ）」（例えば、スクリプトホスト１５８）に依存する。Ｊｓｃｒｉｐｔスクリプトに対するホストの例としては、アクティブサーバページ、Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）およびＷＩＮＤＯＷＳ（登録商標）スクリプトホストが含まれる。ここでも、コードについて言及されたが、コードの代わりに、またはコードと共にデータを提供してもよい。
【００１９】
図２は、処理１４０のさまざまな特徴を含む例示的な処理２４０を示すが、しかしながら、ここでは例示的な免疫付与能力２６４、２６８が含まれている。この例においては、この免疫付与コンポーネント２６４、２６８は、クライアントソフトウェア１５４が受け取る前に、コード、データ、またはコードとデータに作動する。他の幾つかの例においては、免疫付与コンポーネントは、クライアントソフトウェアの一部でもよい。処理内におけるこのような例示的な免疫付与コンポーネントに対する位置の選択は、さまざまな要因に依存する。例えば、イントラネット（例えば、ネットワーク１２４）を備えた組織の場合は、このような免疫付与コンポーネントを、保守、セキュリティ、効率などのために、ファイアウォールまたはゲートウェイサーバ（例えば、サーバ１１２）に配置するよう選択してもよい。
【００２０】
図２の例および他のさまざまな例においては、「コード＋／データ＋」なる表現は、変換された（すなわち、免疫付与された）コード、データ、またはコードおよびデータを示し、全体を通じて「コード／データ」なる表現は、コード、データまたはコードおよびデータを示す。変換されたまたは免疫付与されたコード／データには、１または複数のソフトウェア脆弱性（例えば、ブラウザソフトウェアの脆弱性）につけこむ危険性について判断するためにチェックされているコード／データ、このようなチェックを（例えば、ランタイムにおいて、またはランタイムの前に）実行するように動作する追加のコードを注入されているコード／データ、またはランタイムにおける悪意のあるコードの実行を阻止することを目的とする追加のコードを注入されているコード／データが含まれる。ここでも、一般的には、この免疫付与または変換の処理は、通常は、コードを受信された情報（例えば、コード、データまたはコードおよびデータ）内に挿入したり、これと関連付けること、または受信された情報の修正する（例えば、変更、削除などを行う）ことを含み、この結果としてのコード／データは、免疫付与されたまたは変換されたコード／データ（例えば、コード＋／データ＋）と呼ばれる。
【００２１】
図３は、ソフトウェアサービスの既知の脆弱性につけこまれる危険性を低減または除去するために、情報を変換するまたは「免疫付与（ｉｍｍｕｎｉｚｅ）」する例示的な方法を示す。受信ブロック３０４は、要求に応答して情報を受信するが、ここでは、この受信された情報は、ソフトウェアサービス（例えば、ブラウザソフトウェアサービス）によって消費される。例えば、この受信された情報は、ウェブブラウザソフトウェアによってユーザのコンピュータモニタ上にウェブページを表示するために用いられるコード、データまたはコードおよびデータであり得る。受信ブロック３０４は、情報を、例えば、サーバから、ユーザまたは他のエンティティによる要求に応答して受信する。
【００２２】
変換ブロック３０８は、受信された情報を変換することで変換された情報を生成するが、ここでこの変換は、受信された情報を、受信された情報が有するソフトウェアサービスの既知の脆弱性につけこむ能力が低減または除去されるように変換する。伝送または送信ブロック３１２は、この変換された情報を、例えば、その情報を要求したエンティティに送信する。他の幾つかの例においては、この変換されたまたは「免疫付与（ｉｍｍｕｎｉｚｅｄ）」された情報は、その要求を行ったのとは異なる他のエンティティに向けてもよい（例えば、電子メール免疫付与サービスは、この免疫付与されたコードを、コードを要求したエンティティに代わって別の１つのまたは複数のエンティティに送信するように動作する）。
【００２３】
１つの例示的な方法は、スクリプトを含むＨＴＭＬコードを受信することと、このＨＴＭＬコード内にフックを挿入することを含み、ここでこのフックは、ランタイムイベントに応答して、そのスクリプトによるブラウザソフトウェアの脆弱性につけこまれることを阻止するための動作を呼び出す。このような例においては、フックをＨＴＭＬコード内に挿入するステップは、そのコードに免疫を付与するように動作する。もしこのような例示的な方法が、（例えば、受信されたコードを消費する）エンドユーザではないコンピュータ（例えば、サーバ）上で実行される場合には、この例示的な方法は、更に、この免疫付与されたコードを意図された受信者（例えば、クライアント）に送る。
【００２４】
さまざまな例において、免疫付与されたデータは、ブラウザソフトウェアサービスのようなソフトウェアサービスの１または複数の既知の脆弱性につけこむことを防止するための論理を有する、挿入された、または関連付けられたコードを含む。
【００２５】
図４は、処理１４０のさまざまな特徴を含む例示的な処理４４０を示すが、しかしながら、ここでは、信頼性能力４６２、４６４および例示的な免疫付与２６８が含まれている。これら信頼性能力４６２、４６４は、例えば、ＵＲＬなどと関連するリソースなどに指定された信頼性のレベルに従って作動することができる。信頼性コンポーネント４６２は、ＵＲＬまたは他のリソース識別子を受信し、そのリソースに対する信頼性のレベルを、例えば、関連するテーブルまたは他の情報を用いて決定する。
【００２６】
この例示的な処理４４０においては、クライアントソフトウェア１５４は初期のＵＲＬを送信させる。信頼性コンポーネント４６２はこのＵＲＬを受信し、これが信頼できるＵＲＬであると判断する。信頼できるＵＲＬであるために、このリソースからのコード／データの免疫付与は必要とされず、このコード／データは、クライアントソフトウェア１５４に、サーバソフトウェア１４４によって送られたまま通される。しかしながら、クライアントソフトウェア１５４によってコードが実行され、またはこのデータが使用された時点で、例えば、別のリソースからのコード／データ（つまり、情報）を要求するこれに続く要求が送られることがある。この同一の信頼性コンポーネント４６２を用いることも、別の信頼性コンポーネント４６４を用いることもできる。
【００２７】
この例示的な処理４４０においては、信頼性コンポーネント４６４は、そのＵＲＬは不誠実なまたは信頼できないＵＲＬであると判断する。この判断に応答して、免疫付与コンポーネント２６８は、そのリソースから送られる任意のコード／データを受信する。この例においては、（例えば、サーバソフトウェア１４８の実行を介して）送られるコード／データは、クライアントソフトウェア１５４が受信する前に免疫付与コンポーネント２６８が受信する。この免疫付与コンポーネント２６８は、このコード／データを変換（すなわち、免疫付与）することで、免疫付与されたコード／データ（すなわち、コード＋／データ＋）を生成する。クライアントソフトウェア１５４が、次に、この免疫付与されたコード／データを受信する。ここでも、免疫付与したコード／データとしては、データと、そのデータがソフトウェアサービスと関連する脆弱性につけこむことを阻止するように動作する挿入され、または関連付けられたコードを含む。コードまたはデータの修正も１つの可能な変換メカニズムである。
【００２８】
既に述べたように、処理内におけるこのような例示的な免疫付与コンポーネントの位置の選択は、さまざまな要因に依存する。例えば、イントラネット（例えば、ネットワーク１２４）を有する組織の場合は、このような免疫付与コンポーネントを、保守、セキュリティ、効率などの目的のために、ファイアウォールまたはゲートウェイサーバ（例えば、１１２）上に配置するように選択してもよい。同一の要因が信頼性コンポーネントにも適用できる。更に、これら２つのコンポーネント（つまり、免疫付与コンポーネントおよび信頼性コンポーネント）は、必要に応じて、クライアント、サーバなどに実装可能なソフトウェアパッケージの一部であってもよい。
【００２９】
図５は免疫付与されたコード／データを送信するための例示的な方法５００を示す。ここでも、もし、例えば、免疫付与されたコンポーネントが、そのコード／データを使用することを意図するクライアント上に存在するときは、送信は単にこのコード／データを適当なクライアントソフトウェアに提供する。
【００３０】
この例示的な方法５００によると、受信ブロック５０４は、ＵＲＬをコード／データに対する要求の一部として受信する。判定ブロック５０８は、そのＵＲＬが信頼できるＵＲＬであるか否かを、例えば、検索テーブル５１２を用いて判定する。判定ブロック５０８が、そのＵＲＬが信頼できるＵＲＬであると判断したときは、送信ブロック５１６が動作し、そのＵＲＬと関連するリソースからのコード／データを要求者またはそのコード／データが向けられている他のエンティティに送る。
【００３１】
判定ブロック５０８が、そのＵＲＬは信頼できるリソースに相当しないものと判断したときは、免疫付与ブロック５２０が動作してそのコード／データに免疫を付与し、免疫付与されたコード／データを生成し、送信ブロック５２４が動作してこの免疫付与されたコード／データを送信する。
【００３２】
図６は、免疫付与された情報（例えば、コード／データ）を送信するための例示的な方法６００を示す。この例示的な方法６００によると、受信ブロック６０４はあるリソースから情報を受信する。判定ブロック６０８は、受信された情報が１または複数のソフトウェア脆弱性につけこむことを企てているか否かを、例えば、オプションとして、一部、検索テーブル６１２に依存することで、判断する。もし判定ブロック６０８が、その情報は、既知の脆弱性につけこむどのような特徴も含まないと判断したときは、送信ブロック６１６が動作し、その情報を送信する。このような情報は、これが既知の脆弱性につけこむ能力に関してチェックされているために、免疫付与された情報であるとみなす。このような状況においては、この情報は、さまざまな脆弱性への攻撃は起こりそうもないこと、またはその情報は免疫付与処理にてチェックされていることを示す指標（例えば、コードまたはデータのセグメント）を含むように変換される。
【００３３】
既に述べたように、悪意のあるコードがセットアップまたはランタイムにおいて、ソフトウェア脆弱性に対して攻撃してくることがある。例えば、悪意あるコードが、追加のコードを要求するように作動するＵＲＬを、クライアントソフトウェアに送信させることがある。このような後続の呼は、あるタイプの脆弱性攻撃であるとみなされ、このため、判定ブロック６０８は、脆弱性につけこまれることの危険性が存在すると判断するかもしれない。このようにして、例示的な免疫付与手続きはコード、または別の指標を挿入してそのコードが追加コード／データへの要求を企てることを防止するか、もしくはこの事実を示唆する。このような追加のコード／データもまだその信頼性が判断されていない、もしくは１または複数のソフトウェア脆弱性に攻撃する危険性について判断されていない状態にある。
【００３４】
判定ブロック６０８が、受信された情報は既知の脆弱性につけこむ１または複数の特徴を含むと判断したときは、免疫付与ブロック６２０が動作して受信された情報に免疫を付与し、免疫付与された情報を生成し、送信ブロック６２４が動作してこの免疫付与された情報を送信する。
【００３５】
既に述べたように、例示的な方法は、受信された情報のチェックより前に（例えば、判定ブロック６０８より前に）実行し、受信された情報を変換してその受信された情報による１または複数のソフトウェア脆弱性につけこむ危険性を低減または除去することもできる。例えば、再びこの例示的方法６００を参照すると、このような場合には、ブロック６０４、６２０および６２４が動作し、免疫付与された情報を送信する。
【００３６】
図７は、１または複数の脆弱性を解決するためのコードをコード／データに挿入、付加、またはこれと関連付け、これによってこのような１または複数の脆弱性につけこまれる危険性を除去または低減する例示的な処理７００を示す。この例においては、既知の脆弱性が存在し、少なくともこれらの幾つかの既知の脆弱性に対処するためのコードが存在する。したがって、この例示的な方法７００はこのような知識、例えば、ローカルにまたは遠隔に、別個にまたは一緒に、格納されているこのような知識に依存する。このような一例を説明すると、この例示的な処理７００は、既知の脆弱性の情報テーブル７１６と、免疫付与コード７１２のさまざまなセグメントを含み、ここでこれらセグメントは、（例えば、情報テーブル７１６を通じて）１または複数の既知の脆弱性と対応する。
【００３７】
例示的処理７００によると、コード／データ７０４は、オプションとして既知の脆弱性（例えば、Ｖ１、Ｖ２、Ｖ３、Ｖ４）のテーブル７１６に依存する脆弱性チェック７０８の対象となる。このチェック７０８に基づいて、コード７１２のさまざまなセグメントが、特定の脆弱性または一群の脆弱性を解決するのに利用可能となる。例えば、コード７１２のセグメントは、Ｖ１に対するコード７２１、Ｖ２に対するコード７２３およびＶ３に対するコード７２５を含む。脆弱性Ｖ４は対応するコードを含まないこともある。例えば、脆弱性Ｖ４はコードを使用しては解決することができない脆弱性に対応することも、または、「修正（ｆｉｘｅｄ）」された場合にその受信されたコード／データが意図されていた目的のために動作可能となるような脆弱性に対応することもあり得る。
【００３８】
コード７１２およびテーブル７１６のセグメントは、チェック７０８との関連でローカルに設けることも、または保守、セキュリティなどの目的で遠隔地に設けることもできる。例示的処理７００においては、コード／データ７０４は、脆弱性Ｖ２を含み、従って、免疫付与コードの関連付けブロック７１８は、Ｖ２に対するコードをコード／データ７０４と関連付け、これにより免疫付与されたコード／データ７２０を形成する。
【００３９】
免疫付与コードの関連付けブロック７１８は、オプションとして、例えば、１または複数のフックを受信されたコード内に挿入するように動作することも、またはフックを受信されたデータと関連付けるように動作することもできる。このようなフックは、ソフトウェア脆弱性に対する実際のまたは潜在的な攻撃に対処するように動作するローカル呼または遠隔呼を発生させてもよい。例示的なフックは、関数または他の符号化された動作を呼び出すが、ここでは、この関数または他の符号化された動作に対するコードがコード／データ７０４と関連付けられる。例えば、この関数または他の符号化された動作に対するコードがコード／データ７０４に挿入されてもよい。
【００４０】
ブラウザソフトウェアと関連する脆弱性に対しては、例示的な免疫付与コンポーネント（つまり、変換コンポーネント）は、そのブラウザのタイプを決定し、次に、例えば、テーブル（例えば、テーブル７１６）を用いて、そのタイプのブラウザと関連する特定の脆弱性を決定する。
【００４１】
例示的な免疫付与コンポーネントは、オプションとして、疑わしいコードまたはそのセグメントを、ブラウザ脆弱性と関連する特定のコードに対してテストすることができるブラウザシミュレーションソフトウェアを含む。
【００４２】
マークアップ言語に依存するウェブページとの関連では、このようなページは、静的ＨＴＭＬページまたは動的ＨＴＭＬページを含むこともある。一般に、ユーザは、ＵＲＬをタイピングしたり、ＵＲＬを示すリンクをクリックすることなどにより、静的ページを要求する。前述のように、ＵＲＬ要求がサーバまたは他のコンピュータに送られると、この要求に応答して、静的ＨＴＭＬページ（例えば、ＨＴＭＬ符号化されたドキュメント）を送り返す。
【００４３】
動的ページは通常はユーザの要求に応答して生成される。例えば、ブラウザソフトウェアは、ユーザが記入または選択するテキストボックス、メニュー、チェックボックス等を有するページを提示することで情報を収集するように動作する。次に、フォームからのデータは、例えば、サーバに送られ、サーバはこのデータを、このデータを処理するためにスクリプトもしくはアプリケーションに通し、またはデータベース等に照会し、データを投稿したりする。そしてサーバはその結果をＨＴＭＬページ内でユーザに返信する。
【００４４】
ここで言及されるさまざまなスクリプトは、一般には、ウェブブラウザソフトウェアに関するが、他のスクリプト、例えば、ＳＱＬおよびオブジェクト指向のプログラミング言語、例えば、ＶＩＳＵＡＬ  ＢＡＳＩＣ（登録商標）言語などと関連する他のスクリプトも存在する。ここで説明されるさまざまな例示的な技術は、そのようなスクリプトが使用されている場合には、疑わしいコードに適用することもできる。
【００４５】
図２−７のさまざまな例は、このような変換または「免疫付与（ｉｍｍｕｎｉｚａｔｉｏｎ）」技術の一般的な使用について説明するものである。以下では、さまざまなソフトウェア脆弱性につけこまれる危険性を除去または軽減する免疫付与技術のより具体的な例について説明し、脆弱性が継続的に発生していることを認識する。
【００４６】
ここで説明される例示的な免疫付与処理から利益を得ることができるさまざまなシナリオが存在する。１つのシナリオは、潜在的に悪意のあるＳＲＣ属性値（例えば、ＳＲＣ＝ｆｉｌｅ：／／ＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢ）を有する＜ＦＲＡＭＥ＞タグを含む疑わしいコードを含む。長いＳＲＣ属性値は、既知のソフトウェア脆弱性（例えば、バッファーのオーバフローの危険性）と関連することが知られている。１つの例示的な免疫付与コンポーネント（例えば、判定ブロック６０８または脆弱性チェックブロック７０８）は、「長い（ｌｏｎｇ）」属性値（例えば、ファイル名）をある既知のソフトウェア脆弱性と関連していると認識し、コード／データを、実行の際に、それがこのような脆弱性につけこもうと企てているか否かをチェックすることができる。このシナリオにおいては、免疫付与コンポーネントは、その値を除去、その値を変更、そのコードの実行の防止、ユーザへの警告等を、その脆弱性につけこまれることを防止するために行う。
【００４７】
例えば、ＨＴＭＬトラフィックを＜ＦＲＡＭＥ＞タグが存在しないかスキャニンする１つの例示的な免疫付与コンポーネント（例えば、２６４、２６８）を含むファイアウォールとしてのサーバ１１２を考える。免疫付与コンポーネントによって見つけられた各タグに対して、長いＳＲＣ属性が存在しないかチェックがなされる。見つかったときは、この免疫付与コンポーネントは修正動作を呼び出し、これは奇形のトラフィックをブロックしたり、コードを変更したりする。
【００４８】
例示的なファイアウォールサーバ（例えば、サーバ１１２）またはルーティングデバイスは、ファイアウォールサーバがリソース（例えば、サーバ１０４、１０８）からネットワーク（例えば、ネットワーク１２０）を介してコード／データ（例えば、情報）を受信すること、およびコード／データをクライアントコンピュータ（例えば、クライアントコンピュータ１１４）に送ることを可能にするソフトウェア（例えば、ソフトウェア１４４、１４８）およびこのコード／データを、クライアントコンピュータ上のブラウザソフトウェア（例えば、ソフトウェア１５４）の脆弱性につけこまれることを阻止するために、免疫を付与するための免疫付与コンポーネント（例えば、コンポーネント２６４、２６８などのコンポーネント）を含む。このような例においては、ファイアウォールサーバのソフトウェアは、更に、ファイアウォールサーバが、クライアントコンピュータからＵＲＬを受信することを可能にするが、ここでこのＵＲＬはこのネットワークを介してアクセス可能なリソースに対応する。さらに、このような例示的なファイアウォールは、そのＵＲＬが信頼できるリソースと関連するか否かを判定し、そして、この判定の少なくとも一部分に基づいて、そのコード／データをそのリソースから受信するか否か、またはそのリソースから受信されるコード／データに免疫付与コンポーネントを用いて免疫を付与するか否かを決定する、信頼性コンポーネント（例えば、コンポーネント４６２、４６４の１つ）を含む。
【００４９】
図８は、疑わしいコード、例えば、スクリプトを含む、疑わしいコード８３０を伴う例示的なシナリオ８００を示す。上述の疑わしいコード／データ（つまり、長いＳＲＣ属性値）とは対照的に、この疑わしいコード８３０に対する脆弱性につけこまれる危険性は、スクリプトと関連する。このシナリオにおいては、悪意のあるまたは問題のあるＨＴＭＬタグは、そのページのＨＴＭＬコード内にあるのではなく、ランタイムにおいて、例えば、クライアント上で、このＨＴＭＬページ内部のスクリプトによって生成される。一般に、どのようなスクリプトが、実行の際に、このようなスクリプトと関連するブラウザの脆弱性を成功裏につけこむ機会を増加させるかを知ることは困難である。
【００５０】
疑いのあるコード８３０を変換または「免疫付与（ｉｍｍｕｎｉｚｅ）」するためには、例示的な免疫付与コードセグメント８５０が、免疫付与コンポーネントにて生成または選択される（選択に関しては、例えば処理７００を参照）。この例示的なコード８５０は、（例えば、クライアント側のソフトウェアと関連する）脆弱性の認識を阻止するように動作する例示的な免疫付与関数８５４「ａｂｃｄ（）」を定義するスクリプトを含む。この特定の例においては、この関数ａｂｃｄ（）は、＜ＦＲＡＭＥ＞タグ属性を検出するため、およびその属性の値がある特定の長さ（例えば、２５文字）を超えるか否かを調べるために用いられる変数「ＴｈｅＥｌｅｍｅｎｔ」を含む。この関数ａｂｃｄ（）は、変数長の全体（つまり、ｓｔｒｉｎｇ＝”＜ＦＲＡＭＥ  ＳＲＣ＝ｆiｌｅ：／／ＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢＢ＞”）を調べることも、または変数の一部のみを考慮することもできる。例えば、関数ａｂｃｄ（）はＳＲＣ属性値のみを考慮する。勿論、例示的な免疫付与コードセグメントはこの両方を考慮してもよい。
【００５１】
この例示的なシナリオ８００においては、例示的な免疫付与フック８７４が疑わしいコード８３０内に、例示的な免疫付与されたコード８７０を生成するために挿入される。このフック８７４は、例示的な免疫付与関数８５４をこのコード８７０内の「ｏｎｐｒｏｐｅｒｔｙｃｈａｎｇｅ」に従って呼び出す動作をする。したがって、この例示的な免疫付与されたコード８７０は、例示的な免疫付与関数８５４を呼び出す例示的なフック８７４を含む。この関数８５４に対するコードセグメント８５０は、脆弱なコード８３０（例えば、図７の免疫付与されたコード７２０）に付加されてもよい。
【００５２】
図３との関連で既に述べたように、この例示的な方法３００は、スクリプトを含むＨＴＭＬコードを受信することと、フックをこのＨＴＭＬコード内に挿入することとを含み、ここでこのフックはランタイムエベントに応答し、スクリプトによるブラウザソフトウェアの脆弱性につけこむことを阻止するための動作を呼び出す。したがって、例示的なシナリオ８００は、疑わしいコード８３０を受信することと、例示的なフック８７４を疑わしいコード８３０内に挿入することとを含むこのような例示的な方法の実装であるとみなすこともできる。この例示的なフック８７４は、ランタイムイベントに対応し、疑わしいコード８３０内のスクリプトがブラウザソフトウェアの脆弱性につけこむように動作するか否かを調べることができる関数を呼び出す動作をする。
【００５３】
フックが脆弱性を解決するためにローカルまたは遠隔に置かれたコードを必要とする他の例示的なシナリオも存在する。例えば、１つの例示的なフックは、クライアントがファイアウォールサーバを呼び出すように仕向け、するとファイアウォールサーバは例示的な免疫付与コードをクライアントに送る。さまざまな例示的フックおよび関連する免疫付与コードは、該当するときは、イベント処理コードとしてみなしてもよい。
【００５４】
ここに説明されるさまざまな例示的技術はコンピュータを既知の脆弱性から、ウェブページに最小限の妨害で保護するように動作し、したがってこのような技術は、既知の脆弱性に対して特有であり、従って焦点を定めた方法で動作する。
【００５５】
さまざまな例示的な技術を、計算の負担を、例えば、ファイアウォールサーバのようなサーバではなく、クライアントコンピュータにシフトするようなやり方にて実装することもできる。この例示的なシナリオ８００においては、コード８３０内のスクリプトを解析する必要性は回避され、コードはそのコードがスクリプトを含むという知識に基づいて免疫付与される。さまざまな例示的な技術は、サンドボキシングと比較して、このような技術ではクライアントが状態を知っていること、およびクライアントコンピュータ上へのユーザ入力を考慮するために有利となりうる
る。
【００５６】
この例示的なシナリオ８００は、ＨＴＭＬコード化されたウェブページを、これがファイアウォールまたはルータデバイスを通過するときに、このＨＴＭＬコードに追加のスクリプトを注入することで、免疫付与することを伴う。前述のように、このスクリプトはクライアントコンピュータ上で実行し、これを既知の脆弱性から保護してもよい。
【００５７】
さまざまな例において、挿入された例示的な免疫付与スクリプトは、エベント処理コードを導入し、これが新たなＨＴＭＬ命令（または他の命令）がランタイムに生成されたとき実行される。例えば、新たなＨＴＭＬが生成され、ページ内に注入されると、この免疫付与スクリプトは、これが既知の脆弱性を攻撃することがないことを検証した後で始めてその継続を許可する。もしそのスクリプトが攻撃をしかけることを企てているときは、実行は阻止され、攻撃が企てられていないときは、そのページは引き続き妨害されることなく動作する。
【００５８】
さまざまな例示的な技術は、オプションとして、例えば、エベント捕捉またはイベント処理スクリプトに加えて、妥当性チェックの使用を含む。妥当性チェックはページに対してスクリプトの２、３行目毎に含めてよい。このような妥当性のチェックは、適当であるときは、単独で用いてもよい。例えば、例示的な免疫付与コンポーネントは、所与の特定情況においてはこのチェックのみで十分であると判断する場合もある。
【００５９】
さまざまな例示的な方法は、フックを疑わしいコード内に挿入することと、ランタイム中に悪意のある行為を阻止することを含む。例えば、ファイアウォールは、エベント処理スクリプトを疑わしいコード内に挿入するように動作し、クライアントソフトウェアは、ランタイムにおいてその疑わしいコードの悪意ある行為を阻止するためにこのスクリプトを使用する。
【００６０】
動的ＨＴＭＬ（ＤＨＴＭＬ）にはさまざまな例示的方法が適用される。この動的ＨＴＭＬは、所与のエレメントを修正するＨＴＭＬ属性を変更することができるスクリプトを書くことを可能にする。これらの属性は、ｉｍｇまたはｉｆｒａｍｅエレメントに関するＳＲＣ属性や、ｄｉｖエレメントに対するスタイル属性を含む。
【００６１】
例示的なコンピューティング環境
これらさまざまな例示的な技術は異なるコンピュータ環境で実装することができる。図９に示されるコンピュータ環境はコンピュータ環境の単に一例に過ぎず、使用の範囲、または使用に適するコンピュータおよびネットワークアーキテクチャの機能に対する制約を示唆することを意図するものではない。さらに、コンピュータ環境は、この例示的なコンピュータ環境内に示されるコンポーネントの任意の１つまたは組み合わせと関連するいかなる依存性または要件も有するものではないと解されるべきである。
【００６２】
図９は、さまざまな例示的な方法が実装される１つの適当なコンピューティングシステム環境９００の例を示す。さまざまな例示的なデバイスまたはシステムは、この例示的な環境９００の特徴の任意の幾つかを含むことができる。このコンピューティングシステム環境９００は、適当なコンピューティング環境の単に一例にすぎず、本発明の使用の範囲または機能に対する制約を示すことを意図するものではない。さらに、コンピュータ環境９００は、この例示的な動作環境９００内に示されるコンポーネントの任意の１つまたは組み合わせと関連するいかなる依存性または要件も有するものではないと解されるべきである。
【００６３】
さまざまな例示的な方法は、無数の他の汎用または専用コンピューティングシステム環境または構成を用いても動作可能である。実装または使用のために適する既知のコンピューティングシステム、環境、および／または構成には、これに制限されるものではないが、パーソナルコンピュータ、サーバコンピュータ、携帯、またはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、大型汎用コンピュータ、上述の任意のシステムまたはデバイスを含む分散型コンピューティング環境などが含まれる。
【００６４】
さまざまな例示的な方法、用途などが、コンピュータにて実行可能な命令の一般的コンテクスト内、例えば、コンピュータにて実行されるプログラムモジュールのコンテクスト内で説明される。一般には、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データタイプを実装する、ルーティーン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。さまざまな例示的な方法は、更に、タスクは通信ネットワークまたは他の通信（例えば、赤外線等）を通じて結ばれた遠隔処理デバイスにて実行される分散型コンピューティング環境内で実施することもできる。分散型コンピューティング環境内においては、プログラムモジュールは、メモリ格納デバイスを含むローカルおよび遠隔コンピュータ記憶媒体の両方に配置することもできる。
【００６５】
図９を参照して、これらさまざまな例示的な方法を実装するための１つの例示的なシステムは、１つの汎用コンピューティングデバイスをコンピュータ９１０の形態にて含む。コンピュータ９１０のコンポーネントとしては、これに制限されるものではないが、処理ユニット９２０、システムメモリ９３０、およびシステムメモリ９３０を含むさまざまなシステムコンポーネントを処理ユニット９２０に結合するシステムバス９２１が含まれる。システムバス９２１は、メモリバスまたはメモリコントローラ、周辺バス、および多様なバスアーキテクチャのいずれかを使用するローカルバスが含まれる幾つかのタイプのバス構造のいずれであってもよい。例示として、このようなバスアーキテクチャには、これに制限するものではないが、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＡＣ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ  （Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびＭｅｓｓａｎｉｎｅバスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００６６】
コンピュータ９１０は、典型的には、多様なコンピュータ可読記録媒体を含む。コンピュータ可読記録媒体は、コンピュータ９１０にてアクセスすることができる利用可能な媒体のいずれであっても良く、これには、揮発性および不揮発性媒体、取り外し可能な媒体および取り外し不能な媒体の両方が含まれる。例示として、コンピュータ可読記録媒体には、これに制限されるものではないが、コンピュータ記憶媒体および通信媒体が含まれる。コンピュータ記憶媒体には、揮発性および不揮発性、取り外し可能取り外し不能な媒体の両方が含まれ、これらは、情報、例えば、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを格納するための任意の方法または技術にて実装される。コンピュータ記憶媒体には、これに制限されるものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光学ディスクメモリ、磁気カセット、磁気テープ、磁気ディスクメモリもしくは他の磁気メモリデバイス、または所望の情報を格納するために使用することができ、コンピュータ９１０にてアクセスすることができる任意の他の媒体が含まれる。通信媒体は、典型的には、コンピュータ可読命令、データ構造、プログラムモジュール、または変調されたデータ信号、例えば、搬送波または他の輸送メカニズム内の他のデータを具現化し、任意の情報配信媒体を含む。「変調されたデータ信号（ｍｏｄｕｌａｔｅｄ  ｄａｔａ  ｓｉｇｎａｌ）」なる用語は、その特徴の１または複数がその信号内に情報を符号化するようなやり方にて設定または変化されている信号を意味する。一例として、通信媒体には、これに制限されるものではないが、有線媒体、例えば、有線ネットワークもしくは直接に結線された接続、および無線媒体、例えば、音響、ＲＦ、赤外線および他の無線媒体が含まれる。上述の任意の組合せも、コンピュータ可読記録媒体の範囲内に含まれるとみなされるべきである。
【００６７】
システムメモリ９３０は、コンピュータ記憶媒体を揮発性および／または不揮発性メモリ、例えば、読み出し専用メモリ（ＲＯＭ）９３１およびランダムアクセスメモリ（ＲＡＭ）９３２の形態にて含む。ＲＯＭ９３１内には、典型的には、情報をコンピュータ９１０内の要素間で、例えばスタートアップ時に転送することを助ける基本入／出力システム９３３（ＢＩＯＳ）が格納される。ＲＡＭ９３２は、典型的には、処理ユニット９２０に直ちにアクセスすることができる、および／または処理ユニット９２０によって現在操作されているデータおよび／またはプログラムモジュールを含む。例示として、これに制限されるものではないが、図９は、オペレーティングシステム９３４、アプリケーションプログラム９３５、他のプログラムモジュール９３６、およびプログラムデータ９３７を含む。
【００６８】
コンピュータ９１０は他の取り外し可能な／取り外し不能な、揮発性／不揮発性コンピュータ記憶媒体も含む。単に例示として、図９は、取り外し不能な、不揮発性磁気媒体の読み出しまたは書き込みを行うハードディスクドライブ９４１、取り外し可能な、不揮発性磁気ディスク９５２の読み出しまたは書き込みを行う磁気ディスクドライブ９５１、および取り外し可能な、不揮発性光ディスク９５６、例えば、ＣＤ  ＲＯＭまたは他の光学媒体（例えば、ＤＶＤ等）の読み出しまたは書き込みを行う光学ディスクドライブ９５５を示す。この例示的な動作環境内で用いることができる他の取り外し可能な／取り外し不能な、揮発性／不揮発性コンピュータ記憶媒体としては、これに制限されるものではないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ９４１が典型的にはシステムバス９２１にデータメディアインターフェース、例えばインターフェース９４０を通じて接続され、磁気ディスクドライブ９５１および光ディスクドライブ９５５は典型的にはシステムバス９２１に、オプションとしては取り外し可能なメモリインターフェースとされるデータメディアインターフェースを通じて接続される。この特定の例を説明する目的に対しては、磁気ディスクドライブ９５１および光ディスクドライブ９５５は、データメディアインターフェース９４０を使用する。
【００６９】
上で説明され、図９に示される、ドライブおよびこれらと関連するコンピュータ記憶媒体は、コンピュータ９１０に対する、コンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータの格納場所を提供する。図９において、例えば、ハードディスクドライブ９４１は、オペレーティングシステム９４４、アプリケーションプログラム９４５、他のプログラムモジュール９４６、およびプログラムデータ９４７を格納するように示されている。これらコンポーネントは、オペレーティングシステム９３４、アプリケーションプログラム９３５、他のプログラムモジュール９３６，およびプログラムデータ９３７と、同一のコンポーネントであっても、異なるコンポーネントであってもよいことに注意する。ここでは、オペレーティングシステム９４４、アプリケーションプログラム９４５、他のプログラムモジュール９４６、およびプログラムデータ９４７には、少なくとも、これらは異なるコピーであることを示すために異なる参照符号が与えられていることに注意する。ユーザはコマンドおよび情報をコンピュータ９１０内に、例えば、一般にマウス、トラックボール、またはタッチパッドと呼ばれるキーボード９６２およびポインティングデバイス９６１などの入力デバイスを通じて入力する。他の入力デバイス（図示せず）として、マイクロホーン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、等を用いてもよい。これらおよび他の入力デバイスは、通常は、処理ユニット９２０にシステムバス９２１に結合されているユーザ入力インターフェース９６０を通じて接続されるが、他のインターフェースおよびバス構造、例えば、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）にて接続してもよい。モニタ９９１または他のタイプのディスプレイデバイスもシステムバス６２１に、インターフェース、例えば、ビデオインターフェース９９０を介して接続される。モニタ９９１に加えて、コンピュータは、更に、他の周辺出力デバイス、例えば、スピーカおよびプリンタを含んでもよく、これらは出力周辺機器インターフェース９９５を通じて接続される。
【００７０】
コンピュータ９１０は、１または複数の遠隔コンピュータ、例えば、遠隔コンピュータ９８０への論理接続を使用してネットワーク化された環境内にて動作することもできる。遠隔コンピュータ９８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであっても良く、典型的には、コンピュータ９１０との関連で上述した特徴の多くまたは全てを含む。図９に示される論理的接続は、ローカルエリアネットワーク（ＬＡＮ）９７１およびワイドエリアネットワーク（ＷＡＮ）９７３を含むが、しかしながら、他のネットワークを含んでもよい。このようなネットワーキング環境は、事務所や企業レベルのコンピュータネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００７１】
ＬＡＮネットワーキング環境内で用いられるときは、コンピュータ９１０はＬＡＮ９７１にネットワークインターフェースまたはアダプタ９７０を通じて接続される。ＷＡＮネットワーキング環境内で用いられるときは、コンピュータ９１０は、典型的には、ＷＡＮ９７３、例えば、インターネットを通じて通信を確立するためのモデム９７２または他の手段を含む。モデム９７２は、これは内部に配置されるときもまたは外部に配置されるときもあるが、ユーザ入力インターフェース９６０または他の適当なメカニズムを介してシステムバス９２１に接続される。ネットワーク化された環境内においては、コンピュータ９１０との関連で説明されたプログラムモジュール、またはこの一部分は、遠隔記憶デバイスに格納してもよい。例示として、これに制限されるものではないが、図９は、リモートアプリケーションプログラム９８５が遠隔コンピュータ９８０上（例えば、遠隔コンピュータ９８０のメモリ内）に存在するように示す。示されているネットワーク接続は例示であり、これらコンピュータ間に通信リンクを確立するための他の手段を用いることもできる。
【００７２】
さまざまな例示的な方法、デバイス、システムなどが、構造的な特徴および／または方法論的動作に特有の言語で説明されてきたが、添付の特許請求の範囲に記載されている対象は、必ずしも、ここで説明された具体的な特徴および動作に制限されるものではないと解釈されるべきである。むしろ、これら具体的な特徴および動作は、特許請求される対象を実装するための例示的形態として開示されている。
【図面の簡単な説明】
【００７３】
【図１】１または複数のネットワークを介してリソースにアクセスするシステムおよび処理の図である。
【図２】コード/データに免疫を付与するための１または複数の免疫付与コンポーネントを含む例示的な処理の図である。
【図３】ソフトウェア脆弱性への攻撃の危険性を防止または低減するために情報を変換するための１つの例示的な方法の図である。
【図４】あるリソースが信頼できるか否かを判定するための１または複数の信頼性コンポーネントを含む例示的な処理の図である。
【図５】リソースが信頼できるか否かを判定し、これに応答して、そのリソースからのコード/データに免疫を付与するための例示的な方法の図である。
【図６】受信された情報がソフトウェア脆弱性につけこむまたはつけこむことを企てているか否かを判定するための例示的な方法の図である。
【図７】特別なコードを疑わしいコード/データと関連づけて、その疑わしいコード/データがソフトウェアの脆弱性につけこむことを阻止することによってコード／データを変換するための例示的な処理の図である。
【図８】コードに免疫付与するための例示的なシナリオの図である。
【図９】ここで開示されるさまざまな例示的な技術を実装するために用いることができる例示的なコンピューティング環境の図である。
【図１】
2009501392.tif 000003
【図２】
2009501392.tif 000004
【図３】
2009501392.tif 000005
【図４】
2009501392.tif 000006
【図５】
2009501392.tif 000007
【図６】
2009501392.tif 000008
【図７】
2009501392.tif 000009
【図８】
2009501392.tif 000010
【図９】
2009501392.tif 000011
【国際調査報告】
2009501392.tif 000012