(57)【要約】  説明されるシステムおよび方法は、中でも、悪意のあるソフトウェアの検知および分析、侵入検知、ならびに監視などの用途のための、クライアントシステムとリモートの当事者の間の暗号化された通信の解読を可能にする。クライアントシステムは、仮想マシン、および仮想マシンの外部のイントロスペクションエンジンを実行する。イントロスペクションエンジンは、第１のセッションイベント（例えば、ＳｅｒｖｅｒＨｅｌｌｏメッセージ）と、第２のセッションイベント（例えば、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージ）との間で内容が変化したメモリページを識別するように構成される。個々のメモリページは、個々の通信セッションに対する暗号化キー素材を収める可能性がある。解読エンジンは次に、識別されたメモリページの内容から導出された情報を使用して、個々の通信セッションの暗号化されたペイロードの解読を試みることができる。
2019516294.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアプロセッサおよびメモリを備えるクライアントシステムであって、前記ハードウェアプロセッサは、仮想マシンおよびイントロスペクションエンジンを実行するように構成され、
前記仮想マシンは、リモートの当事者との通信セッションを行うように構成され、前記通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、前記ハンドシェイクメッセージは、暗号化キーを導出するために前記クライアントシステムによって使用される暗号化パラメータを含み、前記暗号化されたペイロードは、前記暗号化キーで暗号化され、
前記イントロスペクションエンジンは、前記仮想マシンの外部で実行され、
前記通信セッションの第１のセッションイベントの発生と、前記通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、前記メモリ内で前記ターゲットメモリページを識別することと、
それに応じて、前記内容に従って、前記暗号化されたペイロードを解読するように構成された解読エンジンに前記ターゲットメモリページの前記内容を送信することと
を行うように構成される、
クライアントシステム。
【請求項２】
請求項１に記載のクライアントシステムであって、前記第１のセッションイベントは、前記ハンドシェイクメッセージを前記クライアントシステムから前記リモートの当事者に送ること、または、前記ハンドシェイクメッセージを前記クライアントシステムで受け取ることを含む、クライアントシステム。
【請求項３】
請求項２に記載のクライアントシステムであって、前記通信セッションは、トランスポートレイヤセキュリティ（ＴＬＳ）プロトコルに準拠し、前記ハンドシェイクメッセージは、ＣｌｉｅｎｔＨｅｌｌｏメッセージまたはＳｅｒｖｅｒＨｅｌｌｏメッセージを含む、クライアントシステム。
【請求項４】
請求項１に記載のクライアントシステムであって、前記第２のセッションイベントは、暗号化されたデータパケットを前記クライアントシステムから前記リモートの当事者に送ること、または、前記暗号化されたデータパケットを前記クライアントシステムで受け取ることを含み、前記データパケットは、前記暗号化キーで暗号化される、クライアントシステム。
【請求項５】
請求項４に記載のクライアントシステムであって、前記通信セッションは、トランスポートレイヤセキュリティプロトコルに準拠し、前記データパケットは、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージの一部またはＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージの一部を含む、クライアントシステム。
【請求項６】
請求項４に記載のクライアントシステムであって、前記データパケットは、前記暗号化されたペイロードの一部を含む、クライアントシステム。
【請求項７】
請求項１に記載のクライアントシステムであって、前記ターゲットメモリページを識別することは、
前記仮想マシンによって使用されるメモリページのプールから候補のメモリページを選択することと、
前記第２のセッションイベントの前記発生を検知することに応答して、前記候補のメモリページのページテーブルエントリに従って、前記候補のメモリページが前記第２のセッションイベントの前記発生より前に書き込まれたかどうかを判断することと、
前記候補のメモリページが書き込まれたかどうかを判断することに応答して、前記候補のメモリページが書き込まれた場合に、前記候補のメモリページを前記ターゲットメモリページとして選択することと
を含む、クライアントシステム。
【請求項８】
請求項１に記載のクライアントシステムであって、前記少なくとも１つのハードウェアプロセッサは、前記仮想マシンの外部でネットワークフィルタをさらに実行するように構成され、前記ネットワークフィルタは、前記クライアントシステムのネットワークアダプタを制御し、
前記ネットワークフィルタは、前記ハンドシェイクメッセージを傍受し、それに応じて、前記イントロスペクションエンジンに通知を送信するように構成され、
前記イントロスペクションエンジンは、前記通知に従って前記第１のセッションイベントの前記発生を推定するようにさらに構成される、
クライアントシステム。
【請求項９】
請求項１に記載のクライアントシステムであって、前記少なくとも１つのハードウェアプロセッサは、前記仮想マシンの外部でネットワークフィルタをさらに実行するように構成され、前記ネットワークフィルタは、前記クライアントシステムのネットワークアダプタを制御し、
前記イントロスペクションエンジンは、前記第２のセッションイベントの前記発生に応答して、前記ターゲットメモリページの前記内容をコピーし、それに応じて、前記ネットワークフィルタに通知を送信するようにさらに構成され、
前記ネットワークフィルタは、前記仮想マシンを宛先とするデータパケットを傍受し、それに応じて、前記通知を受け取るまで前記仮想マシンへの前記データパケットの配信を遅延させるように構成される、
クライアントシステム。
【請求項１０】
請求項１に記載のクライアントシステムであって、前記イントロスペクションエンジンは、第３のイベントの発生に応答して、前記第１のセッションイベントの前記発生と、前記第３のイベントの前記発生との間に前記ターゲットメモリページの前記内容が変化したかどうかにさらに従って、前記ターゲットメモリページを識別するようにさらに構成され、前記第３のイベントの前記発生は、前記通信セッションと並行した別の通信セッションによって引き起こされる、クライアントシステム。
【請求項１１】
複数のクライアントシステムのために解読手続きを行うように構成された解読エンジンを実行するように構成されたハードウェアプロセッサを備えるサーバコンピュータシステムであって、解読手続きは、
前記複数のクライアントシステムのうちの１つのクライアントシステムのターゲットメモリページの内容を受け取ることと、
前記クライアントシステム上で実行される仮想マシンとリモートの当事者との間で行われる通信セッションの暗号化されたペイロードを受け取ることと、
それに応じて、前記ターゲットメモリページの前記内容に従って、前記暗号化されたペイロードを解読することと
を含み、
前記通信セッションは、前記暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、前記ハンドシェイクメッセージは、暗号化キーを導出するために前記クライアントシステムによって使用される暗号化パラメータを含み、前記暗号化されたペイロードは、前記暗号化キーで暗号化され、
前記クライアントシステムは、前記仮想マシンの外部でイントロスペクションエンジンを実行するように構成され、前記イントロスペクションエンジンは、前記通信セッションの第１のセッションイベントの発生と、前記通信セッションの第２のセッションイベントの発生との間に前記ターゲットメモリページの前記内容が変化したかどうかに従って、前記クライアントシステムのメモリ内の前記ターゲットメモリページを識別するように構成される、
サーバコンピュータシステム。
【請求項１２】
請求項１１に記載のサーバコンピュータシステムであって、前記暗号化されたペイロードを解読することは、
候補の解読キーを前記ターゲットメモリページの前記内容から導出することと、
前記候補の解読キーを使用して前記暗号化されたペイロードの解読を試みることと
を含む、サーバコンピュータシステム。
【請求項１３】
請求項１１に記載のサーバコンピュータシステムであって、前記第１のセッションイベントは、前記ハンドシェイクメッセージを前記クライアントシステムから前記リモートの当事者に送ること、または、前記ハンドシェイクメッセージを前記クライアントシステムで受け取ることを含む、サーバコンピュータシステム。
【請求項１４】
請求項１３に記載のサーバコンピュータシステムであって、前記通信セッションは、トランスポートレイヤセキュリティプロトコルに準拠し、前記ハンドシェイクメッセージは、ＣｌｉｅｎｔＨｅｌｌｏメッセージまたはＳｅｒｖｅｒＨｅｌｌｏメッセージを含む、サーバコンピュータシステム。
【請求項１５】
請求項１３に記載のサーバコンピュータシステムであって、前記第２のセッションイベントは、暗号化されたデータパケットを前記クライアントシステムから前記リモートの当事者に送ること、または、前記暗号化されたデータパケットを前記クライアントシステムで受け取ることを含み、前記データパケットは、前記暗号化キーで暗号化される、サーバコンピュータシステム。
【請求項１６】
請求項１５に記載のサーバコンピュータシステムであって、前記通信セッションは、トランスポートレイヤセキュリティプロトコルに準拠し、前記データパケットは、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージの一部またはＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージの一部を含む、サーバコンピュータシステム。
【請求項１７】
請求項１５に記載のサーバコンピュータシステムであって、前記データパケットは、前記暗号化されたペイロードの一部を含む、サーバコンピュータシステム。
【請求項１８】
請求項１１に記載のサーバコンピュータシステムであって、前記ターゲットメモリページを識別することは、
前記仮想マシンによって使用されるメモリページのプールから候補のメモリページを選択することと、
前記第２のセッションイベントの前記発生を検知することに応答して、前記候補のメモリページのページテーブルエントリに従って、前記候補のメモリページが前記第２のセッションイベントの前記発生より前に書き込まれたかどうかを判断することと、
前記候補のメモリページが書き込まれたかどうかを判断することに応答して、前記候補のメモリページが書き込まれた場合に、前記候補のメモリページを前記ターゲットメモリページとして選択することと
を含む、サーバコンピュータシステム。
【請求項１９】
請求項１１に記載のサーバコンピュータシステムであって、前記クライアントシステムは、前記仮想マシンの外部でネットワークフィルタを実行するようにさらに構成され、前記ネットワークフィルタは、前記クライアントシステムのネットワークアダプタを制御し、
前記ネットワークフィルタは、前記ハンドシェイクメッセージを傍受し、それに応じて、前記イントロスペクションエンジンに通知を送信するように構成され、
前記イントロスペクションエンジンは、前記通知に従って前記第１のセッションイベントの前記発生を推定するようにさらに構成される、
サーバコンピュータシステム。
【請求項２０】
請求項１１に記載のサーバコンピュータシステムであって、前記クライアントシステムは、前記仮想マシンの外部でネットワークフィルタを実行するようにさらに構成され、前記ネットワークフィルタは、前記クライアントシステムのネットワークアダプタを制御し、
前記イントロスペクションエンジンは、前記第２のセッションイベントの前記発生に応答して、前記ターゲットメモリページの前記内容をコピーし、それに応じて、前記ネットワークフィルタに通知を送信するようにさらに構成され、
前記ネットワークフィルタは、前記仮想マシンを宛先とするデータパケットを傍受し、それに応じて、前記通知を受け取るまで前記仮想マシンへの前記データパケットの配信を遅延させるように構成される、
サーバコンピュータシステム。
【請求項２１】
請求項１１に記載のサーバコンピュータシステムであって、前記イントロスペクションエンジンは、第３のイベントの発生に応答して、前記第１のセッションイベントの前記発生と、前記第３のイベントの前記発生との間に前記ターゲットメモリページの前記内容が変化したかどうかにさらに従って、前記ターゲットメモリページを識別するようにさらに構成され、前記第３のイベントの前記発生の前記発生は、前記通信セッションと並行した別の通信セッションによって引き起こされる、サーバコンピュータシステム。
【請求項２２】
請求項１１に記載のサーバコンピュータシステムであって、前記ハードウェアプロセッサは、前記暗号化されたペイロードの解読結果に従って、前記クライアントシステムが悪意のあるソフトウェアを含むかどうかを判断するようにさらに構成される、サーバコンピュータシステム。
【請求項２３】
クライアントシステムのハードウェアプロセッサであって、当該クライアントシステムはメモリをさらに備える、ハードウェアプロセッサによって実行されると、前記クライアントシステム上で実行される仮想マシンの外部で実行されるイントロスペクションエンジンを前記ハードウェアプロセッサに形成させる命令を格納した非一時的コンピュータ可読媒体であって、
前記仮想マシンは、リモートの当事者との通信セッションを行うように構成され、前記通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、前記ハンドシェイクメッセージは、暗号化キーを導出するために前記クライアントシステムによって使用される暗号化パラメータを含み、前記暗号化されたペイロードは、前記暗号化キーで暗号化され、
前記イントロスペクションエンジンは、
前記通信セッションの第１のセッションイベントの発生と、前記通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、前記メモリ内で前記ターゲットメモリページを識別すること、および
それに応じて、前記内容に従って、前記暗号化されたペイロードを解読するように構成された解読エンジンに前記ターゲットメモリページの前記内容を送信すること
を行うように構成される、
非一時的コンピュータ可読媒体。
【請求項２４】
クライアントシステムとリモートの当事者との間の暗号化された通信を解読する方法であって、前記クライアントシステムは、仮想マシンを実行するように構成され、
前記仮想マシンは、前記リモートの当事者との通信セッションを行うように構成され、前記通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、前記ハンドシェイクメッセージは、暗号化キーを導出するために前記クライアントシステムによって使用される暗号化パラメータを含み、前記暗号化されたペイロードは、前記暗号化キーで暗号化され、前記方法は、
前記通信セッションの第１のセッションイベントの発生と、前記通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、少なくとも１つのハードウェアプロセッサを用いて前記クライアントシステムのメモリ内で前記ターゲットメモリページを識別するステップと、
少なくとも１つのハードウェアプロセッサを用いて前記暗号化されたペイロードを採取するステップと、
前記ターゲットメモリページの前記内容に従って、少なくとも１つのハードウェアプロセッサを用いて前記暗号化されたペイロードを解読するステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本出願は、２０１６年４月４日に出願の「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｄｅｃｒｙｐｔｉｎｇ  Ｎｅｔｗｏｒｋ  Ｔｒａｆｆｉｃ  ｉｎ  ａ  Ｖｉｒｔｕａｌｉｚｅｄ  Ｅｎｖｉｒｏｎｍｅｎｔ（仮想化環境においてネットワークトラフィックを解読（復号）するためのシステムおよび方法）」という名称の米国仮特許出願第６２／３１７，８０４号の出願日の利益を主張し、これらの全内容が参照により本明細書に組み込まれる。
【０００２】
[0002]本発明は、コンピュータセキュリティシステムおよび方法に関し、詳細には暗号化された電子通信に関する。
【背景技術】
【０００３】
[0003]現在のデジタル世界において、多種多様な製品およびサービスがデータ暗号化に依存する。暗号化された通信は、中でも、オンライン取引、オンラインバンキング、およびインターネットなどのデータネットワーク上の電話通信を可能にする。暗号化はまた、ユーザの私的および個人的データを保護するためにも広く使用される。相互接続された電子デバイス（モノのインターネット）が普及した時代において、暗号化に依拠することは強みであるが、脆弱性ともなる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0004]近年、暗号化は、例えば、悪意のあるソフトウェアの活動を隠すこと、または身代金のためにユーザの価値あるデータを保持することといった悪意のある目的のために、ますます使用されている。悪意のあるソフトウェア活動の１つの典型的な例は、一般にボットネットとして知られる、乗っ取られたコンピューティングシステムのネットワークをセットアップし、個々のネットワークを使用して標的のウェブサーバに対する分散型サービス拒否攻撃を始めることを含む。ボットネットをセットアップすることの一部として、ソフトウェアエージェントは、様々な方法（例えば、直接のハッキング、フィッシング等）を使用して、それぞれのボットネットメンバに侵入する。エージェントは次に、例えば、標的のネットワークアドレスを受け取るため、および／または他のボットネットメンバと攻撃を同調させるために、暗号化を使用して目立たないようにリモートサーバと通信することができる。このような悪意のある活動を防ぐため、または阻止するための様々な方法が説明されてきたが、このような対策は、マルウェアが暗号化を効率的に使用することによって徐々に弱められることがある。
【０００５】
[0005]マルウェア対策の実施は、一般に仮想マシンとして知られるシミュレートされたコンピュータ環境の作成を可能にする、ハードウェア仮想化技術の出現によってさらに複雑になる。いくつかの仮想マシンは、同じ物理マシン上で一斉に動作し、同じ物理マシンの間でハードウェアリソースを共有するので、その結果、投資および運用のコストを減らすことができる。それぞれの仮想マシンは、他の仮想マシンとは別に、それ自体のオペレーティングシステムおよび／またはソフトウェアアプリケーションを動作させることができる。ハードウェア仮想化は、例えば、ソフトウェアの携帯性を保証するため、またはセキュリティを強化するためといった、様々な理由で導入される。ハードウェア仮想化の他の普及している用途は、「クラウドコンピューティング」という総称で知られ、ウェブサーバファームおよび仮想デスクトップ基盤（ＶＤＩ：ｖｉｒｔｕａｌ  ｄｅｓｋｔｏｐ  ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）を含む。典型的なＶＤＩ構成において、ソフトウェアアプリケーションは、第１のコンピュータシステム上で実行するが、ユーザは、第２のコンピュータシステム（端末）を使用して、個々のアプリケーションと対話する。個々のアプリケーションを動作させる仮想マシンは、第１のコンピュータシステム上にオンデマンドでインスタンスが生成され、最終的には複数のリモートユーザに対して何百ものこのようなＶＭを実行することになる可能性もある。マルウェアの拡散が絶え間なく続くので、それぞれの仮想マシンは、マルウェアからの保護を必要とする可能性がある。
【０００６】
[0006]セキュリティ脅威の拡大および仮想化に対する需要の増加は、ハードウェア仮想化の課題に対処するように設計された効率的なマルウェア対策システムおよび方法を開発することに強い関心を引き起こす。
【課題を解決するための手段】
【０００７】
[0007]１つの態様によれば、クライアントシステムは、ハードウェアプロセッサおよびメモリを備え、ハードウェアプロセッサは、仮想マシンおよびイントロスペクションエンジンを実行するように構成される。仮想マシンは、リモートの当事者との通信セッションを行うように構成され、通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、ハンドシェイクメッセージは、暗号化キーを導出するためにクライアントシステムによって使用される暗号化パラメータを収め、暗号化されたペイロードは、暗号化キーで暗号化される。イントロスペクションエンジンは、仮想マシンの外部で実行し、通信セッションの第１のセッションイベントの発生と、通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、メモリ内でターゲットメモリページを識別するように構成される。イントロスペクションエンジンは、内容に従って、暗号化されたペイロードを解読するように構成された解読エンジンにターゲットメモリページの内容を送信するようにさらに構成される。
【０００８】
[0008]別の態様によれば、サーバコンピュータシステムは、複数のクライアントシステムのために解読手続きを行うように構成された解読エンジンを実行するように構成されたハードウェアプロセッサを備える。解読手続きは、複数のクライアントシステムのうちの１つのクライアントシステムのターゲットメモリページの内容を受け取ることと、クライアントシステム上で実行する仮想マシンとリモートの当事者の間で行われる通信セッションの暗号化されたペイロードを受け取ることと、それに応じて、ターゲットメモリページの内容に従って、暗号化されたペイロードを解読することとを含む。通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、ハンドシェイクメッセージは、暗号化キーを導出するためにクライアントシステムによって使用される暗号化パラメータを収め、暗号化されたペイロードは、暗号化キーで暗号化される。クライアントシステムは、仮想マシンの外部でイントロスペクションエンジンを実行するように構成され、イントロスペクションエンジンは、通信セッションの第１のセッションイベントの発生と、通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、クライアントシステムのメモリ内のターゲットメモリページを識別するように構成される。
【０００９】
[0009]別の態様によれば、非一時的コンピュータ可読媒体は、メモリをさらに備えるクライアントシステムのハードウェアプロセッサによって実行されると、クライアントシステム上で実行する仮想マシンの外部で実行するイントロスペクションエンジンをハードウェアプロセッサに形成させる命令を格納する。仮想マシンは、リモートの当事者との通信セッションを行うように構成され、通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、ハンドシェイクメッセージは、暗号化キーを導出するためにクライアントシステムによって使用される暗号化パラメータを収め、暗号化されたペイロードは、暗号化キーで暗号化される。イントロスペクションエンジンは、通信セッションの第１のセッションイベントの発生と、通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、メモリ内でターゲットメモリページを識別するように構成される。イントロスペクションエンジンは、内容に従って、暗号化されたペイロードを解読するように構成された解読エンジンにターゲットメモリページの内容を送信するようにさらに構成される。
【００１０】
[0010]別の態様によれば、クライアントシステムとリモートの当事者の間の暗号化された通信を解読する方法。クライアントシステムは、仮想マシンを実行するように構成される。仮想マシンは、リモートの当事者との通信セッションを行うように構成され、通信セッションは、暗号化されたペイロードが後に続くハンドシェイクメッセージを含み、ハンドシェイクメッセージは、暗号化キーを導出するためにクライアントシステムによって使用される暗号化パラメータを収め、暗号化されたペイロードは、暗号化キーで暗号化される。方法は、通信セッションの第１のセッションイベントの発生と、通信セッションの第２のセッションイベントの発生との間にターゲットメモリページの内容が変化したかどうかに従って、少なくとも１つのハードウェアプロセッサを用いてクライアントシステムのメモリ内でターゲットメモリページを識別することを含む。方法は、少なくとも１つのハードウェアプロセッサを用いて暗号化されたペイロードを採取することと、ターゲットメモリページの内容に従って、少なくとも１つのハードウェアプロセッサを用いて暗号化されたペイロードを解読することとをさらに含む。
【００１１】
[0011]本発明の前述の態様および利点は、以下の詳細な説明を読み、図面を参照すると、よりよく理解されるようになるであろう。
【図面の簡単な説明】
【００１２】
【図１】[0012]本発明のいくつかの実施形態による、クライアントシステムがセキュリティサーバと協力して、潜在的に悪意のあるネットワークトラフィックを解読する例示的な構成を示す図である。
【図２−Ａ】[0013]本発明のいくつかの実施形態による、クライアントシステムの例示的なハードウェア構成を示す図である。
【図２−Ｂ】[0014]本発明のいくつかの実施形態による、セキュリティサーバの例示的なハードウェア構成を示す図である。
【図３】[0015]本発明のいくつかの実施形態による、クライアントシステム上で実行するハイパーバイザによって公開されるゲスト仮想マシン（ＶＭ）、およびこのゲストＶＭの外部で実行するイントロスペクションエンジンを示す図である。
【図４】[0016]図３に示されるようなハードウェア仮想化構成における例示的なメモリアドレス変換を示す図である。
【図５】[0017]本発明のいくつかの実施形態による、ゲストＶＭに出入りする暗号化されたトラフィックを傍受するために、イントロスペクションエンジンによって行われるステップの例示的なシーケンスを示す図である。
【図６】[0018]本発明のいくつかの実施形態による、ゲストＶＭの最適化されたメモリスナップショットを取得するために、イントロスペクションエンジンによって行われるステップの例示的なシーケンスを示す図である。
【図７】[0019]本発明のいくつかの実施形態による、複数の並行した暗号化された通信セッションに対する最適化されたメモリスナップショットを取得するためにイントロスペクションエンジンによって行われるステップの例示的なシーケンスを示す図である。
【図８】[0020]本発明のいくつかの実施形態による、セキュリティサーバ上で実行する例示的な解読エンジンを示す図である。
【図９】[0021]本発明のいくつかの実施形態による、解読エンジンによって行われるステップの例示的なシーケンスを示す図である。
【発明を実施するための形態】
【００１３】
[0022]以下の説明において、構造間の列挙される接続はすべて、中間体構造を介した直接の動作的接続であっても、または間接の動作的接続であってもよいということを理解されたい。要素のセットは、１つまたは複数の要素を含む。要素の任意の列挙は、少なくとも１つの要素を指すものと理解されたい。複数の要素は、少なくとも２つの要素を含む。別段の指定がない限り、「または（ＯＲ）」の使用は、非排他的な「または」を指す。別段の要求がない限り、任意の説明される方法ステップは、必ずしも特定の示された順序で行われる必要はない。第２の要素から導出された第１の要素（例えばデータ）は、第２の要素に等しい第１の要素、ならびに第２の要素を処理することによって生成される第１の要素、および任意選択で他のデータを包含する。パラメータに従って判断または判定することは、パラメータに従って、および任意選択で他のデータに従って判断または判定することを包含する。別段の指定がない限り、いくつかの量／データの指標は、量／データ自体、または量／データ自体とは異なる指標であってもよい。コンピュータセキュリティは、データおよび／またはハードウェアへの非意図的または不正なアクセス、データおよび／またはハードウェアの非意図的または不正な修正、ならびにデータおよび／またはハードウェアの破壊からユーザおよび機器を保護することを包含する。コンピュータプログラムは、タスクを実行する一連のプロセッサ命令である。本発明のいくつかの実施形態において説明されるコンピュータプログラムは、他のコンピュータプログラムのスタンドアロンソフトウェアのエンティティまたはサブエンティティ（例えば、サブルーチン、ライブラリ）であってよい。別段の指定がない限り、ゲストソフトウェアは、仮想マシンの中で実行する。プログラムは、個々の仮想マシンの仮想プロセッサ上で実行するときに仮想マシンの中で実行すると言われる。プロセスは、アプリケーションまたはオペレーティングシステムの一部などの、コンピュータプログラムのインスタンスであり、少なくとも実行スレッドおよび実行スレッドに割り当てられた仮想メモリ空間を有することによって特徴付けられ、個々の仮想メモリ空間の内容には、実行可能コードを含む。別段の指定がない限り、ページは、ホストシステムの物理メモリに個別にマッピングされることが可能な仮想メモリの最小単位を表す。別段の指定がない限り、クライアントシステム／仮想マシンのメモリスナップショットは、個々のクライアントシステム／仮想マシンによって使用されるメモリのセクションの内容のコピーを含む。コンピュータ可読媒体は、磁気、光、および半導体のストレージ媒体（例えば、ハードドライブ、光ディスク、フラッシュメモリ、ＤＲＡＭ）などの非一時的媒体、ならびに導電性ケーブルおよび光ファイバリンクなどの通信リンクを包含する。いくつかの実施形態によれば、本発明は、特に、本明細書で説明される方法を行うようにプログラムされたハードウェア（例えば、１つまたは複数のマイクロプロセッサ）、ならびに本明細書で説明される方法を行うように命令をエンコーディングするコンピュータ可読媒体を備えるコンピュータシステムを提供する。
【００１４】
[0023]以下の説明は、本発明の実施形態を例として示し、必ずしも限定するために示すものではない。
[0024]図１は、本発明のいくつかの実施形態による例示的な構成を示し、クライアントシステム１２ａ〜１２ｄのセットは、セキュリティサーバ１５と協力して、個々のクライアントシステム１２ａ〜１２ｄと、コンテンツサーバ１３として示されるリモートの当事者との間に発生する、暗号化されたネットワークトラフィックを傍受し、解読する。サーバ１３および１５のそれぞれは、相互接続されたコンピューティングシステムのセットを総称的に表し、これらは互いに物理的に近くにあってもよく、また近くになくてもよい。
【００１５】
[0025]例示的なクライアントシステム１２ａ〜１２ｄは、企業のコンピューティングシステムを含み、パーソナルコンピュータシステム、モバイルコンピューティングプラットフォーム（ラップトップコンピュータ、タブレット、携帯電話）、ウェアラブル電子デバイス（スマートウオッチ）、家庭用設備（スマートＴＶ、サーモスタット、住宅監視（ｈｏｍｅ  ｓｕｒｖｅｉｌｌａｎｃｅ）／セキュリティシステム）、またはプロセッサおよびメモリを有し、ハードウェア仮想化サポートする他の任意の電子デバイスも含む。コンピュータセキュリティにとって特に関心のある１つの例示的なクライアントシステムは、ハニーポットとして構成されるコンピュータである。ハニーポットは、データ収集および悪意のあるソフトウェアの研究のために、悪意のあるエンティティを誘い込むためのシステムおよび方法のセットを説明するために、当技術分野において使用される総称である。例示的なハニーポットは、明らかに保護されていないコンピュータシステムを含み、ハッカーもしくはマルウェアエージェントに入り込ませ、ソフトウェアをインストールさせ、および／またはネットワーク上で他のコンピュータと通信させることができる。
【００１６】
[0026]図示されたクライアントシステムは、企業ネットワークまたはホームネットワークなどの、ローカルな通信ネットワーク１０を介して相互接続される。ローカルネットワーク１０の一部は、ローカルエリアネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含んでよい。ゲートウェイデバイス１４は、拡張ネットワーク１１（例えばインターネット）へのクライアントシステム１２ａ〜１２ｄによるアクセスを可能にすることができ、その結果、クライアントシステム１２ａ〜１２ｄとリモートの当事者の間のネットワークトラフィックのすべてまたは一部は、ゲートウェイデバイス１４を通り抜ける。例示的なゲートウェイデバイス１４は、ルータおよび／またはスイッチなどの物理的な設備を備える。
【００１７】
[0027]図２−Ａは、本発明のいくつかの実施形態による、クライアントシステム１２の例示的なハードウェア構成を示す。クライアントシステム１２は、図１のシステム１２ａ〜１２ｄのいずれかを表すことができる。簡単にするために、図示されたクライアントシステムはパーソナルコンピュータであるが、携帯電話、タブレット型コンピュータ等など、他のクライアントシステムのハードウェア構成は、図２−Ａの図示された構成とはいくぶん相違してもよい。クライアントシステム１２は、ハードウェアプロセッサ１６およびメモリユニット１８を含む物理デバイスのセットを備える。プロセッサ１６は、信号および／またはデータのセットを用いて算術演算および／または論理演算を実行するように構成された物理デバイス（例えば、マイクロプロセッサ、半導体基板上に形成されたマルチコア集積回路等）を備える。いくつかの実施形態において、このような演算は、一連のプロセッサ命令（例えば、機械語または他のタイプのエンコーディング）の形でプロセッサ１６に配信される。メモリユニット１８は、プロセッサ１６によってアクセスまたは生成される命令および／またはデータを格納する揮発性コンピュータ可読媒体（例えば、ＤＲＡＭ、ＳＲＡＭ）を備えることができる。
【００１８】
[0028]入力デバイス２０は、中でも、コンピュータキーボードおよびマウスを含むことができ、ユーザがデータおよび／または命令をシステム１２に導入することを可能にする。出力デバイス２２は、モニタなどの表示デバイスを含むことができる。いくつかの実施形態において、入力デバイス２０および出力デバイス２２は、タッチスクリーンデバイスの場合のように、共通のハードウェアを共有することができる。ストレージデバイス２４は、ソフトウェア命令および／またはデータの不揮発性の記憶、読込み、および書込みを可能にするコンピュータ可読媒体を含む。例示的なストレージデバイス２４は、磁気ディスク、光ディスク、およびフラッシュメモリデバイス、ならびにＣＤおよび／またはＤＶＤのディスクおよびドライブなどのリムーバブルメディアを含む。ネットワークアダプタ２６は、システム１２がネットワーク１０および／または他のマシン／コンピュータシステムに接続することを可能にする。コントローラハブ２８は、複数のシステム、周辺機器、およびチップセットバスならびに／またはシステム１２のデバイス１６〜２６の相互通信を可能にする他のすべての回路機器を総称的に表す。例えば、コントローラハブ２８は、中でも、メモリコントローラ、入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）コントローラ、および割込コントローラを含むことができる。別の例において、ハブ２８は、中でも、プロセッサ１６をメモリ１８に接続するノースブリッジバス、ならびに／またはプロセッサ１６をデバイス２０、２２、２４、および２６に接続するサウスブリッジバスを備えることができる。
【００１９】
[0029]図２−Ｂは、本発明のいくつかの実施形態におけるセキュリティサーバ１５の例示的なハードウェア構成を示す。図示された構成において、サーバ１５は、サーバプロセッサ１６、サーバメモリ１８、サーバストレージデバイス１２４のセット、およびネットワークアダプタ１２６のセットを備える。プロセッサ１１６は、マイクロプロセッサ、またはデータのセットによって数理的演算および／または論理演算を実行するように構成された他の物理デバイスを備えることができる。メモリ１８は、プロセッサ１１６によって実行および／または処理するための命令および／またはデータを格納する揮発性コンピュータ可読媒体を備えることができる。サーバストレージデバイス１２４は、中でも、ハードドライブ、ＣＤおよびＤＶＤ  ＲＯＭ、ならびにフラッシュメモリなどの不揮発性コンピュータ可読媒体を備える。サーバネットワークアダプタ１２６は、セキュリティサーバ１５が、拡張ネットワーク１１を介して他の電子デバイスに接続すること、およびこれらのデバイスとデータを交換することを可能にする。
【００２０】
[0030]図３は、本発明のいくつかの実施形態による、典型的なソフトウェア構成を示す。クライアントシステム１２は、仮想マシン（ＶＭ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）のセットを公開するように構成される。図３は、ただ１つのゲストＶＭ３２を示しているが、いくつかの実施形態は、並行に動作する複数のＶＭ（例えば数百）をホストすることができる。それぞれの仮想マシンは、実際の物理マシン／コンピュータシステムのエミュレーションを備え、オペレーティングシステムおよび様々なソフトウェアアプリケーションを実行することができる。図３に示されるような実施形態は、独自の、私的な、および／もしくは機密のデータを盗もうと試みるソフトウェア、またはクライアントシステム１２を乗っ取り、ボットネットメンバに変換することを試みるソフトウェアなどの、悪意のあるソフトウェアからクラウドコンピューティングの顧客を保護するために使用されることが可能である。このような実施形態において、クライアントシステム１２は、クラウドサービスプロバイダのサーバコンピュータシステムを表すことができる。他の例示的な実施形態において、クライアントシステム１２は、パーソナルコンピュータまたは携帯電話などのユーザの私的デバイスを表す。このようなデバイスはしばしば、ハードウェア仮想化を用いて、例えば、ソフトウェアの携帯性を向上させ、またはセキュリティを強化する。さらに別の例示的な実施形態において、クライアントシステム１２は、ハニーポットとして構成されてよい。このような実施形態において、クライアントシステム１２は、例えば、１つはウェブサーバになりすまし、もう１つは企業ネットワークに接続されたパーソナルコンピュータになりすますなどして、複数の仮想マシンを公開することができる。
【００２１】
[0031]いくつかの実施形態において、ハイパーバイザ３０は、クライアントシステム１２上で実行し、ハイパーバイザ３０は、仮想プロセッサおよび仮想メモリ管理ユニットなどの複数の仮想化されたデバイスを作り出すこと、または動作可能にすること、ならびにこのような仮想化されたデバイスを、クライアントシステム１２の本物の物理デバイスの代用としてソフトウェアに提示することを行うように構成されたソフトウェアを備える。このような動作は一般に、仮想マシンを公開することとして当技術分野で知られる。ハイパーバイザ３０はさらに、複数の仮想マシンがホストシステム１２のハードウェアリソースを共有することを可能にし、その結果、それぞれのＶＭは独立して動作し、クライアントシステム１２上で実行する、並行に実行している他のＶＭを意識しない。普及しているハイパーバイザの例は、中でも、ＶＭｗａｒｅ  Ｉｎｃ．のＶＭｗａｒｅ  ｖＳｐｈｅｒｅ（商標）、およびオープンソースのＸｅｎハイパーバイザを含む。
【００２２】
[0032]図３に示される例示的な構成において、ゲストＶＭ３２は、ゲストオペレーティングシステム（ＯＳ：ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）３４、およびアプリケーション３６ａ〜３６ｂのセットを実行する。ゲストＯＳ３４は、中でも、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、ＭａｃＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、ｉＯＳ（登録商標）、またはＡｎｄｒｏｉｄ（商標）などの、広く利用可能な任意のオペレーティングシステムを含むことができ、ＶＭ３２の中で実行するアプリケーションと、ゲストＶＭ３２の仮想化されたハードウェアデバイスとの間のインターフェースを提供する。アプリケーション３６ａ〜３６ｂは、中でも、ワードプロセッサ、表計算アプリケーション、画像アプリケーション、ブラウザ、ソーシャルメディアアプリケーション、および電子通信アプリケーションなどの、任意のユーザアプリケーションを総称的に表す。ゲストＯＳ３４およびアプリケーション３６ａ〜３６ｂは本明細書において、ゲストＶＭ３２の中で実行すると言われており、すなわちこれらは、ＶＭ３２の仮想プロセッサ上で実行する。対照的に、ハイパーバイザ３０は、ゲストＶＭ３２の外部で実行すると言われる。
【００２３】
[0033]いくつかの実施形態において、ゲストＶＭ３２を公開することは、ゲストＶＭ３２の動作を管理するように、ハイパーバイザ３０によって使用されるデータ構造を構成することを含む。このような構造は本明細書において、仮想マシン状態オブジェクト（ＶＭＳＯ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｓｔａｔｅ  ｏｂｊｅｃｔ）と称される。例示的なＶＭＳＯは、Ｉｎｔｅｌ（登録商標）プラットフォーム上の仮想マシン制御構造（ＶＭＣＳ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｃｏｎｔｒｏｌ  ｓｔｒｕｃｔｕｒｅ）、およびＡＭＤ（登録商標）プラットフォーム上の仮想マシン制御ブロック（ＶＭＣＢ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｃｏｎｔｒｏｌ  ｂｌｏｃｋ）を含む。いくつかの実施形態において、プロセッサ１６は、メモリ内の領域をそれぞれのＶＭＳＯと関連付け、その結果、ソフトウェアは、メモリアドレスまたはポインタ（例えば、Ｉｎｔｅｌ（登録商標）プラットフォーム上のＶＭＣＳポインタ）を使用して、具体的なＶＭＳＯを参照することができる。
【００２４】
[0034]それぞれのＶＭＳＯは、クライアントシステム１２上で公開される個々の仮想化されたプロセッサの現在の状態を表すデータを含むことができる。マルチスレッド構成において、ハードウェアプロセッサ１６は複数のコアを動作させることができ、それぞれのコアは複数の論理プロセッサをさらに備え、それぞれの論理プロセッサは、他の論理プロセッサの実行スレッドを独立して、およびこれらのプロセッサと並行に、処理することができる。複数の論理プロセッサは、例えば共通のＭＭＵといった、いくつかのハードウェアリソースを共有することができる。マルチスレッド化された実施形態において、別個のＶＭＳＯは、それぞれの別個の論理プロセッサのためにセットアップされてよい。それぞれのＶＭＳＯは、ゲスト状態エリアおよびホスト状態エリアを有することができ、ゲスト状態エリアは、個々のＶＭの（すなわち、個々の仮想化されたプロセッサの）ＣＰＵの状態を保持し、ホスト状態エリアは、ハイパーバイザ３０の現在の状態を格納する。いくつかの実施形態において、ＶＭＳＯのゲスト状態エリアは、中でも、個々のＶＭの仮想プロセッサの制御レジスタ（例えば、ＣＲＯ、ＣＲ３等）の内容、命令ポインタ（例えば、ＲＩＰ）、汎用レジスタ（例えば、ＥＡＸ、ＥＣＸ等）、およびステータスレジスタ（例えば、ＥＦＬＡＧＳ）を含む。ＶＭＳＯのホスト状態エリアは、個々のＶＭに対するアドレス変換のために構成されるページテーブルへのポインタ（例えば、Ｉｎｔｅｌ（登録商標）プラットフォーム上のＥＰＴポインタ）を含むことができる。
【００２５】
[0035]いくつかの実施形態において、プロセッサ１６は、ＶＭＳＯの一部を専用の内部レジスタ／キャッシュに格納してよいが、個々のＶＭＳＯの他の部分は、メモリ１８に常駐してよい。いつでも、（本明細書において、現在のＶＭＳＯと称される）多くても１つのＶＭＳＯが論理プロセッサ上にロードされてよく、個々の論理プロセッサを現在制御している仮想マシンを識別する。プロセッサ１６が、ＶＭ内のソフトウェア（例えば、図３のアプリケーション３６ａ）を実行することから、個々のＶＭの外部のソフトウェア（例えば、ハイパーバイザ３０）を実行することに切り替えるとき、プロセッサ１６は、現在のプロセッサの状態を、現在のＶＭＳＯのゲスト状態エリアに保存し、ＶＭＳＯのホスト状態をプロセッサにロードすることができる。逆に、プロセッサ１６が、ＶＭの外部のソフトウェアを実行することから、個々のＶＭ内のソフトウェアを実行することに切り替えるとき、プロセッサ１６は、現在のプロセッサの状態を、ＶＭＳＯのホスト状態エリアに保存し、現在のＶＭＳＯのゲスト状態をプロセッサ１６にロードすることができる。
【００２６】
[0036]いくつかの実施形態において、イントロスペクションエンジン４０は、個々のクライアントシステム上で公開されるすべてのゲストＶＭの外部で実行する。イントロスペクションは、ハードウェア仮想化に関する当技術分野において確立した用語であり、個々のＶＭの外部の立場から、仮想マシンの動作の様々な態様についての情報を集めることを総称的に表す。本発明のいくつかの実施形態において、イントロスペクションは、中でも、ゲストＶＭ３２の中で実行する処理をモニタリングすること、ゲストＶＭ３２の中で一定のＯＳ機能またはプロセッサ命令を実行しようとする試みを傍受すること、ゲストＶＭ３２によって使用されるメモリページにアクセスしようとする試みを傍受すること、およびゲストＶＭによって使用される固有のデータが格納されるメモリ１８の中の場所を判断することなどの動作を含む。エンジン４０はハイパーバイザ３０に組み込まれてよく、またハイパーバイザ３０とは別個のおよび独立のソフトウェア構成要素として配信されてもよいが、ハイパーバイザ３０と実質的に類似のプロセッサ特権レベルで実行する。単一のエンジン４０は、クライアントシステム１２上で実行する複数のＶＭをイントロスペクトするように構成されてよい。エンジン４０は、ハイパーバイザ３０と協力して、クライアントシステム１２に出入りする通信を解読することができる。さらに具体的には、エンジン４０は、下記に詳述するように、ゲストＶＭ３２によって送られた、または受け取られたメッセージを暗号化するために使用される暗号化キーをメモリ１８の中にほぼ配置するように構成されてよい。
【００２７】
[0037]クライアントシステム１２上で実行するソフトウェアは、ゲストＶＭ３２に出入りする通信を傍受すること、およびイントロスペクションエンジン４０と情報を交換することを行うように構成されたネットワークフィルタ４２をさらに備えることができる。フィルタ４２は、例えば、ＴＬＳプロトコルを遵守する接続のためのポート４４３といった、特定のネットワークポートをリッスンすることができる。フィルタ４２は、ＶＭ３２の内部または外部で実行することができる。ＶＭ３２の外部で実行するとき、単一のネットワークフィルタは、クライアントシステム１２上で実行する複数のＶＭに出入りする通信をモニタリングすることができる。このようなモニタリングを実現するために、ハイパーバイザ３０は、ネットワークフィルタ４２を介してすべての通信を、クライアントシステム１２に、および／またはクライアントシステム１２からルーティングすることができる。フィルタ４２は、ネットワークアダプタ２６を排他的に制御することができ、例えば、Ｉｎｔｅｌ（登録商標）のＶＴ−ｄ（登録商標）技術を使用して実装され得る構成である。複数のＶＭをモニタリングするとき、フィルタ４２は、ＶＭ固有のパケットの待ち行列を維持することができ、すなわち、それぞれの傍受されたネットワークパケットを発信元および／または宛先のＶＭと関連付けることができる。
【００２８】
[0038]いくつかの実施形態において、イントロスペクションエンジン４０は、ゲストＶＭ３２の中でソフトウェアの実行中に発生する様々なイベントを検知することによって動作する。イントロスペクションエンジン４０によって検知される例示的なイベントは、例えば、プロセッサ例外および／もしくは割込み、ゲストＯＳ３４の特定の機能を実行しようとする試み、プロセッサ特権（例えば、システムコール）の変更、特定の記憶場所にアクセスすること（特定の記憶場所から読み込むこと、特定の記憶場所に書き込むこと、ならびに／または特定の記憶場所から実行すること）を行おうとする試み等を含む。イントロスペクションエンジン４０は、下記にさらに説明されるように、ゲストＶＭ３２の中で実行する様々なソフトウェア構成要素のメモリアドレスを判断するようにさらに構成されてよい。
【００２９】
[0039]いくつかの実施形態は、ゲストＶＭ３２の中で実行するユーティリティエージェント４４をさらに備え、エージェント４４は、イントロスペクションエンジン４０と協力して、ゲストＶＭ３２の中で発生するイベントを検知し、分析する。エージェント４４は、例えば、ゲストＯＳ３４のプロセッサ特権レベル（例えば、リング０のカーネルモード）で実行するドライバを備えることができ、ページ障害およびハードウェア割込みなどの、様々なプロセッサイベントに対するハンドラとして登録されてもよい。このような構成の１つの長所は、内部のエージェントがゲストＯＳ３４の機能すべてにアクセスできるので、情報の中には個々のＶＭの外部よりも、ＶＭの内部からの方がさらに取得しやすくなるものがあることである。短所は、ゲストＶＭ３２の中で実行するエージェントが、個々のＶＭの中で実行する悪意のあるソフトウェアに対して潜在的に脆弱であることである。このリスクを緩和するために、いくつかの実施形態は、ゲストＶＭ３２の内部にほんの一時的にエージェント４４を投入してもよく、エージェント４４が実行を完了した後にエージェント４４を消去してもよい。
【００３０】
[0040]ゲストＶＭ３２の中で発生するイベントを検知するために、イントロスペクションエンジン４０は、仮想化の技術分野で知られる任意の方法を用いることができる。方法の重要なカテゴリは、特定の記憶場所にアクセスしようとする試みを特定のイベントの発生の指標として使用する。このようなメモリアクセスの試みを検知するために、いくつかの実施形態は、試みが個々の許可に違反するようにメモリアクセス許可をセットアップする。違反は次に、イントロスペクションエンジンおよび／またはユーティリティエージェント４４によって傍受される。仮想マシンは典型的には、ゲスト物理メモリとして当技術分野でも知られる、仮想化された物理メモリで動作する。仮想化された物理メモリは、例えば、それぞれのＶＭに固有のアドレスの連続した空間として、実際の物理メモリ１８の抽象的表現を含み、前記空間の一部は、物理メモリ１８および／または物理的なストレージデバイス２４の中のアドレスにマッピングされる。現在のハードウェア仮想化プラットフォームにおいて、このようなマッピングは典型的には、専用のデータ構造およびプロセッサ１６によって制御されるメカニズムを介して実現され、第２のレベルのアドレス変換（ＳＬＡＴ：ｓｅｃｏｎｄ  ｌｅｖｅｌ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ）として知られる。普及しているＳＬＡＴの実装形態は、Ｉｎｔｅｌ（登録商標）プラットフォーム上の拡張ページテーブル（ＥＰＴ：ｅｘｔｅｎｄｅｄ  ｐａｇｅ  ｔａｂｌｅ）、およびＡＭＤ（登録商標）プラットフォーム上の高速仮想化指標付け（ＲＶＩ：ｒａｐｉｄ  ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ｉｎｄｅｘｉｎｇ）／入れ子ページテーブル（ＮＰＴ：ｎｅｓｔｅｄ  ｐａｇｅ  ｔａｂｌｅ）を含む。このようなシステムにおいて、仮想化された物理メモリは、当技術分野でページとして知られる単位に区分され、ページは、ＳＬＡＴを介して物理メモリに個別にマッピングされた、仮想化された物理メモリの最小単位を表し、すなわち、物理メモリと仮想化された物理メモリの間のマッピングはページの粒度によって行われる。すべてのページは、典型的には、例えば、４キロバイト、２メガバイト等の所定のサイズを有する。仮想化された物理メモリをページに区分することは、通常、ハイパーバイザ３０によって構成される。いくつかの実施形態において、ハイパーバイザ３０は、ＳＬＡＴ構造、したがって物理メモリと仮想化された物理メモリの間のマッピングも構成する。いくつかの実施形態において、ＳＬＡＴデータ構造への（例えば、ページテーブルへの）ポインタは、個々の仮想マシンのＶＭＳＯに格納される。物理メモリアドレスへの仮想化された物理メモリアドレスの実際のマッピング（変換）は、クライアントシステム１２のトランスレーションルックアサイドバッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）内の物理メモリアドレスを探索することを含むことができる。いくつかの実施形態において、アドレス変換は、ページテーブルおよび／またはページディレクトリのセットの中の連続的なアドレス探索のセットを含むページウォークを行うこと、ならびにページのオフセットを個々のページに関連したアドレスに追加するこ��などの計算を行うことを含む。
【００３１】
[0041]図４は、図３に示されるような実施形態におけるメモリアドレスのこのようなマッピングを示す。ハイパーバイザ３０による公開に続いて、ゲストＶＭ３２は、仮想化された物理メモリ空間２１８を、ゲストＶＭ３２自体の物理メモリ空間とみなす。ゲストＶＭ３２の中で実行するソフトウェアオブジェクト（例えば、アプリケーション３６ａ）は、ゲストＯＳ３４によって仮想メモリ空間３１８を割り当てられる。ソフトウェアオブジェクトが、空間３１８ａの例示的なメモリページ５０ａの内容にアクセスしようと試みるとき、ページ５０ａのアドレスは、ゲストＯＳ３４によって構成され、制御されるページテーブルに従って、ゲストＶＭ３２の仮想化されたプロセッサによって、仮想化された物理メモリ空間２１８のページ５０ｂのアドレスに変換される。ページ５０ｂのアドレスは、ハイパーバイザ３０によって構成されるＳＬＡＴを使用して、物理的なプロセッサ１６によって、物理メモリ１８の中のページ５０ｃのアドレスにさらにマッピングされる。
【００３２】
[0042]仮想アドレス空間２１８は一般に、当技術分野においてゲスト物理メモリとして知られ、このような１つのメモリ空間の中のアドレスは、ゲスト物理アドレス（ＧＰＡ：ｇｕｅｓｔ  ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）と呼ばれる。アドレス空間３１８は通常、ゲスト仮想メモリと称され、ゲスト仮想アドレス（ＧＶＡ：ｇｕｅｓｔ−ｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ）を収める。物理メモリ１８の中のアドレスは通常、ホスト物理アドレス（ＨＰＡ：ｈｏｓｔ−ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）と呼ばれる。図４の中の５２などのアドレス変換／マッピングは、したがって、ＧＶＡ−ＧＰＡ変換と称される。対照的に５４などのアドレス変換は一般に、ＧＰＡ−ＨＰＡ変換として知られる。
【００３３】
[0043]いくつかの実施形態において、ハイパーバイザ３０は、物理メモリ１８による表現を含むハイパーバイザ３０自体の仮想メモリ空間４１８をセットアップし、変換メカニズム（例えば、ページテーブル）を用いて、空間４１８の中のアドレスを物理メモリ１８の中のアドレスにマッピングする。図４において、このような例示的なマッピングは、仮想空間４１８の中のページ５０ｆのアドレスをページ５０ｃの物理アドレスに変換し、ページ５０ｄのアドレスをページ５０ｅの物理アドレスに変換する。このようなマッピングは、ハイパーバイザ３０のプロセッサ特権レベルで実行する任意のソフトウェアオブジェクトが、クライアントシステム１２上で動作する様々なＶＭの中で実行するソフトウェアオブジェクトに属すメモリページを管理できるようにする可能性がある。具体的には、メモリイントロスペクションエンジン４０はこのようにして、ゲストＶＭ３２の中で実行する任意のプロセスによって使用される物理メモリページへのアクセスを列挙し、読み込み、書き込み、制御することができる。
【００３４】
[0044]いくつかの実施形態において、ゲストＶＭ３２の中で発生するイベントを検知することは、イントロスペクションエンジン４０がハイパーバイザ３０と協力して、ＳＬＡＴデータ構造の中のメモリアクセス許可を設定することを含む。このような機能は、プラットフォーム固有であってよいが、アクセス許可は典型的には、ページの粒度で設定する。例えば、仮想化をサポートするＩｎｔｅｌ（登録商標）プラットフォームにおいて、それぞれのメモリページのＥＰＴエントリは、個々のページがそれぞれ、読み込まれてよいか、書き込まれてよいか、および実行されてよいかを示すアクセス許可ビットのセットを含む。特定のメモリページにアクセスしようとする試みが、個々のメモリページに対して設定されたアクセス許可に違反するとき、個々の試みは、例外、または仮想マシン終了イベント（Ｉｎｔｅｌ（登録商標）プラットフォームにおけるＶＭＥｘｉｔ）などの、プロセッサイベントをトリガすることができる。プロセッサイベントに応答して、プロセッサ１６は、個々のＶＭの外部でイベントハンドラルーチンを実行することに切り替えることができ、これは、イントロスペクションエンジン４０が個々のアクセス違反の発生を検知することを可能にする。１つの代替実施形態において、メモリアクセス違反は、プロセッサ例外（例えば、仮想化例外、すなわちＩｎｔｅｌ（登録商標）プラットフォーム上の＃ＶＥ）をトリガすることができる。このようなプロセッサイベントに応答して、プロセッサ１６は、個々のＶＭの中でイベントハンドラルーチンを実行することに切り替えることができ、すなわち個々のＶＭを終了させない。図４に示されるようなユーティリティエージェント４４を有する実施形態において、エージェント４４は、仮想化例外ハンドラとして登録されてよく、それによりメモリアクセス違反を検知する。
【００３５】
[0045]いくつかの実施形態において、メモリページのＳＬＡＴエントリは、個々のページがアクセスされたかどうか、および／または個々のページが書き込まれたかどうかを示すフィールド（例えばビット）をさらに含む。このようなビットは、典型的には、アクセスビットおよびダーティビット（ａｃｃｅｓｓｅｄ  ａｎｄ  ｄｉｒｔｙ  ｂｉｔ）と呼ばれる。いくつかの実施形態は、下記にさらに示すように、アクセスビットおよび／またはダーティビットを使用して、暗号化キーを収める可能性があるメモリページを識別する。
【００３６】
[0046]本発明のいくつかの実施形態において、イントロスペクションエンジン４０は、ゲストＶＭに出入りする暗号化された通信をモニタリングするように構成される。通信セッションは典型的には当事者間の事前のネゴシエーションを含み、その後に、暗号化されたメッセージの実際の交換が続く。当技術分野において前者は通常、ハンドシェイクと呼ばれる一方、メッセージの内容は一般にペイロードとして知られる。ハンドシェイクは、中でも、暗号法（すなわち、暗号化アルゴリズム）および暗号化キーを導出するための材料を指定する交換のセットを含む。例示的な暗号法は、ＣｈａＣｈａ２０などの、先進的暗号化標準（ＡＥＳ：Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）由来のブロック暗号法およびストリーム暗号法を含む。いくつかの実施形態において、ハンドシェイクは、固有のプロトコルに従って行われる実際のキー交換、および／またはいずれか一方もしくは両方の当事者のアイデンティティを照合するための追加のステップを含むことができる。暗号法に応じて、暗号化キーを導出するための材料は、乱数のセット、通信する当事者の公開鍵等を含むことができる。
【００３７】
[0047]セキュア通信プロトコルの具体例は、例えば、インターネット技術タスクフォース（ＩＥＴＦ：Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）のネットワーク作業部会のリクエストフォーコメンツ（ＲＦＣ：Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ）５２４６の中で説明される、トランスポート層セキュリティ（ＴＬＳ：Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）プロトコルである。ＴＬＳプロトコルは現在、大多数のブラウザ、ｅ−コマース、およびセキュア電子バンキングアプリケーションによって使用される。ＴＬＳセッションは、中でも、一意のセッション識別子、暗号法の仕様、および通信する当事者間で共有されるマスタシークレットを含む。マスタシークレットは通常、ハンドシェイク中に交換される材料を使用して、それぞれの当事者によって別々に計算される。ＴＬＳハンドシェイクプロトコルは、以下のステップ／ステージを含む。
【００３８】
ａ）通信のための暗号パラメータに同意するために、ハローメッセージを交換する。クライアントからサーバに送られるＣｌｉｅｎｔ  Ｈｅｌｌｏメッセージは、サポートされた暗号法のリストを示し、中でも、クライアントが提供した乱数を含むことができる。サーバからクライアントに送られるＳｅｒｖｅｒ  Ｈｅｌｌｏメッセージは、クライアントによって提案されたものから暗号法の選択肢を示し、サーバが提供した乱数を含むことができる。
【００３９】
ｂ）当事者の認証を行う。サーバは、サーバのアイデンティティを確認する証明書を送ることができ、さらにクライアントからの証明書をリクエストすることができる。このステップは、クライアントからのＣｌｉｅｎｔＣｅｒｔｉｆｉｃａｔｅメッセージ、およびサーバからのＳｅｒｖｅｒＣｅｒｔｉｆｉｃａｔｅメッセージを含むことができる。
【００４０】
ｃ）クライアントおよびサーバが、共有の秘密（例えば、プリマスタシークレット）に同意すること、または計算することを可能にするために、必要な暗号パラメータを交換する。暗号パラメータは、キーのセット、または選ばれた暗号法による他の情報を含むことができる。例えば、本フェーズ中に交換されるキーは、クライアントおよびサーバの公開暗号キー（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ等）であってよい。このステップは、クライアントによって送信されるＣｌｉｅｎｔＫｅｙＥｘｃｈａｎｇｅメッセージ、および／またはサーバによって送信されるＳｅｒｖｅｒＫｅｙＥｘｃｈａｎｇｅメッセージを含むことができる。Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ（ＲＳＡ）が、サーバ認証およびキー交換に対して使用されるとき、プリマスタシークレットはクライアントによって生成され、サーバの公開鍵に従って暗号化され、ＣｌｉｅｎｔＫｅｙＥｘｃｈａｎｇｅメッセージの一部としてサーバに送られる。サーバは次に、サーバの秘密鍵を使用して、プリマスタシークレットを解読する。Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎが使用されるとき、それぞれのサイドは、取り決められたキーに従って、それぞれのサイド自体のプリマスタシークレットを計算する。
【００４１】
ｄ）それぞれの送信当事者が今後は、同意された暗号パラメータを使用してセッションの出て行くメッセージを暗号化するということを示すＣｈａｎｇｅＣｉｐｈｅｒＳｐｅｃメッセージを交換する。
【００４２】
ｅ）セッションハンドシェイクを正式に終えるために、Ｆｉｎｉｓｈｅｄメッセージ（ＣｌｉｅｎｔＦｉｎｉｓｈｅｄおよびＳｅｒｖｅｒＦｉｎｉｓｈｅｄ）を交換する。クライアントおよびサーバが、正しいセキュリティパラメータ（例えば、共有の秘密）をこれらのピアが受け取ったことおよび／または計算したこと、ならびに攻撃者によって改ざんされることなくハンドシェイクが発生したことを照合できるようにするために、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄおよびＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージは暗号化される。それぞれの受け取る当事者は、受け取ったＦｉｎｉｓｈｅｄメッセージを解読しようとしなければならず、解読に成功したことは、ハンドシェイクに成功したことを示す。
【００４３】
[0048]ＴＬＳプロトコルにおいて、それぞれの当事者は、例えば、プリマスタシークレットに従ってハンドシェイク中に交換された暗号パラメータ、ならびにクライアントが提供した乱数およびサーバが提供した乱数に従ってマスタシークレットを計算する。マスタシークレットから、それぞれのサイドは次に、セッションキーのセットを判断することができる。用語「セッションキー」は、現在のセッション中に通信を暗号化および／または解読するために使用される暗号パラメータ値を総称的に表すために本明細書で使用される。例示的なセッションキーは、中でも、プリマスタシークレット、マスタシークレット、クライアントおよびサーバサイドの書込みキー、初期化ベクトル／ノンス、ならびにメッセージ認証コード（ＭＡＣ：ｍｅｓｓａｇｅ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ）を含む。対称暗号を使用する実施形態において、暗号化キーと解読キーは同一なので、暗号化キーの知識は解読には十分である。非対称暗号において、暗号化キーおよび解読キーは異なる。したがって、どのようにセッションキーが使用されるかは、取り決められた暗号法に依存する。
【００４４】
[0049]本発明のいくつかの実施形態は、現在のセッション中に暗号化のために使用されるセッションキーは、ハンドシェイクのＦｉｎｉｓｈｅｄメッセージを送り出す前にそれぞれのサイドで計算されなければならないという観察に依存する（そうでなければ、個々のメッセージが暗号化されることはない）。さらに、セッションキーを導出するための材料は、例えば、ＳｅｒｖｅｒＨｅｌｌｏ、ＣｌｉｅｎｔＫｅｙＥｘｃｈａｎｇｅ、およびＳｅｒｖｅｒＫｅｙＥｘｃｈａｎｇｅメッセージの一部としてといった、ハンドシェイクの一部としてそれぞれのサイドによって受け取られる。したがって、セッションキーは、ハンドシェイク中のある時にクライアントシステムのメモリ内に現れる可能性がある。本発明のいくつかの実施形態は、ハンドシェイクのタイミングを使用して、セッションキーのおよその記憶場所を判断する。
【００４５】
[0050]図５は、本発明のいくつかの実施形態による、イントロスペクションエンジン４０によって行われるステップの例示的なシーケンスを示す。一連のステップ５０２〜５０４において、エンジン４０は、ネットワークフィルタ４２と協力し、クライアントシステム１２からリモートの当事者（例えば、図１のコンテンツサーバ１３）への間を送信されるハンドシェイクメッセージを検知することができる。１つの例において、接続リクエストは、例えばブラウザといったゲストＶＭ３２の中で実行するアプリケーションから来ることがあり、ＴＬＳセッション、ＳＳＨセッション、ＶＰＮセッション等などの暗号化された通信セッションを開始する意図を示すことがある。したがって、接続リクエストは、サーバ１３へのハンドシェイクメッセージ（例えば、ＣｌｉｅｎｔＨｅｌｌｏ）を含むことがある。別の例において、検知されたハンドシェイクメッセージは、クライアントシステム１２から受け取られたＣｌｉｅｎｔＨｅｌｌｏに応答して送信されたサーバ１３からのメッセージ（例えば、ＳｅｒｖｅｒＨｅｌｌｏ）を含む。
【００４６】
[0051]ハンドシェイクメッセージが検知されると、ステップ５０６において、イントロスペクションエンジン４０は、セッションＩＤなどのハンドシェイクパラメータのセット、およびセッションに対して使用されることになる暗号法の指標を抽出することができる。ＴＬＳ接続をモニタリングする実施形態において、ステップ５０６は、サーバが提供した乱数および／またはクライアントが提供した乱数などの、暗号パラメータをさらに抽出することができる。イントロスペクションエンジン４０は次に、ネットワークフィルタ４２に命令して、ハンドシェイクメッセージをその意図された受け手のＶＭ（例えば、図３のゲストＶＭ３２）に転送することができる。
【００４７】
[0052]ステップ５０８において、イントロスペクションエンジン４０は、ゲストＶＭ３２の最適化されたメモリスナップショットを取得することができる。メモリスナップショットは、個々のＶＭによって使用されるメモリページのセットの内容のコピーを含む。いくつかの実施形態において、最適化されたスナップショットは、セッションキーを収める可能性が最も高いメモリページのセットの内容、または現在の通信セッションのセッションキーを導出するために使用される少なくとも暗号パラメータ値を含む。最適化されたスナップショットを取得するための例示的な方法は、下記にさらに説明される。
【００４８】
[0053]ステップ５１０は、ネットワークフィルタ４２から個々のペイロードのコピーを取得することによって、現在のセッションの暗号化されたペイロードを得ることができる。いくつかの実施形態において、ネットワークフィルタ４２は、例えば、セッションＩＤおよび／または仮想マシンによって索引をつけられた、複数のデータ待ち行列を維持するように構成される。したがって、ネットワークフィルタ４２は、個々のペイロードが、他の通信の中に散りばめられた複数のパケットに分割されるときでさえ、セッションの暗号化されたペイロードを明確におよび一貫して復元する。次にステップ５１２において、イントロスペクションエンジン４０は、得られた最適化されたメモリスナップショット、ハンドシェイクパラメータ、および暗号化されたペイロードをセキュリティサーバ１５に分析のために送信することができる。
【００４９】
[0054]図６は、ゲストＶＭ３２の最適化されたメモリスナップショットを取得するために、イントロスペクションエンジン４０によって行われるステップの例示的なシーケンスを示す。セッションキーのおよその記憶場所を導出するために、本発明のいくつかの実施形態は、個々のセッションキーが生成された時間とおよそ一致する時間間隔の中で内容が変化したメモリページのセットを識別する。
【００５０】
[0055]内容が最近変化したメモリページ、すなわち最近書き込まれたページは、当技術分野で知られた任意の方法を使用して識別されることが可能である。１つの例において、イントロスペクションエンジン４０は、ゲストＶＭ３２と関連付けられたＳＬＡＴデータ構造の中で、ゲストＶＭ３２によって使用されるメモリページのセットを書込み不能としてマークすることができる。このようなページの内容を修正しようとするその後の任意の試みは次に、メモリアクセス違反とみなされるので、イントロスペクションエンジン４０および／またはユーティリティエージェント４４によってその後傍受されるプロセッサイベント（例えば、ＶＭ  Ｅｘｉｔすなわち仮想化例外）をトリガする。イベントを傍受することに応答して、エンジン４０は個々のページを書込み可能としてマークし、個々のＶＭを再開して、個々の書込みが続行できるようにすることができる。このような手法において、エンジン４０は、最終的に「ダーティ」メモリページのリストを作成することができ、この内容は、所望の最適化されたメモリスナップショットとみなされる。
【００５１】
[0056]上記のシナリオは多少非効率的であり、計算的にコストがかかる。いくつかの最適化が、選ばれたハードウェアプラットフォーム上で可能である。例えば、アクセスビットおよび／またはダーティビットをサポートするプラットフォーム上で、いくつかの実施形態は、ゲストＶＭ３２によって使用されるメモリページのページテーブルエントリ（Ｉｎｔｅｌ（登録商標）プラットフォーム上のＥＰＴエントリ）のダーティビットをリセットし、個々のページが書き込まれたかどうかを判断するために、その後のある時点でダーティビットの値をチェックすることができる。このメカニズムは、さらに最適化されることが可能である。例えば、Ｉｎｔｅｌ（登録商標）プロセッサの一定の世代は、ページ変更ロギング（ＰＭＬ：ｐａｇｅ  ｍｏｄｉｆｉｃａｔｉｏｎ  ｌｏｇｇｉｎｇ）と呼ばれる機能を有し、この機能は、内容が変化したページのリストを、メモリイントロスペクションエンジン４０にとってアクセス可能な記憶場所に自動的にエクスポートする。
【００５２】
[0057]別の考えられる最適化戦略は、いくつかのハイパーバイザ（例えば、Ｘｅｎ（登録商標））が使用するライブマイグレーション機能を使用して、仮想マシンを効率的に移行し、および／または仮想マシンのクローンを作る。個々の機能は、書き込まれたページを自動的に追跡し、スケジュールに従ってこのようなページのリストをエクスポートする、ログダーティ基本要素（ｌｏｇ−ｄｉｒｔｙ  ｐｒｉｍｉｔｉｖｅ）のセットを中心に構築される。
【００５３】
[0058]図６に示されたステップのシーケンスは、第１の種類のセッションイベントと第２の種類のセッションイベントとの間の時間間隔の中で修正されたページを識別する。本明細書において、セッションイベントは、例えば上述のように、ＴＬＳプロトコルに関連して、通信プロトコルの様々なステージを表す。例示的なセッションイベントは、例えば、特定の通信セッションの一部を形成するメッセージ（例えば、クライアントシステム１２とサーバ１３の間で送信されるハンドシェイクメッセージ、個々のセッションの暗号化されたペイロードの一部を収めるメッセージ等）を送ることおよび／または受け取ることを含む。第１の種類のイベント（ステップ５２２〜５２４）を検知すると、ページ変更のモニタリングをオンに切り替える（ステップ５２６）。いくつかの実施形態において、ステップ５２６は、ゲストＶＭ３２の動作を中断すること、ゲストＶＭ３２によって使用されるメモリページに対応するＳＬＡＴエントリのダーティビットをリセットすること、およびゲストＶＭ３２を再開することを含む。いくつかの実施形態において、書込みがないかモニタリングされることになるメモリページのセットは、例えば、現在の通信セッションを行うプロセス（例えば、ブラウザ）によって、または暗号化／解読を処理するプロセス（例えば、Ｗｉｎｄｏｗｓ（登録商標）におけるＬＳＡＳＳ．ＥＸＥ）によって使用されるページのセットに絞り込まれてよい。メモリイントロスペクションエンジン４０は、スレッドおよびプロセスを管理するためにゲストＯＳ３４によって使用されるデータ構造を見て回ることによって、個々のプロセス／アプリケーションによって使用されるページを識別することができる。このようなメモリページを識別するタスクは、ゲストＶＭ３２の中で実行するユーティリティエージェント４４と協力することによってさらに簡単になることがあり、エージェント４４は典型的には、エンジン４０よりさらに多くの情報にアクセスすることができる。
【００５４】
[0059]例えば、個々のセッションの別のハンドシェイクメッセージの受信といった、第２の種類のセッションイベントの発生を検知すると（ステップ５２８〜５３０）、書込みがないかモニタリングすることはオフに切り替えられる（ステップ５３４）。ステップ５３２は、メモリスナップショットを取る間にメモリへの変更が発生するのを防ぐために、ゲストＶＭ３２の実行を中断することができる。ステップ５３６〜５３８のさらなるシーケンスにおいて、エンジン４０は、第１のセッションイベントと第２のセッションイベントの間に書き込まれたページを識別し、最適化されたメモリスナップショットなどのページの内容をコピーする。さらなるステップ５４０において、イントロスペクションエンジン４０は、ゲストＶＭ３２を再開することができる。
【００５５】
[0060]１つの代替実施形態において、ゲストＶＭ３２の実行は、最適化されたメモリスナップショットを採取する間、中断されない。このような中断はシステムを減速させ、ユーザの体感に影響を与える可能性がある。さらに、ゲストＶＭ３２を中断することは、個々のＶＭがモニタリングされているということを表に出す可能性があるので、セキュリティのためには望ましくないことがある。セッションキーは典型的には、一度だけ書き込まれ、メモリ内をあちこち移動することはないので、ゲストＶＭ３２によって使用されるすべてのページの一貫性は要求されない。ダーティページがコピーされる前に現在のセッションが終わらない（したがってキーが消えない）ことが単純に保証されなければならない。ゲストＶＭ３２を停止する代わりに、いくつかの実施形態は、ネットワークフィルタ４２を使用して、ゲストＶＭ３２に出入りする通信のフローを操作する。例えば、フィルタ４２は、メモリスナップショットを採取する間、サーバ１３からゲストＶＭ３２へのデータパケットの配信を遅延させることができる。ゲストＶＭ３２の中で実行するソフトウェアには、遅延はむしろ通常のネットワークレイテンシのように見えることがある。遅延機能を実現するために、いくつかの実施形態は、エンジン４０とネットワークフィルタ４２の間でプロセス間の通知メカニズムを使用して通信する。例えば、エンジン４０は、最適化されたメモリスナップショットの採取に成功したことに応答して、フィルタ４２に通知することができる。次にフィルタ４２は、一定のネットワークパケット（例えば、ＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージのＳｅｒｖｅｒＨｅｌｌｏ）を傍受したことに応答して、エンジン４０に通知することができる。
【００５６】
[0061]セッションキーが典型的にセッションのハンドシェイク部分の間に導出されたという観察に続いて、本発明の様々な実施形態は、様々なハンドシェイクイベントを第１および第２の種類のセッションイベントとして使用する。例えば、いくつかの実施形態において、ページモニタリングをオンに切り替える第１の種類のイベントは、個々のセッションに対するセッションキーを導出するための材料を含むネットワークパケットのネットワークフィルタ４２による傍受を含む。例示的な材料は、中でも、乱数、キー、および共有の秘密を含む。第１の種類のこのような１つの例示的なセッションイベントは、サーバ１３から受け取られるＳｅｒｖｅｒＨｅｌｌｏメッセージである。他の実施形態が使用することもある。第１の種類のイベントに対する他の考えられる選択肢は、ゲストＶＭ３２からのＣｌｉｅｎｔＨｅｌｌｏメッセージ、ＣｌｉｅｎｔＫｅｙＥｘｃｈａｎｇｅメッセージ、およびＳｅｒｖｅｒＫｅｙＥｘｃｈａｎｇｅメッセージを含む。ページモニタリングをオフに切り替える第２の種類のセッションイベントについて、いくつかの実施形態は、ゲストＶＭ３２へ送信され、またはゲストＶＭ３２から送信される暗号化されたメッセージのネットワークフィルタ４２による傍受を使用する。第２の種類のイベントの１つの例は、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージまたはＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージの傍受である。第２の種類のイベントに対する別の考えられる選択肢は、現在のセッションのセッションキーを使用して暗号化されたペイロードの一部を含むパケットの傍受である。
【００５７】
[0062]図５〜図６に関連する上述の例示的な方法は、単一の通信セッションにあてはまる。実際には、複数のセッションは、例えば、（タブを使ったブラウジングでのように）ブラウザの複数のインスタンスによって、または同時に動作する別個のアプリケーションによって、単一のＶＭの中で並行に行われてよい。いくつかの実施形態は、それぞれのセッションに対して別々にダーティページを追跡するように構成される。明瞭さのために、下記の説明は、ＴＬＳセッションのメモリスナップショットを採取する特定のタスクに着目するが、それぞれのスナップショットは、それぞれのセッションのＳｅｒｖｅｒＨｅｌｌｏメッセージと、個々のセッションのＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージとの間で修正されたメモリページを含む。
【００５８】
[0063]セッション固有の最適化されたスナップショットを入手することは、セッションイベントの不定のシーケンスを解決するという追加の課題をもたらす。いくつかの実施形態は、２つの連続的なイベントの間に書き込まれたすべてのページを識別するようにページモニタリングメカニズムを構成する。しかし、このようなイベントは、別個のセッションに属する可能性があり、（図６に関連して上記に使用された用語を借りれば、）第１の種類または第２の種類のイベントの可能性もある。この曖昧さを説明するために、イントロスペクションエンジン４０のいくつかの実施形態は、現在アクティブセッションの包括的なリストを維持し、リストのそれぞれのエントリは、セッションＩＤ、発信元インターネットプロトコル（ＩＰ：ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）アドレス、発信元ポート番号、宛先ＩＰアドレス、宛先ポート番号、および個々のセッションのＳｅｒｖｅｒＨｅｌｌｏメッセージのタイムスタンプなどの情報を含む。エンジン４０は、それぞれのモニタリングされるメモリページに対する少なくとも１つのタイムスタンプを格納する、タイムスタンプの包括的な配列をさらに維持することができる。配列のそれぞれのタイムスタンプは、個々のページが書き込まれた瞬間を指示することが可能であってよい。この理由で、タイムスタンプの配列は本明細書において、ページ変更タイムスタンプ配列と見なされる。
【００５９】
[0064]図７は、複数の並行したＴＬＳセッションを追跡するように構成される実施形態において、メモリイントロスペクションエンジンによって行われるステップの例示的なシーケンスを示す。ステップ５５２は、ページ変更タイムスタンプ配列を初期化する。ステップ５５２は、ページ変更検知メカニズム（例えば、ＰＭＬ、ダーティビットをリセットすること等）を構成することをさらに含むことができる。一連のステップ５５４〜５５６は、ＨｅｌｌｏまたはＦｉｎｉｓｈｅｄの種類のイベントがないかリッスンする。イベントが検知されると、ステップ５５８において、イントロスペクションエンジン４０は、ページ変更検知メカニズムを起動して、ダーティページ、すなわち、Ｈｅｌｌｏメッセージであるか、Ｆｉｎｉｓｈｅｄメッセージであるかに関係なく、以前にイベントが検知されてから内容が変化したメモリページを今識別することができる。ステップ５６０は次に、ダーティページに対応するタイムスタンプが、現在のタイムスタンプに、または今検知されたイベントの発生を指示することが可能なタイムスタンプにアップデートされるように、ページ変更タイムスタンプ配列をアップデートすることができる。個々のイベントが第１の種類のイベント（例えば、ＳｅｒｖｅｒＨｅｌｌｏ）であるとき、ステップ５６４において、エンジン４０は、中でも、セッションＩＤ、発信元および宛先のＩＰアドレスおよびポートを埋める新しいセッションデータ構造を初期化することができる。さらなるステップ５６６は、本明細書において個々のセッションのＨｅｌｌｏタイムスタンプと見なされる現在のＳｅｒｖｅｒＨｅｌｌｏイベントを指示することが可能なタイムスタンプを記録する。
【００６０】
[0065]今検知されたイベントが第２の種類のイベント（例えば、ＣｌｉｅｎｔＦｉｎｉｓｈｅｄ）であるとき、ステップ５７０において、イントロスペクションエンジン４０は、ページ変更タイムスタンプ配列を見て回ることができる。それぞれのページに対して、いくつかの実施形態は、個々のページのページ変更タイムスタンプを、個々のセッションの（すなわち、今検知されたイベントが属するセッションの）Ｈｅｌｌｏタイムスタンプと比較することができる。変更タイムスタンプが、個々のセッションのＨｅｌｌｏイベントの後に個々のページが書き込まれたことを示すとき、エンジン４０は、個々のセッションの最適化されたメモリスナップショットに個々のページを含めることができる。
【００６１】
[0066]図８は、本発明のいくつかの実施形態による解読エンジン６０を含む、セキュリティサーバ１５上で実行する例示的なソフトウェアを示す。それぞれのモニタリングされる通信セッションに対して、エンジン６０は、ハンドシェイクパラメータ７２のセット、最適化されたメモリスナップショット７０、および／または暗号化されたペイロード７４などの、個々のクライアントシステム（例えば、図１のクライアントシステム１２ａ〜１２ｄ）からセッションデータを受け取ることができる。このようなデータは、それぞれのアイテムを特定のクライアントシステム、ＶＭ、および／または通信セッションと明確に関連付ける指標をさらに含むことができる。ハンドシェイクパラメータ７２は、ペイロード７４を暗号化するために使用される暗号法の指標を含むことができる。最適化されたメモリスナップショット７０は、上述のような、クライアントシステムのメモリページの内容のコピーを含む。ペイロード７４は、暗号化された通信（例えば、ネットワークパケット）の一部を含む。
【００６２】
[0067]図９は、本発明のいくつかの実施形態による、解読エンジン６０によって行われるステップの例示的なシーケンスを示す。クライアントシステム１２からセッションデータを受け取ること（ステップ５８２）に応答して、ステップ５８４において、エンジン６０は、個々のセッションの中で使用される暗号法の指標をセッションデータから抽出することができる。解読エンジン６０は次に、暗号法に従って解読手続き／アルゴリズムを選択することができる。次に、一連のステップ５８６〜５８８〜５９０は、例えば、ペイロードの解読が成功裏に実現されるまで、または解読に割り振られた時間が期限切れになるまでといった、完了条件が満たされるまでループの中で繰り返される。
【００６３】
[0068]ペイロードを解読する試みは、暗号の技術分野で知られた任意の方法に従って進めることができる。最適化されたメモリスナップショットを採取するための手続きは、セッションキー、または個々のセッションに対する暗号化キーおよび解読キーを導出するために使用される少なくとも暗号パラメータ値が、個々のメモリスナップショットの内部にある可能性が高くなるように作られた。セッションキーのバイトサイズは演繹的であると考えられてよく、またクライアントシステム１２から受け取られた暗号化パラメータから導出されてもよい。しかし、スナップショット内のセッションキーの正確な場所が知られることはない。したがって、いくつかの実施形態は、試行錯誤してキー素材をサーチする可能性がある。図９に示されるこのような１つの例において、ステップ５８６は、最適化されたメモリスナップショットから候補の解読キーを導出することができる。対称暗号（例えば、ＴＬＳプロトコル）を使用する実施形態において、暗号化キーと解読キーは同一であり、したがって候補の解読キーは、例えばスナップショットのバイトのシーケンスを含むことができ、シーケンスは要求されるバイトサイズを有する。ステップ５８８において、エンジン６０は、候補キーを使用して少なくとも個々のセッションのペイロードの一部の解読を試みることができる。成功したかどうかは、当技術分野で知られた様々な方法を使用して評価されてよい。例えば、いくつかの実施形態は、解読されたメッセージの情報エントロピーを計算する。このような方法は、偽の正または偽の負を生み出すことで知られているが、低エントロピーは典型的には解読が成功したことを示す。
【００６４】
[0069]解読に対する代替アプローチは、既知平文攻撃として当技術分野で知られるものを使用する。このような１つの実施形態は、暗号化されたバージョンの既知のメッセージ、例えば、個々のセッション中に交換される（暗号化された）ＣｌｉｅｎｔＦｉｎｉｓｈｅｄメッセージおよび／またはＳｅｒｖｅｒＦｉｎｉｓｈｅｄメッセージの内容に、解読エンジン６０がアクセスできるということを活用する。このようなメッセージのフォーマットおよびプレーンテキストは演繹的に知られており、ＴＬＳプロトコルに記載されている。
【００６５】
[0070]本発明のいくつかの実施形態は、クライアントシステムとリモートの当事者の間の通信のいくつかまたはすべてを解読することを可能にする。このような通信の例は、セキュアソケットレイヤ（ＳＳＬ：Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）／トランスポートレイヤセキュリティ（ＴＬＳ：Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）接続、セキュアシェル（ＳＳＨ：Ｓｅｃｕｒｅ  Ｓｈｅｌｌ）、仮想プライベートネットワーク（ＶＰＮ：Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）接続、およびオニオンルーティング／匿名ネットワーク接続（例えば、ＴＯＲソフトウェア）を含む、対称または非対称のキーアルゴリズムを使用して暗号化された任意の通信を含む。開示の方法の例示的な用途は、中でも、悪意のあるソフトウェアの検知および分析、侵入検知、ならびに監視を含む。
【００６６】
[0071]例示的な用途において、少なくとも解読システムの一部をホストするコンピュータシステムは、ハニーポットシステムの一部を形成する。ハニーポットは典型的には、悪意のあるソフトウェアをインストールできるようにし、および／または侵入者が、個々のコンピュータシステムのいくつかの態様を制御できるように構成される。悪意のあるソフトウェアおよび侵入者は次に、暗号化されたチャネルを使用して、コマンド＆コントロール（Ｃ＆Ｃ）サーバなどの外部のエンティティと通信することができる。このような通信の解読を可能にすることによって、いくつかの実施形態は、マルウェア、侵入、および／またはハッキング方法に関する研究を容易にすることができる。
【００６７】
[0072]いくつかの実施形態の別の例示的なマルウェア対策の使用は、悪意のある内容がクライアントシステムに入り込む前に、悪意のある内容を検知することを含む。いくつかの先進的なマルウェアの攻撃シナリオにおいて、悪意のあるソフトウェアエージェントは、例えば、電子メール（フィッシング）またはオンライン広告を介して、他の良性のサーバとの暗号化された通信を介してクライアントに到達する。暗号化のために典型的には、エージェントは、マルウェアを示唆する何らかのアクションを行うときに、ホスト上で自身を解凍し、インストールするまで、またはさらにその後まで検知されることはない。本発明のいくつかの実施形態は、このようなエージェントの早期の検知および無能力化を可能にすることができる。
【００６８】
[0073]別の例示的な用途において、クラウドサービスプロバイダは、いくつかの実施形態を使用して、準リアルタイムに暗号化されたトラフィックを検査し、プロバイダのサーバに、またはプロバイダのサーバから広がる悪意のあるデータをすみやかに検知することができる。このような検知は、例えば、分散型サービス拒否（ＤＤＯＳ：ｄｉｓｔｒｉｂｕｔｅｄ  ｄｅｎｉａｌ  ｏｆ  ｓｅｒｖｉｃｅ）攻撃といった、悪質な攻撃の出発点として個々のサーバが振る舞うのを防ぐことができる。
【００６９】
[0074]暗号化された通信の解読は、難しい仕事として有名である。暗号化を解く従来のアプローチの中には、解読を完全に避けようとするものもある。このような方法は、例えば、暗号化ライブラリを修正して追加の情報を提供すること、または個々の通信のプレーンテキストに、もしくは実際の暗号化キーに、もしくはキーに役立つ何らかの他の情報に、ユーザが目立たないようにアクセスすることを可能にする「バックドア」を導入することを含む。このようなアプローチは、長期的に見ればインターネットセキュリティを弱めることがあるので、危険であるとみなされる。これらは、典型的に移植不能であること、すなわち一定のハードウェアプラットフォームおよび／またはオペレーティングシステムでしか効果がないので不便でもある。もう１つ不便なのは、暗号文のライブラリへの変更が、個々のクライアント上で実行するソフトウェアに見えるので、検知され、無力化される可能性があるということである。
【００７０】
[0075]現在の暗号法は、何らかのバージョンの総当たり攻撃（ｂｒｕｔｅ  ｆｏｒｃｅ  ａｔｔａｃｋ）を使用してのみ解かれることが可能であり、これは典型的には、かなりの計算的コストを伴う。このような１つの攻撃は、最終的にうまくいくまで複数の候補キーを試すことを含む。従来の解読システム／方法の中には、クライアントシステムのメモリ内でキー素材をサーチするものもある。しかし、キー素材の実際の場所を知らないことは、サーチに要する多大な計算的経費のために、このような方法を非実用的にすることがある。さらに、多量のメモリダンプを得るために必要とされる間に個々のマシンを休止することは、ユーザの体感に悪い影響を与える可能性がある。従来のアプローチの中には、実行のある瞬間にメモリダンプを取得するために「タップポイント」を設定することによって、キー素材のサーチを最適化しようと試みるものもある。しかし、タップポイントは事前に定義されるので、根本的なシステムおよび／または通信ソフトウェアがアップデートされると壊れることがある。
【００７１】
[0076]本発明のいくつかの実施形態は、２つのキー観察に依存する。第１に、潜在的に解読の恩恵をこうむる非常に多くのクライアントシステムは、ハードウェア仮想化構成（仮想マシン）の中で実行する。例には、仮想デスクトップ基盤のサーバファームおよびクラウドプロバイダを含む。このような構成を利用するために、本発明のいくつかの実施形態は、個々のＶＭを公開するハイパーバイザのプロセッサ特権レベルで、暗号化された通信を実行する仮想マシンの外部にイントロスペクションエンジンを設置する。イントロスペクションエンジンは仮想化の技術の技法を使用して、おそらく個々のＶＭの中で実行するソフトウェアからの知識または干渉なしに、個々のＶＭによって使用されるメモリの内容にアクセスし、検査することができる。したがって単一のイントロスペクションエンジンは、個々のクライアントシステム上で並行に実行する複数のＶＭによって行われる通信を目立たないようにモニタリングすることができる。
【００７２】
[0077]第２の観察は、暗号化キー、または少なくとも、個々のキーを導出するために使用される暗号パラメータが、例えばハンドシェイク中といった、セッションの特定のフェーズ中に複数の通信相手によって交換されるということである。いくつかの実施形態は、この観察を使用してセッションキーのおよその場所を導出するので、従来の方法における数百メガバイトから少しのメモリページ（例えば、数十キロバイトから数メガバイト）に、メモリサーチエリアを縮小することを可能にする。これは解読の計算労力をかなり減らし、総当たり攻撃を実現可能にする。
【００７３】
[0078]いくつかの実施形態は、ページテーブルのエントリの中にアクセスフラグおよび／もしくはダーティフラグを設定する能力、またはいくつかのＩｎｔｅｌ（登録商標）プロセッサのページ変更ロギング（ＰＭＬ）の機能などの、現在のプロセッサのハードウェア最適化を使用して、セッションキーの交換および／または生成を含む時間間隔の中で内容が変化するメモリページのセットを識別する。いくつかの実施形態は次に、個々のメモリページの内容の中でキー素材をサーチする。
【００７４】
[0079]クライアントシステム／仮想マシンの特定のハードウェアまたはソフトウェアの機能に依存するのではなく、通信プロトコルの機能によってセッションキーを配置することによって、いくつかの実施形態は、オペレーティングシステムおよび通信アプリケーション（例えば、ブラウザ、メッセージングアプリ、ＶＰＮソフトウェア等）に関係なく、様々なデバイス（パーソナルコンピュータ、携帯電話、家庭用設備等）上で、および複数のヘテロジニアスな仮想マシンを実行するクライアントシステムにおいて、通信の解読を可能にする。
【００７５】
[0080]モニタリングされるＶＭの中で実行するソフトウェアによる検知を回避するために、いくつかの実施形態は、個々のＶＭの最適化されたメモリスナップショットを採取することによって時々引き起こされる遅延を、ネットワークレイテンシとして偽装する。１つの例において、イントロスペクションエンジンはネットワークフィルタと協力して、メモリスナップショットを得る間、一定のネットワークパケットをモニタリングされるＶＭに配信することを遅延させる。ＶＭの内部で実行するソフトウェアにとって、このような遅延は、ネットワーク上の送信の問題によって引き起こされているように見えることがある。また、ユーザの体感に影響を与えることを回避するために、いくつかの実施形態は、解読による計算的負担を別々のマシン（セキュリティサーバ）に移して負担を軽減する。したがって実際の解読は、オフラインで行われてもよい。
【００７６】
[0081]上記の実施形態は、本発明の範囲を逸脱することなく、多くの方式で変えられてよいということが当業者には明らかであろう。したがって、本発明の範囲は、以下の特許請求の範囲およびこれらの法的均等物によって判断されるべきである。
【図１】
2019516294.tif 000003
【図２−Ａ】
2019516294.tif 000004
【図２−Ｂ】
2019516294.tif 000005
【図３】
2019516294.tif 000006
【図４】
2019516294.tif 000007
【図５】
2019516294.tif 000008
【図６】
2019516294.tif 000009
【図７】
2019516294.tif 000010
【図８】
2019516294.tif 000011
【図９】
2019516294.tif 000012
【国際調査報告】
2019516294.tif 000013
2019516294.tif 000014