(57)【特許請求の範囲】
【請求項１】
ターゲット配備環境についてアプリケーション・コード内のダウングレーダ・コードを評価するための方法であって、
アプリケーション解析メカニズムにより、前記アプリケーション・コードの一部分である前記ダウングレーダ・コードを識別するステップであって、前記ダウングレーダ・コードの出力において、前記ダウングレーダ・コードへの情報入力の機密性を保証するために、前記アプリケーション・コードの情報フローについて操作する、ステップと、
前記アプリケーション解析メカニズムにより、入力文字列に基づいて、前記入力文字列を受信したことに応答して前記ダウングレーダ・コードの出力文字列を生成するステップと、
アプリケーション解析メカニズムにより、ストレージ・システムから、不当文字列パターンの１つまたは複数の集合を取り出すステップであって、前記不当文字列パターンの１つまたは複数の集合のそれぞれが対応する配備環境に関連付けられ、前記不当文字列パターンが、ダウングレーダのセキュリティ目的のための、前記情報フロー内で識別する文字列パターンであるステップと、
前記アプリケーション解析メカニズムにより、前記不当文字列パターンの１つまたは複数の集合および前記出力文字列に基づいて、前記ダウングレーダ・コードが前記ターゲット配備環境と互換性があるかどうかを判別するステップと、
前記アプリケーション解析メカニズムにより、前記判別の結果を示す出力を生成するステップ
を含む、方法。
【請求項２】
前記ダウングレーダ・コードが前記配備環境と互換性があるかどうかを判別するステップが、
前記ダウングレーダ・コードが配備されるかまたは配備される予定の前記ターゲット配備環境を識別するステップと、
前記不当文字列パターンの１つまたは複数の集合、前記出力文字列、および前記ターゲット配備環境の前記識別に基づいて、前記ダウングレーダ・コードが前記配備環境と互換性があるかどうかを判別するステップ
を含む、請求項１記載の方法。
【請求項３】
前記ターゲット配備環境を識別するステップが、前記ターゲット配備環境のユーザ指定を受信するステップを含む、請求項２記載の方法。
【請求項４】
前記ターゲット配備環境を識別するステップが、データ処理システムによって維持された構成情報の解析に基づいて、前記ターゲット配備環境を自動的に決定するステップを含む、請求項２または請求項３記載の方法。
【請求項５】
前記ダウングレーダ・コードが前記ターゲット配備環境と互換性があるかどうかを判別するステップが、
前記ダウングレーダ・コードの前記出力文字列を前記不当文字列パターンの１つまたは複数の集合と比較するステップと、
前記ダウングレーダ・コードの前記出力文字列が一致する前記不当文字列パターンの１つまたは複数の集合に関連する不当文字列パターンを識別するステップ
を含む、請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記ダウングレーダ・コードが前記ターゲット配備環境と互換性があるかどうかを判別するステップが、
前記ダウングレーダ・コードの前記出力文字列が一致する前記不当文字列パターンに関連する対応配備環境を識別するステップと、
前記対応配備環境が前記ターゲット配備環境と一致するかどうかを判別するステップであって、前記対応配備環境が前記ターゲット配備環境と一致する場合に、前記ダウングレーダ・コードが前記ターゲット配備環境と互換性があると判断され、前記対応配備環境が前記ターゲット配備環境と一致しない場合に、前記ダウングレーダ・コードが前記ターゲット配備環境と互換性がないと判断されるステップ
を含む、請求項５記載の方法。
【請求項７】
前記ダウングレーダ・コードの前記出力文字列が一致する前記不当文字列パターンの強度を決定するステップと、
前記ターゲット配備環境に関する前記不当文字列パターンの１つまたは複数の集合に関連するより高い強度の不当文字列パターンが存在するかどうかを判別するステップと、
より高い強度の不当文字列パターンが存在するという判断に応答して、前記ダウングレーダ・コードの前記出力文字列が前記より高い強度の不当文字列パターンと一致するように、前記ダウングレーダ・コードの動作を改善する方法に関する勧告を生成するステップ
をさらに含む、請求項５または請求項６記載の方法。
【請求項８】
前記出力がユーザに送信された通知を含み、前記通知が、前記ダウングレーダ・コードが前記ターゲット配備環境と互換性があるかどうかを識別し、前記勧告をさらに識別する、請求項７記載の方法。
【請求項９】
複数の不当文字列パターンを保管するステップであって、前記複数の不当文字列パターンに関連する不当文字列パターンのそれぞれの集合がダウングレーダ・コードのタイプに関連付けられ、前記アプリケーション・コード内の前記識別されたダウングレーダ・コードのタイプに基づいて、不当文字列パターンの１つまたは複数の集合を取り出すステップ
をさらに含む、請求項１ないし８のいずれかに記載の方法。
【請求項１０】
請求項１〜９の何れか１項に記載の方法の各ステップをコンピュータに実行させる、コンピュータ・プログラム。
【請求項１１】
請求項１０に記載の前記コンピュータ・プログラムを、コンピュータ可読記録媒体に記録した、記録媒体。
【請求項１２】
ターゲット配備環境についてアプリケーション・コード内のダウングレーダ・コードを評価するための装置であって、
請求項１〜９の何れか１項に記載の方法の各ステップを、コンピュータ・ハードウェアによる手段として構成した、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、一般に、改良されたデータ処理装置および方法に関し、より具体的には、セキュリティ・ダウングレーダまたは単純にダウングレーダともいう情報フロー・ダウングレーダ（information flow downgrader）における欠陥（flaw）および非互換性（incompatibility）問題の自動検出のためのメカニズムに関する。
【背景技術】
【０００２】
情報フロー・セキュリティの原理では、情報のいかなる「違法フロー（illicit flow）」もプログラム内で許可されないと規定している。あるフローによって、信頼できない情報が信頼できる計算で使用できるようになる場合（保全性違反）または秘密情報が全体的にまたは部分的に無許可ユーザに暴露できるようになる場合（機密性違反）、そのフローは違法である。「ハイ」が保全性の点で「信頼できないもの」および機密性の点で「秘密のもの」を意味し、「ロー」が保全性の点で「信頼できるもの」および機密性の点で「公共のもの」を意味する場合、「ハイ」から「ロー」への情報フローが存在してはならないと単純に明記することにより、保全性および機密性は双対問題と見なすことができる。
【０００３】
情報には、情報フロー・ラベルでタグを付けることができる。典型的に、情報フロー・ラベルは、半順序集合または格子を形成する。情報フロー・セキュリティが厳格に執行され、情報のいかなる違法フローも許可されない場合、ほとんどのプログラムは機能しなくなるであろう。「情報フロー・セキュア」であるために、特定のラベル「Ｘ」でタグが付けられた情報だけが、「Ｘ」より高いかまたはそれに等しいラベルでタグが付けられたプログラム・ポイントまで流れることができるように、プログラムを「パーティション化」しなければならないであろう。
【０００４】
このような制約のあるプログラムは有用である可能性が非常に低い。たとえば、保全性の観点から見ると、Ｗｅｂアプリケーションは、潜在的に信頼できないユーザから入力を受け入れて、これらの入力を信頼できる計算で使用するものと仮定されている。たとえば、オンライン・バンキング・プログラムは、ユーザの口座番号およびパスワード（潜在的に信頼できないかまたは誤った形式の情報）を入力として取り込み、それをバックエンド・データベース・システムに渡し、そこで信頼できる設定に使用される。他の例では、オンライン書店は、顧客のユーザＩＤおよびパスワードならびに顧客が購入したいと希望する書籍のタイトル（いずれも潜在的に信頼できないかまたは誤った形式の情報）を入力として取り込み、それを使用してトランザクションなどを完了する。
【０００５】
機密性の観点から見ると、Ｗｅｂアプリケーションは、秘密情報に基づいて計算され、このため、同様に秘密のものと見なさなければならないデータを放出する場合が多い。たとえば、バンキング・アプリケーションは、ユーザの社会保障番号の下４桁をすべての窓口係に暴露する可能性があり、オンライン書店は、顧客のクレジットカード番号の下４桁などをすべての店員に暴露する可能性がある。「ハイ」情報が「ロー」プログラム・ポイントに流れるのを可能にするフローをこれらのすべてのプログラムが呈する場合、情報フロー・セキュリティが単純に執行されると、これらのすべてのプログラムが拒否されるであろう。これらのプログラムが機能できるようにするために、「ハイ」情報を「ダウングレード」して、「ロー」プログラム・ポイントで使用するのに十分「ロー」にすることができる。
【０００６】
ダウングレードは、言い換えれば、保全性の点で「是認（endorsement）」および機密性の点で「秘密指定の解除（declassification）」ということになる。たとえば、Ｗｅｂアプリケーションに対するユーザ提供の入力が適切にフォーマットされた文字列であることをプログラムが検証すると、そのプログラムはその入力を是認することができ、その時点でその入力は信頼できる計算で使用するのに十分信頼できるものになる。同様に、秘密のものから抽出された情報がその秘密自体を暴露するのに十分なものではないことをプログラムが検証すると、そのプログラムは抽出された情報の秘密指定を解除することができ、その時点でその情報は一般聴取者に暴露するのに十分公共のものになる可能性がある。
【０００７】
１つのプログラムは多種多様なタイプのダウングレーダを実現することができる。すなわち、「ハイ」入力が前にダウングレードされていない限り、プログラムは「ロー」機能への「ハイ」入力を受け入れないはずなので、これらのダウングレーダが使用される。特定のダウングレーダは、「ロー」機能の集合のうちの特定の具体的な部分集合について機能し、したがって、１つのプログラムは複数の異なるタイプのダウングレーダを実現することが要求される可能性がある。
【０００８】
たとえば、文字列の形の入力を受け入れる保全性「ロー」機能は、その文字列を構造化照会言語（ＳＱＬ）照会に連結し、それをデータベースにサブミットする。この例では、セミコロンおよびアポストロフィはデータベースによってＳＱＬコマンドとして解釈されるので、この機能はその入力がこのような文字を含まないことを要求することになる。したがって、この「ロー」機能への入力に対して、このような違法文字が存在しないことを確認するために、サニタイゼーション（sanitization）（すなわち、不当入力（illegal input）の疑わしい部分を除去／置換することによる不当入力の変形）または是認を行わなければならない。信頼できるサニタイザ（sanitizer）がこのような違法文字がないことを検証した場合のみ、初めは信頼できない文字列がＳＱＬ照会で使用するために受け入れられることになる。
【０００９】
しかし、「ロー」機能がＳＱＬ照会の実行を担当せず、むしろ、その文字列入力値をハイパーテキスト・マークアップ言語（ＨＴＭＬ）コードに連結することを担当する場合、異なるサニタイゼーションが必要である。この場合の課題はもはやＳＱＬインジェクションを防止することではなく、むしろ、クロスサイト・スクリプティング（ＸＳＳ）攻撃として知られているものを防止することである。この場合、サニタイゼーション機能は、＜ｓｃｒｉｐｔ＞および＜／ｓｃｒｉｐｔｓ＞などの特定のＪａｖａＳｃｒｉｐｔタグがないことをチェックしなければならない（ＪａｖａおよびすべてのＪａｖａベースの商標およびロゴはオラクル社あるいはその関連会社またはその両方の商標または登録商標である）。
【００１０】
ダウングレーダは、ライブラリで使用可能である場合が多く、対応する「ロー」機能の指定に基づいてカテゴリー化される。しかし、多くの場合、Ｗｅｂアプリケーションはそれ専用のダウングレード機能を実現する。これは、Ｗｅｂアプリケーションのセキュリティ静的解析を非常に複雑なものにする。実際に、情報フロー・セキュリティに関する静的解析は、ダウングレード機能のシグニチャならびにダウングレード機能を対応する「ロー」機能にマッピングするルールを入力として受け取らなければならない。その時点で、静的解析は、「ロー」機能への入力が適切にダウングレードされていない場合に「ロー」機能に至る経路なしに、その入力に対して必ず適切なダウングレードが行われているかどうかを検証することができる。残念ながら、Ｗｅｂアプリケーションがそれ専用のダウングレーダを実現する場合、情報フロー・セキュリティに関する静的解析が、その後、その理由を説明できるような方法で、そのダウングレーダを検出してカテゴリー化することは、非常に困難である。
【００１１】
Ｗｅｂアプリケーションは、ユーザ入力を受け入れ、典型的に多数のユーザによってアクセス可能であるので、セキュリティ攻撃を特に受けやすい。Ｗｅｂアプリケーション・セキュリティ・コンソーシアム（ＷＡＳＣ）によれば、２００８年には約１００，０００件のセキュリティ脆弱性が見つかって修正され、これらの脆弱性のうちの５２５８７件は緊急または重大なものであった。これは、悪意のある入力に対してＷｅｂアプリケーションを保護することの重要性を示すものである。この保護は、典型的に、ユーザの入力をサニタイゼーションする（すなわち、その入力の疑わしい部分を除去／置換することによりその入力を変形する）かまたはユーザの入力を妥当性検査する（すなわち、不当であると判断された場合にユーザの入力を拒否する）前述の是認／ダウングレーダ・メカニズムを使用して実現される。
【００１２】
サニタイザおよびバリデータ（validator）は、攻撃に対する最後の（そして最もアプリケーション固有の）防御線と見なすことができる。これらのメカニズムは、通常、様々な文脈において正当入力と不当入力を区別するための微妙な推論を実施するものである。その上、これらのメカニズム自体は、セキュリティ専門家とアプリケーション開発者との間のインターフェースである。これらを正しく作成することは、セキュリティ脅威（既知のセキュリティ攻撃の長いカタログの形になっている）の完全な理解が必要なので、標準的なコーディング作業ではない。サニタイゼーションおよび妥当性検査メカニズムの作成方法に関する最良の慣例、ガイドライン、およびポリシーは、セキュリティ文書に含まれている場合が多い。難題は、Ｗｅｂアプリケーションのコードにおいてこれらのガイドラインに従っているかどうかをチェックすることである。現在、このチェックを実行するための自動メカニズムはまったく存在しない。
【００１３】
その上、ダウングレーダは典型的にソフトウェア・エンジニアによって作成され、そのエンジニアの専門知識は、自分の設計およびエンジニアリング選択がセキュリティに及ぼす影響を理解することでなく、むしろ、ソフトウェアを開発することにあるので、間違った入力ダウングレードによる攻撃の数は驚くほど多い。最も一般的には、不当文字または文字シーケンスを除去することに関する特定の最終的なケースは、ダウングレーダの実現の際に除外されるかまたは間違って対処される。しかし、正しいダウングレードがサーバ側コンポーネントの具体的な実現例に敏感なケースもある。たとえば、ＳＱＬコマンドを構文解析するときに異なるメタ文字を使用し、たとえば、ＭＳ  ＳＱＬサーバはダブルハイフン（−−）をコメントの始まりと解釈し、他のデータベース・サーバはポンド記号（＃）をコメントの開始と解釈する可能性があるので、ＳＱＬインジェクション（ＳＱＬｉ）攻撃に対して保護するダウングレーダは、それぞれのタイプのデータベース・サーバについて異なる変形を適用しなければならない。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】米国特許出願第１２／５７５，６４７号
【特許文献２】米国特許出願第１２／８２５，２９３号
【特許文献３】米国特許出願第１２／６２７，３５１号
【非特許文献】
【００１５】
【非特許文献１】Yasuhiko Minamideによる「Static Approximation of Dynamically Generated Web Pages」（２００５年、第１４回ワールド・ワイド・ウェブ国際会議（ＷＷＷ  ０５）の議事録）
【非特許文献２】１９９８年８月発表のウィスコンシン大学のThomasRepsによる「Program Analysis via Graph Reachability」
【非特許文献３】www.brics.dk/mona/papers/mona1x-new-technique-ws1s-ws2s/article.pdfから入手可能なElgaard他による「MONA 1.x: New Techniques forWS1S and WS2S」
【発明の概要】
【発明が解決しようとする課題】
【００１６】
攻撃者は、ファジング技法を使用することにより、間違ったサニタイゼーションがアプリケーションに適用されている事例を容易かつ効果的に識別することができる。攻撃者は、プログラムの保護層が壊れているという結論に達すると同時に、コード内のセキュリティ上敏感なエリアにどの入力が使用されているかを学習し、それにより攻撃のその後のステップが容易になるので、これにより事態はさらに悪化する。したがって、ダウングレーダが保護しようと意図しているシステムに対してそのダウングレーダが互換性があるかどうかを決定するときに、追加の難題が発生する。
【課題を解決するための手段】
【００１７】
例示的な一実施形態では、データ処理システムにおいて、ターゲット配備環境についてアプリケーション・コード内のダウングレーダ・コードを評価するための方法が提供される。この方法は、データ処理システムのアプリケーション解析メカニズムにより、アプリケーション・コード内のダウングレーダ・コードを識別することを含む。ダウングレーダ・コードは、ダウングレーダ・コードの出力において、ダウングレーダ・コードへの情報入力の機密性を保証するために、アプリケーション・コードの情報フローについて操作する、アプリケーション・コード内のコードの一部分である。この方法は、アプリケーション解析メカニズムにより、入力文字列に基づいて、入力文字列を受信したことに応答してダウングレーダ・コードが出力する出力文字列を生成することをさらに含む。また、この方法は、データ処理システムに関連するストレージ・システムから、不当文字列パターンの１つまたは複数の集合を取り出すことも含む。不当文字列パターンの１つまたは複数の集合のそれぞれは対応する配備環境に関連付けられる。不当文字列パターンは、ダウングレーダがセキュリティ目的で情報フロー内で識別する文字列パターンである。さらに、この方法は、アプリケーション解析メカニズムにより、不当文字列パターンの１つまたは複数の集合および出力文字列に基づいて、ダウングレーダ・コードがターゲット配備環境と互換性があるかどうかを判別することを含む。加えて、この方法は、アプリケーション解析メカニズムにより、その判別の結果を示す出力を生成することを含む。
【００１８】
他の例示的な諸実施形態では、コンピュータ可読プログラムを有するコンピュータ使用可能または可読媒体を含むコンピュータ・プログラム製品（computer program product）が提供される。このコンピュータ可読プログラムは、コンピューティング・デバイス上で実行されると、方法の例示的な実施形態に関して上記で概要を示した動作のうちの様々なものおよびその組み合わせをコンピューティング・デバイスに実行させるものである。
【００１９】
さらに他の例示的な実施形態では、システム／装置が提供される。このシステム／装置は、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合されたメモリとを含むことができる。このメモリは、１つまたは複数のプロセッサ上で実行されると、方法の例示的な実施形態に関して上記で概要を示した動作のうちの様々なものおよびその組み合わせを１つまたは複数のプロセッサに実行させる命令を含むことができる。
【００２０】
本発明の上記その他の特徴および利点は、本発明の諸実施形態例に関する以下の詳細な説明に記載されるか、あるいは、その説明を考慮すると当業者にとって自明なものになるであろう。
【００２１】
好ましい実施形態ならびにその好ましい使用態様および利点は、添付図面に併せて読んだときに例示的な諸実施形態に関する以下の詳細な説明を参照することによって最もよく理解されるであろう。
【図面の簡単な説明】
【００２２】
【図１】例示的な諸実施形態の諸態様を実現できる分散データ処理システムの一例を示す図表現である。
【図２】例示的な諸実施形態の諸態様を実現できるデータ処理システムの一例を示すブロック図の一例である。
【図３】例示的な一実施形態によるアプリケーション解析メカニズムの主要動作要素を示すブロック図の一例である。
【図４】文脈自由文法（context free grammar）を生成するために例示的な諸実施形態のメカニズムによって使用することができるトランスデューサ（transducer）を示す図の一例である。
【図５】例示的な一実施形態による静的文字列解析を示す図の一例である。
【図６】例示的な一実施形態によるプログラムの一例に関する呼び出しグラフである。
【図７】例示的な一実施形態による情報フロー・ダウングレーダの静的検出およびカテゴリー化のためのシステムおよび方法を例示的に描写するブロック／流れ図の一例である。
【図８】例示的な一実施形態による自動アプリケーション解析メカニズムの動作の一例の概要を示す流れ図である。
【図９】例示的な一実施形態によるダウングレーダの互換性および強度を評価するための動作の一例の概要を示す流れ図である。
【発明を実施するための形態】
【００２３】
例示的な諸実施形態は、情報フロー・ダウングレーダの品質および適合性の形式的解析を使用することによりＷｅｂアプリケーション・セキュリティ・ガイドラインの静的執行のためのメカニズムを提供する。特に、例示的な諸実施形態は、Ｗｅｂアプリケーション（すなわち、ワールド・ワイド・ウェブまたはインターネットを介してアクセス可能なアプリケーション）などのアプリケーションのコード内のダウングレーダをチェックし、そのアプリケーションのコードが情報フロー・ダウングレーダを実現するためのガイドラインに従っていることを保証するための自動メカニズムを提供する。このチェックに基づいて、Ｗｅｂアプリケーションがガイドラインに適合しているかまたはセキュリティ違反を含んでいるかどうかに関する出力を生成することができる。
【００２４】
例示的な諸実施形態は文字列解析メカニズムを使用する。文字列解析は、文字列変数が呈する可能性のあるランタイム値の集合を近似するという目標を有する技法およびメカニズムの集まりである。Ｗｅｂアプリケーション・セキュリティ問題に対する文字列解析技法の適用例は、米国特許出願第１２／５７５，６４７号、第１２／８２５，２９３号、および第１２／６２７，３５１号に記載されている。特に、米国特許出願第１２／５７５，６４７号には、文字列解析を使用する情報フロー・ダウングレーダの自動検出のための技法が記載されている。
【００２５】
例示的な諸実施形態のメカニズムは、アプリケーション・コード内のダウングレーダ、たとえば、サニタイザおよびバリデータを見つける方法を対象とする第１２／５７５，６４７号出願のメカニズムと互いに直交するように動作する。その代わりに、例示的な諸実施形態のメカニズムは、ダウングレーダがどのように構造化されているかを判別し、その構造が既定のガイドラインに適合するかどうかを判別することを対象とする。例示的な諸実施形態のメカニズムは、ダウングレーダの実現詳細を抽象化し、ダウングレーダの入力上の一連の操作としてダウングレーダを表す。この抽象化は、組み込み文字列演算ならびにその他の関心のある命令をモデル化することによって実施される。たとえば、組み込み文字列演算をモデル化するために単項２次論理モデルを使用することができる。次に、その結果得られる文字列演算の高レベル抽象化表現を調べ、ガイドラインの集合に応じて格付けすることができる。これは、アプリケーションの保護層、すなわち、アプリケーションの情報フロー・ダウングレーダの品質を定量化するための自動手順として実行することができる。
【００２６】
既定のガイドラインに応じてダウングレーダを評価するための自動メカニズムは、セキュリティ専門家がダウングレーダのコード実現例を妥当性検査し、形式的なメカニズムを介してアプリケーション開発者に評価を連絡できるようにするので、アプリケーション開発者とセキュリティ専門家との間の重要な橋渡しとして使用することができる。さらに、例示的な諸実施形態の自動メカニズムは、たとえば、その低いスコアが、入力を拒否する代わりに入力文字を除去することによるものであり、その結果、ビジネスロジックにおいて意図しない挙動が発生する場合など、ビジネスロジックのバグの理由になる可能性があるほどそのスコアが特に低いダウングレーダを識別することができる。
【００２７】
当業者によって認識されるように、本発明は、システム、方法、またはコンピュータ・プログラム製品として実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ使用可能プログラム・コードが実施されている任意の１つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム製品の形を取ることができる。
【００２８】
１つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体はコンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、デバイス、あるいは前記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的リスト）としては、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光学記憶装置、磁気記憶装置、あるいは前記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
【００２９】
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこに実施されたコンピュータ可読プログラム・コードを含む伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
【００３０】
コンピュータ可読媒体上に実施されたコンピュータ・コードは、無線、有線、光ファイバ・ケーブル、無線周波数（ＲＦ）など、あるいはそれらの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
【００３１】
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（ＴＭ）、Ｓｍａｌｌｔａｌｋ（ＴＭ）、Ｃ＋＋などのオブジェクト指向プログラミング言語ならびに「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続が行われる場合もある。
【００３２】
本発明の諸態様は、本発明の例示的な諸実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図あるいはブロック図またはその両方に関連して以下に記載されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するための手段を作成するようなマシンを生産することができる。
【００３３】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現する命令を含む装置（article of manufacture）を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
【００３４】
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
【００３５】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラムについて可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能（複数も可）を実現するための１つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることに留意されたい。たとえば、連続して示されている２つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。
【００３６】
例示的な諸実施形態は、分散データ処理環境、単一データ処理装置などを含む、多種多様なタイプのデータ処理環境で使用することができる。例示的な諸実施形態の特定の要素および機能に関する説明のための情況を提供するために、図１および図２は、例示的な諸実施形態の諸態様を実現できる環境の例として以下に提供されている。図１〜図２は例に過ぎず、本発明の諸態様または諸実施形態を実現できる環境に関する制限を断言または暗示するものではない。描写されている環境に対する多くの変更は、本発明の精神および範囲を逸脱せずに、行うことができる。
【００３７】
次に、図面に関連して説明すると、図１は、例示的な諸実施形態の諸態様を実現できる分散データ処理システムの一例を示す図表現を描写している。分散データ処理システム１００は、例示的な諸実施形態の諸態様を実現できる複数コンピュータのネットワークを含むことができる。分散データ処理システム１００は少なくとも１つのネットワーク１０２を含み、そのネットワークは分散データ処理システム１００内に一緒に接続された様々なデバイスおよびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク１０２は、ワイヤ、ワイヤレス通信リンク、または光ファイバ・ケーブルなどの接続部を含むことができる。
【００３８】
描写されている例では、サーバ１０４およびサーバ１０６は、記憶装置１０８とともにネットワーク１０２に接続されている。加えて、クライアント１１０、１１２、および１１４もネットワーク１０２に接続されている。これらのクライアント１１０、１１２、および１１４は、たとえば、パーソナル・コンピュータ、ネットワーク・コンピュータなどにすることができる。描写されている例では、サーバ１０４は、ブート・ファイル、オペレーティング・システム・イメージ、アプリケーションなどのデータをクライアント１１０、１１２、および１１４に提供する。クライアント１１０、１１２、および１１４は、描写されている例では、サーバ１０４に対するクライアントである。分散データ処理システム１００は、図示されていない追加のサーバ、クライアント、およびその他のデバイスを含むことができる。
【００３９】
描写されている例では、分散データ処理システム１００は、互いに通信するために伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）というプロトコル・スイートを使用する複数ネットワークおよびゲートウェイの世界的集まりを表すネットワーク１０２を含むインターネットである。インターネットの中心部には、データおよびメッセージを経路指定する何千もの商用、公用、教育、その他のコンピュータ・システムからなる、大ノードまたはホスト・コンピュータ間の高速データ通信回線のバックボーンが存在する。当然のことながら、分散データ処理システム１００は、たとえば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）などのいくつかの異なるタイプのネットワークを含むように実現することもできる。上記のように、図１は、本発明の種々の実施形態に関するアーキテクチャ上の制限としてではなく、一例として意図されており、したがって、図１に示されている特定の例は、本発明の例示的な諸実施形態を実現できる環境に関する制限と見なすべきではない。
【００４０】
次に、図２に関連して説明すると、例示的な諸実施形態の諸態様を実現できるデータ処理システムの一例を示すブロック図が示されている。データ処理システム２００は、図１のクライアント１１０など、コンピュータの一例であり、そこには本発明の例示的な諸実施形態に関するプロセスを実現するコンピュータ使用可能コードまたは命令が位置することができる。
【００４１】
描写されている例では、データ処理システム２００は、ノースブリッジおよびメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）２０２と、サウスブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）２０４とを含む、ハブ・アーキテクチャを使用する。処理装置２０６、メイン・メモリ２０８、およびグラフィックス・プロセッサ２１０はＮＢ／ＭＣＨ２０２に接続されている。グラフィックス・プロセッサ２１０は、アクセラレィティッド・グラフィックス・ポート（ＡＧＰ）を介してＮＢ／ＭＣＨ２０２に接続することもできる。
【００４２】
描写されている例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２はＳＢ／ＩＣＨ２０４に接続している。オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読み取り専用メモリ（ＲＯＭ）２２４、ハードディスク・ドライブ（ＨＤＤ）２２６、ＣＤ−ＲＯＭドライブ２３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよびその他の通信ポート２３２、ならびにＰＣＩ／ＰＣＩｅデバイス２３４は、バス２３８およびバス２４０を介してＳＢ／ＩＣＨ２０４に接続している。ＰＣＩ／ＰＣＩｅデバイスは、たとえば、イーサネット・アダプタ、アドイン・カード、およびノートブック・コンピュータ用のＰＣカードを含むことができる。ＰＣＩはカード・バス・コントローラを使用し、ＰＣＩｅはそれを使用しない。ＲＯＭ２２４は、たとえば、フラッシュ基本入出力システム（ＢＩＯＳ）にすることができる。
【００４３】
ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０はバス２４０を介してＳＢ／ＩＣＨ２０４に接続している。ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０は、たとえば、インテグレーテッド・ドライブ・エレクトロニクス（ＩＤＥ）またはシリアル・アドバンスト・テクノロジー・アタッチメント（ＳＡＴＡ）インターフェースを使用することができる。スーパーＩ／Ｏ（ＳＩＯ）デバイス２３６は、ＳＢ／ＩＣＨ２０４に接続することができる。
【００４４】
オペレーティング・システムは処理装置２０６上で実行される。オペレーティング・システムは、図２のデータ処理システム２００内の様々なコンポーネントを調整し、その制御を行う。クライアントとして、オペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ（Ｒ）  Ｗｉｎｄｏｗｓ（Ｒ）７などの市販のオペレーティング・システムにすることができる（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは米国、その他の国、あるいはその両方におけるマイクロソフト・コーポレーションの商標である）。Ｊａｖａ（ＴＭ）プログラミング・システムなどのオブジェクト指向プログラミング・システムは、オペレーティング・システムとともに実行することができ、データ処理システム２００上で実行中のＪａｖａ（ＴＭ）プログラムまたはアプリケーションからオペレーティング・システムへの呼び出しを行う（Ｊａｖａは米国、その他の国、あるいはその両方におけるオラクル社あるいはその関連会社またはその両方の商標である）。
【００４５】
サーバとして、データ処理システム２００は、たとえば、拡張対話式エグゼクティブ（ＡＩＸ（Ｒ））オペレーティング・システムまたはＬＩＮＵＸ（Ｒ）オペレーティング・システムを実行中のＩＢＭ（Ｒ）  ｅＳｅｒｖｅｒ（ＴＭ）  Ｓｙｓｔｅｍ  ｐ（Ｒ）コンピュータ・システムにすることができる（ＩＢＭ、ｅＳｅｒｖｅｒ、Ｓｙｓｔｅｍ  ｐ、およびＡＩＸは、米国、その他の国、あるいはその両方におけるインターナショナル・ビジネス・マシーンズ・コーポレーションの商標であり、ＬＩＮＵＸは米国、その他の国、あるいはその両方におけるリーナス・トーバルズの商標である）。データ処理システム２００は、処理装置２０６内に複数のプロセッサを含む、対称型マルチプロセッサ（ＳＭＰ）システムにすることができる。代わって、単一プロセッサ・システムを使用することもできる。
【００４６】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムに関する命令は、ＨＤＤ２２６などの記憶装置上に位置し、処理装置２０６による実行のためにメイン・メモリ２０８にロードすることができる。本発明の例示的な諸実施形態に関するプロセスは、コンピュータ使用可能プログラム・コードを使用して、処理装置２０６によって実行することができ、そのプログラム・コードは、たとえば、メイン・メモリ２０８、ＲＯＭ２２４などのメモリに位置するか、あるいは、たとえば、１つまたは複数の周辺装置２２６および２３０に位置することができる。
【００４７】
図２に示されているバス２３８またはバス２４０などのバス・システムは、１つまたは複数のバスで構成することができる。当然のことながら、バス・システムは、任意のタイプの通信ファブリックまたはアーキテクチャに取り付けられた異なるコンポーネントまたはデバイス間でデータの転送を可能にするその通信ファブリックまたはアーキテクチャを使用して実現することができる。図２のモデム２２２またはネットワーク・アダプタ２１２などの通信ユニットは、データを送受信するために使用される１つまたは複数のデバイスを含むことができる。メモリは、たとえば、メイン・メモリ２０８、ＲＯＭ２２４、または図２のＮＢ／ＭＣＨ２０２に見られるようなキャッシュにすることができる。
【００４８】
当業者であれば、図１〜図２のハードウェアが実現例次第で様々になる可能性があることを認識するであろう。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどのその他の内部ハードウェアまたは周辺装置は、図１〜図２に描写されているハードウェアに加えてまたはその代わりに使用することができる。また、例示的な諸実施形態のプロセスは、本発明の精神および範囲を逸脱せずに、前述のＳＭＰシステム以外のマルチプロセッサ・データ処理システムに適用することができる。
【００４９】
その上、データ処理システム２００は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話またはその他の通信装置、携帯情報端末（ＰＤＡ）などを含む、いくつかの異なるデータ処理システムのうちのいずれかの形を取ることができる。いくつかの例示的な例では、データ処理システム２００は、たとえば、オペレーティング・システム・ファイルあるいはユーザ生成データまたはその両方を保管するための不揮発性メモリを提供するためにフラッシュ・メモリとともに構成されたポータブル・コンピューティング・デバイスにすることができる。本質的に、データ処理システム２００は、アーキテクチャ上の制限なしに、任意の既知のまたは後日開発されるデータ処理システムにすることができる。
【００５０】
図１および図２のコンピューティング・デバイスのうちの１つまたは複数は、例示的な諸実施形態の諸態様を実現するために使用することができる。たとえば、図１のサーバ１０４などのサーバ・コンピューティング・デバイスは、クライアント１１０、１１２、および１１４などの１つまたは複数のクライアント・コンピューティング・デバイスによってアクセス可能である可能性のあるＷｅｂアプリケーションを実現するために使用することができる。Ｗｅｂアプリケーションを配備する前またはサーバ１０４によってＷｅｂアプリケーションを実現した後に、例示的な諸実施形態のメカニズムを使用してＷｅｂアプリケーションの解析を実行し、ＷｅｂアプリケーションによってまたはＷｅｂアプリケーションとともに実現されたダウングレーダ（複数も可）がセキュリティ・ガイドラインに適合するかどうかを判別することができる。Ｗｅｂアプリケーションの解析を実行するためのメカニズムは、たとえば、Ｗｅｂアプリケーションが配備される予定であるかまたはすでに実現されているサーバ１０４などのサーバ・コンピューティング・デバイス、クライアント・コンピューティング・デバイス１１０、１１２、または１１４、他のコンピューティング・デバイス、複数のコンピューティング・デバイスなどで実現することができる。
【００５１】
図３は、例示的な一実施形態によるアプリケーション解析メカニズムの主要動作要素を示すブロック図の一例である。図３に示されている諸要素は、ソフトウェア、ハードウェア、またはソフトウェアとハードウェアの任意の組み合わせで実現することができる。例示的な一実施形態では、図３の諸要素は、１つまたは複数のコンピューティング・デバイスの１つまたは複数のプロセッサによって実行されるソフトウェア命令として実現される。
【００５２】
図３に示されているように、アプリケーション解析メカニズム３００は、コントローラ３１０と、入出力インターフェース３２０と、ダウングレーダ検出エンジン３３０と、ダウングレーダ抽象化エンジン３４０と、ダウングレーダ評価エンジン３５０と、セキュリティ・ガイドライン・エンジン３６０と、ダウングレーダ欠陥／非互換性検出エンジン３７０と、正当／不当文字列パターン・データベース３８０とを含む。ダウングレーダ欠陥／非互換性検出エンジン３７０は、アプリケーション解析メカニズム３００とともに保管できるかまたは外部ソースからアプリケーション解析メカニズム３００への入力として提供できる環境文脈指定（environment context specification）３９０についてさらに操作することができる。図３に描写されているように単一メカニズムであるのではなく、これらの要素のいずれも複数のコンピューティング・デバイス間に分散することができ、したがって、ある意味ではアプリケーション解析メカニズム３００の「外部」であるが、アプリケーション解析メカニズム３００を構成する他の要素とともに機能することができるという点で、諸要素３１０〜３９０のいずれについても同じことが該当する。
【００５３】
コントローラ３１０は、アプリケーション解析メカニズム３００の全体的な動作を制御し、他の要素３２０〜３９０のそれぞれの動作および使用法を調整する。入出力インターフェース３２０は、解析用のＷｅｂアプリケーション・コード、アプリケーション解析メカニズム３００の動作を構成するためのユーザ入力（ある場合）などの入力を受信するように動作する。入出力インターフェース３２０は、Ｗｅｂアプリケーションのダウングレーダが既定のセキュリティ・ガイドラインに適合しているかどうか、ならびに、適合していない場合にどのような違反が存在する可能性があるかを通知するために、開発者、セキュリティ担当者、またはその他のユーザに対して通知を提供するための出力を生成するようにさらに動作する。その上、入出力インターフェース３２０は、以下により詳細に説明するように、ダウングレーダ欠陥／非互換性検出エンジン３７０によって実行された解析に基づいて、ダウングレーダが保護しようと意図している環境とダウングレーダとの間の欠陥あるいは非互換性ならびにその両方を通知するために、開発者、セキュリティ担当者、またはその他のユーザに対して通知を提供するための出力を生成するようにさらに動作することができる。
【００５４】
ダウングレーダ検出エンジン３３０は、アプリケーション・コードを解析して、ダウングレーダ・コードが存在する可能性のある場所をアプリケーション・コード内で検出する。例示的な一実施形態では、ダウングレーダ検出エンジン３３０は、米国特許出願第１２／５７５，６４７号（以下６４７号出願という）に記載されているような方法で、文字列解析を使用して、アプリケーション・コード内のダウングレーダ・コードの位置を特定することができる。当然のことながら、例示的な諸実施形態の精神および範囲を逸脱せずに、アプリケーション・コード内のダウングレーダ・コードを検出するためのその他の既知のまたは後日開発されるメカニズムを使用することもできる。
【００５５】
アプリケーション・コード内でダウングレード・コードを識別する方法の一例を提供するために、６４７号出願の文字列解析を使用するものと想定する。このような文字列解析では、まず、Yasuhiko Minamideによる「Static Approximation ofDynamically Generated Web Pages」（２００５年、第１４回ワールド・ワイド・ウェブ国際会議（ＷＷＷ  ’０５）の議事録）に記載されているような方法で、アプリケーション・コードを文字列演算付きの文脈自由文法（ＣＦＧ）に変換する。次に、文脈自由文法から文字列演算を除去して、元のアプリケーション・コード内の文字列演算に対応するＣＦＧに対して近似文字列演算機能（approximated string operation function）を適用することにより、プロダクション・ルール（production rule）を生成する。これらのプロダクション・ルールは典型的に、
【数１】
0005940160.tif 000002
という形で示され、ここでＮは変数であり、Ｘ１．．．Ｘｎは変数または文字であって、文脈自由文法を構成する。近似文字列演算機能は、あるＣＦＧを他のＣＦＧに変換する機能であり、たとえば、出力記号付きの有限状態オートマトンであるトランスデューサである。プロダクション・ルール内にそれ以上の文字列演算が存在しなくなるまで近似文字列演算の適用を繰り返す。この結果、文字列演算なしのプロダクション・ルールからなる文脈自由文法が得られる。
【００５６】
すなわち、プログラムは文脈自由文法として表され、その開始変数は近似の際に関心のある文字列に対応する。たとえば、この文字列が「ｖ  ＝  ｖ１．ｃｏｎｃａｔ（ｖ２）；」内のｖであると仮定する。ｖの抽象値を計算するにはｖ１およびｖ２の抽象値の知識を必要とし、その上、「ｃｏｎｃａｔ」演算は、その値を把握した後にｖ１およびｖ２に対するその影響をモデル化することにより、文法から除去する必要がある。これは、プロダクション・ルール内にそれ以上の文字列演算が存在しなくなるまで近似文字列演算の適用を繰り返すと明記することによって上記で意味するものである。
【００５７】
また、ｖはｖ１およびｖ２に依存し、したがって、近似は開始変数としてｖ１およびｖ２を（それぞれ順番に）再帰的に考慮する可能性があることが知られていると仮定する。これらの文字列の抽象値を求めるために元のプロダクション・ルールは不要である（以下に詳述する循環定義がない場合）。このｖ１およびｖ２の再帰的考慮を行うと、演算はｖに関する文法に戻り、「ｃｏｎｃａｔ」の影響を近似するトランスデューサを適用する。これにより、「ｃｏｎｃａｔ」演算がもはや存在しない簡易文法が得られ、実際に、そのルールは単純にｖに値を代入するだけになる。循環定義を処理するために、上記の再帰ではなく、不動点繰り返しが必要になり、たとえば、連結がループ状に行われた場合、ｉ番目の繰り返しのｖの値は（ｉ−１）番目の繰り返しに含まれるその値に依存する。他の一例として、文字列値“ａ”でそれを初期設定した後に変数ａに代入された文字列に“ａ”を３回付加する以下のＪａｖａ（ＴＭ）プログラムについて検討する。
【数２】
0005940160.tif 000003
【００５８】
以下のＣＦＧは、すべてのアプリケーション変数ｖを非終端文字列変数Ｓｖに変換し、「＝」をプロダクション・ルールのように「→」に変換することによって求められ、「＋」による文字列連結はＣＦＧ上の文字列連結であると見なされる。
【数３】
0005940160.tif 000004
【００５９】
たとえば、開始記号Ｓａ付きのＣＦＧはアプリケーション変数ａに代入された可能文字列値の集合を表し、それにより｛“ａ”，“ａａ”，“ａａａ”，“ａａａａ”，・・・｝という文字列の集合が得られる。同様に、記号Ｓｒはプログラム変数ｒに代入された可能文字列値の集合を表す。文字列解析は“ｆｏｒ”ステートメントの条件を完全に無視するので、これは変数ａおよびｒにけっして代入されない文字列を含む。
【００６０】
アプリケーション・コードが、以下に示すアプリケーション・コードの一部分に示されているようなＳｔｒｉｎｇ．ｓｕｂｓｔｒｉｎｇなどの事前定義文字列演算を使用する場合、アプリケーション・コードをＣＦＧに変換するためにすべての文字列演算について健全な近似値を使用する。たとえば、以下に示すコードの一部分における事前定義文字列演算について検討する。
【数４】
0005940160.tif 000005
【００６１】
近似文字列演算の健全性とは、近似文字列演算によって計算された結果のＣＦＧが近似文字列演算に対応する事前定義文字列演算によって計算された実際の文字列をすべて含むことを意味する。事前定義文字列演算を近似するための方法の１つは、出力付きのオートマトンであるトランスデューサを使用することである。
【００６２】
健全性は以下のように形式的に定義することができ、
【数５】
0005940160.tif 000006
は、
【数６】
0005940160.tif 000007
という文字列演算に関する健全な近似値であり、ここで、
【数７】
0005940160.tif 000008
である。事前定義文字列演算を近似するための方法の１つは、出力付きのオートマトンであるトランスデューサを使用することである。トランスデューサのイメージもＣＦＧであることは周知のことである。その他の方法は（Σ，＋）に関する準同形であり、ここでΣは文字の集合であり、＋は、対応する事前定義文字列演算などによって返される可能文字列をすべてもたらす同じＣＦＧを常に返す連結機能を示す。近似文字列演算
【数８】
0005940160.tif 000009
を含む以下のプロダクション・ルールは、健全な近似値を使用することにより上記のアプリケーション・コードの一部分の例から求められるものである。
【数９】
0005940160.tif 000010
【００６３】
次に、図４を参照すると、トランスデューサ４００が例示的に描写されている。近似文字列演算
【数１０】
0005940160.tif 000011
は、トランスデューサ４００によって定義され、文字列演算
【数１１】
0005940160.tif 000012
に関する健全な近似値である。上記のプロダクション・ルールからなる文法に描写されているトランスデューサ４００を適用することにより、集合｛“ａ”，“ａａ”，“ａａａ”，“ａａａａ”，・・・｝を表す以下のＣＦＧを求めることができる。
【数１２】
0005940160.tif 000013
【００６４】
図４の記号Ａは任意の文字を表し、Ａ／εは任意の文字から空の文字列への変換を表し、これはその文字の除去を意味する。「健全な」トランスデューサにより、その結果得られる抽象値は、ランタイム時にその演算から得られる可能性のある文字列の安全な近似値である。したがって、
【数１３】
0005940160.tif 000014
の場合、その表現は、ラベルＡ／εによって示されるように、単純に文字列内の最初の２文字を除去するだけである（本質的に文字Ａを除去する）。トランスデューサを元の文法に適用した結果、新しいＣＦＧが得られる。
【００６５】
上記のメカニズムをアプリケーション・コードに繰り返し適用した後、その適用を表すが、いかなる文字列演算も存在しないプロダクト・ルールの集合が得られる。したがって、その結果得られるプロダクション・ルールからなる文脈自由文法は文字列解析の結果である。
【００６６】
次に、図５を参照して、例示的な諸実施形態による静的文字列解析を実現するための例示的な一実施形態について説明する。提供される説明は、手順内文字列解析を扱うものであり、次にそれを手順間文字列解析に拡張する方法について説明する。提示されている実現詳細では、文字列解析が静的解析フレームワークの上に実現されているものと想定する。使用される静的解析フレームワークは、任意の既知のフレームワークにすることができ、たとえば、ｗａｌａ．ｓｏｕｒｃｅｆｏｒｇｅ．ｎｅｔからオープン・ソース・プロダクトとして入手可能な解析用ワトソン・ライブラリ（ＷＡＬＡ）を含むことができる。
【００６７】
手順内文字列解析を説明するために、以下のようにＪａｖａ（ＴＭ）のｎａｐｐｅｎｄメソッドについて検討する。
【数１４】
0005940160.tif 000015
【００６８】
ブロック５０２では、疑似表記が命令に使用される静的単一代入（ＳＳＡ）形式へのプログラムの変換が行われる。変換の一例は以下のように例示的に示される。
【数１５】
0005940160.tif 000016
【００６９】
このプログラムに関する呼び出しグラフが図６に描写されている。上記のプログラムで命令に使用される疑似表記としては、変数またはフィールドｖへの値ｖａｌの代入のためのｖ＝ｖａｌ、引数ｖ１，．．．，ｖｎによるメソッド呼び出しのためのｖ＝ｏｂｊ．ｆｕｎｃ（ｖ１，．．．ｖｎ）、ラベルＮへの無条件ジャンプのためのｇｏｔｏ  Ｎ、条件ｖによるラベルＮへの条件付きジャンプのためのｇｏｔｏ  Ｎ  ｉｆ  ｖを含む。加えて、ＳＳＡ変換は、それぞれの変数に１つの代入のみを行うプログラムを得るために、新しい変数と、ｐｈｉ（ｖ１，ｖ２）によって示されるφ関数とを導入する。ＳＳＡ形式のこの特徴は、データ従属性を見つけるのに適している。
【００７０】
ブロック５０４では、上記の同じ方法で（上記の図１を参照）、条件付きジャンプおよび無条件ジャンプを除き、ＳＳＡ形式の代入が文字列演算を含むプロダクション・ルール５０６の集合に変換される。特に、ｖ１およびｖ２にそれぞれ代入された文字列の２つの集合の和集合を表すために、ｖ＝ｐｈｉ（ｖ１，ｖ２）が２つのプロダクション・ルール
【数１６】
0005940160.tif 000017
および
【数１７】
0005940160.tif 000018
に変換される。この変換により、ｎａｐｐｅｎｄメソッドの疑似ＳＳＡ形式から以下のプロダクション・ルールを求めることができる。
【数１８】
0005940160.tif 000019
【００７１】
手順間文字列解析の場合、既知の方法によってその文脈感度を柔軟に制御できるＷＡＬＡによって構築された呼び出しグラフ情報により、手順内文字列解析が拡張される。ＳＳＡプログラム内のすべての変数は呼び出しグラフ・ノードによって注釈が付けられる。
【数１９】
0005940160.tif 000020
などのメソッド呼び出しから変換されたプロダクション・ルールを除去した後、すべてのプロダクション・ルールが結合される。呼び出し先メソッドのパラメータおよび戻り値と呼び出し元メソッドの変数との従属関係を表すプロダクション・ルールが導入される。たとえば、図６に示されているように文脈に依存しない呼び出しグラフ６００が存在する場合に、以下のプロダクション・ルールが導入され、それぞれの非終端の上付き文字は対応する呼び出しグラフ・ノードを表す。プロダクション・ルールは以下のようになる。
【数２０】
0005940160.tif 000021
【００７２】
プログラムから得られる文字列演算を含むプロダクション・ルール５０６の完全集合は以下のものを含む。
【数２１】
0005940160.tif 000022
【００７３】
このようなオブジェクトが動的に作成される場合でも、文字列アナライザまたはソルバ５０８が、どのように一定の文字列がメソッドを越えて変数に流れるかを識別し、同じオブジェクトが潜在的に異なるメソッド内の異なる変数に代入されるかどうかを識別するのを支援する任意選択のポインタ解析を実行することができる。ブロック５１０では、開始記号が
【数２２】
0005940160.tif 000023
である場合にｍａｉｎメソッド内の変数ｒに代入される可能文字列を予測する以下のＣＦＧが得られる。
【数２３】
0005940160.tif 000024
【００７４】
図７を参照すると、ブロック／流れ図は、例示的な諸実施形態による情報フロー・ダウングレーダの静的検出およびカテゴリー化のためのシステムおよび方法を例示的に描写している。図７に示されているシステムおよび方法は、ダウングレーダに対応するアプリケーション・コード内のコードの一部分を検出するために、たとえば、図３のダウングレーダ検出エンジン３３０で実現することができる。
【００７５】
図７に示されているように、ブロック７０２では、メモリ・デバイスに保管されたプログラムは、たとえば、図３の入出力インターフェース３２０を介して個別のデバイスから提供されている可能性があり、命令セット内のそれぞれの変数への単一代入をもたらすためのプログラム変数を静的に解析することによって変換される。これは、プログラム変数代入に疑似表記を使用することによりアプリケーション・コードを変換することを含む。
【００７６】
ブロック７０４では、命令セットは、たとえば、上記の方法で文字列演算を含むプロダクション・ルールに変換される。ブロック７０６では、精度を改善するために、文字列演算を含むプロダクション・ルールについて、一般に当技術分野で知られているようなポインタ解析が任意選択で実行される。
【００７７】
ブロック７０８では、そのプロダクション・ルールから文脈自由文法が生成される。ブロック７１０では、１つまたは複数の機能指定に照らし合わせて文脈自由文法をチェックすることにより、情報フロー・ダウングレーダ機能が識別される。１つまたは複数の機能指定は、正規表現などの文字列パターンからなる。この文字列パターンは、解析ツールまたはユーザによって与えられ、セキュリティ上敏感な演算で使用できる（または使用できない）文字列の集合を表す。たとえば、文字列「＜」および「＞」は、典型的にＸＳＳ（クロスサイト・スクリプティング）攻撃によって使用されるので、安全ではない文字列であると見なされる。したがって、正規表現「．＊［＜＞］．＊」（すなわち、「＜」および「＞」文字列は安全ではないことを指定する）は、ＸＳＳ攻撃を回避するために使用される情報フロー・ダウングレーダに関する指定の一部にすることができる。
【００７８】
１つまたは複数の機能は、好ましくは、アプリケーション・コード内のセキュリティ上敏感な機能を含む。これは、ダウングレーダ機能の目的に基づいてダウングレーダ機能を検出しカテゴリー化することを含むことができる。
【００７９】
ブロック７１２では、文脈自由文法は、好ましくは、情報フロー・ダウングレーダの指定と比較され、その文法がその指定を満足する場合に、入力が適切にダウングレードされたと見なされるようになっている。文脈自由文法と正規表現の指定との比較は、たとえば、１９９８年８月発表のウィスコンシン大学のThomas Repsによる「Program Analysis via GraphReachability」という論文に記載されているように、ＣＦＬ到達可能性アルゴリズムによって実行することができる。
【００８０】
たとえば、１つまたは複数のセキュリティ脆弱性について正しいダウングレーダであるとダウングレーダ機能をカテゴリー化するために、１つまたは複数の機能指定が使用される。それぞれがクロスサイト・スクリプティング（ＸＳＳ）およびＨＴＴＰレスポンス・スプリッティング（ＨＲＳ）などの１つのセキュリティ脆弱性に対応する、複数の文字列パターン（正規表現）が存在することが想定されている。たとえば、ＸＳＳおよびＨＲＳに関する文字列パターンが存在する場合、得られた文脈自由文法がその２つの文字列パターンと比較される。文脈自由文法とＸＳＳパターンとの共通部分が空ではない場合、対応する機能はＸＳＳに関して正しい情報フロー・ダウングレーダとして検出され、その共通部分は、たとえば、上述のＣＦＬ到達可能性アルゴリズムによって計算することができる。同様に、文脈自由文法とＨＲＳパターンとの共通部分が空ではない場合、対応する機能はＨＲＳに関して正しい情報フロー・ダウングレーダとして検出される。この例では、この機能はＸＳＳとＨＲＳの両方に関して正しい情報フロー・ダウングレーダとして検出される可能性があることに留意されたい。当然のことながら、本発明はＸＳＳおよびＨＲＳに限定されないが、任意の既知のまたは後日開発されるセキュリティ脆弱性とともに使用することができる。
【００８１】
使用することができ、本発明の例示的な諸実施形態で使用される他のタイプの文字列解析は、ダウングレーダの単項２次抽象化を使用して文字列解析を実行する。図３をもう一度参照すると、上述の方法などの何らかの方法でアプリケーション・コード内の１つまたは複数のダウングレーダを識別した後、ダウングレーダ抽象化エンジン３４０を使用して、ダウングレーダの抽象表現を構築する。すなわち、ダウングレーダをモデル化するためにダウングレーダの個別の抽象表現が生成されるように、アプリケーション・コード内で識別されたそれぞれのダウングレーダに対してダウングレーダ抽象化エンジン３４０を適用することができる。
【００８２】
例示的な一実施形態では、ダウングレーダ抽象化エンジン３４０は、ダウングレーダ内の文字列に関する単項２次ロジックを実現することができ、ダウングレーダのコードは単項２次ロジック内の公式として表される。文字列に適用される単項２次ロジックの実現例は、www.brics.dk/mona/papers/mona1x-new-technique-ws1s-ws2s/article.pdfから入手可能なElgaard他による「MONA 1.x: New Techniques forWS1S and WS2S」に記載されている。
【００８３】
この単項２次ロジックでは、ダウングレーダ・コード内の命令のうち、ダウングレーダ・コードへの入力を操作しないものは、可能であれば無視されるか、またはダウングレーダの結果に対するその命令の影響を反映する方法で表される。たとえば、「ｉｆ  （ｉｎｐｕｔ．ｃｏｎｔａｉｎｓ（“ｘｙｚ”））｛…｝」という形のテストは、条件の本体内で、その入力が文字列「ｘｙｚ」を含むことをアサートすることによって表される。
【００８４】
もう一度、図３を参照すると、ダウングレーダ抽象化エンジン３４０によって生成された抽象表現を使用して、ダウングレーダ評価エンジン３５０は、ダウングレーダがアプリケーション・コード内のダウングレーダ・コードへの入力を処理する方法を評価し、たとえば、入力の疑わしい部分を変換するかまたは除去／置換するためにサニタイザが動作する方法、あるいはバリデータが入力が不当であるかどうかを判断し、その入力を拒否するかどうかを判別する方法を評価する。この評価は、ダウングレーダがどのように動作すべきかを指定する形式的なセキュリティ・ガイドラインの集合などの指定に対してダウングレーダの入力処理を比較することを含む。たとえば、セキュリティ・ガイドライン・エンジン３６０は、アプリケーション・コードの動作に関するセキュリティ問題を回避するためにダウングレーダがそれに基づいて動作する必要があるルールおよび条件の集合を明記した事前確立セキュリティ・ガイドラインを提供することができる。このような事前確立セキュリティ・ガイドラインは、セキュリティ担当者によって定義し、セキュリティ・ガイドライン・エンジン３６０に関連するデータベースまたはその他のデータ構造に明記することができる。セキュリティ・ガイドライン・エンジン３６０は、それによりこのようなセキュリティ担当者またはその他のユーザがこのようなセキュリティ・ガイドラインを定義し、データベースまたはデータ構造に保管することができる、１つまたは複数のユーザ・インターフェースを提供することができる。
【００８５】
たとえば、ダウングレーダに関する事前確立セキュリティ・ガイドラインによると、ダウングレーダへの入力は受諾または拒否されなければならないが（たとえば、バリデータによって行われるものなど）、ダウングレーダによって変異させてはならない（たとえば、サニタイザによって行われるもの）ものと想定する。このセキュリティ・ガイドラインは、サニタイザよりバリデータを優先または支持する。機能的には、バリデータとサニタイザはいずれも、アプリケーションのセキュリティを保証するために等しく正しいものになる可能性があるが、サニタイザの方が推論しにくく（たとえば、サニタイザによって実行される置換動作の副作用を考慮する必要がある）、ユーザの予想の点でより問題になる（たとえば、サニタイザが実行する変更は入力の特定の論理面を無効にする可能性がある）可能性がある。
【００８６】
ダウングレーダ抽象化エンジン３４０によって生成されたダウングレーダの抽象表現を考慮して、ダウングレーダ評価エンジン３５０の静的解析メカニズム３５２は、ダウングレーダがその入力に対して実行する動作の効果を解釈し、たとえば、ダウングレーダがサニタイザを実現するなど、その入力が変異しているケースであるかどうかを判別する。そうである場合、ダウングレーダへの入力が変異するべきではないことを示すセキュリティ・ガイドライン・ルールが所定の位置にあって、セキュリティ・ガイドライン・エンジン３６０によって提供される場合、ダウングレーダ評価エンジン３５０は、評価されたダウングレーダ内にセキュリティ・ガイドラインの違反が存在することを示す出力を生成することができる。この出力は、指定の連絡先に送信される通知メッセージ、表示装置、プリンタなどのクライアント・コンピューティング・デバイスの出力装置上に生成される出力などにすることができる。通知メッセージは、たとえば、アプリケーション、違反されたセキュリティ・ガイドライン、およびセキュリティ・ガイドライン違反が検出されたアプリケーション・コード内の位置、すなわち、どのダウングレーダがセキュリティ・ガイドラインに違反したかを示すことができる。
【００８７】
その上、ダウングレーダ評価エンジン３５０は、違反を識別するとともにダウングレーダ評価エンジン３５０に関連する知識ベース３５４をチェックして、ダウングレーダを既定のセキュリティ・ガイドラインに準拠したものにするようにダウングレーダ・コードを変更するための勧告を決定するためのロジックを含むことができる。たとえば、ダウングレーダがその入力を変異させて、ダウングレーダからのサニタイゼーション済み出力を生成すると判別され、上記のセキュリティ・ガイドラインが所定の位置にある場合、ダウングレーダ評価エンジン３５０は、検出された違反に基づく知識ベース３５４ならびに静的解析メカニズムを使用して抽出可能なダウングレーダ・コードの構造に関するその他の情報をチェックし、入力を変異させるダウングレーダ・コードのサニタイゼーション要素を、入力を変異させずに入力を受諾または拒否するコードの一部分で置換するようにダウングレーダ・コードを変更することを勧告することができる。
【００８８】
いくつかの例示的な諸実施形態では、ダウングレーダ評価エンジン３５０は、ダウングレーダ・スコアリング・ロジック３５６をさらに含むことができる。ダウングレーダ・スコアリング・ロジック３５６は、ダウングレーダがセキュリティ・ガイドライン・エンジン３６０によって提供された既定のセキュリティ・ガイドラインから逸脱する程度を識別し、この逸脱の程度を定量化してダウングレーダに関するスコアを生成するように動作する。たとえば、このスコアは、単純に、ダウングレーダ・コードが違反したセキュリティ・ガイドラインの数のカウント、違反したセキュリティ・ガイドラインの数の重み付きカウントなどにすることができ、その重みは違反した特定のセキュリティ・ガイドラインに関連し、それによりセキュリティ・ガイドラインの優先順位などを示すものである。
【００８９】
ダウングレーダに関するスコアは、既定のセキュリティ・ガイドラインからのその逸脱に基づいて上記の方法で計算されると、１つまたは複数の既定のしきい値と比較され、たとえば、ダウングレーダがアプリケーションに対する軽度、中程度、または重大なセキュリティ脅威のうちのいずれかを表すものと見なされることを示す指示を得ることができる。このセキュリティ脅威レベルでのダウングレーダのカテゴリー化に基づいて、様々な処理を実行することができる。たとえば、軽度のセキュリティ脅威を表すダウングレーダについては、単純に識別し、ダウングレーダに関連する潜在的なセキュリティ問題を通知するために適切なユーザに通知を送信することができる。中程度および重大なセキュリティ脅威を表すダウングレーダについては、より優先順位が高い通知を生成し、１人または複数のユーザに送信することができ、ダウングレーダを既定のセキュリティ・ガイドラインに準拠したものにするように提案されたダウングレーダ・コードに対する変更に関する追加の情報を含むことができる。
【００９０】
いくつかの例示的な諸実施形態では、ダウングレーダ評価エンジン３５０は、ダウングレーダをセキュリティ・ガイドラインに準拠させるかまたはダウングレーダによって引き起こされたセキュリティ脅威を少なくとも軽減するように、既定のセキュリティ・ガイドラインに関するダウングレーダの評価に基づいて、ダウングレーダ・コードを自動的に変更することができる。たとえば、例示的な一実施形態では、ダウングレーダがサニタイザであると判別され、そのダウングレーダが重大なセキュリティ脅威であると判別された場合、ダウングレーダ評価エンジン３５０は、それをバリデータに変更して、それによりセキュリティ脅威を低減するようにダウングレーダのコードを自動的に変更することができる。変更されたコードは、次に、コンピューティング・デバイス上に配備する前に再コンパイルできるように、適切なユーザに提供することができる。
【００９１】
したがって、例示的な諸実施形態のメカニズムは、アプリケーション・コード内のダウングレーダ・コードを識別するためのメカニズムを提供するだけでなく、既定のセキュリティ・ガイドラインに照らし合わせてダウングレーダ・プロセスを評価できるようにこのダウングレーダ・コードを抽象化するためのメカニズムも提供する。このようにして、ダウングレーダが、セキュリティ・ガイドラインによって定義されたように、アプリケーションに関して最低限のレベルのセキュリティを提供することを保証するための自動メカニズムが提供される。例示的な諸実施形態のメカニズムは、ダウングレーダの動作の具体的な意味を控えめに捕捉する方法で文字列解析を使用してその動作をモデル化し、自動的にダウングレーダがセキュリティ・ガイドラインに適合しているかどうかに関する結論に達することができる。
【００９２】
図８は、例示的な一実施形態による自動アプリケーション解析メカニズムの動作の一例の概要を示す流れ図である。図８に示されているように、動作は解析すべきアプリケーション・コードの受信から始まる（ステップ８１０）。静的解析メカニズムをアプリケーション・コードに適用して、アプリケーション・コード内のダウングレーダ・コードを識別する（ステップ８２０）。ステップ８２０で識別された次のダウングレーダについて、ダウングレーダの抽象表現を生成する（ステップ８３０）。次に、ダウングレーダの抽象表現を使用して、既定のセキュリティ・ガイドラインに照らし合わせてダウングレーダ・プロセスを評価する（ステップ８４０）。この評価に基づいて、セキュリティ・ガイドラインの違反が検出されているかどうかに関する判断を行う（ステップ８５０）。検出されている場合、任意選択で、違反またはセキュリティ・ガイドラインからのダウングレーダ・プロセスの逸脱の程度を定量化して、ダウングレーダに関するスコアを生成する（ステップ８６０）。次に、このスコアを１つまたは複数のしきい値と比較し、それにより、セキュリティ・ガイドラインのダウングレーダ違反の重大度をカテゴリー化することができる（ステップ８７０）。加えて、任意選択で、知識ベースにアクセスしてセキュリティ・ガイドライン違反に対する推奨解決策を識別し、ダウングレーダをセキュリティ・ガイドラインに準拠させることができる（ステップ８８０）。
【００９３】
違反の検出ならびに任意選択でスコアあるいは知識ベースから得られた情報またはその両方に基づいて、セキュリティ・ガイドライン違反に関する通知メッセージを作成し出力することができる（ステップ８９０）。その後、アプリケーション・コード内に処理すべき追加のダウングレーダが存在するかどうかに関する判断を行う（ステップ８９５）。存在する場合、動作はステップ８３０に戻り、存在しない場合、動作は終了する。
【００９４】
上記の例示的な諸実施形態はＷｅｂアプリケーションなどのアプリケーション・コード内のダウングレーダを識別するための１つのメカニズムについて説明しているが、例示的な諸実施形態はこの１つのメカニズムに限定されないことに留意されたい。それとは反対に、例示的な諸実施形態の精神および範囲を逸脱せずに、ダウングレーダ機能に対応するかまたはそれを実行するアプリケーション・コード内のコードの一部分を特定するための任意のメカニズムを使用することができる。その上、例示的な諸実施形態は、ＷｅｂアプリケーションおよびＷｅｂアプリケーションに関連する情報フローに適用されるものとして記載されているが、このようなものに限定されるわけではない。むしろ、例示的な諸実施形態は、アプリケーション・コード内でまたはアプリケーション・コードに関連してダウングレーダを実現するアプリケーション・コードについて使用することができる。
【００９５】
図３をもう一度参照すると、ダウングレーダを見つけ、既定のセキュリティ・ガイドラインに照らし合わせてそれを評価するための上記のメカニズムに加えて、例示的な諸実施形態は、セキュリティ・ダウングレーダが上述の既定のセキュリティ・ガイドラインに適合している場合でも、ダウングレーダが保護しようと意図しているシステムに関するダウングレーダ内の欠陥およびダウングレーダ内の非互換性問題を検出するためのダウングレーダ欠陥／非互換性検出エンジン３７０などのメカニズムをさらに提供する。すなわち、前述のメカニズムはダウングレーダがセキュリティ・ガイドラインに関して実行しようと意図しているタイプのセキュリティ動作を実行しているかどうかを判別することができるが、以下に記載する例示的な諸実施形態の追加のメカニズムは、特定の環境におけるダウングレーダの特定の実現例がこのようなセキュリティ動作を正しく実行していること、すなわち、ダウングレーダの実現例およびそれが配備される環境に関していかなる欠陥または非互換性問題も存在しないことを保証するためのロジックを含む。
【００９６】
加えて、例示的な諸実施形態は、配備環境に関する互換性の問題を越える、ダウングレーダに関する正確さ問題にも対処することができる。すなわち、ダウングレーダ・コードは、本来、配備環境と互換性があるものになるはずであるが、ダウングレーダ自体のコードが適切に動作していない、すなわち、それが関連付けられたシステムのセキュリティを保証するために一致しなければならない不当パターンのすべてに一致しているわけではない場合、例示的な諸実施形態の一致メカニズムはダウングレーダの動作におけるこのような欠陥を検出することになる。これらは、ダウングレーダが正しく対処し損なう「最終的なケース」と呼ばれる。配備環境との互換性の問題は「水平」問題と呼ばれ、最終的なケースに対処するダウングレーダの問題は「垂直」問題と呼ばれる。
【００９７】
例示的な諸実施形態は、静的解析技法を使用して、ダウングレーダが保護することが期待されているバックエンド・ソフトウェア／ハードウェア、すなわち、環境に対して、ダウングレーダが不完全、不正確、または非互換性のものであるかどうかを自動的に識別するためのメカニズムを提供する。これは、３つの主要コンポーネントを使用して行われる。第１のコンポーネントは、ダウングレーダに対する可能入力文字列の指定に基づいて、ダウングレーダが正しく動作している場合にダウングレーダが出力できる文字列の集合の安全な近似値を計算する、文字列解析メカニズムである。
【００９８】
第２のコンポーネントは、ダウングレーダのバリデータまたはサニタイザの正確さに関する半順序集合を形成する「不当パターン」の集合である。不当パターンは、バリデータ／サニタイザ・ルーチンによって返される／受け入れられる可能性のない文字列の集合の簡潔な表現であり、たとえば、正規表現または文脈自由文法である。すなわち、不当パターンは、正規表現ｅについて安全であると見なすべきバリデータＶについて、表現ｅと一致する場合にバリデータＶが入力文字列を拒否しなければならず、表現ｅについて安全であると見なすべきサニタイザＳについて、サニタイザＳによって返されるすべての文字列が表現ｅと一致してはならないような正規表現ｅである。
【００９９】
不当パターンが意味するものを例示するために、一方のパターン（Ａ）がもう一方のパターン（Ｂ）の厳密な部分集合である、２つのパターンＡおよびＢについて検討する。ダウングレーダのバリデータがパターンＢについて正しく動作する場合、バリデータは一般に、すなわち、パターンＡについて正しく動作すると結論づけることができる。しかし、バリデータがパターンＢではなくパターンＡについてのみ正しく動作する場合、バリデータが返す／受け入れることができるが、安全ではない文字列が、パターンＡではなく、パターンＢに存在するので、バリデータはその動作において部分的に正しいだけになる。たとえば、クロスサイト・スクリプティング（ＸＳＳ）攻撃について考えられる不当パターンは、その文字列が「＜」または「＞」を含まないことをアサートするものであり、すなわち、「＜」または「＞」を含む文字列はＸＳＳ攻撃を示す可能性がある。より限定的な不当パターンは、文字列が「ｊａｖａｓｃｒｉｐｔ：」という部分文字列を含まないことも要求するであろう。したがって、不当パターンの集合は、バックエンド・ソフトウェア／ハードウェア・システムのセキュリティに違反せずに、ダウングレーダのバリデータ／サニタイザによって返す／受け入れることができない文字列の集合を表す。この半順序、すなわち、限定的、より限定的などである不当文字列の集合は、以下に述べるように、最終的なケースが対処されず、その結果、どのようにダウングレーダを矯正または修正しなければならないかを示すために使用できる、解析見通しを可能にするメカニズムを提供する。
【０１００】
第３のコンポーネントは、ダウングレーダが保護することが期待されている環境文脈の指定、すなわち、それによりダウングレーダが動作するはずのソフトウェア、場合によってはハードウェアの記述である。たとえば、環境文脈は、ダウングレーダが配備される予定であるかまたはすでに配備されているサーバのタイプ（たとえば、プロセッサのタイプおよび数、メモリの量など）、Ｍｉｃｒｏｓｏｆｔ（ＭＳ）構造化照会言語（ＳＱＬ）サーバ、ＤＢ２など、サーバ上で実行されるデータベース・サーバ・ソフトウェアなどを指定することができる。異なるコンテナは要求解析および処理の点で異なる挙動を示す可能性があり、それにより使用する異なるダウングレーダを指図する可能性があるので、環境文脈情報は、データベース・アプリケーションが配備されるアプリケーション・コンテナのタイプ、たとえば、Ｔｏｍｃａｔ、ＪＢｏｓｓ、ＷｅｂＳｐｈｅｒｅなどをさらに指定することができる（たとえば、Ｔｏｍｃａｔは、ＨＴＴＰレスポンス・スプリッティング（ＨＴＴＰＲＳ）攻撃に対してその値を安全なものにする「＼ｒ＼ｎ」というパターンをパラメータ値から除去するが、これは必ずしもＷｅｂＳｐｈｅｒｅには該当しない）。
【０１０１】
もう一度、図３に関連して説明すると、環境文脈３９０、すなわち、上述の「第３のコンポーネント」は、入出力インターフェース３２０を介して、１つまたは複数のグラフィカル・ユーザ・インターフェースなどに受信された入力により、ユーザ指定することができる。代わって、環境文脈３９０は、その環境が存在するシステムによって維持された構成情報から自動的に発見または推論することができる。たとえば、データベース・システムでは、そのデータベース・システムのタイプを定義する環境文脈指定３９０は、データベース・システムに関する構成情報を解析し、データベース・ソフトウェアの配備などを検査することにより、発見または推論することができる。クロスサイト・スクリプティング（ＸＳＳ）攻撃などの処理を対象とするダウングレーダなどのその他の事例では、ＨＴＭＬ文脈情報を使用することができる。このような場合、ダウングレーダ内に流れ込むデータに関する静的データ・フロー解析を実行して、どのＨＴＭＬ描写ステートメントがダウングレーダの出力に依存するデータ・フローであるかを判別することができ、次に文字列解析は、その情報が描写されるポイントでＨＴＭＬ文脈（複数も可）を確立することができる。このような静的解析技法は第１２／８２５，２９３号に記載されている。
【０１０２】
特定のダウングレーダの場合、ダウングレーダによって突き合わせが行われる、すなわち、不当なものとして識別することができる不当パターンの集合の定義は、ユーザによって提供されるかあるいはその他の方法でダウングレーダ・コードの解析から決定される。すなわち、様々な環境について、１つのダウングレーダは種々の不当パターンと一致する可能性がある。特定のダウングレーダが一致する特定の不当パターンは、ユーザによって指定され、たとえば、正当／不当文字列パターン・データベース３８０に保管するか、あるいはその他の方法で特定のダウングレーダに関連付けることができる。しかし、その他の例示的な諸実施形態では、ダウングレーダ・コードをダウングレーダ欠陥／非互換性検出エンジン３７０またはその他のツール（図示せず）によって解析して、特定のダウングレーダが探して突き合わせる特定のパターンであって、入力の拒否を示す（バリデータの場合）かまたは入力の変更の基礎になる（サニタイザの場合）特定のパターンを識別することができる。
【０１０３】
さらに、様々なタイプのダウングレーダ、たとえば、ＸＳＳ攻撃、ＳＱＬｉ攻撃などを対象とするダウングレーダについて、不当パターンの複数の集合を正当／不当文字列パターン・データベース３８０に保管することができる。この不当パターンの集合は、同じタイプの複数の異なるダウングレーダに関する不当パターンならびにこれらのダウングレーダを実現できる複数の異なる環境に関する不当パターンを含むことができる。したがって、たとえば、評価中のダウングレーダのタイプに基づいて、不当パターンの特定の集合を識別することができる。たとえば、ダウングレーダ欠陥／非互換性検出エンジン３７０は、解析中のダウングレーダのタイプを決定し、正当／不当文字列パターン・データベース３８０から対応する不当文字列パターンの集合を取り出すことができる。ダウングレーダ・タイプは、ダウングレーダが禁止しなければならない脆弱な情報フローに応じて、アプリケーションの文脈から決定することができる。たとえば、ＸＳＳシンクからＸＳＳソースへの情報フローを仲介するダウングレーダ呼び出しが存在する場合、例示的な諸実施形態は、ＸＳＳ指定（不当パターンを含む）についてその呼び出しを検証することになる。脆弱な情報フローに沿ったどの呼び出しがダウングレーダ呼び出し候補であるかを決定することは、呼び出されるメソッドのシグニチャに基づいて、発見的に解決することができる（たとえば、サニタイザの場合はＳｔｒｉｎｇ−＞Ｓｔｒｉｎｇ、バリデータの場合はＳｒｉｎｇ−＞Ｂｏｏｌｅａｎ）。
【０１０４】
たとえば、ＳＱＬインジェクション（ＳＱＬｉ）攻撃を検出し処理することを対象とするダウングレーダは、以下に示すような不当文字列パターンの集合に関連付けることができる。
【数２４】
0005940160.tif 000025
【０１０５】
これらの不当文字列パターンの例の構造は以下の通りである。パターンは、．＊で始まり（そして終わり）、このパターンがダウングレーダの入力文字列内で一致を探していることを意味する（以下を参照）。次に、パターンは、左小括弧（を含み、不当パターンと見なされるものの集合の始まりを示す。次に、パターンは、縦棒「｜」で区切られた不当パターンのリストを含む。パターンは、右小括弧）で不当パターンの集合を閉じ、パターンは、「．＊」で終わる。
【０１０６】
たとえば、上記で定義したＳＱＬｉ不当文字列パターンでは、突き合わせようと試みている以下の不当文字列の集合が存在する。
‘
“（＼＼ｘ２２によって定義される）
コメント文字。使用するＳＱＬ構文に応じて、＃、−−、または／＊＊／のいずれか。
＝
；
＋
ｃｈａｒ（＼ｄ＋）  これは本質的に、「ｃｈａｒ」ＳＱＬ関数の後に１つまたは複数の数字の連続が続くものである。［Ｃｃ］の使用により、「ｃｈａｒ」というワードの突き合わせをケースインセンシティブなものにすることができることに留意されたい。これは、ケースセンシティブまたはケースインセンシティブに突き合わせる能力を与えるものである。
【０１０７】
この３つの不当パターンのそれぞれは、１つの小さいが重要な部分、すなわち、突き合わせるコメント文字のタイプを除いて、同じである。第１のパターンでは、＃というシングルライン・コメント区切り文字を突き合わせ、第２のパターンでは、−−というシングルライン文字を突き合わせ、第３のパターンでは、／＊＊／というマルチライン区切り文字を突き合わせる。それぞれのパターンの残りの部分は依然として同じである。
【０１０８】
異なるＳＱＬ言語には異なるスタイル・コメントが使用される。たとえば、Ｏｒａｃｌｅデータベースで使用されるＰＬ／ＳＱＬおよびＭｉｃｒｏｓｏｆｔデータベースで使用されるＴ−ＳＱＬは、−−シングルライン・コメントと／＊＊／マルチライン・コメントを使用し、ＭｙＳＱＬは有効コメント構文のリストに＃シングルライン・コメントを追加する。
【０１０９】
上記の不当パターンのそれぞれは、ダウングレーダを実現することができる異なる環境（たとえば、Ｔ−ＳＱＬまたはＰＬ／ＳＱＬなどのＳＱＬダイアレクト）に関連付けられる。ダウングレーダは、ＳＱＬｉ攻撃に対応する入力文字列を識別するときに、これらの不当パターンのうちの１つと一致する可能性がある。本質的に、入力文字列がダウングレーダで受信され、その入力文字列またはその入力文字列の一部がこれらのパターンのうちの対応する１つと一致する場合、ダウングレーダはその入力文字列を潜在的脅威として検出し、その入力を拒否するか（バリデータ）または不当文字列パターンと一致する入力文字列の一部分を除去または変更するように入力文字列を変更する（サニタイザ）。
【０１１０】
環境文脈情報３９０は、特定の環境文脈について、どの文字列パターンを特定のダウングレーダによって突き合わせるべきか、すなわち、ダウングレーダのバリデータ／サニタイザによって不当文字列パターンとして識別するべきかを判別するために、ダウングレーダ欠陥／非互換性検出エンジン３７０によって使用される。すなわち、環境文脈指定３９０は、環境文脈指定３９０に対応する特定の環境において、ダウングレーダの実現例によって不当文字列パターンの集合のうちの不当文字列パターンのどれを突き合わせるべきかを判別するために使用することができる。以下に説明するように、ダウングレーダは一致していなければならない不当パターンと実際に一致しているかどうかを判別することができ、一致していない場合、そのダウングレーダが配備される環境と非互換性のものであることを示す指示を生成することができる。
【０１１１】
たとえば、ＭＳ  ＳＱＬサーバの場合、ＳＱＬインジェクション（ＳＱＬｉ）攻撃をターゲットにするダウングレーダは、特定の入力集合について、特定の出力集合を生成することになる。これにより、ダウングレーダ欠陥／非互換性検出エンジン３７０の文字列解析メカニズムは、ダウングレーダによって返される／受け入れられる可能性のある文字列の集合の安全な近似値、すなわち、ダウングレーダが適切に機能していて、それが実現される環境と互換性のあるものである場合に入力文字列の集合が与えられたダウングレーダの有効出力である文字列の集合を計算する。安全な近似値とは、その解析がダウングレーダについて計算する戻り値の集合が、プログラムの具体的な実行で返す可能性のある戻り値の集合を含むことを意味する。これはその解析が片寄ったエラーを発生することを意味し、すなわち、正しいダウングレーダを間違ったものとして分類する可能性がある（それによりフォールス・ポジティブが発生する）が、逆の場合は同様ではない。
【０１１２】
たとえば、ダウングレーダがサニタイザである場合、ダウングレーダは文字列を受け入れ、１つまたは複数のその後のセキュリティ上敏感な動作による使用のために安全なものにするようにその文字列を変更し、したがって、変更された文字列はダウングレーダによって「返される」安全な文字列になる。ダウングレーダがバリデータである場合、バリデータは、その文字列が有効であるかどうかを示すブール値を返し、それは文字列を「受け入れる」かまたは「拒否する」という用語が意味するものになる。したがって、バリデータの場合、ダウングレーダによって受け入れられる可能性のある文字列の集合の安全な近似値がダウングレーダ欠陥／非互換性検出エンジン３７０によって計算される。
【０１１３】
したがって、ダウングレーダ欠陥／非互換性検出エンジン３７０は、入力文字列パターンＳについて、特定の環境で実現された特定のタイプのダウングレーダが正しく動作していて、その特定の環境と互換性のあるものである場合に、そのダウングレーダが特定の有力出力Ｏを生成すると判断することができる。これは、関心のあるそれぞれの入力文字列パターンＳについて、またダウングレーダ・タイプおよび配備環境の組み合わせのそれぞれについて、行うことができる。ダウングレーダ・タイプおよび環境の様々な組み合わせについて結果として得られる正当文字列パターンの集合は、正当／不当文字列パターン・データベース３８０に保管することができる。一例として、ダウングレーダが文字列Ｓを受け入れ、その文字列の長さが５以下である場合に、その文字列に５つの「＄」（空白）文字の連続を埋め込むものと想定する。ダウングレーダは、その戻り値にＳ−＞Ｓ（＄）＊という近似値を使用することができる。すなわち、戻り文字列は、入力文字列Ｓの後に０個以上の＄という文字の連続が続くものにすることができる。これは、ダウングレーダによって返される可能性のある文字列の厳密な上位集合である、文字列の集合を記述するものである。
【０１１４】
ダウングレーダのタイプ、環境文脈指定３９０、および正当／不当文字列パターン・データベース３８０内の正当／不当文字列パターンを使用して、ダウングレーダ欠陥／非互換性検出エンジン３７０は、特定のダウングレーダに欠陥があるかあるいはその他の点でそれが配備されているかまたは配備される予定の環境と非互換性のものであるかを判別することができる。その後、欠陥／互換性ならびにその欠陥または非互換性を矯正するためにダウングレーダを変更する必要性について通知するために、ダウングレーダ欠陥／非互換性検出エンジン３７０によってダウングレーダの欠陥／非互換性に関する通知を生成し、入出力インターフェース３２０を介して適切な個人のコンピューティング・デバイスに送信することができる。
【０１１５】
上記で概説したように、ダウングレーダの正確さは典型的に絶対判断ではなく、むしろ、ダウングレーダが機能する文脈、すなわち、ダウングレーダが配備されているかまたは配備される予定である環境に依存する相対判断である。たとえば、環境文脈指定３９０は、環境文脈指定３９０に関連する特定のダウングレーダの動作を妥当性検査するための要求とともにダウングレーダ欠陥／非互換性検出エンジン３７０にサブミットすることができる。環境文脈指定３９０は、たとえば、ダウングレーダの配備環境の特定のソフトウェア構成あるいはハードウェア構成またはその両方などを指定することができる。環境文脈指定３９０および妥当性検査すべきダウングレーダに基づいて、ダウングレーダ欠陥／非互換性検出エンジン３７０は、ダウングレーダのタイプおよび環境のタイプを決定することができる。ダウングレーダのタイプおよび環境のタイプに基づいて、正当／不当文字列パターン・データベース３８０から対応する正当および不当文字列パターンの集合を取り出すことができる。
【０１１６】
例示的な一実施形態では、正当文字列パターンの集合を正当／不当文字列パターン・データベース３８０に保管するのではなく、ダウングレーダにサブミットされる特定の入力文字列ならびにダウングレーダのタイプおよび環境のタイプに基づいて、正当文字列パターンの集合を動的に決定することができる。すなわち、ダウングレーダのタイプおよび環境のタイプに基づいて、ダウングレーダ欠陥／非互換性検出エンジン３７０は、正当／不当文字列パターン・データベース３８０からのどの不当文字列パターンについてダウングレーダが一致しなければならないかを決定することができる。この情報により、ダウングレーダ欠陥／非互換性検出エンジン３７０は、特定の入力文字列の場合、ダウングレーダが正しく動作していて、環境のタイプと互換性のあるものである場合に、特定のタイプの環境において特定のタイプのダウングレーダによって特定の安全または有効な出力が生成されるはずであると判断することができる。
【０１１７】
次に、ダウングレーダの出力を正当文字列パターンの集合と比較して、不一致が存在するかどうか、すなわち、特定の入力文字列について、出力文字列が正当文字列パターンの集合にない文字列を含むかどうかを判別することができる。そうである場合、ダウングレーダの出力に含まれる文字列パターンが不当文字列パターンの集合に含まれるかどうかに関する判別を行うことができる。これにより、ダウングレーダがどの不当文字列パターンと一致しているかを決定することができ、ダウングレーダが一致している不当文字列パターンが、ダウングレーダが配備されるかまたはすでに配備されている環境について正しいものであるかどうか、すなわち、ダウングレーダが配備環境と互換性のあるものであるか非互換性のものであるかを判別することができる。ダウングレーダ・コードは典型的に多くの条件付き分岐およびループを含み、それは正確に追跡しにくいものであるので、単純にダウングレーダ・コードを調べてもダウングレーダが一致している不当文字列パターンを決定することができない。このため、例示的な諸実施形態は、ダウングレーダ・コード自体の網羅的で複雑かつ誤りを犯しやすい解析を実行する必要なしに、ダウングレーダがどの不当文字列パターンと一致しているかを決定するためのメカニズムを提供する。
【０１１８】
上述の比較は、（ｉ）サニタイザの場合のサニタイザの戻り値または（ｉｉ）バリデータの場合にダウングレーダによって受け入れられる文字列の集合の安全な近似値として機能する正規表現を計算することによって実行される。次に、正規表現同士を比較するための標準的な技法を使用して、この解析では、そのガイドライン指定に応じてダウングレーダを分類する。たとえば、ダウングレーダの近似値が正規表現Ｒであり、ＲがＤＢ２に関する正規表現の部分集合であるが、他のデータベース・サーバに関するものではない場合、ダウングレーダはＤＢ２が使用される環境には正しいものである。次に、配備環境に関する情報を使用して、互換性問題が存在するかどうか、すなわち、配備環境が正規表現が有効である環境と一致するかどうかを判別し、たとえば、正規表現がＤＢ２に有効であり、配備環境がＤＢ２である場合、互換性問題はまったく存在しないが、配備環境が異なる環境である場合、互換性問題が存在する。
【０１１９】
上記の互換性または非互換性に関する判断に基づいて、適切なユーザのコンピューティング・デバイスに、互換性または非互換性を示す通知を送信することができる。たとえば、ダウングレーダの解析を開始するユーザは、その解析の結果がそのコンピューティング・デバイスを介して自分に返される可能性がある。通知に含まれる解析の結果は、ダウングレーダが互換性があるかまたは非互換性のものであるかを示す指示を含むだけでなく、適切な修正勧告を決定する可能性もあり、問題に関する追加情報をユーザに指し示す可能性がある。この修正勧告およびその他の情報は、例示的な諸実施形態のアプリケーション解析メカニズム３００の一部であるかまたはそれに関連する知識データベース（図示せず）に保管することができる。たとえば、例示的な諸実施形態によって実行された解析が、何らかの最終的なケースが正しく処理されていないと判断した場合、その最終的なケースの修正についてデータベースが調べられる。
【０１２０】
たとえば、前述の例におけるＳＱＬｉ攻撃および不当文字列パターンの集合例について検討する。例示的な諸実施形態のメカニズムの場合、環境文脈指定３９０（たとえば、データベース・サーバのタイプ）に基づいて、例示的な諸実施形態のメカニズムは、ターゲット・ダウングレーダがどの文字列パターンと一致しなければならないか、すなわち、上述の不当文字列パターンの集合を決定する。ダウングレーダ欠陥／非互換性検出エンジン３７０によって文字列解析を実行して、ターゲット・ダウングレーダによって返される／受け入れられる可能性のある文字列パターンの集合の安全な近似値を計算する。文字列パターンの集合の安全な近似値を不当文字列パターンの集合と比較して、安全な近似値がどの不当文字列パターン（複数も可）と一致しているかを決定する。次に、一致した不当文字列パターンに関連する対応配備環境をターゲット・ダウングレーダに関する配備環境または意図された配備環境（環境文脈指定３９０によって定義されたもの）と比較して、ターゲット・ダウングレーダが環境文脈指定３９０で識別された環境と互換性があるかどうかを判別する。
【０１２１】
たとえば、環境文脈指定３９０で指定されたデータベース・サーバがＭｉｃｒｏｓｏｆｔ  ＳＱＬサーバであり、ＭＳ  ＳＱＬサーバ環境についてダウングレーダによる一致のための正しい不当文字列パターンである第２のパターン、すなわち、
【数２５】
0005940160.tif 000026
ではなく、第１の不当文字列パターン、すなわち、
【数２６】
0005940160.tif 000027
と一致する場合、ダウングレーダ欠陥／非互換性検出エンジン３７０は、異なるタイプのデータベース・サーバが使用されるという想定の下でそのダウングレーダが動作していることを示す非互換性問題を識別する。ダウングレーダ欠陥／非互換性検出エンジン３７０は、識別された非互換性を矯正するための勧告をさらに決定することができる。この情報ならびに非互換性問題を解決するためのその他の情報源に関する言及は、１つまたは複数のコンピューティング・デバイスを介して通知として適切なユーザに送信することができる。
【０１２２】
それが配備されている配備環境に関するダウングレーダ非互換性問題を識別することに加えて、ダウングレーダ欠陥／非互換性検出エンジン３７０は、その配備環境と互換性があり、欠陥がないものと判断できるダウングレーダの有効性をさらに検出することができる。配備環境と互換性があり、欠陥がないダウングレーダの有効性に関するこの検出は、上記のダウングレーダ非互換性問題の識別とともにまたはそれとは別に行うことができる。すなわち、ダウングレーダの有効性の検出より先行して、ダウングレーダ非互換性問題の識別を実行する必要はない。
【０１２３】
ダウングレーダの有効性は、ダウングレーダが環境文脈指定３９０によって指定された識別済み配備環境内で正しく一致する可能性がある不当文字列パターンの様々な強度レベルを識別することによって決定することができる。不当文字列パターンの強度は、ダウングレーダ動作が不当文字列パターンについてどの程度完全であるかを示す尺度にすることができ、強い不当パターンは完全なダウングレーダ動作を示すことができ、弱い不当パターンは部分的に完全なダウングレーダ動作を示すものである。したがって、例示的な諸実施形態のメカニズムを使用して、様々なレベルの完全性または強度を定義し識別することができる。
【０１２４】
たとえば、正当／不当文字列パターン・データベース３８０は、それぞれのタイプの配備環境およびそれぞれのタイプのダウングレーダに関連して、ダウングレーダが一致する可能性のある複数の不当文字列パターンの集合を保管することができ、それぞれの不当文字列パターンは関連の強度値を有する。たとえば、ＭＳ  ＳＱＬサーバなどの特定の配備環境について、その配備環境に関するＳＱＬｉダウングレーダは以下の３つの不当文字列パターンのいずれかと一致する可能性がある。
【数２７】
0005940160.tif 000028
【０１２５】
ダウングレーダ欠陥／非互換性検出エンジン３７０は、ターゲット・ダウングレーダが第１の不当文字列パターンの要件を満たす文字列のみを出力するかどうかを判別することができる。そうである場合、ダウングレーダは、配備環境と非互換性のものではなく、ＳＱＬｉ攻撃に対して強い執行性も実現する。しかし、ダウングレーダが、第１の不当文字列パターンではなく、上記の第２の不当文字列パターンと一致している文字列を出力する場合、すなわち、ダウングレーダが、第２の不当文字列パターンではなく、第１の不当文字列パターン内の文字列パターンを含む文字列を出力する場合、ダウングレーダの有効性はそれがあるべきものより比較的弱いと判断することができる。ダウングレーダ欠陥／非互換性検出エンジン３７０は、ターゲット・ダウングレーダが欠陥がある／配備環境と非互換性のものであるかどうかを判別した後で生成される通知などで、ダウングレーダがバックエンド・システムを保護している攻撃に対するダウングレーダの強度を示す指示をユーザに返すことができる。ダウングレーダ欠陥／非互換性検出エンジン３７０は、ダウングレーダによって提供されている保護について検出された弱点に関する推奨解決策をさらに決定することができる。たとえば、ダウングレーダが第２の不当文字列パターンのみと一致すると判断された場合、その勧告は、第１の不当文字列パターンとの一致を実現するようダウングレーダを変更することになる可能性がある。その上、ダウングレーダは、より多くの配備環境で正しく動作させることによって強化することができ、たとえば、ダウングレーダが１つの配備環境についてのみ正しく動作している場合に、より多くの配備環境、たとえば、より多くのデータベース・サーバ・タイプをサポートするようにダウングレーダ自体を拡張することができるであろう。
【０１２６】
したがって、例示的な諸実施形態は、ダウングレーダに欠陥があるかあるいはダウングレーダがそれが配備されているかまたは配備される予定の配備環境と非互換性のものであるかを判別することができ、配備環境と互換性があるかまたは非互換性のものであるダウングレーダによって提供されている保護の強度をさらに決定することができる。これらは互いに別々にまたは互いに連携して行うことができる。たとえば、ダウングレーダは複数の点でその配備環境にとって正しくないものである可能性がある。たとえば、ＳＱＬｉダウングレーダは、バックエンド・データベース・サーバと非互換性のものである可能性があるが、比較的弱い不当文字列パターンのみと一致すると判断される可能性もある。例示的な諸実施形態のメカニズムは、両方の「軸」、すなわち、互換性軸と強度軸に沿ってダウングレーダの不正確さを検出することができる。
【０１２７】
図９は、例示的な一実施形態によるダウングレーダの欠陥／非互換性を決定するための動作の一例の概要を示す流れ図である。図９に概要を示した動作は、たとえば、図３のアプリケーション解析メカニズム３００によって実現することができる。
【０１２８】
図９に示されているように、動作は、アプリケーション・コードを受信し（ステップ９１０）、アプリケーション・コード内のダウングレーダ・コードを識別する（ステップ９２０）ことによって始まる。これらの動作は、たとえば、図３のダウングレーダ検出エンジン３３０によって実行することができる。残りの動作は、たとえば、図３のダウングレーダ欠陥／非互換性検出エンジン３７０によって実行することができる。識別されたダウングレーダ・コードに関する環境文脈指定を受信／決定する（ステップ９３０）。上述の通り、環境文脈指定は、ユーザ指定のものにするか、あるいは識別されたダウングレーダ・コードが配備されているかまたは配備される予定である配備環境を調べることによって決定することもできる。
【０１２９】
その後、識別されたダウングレード・コード内の次のダウングレーダについて、１つまたは複数の入力文字列の集合に関する有効ダウングレーダ出力文字列パターンの集合の安全な近似値を求める（ステップ９４０）。有効ダウングレーダ出力文字列パターンのこの集合は、特定の入力文字列に基づいて動的に決定するか、あるいは評価中の特定のタイプのダウングレーダに関する正当（有効）ダウングレーダ文字列パターンを保管する記憶装置／システムから取り出すことができる。評価中の特定のダウングレーダに関する不当文字列のパターンの集合も不当文字列パターン記憶装置／システムから取り出す（ステップ９５０）。有効出力文字列パターンの安全な集合、不当文字列パターンの集合、および環境文脈指定を比較する（ステップ９６０）。配備環境に対するダウングレーダの互換性およびダウングレーダによって提供される保護の相対強度に関する判断を行う（ステップ９７０）。この判断に基づいて、許可ユーザへの出力として適切な通知を生成する（ステップ９８０）。次に、評価すべきそれ以上のダウングレーダが存在するかどうかに関する判断を行う（ステップ９９０）。存在する場合、動作はステップ９４０に戻り、存在しない場合、動作は終了する。
【０１３０】
したがって、例示的な諸実施形態は、アプリケーション・コード内のダウングレーダを識別し、ダウングレーダに欠陥があるかあるいはダウングレーダが配備されているかまたは配備される予定の配備環境と非互換性のものであるかについてダウングレーダを評価するためのメカニズムを提供する。その上、例示的な諸実施形態は、ダウングレーダによって提供される保護の相対強度を決定するためのメカニズムを提供する。これらの評価の結果を含む通知を生成することができ、その通知は、任意選択で、ダウングレーダを配備環境と互換性のあるものにするかあるいはダウングレーダによって提供される保護の強度を増すかまたはその両方を行う方法に関する勧告も含むことができる。その結果、その配備環境に関するダウングレーダの最適実現例を保証するために、ダウングレーダの非互換性ならびにこのような非互換性の矯正方法がユーザに通知される。
【０１３１】
上記のように、例示的な諸実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含む実施形態の形を取ることができることを認識されたい。一実施形態の例では、例示的な諸実施形態のメカニズムは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアまたはプログラム・コードで実現される。
【０１３２】
プログラム・コードの保管あるいは実行またはその両方に適したデータ処理システムは、システム・バスを介して記憶素子に直接または間接的に結合された少なくとも１つのプロセッサを含むことになる。記憶素子としては、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量記憶装置と、実行中に大容量記憶装置からコードを検索しなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶を提供するキャッシュ・メモリとを含むことができる。
【０１３３】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接あるいは介在する入出力コントローラを介してシステムに結合することができる。データ処理システムが介在する私設網または公衆網を介してその他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になれるようにするために、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なタイプのネットワーク・アダプタのうちのいくつかに過ぎない。
【０１３４】
本発明の説明は、例示および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は当業者にとって明白になるであろう。この実施形態は、本発明の原理、実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【図１】
0005940160.tif 000029
【図２】
0005940160.tif 000030
【図３】
0005940160.tif 000031
【図４】
0005940160.tif 000032
【図５】
0005940160.tif 000033
【図６】
0005940160.tif 000034
【図７】
0005940160.tif 000035
【図８】
0005940160.tif 000036
【図９】
0005940160.tif 000037