(57)【要約】【課題】アプリケーションのフレームワーク及びビジネスロジックを通り抜けるデータストリームの処理を追跡することによって攻撃を検知する方法を提供する。【解決手段】ウェブフェーシングアプリケーションのフレームワークで受信されるデータストリームを捕捉する過程と、データストリームを処理するフレームワークによって起動される第１の関数セットを捕捉する過程と、捕捉された第１の関数セットのサブセットを、捕捉されたデータストリームのデータパケットと照合する過程と、捕捉された第１の関数セットの適合したサブセットとデータパケットのデータとを、データセットに抽出する過程と、セキュリティ攻撃を検知するために、抽出されたデータセットに基づいてウェブフェーシングアプリケーションの活動を探査する過程と、を備える。【選択図】図４
2019506674.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに実装される方法であって、
ウェブフェーシングアプリケーションのフレームワークで受信されたデータストリームを捕捉する過程と、
前記データストリームを処理する前記フレームワークによって起動される関数の第１の関数セットを捕捉する過程と、
捕捉された前記第１の関数セットのサブセットを、捕捉された前記データストリームのデータパケットと照合する過程と、
捕捉された前記第１の関数セットのうちの適合した前記サブセットと前記データパケットのデータとを、データセットに抽出する過程と、
セキュリティ攻撃を検知するために、抽出された前記データセットに基づいて前記ウェブフェーシングアプリケーションの活動を探査する過程と、
を備える、方法。
【請求項２】
請求項１に記載の方法において、さらに、
前記データストリームを処理する前記フレームワークによって起動される関数の第２の関数セットを捕捉する過程と、
データベースサーバへのデータベースクエリであって、前記フレームワークにより生成されるデータベースクエリを捕捉する過程と、
捕捉された少なくとも１つの前記データベースクエリを、捕捉された前記第２の関数セットのサブセットと照合する過程と、
捕捉されたデータベースクエリであって、適合した少なくとも１つの前記データベースクエリと、捕捉された前記第２の関数セットのうちの適合した前記サブセットとを、抽出された前記データセットに抽出する過程と、
を備える、方法。
【請求項３】
請求項２に記載の方法において、さらに、
適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および前記少なくとも１つのデータベースクエリの間の関係を相関させる過程であって、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセットおよび前記少なくとも１つのデータベースクエリを処理するのに用いられるスレッドを追跡することに基づく、相関させる過程と、
前記データセット内における、適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および前記少なくとも１つのデータベースクエリを、相関された前記関係に基づいてマッピングする過程と、
前記ウェブフェーシングアプリケーションの活動を、抽出された前記データセット内における、適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および前記少なくとも１つのデータベースクエリの前記マッピングに基づいて探査する過程と、
を備える、方法。
【請求項４】
請求項３に記載の方法において、捕捉された前記少なくとも１つのデータベースクエリを照合する前記過程が、前記第２の関数セットの捕捉された前記サブセットにおける少なくとも１つの捕捉された関数のパラメータのデータを、捕捉された前記少なくとも１つのデータベースクエリの表現式のデータとパターン照合することを含む、方法。
【請求項５】
請求項３に記載の方法において、前記活動を探査する前記過程が、さらに、
前記ウェブフェーシングアプリケーションのフレームワークで受信されたデータパケットを実行時に捕捉すること、
抽出された前記データセット内における、捕捉された前記第１の関数セットのうちの適合した前記サブセットおよび捕捉された前記第２の関数セットのうちの適合した前記サブセットそれぞれの起動される関数を前記データセット内に捕捉し、捕捉された前記データベースクエリそれぞれの起動されるデータベースクエリを前記データセット内に実行時に捕捉すること、
前記第１の関数セットの起動される関数ごとに、前記第２の関数セットのマッピングされた前記サブセットの起動と、マッピングされた前記少なくとも１つのデータベースクエリの起動とがないかを調べること、
前記第２の関数セットのマッピングされた前記サブセットとマッピングされた少なくとも１つのデータクエリとのうちの少なくとも一方が起動されない場合にセキュリティ攻撃と断定すること、
を含む、方法。
【請求項６】
請求項２に記載の方法において、(i)前記第１の関数セットの前記サブセットが、前記フレームワークのビジネスロジック層へのインターフェースで前記フレームワークによって起動され、(ii)前記第２の関数セットの前記サブセットが、前記フレームワークの前記ビジネスロジック層からのインターフェースで前記フレームワークによって起動される、方法。
【請求項７】
請求項１に記載の方法において、捕捉された前記第１の関数セットの前記サブセットを照合する前記過程が、捕捉された前記第１の関数セットの前記サブセットにおける少なくとも１つの捕捉された関数のパラメータにおけるデータを、前記データパケットのフィールドのデータとパターン照合することを含む、方法。
【請求項８】
請求項１に記載の方法において、データストリームを捕捉する前記過程が、さらに、前記データストリームを前記フレームワークのプロトコル構成に基づいて復号することを含む、方法。
【請求項９】
請求項１に記載の方法において、さらに、
前記データストリームの処理から、ユーザ、ユーザデータ、セッション情報、ＩＰアドレス、ポート番号、プロトコルコンテキスト、スレッドＩＤ、スレッドコンテキスト、メモリへの読み書きの命令のアドレス、オペレートされるメモリの範囲、およびトラフィック方向のうちの少なくとも１つを、前記ウェブフェーシングアプリケーションの活動を探査するために、抽出された前記データセットに抽出する過程、
を備える、方法。
【請求項１０】
請求項１に記載の方法において、前記フレームワークが、バイナリ言語、．ＮＥＴ言語、ＪＡＶＡ言語、ＰＨＰ言語、Ｒｕｂｙ言語およびＰｙｔｈｏｎ言語のうちの少なくとも１つに従って構成されている、方法。
【請求項１１】
請求項１に記載の方法において、さらに、
前記フレームワークにおける前記データストリームの処理の間に各メモリアクセスのコンテンツを捕捉する過程と、
捕捉された前記第１の関数セットおよび捕捉された第２の関数セットの命令であって、ユーザデータを処理するのに用いられる命令を特定するように、抽出された前記データセットを捕捉された各メモリアクセスと比較する過程と、
特定された前記命令のチェーンを作成する過程であって、作成された前記チェーンは、前記ウェブフェーシングアプリケーションにおける脆弱性を表すように前記データセットに抽出される、過程と、
前記作成されたチェーンを監視することにより、実行時に前記ウェブフェーシングアプリケーションの前記活動を探査する過程であって、捕捉された各関数の出力にユーザコンテンツを付加すること、および捕捉された各関数の入力からコンテキストを除去することを含む、探索する過程と、
を備える、方法。
【請求項１２】
ウェブフェーシングアプリケーションのフレームワークで受信されたデータストリームを捕捉するように構成された第１のトラフィックアナライザと、
前記データストリームを処理する前記フレームワークによって起動される第１の関数セットを捕捉するように構成された第１のプロファイラと、
捕捉された前記第１の関数セットのサブセットを、捕捉された前記データストリームのデータパケットと照合し、かつ、捕捉された前記第１の関数セットのうちの適合したサブセットをデータセットに抽出するように構成されたパターン照合エンジンと、
セキュリティ攻撃を検知するために、抽出された前記データセットに基づいて前記ウェブフェーシングアプリケーションの活動を監視するように構成されたプローブと、
を備える、コンピュータシステム。
【請求項１３】
請求項１２に記載のシステムにおいて、さらに、
前記データストリームを処理する前記フレームワークによって起動される第２の関数セットを捕捉するように構成された第２のプロファイラと、
データベースサーバへのデータベースクエリであって、前記フレームワークにより生成されるデータベースクエリを捕捉するように構成された第２のトラフィックアナライザと、
を備え、
前記パターン照合エンジンが、さらに、
捕捉された少なくとも１つの前記データベースクエリを、捕捉された前記第２の関数セットのサブセットと照合し、かつ、
捕捉されたデータベースクエイルであって、適合した少なくとも１つの前記データベースクエリと、捕捉された前記第２の関数セットの前記サブセットとを、抽出された前記データセットに抽出するように構成されている、システム。
【請求項１４】
請求項１３に記載のシステムにおいて、
前記パターンマッチングエンジンが、さらに、
適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および適合した前記少なくとも１つのデータベースクエリの間の関係を相関し、かつ、
抽出された前記データセット内における、適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および適合した前記少なくとも１つのデータベースクエリを、相関された前記関係に基づいてマッピングするように構成されており、
前記相関は、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および適合した前記少なくとも１つのデータベースクエリを処理するのに用いられるスレッドを追跡することに基づき、
前記プローブが、さらに、前記ウェブフェーシングアプリケーションの活動を、抽出された前記データセット内における、適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合した前記サブセット、捕捉された前記第２の関数セットのうちの適合した前記サブセット、および適合した前記少なくとも１つのデータベースクエリのマッピングに基づいて監視するように構成されている、システム。
【請求項１５】
請求項１４に記載のシステムにおいて、さらに、
ウェブフェーシングアプリケーションのフレームワークで受信されたデータパケットを実行時に捕捉するように構成された第３のトラフィックアナライザと、
捕捉された前記第１の関数セットのうちの適合した前記サブセットの起動される各関数を実行時に捕捉するように構成されたる第３のプロファイラと、
抽出された前記データセット内における、捕捉された前記第２の関数セットのうちの適合した前記サブセットの起動される各関数を前記データセット内に実行時に捕捉するように構成された第４のプロファイラと、
捕捉された前記データベースクエリのうち起動される各データベースクエリを前記データセット内に実行時に捕捉するように構成された第４のトラフィックアナライザと、
を備え、
前記プローブが、さらに、
前記第１の関数セットの起動される関数ごとに、前記第２のセットの関数のマッピングされた前記サブセットの起動と、マッピングされた前記少なくとも１つのデータベースクエリの起動とがないかを調べ、かつ、
前記第２の関数セットの前記マッピングされたサブセットとマッピングされた少なくとも１つのデータクエリとのうちの少なくとも一方が起動されなかった場合にセキュリティ攻撃と断定するように構成されている、システム。
【請求項１６】
請求項１４に記載のシステムにおいて、捕捉された前記少なくとも１つのデータベースクエリを照合することが、捕捉された前記第２の関数セットのパラメータにおけるデータを、捕捉された前記少なくとも１つのデータベースクエリの表現式のデータとパターン照合することを含む、システム。
【請求項１７】
請求項１２に記載のシステムにおいて、前記第１の関数セットを照合することが、前記第１の関数セットのパラメータにおけるデータを、前記データパケットのフィールドのデータとパターン照合することを含む、システム。
【請求項１８】
請求項１２に記載のシステムにおいて、(i)前記第１の関数セットの前記サブセットが、前記フレームワークのビジネスロジック層へのインターフェースで前記フレームワークによって起動され、(ii)前記第２の関数セットの前記サブセットが、前記フレームワークの前記ビジネスロジック層からのインターフェースで前記フレームワークによって起動される、システム。
【請求項１９】
請求項１２に記載のシステムにおいて、前記第１のトラフィックアナライザが、さらに、前記データストリームを前記フレームワークのプロトコル構成に基づいて復号するように構成されている、システム。
【請求項２０】
請求項１２に記載のシステムにおいて、前記パターンマッチングエンジンが、さらに、前記データストリームの処理から、ユーザ、ユーザデータ、セッション情報、ＩＰアドレス、ポート番号、プロトコルコンテキスト、スレッドＩＤ、スレッドコンテキスト、メモリへの読み書きの命令のアドレス、オペレートされるメモリの範囲、およびトラフィック方向のうちの少なくとも１つを、前記ウェブフェーシングアプリケーションの活動を探査するために、抽出された前記データセットに抽出するように構成されている、システム。
【請求項２１】
請求項１２に記載のシステムにおいて、前記フレームワークが、バイナリ言語、．ＮＥＴ言語、ＪＡＶＡ言語、ＰＨＰ言語、Ｒｕｂｙ言語およびＰｙｔｈｏｎ言語のうちの少なくとも１つに従って構成されている、システム。
【請求項２２】
請求項１２に記載のシステムにおいて、前記第１のプロファイラおよび第２のプロファイラが、さらに、前記フレームワークにおける前記データストリームの処理の間に各メモリアクセスのコンテンツを捕捉するように構成され、
前記パターンマッチングエンジンが、さらに、
捕捉された前記関数の命令であって、ユーザデータを処理するのに用いられる命令を特定するように、抽出された前記データセットを捕捉された各メモリアクセスと比較し、かつ、
特定された前記命令のチェーンを作成するように構成されており、
作成された前記チェーンは、前記ウェブフェーシングアプリケーションにおける脆弱性を表すように前記データセットに抽出され、
前記プローブが、さらに、前記作成されたチェーンを実行時に監視することにより、前記ウェブフェーシングアプリケーションの前記活動を監視するように構成され、当該監視が、捕捉された各関数の出力にユーザコンテンツを付加すること、捕捉された各関数の入力からコンテキストを除去すること、およびこれら付加および除去を解析エンジンに報告することを含む、システム。
【発明の詳細な説明】
【関連出願】
【０００１】
本願は、2016年1月22日付出願の米国仮特許出願第62/286,282号の利益を主張する。この仮特許出願の全教示内容は、参照をもって全体を本明細書に取り入れたものとする。
【背景技術】
【０００２】
日を追うごとに、サイバー攻撃はますます洗練化されている。攻撃は、特定のアプリケーションにおける特定の脆弱性を悪用することを対象とする。このような攻撃の要因と影響は、ネットワーク層では識別不可能である。というのも、これらの攻撃は単純明快な攻撃の上を行き、明らかに悪意があると解釈されることが可能なネットワーク活動を引き起こさないからである。企業データベースは、クレジットカード番号、顧客の社会保障番号、健康記録、他の個人特定可能情報、詳細な顧客リスト、設計プラン、ソースコード、他の知的財産などの極めて高価値な情報が当該データベースに存在していることから、攻撃者が好んで標的とする。これらの標的型攻撃に対抗するために数多くのベンダが、ユーザのアクセス及び挙動をアプリケーションのマーカに紐付ける次世代ファイアウォールやウェブフェーシングアプリケーション（ウェブ上のアプリケーション）ファイアウォール、当該ベンダが不審と判断するコードをサンドボックス内で実行させてこのようなコードが観察可能な悪意のある活動を行うのを待つことを試みるサンドボックス技術などのサイバーセキュリティ製品を配備している。このような検知メカニズムに対してマルウェアは、当該マルウェアがその悪意のある意図を実際に解き放つ前に検知エンジンが諦めるのを待つなど、自身の挙動をしばしば順応させる。挙動のこのような変更は、現代のサイバーセキュリティソリューションにおける、攻撃の挙動を認識する機能、つまり、マルウェアの存在を適時に検知する機能を妨げる。
【０００３】
コンピュータアプリケーションの今日の大多数のマルウェア攻撃は、極めて巧妙に作られた入力データを供給することによって、悪意のあるコンテンツを注入して後に実行するか、又はデータベースからデータを抽出するという、悪意のある行為者の能力に由来している。これらの悪意のある活動は、企業の情報技術（ＩＴ）組織に悟られることなく遂行される可能性がある。このような悪意のあるコンテンツの注入は、不十分な入力検証を行う安全性の低いコードを特定して悪用することを意味する。今日のサイバーセキュリティ技術は、ネットワークトラフィック内の悪意のあるコンテンツもしくは当該コンテンツのソースを観察するか、アプリケーションのネットワーク挙動を追跡して当該ネットワーク挙動が過去に報告されたことのある異常活動を見せることを見込むか、または不審なコードの挙動を当該不審なコードがサーバに送信されて実行される前にサンドボックス内でスクリーニングすることを試みる。これらの技術は、上記のような悪意のあるコンテンツの実行によって表出する根本的な原因である引き金を高い信頼性で検知するのに十分な細かい粒度で、本物のウェブフェーシングアプリケーションをリアルタイムで調べる能力を有していない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このような根本的な原因である引き金を検知するのに障害となるのは、アプリケーションのフレームワーク及びビジネスロジックを通り抜けるデータストリームの処理を追跡する能力がないことである。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、フレームワークで受信されたデータストリームの大量のデータパケットを捕捉し、さらに、受信した当該データストリームの処理時に起動（トリガ）される、大量の関数、当該関数のパラメータ、およびデータベースクエリを捕捉する。これは、前述したフレームワークとビジネスロジックの両方における情報を捕捉することを含む。本発明の他の実施形態は、さらに、スレッドＩＤ、メモリへの読み書きの命令のアドレス、およびオペレート（操作）されるメモリのアドレス及び範囲を捕捉する。これらの実施形態は、さらに、パターンマッチングおよび機械学習を用いて、この大量の捕捉されたデータから、アプリケーション固有のパケット、関数、データベースクエリ、スレッドＩＤおよびメモリ操作を分離して、分離されたこれらパケット、関数、クエリ、メモリアクセス間の関係を相関させる（相関付ける）。分離されて相関されたこれらパケット、関数、クエリ、スレッドＩＤおよびメモリアクセスは、ユーザ、セッション、ＩＰアドレス、ポート、プロトコル、スレッド、コードアドレス、メモリ操作（読込み／書込み）、対象のメモリアドレス及び範囲などの所与のコンテキストデータと共に、データセットに抽出される。当該データセットに従ってアナライザが、特定のアプリケーションに関係する活動を追跡および探査するために、相関されたパケット、関数及びクエリのセットをリッスンするようにチューニングされてもよい。このようなチューニングによって、当該アナライザは、上記のような悪意のあるコンテンツが実行される前に、根本的な原因である引き金を高い信頼性で検知することが可能となる。例えば、このようなチューニングによって、アナライザは、ユーザにより供給されたデータを取り扱う関数及び機械語を、当該関数及び機械語が悪意のあるコンテンツをどのように取り扱うかを突き止めるように隔離して調べることが可能となる。
【０００６】
本発明の実施形態は、特定のアプリケーションに関係する活動を探査するようにアナライザをチューニングするためのデータセットを生成するシステム及び方法に関する。前記システム及び方法は、アプリケーションのフレームワークで受信したデータストリームを捕捉する。例示的な実施形態では、前記フレームワークが、バイナリ言語、．ＮＥＴ言語、ＪＡＶＡ言語、ＰＨＰ言語、Ｒｕｂｙ言語およびＰｙｔｈｏｎ言語のうちの少なくとも１つに従って記述されているものであってもよい。一部の実施形態では、第１のトラフィックアナライザ又はパケットキャプチャツール（パケット捕捉ツール）が、前記データストリームを捕捉するように構成されてもよい。前記システム及び方法は、さらに、前記データストリームを処理する前記フレームワークによって起動される関数の第１の関数セットを捕捉する。一部の実施形態では、第１のプロファイラが、前記アプリケーションにより実行される前記関数、スレッドＩＤおよびメモリアクセスを捕捉するように構成されてもよい。
【０００７】
前記システム及び方法は、捕捉された前記第１の関数セットのサブセットを、捕捉された前記データストリームのデータパケットと照合する。一部の実施形態では、パターンマッチングエンジン（パターン照合エンジン）が、この照合（マッチ）を実行するように構成されてもよい。一部の実施形態では、捕捉された前記第１の関数セットの前記サブセットを照合することが、これらの関数および／またはスレッドＩＤおよび／またはメモリアクセスのパラメータのデータを、前記データパケットのフィールドにおけるデータにパターンマッチ（パターン照合）することを含む。前記システム及び方法は、捕捉された前記第１の関数セットのうちの適合（match）した前記サブセットおよび／またはスレッドＩＤおよび／またはメモリアクセスを、データセットに抽出する。前記システム及び方法は、サイバー攻撃を検知するために、抽出された前記データセットに基づいて前記アプリケーションの活動を探査する。
【０００８】
一部の実施形態では、前記システム及び方法が、前記データストリームを処理する前記フレームワークによって起動される関数の第２の関数セットを捕捉する。一部の実施形態では、第２のプロファイラが、前記アプリケーションにより実行される関数の前記第２の関数セット、スレッドＩＤおよびメモリアクセスを捕捉するように構成されてもよい。これらの実施形態では、前記システム及び方法が、さらに、データベースサーバへのデータベースクエリであって、前記フレームワークにより生成されるデータベースクエリを捕捉する。一部の実施形態では、第２のトラフィックアナライザ又はパケットキャプチャツールが、前記データベースクエリを捕捉するように構成されてもよい。これらの実施形態では、前記システム及び方法が、捕捉された少なくとも１つの前記データベースクエリを、捕捉された前記第２の関数セットのサブセットと照合する。捕捉された前記少なくとも１つのデータベースクエリを照合することは、捕捉された前記第２の関数セットのパラメータのデータを、捕捉された前記少なくとも１つのデータベースクエリの表現式のデータとパターン照合することを含む。これらの実施形態では、前記システム及び方法が、さらに、捕捉されたデータベースクエリであって、適合した少なくとも１つの前記データベースクエリと、捕捉された前記第２の関数セットのうちの適合した前記サブセットとを、抽出された前記データセットに抽出する。
【０００９】
これらの実施形態のうちの一部の実施形態では、前記システム及び方法が、さらに、適合した前記データパケット、捕捉された前記第１の関数セットのうちの適合したサブセット、捕捉された前記第２の関数セットのうちの適合したサブセット、メモリアクセスの適合したコンテンツ、および適合した少なくとも１つのデータベースクエリの間の関係を相関する（相関付ける）。前記システム及び方法は、前記データセット内における、適合した前記データパケット、捕捉された関数のうちの適合したサブセット、メモリアクセスの適合したコンテンツ、適合した少なくとも１つのデータベースクエリを、相関された前記関係に基づいてマッピングする。前記システム及び方法は、さらに、前記アプリケーションの活動を、抽出された前記データセット内における、適合した前記データパケット、捕捉された関数のうちの適合したサブセット、メモリアクセスの適合したコンテンツ、および適合した少なくとも１つのデータベースクエリの前記マッピングに基づいて探査する。
【００１０】
一部の実施形態では、前記システム及び方法が、前記データストリームの処理時に各メモリアクセスのコンテンツを捕捉する。前記システム及び方法は、捕捉された前記第１の関数セットおよび第２の関数セットのうち、ユーザデータを処理するのに用いられる関数の命令を特定するように、抽出された前記データセットを捕捉された各メモリアクセスと比較する。前記システム及び方法は、特定された前記命令のチェーンを作成し、これにより、前記データセットに抽出される当該チェーンが、前記ウェブフェーシングアプリケーションで監視されるべき脆弱性を表す。前記システム及び方法は、命令の作成された前記チェーンを監視することにより、実行時（ランタイム）に前記ウェブフェーシングアプリケーションの前記活動を探査する。当該探査は、捕捉された各関数の出力にユーザコンテンツを付加すること、および捕捉された各関数の入力からコンテキストを除去することを含む。例示的な実施形態では、捕捉された前記第１の関数セットが、前記フレームワークのビジネスロジック層へのインターフェースで前記フレームワークによって起動され、捕捉された前記第２の関数セットが、前記フレームワークの前記ビジネスロジック層からのインターフェースで前記フレームワークによって起動される。
【００１１】
例示的な一部の実施形態では、前記データストリームを捕捉することが、さらに、前記システム及び方法に、前記データストリームを前記フレームワークのプロトコル構成に基づいて復号させることを含む。例示的な一部の実施形態では、前記システム及び方法が、さらに、前記データストリームの処理から、ユーザ、ユーザデータ、セッション情報、ＩＰアドレス、ポート番号、プロトコルコンテキスト、スレッドコンテキスト、およびトラフィック方向のうちの少なくとも１つを、前記ウェブフェーシングアプリケーションの活動を探査するために、抽出される前記データセットに抽出する。
【００１２】
例示的な一部の実施形態では、前記システム及び方法が、前記ウェブフェーシングアプリケーションの前記フレームワークで受信されたデータパケットを実行時に捕捉することにより、前記活動を探査する。例示的な実施形態では、第３のトラフィックアナライザが、前記データパケットを捕捉するように構成されている。前記システム及び方法は、さらに、抽出された前記データセット内において、捕捉された前記第１の関数セットのうちの適合した前記サブセットおよび捕捉された前記第２の関数セットのうちの適合した前記サブセットのうち、起動される関数をデータセット内に捕捉し、捕捉された前記データベースクエリのうち、起動される各データベースクエリを前記データセット内に捕捉する。例示的な実施形態では、第３のプロファイラが前記第１の関数セットを捕捉するように構成されており、第４のプロファイラが前記第２の関数セットを捕捉するように構成されており、第４のトラフィックアナライザが前記データベースクエリを捕捉するように構成されている。前記システム及び方法は、前記第１の関数セットのうちの起動される関数ごとに、前記第２の関数セットのうちのマッピングされた前記サブセットの起動と、マッピングされた前記少なくとも１つのデータベースクエリの起動とを確認する。前記システム及び方法は、捕捉された前記パケットのデータが、起動される各関数のパラメータのデータ及び起動される各データベースクエリの表現式のデータと適合しない場合に、セキュリティ攻撃と断定する。
【００１３】
前述の内容は、添付の図面に示す例示的な実施形態についての以下のより詳細な説明から明らかになる。異なる図をとおして、同じ参照符号は同じ構成／構成要素を指すものとする。図面は必ずしも縮尺どおりではなく、重点は本発明の実施形態を示すことに置かれている。
【図面の簡単な説明】
【００１４】
【図１】知能型持続（advanced persistent）マルウェア攻撃の例示的な構成を示す図である。
【図２】本発明の実施形態における例示的なアプリケーションインフラストラクチャを示す図である。
【図３】本発明の実施形態におけるアプリケーションフレームワークのブロック図である。
【図４】本発明の実施形態における暗号化されていないデータストリームでのパターンマッチングベースのデータセット抽出のブロック図である。
【図５】本発明の実施形態における暗号化されたデータストリームでのパターンマッチングベースのデータセット抽出のブロック図である。
【図６】本発明の実施形態におけるパターンマッチングベースのデータセット抽出の例示的な方法を示すフローチャートである。
【図７Ａ】本発明の実施形態におけるアプリケーション実行時監視解析（ＡＲＭＡＳ）の例示的なブロック図である。
【図７Ｂ】図７ＡのＡＲＭＡＳインフラストラクチャ内でデータを伝送するのに用いられる例示的なプロトコルデータユニット（ＰＤＵ）を示す図である。
【図８】本発明の実施形態が実現可能なコンピュータネットワーク又は同様のデジタル処理環境を示す図である。
【図９】図８のコンピュータシステムにおけるコンピュータ（例えば、クライアントプロセッサ／装置、サーバコンピュータ等）の例示的な内部構造を示す図である。
【発明を実施するための形態】
【００１５】
以下では、本発明の例示的な実施形態について説明する。
本明細書で引用する全ての特許、特許出願公報及び参考文献の全教示内容は、参照をもって本明細書に取り入れたものとする。
【００１６】
＜例示的なマルウェア攻撃＞
【００１７】
図１に、知能型持続（advanced persistent）マルウェア攻撃の一例を示す。このケースでは、悪意のある行為者（つまりハッカー）が当該行為者自身のインフラストラクチャ１０２から、ｎｍａｐなどのスキャンツール１０４を用いて企業１０８の顧客対応インフラストラクチャを遠隔でスキャンするものとする。このスキャンが既知の脆弱性又はゼロデイ脆弱性を有するコードを発見すると、行為者はシェルコード１０６をインストールし、遠隔の企業サーバ（すなわち、標的）１１０の制御を獲得して企業ネットワークにアクセスする。当該ネットワークに侵入した悪意のある行為者は、アプリケーションへの攻撃を容易にするために追加のツールをロードする。これらのツールは、ｎｍａｐおよび／またはポートスキャナおよび／またはパスワードクラッキングツールおよび／またはＦＴＰクライアントおよび／または圧縮ツールおよび／またはハッシュ化および／または暗号化・復号ツールを含み得る。
【００１８】
次に行為者は、企業インフラストラクチャにアクセスして、管理者権限を持つユーザがデータベース、ファイルリポジトリなどの高価値の標的にログインする際のマシン１１４，１１６を探す。行為者は、ユーザのアクセス資格情報をスクレイピングしたり（引っこ抜いたり）さらなるハッキングツールのホームを見つけ出したりする目的で、マシン１１４，１１６を探す。脆弱なアプリケーションを有するマシン１１４，１１６を見つけ出すと悪意のある行為者は、遠隔にある自身のハッカー指令統制センタ１１２に接続し直して、資格情報をスクレイピングし、標的１１０に侵入して当該標的１１０にアクセスする可能性がある。標的にアクセスすると、専門的な追加のツール（さらなる商売道具）が当該標的１１０にロードされる。また、権限を持つユーザがスマートフォン、ラップトップなどのモバイルデバイスを喫茶店、空港、ホテルなどの保護されていないネットワークに持ち出した際に、当該モバイルデバイスにマルウェアが植え付けられる場合もある。他のケースでは、内部の人間が標的のマシンを、アプリケーションにより実行されたプロセスが動作している最中にウィルス又は他のマルウェア攻撃で感染させる場合もある。
【００１９】
企業データベースは、権限を持つユーザが企業にとって極めて高価値である情報にアクセスし得ることから、悪意のある行為者が好んで標的にする。例えば、これらのデータベースでは、権限を持つユーザが全顧客に関する大量の機密顧客情報へのアクセス権を有するのに対し、通常のユーザは当該機密情報のうちの自身に関係する部分にのみアクセス権を有する。悪意のある行為者は資格情報が得られた後、権限を持つユーザとしてデータベース及びファイルリポジトリ１１８に接続し、実名、自宅の住所、社会保障、運転免許証、生年月日、医療記録、クレジット／デビットカード番号などの金融情報、電話番号、電子メールアドレス、ユーザ名及びパスワード、保険情報、詳細な顧客リスト、設計プラン、ソースコード、他の知的財産などといった高価値な機密情報を抽出する可能性がある。
【００２０】
悪意のある行為者は、この情報を、企業セキュリティ解析者の注意を引かないように、場合によっては圧縮・暗号化してからハッカー指令統制センタ１１２に少量ずつアップロードする可能性がある。この目的を達成するために悪意のある行為者は、ハッカー指令統制センタ１１２のＩＰアドレスを毎日変更したりプロキシを使用したりすることにより、企業の侵入検知システムがパターンを確立できないようにする。企業は典型的に毎日１０ＧＢを超えるデータを送受信するので、比較的少量のデータを短いバーストでアップロードしても気付かれない場合が多い。
【００２１】
他のケースでは、悪意のある行為者がＳＱＬインジェクション攻撃などのデータベースクエリ注入攻撃を用いて初めにウェブシェルを投下してから、企業クライアント又は顧客に関する高価値な機密情報の抽出に進む可能性がある。また、悪意のある行為者は同様に、リモートファイルインジェクション（ＲＦＩ）攻撃を用いてウェブフェーシングアプリケーション（ウェブ向けアプリケーション）に追加の機能を挿入可能である。悪意のある行為者は、このような機能に、全く無害なユーザ入力を用いてアクセス可能である。注入された当該機能が実行されると、前記ウェブフェーシングアプリケーションは、意図せずにウェブシェルをインストールし、かつ／あるいは、機密情報を悪意のある行為者に公開する。
【００２２】
このような攻撃が成功するのは、サイバーセキュリティソリューションが、特定のウェブフェーシングアプリケーションについて、ウェブフェーシングアプリケーションフレームワークでの処理パイプラインを探査することができず、悪意のある行為者がこの特定のウェブフェーシングアプリケーションの処理に関係するデータに干渉したか又は当該データを改変したかを突き止めることができないからである。ウェブフェーシングアプリケーションファイアウォール、侵入検知／防止エンジンなどのサイバーセキュリティソリューションは、特定のウェブフェーシングアプリケーションのウェブフェーシングアプリケーションフレームワークでの高粒度処理を追跡するようにチューニングできない。この理由の一部として、ウェブフェーシングアプリケーションフレームワークで受信されて処理される大量のデータから、アプリケーションを処理するのに用いられる特定のデータ、関数、データベースクエリ、スレッドＩＤ、およびメモリアクセスのコンテンツの分離や相関を可能にするサイバーセキュリティツールが存在しないことが挙げられる。このような分離・相関データがないため、これらのサイバーセキュリティソリューションは悪意のある行為者によるアプリケーションを介した攻撃を完全に検知することができない。
【００２３】
＜ウェブフェーシングアプリケーションインフラストラクチャ＞
図２に、セキュリティ攻撃に対して脆弱であり得る例示的なウェブフェーシングアプリケーションインフラストラクチャを示す。当該インフラストラクチャは、遠隔のウェブクライアント２２０を含む。ウェブクライアント２２０からユーザ又はマシンが、特定のウェブサイトでのトランザクションを実行するためのウェブ要求を生成する。当該ユーザ又はマシンはそのウェブ要求を、ＵＲＬを入力したり当該ユーザのためにＵＲＬを入力するグラフィカルな選択肢を選択したりすることによって生成できる。ウェブクライアント２２０がそのウェブ要求を（例えば、ＨＴＴＰ、ＳＯＡＰ、ＲＥＳＴ、他の規格化された又は規格化されていない要求等として）ウェブサーバ２４０に送信して、当該ウェブサーバ２４０はそのウェブ要求を、他の大量のユーザからのウェブ要求と共にデータストリームとして受信できる。ウェブサーバ２４０は、当該データストリームを処理するアプリケーションサーバ２６０に動作可能に接続されている。ウェブサーバ２４０およびアプリケーションサーバ２６０は、バイナリ（Ｂｉｎａｒｙ）、．ＮＥＴ、ＪＡＶＡ、ＰＨＰ、Ｒｕｂｙ、Ｐｙｔｈｏｎなどを含むがこれらに限定されないウェブフェーシングアプリケーションフレームワークタイプで構成されている。当該ウェブフェーシングアプリケーションフレームワークは、プレゼンテーションロジック層、ビジネスロジック層、データロジック層などを含むがこれらに限定されない複数のロジック層に分けられている可能性がある。
【００２４】
受信された前記データストリームは、（ウェブサーバ２４０及びアプリケーションサーバ２６０での）前記ウェブフェーシングアプリケーションフレームワークの前記ロジック層を通り抜けるパイプラインでインターセプト及び処理される。典型的な前記ウェブフェーシングアプリケーションは、さらに、前記フレームワークの出力において提供されるさらなるサービスを利用するために、データベースにクエリする。よって、アプリケーションサーバ２６０は前記ウェブフェーシングアプリケーションフレームワークの前記処理パイプライン内において、前記データストリームをさらにデータベースサーバ２７０に送信する可能性がある。アプリケーションサーバ２６０は前記処理パイプラインの終端部において、前記データストリームを（バックエンド）データベース２７５に通信する可能性がある。データベースサーバ２７０が当該データストリームを、データベースクエリ（例えば、ＳＱＬクエリ、ストアドプロシージャコール等）としてデータベース２７５に通信して、前記ウェブ要求に関係するデータ記録を当該データベース２７５から取り出す可能性がある。データベースサーバ２７０は、取り出された当該データ記録からのデータを要求側ユーザに返す可能性がある。そうするにあたってデータサーバ２７０は、このデータをデータストリームとしてウェブサーバ２４０に、前記フレームワークの前記処理パイプライン内で逆方向に送信する。ウェブサーバ２４０はこのデータを（例えば、ＨＴＴＰ応答等として）、対応するユーザの遠隔のウェブクライアント２２０に送信する。
【００２５】
本発明の実施形態は前記データストリームを、前記フレームワークの前記ロジック層を通り抜ける前記処理パイプラインにおける様々なステージで捕捉する（取り込む）。前記データストリームはそのステージに応じて、データパケットからの生データ（例えば、生ＴＣＰデータ等）として捕捉されたり、当該データストリームを処理するように前記フレームワークによって起動される関数として捕捉されたり、メモリアクセスとして捕捉されたり、データベース記録を取り出すように前記フレームワークによって起動されるデータベースクエリとして捕捉されたりしてもよい。これらの実施形態は、捕捉された生データ、関数およびデータベースクエリに対してパターンマッチング（パターン照合）及び相関（相互に関係付けること）を実行することにより、特定のウェブサイト（ウェブフェーシングアプリケーション）の前記フレームワークにおける様々なステージにおける処理パターンを示すデータセットを抽出する。
【００２６】
図３は、本発明の実施形態におけるウェブフェーシングアプリケーションフレームワークのブロック図である。ほとんどのウェブフェーシングアプリケーションは、図３に示すように、アプリケーションフレームワークにより提供される「コンテナ」内で実行されるか又は当該「コンテナ」でホストされるように構築されている。この例では、前記アプリケーションフレームワークが、ユーザの認証、暗号化、セッション管理、ＳＱＬコネクタなどの一般的に用いられる機能を提供する。コンテナの幾つかの例は、Ａｐａｃｈｅ  Ｔｏｍｃａｔ、ＪＢｏｓｓ、Ｏｒａｃｌｅ  Ｗｅｂ  Ｌｏｇｉｃ、ＩＢＭ  Ｗｅｂ  Ｓｐｈｅｒｅなどを含む。これらのフレームワークはアプリケーション開発者の負担を大きく和らげて、当該アプリケーション開発者はビジネスロジックの開発に集中することができる。例示的な実施形態では、前記ウェブフェーシングアプリケーションフレームワークが、図２のウェブサーバ２４０およびアプリケーションサーバ２６０にわたって構成されてもよい。前記ウェブフェーシングアプリケーションフレームワークは、バイナリ、．ＮＥＴ、ＪＡＶＡ、ＰＨＰ、Ｒｕｂｙ、Ｐｙｔｈｏｎなどの任意の規格化されたもしくは独自のフレームワーク言語タイプのものであってもよい。
【００２７】
図３では、データ１を含む大量のデータのデータストリーム３０５が、通信ネットワーク（例えば、インターネット等）から前記フレームワークの前記処理パイプラインに入力される。なお、ウェブサーバ２４０／アプリケーションサーバ２６０は、異なる処理パイプラインを有する異なるフレームワークで構成されたものであってもよい。データストリーム３０５のデータは、前記アプリケーションを同時に利用する複数のユーザからのデータである。データストリーム３０５は、ＨＴＴＰ、ＦＴＰ、ＳＭＴＰ、ＶＯＩＰ、ＲＤＰ、ＷｅｂＳｏｃｋｅｔなどの通信プロトコルからの生データパケット（例えば、イーサネット（登録商標）フレーム等）として前記フレームワークの前記処理パイプライン（フレームワーク入力３１０）に到達する可能性がある。これらのデータストリーム３０５は、暗号化および／またはフラグメント化されていてもよい。例えば、一部の実施形態ではデータ１が、ユーザからのユーザクライアント装置２２０を介した特定のウェブサイト（ウェブフェーシングアプリケーション）へのＨＴＴＰ要求であってもよい。前記フレームワークの前記ビジネスロジック層において構成されたビジネスロジック３２０が、この特定のウェブサイト用のロジックであってもよい。
【００２８】
データ１を含むデータストリーム３０５は、前記フレームワークの１つ以上の層（例えば、図３に示すビジネスロジック層３２０等）を通って引き続き前記処理パイプライン内を進む。データストリーム３０５は、前記処理パイプライン内を進み続けるにつれて、複数の処理ステージによって改変データストリーム３１５，３２５，３３５へと消費および生成される。これらの処理ステージは、特定の関数又はメソッドの起動（トリガ、呼び出し）、特にはＣＰＵ命令の実行によって遂行される。例えば、データ１を含むデータストリーム３１５は前記処理パイプラインにおいて、データ２を含むデータストリーム３２５を生成するようにビジネスロジック層３２０により消費される。データストリーム３３５が、前記処理パイプライン（フレームワーク出力３３０）を出て、バックエンドデータベース（例えば、図２のデータベース２７５等）から記録データを取り出すようにデータベースクエリを起動することにより、処理を完了してもよい。前記バックエンドデータベースから取り出された前記記録データを含むデータストリームが前記フレームワークの前記処理パイプラインで（逆方向に）送信されてもよく、当該データストリームも複数の処理ステージによって同様に消費／生成される。
【００２９】
＜暗号化されていないデータストリームのパターンマッチングベースのデータセット抽出＞
図４は、本発明の実施形態における暗号化されていないデータストリームでのパターンマッチングベースのデータセット抽出のブロック図である。図４では、パケットキャプチャアプリケーション（パケット捕捉アプリケーション）つまりツール３０２が、前記フレームワークの前記処理パイプライン（フレームワーク入力３１０）に到達する、データ１を含む大量のデータの入力データストリーム３０５を捕捉するように構成されている。図４にはＷｉｒｅｓｈａｒｋパケットキャプチャツールの使用が描かれているが、他の実施形態では任意の他のパケットキャプチャツール／アプリケーションが使用されてもよく、特に制限はない。当該パケットキャプチャツール／アプリケーションは、データ１を含むデータストリーム３０５からの生データパケットを、前記フレームワークのタイプに基づいて捕捉する。例えば、特定のフレームワーク（例えば、ＰＨＰ等）のデータパケットは特定のデータヘッダ又は他の特定のフィールドを含んでもよく、当該特定のデータヘッダ又は他の特定のフィールドが前記パケットキャプチャツール／アプリケーションによって認識され（リッスンされ）てもよい。当該パケットキャプチャツール／アプリケーションは、捕捉された前記生データパケットからのデータ（例えば、ＴＣＰデータ等）の一部（Ｐｍ）を、記録および処理のために、パターンマッチング／機械学習エンジン３６０に送信する。一部の実施形態では、当該データが、パイプなどのストリーミングトランスポートを用いてパターンマッチング／機械学習エンジン３６０に送信されてもよい。パターンマッチング／機械学習エンジン３６０が、データの一部から、ユーザ、セッション情報、通信プロトコル、ＩＰアドレス、ポート番号、トラフィック方向などを含むがこれらに限定されない特定のデータアイテムを抽出してもよい。
【００３０】
図４では、プロファイラアプリケーション／ツール３１２が、特定のアプリケーションの前記フレームワークの前記処理パイプラインおよびビジネスロジック３２０において、データ１を含むデータストリーム３１５をプロファイル化する（捕捉する）ように構成されている。なお、実施形態は、関数エントリポイントをインターセプトする言語特化プロファイラと、個々の命令をインターセプトするバイナリプロファイラとの両方を用いる。この処理ステージでは前記フレームワークが関数（又はメソッド）および命令を起動し、当該関数（又はメソッド）および命令が、データ１を含むデータストリーム３１５を処理（消費・生成）するようにメモリアクセスを起動する。データ１を処理するのに用いられる特定の関数を突き止めるためにプロファイラ３１２は、前記処理パイプラインのこのステージで前記フレームワークによって起動される全ての関数を捕捉する。例えば、プロファイラ３１２は、前記フレームワークによって起動される関数Ｆｏｏ（ｐ１，ｐ２…ｐｎ）を捕捉する。そしてプロファイラ３１２は、プロファイル化された関数、スレッドＩＤ、およびパラメータのコンテンツをパターンマッチング／機械学習エンジン３６０に送信し、当該パターンマッチング／機械学習エンジン３６０が、当該プロファイル化された関数を、パケットキャプチャツール／アプリケーションツール３０２により捕捉された前記生データパケットと照合させる。具体的に述べると、パターンマッチング／機械学習エンジン３６０がパターンマッチングを実行し、当該パターンマッチングが前記プロファイル化された関数のデータパラメータを、捕捉された前記生データパケットの抽出された前記データアイテムと相関させて、データ１を処理するのに起動される特定の関数を特定して分離する。パターンマッチング／機械学習エンジン３６０はこれらの特定の関数を、前記特定のアプリケーションの（関係データ１セット）３５０としてデータセットに抽出および記録する。当該データセット内では特定の関数が、関連する生データパケットに対してマッピング（リンク）されてもよい。この関連する生データパケットは、前記フレームワーク及び前記特定のアプリケーションの処理パターンを示す。
【００３１】
図４では、さらに、他のプロファイラアプリケーション／ツール（例えば、ＳＱＬプロファイラ等）３２２が、前記バックエンドシステム又はデータベースにアクセスする前記フレームワークの前記処理パイプラインにおける、データ２を含むデータストリーム３２５をプロファイル化するように構成されている。なお、データ１を含むデータストリーム３１５が前記処理パイプラインにおいて、データ２を含むデータストリーム３２５を生成するように前記アプリケーションのコアビジネスロジック３２０により消費される。この処理ステージでは、前記フレームワークが関数（又はメソッド）およびメモリアクセスを、データ２を含む前記データストリームを処理（消費・生成）するように起動する。前記プロファイラは、前記処理パイプラインのこのステージで前記フレームワークによって起動される全ての関数、スレッドＩＤおよびメモリアクセスをプロファイル化して、プロファイル化された当該関数、スレッドＩＤおよびメモリアクセスを前記パターンマッチング／機械学習エンジンに送信する。例えば、プロファイラ３２２は、前記フレームワークによって起動される関数Ｂａｒ（ｐ１、ＳＱＬｉ，…ｐｑ）をプロファイル化／送信する。具体的に述べると、パターンマッチング／機械学習エンジン３６０は、バックエンドデータベース３４０からのデータ記録にアクセスすることに向けられた関数（例えば、データベース特化指令（例えば、ＳＱＬコマンド等）に関係するパラメータを含む関数等）を特定して分離してもよい。
【００３２】
さらに、他のパケットキャプチャツール／アプリケーション３３２（例えば、ＷｉｒｅＳｈａｒｋ、ＴＣＰＤｕｍｐ等）が、バックエンドデータベース３４０に向けられた、データ２を含むデータストリーム３３５を捕捉するように構成されている。パケットキャプチャツール／アプリケーション３３２は、当該データストリーム３３５を、当該データストリーム３３５がサーバ２７０を離れてＴＣＰ／ＩＰソケットなどのＩＰＣメカニズムを介して前記データベースをトラバースしているときに捕捉してもよい。Ｄ２を含むこれらのデータストリーム３３５は前記フレームワークの前記処理パイプラインにおいて、起動される前記関数から生成される。前記パケットキャプチャツール／アプリケーションは、データ２を含むデータストリーム３３５からの生データパケットを、前記フレームワークのタイプに基づいて捕捉する。例えば、特定のデータベースのタイプに関連付けられたデータパケットは特定のフィールドを含んでもよく、当該特定のフィールドが前記パケットキャプチャツール／アプリケーションによって認識され（リッスンされ）てもよい。パケットキャプチャツール／アプリケーション３３２は捕捉された前記生パケットデータからのデータ（例えば、ＳＱＬデータ等）の一部を収集し、記録および処理のために当該一部をパターンマッチング／機械学習エンジン３６０に送信する。パターンマッチング／機械学習エンジン３６０が、データの一部から、ＳＱＬクエリ、ストアドプロシージャコールなどの特定のデータアイテムを抽出してもよい。
【００３３】
そして、パターンマッチング／機械学習エンジン３６０が、データベースアクセスに関係する前記プロファイル化された関数を、バックエンドデータベース３４０に向けられた（前記パケットキャプチャツール／アプリケーションにより捕捉された）前記データパケット（データベースクエリ）と照合させる。具体的に述べると、パターンマッチング／機械学習エンジン３６０がパターンマッチングを実行し、当該パターンマッチングがこれらのプロファイル化された関数のデータパラメータを、ＳＱＬクエリ（ＳＱＬｉ）の式と相関させることにより、データ２に基づいて起動される特定の関数及び特定のデータベースクエリを特定して分離する。パターンマッチング／機械学習エンジン３６０はこれらの特定の関数及びデータベースクエリを、前記特定のウェブサイト（ウェブフェーシングアプリケーション）のための（関係データ２セット）３５５として前記データセットに抽出して記録する。当該データセット内では当該特定の関数が、当該特定のデータベースクエリに対してマッピング（リンク）される。データセット３５５は、前記特定のウェブサイト（ウェブフェーシングアプリケーション）のための前記フレームワークのバックエンドの処理パターンを示す。
【００３４】
＜抽出されたデータセットの相関＞
パターンマッチング／機械学習エンジン３６０は、さらに、関係データ１セットのデータセット３５０を関係データ２セットのデータセット３５５と相関させてもよい。パターンマッチング／機械学習エンジン３６０は当該相関を、前記フレームワークのプロセス又はスレッド間の通信用に構成されたコンテキストデータ構造を利用することによって行ってもよい。このようなコンテキストデータ構造は、ウェブフェーシングアプリケーションフレームワークの処理パイプラインにおいて用いられる。プロファイラ３１２、プロファイラ３２２または動作可能に接続されたコンピュータアプリケーションが、これらのコンテキストデータ構造に、データ１を処理するのに用いられるプロセス／スレッドを、データ２を処理するのに用いられるプロセス／スレッドへと追跡することを可能にする特定情報（例えば、ユーザ、セッションなどの情報等）を挿入してもよい。前記プロファイラは、データ２を含むデータストリーム３２５，３３５により起動される関数又はデータベースクエリを捕捉するときに、関連するプロセス／スレッドおよび挿入された対応する特定情報も捕捉してもよい。プロファイラ３１２，３２２はこれらのプロセス／スレッドおよび対応する特定情報もパターンマッチング／機械学習エンジン３６０に送信し、当該パターンマッチング／機械学習エンジン３６０で当該プロセス／スレッドおよび特定情報が、対応するデータセット内に記録されて且つ当該データセット内の関連する関数やデータベースクエリに対してマッピングされる。パターンマッチング／機械学習エンジン３６０は、データセット２のデータ／関数に対してマッピングされた前記特定情報を、データセット１のデータ／関数に対してマッピングされた前記特定情報（あるいは、データセット１のデータ／関数のフィールド／パラメータ）と照合させることにより、データセット２の関数／クエリに関連するデータセット１のデータ／関数を突き止めてもよい。
【００３５】
以下では、前記コンテキストデータ構造をこのように使用する一例について説明する。（図２に示す）例示的なアプリケーションインフラストラクチャにおいてウェブサーバ２４０が、ユーザからの（ウェブサービスクライアントを介した）ウェブ要求（例えば、ＨＴＴＰ要求等）を受信する。ウェブサーバ２４０は、当該ウェブ要求（例えば、ＵＲＬ等）に含まれる情報を用いて前記ユーザを認証し、認証が成功すると、当該ユーザが前記ウェブフェーシングアプリケーションインフラストラクチャ内のデータにアクセスするためのコネクション（又はセッション）を確立する。ウェブサーバ２４０は、当該セッション内において前記ユーザとウェブ要求及びウェブ応答を交換するために、ユーザ及びセッションデータを維持する。ウェブサーバ２４０およびアプリケーションサーバ２６０は、図３に示すようにウェブフェーシングアプリケーションフレームワークで構成されている。ウェブサーバ２４０は、前記セッション中に、クロスコンテキストコンテナ及びローカル／インタープロセス通信（ＬＰＣ／ＩＰＣ）を用いた相互依存メカニズム及びスレッドを介して前記ウェブフェーシングアプリケーションフレームワーク（図３）内でアプリケーションサーバ２６０と通信することにより、前記ウェブ要求を処理する。他の実施形態では、ウェブサーバ２４０とアプリケーションサーバ２６０とが、任意の他のコンテキストデータメモリ構造及び任意の他のプロセス通信方法を用いて前記ウェブフェーシングアプリケーションフレームワーク内で通信してもよい。なお、前記コンテキストデータは、ウェブフェーシングアプリケーションフレームワーク内においてサーバ間で又は他のこのような機器間でデータを伝送するのに用いられるどのようなデータ構造であってもよく、当該データ構造は、バイナリ、．ＮＥＴ、ＪＡＶＡ（登録商標）、ＰＨＰ、Ｒｕｂｙ、Ｐｙｔｈｏｎなどの任意のウェブフェーシングアプリケーションフレームワーク言語タイプで使用されるあらゆるデータ構造を含み、特に制限はない。
【００３６】
前記クロスコンテキストコンテナ（コンテキストデータ）は、ウェブサーバ２４０とアプリケーションサーバ２６０とで共有されるデータを保持するのに用いられる複数のメモリ部分（データオブジェクト）を含み、当該複数のメモリ部分（データオブジェクト）は、ＨＴＴＰ／同期、コール／オペレーションなどを含む。これらのデータオブジェクトは、内部データ構造またはテキストベースのメモリエレメント（例えば、ＸＭＬ、ＪＳＯＮ、生データフォーマット等）でフォーマット化されてもよい。図４のプロファイラ３１２，３２２は、計測されたコードを経由して、ウェブサーバ２４０およびアプリケーションサーバ２６０と、付録Ａに示す各データ構造に従って前記コンテキストデータを拡張するために通信する。例えば、プロファイラ３１２，３２２は前記計測されたコードを経由して、ウェブサーバ２４０で受信された前記ウェブ要求から、ユーザ名（例えば、ｕｕｉｄ等）、ＩＰアドレス、ポート番号、ＵＲＬ、セッションＩＤ、ＨＴＴＰデータ、スレッドＩＤ、メモリアクセスの種類及びコンテンツなどの任意のユーザ／セッション情報を含む、ユーザ、セッションおよびユーザ入力情報を取り出す。
【００３７】
このようにしてプロファイラ３１２，３２２は、データ１及びデータ２を処理するのに前記フレームワーク（図４）の前記処理パイプラインにおいて使用されるスレッドに関連するユーザ、セッションなどを認知できる。さらに、プロファイラ３１２，３２２は前記スレッドおよび関連するユーザ、セッションなどを、データ１及びデータ２の前記処理パイプラインにおけるデータパケット、起動される関数、メモリアクセスおよび起動されるデータベースクエリと共に捕捉してもよい。プロファイラ３１２，３２２は、前記コンテキストデータの拡張された前記データ構造からの前記スレッドおよび関連するユーザ／セッションデータをパターンマッチング／機械学習エンジン３６０に送信し、これらのスレッドおよび関連するユーザ／セッションデータを、関係するデータパケット、起動される関数及び起動されるクエリに対してマッピングされた関係データ２セットのデータセット３３５内に記録してもよい。パターンマッチング／機械学習エンジン３６０は、前記ユーザ／セッションデータを用いてデータ２の（関係データ２セットのデータセット３５５内の）関係する関数／クエリをデータ１の（関係データ１セットのデータセット３５０内の）データ／関数と、当該ユーザ／セッションデータ又はデータ１のデータ／関数のフィールド／パラメータにおける同様のデータに基づいて相関させてもよい。相関されたデータセット３５０およびデータセット３５５は累積データセット内に共に含められてもよく、当該累積データセットが特定のアプリケーションの前記フレームワークの各種ステージ（エンドツーエンド）にわたっての処理パターンを提供する。
【００３８】
＜暗号化されたデータストリームのパターンマッチングベースのデータセット抽出＞
図５は、本発明の実施形態における暗号化されたデータストリームでのパターンマッチングベースのデータセット抽出のブロック図である。図５の実施形態では、前記フレームワークに到達する、データ１を含むデータストリーム５０５が暗号化されている。パケットキャプチャツール３０２は、暗号化された前記データストリームを、前記フレームワークに到達する前にインターセプトする。そして、暗号変換モジュール５１０がデータストリーム５０５を、復号された同等のデータストリーム３０５に変換するように構成されている。暗号変換モジュール５１０は、前記フレームワークにより使用されている暗号化プロトコル（例えば、ＳＳＬ等）を突き止めることによりこのような変換を行い、前記データストリームのデータパケットを、突き止められた前記暗号化プロトコルに従ってクリアテキストへと復号してもよい。暗号変換モジュール５１０は、データストリーム５０５の前記データパケットの復号を実行するために、ライブラリ関数（例えば、ｓｓｌ＿ｒｅａｄ、ｓｓｌ＿ｗｒｉｔｅ等）、アプリケーションプログラミングインターフェース（ＡＰＩ）関数、および突き止められた前記暗号化プロトコルに関係する他のこのような機能を参照してもよい。復号されたデータストリーム３０５は、前記フレームワーク（フレームワーク入力３１０）に到達すると（パケットキャプチャツールではなく）プロファイラ３０８により捕捉される。データストリーム３０５は、スケーラビリティの目的で前記フレームワークの端で復号される。つまり、本発明の実施形態では、前記フレームワークの端で復号を実行することにより、所与のフレームワークとアクセスの種類（ＨＴＴＰ、ＲＥＳＴ、ＳＯＡ、非規格など）とを用いるどのようなビジネスロジックにも対処することができる。データ１を含む復号されたデータストリーム３０５は、図４で説明したものと同じ様式で引き続き前記フレームワークの前記処理パイプライン内を進む。
【００３９】
＜抽出されたデータセットの使用＞
図４または図５で得られた前記データセットは、前記フレームワークの様々なステージ（エンドツーエンド）にわたって前記アプリケーションの活動を探査してサイバー攻撃を検知するのに用いられてもよい。得られた当該データセットに基づいて解析エンジンが、特定のウェブフェーシングアプリケーションの活動を監視・探査するために前記フレームワークの計測されたコードを経由して、特定の関数およびデータベースクエリをリッスンするようにチューニングされてもよい。このようにして当該解析エンジンは、前記データストリームにおけるノイズを除去して、前記アプリケーションにおいてユーザデータを処理する特定の関数（又はメソッド）、スレッドおよびメモリアクセスのみに集中してもよく、つまりこのようなものだけを選別してもよい。また、前記データセットは、当該データセット内に記録された、パケット、関数、データベースクエリ、スレッド及びメモリアクセスに関係するコンテキストに基づき、当該パケット、関数、データベースクエリ、スレッドおよびメモリアクセスの、データパラメータ及びフィールドを探査してもよい。さらに、前記データセットに基づいて前記解析エンジンは、前記フレームワークにわたって活動を、特定のユーザ、セッションなどに関して追跡および探査するようにチューニングされてもよい。
【００４０】
＜パターンマッチングベースのデータセット抽出の方法＞
図６は、本発明の実施形態におけるパターンマッチングベースのデータセット抽出の例示的な方法６００を示すフローチャートである。図６の方法は、ステップ６１０で、ウェブフェーシングアプリケーションのフレームワークで受信したデータストリームを捕捉することによって開始する。当該方法はパケットキャプチャツールを用いて、前記アプリケーションの前記フレームワーク固有のデータパケットを待ち受けて（リッスンして）且つ当該データパケットの特定のデータ部分（データの一部）（例えば、ＴＣＰデータ等）を抽出してもよい。次に当該方法は、ステップ６２０で、ビジネスロジックが処理する前の前記データストリームを処理するように前記フレームワークによって起動される、第１のセットの関数（又はメソッド）(第１の関数セット又は第１のメソッドセット)、スレッドＩＤおよびメモリアクセスを捕捉する。次に当該方法は、ステップ６２５で、前記ビジネスロジックが処理した後の前記データストリームを処理するように前記フレームワークによって起動される、第２のセットの関数（又はメソッド）(第２の関数セット又は第２のメソッドセット)、スレッドＩＤおよびメモリアクセスを捕捉する。一部の実施形態では、当該方法が、さらに、前記フレームワークの各方向における最後の関数を、前記第１および第２のセットの関数の一部として捕捉してもよい。捕捉された当該関数がデータのフラグメントを取り扱うものである場合には、当該方法が、さらに、前記処理パイプラインにおける当該関数のその前の関数とその次の関数とを捕捉してもよい。当該方法はステップ６２０で、さらに、捕捉されたセットの関数の、パラメータ、スレッドＩＤ、メモリアクセス、このようなアクセスのコンテンツおよび関連するデータを抽出してもよい。そして、当該方法は、ステップ６３０で、前記フレームワークにより生成された、バックエンドデータベースをクエリするデータベースサーバへの、ネットワークを介したデータベースクエリ、スレッドＩＤおよびメモリアクセスを捕捉する。当該方法はステップ６３０で、さらに、捕捉されたデータベースクエリにおける、表現式（式）、フィールドおよび関連するデータも捕捉してもよい。当該方法は、プロファイラを用いて前記第１および第２のセットの関数を捕捉し（ステップ６２０およびステップ６２５）、第２のパケットキャプチャツールを用いて前記データベースクエリを捕捉してもよい（ステップ６３０）。
【００４１】
当該方法のステップ６４０では、捕捉されたデータを前記パケットキャプチャツールおよびプロファイラがパターンマッチング／機械学習エンジンに送信し、当該パターンマッチング／機械学習エンジンが前記データパケット、起動される第１および第２のセットの関数、スレッドＩＤ、メモリアクセスおよびデータベースクエリを、パターンによって、データストリームと照合させる。前記フレームワークのフロントエンドからの、捕捉された前記パケットデータ、起動される第１のセットの関数、スレッドＩＤおよびメモリアクセスが、第１のデータストリームと照合されてもよく、前記フレームワークのバックエンドにおける、起動される前記第２のセットの関数および捕捉されたデータベースクエリが、第２のデータストリームと照合されてもよい。当該方法は、ステップ６５０で、（前記第１および第２のセットの関数からの）適合した関数、適合したスレッドＩＤ、適合したメモリアクセス、適合したクエリおよびデータパケットを、１つ以上のデータセットに抽出する。当該方法は、前記第１のデータストリーム（フレームワークのフロントエンド）の前記パケット及び適合した前記第１のセットの関数を第１のデータセットに抽出し、前記第２のデータストリーム（フレームワークのバックエンド）の適合した前記第２のセットの関数及び捕捉されたデータベースクエリを第２のデータセットに抽出してもよい。
【００４２】
当該方法は、さらに、前記データパケット、関数及びクエリの一部又は全部に関係する、ユーザ、ユーザデータ、セッション情報、ＩＰアドレス、ポート番号、プロトコルコンテキスト、スレッドコンテキスト、スレッドＩＤ、メモリアクセス（例えば、メモリに読み書きする命令のアドレス、前記アプリケーションによってオペレートされるメモリの範囲等）、トラフィック方向などの情報を、各データセットに抽出してもよい。当該抽出の結果は、前記フレームワークにより処理されるユーザ供給データを取り扱う、一連の連結した関数、スレッド、メモリアクセス命令などである。当該方法は、前記アプリケーションにおける各メモリアクセス（読込み／書込み）のコンテンツを捕捉してもよい。よって、当該方法は、前記メモリアクセスを追跡して前記データセットを当該メモリアクセスと比較することにより、前記アプリケーションにおいてユーザデータを処理するのに参加するのがどの命令（読込み／書込み）かを特定してもよい。当該方法は、これらの関数、メモリアクセス、命令などを捕捉することにより、前記アプリケーション又はフレームワークのうちの、実行時（ランタイム）により詳細に調べられる必要のある１つ以上の脆弱性候補を分離できる。実行時にはこれらの特定された命令が、前記フレームワークで受信された（例えば、ウェブフェーシングアプリケーション要求内等の）悪意を持ってかつ巧妙に作成されたユーザデータを誤って取り扱ってしまうかを判断するために、隔離して実行できる。さらに、当該方法は、特定されたユーザ命令を処理するものではない関数を含めない（前記データセットから外す）ことにより、それらの外された関数を深く追求しないので、ウェブフェーシングアプリケーションの活動を探査する計測の効率を向上させることができる。
【００４３】
当該方法のステップ６６０では、前記パターンマッチング／機械学習エンジンが各データセットの関数、クエリ、スレッドＩＤ、メモリアクセス、データパケット間の関係を、当該関数、クエリ、スレッドＩＤ、メモリアクセス及びデータパケットのパラメータおよびフィールドのデータに基づいて相関させる。この相関では、スレッド、関数、命令などのチェーンを前記データセット内に作成してもよい。これらデータセットは、脆弱性が悪用されないようにするために実行時に確認される必要があるデータセットである。当該相関は、さらに、前記第１のデータセットのデータパケットおよび関数と前記第２のデータセットの関数およびクエリとをコンテキストデータ構造のユーザに基づいて相関させることにより、前記第１のデータストリームと第２のデータストリームとの間でプロセス／スレッドを追跡およびマッピングすることを含んでもよい。当該追跡およびマッピングは、前記アプリケーションのユーザごとのコンテキストを確立するために用いられるスレッドＩＤチェーンを作成してもよい。当該プロセス／スレッドの追跡およびマッピングは、特定情報（ユーザ、セッションなど）を前記フレームワーク内のクロスコンテキストコンテナ及びローカル／インタープロセス通信（ＬＰＣ／ＩＰＣ）に配置して処理することによって実行されてもよい。前記第１のデータセットと第２のデータセットとの当該相関は、特定のウェブフェーシングアプリケーションの前記フレームワークにわたるエンドツーエンド処理を示す累積データセットをもたらしてもよい。当該方法は、ステップ６７０で、前記累積データセットをアナライザ（解析エンジン）でプログラムして、セキュリティ攻撃を検知するために当該アナライザを、前記特定のウェブフェーシングアプリケーションの活動を当該データセットに基づいて探査するようにチューニングする。当該探査の間、前記データセット内のスレッド、関数、命令などの前記チェーンが実行時に特定され、当該方法が当該チェーンを用いて、各関数の出力側にユーザコンテキストを付加し、入力から当該コンテキストを除去し（取り出し）、これら付加および除去を解析エンジンに報告してもよい。
【００４４】
＜アプリケーション実行時監視分析（ＡＲＭＡＳ）インフラストラクチャ＞
図７Ａは、例示的なアプリケーション実行時監視解析（ＡＲＭＡＳ）インフラストラクチャの上位レベルブロック図である。図２〜図６のシステムおよび方法から生成された前記データセットは、特定のアプリケーションに関係する活動を監視および解析するように解析エンジン７３７をチューニングするのに用いられてもよい。このインフラストラクチャは、スマートフォン、タブレット、ラップトップ及びデスクトップからハイエンドサーバにわたるコンピュータ装置を含む、各種ハードウェアで構成されてもよい。図７Ａに示すように、監視エージェント７０２により実行されるデータ収集は、解析エンジン７３７により実行される解析から切り離されてもよく、これにより前記アプリケーションがオーバーヘッドとなってその性能が低下するのを抑制する。前記インフラストラクチャは、マルウェア攻撃に対する防御をハッカーが破るのを阻止することを可能にする。監視エージェント７０２は、ロードタイム及び実行時にデータを収集するようにアプリケーションと相互作用する。一部の実施形態では、監視エージェント７０２が、前記アプリケーションのフレームワークで受信されて処理されるデータストリームを捕捉する図４および図５の前記パケットキャプチャツールおよびプロファイラであってもよい。また、監視エージェント７０２は、捕捉された前記データストリームからデータセットを生成するために、パターンマッチング／機械学習エンジンと通信してもよい。
【００４５】
アプリケーション７０１のインフラストラクチャは、プロセスメモリ７０３、サードパーティライブラリ７０４、カーネルサービス７０６および命令パイプライン７０７を含む。監視エージェント７０２のインフラストラクチャは、計測・解析エンジン（計測エンジン）７０５、グラフィカルユーザインターフェース（ＧＵＩ）７１１、クライアントデーモン７０８、構成（コンフィグレーション）データベース７０９、ストリーミング・圧縮エンジン７１０、および中央演算処理装置（ＣＰＵ）７３６を含む。アプリケーション７０１のローカル又は遠隔のユーザ７５０は当該アプリケーションと、キーボード、マウスもしくは同様の入出力装置のような装置を介して、またはパイプ、共有メモリもしくはソケットにより確立され得る通信チャネルを介したネットワークで相互作用する。これに応答して、前記アプリケーションのプロセス７０３は、実行のために、命令の適切なセットを命令パイプライン７０７にディスパッチする。また、前記アプリケーションは、自身の又はｌｉｂｃ．ｓｏ（Ｌｉｎｕｘ（登録商標））、ｍｓｖｃｒｔｘｘ．ｄｌｌ（Ｗｉｎｄｏｗｓ）などのサードパーティライブラリ７０４を利用してもよい。これらのライブラリからの機能が呼び出される際に、当該ライブラリからの適切な命令も、実行のために前記命令パイプライン７０７に挿入される。また、前記アプリケーションは、カーネル７０６からのメモリ、ファイル入出力などのシステムリソースを利用してもよい。前記アプリケーション、ライブラリおよび前記カーネルからのこれらの一連の命令は、一つの時間順のシーケンス上に編成されて、所与のユーザが所望するアプリケーション機能を送り出す。
【００４６】
前記アプリケーションのコードのメモリへのロードが開始すると、計測エンジン７０５は複数の異なるロードタイム動作を実行する。全てのモジュールがロードされると、前記アプリケーションの計測された命令がランタイムデータを生成する。クライアントデーモン７０８は、構成データベース７０９からの１つ以上の構成ファイルを読み出すことにより、ＣＰＵ７３６において、計測・解析エンジン７０５のプロセス、ストリーミングエンジン７１０のプロセス、およびＧＵＩ７１１のプロセスを初期化する。クライアントデーモン７０８は、さらに、前記計測エンジン、ストリーミングエンジン、ＧＵＩ、解析エンジン７３７、当該クライアントデーモン７０８間の相互通信パイプを初期化する。当該クライアントデーモンは、さらに、当該クライアントデーモン自身も含め、監視エージェント７０２のいずれかのプロセスが応答しなくなったり停止したりした場合に、当該プロセスが再生されることを確実にする。これによって、監視エージェント７０２は、企業向け製品としての利用が保証される。
【００４７】
計測・解析エンジン７３７は、前記アプリケーションから収集されたロード及びランタイムデータを前記ストリーミングエンジンに収める。計測・解析エンジン７３７は、図４および図５の前記パターンマッチング／機械学習エンジンにより生成された前記データセットに基づいてデータを収めてもよい。前記ストリーミングエンジンは、監視エージェント７０２からの生データをＰＤＵにパッケージ化する。そして、前記ストリーミングエンジンは、当該ＰＤＵを、高帯域幅・低レイテンシ通信チャネル７１２を介して解析エンジン７３７に収める。監視エージェント７０２と解析エンジン７３７とが同じマシンに配置されている場合、このチャネルはメモリバスで実現できる。これらのエンティティが異なるハードウェアに配置されているものの物理的に近接している場合、当該チャネルは、インターネットを介して前記ロード及びランタイムデータを伝送するためのリモートコネクションが当該エンティティ間に確立されることを可能にするイーサネット又はファイバベースのトランスポートで実現できる。
【００４８】
解析エンジン７３７のインフラストラクチャは、ネットワークインターフェースカード（ＮＩＣ）７１３、パケットプール７１４、タイムスタンプエンジン７１５、プロセッサファブリック７１６、ハッシングエンジン７１７、ＴＣＡＭエンジン７１８、アプリケーションマップデータベース７１９、およびＲＥＧＥＸエンジン７４０を構成するスレッドコンテキストデータベース７２０を含む。解析エンジン７３７のインフラストラクチャは、さらに、コンテンツ解析エンジン７２１、イベント・イベントチェーン７２２、イベント管理エンジン７２３、イベントログ７２４、アプライアンスデーモン７２５、解析エンジン構成（コンフィグレーション）データベース７２６、ネットワークインターフェース７２７、ダッシュボード（又はＣＭＳ）７２８、ＳＭＳ／ＳＭＴＰサーバ７２９、ＯＴＰサーバ７３０、アップグレードクライアント７３１、ソフトウェアアップグレードサーバ７３２、ソフトウェアイメージ７３３、イベントアップデートクライアント７３４、およびイベントアップグレードサーバ７３５を含む。
【００４９】
ＰＤＵは、プロトコルヘッダと共に、ネットワークインターフェースカード７１３でインターセプトされて、当該ネットワークインターフェースカード７１３から前記ＰＤＵが取り出されて、パケットプール７１４に収められる。当該ＰＤＵのタイムスタンプフィールドが、タイムスタンプエンジン７１５により充填される。これにより、パケットが前記パケットプールバッファ内に過度に長時間留まらないことが確実となる。
【００５０】
プロセッサファブリック７１６が前記パケットバッファからパケットを取出し、アドレスフィールドがハッシュ化されて当該パケット内の適切な位置に戻される。この処理は、ハッシングエンジン７１７により実行される。そして、前記プロセッサファブリックが前記パケットバッファからパケットを、当該パケットが到達した順に取り除き始める。ロードタイムフェーズからの情報を有するパケットは、関係するデータが抽出されてアプリケーションマップデータベース７１９に記憶されるように処理される。ランタイムフェーズからの情報を有するパケットは、図６に従って処理される。解析エンジン７３７の効率は、前記プロセッサファブリック内のプロセッサの数に基づいて上昇または下降し得る。
【００５１】
遷移の対象であるデータは、スレッドごとにテーブルを有するスレッドコンテキストデータベース７２０に保存される。また、前記プロセッサファブリックは、ＴＣＡＭエンジン７１８を用いて遷移及びメモリ領域の探索を実行する。前記プロセッサファブリックはハッシュを用いてルックアップを実行するので、実際に費やされる時間は予測可能で且つ極めて短い。前記ファブリック内のプロセッサの数を慎重に選択することにより、パケット当たりのスループットを適宜変更可能である。
【００５２】
解析エンジン７３７が探索を実行すると、当該解析エンジン７３７は、有効でない遷移、重要／管理者機能もしくはシステムコールの有効でない処理を、見つける場合があり、または適切でない箇所へのメモリ書込みを見つける場合がある。これらの場合のいずれにおいても、解析エンジン７３７はイベント・イベントチェーンデータベース７２２に記憶されたポリシーで記述されている、プログラムされた深刻度のイベントを、イベント管理エンジン７２３にディスパッチする。生イベントログは、イベントログデータベース７２４に記憶される。また、前記ダッシュボードが、当該イベントログにアクセスしてアプリケーション状態を表示することができる。
【００５３】
また、イベント・イベントチェーンデータベース７２２における各イベントには、救済動作が対応付けられている。ユーザはこの救済動作を、「イベントを無視する」から「スレッドを終了する」までの両極端な動作の間に存在する様々な動作から設定することが可能である。推奨される救済動作が、イベントアップデートクライアント７３４およびイベントアップグレードサーバ７３５を用いて解析者に提案されることができる。そのような推奨される動作を変更するために解析者は、そのためにダッシュボード７２８を使用することが可能である。当該ダッシュボードは、監視中の各アプリケーションの状態を表示してセキュリティ解析者が当該アプリケーションをある程度操作する（例えば、当該アプリケーションを開始する、停止させる等）ことを可能にするＧＵＩインターフェースを提供する。イベントが生成されると、前記イベントチェーンが通常状態から次の状態へと移行する。この新しい状態に対応付けられた救済動作が取られることができる。この救済動作が「無視」以外の動作を伴うものである場合には、ＳＭＳ又はＳＭＴＰサーバ７２９を用いてセキュリティ解析者に通知が送信される。当該セキュリティ解析者のＳＭＳ／ＳＭＴＰアドレスは、ＬＤＡＰ又は他のディレクトリプロトコルを用いて突き止められ得る。前記ダッシュボードからアプリケーションを開始又は停止させるには管理者権限が必要であり、セキュリティ解析者はＯＴＰサーバ７３０を用いた本人証明が必要である。
【００５４】
また、新たなイベントが作成されてイベント・イベントチェーンデータベース７２２に、深刻度および解析者に提案される救済動作と共にリンクされ得る。これにより、ある装置における新たな攻撃についての固有のイベント及びイベントチェーンが、他の装置にディスパッチされることが可能となる。この目的のために、新たなイベント及びイベントチェーンは全てイベントアップグレードサーバ７３５にロードされる。イベントアップデートクライアント７３４は、イベントアップグレードサーバ７３５に定期的に接続し、新たなイベント及びイベントチェーンを取り出すために当該イベントアップグレードサーバ７３５に対して本物証明を行う。そして、前記イベントアップデートクライアントは、これらの新たなイベント及びイベントチェーンをイベント・イベントチェーンデータベース７２２にロードする。コンテンツ解析エンジン７２１は前記アプリケーションを、当該新たなイベントチェーン内にカプセル化されている新たな攻撃に関して追跡し始めることができる。
【００５５】
前記クライアントデーモンと同様に、アプライアンスデーモン７２５は、解析エンジン７３７上で実行する各種プロセスを開始する役割を果たす。この目的のために、アプライアンスデーモン７２５は、解析エンジン構成データベース７２６から構成情報を読み出す必要がある。当該デーモンは、さらに、解析エンジン７３７における全てのプロセスのためのハートビートポールを実行する役割を果たす。これは、解析エンジン７３７エコシステムにおける全ての装置が常に最良の動作状態にあることを確実にする。連続するハートビートが３回欠けると、対象のプロセスが応答していないことを示唆する。任意のプロセスが早まって終了した場合には、前記デーモンが当該プロセスを、当該デーモン自身も含めて復活させる。
【００５６】
ソフトウェアが、当該ソフトウェアのエラーを修正するなどの目的で、アプライアンスホスト、解析エンジン７３７またはクライアントにおいてアップグレードされることがある。この目的のために、アップグレードクライアント７３１は、最新のソフトウェアが入手可能となるソフトウェアアップグレードサーバ７３２を常に確認する。当該クライアントは、解析エンジン７３７又は当該クライアントにおけるエンティティが古いイメージを動作させていることを発見した場合、解析者が当該古いイメージをソフトウェアアップグレードサーバ７３２からの新しいイメージによってアップグレードさせることを可能にする。新しいイメージは、システムイメージ７３３としてまとめられている。これにより、アプライアンスまたはホストにテスト済みの互換イメージを用意しておくことが可能となる。解析エンジン７３７又は監視エージェント７０２におけるサブシステムについての所与のイメージが前記システムイメージのうちの同じ構成要素についてのイメージと合致しない場合には、全てのイメージが以前の既知の良好なシステムイメージにロールバックされる。
【００５７】
＜ＡＲＭＡＳ通信用のＰＤＵ＞
【００５８】
図７Ｂに、図７Ａの監視エージェント７０２と解析エンジン７３７との間でデータを伝送するのに用いられる例示的なプロトコルデータユニット（ＰＤＵ）を示す。監視エージェント７０２と解析エンジン７３７とは、互いに効果的に協働するために、前記ＰＤＵを用いて互いに通信する。具体的に述べると、前記ＰＤＵは監視エージェント７０２により、前記アプリケーションの抽出されたモデルおよび／または収集されたランタイムデータをパッケージ化して解析エンジン７３７に伝送するために使用され得る。前記ＰＤＵは、監視エージェント７０２と解析エンジン７３７との間で伝送される情報の種類ごとにフィールドを備える。前記ＰＤＵは、アプリケーション提供データセクションと、生成ＨＷ／ＣＡＥセクションと、コンテンツ解析エンジン又は生データセクションとに分けられる。
【００５９】
前記アプリケーション提供データセクションは、各種レジスタからのデータ、ならびに当該セクションの別個のフィールドに配置される発信元アドレス及び宛先アドレスを含む。プロトコルバージョン７５２は、前記ＰＤＵのバージョン番号を有する。発信元と宛先は、長期的にプロトコルバージョンが変化しても互いに通信することが可能である必要がある。この８ビットのフィールドは、ソースエンティティにより生成されたパケットのバージョン番号を記述する。当該プロトコルバージョンフィールドの後には、現在未使用の予備フィールド７５６が続く。
【００６０】
前記アプリケーション提供データセクションにおける次のフィールドは、メッセージ発信元／宛先識別子７５７，７５３，７５４であり、図７Ａに示す解析エンジンインフラストラクチャ内でトラフィックを交換するために使用される。図７に示す各種エンティティは、当該エンティティ間でトラフィックを交換する場合がある。これらの全ての装置がＩＰアドレスを有したり必要としたりするわけではなく、そのため（ハードウェアとホストとの）２つのクエリルータエンジンが、前記メッセージ発信元フィールド及び宛先フィールドを用いて内的にトラフィックをルーティングする。一部のメッセージは、解析エンジン７３７内のエンティティにネットワークを介して移動する必要がある。この目的のために、前記エンティティには次のようなＩＤが振り当てられる。所与の解析エンジンアプライアンスは、複数のアクセラレータカードを備える可能性がある。各カードが固有のＩＰアドレスを有するので、各種エンティティは固有のＩＤを有する。また、前述したインフラストラクチャは、複数のアプリケーションを実行する可能性がある。各アプリケーションサーバが固有のＩＰアドレスを有するので、対応する監視エージェント側のエンティティも固有のＩＤを有する。
【００６１】
［監視エージェント側のエンティティ］
１．ＧＵＩ
２．監視・解析エンジン
３．クライアントメッセージルータ
４．ストリーミングエンジン
５．クライアント側デーモン
６．ＣＬＩエンジン
７．クライアントウォッチドッグ
８．クライアント圧縮ブロック
９．クライアントｉＷａｒｐイーサネットドライバ（１００Ｍｂ／１Ｇｂ／１０Ｇｂ）
［各ＰＣＩカードエンティティ（開始アドレス＝２０＋ｎ＊２０）］
２０．セキュラライザＴＯＥブロック
２１．セキュラライザＰＣＩブリッジ
２２．解凍ブロック
２３．メッセージ検証ブロック
２４．パケットハッシングブロック
２５．タイムスタンピングブロック
２６．メッセージタイムアウトタイマブロック
２７．統計カウンタブロック
２８．セキュラライザクエリルータエンジン
２９．セキュラライザアシスト
［セキュラライザホストエンティティ］
２００．セキュラライザＰＣＩｅドライバ
２０１．ホストルーティングエンジン
２０２．コンテンツ解析エンジン
２０３．ログマネージャ
２０４．デーモン
２０５．ウェブエンジン
２０６．ウォッチドッグ
２０７．ＩＰＣメッセージングバス
２０８．構成データベース
２０９．ログデータベース
［ＳＩＥＭコネクタ］
２２０．ＳＩＥＭコネクタ１−Ｖｉｒｓｅｃ  Ｄａｓｈｂｏａｒｄ（ダッシュボード）
２２１．ＳＩＥＭコネクタ２−ＨＰ  ＡｒｃＳｉｇｈｔ
２２２．ＳＩＥＭコネクタ３−ＩＢＭ  ＱＲａｄａｒ
２２３．ＳＩＥＭコネクタ４−Ａｌｉｅｎ  Ｖａｕｌｔ  ＵＳＭ
［セキュラライザインフラストラクチャエンティティ］
２３０．Ｖｉｒｓｅｃダッシュボード
２３１．ＳＭＴＰサーバ
２３２．ＬＤＡＰサーバ
２３３．ＳＭＳサーバ
２３４．エンタイトルメントサーバ
２３５．データベースバックアップサーバ
２３６．ＯＴＰクライアント
２３７．ＯＴＰサーバ
２３８．チェックサムサーバ
２３９．チケッティングサーバ
２４０．Ｖｉｒｓｅｃルールサーバ
２４１．Ｖｉｒｓｅｃアップデートサーバ
［全てのユーザアプリケーション］
２５５．ユーザアプリケーション（アプリケーションＰＩＤが、クエリを発行するアプリケーションを特定するのに使用される。）
【００６２】
前記アプリケーション提供データセクションにおける他のフィールドは、伝送されるデータの種類を示すメッセージタイプフィールド７５５である。最上位レベルで言えば、メッセージの種類には、各種ローカル監視エージェント側エンティティ間で流れるものと、解析エンジンアプライアンス側エンティティ間で流れるものと、クライアント側エンティティとアプライアンス側エンティティとの間で流れるものとの、３つの異なる種類のものがある。また、ネットワークを介して移動する必要のあるメッセージは、ＯＳＩモデル及び他のプロトコルに準拠する必要がある。
【００６３】
前記アプリケーション提供データセクションにおける次のフィールドは、パケットのシーケンス識別子を含むパケットシーケンス番号フィールドである。前記ストリーミングエンジンは、失われたパケットについてエラー復元を実行する。この目的のために前記ストリーミングエンジンは、パケットを一意的に識別する必要がある。インクリメントする符号付き６４ビットパケットシーケンス番号が前記ストリーミングエンジンにより挿入されて、残りの解析エンジンインフラストラクチャに単に渡される。当該シーケンス番号は、６４ビット限度に達すると０から再び開始してもよい。ハートビート、ログメッセージなどのアプリケーション非関連のパケットの場合には、当該シーケンス番号が−１とされてもよい。
【００６４】
前記アプリケーション提供データセクションは、さらに、暗号化目的のために用いられるカナリアを有するカナリアメッセージフィールドを含む。監視エージェント７０２および解析エンジン７３７にとって、共通の（ただし、アプリケーション立上り時間、ＰＩＤ、ライセンス文字列、認証されたユーザ名などの非一定の）情報からどのようにして前記カナリアを算出するかは既知である。
【００６５】
前記アプリケーション提供データセクションは、さらに、全てのメッセージで使用される汎用フィールドを含む。アプリケーションソース命令アドレスフィールド７８０、アプリケーション宛先命令アドレスフィールド７５８、メモリ開始アドレスポインタフィールド７５９、メモリ終了アドレスポインタフィールド７６０、アプリケーションＰＩＤフィールド７６２、スレッドＩＤフィールド７６３、解析エンジン到達タイムスタンプフィールド７６４、および解析エンジン出発タイムスタンプフィールド７６５は、汎用的なアプリケーションデータを保持する。
【００６６】
前記ＰＤＵは、さらに、生成ＨＷ／ＣＡＥセクションを備える。解析を容易にし且つ一定のタイムバジェットを維持するために解析エンジン７３７は、前記発信元・宛先アドレスフィールドをハッシュ化して前記ＰＤＵを処理に先立って更新する。前記ＰＤＵの前記生成ＨＷ／ＣＡＥセクションは、そのハッシュ化されたデータが後で利用されるために配されるセクションである。このセクションは、ハッシュ化アプリケーション発信元命令アドレスフィールド７６６、ハッシュ化アプリケーション宛先命令アドレスフィールド７６７、ハッシュ化メモリ開始アドレスフィールド７６８、およびハッシュ化メモリ終了アドレスフィールド７６９を含む。前記生成ＨＷ／ＣＡＥセクションは、さらに、ハードコード化コンテンツ開始マジックヘッダ、ＡＰＩ名マジックヘッダ、コールコンテキストマジックヘッダ及びコール生データマジックヘッダを含む、前記カナリアに関係する他のフィールド７７１を含み、これらは全てのＰＤＵパケットに存在している。
【００６７】
前記生成ＨＷ／ＣＡＥセクションは、さらに、他の構成及びエラーデータ（結果、コンフィギュレーションビット、動作モード、エラーコード及び動作モードデータを含む）を特定するためのフィールド７７０を含む。当該フィールドのうちの「結果」部分は、様々な解析エンジンクエリ（遷移プレイブッククエリ、コードレイアウトクエリ、メモリ（スタック又はヒープ）オーバーランクエリ、およびディープ検査クエリ）のブーリアン結果を返すようにセグメント化されている。当該フィールドのうちの「コンフィギュレーションビット」部分は、圧縮フラグ、デモフラグまたはコロケーテッドフラグがセットされていることを示す。当該フィールド内に圧縮フラグが存在していると、パケットが圧縮モードで返されるべきであることを解析エンジン７３７に示している。デモフラグは、システムの有効なライセンスが存在していないので当該システムがデモモードであることを示す。このモードでは、ログやイベントの全てが利用可能なわけではない。コロケーテッドフラグは、前記アプリケーションが解析エンジン７３７で実行されているため、当該アプリケーションに返す必要のあるパケットをどこに送信すべきかを、ホストクエリルータエンジンが決定可能であるということを示す。このフラグがセットされているとパケットはＰＣＩブリッジを介して送信され、そうでなければＰＣＩカードのイーサネットインターフェースで送信される。当該フィールドのうちの「動作モード」部分は、システムがパラノイド、監視および学習モードのどのモードであるのかを示す。これらのモードについては、本セクションにおいて後述する。最後に、当該フィールドのうちの「エラーコード」部分は、システムにおけるエラーを示す。当該エラーコードの最初の８ビットは、メッセージ発信元に対応する。残りの１２ビットは、各サブシステムにより報告された実際のエラーに対応する。
【００６８】
前記ＰＤＵは、さらに、コンテンツ解析エンジン又は生データセクションを備える。ＰＤＵにおけるこのセクションには、ＯＳライブラリコール及びシステムコールの引数、戻り値などの全ての可変データが配置される。このセクションにおけるデータは、前記アプリケーションから収集されたデータのコンテンツを含み、主にコンテンツ解析エンジン７２１に向けられている。このセクションは、可変サイズのＡＰＩ名又は番号フィールド７７２、コールコンテンツマジックヘッダフィールド７７７、可変サイズのコールコンテンツフィールド７７４、コール生データマジックヘッダフィールド７７８、可変サイズの生データコンテンツフィールド７７６、および２つの予備フィールド７７３，７７５を含む。また、これらのフィールドは、管理メッセージのためにオーバーロードされ得る。
【００６９】
＜デジタル処理環境＞
図８に、本発明の実施形態が実現可能なコンピュータネットワーク又は同様のデジタル処理環境を示す。
【００７０】
少なくとも１つのクライアントコンピュータ／装置５０および少なくとも１つのサーバコンピュータ６０が、アプリケーションプログラムなどを実行する処理装置、記憶装置および入出力装置を提供する。少なくとも１つのクライアントコンピュータ／装置５０は、さらに、他のコンピューティングデバイス（他のクライアント装置／プロセス５０および１つ以上の他のサーバコンピュータ６０を含む）に通信ネットワーク７０を介して接続され得る。通信ネットワーク７０は、リモートアクセスネットワーク、グローバルネットワーク（例えば、インターネット等）、世界中のコンピュータの集まり、ローカルエリア又はワイドエリアネットワーク、およびプロトコル（例えば、ＴＣＰ／ＩＰ、Ｂｌｕｅｔｏｏｔｈ（登録商標）等）を現在用いて互いに通信するゲートウェイの一部であり得る。これら以外の電子デバイス／コンピュータネットワークアーキテクチャも好適である。
【００７１】
クライアントコンピュータ／装置５０が、データパケットおよび／またはウェブフェーシングアプリケーションフレームワークにおいて前記処理パイプラインによって起動される関数および／またはデータベースクエリを捕捉する、パケットキャプチャツール又はプロファイラとして構成されてもよい。サーバコンピュータ６０が、クライアントコンピュータ／装置５０により捕捉された前記データパケット、関数およびデータベースクエリを少なくとも１つのデータセット内でマッチおよび相関させる、パターンマッチング／機械学習エンジンとして構成されてもよい。サーバコンピュータ６０は、個別のサーバコンピュータではなくクラウドネットワーク７０の一部であってもよい。また、一部の実施形態では、サーバコンピュータ６０が前記少なくとも１つのデータセットを、アナライザ（解析エンジン）として構成された第２のサーバコンピュータ６０に送信してもよい。第２のサーバコンピュータ６０は前記アナライザを、セキュリティイベントを検知するために特定のウェブフェーシングアプリケーションに関係する処理活動（受信したデータパケット、起動される関数、および起動されるデータベースクエリ）を待ち受けるように、前記少なくとも１つのデータセットに基づいてチューニングする。一部の実施形態では、クライアント５０およびサーバ６０が、前述した捕捉、相関およびチューニングを実行するために当該クライアントおよび当該サーバで実行される、クライアントアプリケーション又はコンポーネントを含んでもよい。
【００７２】
図９は、図８のコンピュータシステムにおけるコンピュータ（例えば、クライアントプロセッサ／装置５０、サーバコンピュータ６０等）の例示的な内部構造を示す図である。各コンピュータ５０，６０は、コンピュータ又は処理システムの構成要素間でのデータ伝送に利用される一連のハードウェアラインであるシステムバス７９を備える。システムバス７９は、基本的に、コンピュータシステムの異なる構成要素（例えば、プロセッサ、ディスクストレージ、メモリ、入出力ポート、ネットワークポート等）同士を接続して当該構成要素間での情報の伝送を可能にする共有のコンジットである。システムバス７９には、様々な入出力装置（例えば、キーボード、マウス、ディスプレイ、プリンタ、スピーカ等）をコンピュータ５０，６０に接続する入出力装置インターフェース８２が取り付けられている。ネットワークインターフェース８６は、ネットワーク（例えば、図８のネットワーク７０等）に取り付けられた様々な他の装置にコンピュータが接続することを可能にする。メモリ９０は、本発明の実施形態（例えば、本明細書で説明したセキュリティ監視エージェントの構成要素、計測エンジンの構成要素、解析エンジンの構成要素等）を実現するように用いられるコンピュータソフトウェア命令９２およびデータ９４を記憶する揮発性の記憶装置である。ディスクストレージ９５は、本発明の実施形態を実現するように用いられるコンピュータソフトウェア命令９２およびデータ９４を記憶する不揮発性の記憶装置である。システムバス７９には、さらに、コンピュータ命令を実行する中央演算処理装置８４が取り付けられている。
【００７３】
本発明の実施形態又は態様は、ハードウェア、ファームウェア又はソフトウェアの形態で実現されてもよい。ソフトウェアで実現された場合、当該ソフトウェアは、当該ソフトウェア又は当該ソフトウェアの命令のサブセットをプロセッサがロードすることを可能にするように構成された任意の非過渡的なコンピュータ読取り可能媒体に記憶されてもよい。そして、プロセッサが当該命令を実行し、当該プロセッサは、本明細書で説明した様式によって装置が動作するように又はそのような様式によって装置を動作させるように構成されている。
【００７４】
また、本明細書では、ファームウェア、ソフトウェア、ルーチン又は命令が、データプロセッサの所与の動作および／または機能を実行するように説明しているかもしれない。しかし、本明細書に含まれたこのような説明は便宜上のものに過ぎず、実際にはそのような動作が、ファームウェア、ソフトウェア、ルーチン、命令などを実行するコンピューティングデバイス、プロセッサ、コントローラまたは他の装置により生じることを理解されたい。
【００７５】
フローチャート、ブロック図およびネットワーク図は、構成要素の数がより多くても又はより少なくされてもよく、異なる配置構成にされてもよく、異なって表現されてもよいことを理解されたい。ただし、適用例によっては、実施形態の実行を示すブロック図、ネットワーク図、ならびにブロック図及びネットワーク図の数が、特定のものでなければならない場合もあることを理解されたい。
【００７６】
つまり、さらなる実施形態が、多種多様なコンピュータアーキテクチャおよび／または物理的コンピュータおよび／または仮想的コンピュータおよび／またはクラウドコンピュータおよび／または幾つかのこれらの組合せによっても実現されてもよい。したがって、本明細書で説明したデータプロセッサは例示に過ぎず、実施形態を限定するものではない。
【００７７】
本発明を例示的な実施形態を参照しながら具体的に図示・説明してきたが、当業者であれば、特許請求の範囲に包含される本発明の範囲を逸脱することなく形態や細部に様々な変更が施されてもよいことを理解するであろう。
【００７８】
【数１】
2019506674.tif 000003
【００７９】
【数２】
2019506674.tif 000004
【００８０】
【数３】
2019506674.tif 000005
【００８１】
【数４】
2019506674.tif 000006
【図１】
2019506674.tif 000007
【図２】
2019506674.tif 000008
【図３】
2019506674.tif 000009
【図４】
2019506674.tif 000010
【図５】
2019506674.tif 000011
【図６】
2019506674.tif 000012
【図７Ａ】
2019506674.tif 000013
【図７Ｂ】
2019506674.tif 000014
【図８】
2019506674.tif 000015
【図９】
2019506674.tif 000016
【国際調査報告】
2019506674.tif 000017
2019506674.tif 000018