(57)【特許請求の範囲】
【請求項１】
コンピューティング・デバイス上で、スクリプト・コードを含んだ複数のウェブ・ページのソース・コードを静的解析するステップと、
前記コンピューティング・デバイス上で、前記静的解析に基づいて潜在的な脆弱性を含んだウェブ・ページを識別するステップと、
前記コンピューティング・デバイス上で、前記静的解析に基づいて潜在的な脆弱性を含んでいないウェブ・ページを識別するステップと、
前記コンピューティング・デバイス上で、テスト・ペイロードのセットを使用して前記潜在的な脆弱性を含んだ前記ウェブ・ページを動的に解析するステップと、
前記コンピューティング・デバイス上で、前記テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、前記テスト・ペイロードのセットのサブセットを使用して、前記潜在的な脆弱性を含んでいない前記ウェブ・ページを動的に解析するステップと
を含む、コンピュータにより実施される方法。
【請求項２】
ウェブ・サーバから前記複数のウェブ・ページを受信するステップをさらに含む、請求項１に記載のコンピュータにより実施される方法。
【請求項３】
前記複数のウェブ・ページが、ウェブ・アプリケーションと関連する、請求項１に記載のコンピュータにより実施される方法。
【請求項４】
前記複数のウェブ・ページの前記ソース・コードを静的解析するステップが、前記複数のウェブ・ページの前記ソース・コードを通じてデータのフローを表すモデルを構築するステップを含む、請求項１に記載のコンピュータにより実施される方法。
【請求項５】
前記潜在的な脆弱性が、セキュリティ・ルールのセットに基づくデータ・フローの違反を含む、請求項１に記載のコンピュータにより実施される方法。
【請求項６】
前記複数のウェブ・ページの前記ソース・コードを静的解析するステップが、静的汚染解析を含む、請求項１に記載のコンピュータにより実施される方法。
【請求項７】
動的に解析するステップが、スクリプト・エンジンで前記スクリプト・コードを実行するステップを含む、請求項１に記載のコンピュータにより実施される方法。
【請求項８】
複数の命令を含むコンピュータ・プログラムであって、前記複数の命令が、プロセッサによって実行されるとき、前記プロセッサに、
スクリプト・コードを含んだ複数のウェブ・ページのソース・コードを静的解析することと、
前記静的解析に基づいて潜在的な脆弱性を含んだウェブ・ページを識別することと、
前記静的解析に基づいて潜在的な脆弱性を含んでいないウェブ・ページを識別することと、
テスト・ペイロードのセットを使用して前記潜在的な脆弱性を含んだ前記ウェブ・ページを動的に解析することと、
前記テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、前記テスト・ペイロードのセットのサブセットを使用して、前記潜在的な脆弱性を含んでいない前記ウェブ・ページを動的に解析することと
を含む動作を行わせる、コンピュータ・プログラム。
【請求項９】
ウェブ・サーバから前記複数のウェブ・ページを受信するための命令をさらに含む、請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記複数のウェブ・ページが、ウェブ・アプリケーションと関連する、請求項８に記載のコンピュータ・プログラム。
【請求項１１】
前記複数のウェブ・ページの前記ソース・コードを静的解析するための前記命令が、前記複数のウェブ・ページの前記ソース・コードを通じてデータのフローを表すモデルを構築するための命令を含む、請求項８に記載のコンピュータ・プログラム。
【請求項１２】
前記潜在的な脆弱性が、セキュリティ・ルールのセットに基づくデータ・フローの違反を含む、請求項８に記載のコンピュータ・プログラム。
【請求項１３】
前記複数のウェブ・ページの前記ソース・コードを静的解析するための前記命令が、静的汚染解析のための命令を含む、請求項８に記載のコンピュータ・プログラム。
【請求項１４】
動的に解析するための前記命令が、スクリプト・エンジンで前記スクリプト・コードを実行するための命令を含む、請求項８に記載のコンピュータ・プログラム。
【請求項１５】
プロセッサおよび前記プロセッサと結合されたメモリと、
前記メモリに配置され、前記プロセッサで実行される第１のソフトウェア・モジュールであって、スクリプト・コードを含んだ複数のウェブ・ページのソース・コードを静的解析するように構成された前記第１のソフトウェア・モジュールと、
前記メモリに配置され、前記プロセッサで実行される第２のソフトウェア・モジュールであって、前記静的解析に基づいて潜在的な脆弱性を含んだウェブ・ページを識別するように構成された前記第２のソフトウェア・モジュールと、
前記メモリに配置され、前記プロセッサで実行される第３のソフトウェア・モジュールであって、前記静的解析に基づいて潜在的な脆弱性を含んでいないウェブ・ページを識別するように構成された前記第３のソフトウェア・モジュールと、
前記メモリに配置され、前記プロセッサで実行される第４のソフトウェア・モジュールであって、テスト・ペイロードのセットを使用して前記潜在的な脆弱性を含んだ前記ウェブ・ページを動的に解析するように構成された前記第４のソフトウェア・モジュールと、
前記メモリに配置され、前記プロセッサで実行される第５のソフトウェア・モジュールであって、前記テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、前記テスト・ペイロードのセットのサブセットを使用して、前記潜在的な脆弱性を含んでいない前記ウェブ・ページを動的に解析するように構成された前記第５のソフトウェア・モジュールと
を含む、システム。
【請求項１６】
ウェブ・サーバから前記複数のウェブ・ページを受信するように構成された第６のソフトウェア・モジュールをさらに含む、請求項１５に記載のシステム。
【請求項１７】
前記複数のウェブ・ページが、ウェブ・アプリケーションと関連する、請求項１５に記載のシステム。
【請求項１８】
前記複数のウェブ・ページの前記ソース・コードを静的解析するように構成された、前記第１のソフトウェア・モジュールが、前記複数のウェブ・ページの前記ソース・コードを通じてデータのフローを表すモデルを構築するように構成された、請求項１５に記載のシステム。
【請求項１９】
前記潜在的な脆弱性が、セキュリティ・ルールのセットに基づくデータ・フローの違反を含む、請求項１５に記載のシステム。
【請求項２０】
前記複数のウェブ・ページの前記ソース・コードを静的解析するように構成された前記第１のソフトウェア・モジュールが、静的汚染解析を行うように構成された、請求項１５に記載のシステム。
【請求項２１】
動的に解析するように構成された前記第４のソフトウェア・モジュールが、スクリプト・エンジンで前記スクリプト・コードを実行するように構成された、請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はセキュリティ・テストに関する。
【背景技術】
【０００２】
クライアント側のスクリプト言語により、ネットワークを通じて受信され、クライアント・コンピューティング・デバイス上で、例えばクライアント・コンピューティング・デバイスで作動中のウェブ・ブラウザによって実行されることが可能なコンピュータ・プログラムを作成し、実行することができる。いくつかの例では、クライアント側のスクリプトにより、動的なウェブ・コンテンツを可能にし、ウェブ・ページは、ユーザ入力、環境条件、または他の変数に応じて変化するコンテンツを有することができる。
【０００３】
ウェブ・アプリケーションが、クライアント側のスクリプト記述を利用して、クライアント・コンピューティング・デバイス上においてウェブ・ブラウザ・アプリケーション内で実行することができるアプリケーションを提供することができる。ウェブ・アプリケーションは、アプリケーションの機能および動作を、厳密にサーバ・コンピューティング・デバイスに属するのではなく、クライアント・コンピューティング・デバイスに移動させることができる。ウェブ・アプリケーションは、多くの場合ウェブ・ブラウザ内で実行される可能性があるので、ウェブ・アプリケーションは、多くのオペレーティング・システムのプラットフォームにわたって互換性のあるものとすることができる。これにより、アプリケーション開発者がクライアント・タイプごとに様々なバージョンのアプリケーションを作成することが不要になる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ターゲットを絞ったセキュリティ・テストのための、コンピュータにより実施される方法、コンピュータ・プログラム製品、システムを提供する。
【課題を解決するための手段】
【０００５】
ある実施によれば、方法が、コンピューティング・デバイス上で、スクリプト・コードを含む複数のウェブ・ページのソース・コードを静的に解析することを含むことができる。潜在的な脆弱性を含むウェブ・ページを、静的解析に基づいて識別することができる。潜在的な脆弱性を含んでいないウェブ・ページを、静的解析に基づいて識別することができる。潜在的な脆弱性を含んでいるウェブ・ページは、テスト・ペイロードのセットを使用して動的に解析することができる。潜在的な脆弱性を含んでいないウェブ・ページは、テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んでいる、テスト・ペイロードのセットのサブセットを使用して動的に解析することができる。
【０００６】
次のフィーチャーの１つまたは複数を含むことができる。ウェブ・サーバから複数のウェブ・ページを受信することができる。複数のウェブ・ページを、ウェブ・アプリケーションと関連付けることができる。
【０００７】
複数のウェブ・ページのソース・コードを静的に解析することは、複数のウェブ・ページのソース・コードを通じてデータのフローを表すモデルを構築することを含むことができる。潜在的な脆弱性は、一連のセキュリティ・ルールに基づくデータ・フローの違反（violation）を含むことができる。複数のウェブ・ページのソース・コードを静的に解析することは、静的汚染(taint)解析を含むことができる。動的に解析することは、スクリプト・エンジンでスクリプト・コードを実行することを含むことができる。
【０００８】
別の実施によれば、コンピュータ・プログラム製品が、複数の命令をそこに格納したコンピュータ読み取り可能な媒体を含む。プロセッサによって実行されるとき、命令はプロセッサに、スクリプト・コードを含んだ複数のウェブ・ページのソース・コードを静的に解析することを含む動作を行わせることができる。静的解析に基づいて、潜在的な脆弱性を含んだウェブ・ページを識別することができる。静的解析に基づいて、潜在的な脆弱性を含んでいないウェブ・ページを識別することができる。潜在的な脆弱性を含んだウェブ・ページは、テスト・ペイロードのセットを使用して動的に解析することができる。潜在的な脆弱性を含んでいないウェブ・ページは、テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んでいる、テスト・ペイロードのセットのサブセットを使用して動的に解析することができる。
【０００９】
次のフィーチャーの１つまたは複数を含むことができる。ウェブ・サーバから複数のウェブ・ページを受信するための命令を含むことができる。複数のウェブ・ページを、ウェブ・アプリケーションと関連付けることができる。
【００１０】
複数のウェブ・ページのソース・コードを静的に解析するための命令は、複数のウェブ・ページのソース・コードを通じてデータのフローを表すモデルを構築するための命令を含むことができる。潜在的な脆弱性は、一連のセキュリティ・ルールに基づくデータ・フローの違反を含むことができる。
【００１１】
複数のウェブ・ページのソース・コードを静的に解析するための命令は、静的汚染解析のための命令を含むことができる。動的に解析するための命令は、スクリプト・エンジンでスクリプト・コードを実行するための命令を含むことができる。
【００１２】
さらに別の実施によれば、システムが、プロセッサと、プロセッサと結合されたメモリとを含むことができる。第１のソフトウェア・モジュールをメモリに配置し、プロセッサで実行することができる。第１のソフトウェア・モジュールは、スクリプト・コードを含む複数のウェブ・ページのソース・コードを静的に解析するように構成することができる。第２のソフトウェア・モジュールをメモリに配置し、プロセッサで実行することができる。第２のソフトウェア・モジュールは、静的解析に基づく潜在的な脆弱性を含むウェブ・ページを識別するように構成することができる。第３のソフトウェア・モジュールをメモリに配置し、プロセッサで実行することができる。第３のソフトウェア・モジュールは、静的解析に基づいて潜在的な脆弱性を含んでいないウェブ・ページを識別するように構成することができる。第４のソフトウェア・モジュールをメモリに配置し、プロセッサで実行することができる。第４のソフトウェア・モジュールは、テスト・ペイロードのセットを使用して潜在的な脆弱性を含んだウェブ・ページを動的に解析するように構成することができる。第５のソフトウェア・モジュールをメモリに配置し、プロセッサで実行することができる。第５のソフトウェア・モジュールは、テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、テスト・ペイロードのセットのサブセットを使用して、潜在的な脆弱性を含んでいないウェブ・ページを動的に解析するように構成することができる。
【００１３】
次のフィーチャーの１つまたは複数を含むことができる。第６のソフトウェア・モジュールは、ウェブ・サーバから複数のウェブ・ページを受信するように構成することができる。複数のウェブ・ページを、ウェブ・アプリケーションと関連付けることができる。
【００１４】
複数のウェブ・ページのソース・コードを静的に解析するように構成された、第１のソフトウェア・モジュールは、複数のウェブ・ページのソース・コードを通じてデータのフローを表すモデルを構築するように構成することができる。潜在的な脆弱性は、一連のセキュリティ・ルールに基づくデータ・フローの違反を含むことができる。
【００１５】
複数のウェブ・ページのソース・コードを静的に解析するように構成された第１のソフトウェア・モジュールは、静的汚染解析を行うように構成することができる。動的に解析するように構成された、第４のソフトウェア・モジュールは、スクリプト・エンジンでスクリプト・コードを実行するように構成することができる。
【００１６】
１つまたは複数の実施の詳細について、添付の図面および以下の説明に示す。説明、図面、および特許請求の範囲から、他のフィーチャーも明らかになるであろう。
【図面の簡単な説明】
【００１７】
【図１】分散されたコンピューティング・ネットワークに結合された解析プロセスを概略的に示す図である。
【図２】図１の解析プロセスによって実行されるプロセスのフローチャートである。
【図３】会議の被招待者の推定される到着時間を示す図１の解析プロセスによる解析を概略的に示す図である。
【発明を実施するための形態】
【００１８】
当業者には理解されるように、本発明は、方法、システム、またはコンピュータ・プログラム製品として具体化することができる。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアの態様とハードウェアの態様を組み合わせた実施形態の形をとることができ、本明細書ではすべて一般的に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明は、コンピュータ使用可能プログラム・コードを媒体に組み込んだコンピュータ使用可能記憶媒体上のコンピュータ・プログラム製品の形をとることができる。
【００１９】
任意の好適なコンピュータ使用可能な媒体またはコンピュータ読み取り可能な媒体を利用することができる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体、またはコンピュータ読み取り可能な記憶媒体であることが可能である。コンピュータ使用可能な記憶媒体、またはコンピュータ読み取り可能な記憶媒体（コンピューティング・デバイスまたはクライアント電子デバイスと関連付けられた記憶装置を含む）は、例えば電子、磁気、光、電磁気、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記の任意の好適な組合せであることが可能であるが、これらに限定しない。コンピュータ読み取り可能な媒体のさらなる具体例（非網羅的リスト）には、以下が含まれることになる。すなわち、１つもしくは複数の配線を有する電気接続、携帯可能なコンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光学式記憶装置。この文書の文脈においては、コンピュータ利用可能な記憶媒体、またはコンピュータ読み取り可能な記憶媒体は、命令実行システム、装置、またはデバイスによって、あるいはこれらに関連して使用するためにプログラムを収容する、または格納することができる任意の有形媒体とすることができる。
【００２０】
コンピュータ読み取り可能な信号媒体が、例えばベースバンドに、または搬送波の一部として、コンピュータ読み取り可能なプログラム・コードを組み入れた伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光、またはその任意の好適な組合せを含むが、これらに限定しない、様々な形態のいずれかをとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体ではなく、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連して使用するためにプログラムを伝える、伝搬する、または伝送することができる任意のコンピュータ読み取り可能な媒体とすることができる。
【００２１】
コンピュータ読み取り可能な媒体に組み込まれたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、または上記の任意の好適な組合せを含むが、これらに限定しない、任意の適切な媒体を使用して送信することができる。
【００２２】
本発明の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋（Ｒ）などのようなオブジェクト指向プログラミング言語で書くことができる。しかしながら、本発明の動作を実行するためのコンピュータ・プログラム・コードは、「Ｃ」プログラミング言語または同様のプログラミング言語のような従来の手続き型プログラミング言語で書くこともできる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上で、かつ部分的にリモート・コンピュータ上で、あるいは全体的にリモート・コンピュータまたはサーバ上で、実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を介してユーザのコンピュータに接続することができる、あるいは（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続することができる。
【００２３】
本発明の諸実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図、あるいはその両方を参照して、本発明を以下に説明する。フローチャート図またはブロック図、あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図、あるいはその両方の中のブロックの組合せは、コンピュータ・プログラム命令によって実行できることを理解されるであろう。こうしたコンピュータ・プログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供して、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックに指定される機能／活動を実行するための手段を作り出すように、機械を製造することができる。
【００２４】
こうしたコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置に特定の方法で機能するよう命令することができるコンピュータ読み取り可能なメモリに格納することもでき、コンピュータ読み取り可能なメモリに格納された命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する命令を含む製品を生み出すようにする。
【００２５】
またコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置にロードして、コンピュータまたは他のプログラマブル装置上で一連の動作ステップを実行させて、コンピュータまたは他のプログラマブル装置上で実行される命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するためのステップを提供するように、コンピュータ実施プロセスを作り出すことができる。
【００２６】
図１を参照すると、ネットワーク１４（例えば、インターネットまたはローカル・エリア・ネットワーク）に接続することができるクライアント・コンピュータ１２に常駐することができ、クライアント・コンピュータ１２によって実行することができる解析プロセス１０が示されている。クライアント・コンピュータ１２の例には、パーソナル・コンピュータ、ラップトップ・コンピュータ、モバイル・コンピューティング・デバイス、サーバ・コンピュータ、または一連のサーバ・コンピュータを含むことができるが、これらに限定しない。クライアント・コンピュータ１２は、例えばオペレーティング・システム、例えば、Ｍｉｃｒｏｓｏｆｔ（Ｒ）Ｗｉｎｄｏｗｓ（Ｒ）、Ｍａｃ（Ｒ）ＯＳ  Ｘ（Ｒ）、またはＲｅｄ  Ｈａｔ（Ｒ）Ｌｉｎｕｘ（Ｒ）を実行することができるが、これらに限定しない。（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは、米国、他の諸国、または両方におけるＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標であり、ＭａｃおよびＯＳ  Ｘは、米国、他の諸国、または両方におけるＡｐｐｌｅ  Ｉｎｃ．の登録商標であり、Ｒｅｄ  Ｈａｔは、米国、他の諸国、または両方におけるＲｅｄ  Ｈａｔ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標であり、Ｌｉｎｕｘは、米国、他の諸国、または両方におけるＬｉｎｕｓ  Ｔｏｒｖａｌｄｓの登録商標である。）
【００２７】
以下により詳細に説明するように、解析プロセス１０は、スクリプト・コードを含む複数のウェブ・ページのソース・コードを静的に解析することができる。スクリプト・コードは、例えば、ＪａｖａＳｃｒｉｐｔ（Ｒ）、およびＦｌａｓｈ（Ｒ）のようなスクリプト言語で書かれたコードを含むことができるが、これらに限定しない（ＪａｖａＳｃｒｉｐｔは、米国、他の諸国、または両方におけるＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎの商標であり、Ｆｌａｓｈは、米国、他の諸国、または両方におけるＡｄｏｂｅ  Ｓｙｓｔｅｍｓ  Ｉｎｃｏｒｐｏｒａｔｅｄの商標である）。少なくとも部分的に、ソースを静的に解析することに基づいて、解析プロセス１０は、潜在的な脆弱性を含んでいるウェブ・ページ、および潜在的な脆弱性を含んでいないウェブ・ページを識別することができる。解析プロセス１０は、テスト・ペイロードのセットを使用して潜在的な脆弱性を含んだウェブ・ページを動的に解析することができる。さらに、解析プロセス１０は、テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、テスト・ペイロードのセットのサブセットを使用して、潜在的な脆弱性を含んでいないウェブ・ページを動的に解析することができる。
【００２８】
前述に従って、解析プロセス１０は、一般的には、スクリプト・コードを含んだ複数のウェブ・ページを静的に解析して、その静的解析からスクリプト・コードを含んだページを潜在的なセキュリティの脆弱性であるとして識別すること、および潜在的なセキュリティの脆弱性ではないページを識別することができる。ウェブ・ページはまた、動的に解析して、潜在的なセキュリティの脆弱性を識別することもできる。静的解析によって潜在的なセキュリティの脆弱性であると識別されなかったウェブ・ページは、テスト・ペイロードのサブセットを使用して動的に解析することができ、例えばこれは、より一般的なセキュリティの脆弱性の識別を目的とすることができる。静的解析によって潜在的なセキュリティの脆弱性であると識別されたウェブ・ページは、静的解析によって潜在的なセキュリティの脆弱性であると識別されなかったウェブ・ページを動的に解析するために使用されたものよりも広範囲の、一部の実施形態では著しく広範囲の、テスト・ペイロードのセットを使用して動的に解析することができる。
【００２９】
解析プロセス１０の命令セットおよびサブルーチンは、１つまたは複数のソフトウェア・モジュールを含むことができ、クライアント・コンピュータ１２に結合された記憶装置１６に格納することができるが、これらは１つまたは複数のプロセッサ（図示せず）ならびにクライアント・コンピュータ１２に組み込まれた１つまたは複数のメモリ・モジュール（図示せず）によって実行することができる。記憶装置１６は、ハード・ディスク・ドライブ、ソリッド・ステート・ドライブ、テープ・ドライブ、光ドライブ、ＲＡＩＤアレイ、ランダム・アクセス・メモリ（ＲＡＭ）、および読み出し専用メモリ（ＲＯＭ）を含むことができるが、これらに限定しない。
【００３０】
例えばテスト・ペイロード１８の１つまたは複数のセットが、複数のウェブ・ページを動的に解析することと関連して使用される場合があるが、これらを記憶装置１６に格納することができる。スクリプト・エンジン２０は、クライアント・コンピュータ１２によって実行されることも可能である。スクリプト・エンジン２０は、（例えば、ウェブ・ページ２２内に）複数のウェブ・ページと共に含まれるスクリプト・コードを実行するように構成されたエンジンを含むことができる。スクリプト・エンジン２０は、（例えば、ウェブ・コンテンツをレンダリングまたは処理、あるいはその両方を行うことができ、スクリプト・コードを実行する可能性のある）ウェブ・ブラウザ内に含まれる、もしくはウェブ・ブラウザのモジュールとして含まれる、またはその両方のスクリプト・エンジンを含むことができる、あるいはウェブ・ページ２２内に含まれるスクリプトを実行するように構成可能であるスタンドアロン型スクリプト・エンジンを含むことができる、あるいはその両方である。スクリプト・エンジン２０の命令セットおよびサブルーチンは、１つまたは複数のソフトウェア・モジュールを含むことができ、クライアント・コンピュータ１２に結合された記憶装置１６に格納することができるが、これらはクライアント・コンピュータ１２に組み込まれている１つまたは複数のプロセッサ（図示せず）ならびに１つまたは複数のメモリ・モジュール（図示せず）によって実行することができる。いくつかの実施形態では、スクリプト・エンジン２０は、個々のアプリケーションを含むことができる、または解析プロセス１０の構成要素を含むことができる、あるいはその両方である。
【００３１】
ウェブ・ページ２２は、サーバ・コンピュータ２６に結合された記憶装置２４に格納することができる。ウェブ・ページ２２の１つまたは複数は、スクリプト・コードを含むことができ、スクリプト・コードは、（例えば、スクリプト・エンジン２０によって）クライアント・コンピュータ１２上で実行することができる。記憶装置２４には、ハード・ディスク・ドライブ、ソリッド・ステート・ドライブ、テープ・ドライブ、光ドライブ、ＲＡＩＤアレイ、ランダム・アクセス・メモリ（ＲＡＭ）、および読み出し専用メモリ（ＲＯＭ）が含まれるが、これらに限定しない。サーバ・コンピュータ２６の例には、パーソナル・コンピュータ、サーバ・コンピュータ、一連のサーバ・コンピュータ、ミニ・コンピュータ、およびメインフレーム・コンピュータが含まれるが、これらに限定しない。サーバ・コンピュータ２６は、ネットワーク・オペレーティング・システム、その例には、例えばＭｉｃｒｏｓｏｆｔ（Ｒ）Ｗｉｎｄｏｗｓ（Ｒ）Ｓｅｒｖｅｒ、Ｎｏｖｅｌｌ（Ｒ）ＮｅｔＷａｒｅ（Ｒ）、またはＲｅｄ  Ｈａｔ（Ｒ）Ｌｉｎｕｘ（Ｒ）が含まれるが、これらに限定されない（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは、米国、他の諸国、または両方におけるＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標であり、ＮｏｖｅｌｌおよびＮｅｔＷａｒｅは、米国、他の諸国、または両方におけるＮｏｖｅｌｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標であり、Ｒｅｄ  Ｈａｔは、米国、他の諸国、または両方におけるＲｅｄ  Ｈａｔ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標であり、Ｌｉｎｕｘは、米国、他の諸国、または両方におけるＬｉｎｕｓ  Ｔｏｒｖａｌｄｓの登録商標である。）、を実行中のウェブ・サーバ（または一連のサーバ）とすることができる。
【００３２】
サーバ・コンピュータ１２は、ウェブ・サーバ・アプリケーション２８を実行することができ、ウェブ・サーバ・アプリケーションの例には、ネットワーク１４を介したサーバ・コンピュータ２６へのＨＴＴＰ（すなわち、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ、ハイパーテキスト転送プロトコル）のアクセスを可能にする、Ｍｉｃｒｏｓｏｆｔ  ＩＩＳ、Ｎｏｖｅｌｌ  ＷｅｂｓｅｒｖｅｒＴＭ、またはＡｐａｃｈｅ（Ｒ）Ｗｅｂｓｅｒｖｅｒ（Ｗｅｂｓｅｒｖｅｒは、米国、他の諸国、または両方におけるＮｏｖｅｌｌ  Ｃｏｒｐｏｒａｔｉｏｎの商標であり、Ａｐａｃｈｅは、米国、他の諸国、または両方におけるＡｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎの登録商標である）が含まれるが、これらに限定しない。ウェブ・サーバ・アプリケーションの命令セットおよびサブルーチンは、記憶装置２４に格納することができるが、これらはサーバ・コンピュータ２６に組み込まれた１つまたは複数のプロセッサ（図示せず）ならびに１つまたは複数のメモリ・モジュール（図示せず）によって実行することができる。加えて／代替として、ウェブ・サーバ・アプリケーションは、クライアント・コンピュータ１２に格納し、クライアント・コンピュータ１２で実行することができる。
【００３３】
クライアント・コンピュータ１２は、直接にまたは間接的に、ネットワーク１４に結合することができる。例えば、クライアント・コンピュータ１２は、配線によるネットワーク接続を介してネットワーク１４に直接結合されて示されている。様々な追加の／代替の実施形態では、クライアント・コンピュータ１２（またはサーバ・コンピュータ２６、あるいはその両方）を、クライアント・コンピュータ１２（またはサーバ・コンピュータ２６、あるいはその両方）間に確立された無線通信チャネルによってネットワーク１４に結合することができる。無線通信チャネルの例には、ＩＥＥＥ  ８０２．１１ａ、８０２．１１ｂ、８０２．１１ｇ、Ｗｉ−Ｆｉ、またはＢｌｕｅｔｏｏｔｈ無線通信チャネル、あるいはこれらのすべてが含まれる。当技術分野では知られているように、ＩＥＥＥ  ８０２．１１ｘ規格のすべては、経路の共有のために、Ｅｔｈｅｒｎｅｔ（Ｒ）プロトコルおよび衝突回避型の搬送波感知多重アクセス（すなわち、ＣＳＭＡ／ＣＡ）を使用することができる。様々な８０２．１１ｘ規格は、例えば位相偏移キーイング（すなわち、ＰＳＫ）変調または相補的コード・キーイング（すなわち、ＣＣＫ）変調を使用することができる。当技術分野では知られているように、Ｂｌｕｅｔｏｏｔｈは、例えば携帯電話、コンピュータ、および携帯情報端末が短距離無線接続を使用して相互接続できる電気通信業界の規格である。
【００３４】
また図２を参照すると、解析プロセス１０が、一般的に、スクリプト・コードを含む複数のウェブ・ページのソース・コードを静的に解析する１００ことができる。解析プロセス１０は、静的解析１００に基づく潜在的な脆弱性を含んだ１つの、または２つ以上のウェブ・ページを識別する１０２ことができる。解析プロセス１０はまた、静的解析に基づく潜在的な脆弱性を含んでいない１つの、または２つ以上のウェブ・ページを識別する１０４こともできる。さらに解析プロセス１０は、テスト・ペイロードのセットを使用して潜在的な脆弱性を含んだ１つの、または２つ以上のウェブ・ページを動的に解析する１０６ことができる。潜在的な脆弱性を含んでいない１つの、または２つ以上のウェブ・ページは、テスト・ペイロードのセットよりも少ないテスト・ペイロードを含んだ、テスト・ペイロードのセットのサブセットを使用して動的に解析する１０８ことができる。
【００３５】
例えば、図３も参照すると、解析プロセス１０が、サーバ・コンピュータ２６から複数のウェブ・ページ２２を受信する１１０ことができる。サーバ・コンピュータ２６から受け取った１１０複数のウェブ・ページ２２は、ＪａｖａＳｃｒｉｐｔ、Ｆｌａｓｈ、または他のスクリプト・コードのようなスクリプト・コードを含む１つまたは複数のページを含むことができる。いくつかの例では、複数のウェブ・ページ２２は、ウェブ・アプリケーションと関連しているウェブ・ページを含むことができる。
【００３６】
スクリプト・コードを含む複数のウェブ・ページのソース・コードを（例えば、解析プロセス１０の機能、または解析プロセス１０のモジュール、フィーチャー、もしくは構成要素、あるいはその両方を表すことができる静的解析装置１５０によって）静的に解析すること１００は、いくつかの実施形態では、ウェブ・ページ２２のソース・コード、またはウェブ・ページ２２に含まれるスクリプト・コード、あるいはその両方を通じて、情報およびデータのフローを表すスクリプト・コードのモデル１５２を構築する１１２ことを含む。
【００３７】
コード・モデル１５２を使用して、静的解析装置１５０は、潜在的な脆弱性を含む１つの、または２つ以上のウェブ・ページ（例えば、ウェブ・ページＰＶ）を識別する１０２ことができる。例えば、潜在的な脆弱性を含む１つの、または２つ以上のウェブ・ページを識別すること１０２は、コード・モデル１５２内のデータ・フローの違反を識別することを含むことができる。いくつかの実施形態では、データ・フローの違反は、潜在的な脆弱性と関連する１つまたは複数の挙動を識別することができるセキュリティ・ルールのセットに基づくことができる。いくつかの実施形態では、ウェブ・ページ２２のソース・コードを静的に解析すること１００は、静的汚染解析を含むことができる。
【００３８】
いくつかの実施形態では、ウェブ・ページ２２のソース・コードを静的に解析すること１００は、コード・モデル１５２を調べることができるので、ウェブ・ページ２２のソース・コードを静的に解析すること１００は、比較的高速プロセスとすることができる。例えば、解析プロセス１０（例えば、静的解析装置１５０による）が、様々なペイロード・タイプをシミュレートし、脆弱性またはエクスプロイト(exploit)の理論上の例がスクリプト・コード中に存在することを識別する１０２ことができる。したがって、解析プロセス１０は、一般的なタイプのペイロードが潜在的に脆弱性をもたらす可能性があると判断することができる。しかしながら、静的解析は、特定のパラメータまたはフィーチャー、あるいはその両方を含まない、一般的なペイロードを使用してアブストラクション(abstraction)を表す可能性がある。したがって、いくつかの実施形態では、解析プロセス１０は、スクリプトのソース・コードを静的に分析すること１００に基づいて、潜在的な脆弱性をもたらす正確なペイロードを判断しない可能性があり、潜在的な脆弱性を含んだウェブ・ページを識別する１０２際に誤検出の傾向がある可能性がある。
【００３９】
同様にして、ウェブ・ページ２２のソース・コードを静的に解析すること１００は、潜在的な脆弱性を含んでいない１つの、または２つ以上のウェブ・ページを識別する１０４ことができる。潜在的な脆弱性を含んでいない１つの、または２つ以上のウェブ・ページは、潜在的な脆弱性を含んでいると識別され１０２なかったすべてのウェブ・ページを含むことができる。いくつかの実施形態では、解析プロセス１０は、潜在的な脆弱性を含んでいる、または潜在的な脆弱性を含んでいないとして、ウェブ・ページ２２のそれぞれにフラグをたてることができる。
【００４０】
解析プロセス１０は、静的に解析された１００ウェブ・ページ２２を動的に解析する１０６、１０８ことができる。例えば、解析プロセス１０は、静的解析１００に基づいて、潜在的な脆弱性を含んでいると識別された１０２、１つの、または２つ以上のウェブ・ページ（例えば、ウェブページＰＶ）を動的に解析する１０６ことができ、潜在的な脆弱性を含んでいないと識別された１０４、１つの、または２つ以上のウェブ・ページ（例えば、ウェブ・ページＰＮ）を動的に解析する１０８ことができる。いくつかの実施形態では、ウェブ・ページ２２は、動的解析装置１５４によって動的に解析される１０６、１０８ことが可能であり、動的解析装置１５４は、例えば解析プロセス１０の機能、または解析プロセス１０のモジュール、フィーチャー、構成要素、あるいはこれらのすべてを表すことができる。
【００４１】
いくつかの実施形態では、ウェブ・ページ２２を動的に解析すること１０６、１０８は、スクリプト・コード・エンジン２０でスクリプト・コードを実行すること１１４を含むことができる。上述のように、スクリプト・コード・エンジン２０は、スタンドアロン型スクリプト・コード・エンジンを含むことができる、または解析プロセス１０と相互に作用することができるウェブ・ブラウザの機能、もしくはモジュール、もしくは構成要素などを含むことができる、または解析プロセス１０の機能、もしくはモジュール、もしくは構成要素などを含むことができる、あるいはこれらのすべてを含むことができる。一般的には、ウェブ・ページ２２を動的に解析すること１０６、１０８は、ウェブ・ページ２２を要求することと、様々な異なるテスト・ペイロード（例えば、テスト・ペイロード１８）を用いてウェブ・ページ２２を実行することとを含むことができる。したがって、解析プロセス１０は、異なるテスト・ペイロードを用いてウェブ・ページ２２内に含まれるスクリプトを実行することができる。さらに、解析プロセス１０は、ウェブ・ページ２２（またはウェブ・ページ２２内に含まれるスクリプト、あるいはその両方）の挙動を観察することができ、いくつかの挙動が、所与のウェブ・ページ（またはウェブ・ページ内に含まれるスクリプト、あるいはその両方）と関連する脆弱性を示す可能性がある。
【００４２】
潜在的な脆弱性を含んだ１つまたは複数のウェブ・ページＰＶを動的に解析すること１０６は、テスト・ペイロードのセットＴＰを使用して１つまたは複数のウェブ・ページＰＶを解析すること１０６を含むことができる。いくつかの実施形態では、テスト・ペイロードのセットＴＰは、数十または数百の（例えば、いくつかの実施形態では調べられるパラメータあたり約１００〜２００のテスト・ペイロードの間の）テスト・ペイロードを含むことができる。解析プロセス１０は、脆弱性を示す挙動について、１つまたは複数のウェブ・ページＰＶ（またはウェブ・ページＰＶ内に含まれるスクリプト、あるいはその両方）の挙動を観察することができる。一般的に、比較的多数のテスト・ペイロードを使用してウェブ・ページを動的に解析すること１０６は、比較的時間のかかるプロセスである可能性があるが、いくつかの実施形態では潜在的な脆弱性を含むと識別されるウェブ・ページＰＶは比較的少ない可能性があり、潜在的な脆弱性を含むウェブ・ページＰＶを動的に解析すること１０６に関連する時間は、許容できるものとなる可能性がある。
【００４３】
潜在的な脆弱性を含んでいない１つまたは複数のウェブ・ページＰＮを動的に解析すること１０８は、テスト・ペイロードのセットＴＰのサブセットＴＰ１を使用して１つまたは複数のウェブ・ページＰＮを動的に解析すること１０８を含むことができる。テスト・ペイロードのサブセットＴＰ１は、テスト・ペイロードのセットＴＰよりも少ないテスト・ペイロードを含むことができる。例えば、いくつかの実施形態では、１つまたは複数のウェブ・ページＰＮは、脆弱性の共通のソースについて動的にテストされる１０８ことがある。このようないくつかの実施形態では、テスト・ペイロードのサブセットＴＰ１は、テストされるパラメータあたり１から１０のテスト・ペイロード（例えば、いくつかの実施形態では、テストされるパラメータあたり４のテスト・ペイロード）を含むことができる。
【００４４】
いくつかの実施形態では、静的解析を使用して、動的解析を通知することができる。すなわち、いくつかの実施形態では、テストされるウェブ・ページのうち比較的少数が、静的解析によって潜在的な脆弱性を含んでいると識別される可能性がある。潜在的な脆弱性を含むとして識別される比較的少数のウェブ・ページは、比較的多数のテスト・ペイロードを使用して徹底的にテストすることができる。潜在的な脆弱性を含むとして識別されないウェブ・ページは、比較的少数のテスト・ペイロードを使用して動的に解析することができる。したがって、多数のテスト・ペイロードを用いて動的に解析することは、比較的時間のかかるものである可能性があるが、比較的少数のウェブ・ページ（すなわち、潜在的な脆弱性を含んでいるとして識別されたもの）のみが広範囲にわたって動的に解析されることが可能であり、潜在的な脆弱性を含んでいるとして識別されないウェブ・ページは、比較的少数のテスト・ペイロードを使用して動的に解析されることが可能である。したがって、いくつかの実施形態では、動的な解析、または動的な解析の規模、あるいはその両方を、（例えば、潜在的な脆弱性を含んでいるとして識別されるウェブ・ページに）ターゲットを絞ったものとすることができる。さらに、いくつかの実施形態では、（例えば、静的解析によって）潜在的な脆弱性を含んでいるとして識別されるウェブ・ページを広範囲にわたって動的に解析することは、脆弱性が（例えば、誤検出または理論上の脆弱性、あるいはその両方とは対照的に）実際に存在しているかどうか、および（例えば、動的解析に基づいて）脆弱性をどのように再現するかを確認することができる。さらに、脆弱性を確認することができるいくつかの実施形態では、スクリプトのソース・コードのアスペクトを静的解析に基づいて識別することができる。
【００４５】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実行のアーキテクチャ、機能、および動作を示す。この点に関して、フローチャートまたはブロック図の各ブロックは、（１つまたは複数の）指定された論理機能を実行するための１つまたは複数の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。またいくつかの代替的な実施では、ブロックに示した機能が図に示した順序を外れて行われる場合があることに注意されたい。例えば、連続して示した２つのブロックは、実際には実質的に同時に行われる場合があり、またはブロックは、関与する機能に応じて、時には逆の順序で行われる場合がある。またブロック図またはフローチャート図、あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図、あるいはその両方におけるブロックの組合せは、指定された機能または動作を行う特殊用途ハードウェアベースのシステム、あるいは特殊用途ハードウェアおよびコンピュータ命令の組合せによって実行可能であることに注意されたい。
【００４６】
本明細書で使用する用語は、特定の実施形態を説明することのみを意図しており、本発明を限定することを意図していない。本明細書で使用される単数形、「１つの（ａ）」、「１つの（ａｎ）」、および「その（ｔｈｅ）」は、文脈上明らかに他の意味を示す場合を除いて、複数形も含むものとする。「含む（comprises）」または「含んでいる（comprising）」、あるいはその両方の用語は、本明細書で使用されるとき、提示するフィーチャー、または完全体、またはステップ、または動作、または要素、または構成要素、あるいはその組合せの存在を明記するが、１つ以上の他のフィーチャー、または完全体、またはステップ、または動作、または要素、または構成要素、またはそのグループ、あるいはその組合せの存在または追加を排除しないことを、さらに理解されたい。
【００４７】
添付の特許請求の範囲中のあらゆるミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等物は、具体的に特許請求される他の請求項の要素と組み合わせて機能を行うためのいかなる構造、材料、または動作も含むものとする。本発明の記載は、例示および説明のために提示したが、網羅的であること、または開示した形態の発明に限定されることを意図していない。本発明の範囲および趣旨を逸脱することなく、多くの変更形態および変形形態が当業者には明らかであろう。本発明の原理および実際の応用を最も良く説明するために、また当業者が予想される特定の利用に適した様々な変更形態と共に様々な実施形態について本発明を理解できるように、実施形態を選択して説明した。
【００４８】
このように本出願の発明を詳細に、かつその実施形態を参照して説明したが、添付の特許請求の範囲に定める本発明の範囲を逸脱することなく変更形態および変形形態が考えられることは明らかであろう。
【図１】
0005893164.tif 000002
【図２】
0005893164.tif 000003
【図３】
0005893164.tif 000004