(57)【要約】  スクリプトプログラムの不安全動作を検出するため、及び防止するための方法及び装置が、本明細書で開示される。一実施形態において、その方法は、第１の安全ポリシーに基づくスクリプトプログラムの静的解析を実行して、そのスクリプトプログラムの不安全動作を検出する工程、及びそのスクリプトプログラムが実行された際に、その安全ポリシーに対する違反が生じた場合、そのスクリプトプログラムの実行を防止する工程を含む。【選択図】  なし
2009521737.tif 000002
【特許請求の範囲】
【請求項１】
第１の安全ポリシーに基づくスクリプトプログラムの静的解析を実行して、前記スクリプトプログラムの不安全動作を検出する工程と、及び
前記スクリプトプログラムが実行される際に、前記安全ポリシーについての違反が生じる場合、前記スクリプトプログラムの実行を防止する工程とを含む方法。
【請求項２】
システムによって実行されると、
第１の安全ポリシーに基づくスクリプトプログラムの静的解析を実行して、前記スクリプトプログラムの不安全動作を検出する工程と、及び
前記スクリプトプログラムが実行される際に、前記安全ポリシーについての違反が生じる場合、前記スクリプトプログラムの実行を防止する工程とを含む方法を、前記システムに実行させる命令が格納された１つ又は複数のコンピュータ可読媒体を有する製造品。
【請求項３】
第１の安全ポリシーに基づいてスクリプトプログラムを解析する工程と、及び
前記スクリプトプログラムの安全な実行を確実にするように前記スクリプトプログラムを変更する工程とを含む方法。
【請求項４】
システムによって実行されると、
第１の安全ポリシーに基づいてスクリプトプログラムを解析する工程と、及び
前記スクリプトプログラムの安全な実行を確実にするように前記スクリプトプログラムを変更する工程とを含む方法を、前記システムに実行させる命令が格納された１つ又は複数のコンピュータ可読媒体を有する製造品。
【発明の詳細な説明】
【優先権】
【０００１】
[0001]本特許出願は、２００５年１１月１０日に出願した「Ａ  Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｄｅｔｅｃｔｉｎｇ  ａｎｄ  Ｐｒｅｖｅｎｔｉｎｇ  Ｕｎｓａｆｅ  Ｂｅｈａｖｉｏｒ  ｏｆ  ＪａｖａＳｃｒｉｐｔ  Ｐｒｏｇｒａｍｓ」という名称の対応する特許仮出願第６０／７３５７７２号、及び２００５年１１月１０日に出願した「Ａ  Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｐｏｌｉｃｙ−Ｇｕｉｄｅｄ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  ｏｆ  ＪａｖａＳｃｒｉｐｔ  Ｐｒｏｇｒａｍｓ  ｔｏ  Ｇｕａｒａｎｔｅｅ  Ｓａｆｅｔｙ」という名称の特許仮出願第６０／７３５５１３号の優先権を主張し、これらの出願を参照により組み込む。
【発明の分野】
【０００２】
[0002]本発明は、コンピュータプログラミングの分野に関し、より詳細には、本発明は、プログラムの不安全動作を検出すること、及び防止することに関する。
【発明の背景】
【０００３】
[0003]Ｗｅｂブラウザセキュリティには、深刻な問題が存在する。多数の攻撃が、クライアント側ブラウザに対して行われて、機微なユーザ情報（パスワード、オンラインＩＤ）の保全性を危うくし、クライアントマシンのパフォーマンスを極度に低下させている。これらの攻撃は、しばしば、ＪａｖａＳｃｒｉｐｔのような普及しているクライアント側のスクリプト言語に見られる計算機能を濫用し、ブラウザ及びスクリプトインタープリタ（解釈プログラム）の実装エラーを濫用する。セキュリティ状況は、さらに多様な移動体ブラウザ（及び潜在的なセキュリティ上の欠陥）、及び悪意のあるスクリプトがデバイスリソースを濫用する機会を有する携帯電話デバイス上で、潜在的にさらに悪化している。
【０００４】
[0004]一般的で、有害な攻撃のいくつかの例には、以下に詳しく説明されるとおり、クロスサイトスクリプティング、フィッシング、サービス拒否、及びＡＰＩ濫用が含まれる。
【０００５】
[0005]ＸＳＳ（クロスサイトスクリプティング）は、Ｗｅｂベースのアプリケーションにおいてよく見られる最も重大なセキュリティ脆弱性の１つである。そのような脆弱性は、攻撃者が、信頼されるＷｅｂサーバによって生成されたＷｅｂページに或るスクリプト（例えば、ＪａｖａＳｃｒｉｐｔ）を挿入することを可能にする。ブラウザは、その挿入されたスクリプトを、そのスクリプトがサーバによって提供されたかのように実行する。ブラウザのセキュリティ規制は、Ｗｅｂページの出所に基づくので、そのスクリプトは、セキュリティ規制を回避して、そのＷｅｂアプリケーションのドメインと同一の許可のもとでブラウザによって実行される。この状況が、図２に示される。一般に、ＸＳＳ脆弱性は、利用するのが非常に容易である。ＸＳＳ脆弱性の利用は、無知なユーザが、電子メール又はインスタントメッセージからのリンクをクリックすること、又は単に、Ｗｅｂフォーラムを読むことから始まる可能性がある。ＸＳＳ脆弱性を利用して、悪意のある人々が、迷惑な動作（例えば、ブラウザホームページの変更）から、偽情報の提示（例えば、ホスティングＨＴＭＬを動的に変更することによる）、アカウント乗っ取り（例えば、クッキーからユーザのログイン及びパスワードを盗むことによる）までに及ぶ様々な攻撃を仕掛けることが可能である。ブラウザの実装上の欠陥（セキュリティホール）の利用と相俟って、攻撃者が、ユーザファイルを読み取ることや、悪意のあるプログラムを実行することなどの、さらに大きな被害をもたらすことが可能である。
【０００６】
[0006]ＪａｖａＳｃｒｉｐｔは、ＤＯＭ（ドキュメントオブジェクトモデル）を介して、又はネットワークアクセスを提供する様々なＡＰＩを介して、いくつかのハンドセットリソース（handset resources）へのアクセスを提供するため、悪意のあるＪａｖａＳｃｒｉｐｔコードが、これらのリソースを濫用する可能性が存在する。対象となるリソースには、以下が含まれる。すなわち、ＪａｖａＳｃｒｉｐｔが、ＤＯＭの一部分であるクッキーへの書込みアクセスを許されていることから、ディスクスペース、ＪａｖａＳｃｒｉｐｔが、そのＪａｖａＳｃｒｉｐｔが出所であるサイトとの接続を開くことができることから、ネットワーク使用（特に、そのような使用は、ユーザの注意を引いているウインドウから生成されるウインドウの内側に隠され、そのため、意図していないネットワーク使用をもたらす可能性がある）、ウインドウサイズ、ウインドウ位置付けなどのユーザインターフェース要素（ＪａｖａＳｃｒｉｐｔは、ＪａｖａＳｃｒｉｐｔが開くウインドウに関するこれらの属性を、ＤＯＭを介して変更する能力を有する）、及び「戻るボタン」などのブラウザ要素の見込まれる機能（悪意のあるＪａｖａＳｃｒｉｐｔは、制御スレッドが、戻るボタンを介して、又は異なるリンクをクリックすることにより、或る特定のページを離れようと試みた際に生じるイベントを再プログラミングすることができる）である。
【０００７】
[0007]フィッシング（別名、スプーフィング）は、社会工学に基づく或る形態の攻撃である。フィッシングは、信頼される相手（例えば、銀行Ｗｅｂサイト）を装って被害者を騙して、機微な情報（例えば、パスワード及びクレジットカード番号）を明かさせる。ますます多くのフィッシング攻撃が行われており、標的は、通常、銀行及びオンライン支払いサービスの顧客である。これらの攻撃によってもたらされる被害は、相当な金銭的損失や身元情報の盗難という深刻なものであることが可能である。
【０００８】
[0008]ＩＥなどのブラウザにおいて、ＪａｖａＳｃｒｉｐｔは、ｃｌｉｐｂｏａｒｄＤａｔａという名称のオブジェクトを介して、ユーザのクリップボードへのアクセスを有する。このオブジェクトは、３つのクリップボード活動、すなわち、クリアすること、読み取ること、及び書き込むことのためのＡＰＩを提供する。例えば、以下の単純化なスクリプトが、クリップボードからテキストを読み取り、そのテキストをブラウザにおいて表示する。
document.write(window.clipboardData.getData(’Text’));
【０００９】
[0009]クリップボードが、潜在的に、現在のＷｅｂページと、システムの他の部分との間で共有されるリソースの役割をすることが可能であることを見て取ることは、難しくない。これにより、同一の出所のポリシーを回避するためのチャネルがもたらされることが可能である。オブジェクト「ＣｌｉｐｂｏａｒｄＤａｔａ」は、異なるドメインを出所とするページの間でデータを転送することを意図していない。残念ながら、上記の一行の単純なスクリプトが、クリップボードデータを取得することに、そのデータが現在のドメインからのページによってあらかじめ設定されていない場合でも成功する。
【００１０】
[0010]ＪａｖａＳｃｒｉｐｔ  ＡＰＩの一部の悪意のある使用は、迷惑な影響をもたらす、又は他の攻撃を仕掛けることを容易にする可能性がある。１つのよくあるそのようなエクスプロイト（セキュリティ上の弱点）が、ポップアップ（及びポップアンダ）の使用である。今日、多くのポップアップブロッカが利用可能である。
【００１１】
[0011]スクリプティング攻撃に対する一部の既存の解決策は、場当たり的であり、かなり限られている。第１に、実装上の抜け穴が、パッチを適用することによってふさがれることが可能であるが、過去１５年間のパーソナルコンピューティング経験は、そのような事前対応の動作を頼りにすることができないことを示している。第２に、ポップアップなどの迷惑行為から保護し、フィッシング攻撃を検出するヒューリスティック（発見的教授法）を提供するブラウザプラグインツールが存在する。しかし、これらのツールによって暗黙に使用される安全ポリシーは、ユーザ又は操作者によって拡張可能ではなく、攻撃カテゴリ自体全部ではなく、或る特定の攻撃カテゴリの非常に特殊な事例だけを捕捉する。例えば、ポップアップブロッカは、ＪａｖａＳｃｒｉｐｔによって開かれるウインドウの数、又はそれらのウインドウの位置、或いはそのようなウインドウが、意図されないネットワーク通信を実行するかどうかを制限しない。
【発明の概要】
【００１２】
[0012]スクリプトプログラムの不安全動作を検出するため、及び防止するための方法及び装置が、本明細書で開示される。一実施形態では、方法は、第１の安全ポリシーに基づくスクリプトプログラムの静的解析を実行して、そのスクリプトプログラムの不安全動作を検出する工程、及びそのスクリプトプログラムが実行された際に、その安全ポリシーの違反が生じた場合、そのスクリプトプログラムの実行を防止する工程を含む。
【００１３】
[0013]本発明は、後段で与えられる詳細な説明、及び本発明の様々な実施形態の添付の図面から、より完全に理解されるが、説明及び図面は、本発明をそれらの特定の実施形態に限定するものと解釈されてはならず、単に説明及び理解を目的とする。
【発明の詳細な説明】
【００１４】
[0026]スクリプト（例えば、ＪａｖａＳｃｒｉｐｔ）プログラムによる所与の安全ポリシーに対する違反を検出し、防止する様々な技術が提示される。本明細書で説明される技術は、クロスサイトスクリプティング攻撃、サービス拒否攻撃、及びブラウザ及び／又はＪａｖａＳｃｒｉｐｔインタープリタの実装上の欠陥を悪用する他の攻撃から保護するのに使用されることが可能である。一実施形態では、これらの技術は、静的解析と動的監視の両方を使用して、入ってくるスクリプトをフィルタ処理する。フィルタを通過したスクリプトは、安全ポリシーに関して証明できる形で安全である、又は実行時において安全違反の直前に実行を停止するように計装される。これらの技術の一特徴は、スクリプトセマンティクス（script semantics）が変更されず、その結果、スクリプトのいずれの有用な機能も、誤って変更されないことが確実にされる。
【００１５】
[0027]また、所与の安全ポリシーに基づいて、信頼できないスクリプトの動作を制限する様々な技術も提示される。本明細書で説明される技術は、フィッシング、共有されるリソースの濫用、悪意のあるＡＰＩ使用、予期されない動作、サービス拒否攻撃から保護するのに使用されることが可能である。一実施形態では、これらの技術は、ターゲットスクリプトに対してコード書き換えを使用する。潜在的に悪意のあるスクリプトを停止する代わりに、コードが、実行するのが安全であるように変更される。したがって、一実施形態では、もたらされるスクリプトは、実行時エラーをまったく有さないことが保証される。これらの技術の１つの際立った特徴は、スクリプトセマンティクスが、解析中に変更されて、悪意のないスクリプトの早計な終了が防止される（偽陽性が少なくなる）ことである。このことは、静的解析及び動的監視によってポリシーについての違反を許さない前段で説明される技術に対して補完的である。
【００１６】
[0028]一実施形態では、安全特性は、様々な攻撃を範囲に含むことができる拡張可能なポリシー指定言語で表現され、例えば、ＪａｖａＳｃｒｉｐｔのようなスクリプティング言語における前後関係において、これらの技術を展開するのに使用されることが可能なアーキテクチャが提示される。一実施形態では、ポリシー言語は、多くの異なる種類の攻撃からの保護のためのフィルタ及びインスツルメンタ（instrumentors）のプログラムを書くために使用される。後段で、以上が、どのように、ＸＳＳ、フィッシング、ＤＯＳ、並びに検証されていない入力及び引数から保護するのに役立つかについての例が与えられる。また、以上は、セキュリティパッチ又はウイルス定義が開発されるよりも前に、迅速なパッチ前フィルタを展開するのに役立つことも可能である。
【００１７】
[0029]以下の説明において、本発明のより完全な説明を提供する多数の詳細が示される。しかし、本発明は、これらの特定の詳細なしに実施されることも可能であることが、当業者には明白であろう。その他、よく知られている構造及びデバイスは、本発明を不明瞭にするのを避けるため、詳細にではなく、ブロック図の形態で示される。
【００１８】
[0030]以下の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する操作のアルゴリズム及び記号表現に関して提示される。これらのアルゴリズム記述及びアルゴリズム表現は、当業者によって、当業者の作業の内容を他の当業者に最も効率的に伝えるのに使用される手段である。アルゴリズムは、本明細書において、さらに一般的にも、所望される結果をもたらす自己矛盾のない一連のステップであると考えられる。これらのステップは、物理量の物理的操作を要求するステップである。通常、ただし、必然的にではなく、これらの量は、格納される、転送される、組み合わされる、比較される、又はそれ以外で操作されることが可能な電気信号又は磁気信号の形態をとる。ときとして、主に一般的な用法の理由で、これらの信号をビット、値、要素、シンボル、文字、項、数などと呼ぶことが好都合であることが分かっている。
【００１９】
[0031]しかし、これら、及び類似する用語のすべては、適切な物理量に関連付けられるべきであり、単に、これらの量に付けられる便利なラベルに過ぎないことに留意されたい。特に明記しない限り、以下の説明から明らかなとおり、この説明の全体で、「処理すること」又は「計算すること」又は「算出すること」又は「決定すること」又は「表示すること」などの用語を利用する説明は、コンピュータシステムのレジスタ内及びメモリ内の物理（電子）量として表されるデータを操作して、コンピュータシステムメモリ内又はコンピュータシステムレジスタ内、或いは他のそのような情報記憶デバイス内、情報伝送デバイス内、又は情報表示デバイス内の物理量として同様に表される他のデータに変換する、コンピュータシステム、又は類似した電子コンピューティングデバイスのアクション及びプロセスを指すものと理解される。
【００２０】
[0032]また、本発明は、本明細書における動作を実行するための装置にも関する。この装置は、要求される目的のために特別に構築されてもよく、或いはコンピュータの中に格納されたコンピュータプログラムによって選択的に活性化される、又は再構成される汎用コンピュータを含んでもよい。そのようなコンピュータプログラムは、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、及び光磁気ディスクを含む任意のタイプのディスク、コンピュータシステムバスにそれぞれが結合される、ＲＯＭ（読み取り専用メモリ）、ＲＡＭ（ランダムアクセスメモリ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、或いは電子命令を格納するのに適した任意のタイプの媒体などの、ただし、以上には限定されないコンピュータ可読媒体の中に格納されることが可能である。
【００２１】
[0033]本明細書で提示されるアルゴリズム及び表示は、いずれの特定のコンピュータ又は他の装置とも本来的に関係していない。様々な汎用システムが、本発明の教示によるプログラムで使用されることが可能であり、或いは要求された方法ステップを実行する、より特化された装置を構築することが好都合であると判明する可能性もある。様々なこれらのシステムに関する要求される構造は、以下の説明から現れる。さらに、本発明は、いずれか特定のプログラミング言語に関連して説明されることはない。様々なプログラミング言語を使用して、本明細書で説明される本発明の教示が実施されることが可能であることが理解されよう。
【００２２】
[0034]マシン可読媒体には、マシン（例えば、コンピュータ）によって読み取り可能な形態で情報を格納するため、又は伝送するための任意の機構が含まれる。例えば、マシン可読媒体には、「ＲＯＭ」（読み取り専用メモリ）、「ＲＡＭ」（ランダムアクセスメモリ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、電気形態、光形態、音響形態、又は他の形態の伝搬される信号（例えば、搬送波、赤外線信号、デジタル信号など）などが含まれる。
【００２３】
静的解析に基づく技術の概要
[0035]クロスサイトスクリプティング、サービス拒否攻撃、ＡＰＩの濫用を含め、様々な攻撃を防止するのに使用されることが可能であり、一般的な、拡張可能なポリシーベースのフレームワークに合う静的解析技術が、本明細書で説明される。図１は、そのような技術を展開するための一般的なフレームワークを示すブロック図である。図１を参照すると、プログラムコード１０１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、静的アナライザ（静的解析手段）１０２に入力される。安全ポリシー１０３に基づき、静的アナライザ１０２は、コード１０１を実行することなしにコード１０１の安全性を静的に判定しようとして、プログラムコード１０１を検査する。安全でないコードの場合、静的アナライザ１０２は、このコードを完全に拒否する。それ以外の場合、このプログラムコードは、実行時違反エラーがまったく生じないことを確実にする０又は１つ以上の動的検査でプログラムコード１０１を計装する動的アノテータ（annotator）１０４に入力される。一実施形態では、動的アノテータ１０４は、実行時の結果が静的に判定されることが可能でない位置だけに、これらの検査を配置する。これらの検査は、実行時に違反が間もなく生じる場合、プログラムの実行を停止するのに使用される。一実施形態では、ポリシー言語、及び関連する技術は、多くの異なる種類の攻撃から保護するためのコードフィルタを書くために提供される。
【００２４】
クロスサイトスクリプティング攻撃からの保護
[0036]一実施形態では、クライアント側ソリューションが提供される。このアプローチは、いずれのスクリプトに悪意があるかを識別し、それらの悪意のあるスクリプトをフィルタ処理することではなく、ユーザセキュリティに影響を及ぼすクリティカルな（決定的な）動作に的を絞ることによる、クリティカルなユーザリソースの保護に基づく。そのようにする際に、このアプローチは、ユーザの自由裁量のために警報を発する。
【００２５】
[0037]本明細書では、すべてのクリティカルなリソースは、一様に扱われ、ｓｅｃｒｅｔ（解決の鍵）と呼ばれる。このｓｅｃｒｅｔは、例えば、以下のエンティティ（構成要素）のいずれかであることが可能である。すなわち、クッキーファイル、パスワードフィールド（又は「ｐａｓｓｗｏｒｄ」という型を有するテキストボックス）、ブラウザ設定、初期化されていないクリップボードからのデータ、及び履歴エントリである。本明細書では、ＵＲＬに対するすべてのネットワーク要求は、ｌｏａｄ（ＵＲＬ）として一様に扱われる。ｌｏａｄは、例えば、以下のエンティティのいずれかであることが可能である。すなわち、現在のページを読み込むため（例えば、ｌｏｃａｔｉｏｎ．ｈｒｅｆ＝ＵＲＬ）、フォームのため（例えば、ａｃｔｉｏｎ＝ＵＲＬ）、イメージのため（例えば、ｉｍｇ  ｓｒｃ＝ＵＲＬ）、フレームのため（例えば、ｉｆｒａｍｅ  ｓｒｃ＝ＵＲＬ）、及びレイヤオブジェクトのため、つまり、ｌｏａｄ（ＵＲＬ，ｗｉｄｔｈ）である。
【００２６】
[0038]ユーザリソースの前述の一様な扱いに基づき、図３は、ＸＳＳと関係のあるＪａｖａＳｃｒｉｐｔ及びＤＯＭ  ＡＰＩの本質的な要素の抽象化を示す。ドメイン名Ｄ、ＵＲＬ  Ｕ、及び値Ｖはすべて、文字列（ストリング）である。ブール（ブーリアン）ｂは、０又は１である。環境Ψが、変数ｘを型Ｔに位置付け（マップ）する。型Ｔは、ドメイン名のリストである。式は、ｓｅｃｒｅｔ、部分式に対する演算ｏｐ、値Ｖ、又は変数Ｘである。コマンドは、割り当て、条件、ネットワーク要求、又は終了である。
【００２７】
フローベースの計装
[0039]一実施形態では、クリティカルなユーザリソースが、静的アナライザによって、それらのリソースの所有者（同一の出所のポリシーによって使用されるドメイン名）でタグが付けられ、それらのリソースの情報フローが、静的アナライザによって解析され、実行時検査（警報）が、動的アノテータ（注釈付け手段）によって、クリティカルな情報が、現在のＨＴＭＬの出所とは異なるドメインに間もなく送信されるプログラムポイントに挿入される。図４は、静的解析に基づく、開示される汎用の技術の特化された事例であるフローベースの計装のためのプロセスの一実施形態のブロック図である。図４を参照すると、ＪａｖａＳｃｒｉｐｔコード４０１が、入力されて、フローアナライザ４０２によって受け取られ、アナライザ４０２は、情報フローポリシー４０３に従って、そのコードの様々なリソース（例えば、ＵＲＬ、クッキーなど）にタグを付ける。結果のタグ付けされたコードは、動的アノテータ４０４に入力されて、フローアナライザ４０２によって特定されたプログラムポイントに検査が挿入される。一実施形態では、もたらされるコードは、違反が間もなく生じる場合、これらの挿入された検査が、プログラム実行を停止するため、実行時に常に安全に実行される。
【００２８】
[0040]図５は、どのようにタグに注釈が付けられ、どのように検査が挿入されるかを明確に表現するＪａｖａＳｃｒｉｐｔ計装の例である。このＪａｖａＳｃｒｉｐｔ計装は、静的環境Ψの助けを借りて実行される。この環境は、式のｓｅｃｒｅｔを決定するのに役立つ。式は、以下のいずれか１つが成立する場合、現在のドメインのｓｅｃｒｅｔ情報を含む。すなわち、その式が、ｓｅｃｒｅｔである。その式が、引数として部分式を含む。その式が、現在のドメイン名でタグが付けられている変数である。
【００２９】
[0041]計装システムは、プログラムコードを検査し、必要な場合に、そのプログラムコードに対する変更を実行する。割り当てに関して、システムは、割り当てのターゲットに対応するｓｅｃｒｅｔでタグが付けられるように、環境を更新する。ＵＲＬを読み込むことに関して、システムは、そのＵＲＬが、そのＵＲＬに書かれたとおりのターゲットドメインに属さないｓｅｃｒｅｔ情報を含む場合、ユーザの自由裁量のために警報を挿入する。システムは、計装中、他のコマンドは変更せず、これらの規則は、自明であり、省かれる。
【００３０】
緩い計装
[0042]代替の実施形態では、いくつかの緩いアプローチが、より容易に展開されることが可能であるが（より少ない規則）、正確さが劣る（潜在的に、より多くのユーザ対話）。以下の代替の実施形態の組合せが、使用されることが可能である。
【００３１】
[0043]１つの代替の実施形態では、ｓｅｃｒｅｔを読み取った後のｌｏａｄ（ＵＲＬ）を防止するのに、以下の計装が実行される。プログラムの開始時に、グローバルフラグ変数が、ユーザリソースのために使用される。ｓｅｃｒｅｔエンティティが読み取られると、このフラグが、設定される。これらのリソースを漏らすことが可能なＡＰＩ呼び出しの前に、コードが挿入されて、このフラグが設定されているかどうかを確認する。ＡＰＩは、このフラグが設定されていない場合、通常どおりに進む。設定されている場合、挿入されたコードは、ユーザに警報を発し、先に進むかどうかを尋ねる。この計装を誘導する規則は、以下のとおり与えられる。
【数１】
2009521737.tif 000003
【００３２】
[0044]別の代替の実施形態において、ｌｏａｄ（ＵＲＬ）に埋め込まれたｓｅｃｒｅｔを防止し、その一方で、ｌｏａｄの引数における変数の使用を許さないようにするのに、以下の計装が、実行される。具体的には、ＵＲＬが、ｌｏａｄの引数として解析されて、そのＵＲＬが、ｓｅｃｒｅｔ又は変数を含むかどうかを判定する検査が行われる。
【数２】
2009521737.tif 000004
【００３３】
[0045]一実施形態では、現在のＨＴＭＬの出所とは異なるドメインからのスクリプトへのポインタを許さないようにするのに、以下の計装が、実行される。ＵＲＬを読み込む際、そのＵＲＬのドメイン、及びそのＵＲＬのターゲットが、検査される。そのドメインが、現在のドメインではなく、ターゲットが、ＪａｖａＳｃｒｉｐｔファイルである場合、警報が、挿入されて、ユーザは、先に進むかどうかを尋ねられる。それ以外の場合、読み込みは、通常どおり進む。
【数３】
2009521737.tif 000005
【００３４】
[0046]一実施形態では、計装は、他の補足的な技術と一緒に適用されて、偽陽性の数を減らすことが可能である。例えば、ホワイトリスト（ブラックリスト）が、知られている安全な（脆弱な）サイトを許す（ブロックする）のに役立つ。
【００３５】
サービス拒否攻撃から保護すること
[0047]一実施形態では、サービス拒否攻撃を検出し、防止するため、リソース濫用と関係するＡＰＩ呼び出しに制限が課せられる。そのような制限を表現するように定義された指定言語が、以下に与えられる。
【００３６】
[0048]      Policy := (FunctionSpec,InstrumentationSpec)
FunctionSpec := (FunctionName, Arglist)
Arglist := Arg *
Arg := Var | Const
InstrumentationSpec := Instrumentation *
Instrumentation := Pred(Arg) | StaticPred(Arg)
Pred(Arg) := Compare(Arg, Arg) |
Pred(Arg) AND Pred(Arg) |
Pred(Arg) OR Pred(Arg) |
NOT Pred(Arg) |
Fun(Arg)
StaticPred(Arg) := Compare(Arg, Const) |
StaticPred(Arg) AND StaticPred(Arg) |
StaticPred(Arg) OR StaticPred(Arg) |
NOT StaticPred(Arg)
Fun(Arg) := Arg IN Arg*
Compare(x, y) := x = y | x < y | x > y |
Compare (x, y) AND Compare (x, y)
【００３７】
[0049]安全ポリシーは、前述の言語で表現される。所与のＪａｖａＳｃｒｉｐｔコードが、ポリシーにおける関数呼び出しと合致する場合はいつでも、対応する動的検査が、その呼び出しの直前に挿入される。図６は、計装を実行するシステムのブロック図である。図６を参照すると、プログラムコード６０１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、安全フィルタを含むポリシー６０３の中で指定された関数呼び出しと合致する動的計装ユニット６０２に入力されて、ユニット６０２よって受け取られる。合致が見つかった場合、動的計装ユニット６０２は、その関数呼び出しより前に動的検査を追加する。終了すると、動的計装ユニット６０２は、安全に実行される形態で、そのコードを出力する。
【００３８】
[0050]一実施形態では、挿入された動的計装のさらなる静的最適化が、実行される。このことは、前述の言語においてＳｔａｔｉｃＰｒｅｄ計装を介して表現される。所与のＪａｖａＳｃｒｉｐｔコードとの安全ポリシーの合致が、計装の一環としていくらかのＳｔａｔｉｃＰｒｅｄを含む場合、それらの述語（predicates）が成立するか否かについての静的判定が行われる。これにより、動的計装のいくつかが排除されることが可能であり、その結果、最終的なコードの効率が高められるとともに、場合により、ＳｔａｔｉｃＰｒｅｄの１つに障害が生じる場合に、コード全体の実行が先回りして阻止される。図７は、この計装を実行するシステムのブロック図である。図７を参照すると、プログラムコード７０１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、安全フィルタを含むポリシー７０３の中で指定された関数呼び出しと合致する動的計装ユニット７０２に入力されて、ユニット７０２よって受け取られる。合致が見つかった場合、動的計装ユニット７０２は、その関数呼び出しより前に動的検査を追加する。終了すると、動的計装ユニット７０２は、計装されたコード７０４を出力する。その後、計装されたコード７０４は、ＳｔａｔｉｃＰｒｅｄ述語が成立するか否かを判定する静的最適化ユニット７０５に入力される。静的に成立する述語に関して、動的計装ユニット７０２によって追加された対応する動的検査が、計装されたコード７０４から除去される。その後、結果のコードが出力される。
【００３９】
コード書き換えに基づく技術の概要
[0051]フィッシング、クリップボードなどの共有リソースの濫用、悪意のあるＡＰＩ使用、予期されない動作（behavior）、及びサービス拒否攻撃を含め、様々な攻撃に対抗するのに使用されることが可能なコード書き換え技術が、以下に示される。図８は、これらの技術の一実施形態の一般的なフレームワークのブロック図である。図８を参照すると、プログラムコード８０１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、コード書き換えユニット８０２によって受け取られる。安全な変換を指定する安全ポリシー８０３に基づき、コード書き換えユニット８０２は、プログラムコード８０１の中の潜在的に悪意のある（ＪａｖａＳｃｒｉｐｔ）コードを、同一の機能を実行するコードの安全なバージョンで置き換える。一実施形態では、ＪａｖａＳｃｒｉｐｔコードは、安全ポリシーによって指定される変換が、安全を保証するようにコードのセマンティクスを注意深く変更するので、実行時エラーなしに、常に安全に実行されることが可能である。
【００４０】
[0052]一実施形態では、これらの技術には、詳細が以下に与えられる、多くの異なる種類の攻撃から保護するためのコードリライタ（code rewriters）を指定するためのポリシー言語、及び関連する技術が含まれる。
【００４１】
フィッシングから保護すること
[0053]フィッシングから保護するのに、一実施形態では、ユーザに、Ｗｅｂサイトの実際の情報が提示され、そのため、攻撃者が、何者かになりすますことが、より困難になる。
【００４２】
Ｗｅｂページの出所
[0054]Ｗｅｂページの出所に関して、ブラウザのロケーションバーは、現在のＷｅｂページが読み込まれたＵＲＬを表示する。そのＵＲＬのコンテンツは、ＪａｖａＳｃｒｉｐｔの制御から外れている。しかし、ＪａｖａＳｃｒｉｐｔは、新たなウインドウ（例えば、ポップアップ）を開く際、ロケーションバーを完全に隠す能力を有する。このことは、現在のＷｅｂページの出所を隠すためにフィッシング攻撃によって、しばしば、使用される。ブラウザの関係するナビゲーションコントロールは、ステータスバーである。ＪａｖａＳｃｒｉｐｔは、このステータスバーのコンテンツを恣意的なテキストで更新することができる。また、ＪａｖａＳｃｒｉｐｔは、ステータスバーを表示しないことを選択することもできる。
【００４３】
[0055]一実施形態では、計装ユニットは、ロケーションバー及びステータスバーが、ブラウザユーザによってカスタマイズ可能なポリシーに基づいて適切に表示されるように、Ｗｅｂページのコンテンツを計装する。これは、新たなウインドウを開くための、そのＷｅｂページのＡＰＩ使用を検査すること、及び有用なナビゲーションコントロールを隠すコードを書き換えることによって達せられることが可能である。
【００４４】
[0056]以下は、新たなウインドウの作成のための例示的な計装を示す。この実施形態では、ロケーションフラグ及びステータスフラグを偽、いいえ、又は０に設定すること、或いは単にロケーションフラグ及びステータスフラグを除外することを含め、ロケーションフラグ及びステータスフラグを偽に設定する方法が、検査される。
open(URL, windowName, location=false, status=false)
⇒ open(URL,windowName, location=true, status=true)
【００４５】
[0057]スクリプトが新たなウインドウを開く他の方法（ＡＰＩ）が、存在する。例えば、クロムレスポップアップウインドウ（chromeless pop-up windows）が、特殊なＡＰＩ  ｃｒｅａｔｅＰｏｐｕｐを使用して作成されることが可能である。一実施形態では、計装ユニットは、ユーザのポリシーに基づいてコードを計装する。このポリシーが、クロムレスポップアップを許すことである場合（このオプションを選択することは、ユーザが、クロムレスポップアップウインドウ内のフィッシング攻撃に、例えば、これらのウインドウ内のリンクを決してクリックしないことにより、引っ掛からないだけ十分に自らに知識と経験があると信じていることを示唆する）、このＡＰＩに対する呼び出しは、そのままにされる。ポリシーが、クロムレスポップアップを許さないことである場合、計装ユニットは、このＡＰＩに対する呼び出しを基本的なオープンＡＰＩを使用してプログラムを書く。
【００４６】
ステータスバーを更新すること
[0058]これらの技術の一実施形態では、ステータスバーを更新することに関して、入ってくるコードは、そのページの出所が、ステータスバー内に表示されるように書き換えられる。単純には、このことは、以下のスクリプトをすべてのウインドウ内に挿入することによって行われることが可能である。すなわち、
window.status=location.href.
【００４７】
[0059]実際には、Ｗｅｂページは、ステータスバーを利用して、様々な情報を表示する。一実施形態では、コード計装ユニットは、所与のテキスト情報と、ページの出所との連結を表示するように、ステータスバーへのアクセスを計装する。
window.status="Welcome to DoCoMo USA Labs!"
⇒window.status=location.href + " | " + "Welcome to DoCoMo USALabs!"
【００４８】
[0060]一実施形態では、ＨＴＭＬの動的フィーチャ（dynamicfeatures）を使用して、ページの出所と、所与のテキスト情報とが交互に表示される。そのようにすることの例は、タイマＡＰＩなどの高度なＪａｖａＳｃｒｉｐｔフィーチャの使用を要求する。一実施形態では、出所（ドメイン名）の他に、現在のＷｅｂページについてのさらなる情報が、明らかにされる。いくつかの例には、その出所が、どこでホストされているか、及びその出所が、いつ作成されたかが含まれる。また、そのような情報を、ブラウザウインドウの別の領域内、又は「バルーン（balloon）」内で表示することも可能である。
【００４９】
[0061]要約として、プログラム（例えば、ＪａｖａＳｃｒｉｐｔ）コードを計装することにより、そのＷｅｂページのホスティングドメインについての情報が、明確に表示される。このことは、ユーザが、詐欺的なＵＲＬを評価するのに役立つ（例えば、ｃｕｒｉｏｕｓ．ｃｏｍが、ＣｉｔｉｂａｎｋのＷｅｂサイトである可能性は低く、或いはＢａｎｋ  ｏｆ  Ａｍｅｒｉｃａが、日本においてホストされている可能性は低い）。
【００５０】
欺きのＵＲＬ
[0062]攻撃者は、ＵＲＬにおいて特殊な文字を使用して、ユーザを欺く。そのＷｅｂページのコンテンツを検査することにより、そのような疑わしいＵＲＬを識別することができる。
【００５１】
[0063]シンボル＠が、ときとして、ＵＲＬにおいて使用される。元々の意図は、このシンボルの前にユーザ名フィールド及び／又はパスワードフィールドを含めることを許すことである。ＵＲＬの実際の目的は以下のドメイン名である。例えば、ｈｔｔｐ：／／ｄｏｃｏｍｏ．ｃｏｍ＠ｃｕｒｉｏｕｓ．ｃｏｍは、ｄｏｃｏｍｏ．ｃｏｍではなく、ｃｕｒｉｏｕｓ．ｃｏｍを参照する。そのようなＵＲＬは、ユーザを騙して、そのページの偽の出所を信じ込ませる可能性がある。そのようなＵＲＬを識別すると、前述の技術を使用して、実際のドメイン名をユーザに提示することが可能である。
【００５２】
[0064]同様に、ｈｔｔｐ：／／ｗｗｗ．ｄｏｃｏｍｏ．ｃｏｍ．ｃｕｒｉｏｕｓ．ｃｏｍ／も、欺いている。さらに、パーセンテージ記号（percentage sign）の後に続く数字の使用（エスケープシーケンス、escape sequences）は、通常、欺くこと以外、実際的な用途をまったく有さない。一実施形態では、これらすべての疑わしいＵＲＬは、ユーザに提示される前に適切に解析され、解析（パース）される。
【００５３】
[0065]前述した技術を補完して一般的な既存の方法が、使用されることが可能である。一方で、知られているフィッシングドメインのブラックリスト知識ベースを保持することができる。他方で、大きい金融組織のドメイン名のホワイトリストを保持し、パターンマッチングを使用して、欺きのＵＲＬ（例えば、ＤＯＣＯＭＯ．ＣＯＭ対Ｄ０Ｃ０Ｍ０．ＣＯＭ）を検索することができる。こうすることは、攻撃者が、誰かがその攻撃に引っ掛かる可能性が高いように、多数のユーザを有する組織を、通常、標的にするため、有効である可能性が高い。
【００５４】
共有リソースの濫用から保護すること
[0066]ＩＥなどのブラウザにおいて、ＪａｖａＳｃｒｉｐｔは、ｃｌｉｐｂｏａｒｄＤａｔａという名称のオブジェクトを介して、ユーザのクリップボードへのアクセスを有する。このオブジェクトは、３つのクリップボード活動、すなわちクリアすること、読み取ること、及び書き込むことのためのＡＰＩを提供する。例えば以下の単純なスクリプトが、クリップボードからテキストを読み取り、そのテキストをブラウザにおいて表示する。
document.write(window.clipboardData.getData(’Text’));
【００５５】
[0067]クリップボードが、潜在的に、現在のＷｅｂページと、システムの他の部分との間で共有されるリソースの役割をすることが可能であることを見て取ることは、難しくない。これにより、同一の出所のポリシーを回避するためのチャネルがもたらされることが可能である。オブジェクト、ＣｌｉｐｂｏａｒｄＤａｔａは、異なるドメインを出所とするページの間でデータを転送することを意図していない。残念ながら、上記の一行の単純なスクリプトが、クリップボードデータを取得することに、そのデータが現在のドメインからのページによってあらかじめ設定されていない場合でも、成功する。
【００５６】
[0068]前述したクリップボードの例は、このカテゴリの攻撃に関する標準的な例として本明細書で使用される。一実施形態では、Ｗｅｂページのいずれかの部分が、クリップボードを読み取ろうと試みる場合、そのページが読み込まれる際に、クリップボードデータをクリアすることが強制される。一実施形態では、そうすることは、Ｗｅｂページの先頭に以下のスクリプトを挿入することによって行われる。クリップボード読み取りがページ内で行われるかどうかを判定する単純な静的解析が、必要とされる。
document.write(window.clipboardData.clearData(’Text’,’URL’,’File’,’HTML’,’Image’))
【００５７】
[0069]一般に、この技術は、現在のＷｅｂページと、システムの他の部分との間の潜在的に共有される任意のリソースに適用されることが可能である。
【００５８】
悪意のあるＡＰＩ使用から保護すること
[0070]一実施形態では、既存のブラウザの限られた制限が、カスタマイズされたポリシーによって許される方法で、いくつかのＡＰＩ呼び出しを書き換えることによって強化される。一実施形態では、関係のあるウインドウＡＰＩ呼び出しに対する位置引数及びサイズ引数は、それらのウインドウが予期される範囲内に入るように変更される。
window.moveto(x,y) =>
window.moveto(x % screen.availWidth, y % 
screen.availHeight)
window.resizeTo(x,y) =>
window.resizeTo(((x>screen.availWidth) ?
screen.availWidth : x),
((y>screen.availHeight) ?
screen.availHeight : y))
【００５９】
[0071]正しい計装が実行履歴についての情報を要求するため、一部のＡＰＩ呼び出しは、このように直接的に計装されることができない。ＡＰＩ「ｍｏｖｅＢｙ（ｄｅｌｔａＸ，ｄｅｌｔａＹ）及びｒｅｓｉｚｅＢｙ（ｄｅｌｔａＸ，ｄｅｌｔａＹ）」は、２つのそのような例であり、これらのＡＰＩは、絶対値によってではなく、オフセット（offsets）によってウインドウの位置及びサイズを変更する。この事例では、計装はより高度であり、計装ユニットはウインドウについての情報をまず獲得し、次に、ターゲット引数を計算し、それらの呼び出しを異なる呼び出しで置き換える。このことが、以下に例示される。
window.moveBy(dx,dy) =>
window.moveto((window.screenX+dx)% screen.availWidth,
(window.screenX+dx) % screen.availWidth)
window.resizeBy(dx,dy) =>
window.resizeTo(((window.outerWidth+dx> 
screen.availWidth) ?
screen.availWidth : 
(window.outerWidth+dx)),
((window.outerHeight+dy > 
screen.availHeight) ?
screen.availHeight : 
(window.outerHeight+dy)))
これらの特定の書き換え規則は、実際に攻撃のためのしばしば、不当に利用される手段である、いくつかの「乱暴な（wild）」ウインドウを防止する。例えば、目に見えないウインドウ（境界外の、又は背景の）は、Ｗｅｂサーバにひそかに接続することが可能である。他の攻撃と組み合わさって、このウインドウは、貴方のシステムにキー操作を記録するためのコード(keystroke-logging code）をダウンロードする、或いはリモートＰＣにファイル又はパスワードをアップロードすることが可能である。匿名のプロキシサイトの使用とともに、被害者は、そのリモートコンピュータのロケーションをたどることさえできない。
【００６０】
予期されない振舞いからの保護
[0072]ＪａｖａＳｃｒｉｐｔは、事件（events）が起きた際に、情報のデータ又はプロンプトの有用な処理のために、様々なイベントハンドラ（事件処理部）を作成することが可能である。例えば、Ｗｅｂページは、ブラウザの現在のコンテンツをアンロードする前に、ユーザの入力を保存するか、又は破棄するかについて、ユーザに確認することが可能である。このことは、ユーザがフォームデータをサブミットすること、又は保存することなしに、ウインドウを誤って閉じる場合に役立つ。悪意のある人々によって利用された場合、同一の能力が、ユーザによって容易に閉じられることが可能でない「しつこい（persistent）」ウインドウなどの、迷惑な動作を展開するのに使用されることが可能である。以下は、ｏｎｕｎｌｏａｄイベントハンドラを利用して、現在のウインドウが閉じられる直前に新たなウインドウを再生成する単純な攻撃である。
<html>
<head>
<title>PersistentWindow</title>
<scripttype="text/javascript">
function respawn() {
window.open(URL)
}
</script>
</head>
<body onunload="respawn()">
Content of the webpage loaded from URL.
</body>
</html>
【００６１】
[0073]悪意のあるハンドラスクリプトのセマンティクスと、ハンドラの意図される用途との間の相違に注目されたい。一実施形態では、クライアントは、アンロードハンドラ内にある場合、ＡＰＩ  ｗｉｎｄｏｗ．ｏｐｅｎ（）に対する呼び出しを無視することにより、この攻撃から保護される。何らかの静的解析を使用して、ハンドラのコードが検査され、つまり、ｏｐｅｎ（）ＡＰＩ呼び出しは、ハンドラの最高レベルコードの中に直接に存在しないことが可能であり、別個に定義された関数の中に密閉されることも可能である。
【００６２】
[0074]一般に、他の多数のイベントハンドラが、同様の方法で利用されることが可能である。より具体的には、ウインドウオブジェクトに関して、一実施形態では、
・  ハンドラ「ｏｎｂｅｆｏｒｅｕｎｌｏａｄ」及び「ｏｎｌｏａｄ」内から新たなウインドウを開く、
・  ハンドラ「ｏｎｍｏｖｅ」、「ｏｎｒｅｓｉｚｅ」、「ｏｎｒｅｓｉｚｅｅｎｄ」、及び「ｏｎｒｅｓｉｚｅｓｔａｒｔ」内からウインドウを移動し、サイズ変更する、
・  ハンドラ「ｏｎｂｌｕｒ」、「ｏｎｂｅｆｏｒｅｄｅａｃｔｉｖａｔｅ」、「ｏｎｄｅａｃｔｉｖａｔｅ」、「ｏｎｆｏｃｕｓ」、及び「ｏｎａｃｔｉｖａｔｅ」内からフォーカスを変更する
ＡＰＩ呼び出しは、無視される
【００６３】
[0075]この技術は、例えば、「ｄｏｃｕｍｅｎｔ」及び「ｆｏｒｍ」などの他のブラウザオブジェクトにも適用可能であることに留意されたい。
【００６４】
サービス拒否攻撃から保護すること
[0076]静的解析に基づくサービス拒否攻撃からの保護については、前段で説明された。以下に、コード書き換えに基づくサービス拒否攻撃からの別の保護について説明する。
【００６５】
[0077]サービス拒否攻撃を抑制するために、一実施形態では、そのようなリソース濫用と関係があるＡＰＩ呼び出しに関する安全動作が提供される。以下に、そのような安全動作を表現することが可能な指定言語が、定義される。
【００６６】
[0078]安全ポリシーが、以下の言語で表現される。
Policy := (FunctionSpec, SafeFunctionSpec)
FunctionSpec := (FunctionName, Arglist)
Arglist := Arg *
Arg := Var | Const
SafeFunctionSpec := (FunctionName,SafeArgList)
SafeArgList := SafeArg *
SafeArg := IF Safe(Arg) THEN Arg ELSEMakeSafe(Arg)
Safe(Arg) := Pred(Arg) | StaticPred(Arg)
Pred(Arg) := Compare(Arg, Arg) |
Pred(Arg) AND Pred(Arg) |
Pred(Arg) OR Pred(Arg) |
NOT Pred(Arg) |
Fun(Arg)
StaticPred(Arg) := Compare(Arg, Const) |
StaticPred(Arg) AND StaticPred(Arg) |
StaticPred(Arg) OR StaticPred(Arg) |
NOT StaticPred(Arg)
Fun(Arg) := Arg IN Arg*
Compare(x, y) := x = y | x < y | x >y |
Compare (x, y) AND Compare (x, y)
【００６７】
[0079]所与のＪａｖａＳｃｒｉｐｔコードが、ポリシーの中の関数呼び出しと合致する場合はいつでも、対応する呼び出しが、安全なバージョンで置き換えられる。図９は、書き換えを実行するシステムの一実施形態のブロック図である。図９を参照すると、プログラムコード９０１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、濫用可能なＡＰＩに対する安全な変換を含むポリシー９０３の中で指定された関数呼び出しと合致するコードリライタ９０２に入力され、リライタ９０２によって受け取られる。合致が見つかった場合、コード書き換えユニット９０２は、その関数呼び出しを、ポリシー１００３によって指定された安全なバージョンで置き換える。終了すると、動的計装ユニット９０２は、安全に実行される濫用可能なＡＰＩの安全なバージョンを有するコード９０４を出力する。
【００６８】
[0080]前述の指定システムにおける基本的な考えは、関数呼び出しが、その呼び出しの安全なバージョンとペアにされることである。安全なバージョンにおいて、一実施形態では、ＳａｆｅＡｒｇ構文によって表現されるガードが、各引数の前に置かれる。このガードは、一般的に言って、引数に対する述語であり、関数呼び出しを、元の関数の本文の直前の対応するコードで書き換えることによって実施される。
【００６９】
[0081]一実施形態では、書き換えられたコードのさらなる静的最適化が実行される。このことは、この言語におけるＳｔａｔｉｃＰｒｅｄを介して表現される。所与のＪａｖａＳｃｒｉｐｔコードとの安全ポリシー合致が、書き換えの一環としてＳｔａｔｉｃＰｒｅｄを含む場合、これらの述語が成立するか否かを静的に判定することが、ときとして、可能である。このことは、書き換えのいくつかを最適化する可能性をもたらし、その結果、最終的なコードの効率を高めるとともに、場合により、ＳｔａｔｉｃＰｒｅｄに障害が生じる場合に、コード全体の実行を先回りして阻止する。図１０は、計装を実行するシステムの代替の実施形態のブロック図である。図１０を参照すると、プログラムコード１００１（例えば、ＪａｖａＳｃｒｉｐｔコード）が、濫用可能なＡＰＩに対する安全な変換を含むポリシー１００３の中で指定された関数呼び出しと合致するコードリライタ１００２に入力され、リライタ１００２によって受け取られる。合致が見つかった場合、コードリライタ１００２は、その関数呼び出しを、ポリシー１００３によって指定された安全なバージョンで置き換える。終了すると、コードリライタ１００２は、濫用可能なＡＰＩの安全なバージョンを有するコード１００４を出力する。静的オプティマイザ（最適化手段）１００５が、コード１００４の静的な最適化を実行し、その後、コード１００４は、安全に実行される。
【００７０】
状態追跡
[0082]一実施形態では、或る特定のＡＰＩが呼び出される回数に限度を課すことによってサービス拒否攻撃から保護するため、このカウントを追跡するグローバル変数が使用される。これを行うため、一実施形態では、前述の安全変換言語を使用して、問題のＡＰＩが、元のＡＰＩを包むだけでなく、元のＡＰＩが呼び出されるたびに内部変数をインクリメントする安全なバージョンで置き換えられる。このため、この技術を使用して、例えば、ＪａｖａＳｃｒｉｐｔによって生成されるウインドウの数が制限されることが可能である。
【００７１】
展開アーキテクチャの例
[0083]図１１は、前述した技術の展開のための一般的なアーキテクチャの一実施形態のブロック図である。図１１を参照すると、セキュアな（安全な）プロキシ１１０１が、クライアントブラウザ１１０２を実行するクライアントデバイスと、インターネット１１０３のそれ以外の部分との間のネットワーク上に存在する。このクライアントへのすべてのトラフィック、及びこのクライアントからのすべてのトラフィックは、プロキシ１１０１を通過し、プロキシ１１０１において、このトラフィックが、解析されることが可能であり、セキュリティ上の欠陥を利用するコンテンツが、潜在的にフィルタ処理されることが可能である。一実施形態では、プロキシ１１０１は、ＨＴＴＰヘッダコンテンツ（例えば、ＵＲＬ）やＨＴＴＰ応答コンテンツ（ＪａｖａＳｃｒｉｐｔなどの）などの、クライアントがインターネット１１０３から取得（fetch）する様々な種類のコンテンツを扱うためのフィルタを有する。より具体的には、クライアントブラウザ１１０２は、ユーザ入力１１０６を受け取ることができる。クライアントブラウザ１１０２は、ページ要求１１５１を生成する。プロキシ１１０１は、ページ要求１１５１を受信し、ＵＲＬフィルタ処理１１６１を使用してＵＲＬをフィルタ処理し、ＨＴＴＰ要求ヘッダフィルタ１１６２を使用してＨＴＴＰ要求ヘッダをフィルタ処理する。フィルタ処理の後、プロキシ１１０１は、ページ要求１１５１をインターネット１１０３に転送する。ページ要求１１５１に対するインターネット１１０３からの応答が、プロキシ１１０１によって受信され、プロキシ１１０１は、ＨＴＴＰ応答ヘッダフィルタ１１６４を使用して、ヘッダをフィルタ処理する。ＨＴＴＰ応答ヘッダフィルタ１１６４によるフィルタ処理の後、プロキシ１１０１は、ＨＴＭＬコンテンツフィルタ１１６３及び／又はＪａｖａＳｃｒｉｐｔフィルタ−インスツルメンタ１１１０を使用して、コンテンツをフィルタ処理する。ＨＴＭＬコンテンツフィルタ１１６３とＪａｖａＳｃｒｉｐｔフィルタ−インスツルメンタ１１１０のいずれか、又は両方の出力を表すフィルタ処理されたコンテンツ１１５２が、プロキシ１１０１から出力され、クライアントブラウザ１１０２に送信される。また、ＨＴＭＬコンテンツフィルタ１１６３及びＪａｖａＳｃｒｉｐｔフィルタ−インスツルメンタ１１１０の出力は、フィルタ処理されたコンテンツの攻撃プロファイリングに基づくブラウザ開発を円滑にするのに使用されることも可能である。
【００７２】
[0084]前述した技術は、ＪａｖａＳｃｒｉｐｔフィルタ−インスツルメンタユニット１１１０において実行される。
【００７３】
[0085]セキュリティディスクリプタ（記述子）ファイル１１２０は、前述した技術によって実施されるポリシー指定のいずれかに対応する。
【００７４】
コンピュータシステムの例
[0086]図１２は、本明細書で説明される動作の１つ又は複数を実行することが可能な例示的なコンピュータシステムのブロック図である。図１２を参照すると、コンピュータシステム１２００が、例示的なクライアントコンピュータシステム又はサーバコンピュータシステムを備えることが可能である。コンピュータシステム１２００は、情報を通信するための通信機構又はバス１２１１と、情報を処理するためにバス１２１１に結合されたプロセッサ１２１２とを備える。プロセッサ１２１２は、マイクロプロセッサを含むが、例えば、Ｐｅｎｔｉｕｍ（商標）、ＰｏｗｅｒＰＣ（商標）、Ａｌｐｈａ（商標）などのマイクロプロセッサに限定されない。
【００７５】
[0087]システム１２００は、情報、及びプロセッサ１２１２によって実行されるべき命令を格納するためのＲＡＭ（ランダムアクセスメモリ）、又は他の動的記憶デバイス１２０４（メインメモリと呼ばれる）をさらに備える。また、メインメモリ１２０４は、プロセッサ１２１２による命令の実行中に、一時的変数、又は他の中間情報を格納するために使用されることも可能である。
【００７６】
[0088]また、コンピュータシステム１２００は、プロセッサ１２１２のための静的情報及び命令を格納するためにバス１２１１に結合されたＲＯＭ（読み取り専用メモリ）及び／又は他の静的記憶デバイス１２０６、並びに磁気ディスク又は光ディスク、及び対応するディスクドライブなどのデータ記憶デバイス１２０７も備える。データ記憶デバイス１２０７は、情報及び命令を格納するためにバス１２１１に結合される。
【００７７】
[0089]コンピュータシステム１２００は、コンピュータユーザに情報を表示するためにバス１２１１に結合された、ＣＲＴ（陰極線管）又はＬＣＤ（液晶ディスプレイ）などのディスプレイデバイス１２２１にさらに結合されることが可能である。また、英数字キー又は他のキーを含む英数字入力デバイス１２２２が、情報及びコマンド選択をプロセッサ１２１２に通信するために、バス１２１１に結合されることも可能である。さらなるユーザ入力デバイスは、方向情報及びコマンド選択をプロセッサ１２１２に通信するため、及びディスプレイ１２２１上でカーソルの動きを制御するために、バス１２１１に結合される、マウス、トラックボール、トラックパッド、スタイラス、又はカーソル方向キーなどの、カーソルコントロール１２２３である。
【００７８】
[0090]バス１２１１に結合されることが可能な別のデバイスは、紙、フィルム、又は類似したタイプの媒体などの媒体上に情報を記録するために使用されることが可能なハードコピーデバイス１２２４である。バス１２１１に結合されることが可能な別のデバイスは、電話デバイス又はハンドヘルドパームデバイスに通信する有線／無線通信能力１２２５である。
【００７９】
[0091]システム１２００の構成要素、及び関連するハードウェアのいずれか、又はすべてが、本発明において使用されることが可能であることに留意されたい。しかし、コンピュータシステムの他の構成は、これらのデバイスのいくつか、又はすべてを含むことが可能であること理解することができよう。
【００８０】
[0092]本発明の多くの代替形態及び変形形態が、以上の説明を読んだ後、間違いなく、当業者には明白となろうが、例示として示され、説明されるいずれの特定の実施形態も、限定するものと考えられることはまったく意図していないものと理解されたい。したがって、様々な実施形態の詳細への言及は、それ自体、本発明に不可欠であると見なされる特徴だけを記載する特許請求の範囲を限定することは意図していない。
【図面の簡単な説明】
【００８１】
【図１】静的解析に基づく、開示される技術を展開するための一般的なフレームワークを示すブロック図である。
【図２】クロスサイトスクリプティングの例を示す図である。
【図３】ＸＳＳと関係のあるＪａｖａＳｃｒｉｐｔ及びＤＯＭ  ＡＰＩの本質的な要素の抽象化を示す図である。
【図４】フローベースの計装に関するプロセスの一実施形態を示すブロック図である。
【図５】フローベースの計装を示すＪａｖａＳｃｒｉｐｔ計装の例を示す図である。
【図６】計装を実行するシステムを示すブロック図である。
【図７】計装及び最適化を実行するシステムを示すブロック図である。
【図８】コード書き換えに基づく、開示される技術を展開する一般的なフレームワークを示すブロック図である。
【図９】濫用可能なＡＰＩのコンテキストにおいてコード書き換えを実行するシステムの一実施形態を示すブロック図である。
【図１０】濫用可能なＡＰＩのコンテキストにおいてコード書き換えを実行するシステムの代替の実施形態を示すブロック図である。
【図１１】開示される技術の展開のための一般的なアーキテクチャの一実施形態を示すブロック図である。
【図１２】コンピュータシステムの一実施形態を示すブロック図である。
【図１】
2009521737.tif 000006
【図２】
2009521737.tif 000007
【図３】
2009521737.tif 000008
【図４】
2009521737.tif 000009
【図５】
2009521737.tif 000010
【図６】
2009521737.tif 000011
【図７】
2009521737.tif 000012
【図８】
2009521737.tif 000013
【図９】
2009521737.tif 000014
【図１０】
2009521737.tif 000015
【図１１】
2009521737.tif 000016
【図１２】
2009521737.tif 000017
【国際調査報告】
2009521737.tif 000018
2009521737.tif 000019
2009521737.tif 000020