(57)【要約】スクリプト言語で記述されたソフトウェアプログラム（２４）の実行時分析の方法。その方法は、ソフトウェアプログラムを実行する前に、スクリプト言語でのパッチコードをソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義するステップを有し、そのプロキシメソッドは、ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そしてそのプロキシメソッドは、現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成されるロジックを有する。追加されたパッチコードを有するソフトウェアプログラムをコンピュータ（３２）上で実行すると、プロキシメソッド内のロジックにより提供される情報が受信され、そしてその情報に従った処理が行われる。【選択図】図２
2018502351.tif 000002
【特許請求の範囲】
【請求項１】
スクリプト言語で記述されたソフトウェアプログラムの実行時分析の方法であって、
前記ソフトウェアプログラムを実行する前に、前記スクリプト言語でのパッチコードを前記ソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義するステップと、
前記プロキシメソッドは、前記ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そして前記現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成されるロジックを有し、；そして
追加された前記パッチコードを有する前記ソフトウェアプログラムをコンピュータ上で実行する時に、前記プロキシメソッド内の前記ロジックにより提供される前記情報を受信しそして前記情報に従うステップと；
を有することを特徴とする方法。
【請求項２】
前記ソフトウェアプログラムは、ドキュメント内に埋め込まれたスクリプトを有し、そして前記パッチコードを追加するステップは、パッチスクリプトを前記ドキュメントに追加するステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項３】
前記追加されたパッチスクリプトは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ドキュメント内に存在する前記現存するメソッドの全てのインスタンスを前記プロキシメソッドで置き換えるようにさせる、ことを特徴とする請求項２に記載の方法。
【請求項４】
前記パッチコードを追加するステップは、前記埋め込まれたスクリプトを分析または変更することなく、前記ドキュメントの最初に前記パッチスクリプトを挿入するステップを有する、ことを特徴とする請求項２に記載の方法。
【請求項５】
前記プロキシメソッド内の前記ロジックにより提供される前記情報は、前記スクリプト言語プログラムのセキュリティ脆弱性を示す、ことを特徴とする請求項１−４のいずれかに記載の方法。
【請求項６】
前記プロキシメソッドは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記現存するメソッドによる前記プログラムへの入力を検知し、そして前記入力の中の悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項５に記載の方法。
【請求項７】
前記プロキシメソッドはコンピュータに対し、クロスサイトスクリプティング攻撃を示す、悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項６に記載の方法。
【請求項８】
前記情報に従うステップは、前記セキュリティ脆弱性を引き起こした前記ソフトウェアプログラムの少なくとも一部を実行不能にするステップを有する、ことを特徴とする請求項５に記載の方法。
【請求項９】
前記情報は実行時のソフトウェアプログラムのフローを示し、そして前記情報を受信しそして前記情報に従うステップは、前記プロキシメソッド内の前記ロジックにより提供される前記情報を取り込む、前記ソフトウェアプログラムの静的分析を実行するステップを有する、ことを特徴とする請求項１−４のいずれかに記載の方法。
【請求項１０】
前記追加されたパッチスクリプトは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムのトレースを生成するようにさせ、そして前記情報を取り込むステップは、前記トレースを使用して前記ソフトウェアプログラムのコールフローグラフを構築するステップを有する、ことを特徴とする請求項９に記載の方法。
【請求項１１】
前記プロキシメソッドは、トレースメソッドを有し、前記トレースメソッドはコンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムにおけるそれぞれのメソッド呼び出しにおいて呼び出し元と呼び出し先を記録するようにさせ、前記トレースは前記記録された呼び出し元と呼び出し先を含むコールトレースを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１２】
ソフトウェア分析のための装置であって、
スクリプト言語で記述されたソフトウェアプログラムを受信するように構成されたメモリと；そして
プロセッサと；
を有し、
前記プロセッサは、前記ソフトウェアプログラムを実行する前に、前記スクリプト言語でのパッチコードを前記ソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義し、前記プロキシメソッドは、追加された前記パッチコードを有する前記ソフトウェアプログラムをコンピュータ上で実行する時に、前記ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そして前記現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成される、ロジックを有する、ように構成される、
ことを特徴とする装置。
【請求項１３】
前記ソフトウェアプログラムは、ドキュメント内に埋め込まれたスクリプトを有し、そして前記パッチコードは、前記ドキュメントに追加されたパッチスクリプトを有する、ことを特徴とする請求項１２に記載の装置。
【請求項１４】
前記追加されたパッチスクリプトは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ドキュメント内に存在する前記現存するメソッドの全てのインスタンスを前記プロキシメソッドで置き換えるようにさせる、ことを特徴とする請求項１３に記載の装置。
【請求項１５】
前記プロセッサは、前記埋め込まれたスクリプトを分析または変更することなく、前記ドキュメントの最初に前記パッチスクリプトを追加するように構成される、ことを特徴とする請求項１３に記載の装置。
【請求項１６】
前記プロキシメソッド内の前記ロジックにより提供される前記情報は、前記スクリプト言語プログラムのセキュリティ脆弱性を示す、ことを特徴とする請求項１２−１５のいずれかに記載の装置。
【請求項１７】
前記プロキシメソッドは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記現存するメソッドによる前記プログラムへの入力を検知し、そして前記入力の中の悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項１６に記載の装置。
【請求項１８】
前記プロキシメソッドはコンピュータに対し、クロスサイトスクリプティング攻撃を示す、悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項１７に記載の装置。
【請求項１９】
前記プロキシメソッドは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記セキュリティ脆弱性を引き起こした前記ソフトウェアプログラムの少なくとも一部を実行不能にさせる、ことを特徴とする請求項１６に記載の装置。
【請求項２０】
前記情報は実行時のソフトウェアプログラムのフローを示し、そして前記プロセッサは、前記プロキシメソッド内の前記ロジックにより提供される前記情報を取り込む、前記ソフトウェアプログラムの静的分析を実行するように構成される、ことを特徴とする請求項１２−１５のいずれかに記載の装置。
【請求項２１】
前記追加されたパッチスクリプトはコンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムのトレースを生成するようにさせ、そして前記プロセッサは、前記トレースを使用して前記ソフトウェアプログラムのコールフローグラフを構築するように構成される、ことを特徴とする請求項２０に記載の装置。
【請求項２２】
前記プロキシメソッドは、トレースメソッドを有し、前記トレースメソッドはコンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムにおけるそれぞれのメソッド呼び出しにおいて呼び出し元と呼び出し先を記録するようにさせ、前記トレースは前記記録された呼び出し元と呼び出し先を含むコールトレースを有する、ことを特徴とする請求項２１に記載の装置。
【請求項２３】
コンピュータソフトウェアを含む製品であって、
プログラム命令が保管されるコンピュータ読み取り可能媒体を有し、前記命令は、コンピュータに読み込まれた場合に、コンピュータに対し、スクリプト言語で記述されたソフトウェアプログラムを受け取り、前記ソフトウェアプログラムを実行する前に、前記スクリプト言語でのパッチコードを前記ソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義し、ここにおいて前記プロキシメソッドは、前記追加されたパッチコードを有する前記ソフトウェアプログラムをコンピュータ上で実行する時に、前記ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そして前記プロキシメソッドは、前記現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成されるロジックを有し、そして、前記プログラム命令は、追加された前記パッチコードを有する前記ソフトウェアプログラムを実行する時に、前記プロキシメソッド内の前記ロジックにより提供される前記情報を受信しそして前記情報に従うようにさせる、
ことを特徴とするコンピュータソフトウェアを含む製品。
【請求項２４】
前記ソフトウェアプログラムは、ドキュメント内に埋め込まれたスクリプトを有し、そして前記パッチコードは、前記ドキュメントに追加されたパッチスクリプトを有する、ことを特徴とする請求項２３に記載の製品。
【請求項２５】
前記追加されたパッチスクリプトは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ドキュメント内に存在する前記現存するメソッドの全てのインスタンスを前記プロキシメソッドで置き換えるようにさせる、ことを特徴とする請求項２４に記載の製品。
【請求項２６】
前記命令は前記コンピュータに対し、前記埋め込まれたスクリプトを分析または変更することなく、前記ドキュメントの最初に前記パッチスクリプトを追加するようにさせる、ことを特徴とする請求項２４に記載の製品。
【請求項２７】
前記プロキシメソッド内の前記ロジックにより提供される前記情報は、前記スクリプト言語プログラムのセキュリティ脆弱性を示す、ことを特徴とする請求項２３−２６のいずれかに記載の製品。
【請求項２８】
前記プロキシメソッドは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記現存するメソッドによる前記プログラムへの入力を検知し、そして前記入力の中の悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項２７に記載の製品。
【請求項２９】
前記プロキシメソッドはコンピュータに対し、クロスサイトスクリプティング攻撃を示す、悪意のあるストリングを識別するようにさせる、ことを特徴とする請求項２８に記載の製品。
【請求項３０】
前記プロキシメソッドは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記セキュリティ脆弱性を引き起こした前記ソフトウェアプログラムの少なくとも一部を実行不能にさせる、ことを特徴とする請求項２７に記載の製品。
【請求項３１】
前記情報は実行時のソフトウェアプログラムのフローを示し、そして前記命令は前記コンピュータに対し、前記プロキシメソッド内の前記ロジックにより提供される前記情報を取り込む、前記ソフトウェアプログラムの静的分析を実行するようにさせる、ことを特徴とする請求項２３−２６のいずれかに記載の製品。
【請求項３２】
前記追加されたパッチスクリプトは前記コンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムのトレースを生成するようにさせ、そして前記命令は前記コンピュータに対し、前記トレースを使用して前記ソフトウェアプログラムのコールフローグラフを構築するようにさせる、ことを特徴とする請求項３１に記載の製品。
【請求項３３】
前記プロキシメソッドは、トレースメソッドを有し、前記トレースメソッドはコンピュータに対し、前記スクリプト言語プログラムを実行する時に、前記ソフトウェアプログラムにおけるそれぞれのメソッド呼び出しにおいて呼び出し元と呼び出し先を記録するようにさせ、前記トレースは前記記録された呼び出し元と呼び出し先を含むコールトレースを有する、ことを特徴とする請求項３２に記載の製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にコンピュータプログラムにおけるセキュリティ脆弱性の検知および保護に関し、特に実行時アプリケーション自己保護（ＲＡＳＰ）に関するものである。
【背景技術】
【０００２】
（関連出願の相互参照）
本出願は２０１５年１月１８日出願の米国暫定特許出願第６２／１０４，７６０の恩恵を主張し、それはここに参照して取り入れられる。
【０００３】
ＲＡＳＰ技術は、アプリケーションに保護機能を追加することによりソフトウェアアプリケーションをセキュリティ脆弱性に対して保護するために使用される。典型的なＲＡＳＰの実装では、これらの保護機能は、例えば実行型アプリケーションコードおよび／またはオペレーティングプラットフォームに適切な変更や追加を加えることにより、アプリケーションの実行時環境内に備えられる。計測管理はアプリケーションの実行中の疑わしいビヘイビュアを検知し、そしてそのようなビヘイビュアが検知された場合に保護的アクションを開始するように設計されている。ＲＡＳＰはしたがって、コードがコンパイルされそして実行される前にセキュリティ脆弱性を検知するために典型的に行われる、ソースコード分析のような静的アプリケーションセキュリティ試験（ＳＡＳＴ）とは異なる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国暫定特許出願第６２／１０４，７６０
【特許文献２】ＰＣＴ国際特許出願公開ＷＯ２００８／０４７３５１
【発明の概要】
【０００５】
以下の明細書に記載される本発明の実施形態は、ソフトウェアプログラムをセキュリティ脆弱性に対して保護するための、改良された方法、システム、およびソフトウェアを提供する。
したがって本発明の１実施形態によれば、スクリプト言語で記述されたソフトウェアプログラムの実行時分析の方法が提供される。その方法は、ソフトウェアプログラムを実行する前に、スクリプト言語でのパッチコードをソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義するステップと、ここにおいてプロキシメソッドは、ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そして現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成されるロジックを有し、；そして追加されたパッチコードを有するソフトウェアプログラムをコンピュータ上で実行する時に、プロキシメソッド内のロジックにより提供される情報を受信しそしてその情報に従うステップと；を有する。
【０００６】
その開示された実施形態では、ソフトウェアプログラムは、ドキュメント内に埋め込まれたスクリプトを有し、そしてパッチコードを追加するステップは、パッチスクリプトをドキュメントに追加するステップを有する。典型的に、追加されたパッチスクリプトはコンピュータに対し、スクリプト言語プログラムを実行する時に、ドキュメント内に存在する現存するメソッドの全てのインスタンスをプロキシメソッドで置き換えるようにさせる。１つの実施形態では、パッチコードを追加するステップは、埋め込まれたスクリプトを分析または変更することなく、ドキュメントの最初にパッチスクリプトを挿入するステップを有する。
【０００７】
いくつかの実施形態では、プロキシメソッド内のロジックにより提供される情報は、スクリプト言語プログラムのセキュリティ脆弱性を示す。１つの実施形態では、プロキシメソッドはコンピュータに対し、スクリプト言語プログラムを実行する時に、現存するメソッドによるプログラムへの入力を検知し、そして入力の中の悪意のあるストリングを識別するようにさせる。例えば、プロキシメソッドはコンピュータに対し、クロスサイトスクリプティング攻撃を示す、悪意のあるストリングを識別するようにさせる。さらにあるいは、情報に従うステップは、セキュリティ脆弱性を引き起こしたソフトウェアプログラムの少なくとも一部を実行不能にするステップを有する。
【０００８】
他の実施形態では、情報は実行時のソフトウェアプログラムのフローを示し、そして情報を受信しそして情報に従うステップは、プロキシメソッド内のロジックにより提供される情報を取り込む、ソフトウェアプログラムの静的分析を実行するステップを有する。１つの実施形態では、追加されたパッチスクリプトはコンピュータに対し、スクリプト言語プログラムを実行する時に、ソフトウェアプログラムのトレースを生成するようにさせ、そして情報を取り込むステップは、トレースを使用してソフトウェアプログラムのコールフローグラフを構築するステップを有する。典型的に、プロキシメソッドは、トレースメソッドを有し、トレースメソッドはコンピュータに対し、スクリプト言語プログラムを実行する時に、ソフトウェアプログラムにおけるそれぞれのメソッド呼び出しにおいて呼び出し元と呼び出し先を記録するようにさせ、そのトレースは記録された呼び出し元と呼び出し先を含むコールトレースを有する。
【０００９】
本発明の１実施形態によればまた、ソフトウェア分析のための装置であって、スクリプト言語で記述されたソフトウェアプログラムを受信するように構成されたメモリを含む装置が提供される。プロセッサは、ソフトウェアプログラムを実行する前に、スクリプト言語でのパッチコードをソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義し、そのプロキシメソッドは、追加されたパッチコードを有するソフトウェアプログラムをコンピュータ上で実行する時に、ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そしてそのプロキシメソッドは、現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成される、ロジックを有する、ように構成される。
【００１０】
本発明の１実施形態によれば、さらにコンピュータソフトウェアを含む製品であって、プログラム命令が保管されるコンピュータ読み取り可能媒体を有し、その命令は、コンピュータに読み込まれた場合に、コンピュータに対し、スクリプト言語で記述されたソフトウェアプログラムを受け取り、そのソフトウェアプログラムを実行する前に、スクリプト言語でのパッチコードをそのソフトウェアプログラムに追加し、それにより１つのプロキシメソッドを定義し、ここにおいてそのプロキシメソッドは、追加されたパッチコードを有するソフトウェアプログラムをコンピュータ上で実行する時に、ソフトウェアプログラム内の現存する１つのメソッドの代わりに実行され、そしてそのプロキシメソッドは、現存するメソッドのオペレーションに関連する情報を実行時に提供するように構成されるロジックを有し、そして、プログラム命令は、追加されたパッチコードを有するソフトウェアプログラムを実行する時に、プロキシメソッド内のロジックにより提供される情報を受信しそしてその情報に従うようにさせる。
【図面の簡単な説明】
【００１１】
本発明は以下の図面を参照する実施形態の詳細な説明により、さらに十分に理解されよう：
【図１】本発明の１実施形態に基づく、ソフトウェアアプリケーションの安全なオペレーションのためのシステムを概略示すブロック図である。
【図２】本発明の１実施形態に基づく、スクリプトコードを含むページの保護の方法を概略示すフロー図である。
【図３】本発明の１実施形態に基づく、ソフトウェアコード分析の方法を概略示すフロー図である。
【発明を実施するための形態】
【００１２】
実行時より前に実行可能な形式に変換される、Ｃ＃やＪａｖａ（登録商標）のようなコンパイルされた言語と異なり、スクリプト言語は実行時にコンピュータによって翻訳される。従って、スクリプト（即ち、スクリプト言語で書かれたプログラム）は、実行型コードに計測管理を追加することを一般的に含む、従来型の実行時アプリケーション自己保護（ＲＡＳＰ）アプローチを受けることができない。一般的スクリプト言語は、例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）およびＰＨＰを含み、それらはクライアント側ブラウザ（ＪａｖａＳｃｒｉｐｔ（登録商標）の場合のように）またはウェブサーバ（ＰＨＰの場合のように）のいずれかにより、Ｗｅｂ環境下の解釈プログラムを使用して実行される。このような言語で書かれたスクリプトは、ドキュメントがアクセスされた場合にクライアントまたはサーバにより読まれ、解釈され、そして実行されるべく、一般的にＷｅｂページまたは他のドキュメントの中に埋め込まれる。
【００１３】
本明細書に記載される本発明の実施形態は、ＲＡＳＰモデルをスクリプト言語に拡張するツールおよび技法を提供する。これらの実施形態は、特異的にＪａｖａＳｃｒｉｐｔ（登録商標）に関して以下で記載されるが、本発明の原理は、同様に、ウェブ環境およびスクリプトが使用される他の環境の両方において、適切な変更を行って、他のスクリプト言語にも同様に適用され得る。実行型コードを解析して、対象となるポイントを特定し、これらのポイントに計測管理コードを挿入することを一般的に必要とする、コンパイルされた言語のＲＡＳＰ技術とは異なり、スクリプト言語のＲＡＳＰ計測管理のための本発明の技術は、以下に述べるように、単純にスクリプトコードに固定モジュールを追加することにより実行されうる。
【００１４】
いくつかの実施形態では、「パッチャ」ソフトウェアツールは、Ｗｅｂページなどのドキュメントにオリジナルのスクリプトを含むパッチスクリプトを挿入することによって、実行前に所望の計測管理を実行する。実行時に、パッチスクリプトは自動的にすべての計測管理ポイントをプロキシメソッドで置き換える。このプロキシメソッドは、オリジナルのスクリプトの機能を実行させると同時に、計測管理ポイントで追加の機能を果たす計測管理ロジックを実行する、リフレクション技術を使用する。例えば、パッチスクリプトは、これらのポイントにおいて、疑わしいデータを検出し、警告を発生し、または実行を阻止するなどの予防措置を取るために、入力および／または出力、およびスクリプト内の脆弱性の可能性のある他のポイントを計測管理することができる。このような計測管理は、サーバが提供するドキュメントに埋め込まれたスクリプトのセキュリティ脆弱性の悪用から、サーバとクライアントコンピュータの両方を保護するのに役立つ。
【００１５】
追加的または代替的に、パッチャによって実行されるプロキシメソッドは、静的解析によっては容易に導出できない、スクリプトの実行時ビヘイビュアに関する分析情報を提供するように構成することができる。たとえば、パッチスクリプトは、スクリプト内のメソッド間の依存関係を識別し、それはその後スクリプトプログラムのコール（呼び出し）グラフを構築する際に使用される。この情報は、静的解析だけでは発見できないフローを含め、ＳＡＳＴツールがスクリプトコードのより正確で完全な分析を導出できるようにするために、ＳＡＳＴツールに提供することができる。
【００１６】
したがって、本発明の実施形態は、パッチスクリプトおよび計測管理ロジックを適切に選択することによって、対象スクリプトの実行時ビヘイビュアに関する様々なタイプの情報を抽出および処理するために使用することができる。ＳＡＳＴサポートの場合には、パッチスクリプトは対象スクリプトに追加され、そして開発環境または評価環境で実行される。他方で、悪意のあるビヘイビュアを検出して防止するために、パッチャはウェブサーバなどのサーバ上のドキュメントにパッチスクリプトを追加してもよい。代替的にまたは追加的に、ページがブラウザにダウンロードされるときにパッチスクリプトをページに追加するために、パッチャプラグインがクライアント側のウェブブラウザに追加されてもよい。本明細書に記載されたスクリプト計測管理の原理のそのような実装はすべて、本発明の範囲内にあるとみなされる。
【００１７】
図１は、本発明の１つの実施形態による、ソフトウェアアプリケーションの安全な動作のためのシステム２０を概略的に示すブロック図である。システム２０は、具体性かつ明瞭性のために、コード計測管理および脆弱性検出の本発明の技術が実施されうる動作環境の例として、本明細書に示され、記載される。この例では、アプリケーションはウェブアプリケーションであり、その中でウェブサーバ３２は、スクリプトを含むウェブページをクライアントコンピュータ３４に提供する。あるいは、これらの技術は、必要な変更を加えて、適合するコンピュータ資源およびインタフェースを有する実質的に任意のコンピューティング環境において、実行することができる。
【００１８】
計測管理サーバ２２は、セキュリティ脆弱性から保護されるべきウェブページのマークアップ言語コード２４、例えばＨＴＭＬコードを受信する。これらのページの少なくとも一部には、ＪａｖａＳｃｒｉｐｔ（登録商標）などの適合するスクリプト言語のスクリプトが含まれている。計測管理サーバ２２は、典型的には、プロセッサ２６およびメモリ２８ならびに他の従来技術のコンピューティング資源を備えた汎用コンピュータであり、本明細書に記載されるコード分析および計測管理機能を実行するようにソフトウェアでプログラムされている。このソフトウェアは、例えば、ネットワークを介して、電子形式で計測管理サーバ２２にダウンロードすることができる。追加的または代替的に、コードは、光学的、磁気的または電子的記憶媒体などの有形の非一過性コンピュータ可読媒体に保管される。
【００１９】
この実施形態では、計測管理サーバ２２はマークアップ言語コード２４をメモリ２８の中に受け取り、後述のように、パッチスクリプトの形のＲＡＳＰ計測管理をコードに適用する。計測管理サーバ２２は、結果として得られた計測管理コード３０をウェブサーバ３２に出力する。ウェブサーバ３２は、ウェブページにそのコードを組み込み、そのウェブページをクライアントコンピュータ３４に配信する。
【００２０】
図示されたシナリオでは、ウェブサーバ３２は、ネットワークインタフェース３８を介して、インターネットなどのネットワーク３６経由でクライアントコンピュータ３４と通信する。クライアントコンピュータ３４は、ウェブページなどのコンテンツをウェブサーバ３２に要求し、そして受け取り、クライアントコンピュータは、当技術分野で既知のブラウザプログラム４６を使用して、コンテンツを表示する。さらに別の選択肢として、計測管理サーバ２２によって実行されるパッチ機能の代わりに、またはそれに追加して、ブラウザプログラム４６へのパッチャプラグイン４７のような、クライアントコンピュータ３４上で実行されるプログラムが、クライアントコンピュータにダウンロードされたウェブページにパッチスクリプトを挿入する。
【００２１】
計測管理サーバ２２と同様に、ウェブサーバ３２は、通常、汎用コンピュータである（いくつかのシナリオでは、図１に示すように別個のマシンではなく、計測管理サーバ２２の機能の一部または全部をウェブサーバ３２に実装することができる）。ウェブサーバ３２は、プロセッサ４０およびコードメモリ領域４４を含むメモリ４２を有し、コードメモリ領域４４は、計測管理されたコード３０および、場合によってはそのコード内の計測管理によって呼び出されうる保護ルーチン、を含む。コード３０内の計測管理は、例えば、ウェブサーバ３２により提供されたウェブページ上のスクリプトを実行する、１つ以上のクライアントコンピュータ３４からウェブサーバ３２に提出された、セキュリティ脆弱性を発見して悪用しようと試みる、悪意のある入力を検出することができる。悪意のある入力は、クライアントコンピュータ３４から直接発信されてもよく、または、クライアントコンピュータ３４が、ウェブサーバ３２からダウンロードされたページ上のリンクの結果として通信する、ネットワーク３６上の他のサーバ（図示せず）から発信されてもよい。
【００２２】
コード計測管理によって提供される情報の分析に基づいて、プロセッサ４０は、可能性のある攻撃を検出すると、保護アクションを呼び出す。追加的にまたは代替的に、保護アクションは、クライアントコンピュータ３４によって呼び出されおよび／または実行されてもよい。典型的には、この保護アクションは、少なくとも、ログファイルに警告を書き込むことを含み、その警告はその後、ログファイルを読み取るオペレータ端末４８上の適合するユーザインタフェースを介してシステムオペレータにより視認されてもよい。代替的または追加的に、計測管理は、ウェブサーバおよび／またはクライアントコンピュータに対し、分析および警告生成のために、疑わしい入力および出力を別個のプログラムまたはサーバに渡すようにさせてもよい。さらに追加的または代替的に、プロセッサ４０によって行われる保護アクションは、悪意のある入力を提出したクライアントコンピュータ３４へのサービスの中断、または極端な場合には可能性としてアプリケーションを完全にシャットダウンすることを含んでもよい。
【００２３】
計測管理サーバ２２と同様に、アプリケーション（ウェブ）サーバ３２は、本明細書で記載する脆弱性を検出し保護する機能を実行するようにソフトウェアでプログラムされている。このソフトウェアは、例えば、ネットワークを介して、電子形式でウェブサーバ３２にダウンロードされてもよい。追加的または代替的に、コードは、光学的、磁気的または電子的記憶媒体などの有形の非一過性のコンピュータ可読媒体に格納されてもよい。
【００２４】
本明細書で記載されるＲＡＳＰ計測管理機能に加えて、計測管理サーバ２２は、ＳＡＳＴ（静的アプリケーションセキュリティ試験）および／またはＤＡＳＴ（動的アプリケーションセキュリティ試験）などの、ソースコードおよび／または実行型コードの他の種類の分析を実行するようにプログラムされてもよい。例えば、１つの実施形態では、プロセッサ２６は、スクリプトプログラムの実行時ビヘイビュアに関する情報を抽出するために、ＲＡＳＰパッチスクリプトを適用する。プロセッサは、その後、以下にさらに説明するように、スクリプトコードのより正確で完全な静的解析の生成にこの情報を使用する。
【００２５】
図２は、本発明の１つの実施形態による、スクリプトコードを含むページの保護方法を概略的に示すフロー図である。予備ステップとして、計測管理サーバ２２は、計測管理ステップ５０において、マークアップ言語コード２４のソースページにパッチスクリプトを追加する。代替的にまたは追加的に、このようなパッチスクリプトは、上述したように、ウェブサーバ３２またはクライアントコンピュータ３４によって追加されてもよい。
【００２６】
スクリプトでＲＡＳＰを使用する例として、クロスサイトスクリプティング（ＸＳＳ）攻撃に対して脆弱なソースページ上のスクリプトを検討する。このような攻撃は、Ｗｅｂドキュメントに悪意のあるストリングを含むユニフォーム  リソース  ロケータ（ＵＲＬ）があり、そしてドキュメントがＵＲＬストリングを入力として読み取って、そして出力としてドキュメントに挿入するときに発生する可能性がある。たとえば、次のソースページスクリプトは、ソースページにリンクされた正当なターゲットドキュメントのＵＲＬをエコーするために使用することができる：
＜ｈｔｍｌ＞
＜ｓｃｒｉｐｔ＞
ｖａｒ  ｈｒｅｆ＝ｄｏｃｕｍｅｎｔ．ｌｏｃａｔｉｏｎ．ｈｒｅｆ；
ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ（‘‘私たちのＵＲＬは：’’＋ｈｒｅｆ）；
＜／ｓｃｒｉｐｔ＞
＜／ｈｔｍｌ＞
ただし、ユーザが次のＵＲＬ：
ｈｔｔｐ：／／ｍｙｓｉｔｅ．ｃｏｍ／ｄｏｃｕｍｅｎｔ．ｈｔｍｌ？＜ｓｃｒｉｐｔ＞ＸＳＳ＜／ｓｃｒｉｐｔ＞
にあるターゲットドキュメントを開くと、上記のソースページスクリプトは、ユーザのブラウザに対して、ターゲットドキュメントのＵＲＬからのＸＳＳスクリプトを読み込んで、そして実行するようにさせる。
【００２７】
ステップ５０において、計測管理されるべきドキュメント内の現存するスクリプトの事前知識を必ずしも分析、修正、または使用することなく、固定パッチスクリプトがソースページドキュメントに追加される。たとえば、他のドキュメントから読み込まれる、オリジナルの埋め込みスクリプトへの入力を検出し、そして評価するために、パッチャは、保護されるべき各ソースページまたは他のドキュメントの始め（たとえば、ページヘッダーの直後）に、次のパッチスクリプトを挿入することができる：
ｖａｒ  ｏｌｄＷｒｉｔｅ＝ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ；
ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ＝ｆｕｎｃｔｉｏｎ（ｐ）／／このプロキシメソッドはオリジナルメソッドを隠す
｛
／／ここでＲＡＳＰロジックを実行する
ｏｌｄＷｒｉｔｅ．ｃａｌｌ（ｄｏｃｕｍｅｎｔ，ｐ）；／／この行はオリジナルのｗｒｉｔｅメソッドを呼び出す
｝
上記のスクリプトで呼び出された「ＲＡＳＰロジック」は、ドキュメントのコンテンツをたとえば正規表現に合致させるなどして、またはドキュメントのコンテンツを解析することにより、悪質なコンテンツについてターゲットドキュメントをチェックする。
【００２８】
ウェブサーバ３２は、クライアントコンピュータ３４にパッチされたページをダウンロードし、クライアントコンピュータはそのページを表示し、そしてそうすることにより、ページ実行ステップ５２において、そのページ内に埋め込まれた任意のスクリプトを実行する。上記のパッチコードは、ソースページ内のメソッド‘‘ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ’’の任意の現存する呼び出しを上記のプロキシメソッドで置き換え（即ち、オーバーライドし）、そのプロキシメソッドは、ＲＡＳＰロジックを実行して、そしてオリジナルの‘‘ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ’’メソッドを呼び出す。上記のパッチスクリプトを任意のドキュメントに追加することにより、そのようなドキュメント内のすべての‘‘ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ’’呼び出しが自動的に計測管理される（すなわち、プロキシメソッドによって置き換えられる）。このようにしてパッチャは、ドキュメントを解析することなく、ドキュメントが何を含み、または何をすることを想定されているかについての事前知識がなくても、対象ドキュメントを計測管理することができる。
【００２９】
クライアントコンピュータ３４および／またはウェブサーバ３２上で動作するパッチコードは、入力検出ステップ５４において、潜在的な脅威を、例えば、スクリプトによって呼び出された外部入力を検出しそして評価することによって、検出する。入力評価ステップ５６において、パッチコードによって呼び出されるＲＡＳＰロジックは、入力が潜在的に悪意のあるものがどうかを決定する。ＲＡＳＰロジックは、例えば、上記の例のクロスサイトスクリプトなどの潜在的に悪意のある入力を検出するため、疑わしい文字および文字ストリングを含むデータを正規表現とマッチングすることによって、所与の入力から書き込まれるべきデータを評価することができる。
【００３０】
パッチスクリプト内のＲＡＳＰロジックは、与えられた入力が疑わしいとステップ５６において判断すると、クライアントコンピュータ３４および／またはウェブサーバ３２に保護アクションを取るようにさせる。例えば、ブラウザ４６は、問題のスクリプト（または少なくとも疑わしい入力を生じさせたスクリプト命令のような、スクリプトの少なくとも一部）を無効にするか、現在のページまたは現在のＷｅｂサイト上のすべてのスクリプトの実行を停止するように指示されてもよい。重大な脅威の場合、ブラウザは完全にシャットダウンしてもよい。追加的または代替的に、ＲＡＳＰロジックは、ログまたは他のレポートを生成してそれがユーザ端末４８を介して後で評価され、および／またはウェブサーバ３２のオペレータに警告する。一方、ステップ５６で評価された入力が無害と見えるとき、ブラウザ４６は、スクリプト実行ステップ６０において、スクリプトを実行し、ウェブページコンテンツを通常の方法で表示することに進む。
【００３１】
図３は、本発明の別の実施形態による、ソフトウェアコード解析のための方法を概略的に示すフローチャートである。前述したように、実行時に検出することができるが、しかし既存のＳＡＳＴツールを使用した純粋に静的なアプローチでは分析が難しい、多くのアプリケーションビヘイビュアが存在する。したがって本実施形態では、関数呼び出しフロー情報などの追加情報を抽出するために、スクリプトコードにＲＡＳＰ計測管理を追加し、そしてこのように計測管理されたコードを実行することによって、ＳＡＳＴ情報が補足される。
【００３２】
例として、次のスクリプトコードを考察する：
１．ｖａｒ  ｆｕｎｃ＝ｆｕｎｃｔｉｏｎ（ｐ）
２．｛／＊何かする＊／｝
３．
４．ｖａｒ  ｓｔｒ＝‘ｖａｒ’＋Ｓｔｒｉｎｇ．ｆｒｏｍＣｈａｒＣｏｄｅ（６５）＋‘＝’；
５．ｓｔｒ＋＝‘ｆｕｎｃ；’；
６．ｅｖａｌ（ｓｔｒ）；  
７．Ａ（）；
このコードは最初にメソッド‘‘ｆｕｎｃ’’を定義し、そしてストリングを構築し、それは最終的に‘‘ｖａｒ  Ａ＝ｆｕｎｃ；’’を含む。コードはこのストリングを引数として有する‘‘ｅｖａｌ’’メソッドを実行する。最後に、最後の行のメソッド‘‘Ａ’’を実行することにより、スクリプトは実際には‘‘ｆｕｎｃ’’を実行する。既存のＳＡＳＴツールは、‘‘Ａ’’の呼び出しが実際には‘‘ｆｕｎｃ’’の呼び出しであることをそれ自体では理解することができない。
【００３３】
計測管理サーバ２２は、計測管理ステップ７０において、上記のようなスクリプトコードの完全な分析を可能にするために、マークアップ言語コード２４のソースページにパッチスクリプトを追加する。例えば、以下のパッチコードが上記スクリプトの計測管理に使用できる：
ｆｏｒ（ここに名前）
｛
ｆｎ＝ｔｈｉｓ［名前］；
ｉｆ（ｔｙｐｅｏｆ  ｆｎ＝＝＝‘ｆｕｎｃｔｉｏｎ’）
｛
ｖａｒ  ｓｔｒ＝ｍｅｔｈｏｄ＋‘‘＝ｔｒａｃｅ（‘‘＋ｍｅｔｈｏｄ＋  ’’，‘‘‘＋ｍｅｔｈｏｄ＋’’’）；’’；
ｅｖａｌ（ｓｔｒ）；／／Ａ＝ｔｒａｃｅ（Ａ）；
｝
｝
【００３４】
このコードは、特定のスクリプトのすべてのメソッドを見つけ、それらをプロキシメソッドの呼び出しと置き換える。それはこの場合、次のようなトレースメソッドを含む：
ｆｕｎｃｔｉｏｎ  ｔｒａｃｅ（ｆｕｎｃ）
｛
／＊ｆｕｎｃへの呼び出しを記入＊／
ｖａｒ  ｒｅｓｕｌｔ＝ｆｕｎｃ．ａｐｐｌｙ（ｔｈｉｓ、ａｒｇｕｍｅｎｔｓ）；／／オリジナルメソッドへ呼び出し
｝
オリジナルスクリプトにメソッド呼び出しがあるたびにこのコードを実行すると、呼び出し元と呼び出し先のレコードが作成され、そしてこのデータは計測管理サーバ２２または別のコンピュータで実行されているＳＡＳＴツールに渡される。
【００３５】
オリジナルスクリプトコードに上記のようなパッチスクリプトを追加した後、計測管理サーバ２２は、スクリプト実行ステップ７２で、計測管理されたスクリプトコードを含むソースページを実行する。計測管理されたコードは、任意の適切な実行環境、例えば計測管理サーバ２２または適切なクライアントコンピュータ上で実行されるブラウザにおいて、またはＣｏｄｅＰｌｅｘ．ｃｏｍ  Ｗｅｂサイト（マイクロソフトが主催）においてオンラインで入手できるＪａｖａＳｃｒｉｐｔ（登録商標）．ＮＥＴライブラリを使用して、実行されてもよい。
【００３６】
ＲＡＳＰ支援ＳＡＳＴのこの例では、パッチスクリプトの計測管理ロジックは、トレース生成ステップ７４において、コールフロー情報を抽出し、スクリプト実行のトレースを生成する。トレースは、実行中の各メソッド呼び出しについて、どのメソッドが呼び出され、そしてそれがどこから呼び出されたのかを記録する。オリジナルスクリプトに呼び出しがあるたびにＲＡＳＰロジックを実行すると、呼び出し元と呼び出し先のレコードが作成される。これらのデータはＳＡＳＴツールに渡され、ＳＡＳＴツールはその後メソッド呼び出しを静的解析結果に組み込むことができる。
【００３７】
具体的には、上記のサンプルコードを参照すると、計測管理ロジックは、７行目の‘‘Ａ（）’’が実際には‘‘ｆｕｎｃ’’メソッドを呼び出すことを示し、そしてしたがってスクリプトを実行した後に次のＸＭＬリストを含むトレースを生成する可能性がある：
＜ｃａｌｌ＞
＜ｃａｌｌｅｒ  ｌｉｎｅ‘７’＞Ａ＜／ｃａｌｌｅｒ＞
＜ｃａｌｌｅｄ  ｌｉｎｅ‘１’＞ｆｏｏ＜／ｃａｌｌｅｄ＞
＜／ｃａｌｌ＞
このＸＭＬリスティングはＳＡＳＴツールに渡され、ＳＡＳＴツールはその後メソッド呼び出しを静的解析結果に組み込むことができる。
【００３８】
ＳＡＳＴツールは、ＳＡＳＴステップ７６において、評価中のスクリプトプログラムの完全な制御フロー図を構築する際に、そのトレースを使用することができる。例えば、参照により本明細書に組み込まれるＰＣＴ国際特許出願公開ＷＯ２００８／０４７３５１（特許文献２）は、ソースコードをスキャンし、（コードフローとデータフローグラフを使用して）そのコードのデータと制御フローを抽出する、静的コード分析（ＳＣＡ）エンジンについて記載している。この種のＳＣＡエンジンは、Ｃｈｅｃｋｍａｒｘ  Ｌｔｄ．社（Ｔｅｌ  Ａｖｉｖ、Ｉｓｒａｅｌ）から市販されている。ステップ７４で提供されたトレースは、そうでなければ見逃されるかもしれない呼び出しフローの詳細をＳＣＡエンジンに提供する。
【００３９】
上述の実施形態は例として引用されたものであり、本発明は上記に特に示され説明されたものに限定されないことが理解されよう。むしろ、本発明の範囲は、上述した様々な特徴の組み合わせおよびサブ組み合わせ、ならびに上記の説明を読んだ当業者に想起される、先行技術に開示されていないそれらの変形および修正の両方を含む。
【図１】
2018502351.tif 000003
【図２】
2018502351.tif 000004
【図３】
2018502351.tif 000005
【国際調査報告】
2018502351.tif 000006
2018502351.tif 000007
2018502351.tif 000008
2018502351.tif 000009
2018502351.tif 000010
2018502351.tif 000011