(57)【要約】本明細書において、サービスプロキシについて説明する。サービスプロキシは、クライアントおよびサービスの間の媒介物として作動するべく構成される。サービスプロキシは、通信の観測、通信の変更、通信のロギングなどを行って、特にホストデバイスのセキュリティおよび信頼性を向上させることができる。いくつかの実装において、サービスプロキシは、オペレーティングシステムと連携して、名前付きポートオブジェクトを引き継ぐことができる。いくつかの実装において、サービスプロキシは、クライアントとサーバとの間の媒介物としてメッセージを受信することができる。いくつかの実装において、サービスプロキシは、共有メモリに結合して、通信を傍受することができる。いくつかの実装において、サービスプロキシは、クライアントプロセスに注入されて、クライアントそのものであるように見えるようにできる。
2017502394.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータデバイス上で観測サービスを実行するように構成されたコンピュータ実行可能命令を記憶している１つまたは複数の有形のコンピュータ可読媒体であって、前記観測サービスは、
名前によるアドレス指定可能なポートを元の名前から、変更した名前にリネームするようにカーネルレベルリソースから要求することと、
前記観測サービスを前記元の名前で登録するように要求することと、
発信元から、および前記観測サービスで、前記元の名前にアドレス指定された通信を受信することと、
透過的なリダイレクションのために前記通信を変更することと、
前記変更した名前によりアドレス指定された、前記名前によるアドレス指定可能なポートへの通信をリダイレクトすることと
を含む動作を実行することを特徴とする１つまたは複数の有形のコンピュータ可読媒体。
【請求項２】
前記変更することは、前記通信の、シーケンス番号、プロセス識別子（ＰＩＤ）、および／またはスレッド識別子（ＴＩＤ）を変更することを含むことを特徴とする請求項１に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項３】
前記動作は、前記通信を解析することをさらに含むことを特徴とする請求項１に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項４】
前記観測サービスは、カーネルレベルより低いパーミッションを有するように構成されたことを特徴とする請求項１に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項５】
前記動作は、
サーバポートへの参照を含んでいる通信セッションの表示を、前記名前によるアドレス指定可能なポートから受信することと、
セッション観測ポートを作成することと、
前記サーバポートの代わりに前記セッション観測ポートへの参照を含んでいる、前記通信セッションの前記表示を変更することと、
前記通信セッションの前記表示を前記発信元に提供することと
をさらに含むことを特徴とする請求項１に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項６】
前記動作は、
共有メモリ領域への参照を含んでいるメッセージを、前記セッション観測ポートで受信することと、
前記共有メモリ領域に結合するように、前記カーネルレベルリソースから要求することと、
受信した前記メッセージに少なくとも部分的に基づく、プロキシされたメッセージを、前記サーバポートに送信することと、
をさらに含むことを特徴とする請求項５に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項７】
前記動作は、前記共有メモリ領域の一部を解析することをさらに含むことを特徴とする請求項６に記載の１つまたは複数の有形のコンピュータ可読媒体。
【請求項８】
サービスを観測するコンピュータ実行方法であって、
前記サービスの名前によるアドレス指定可能なポートを、元の名前から変更した名前にリネームするように要求するステップと、
観測サービスを前記元の名前で登録するように要求するステップと、
発信元から、および前記観測サービスで、前記元の名前にアドレス指定された通信を受信するステップと、
透過的なリダイレクションのために前記通信を変更するステップと、
前記変更した名前によりアドレス指定された、前記名前によるアドレス指定可能なポートへの通信をリダイレクトするステップと
を含むことを特徴とする方法。
【請求項９】
前記変更するステップは、前記通信の、プロセス識別子および／またはスレッド識別子を変更するステップを含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記通信を解析するステップをさらに含むことを特徴とする請求項８に記載の方法。
【請求項１１】
前記観測サービスは、カーネルレベルより低いパーミッションを有するように構成されたことを特徴とする請求項８に記載の方法。
【請求項１２】
サーバポートへの参照を含んでいる通信セッションの表示を、前記名前によるアドレス指定可能なポートから受信するステップと、
セッション観測ポートを作成するステップと、
前記サーバポートの代わりに前記セッション観測ポートへの参照を含んでいる、前記通信セッションの前記表示を変更するステップと、
前記通信セッションの前記表示を前記発信元に提供するステップと、
をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１３】
共有メモリ領域への参照を含んでいるメッセージを、前記セッション観測ポートで受信するステップと、
前記共有メモリ領域に結合することを要求するステップと、
受信した前記メッセージに少なくとも部分的に基づく、プロキシされたメッセージを、前記サーバポートに送信するステップと、
をさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記共有メモリ領域の一部を解析することをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
観測サービスをクライアントプロセスに注入する方法であって、
サーバポートへの参照を含んでいる通信セッションの表示を受信するステップと、
前記クライアントプロセスに属しているプロキシスレッドを、プロキシサービスから作成するステップと、
前記通信セッションの前記表示に少なくとも部分的に基づく、前記通信セッションの変更した表示を作成するステップであって、前記通信セッションの前記変更した表示は、サービスポートの代わりに前記プロキシスレッドを参照する、ステップと、
前記通信セッションの前記変更した表示を発信元に提供するステップと、
をさらに含むことを特徴とする方法。
【請求項１６】
前記サービスポートによって受信されることになるメッセージを、前記プロキシスレッドで受信するステップと、
前記メッセージを解析するステップと、
前記メッセージを前記サービスポートに転送するステップと、
さらに含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記クライアントプロセスのクライアントポートによって受信されることになるサービス応答を、前記プロキシスレッドで受信するステップと、
前記サービス応答を解析するステップと、
前記サービス応答を前記クライアントポートに転送するステップと、
さらに含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記メッセージを解析するステップは、前記メッセージが共有メモリ領域に記憶されたデータを参照するということを判定するステップと、前記共有メモリ領域に記憶されたデータの少なくとも一部をさらに解析するステップとを含むことを特徴とする請求項１６に記載の方法。
【請求項１９】
前記サービス応答を解析するステップは、前記サービス応答が共有メモリ領域に記憶されるデータを参照するということを判定するステップと、前記共有メモリ領域に記憶されたデータの少なくとも一部をさらに解析するステップとを含むことを特徴とする請求項１７に記載の方法。
【請求項２０】
前記プロキシスレッドを含んでいる前記クライアントプロセスは、カーネルレベルより低いパーミッションを有するように構成されたことを特徴とする請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＰＣコールの傍受に関する。
【背景技術】
【０００２】
コンピュータシステムの管理者は、システムリソースの使用に関する種々のデータを収集して、システムリソースの使用を特徴付けする助けとすることができ、特に、数ある理由の中でも、不正アクセスを防ぐこと、悪意のあるソフトウェアを識別すること、またはシステムリソースの割当を向上すること、を目的とする。
【０００３】
このデータの収集は、従来、オペレーティングシステム（ＯＳ）のカーネルおよび／またはシステムコールインターフェースにオブザーバをつけることによって達成されてきた。従って、ユーザレベルのプロセスで、観測されたカーネルシステムコールを使用してシステムリソースを要求すると、オブザーバはデータを収集すること、およびそのデータを必要に応じて解析することができる。
【０００４】
しかし、オペレーティングシステムでは、カーネルシステムコール以外のシステムリソースとのインターフェースをサポートする機能性が成長している。例えば、ＯＳは、リモートプロシージャコール（ＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ））インターフェースを介して機能性を提供することができる。いくつかの例において、ＲＰＣインターフェースは、ＲＰＣスタイルのトランスポート、シリアライゼーション、およびランタイムバインディングを使用して、呼び出し（コール）をリモートシステムに実際に送信することなく、ＬＰＣシステムコールを実行するべく構成される、ローカルプロシージャコール（ＬＰＣ）インターフェースとして実装されてもよい。
【０００５】
いくつかのＬＰＣインターフェースは、全体としてユーザ空間に存在し、カーネルシステムコールを傍受することによる、任意の従来の形式での観測を防ぐ。他のＬＰＣインターフェースもユーザ空間に存在し、クライアントの代わりにカーネルシステムコールを行うことが可能であり、それにより、クライアントプロセスの識別をマスクすることができ、何故なら、このシステムコールが、ＬＰＣインターフェースからのものであるように見えるからである。
【０００６】
概して、ＬＰＣインターフェースは、上述のように、カーネルシステムコールによる観測には適さないことがある。従って、種々のオブザーバを使用するにもかかわらず、ＬＰＣインターフェースに対してなされるいずれの呼び出しも、未収集かつ未解析のままとなり得る。それ故、コンピュータシステムの管理者は、システムリソースの使用に関する未完成の像をとらえることになる。
【図面の簡単な説明】
【０００７】
添付の図面を参照して、詳細な説明を行う。図面において、参照番号の最左の桁は、参照番号が最初に出現する図面を特定する。同じ参照番号を異なる図面で使用することで、同様または同一の項目または特徴を示す。
【０００８】
【図１】サービスプロキシを挿入するのに使用されるネームスイッチを含む、サービスへのインターフェースを要求するためのＬＰＣインターフェースを描いた一例のアーキテクチャを示す図である。
【図２】プロキシを介したクライアントとサービスとの間の通信を描いた一例のアーキテクチャを示す図である。
【図３】プロキシを介したクライアントとサービスとの間の通信を実行するクライアントに注入されたスレッドを描いた一例のアーキテクチャを示す図である。
【図４】プロキシとして作動する一方で、メッセージを解析およびマーシャリングする例示のプロセス４００を示す図である。
【図５】プロキシとして作動可能なコンピューティングデバイスの構成要素レベルのビューを示す図である。
【発明を実施するための形態】
【０００９】
概要
本開示では、一部分において、モバイルデバイスおよびエンベデッドシステムを含むホストコンピューティングデバイス上で、サービスプロキシとして動作するセキュリティエージェントについて説明する。既存のサービスのためのプロキシとして作動することにより、サービスプロキシは、既存のサービスにアドレス指定されたクライアント通信を受信すること、そのクライアント通信を処理すること、既存のサービスを透過的に起動すること、および、サービスからクライアントへの折り返し通信を、同様にプロキシすること、ができる。それ故、サービスプロキシは、ＬＰＣサービスとのプロセス相互作用をとらえることができる。
【００１０】
概して、サービスは、インターフェースを提供して、別のプロセスの代わりに仕事をする、任意のコンピュータプログラムとすることができる。種々の実施形態において、サービスは、バックグラウンドプロセスとして実行されてもよく、かつ、メッセージを送信することによりプロセスとの通信を行ってもよい。サービスは、複数のユーザが利用可能であるものとしてよい。例えば、ＤＮＳルックアップを行うためのコンピュータプログラムは、サービスとして実装されてもよく、また、システムの全てのユーザのＤＮＳルックアップを行ってもよい。
【００１１】
概して、クライアントとサービスとの間の通信は、通信セッションの一部であってもよい。通信セッションは、クライアントごとに、サービスによって作成されてもよい。概して、通信セッションは、セッションを記述するセッション状態に関連付けられてもよい。いくつかの実施形態において、通信セッションは、ステートレスであってもよい。いくつかの実施形態において、通信セッションは、状態にも関連付けされず、また、継続中の通信にも関連付けされない通信用のインターフェースのような存在のように、単純であってもよい。
【００１２】
種々の実施形態において、サービスプロキシは、ユーザモードで稼働するべく構成されてもよい。しかし、サービスプロキシによって行われる動作のいくつかは、ユーザモードでは利用可能でなく、従って、サービスプロキシは、カーネルモード等の、許容性がより高いモードでの動作のサブセットを行うべく構成されてもよい。
アーキテクチャの例
【００１３】
図１は、サービスプロキシを挿入するのに使用されるネームスイッチプロシージャを含む、サービスへのインターフェースを要求するためのＬＰＣインターフェースを描いた一例のアーキテクチャを示す。図１に示すように、クライアント１０２は、オブジェクトマネージャ１０６に要求１０４を行って、名前付きポートオブジェクト１０８を受け取ることができる。例えば、要求１０４は、特定の名前を持つサービスを求める要求を示すこと、または、要求されたサービスを参照により識別すること、ができる。図１の例では、サービスへのインターフェースをポートとして説明しているが、本明細書においては他のインターフェース技術が考慮され、例えば、ファイル、信号、ソケット、メッセージ、メッセージキュー、パイプ、名前付きパイプ、セマフォ、共有メモリ、メッセージパッシング、メモリマップトファイル、などが含まれる。
【００１４】
要求１０４は、ＩＤＬ（Ｉｎｔｅｒｆａｃｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ（インターフェース定義言語））の定義に従うものであってよい。ＩＤＬ定義は、サービスへのインターフェースを技術するファイルとすることができる。概して、ＩＤＬは、スタブを生成するために使用されてもよく、スタブは、サービスパラメータを変換して、データをまとめて別のプロセスおよび／またはアドレス空間に転送するように、構成されてもよい。例えば、クライアント１０２は、別のアドレス空間に存在するサービスとの通信を望むことがあり、クライアントが、クライアントのアドレス空間内のデータにポインタを送信した場合、サービスが、そのデータにアクセスすることができないことがある。スタブは、クライアントアドレス空間からサービスアドレス空間へコピーすることができる領域に、そのデータを移動させる支援をすることができる。従って、クライアント１０２は、ＩＤＬ定義を使用して、要求１０４を形成することができる。
【００１５】
種々の実施形態において、要求１０４は、様々な情報をカプセル化するＲＰＣ層を含む、ＬＰＣ要求であってもよい。種々の実施形態において、要求１０４は、様々な情報をカプセル化するＲＰＣ層を含む、ＬＰＣ要求であってもよい。ＲＰＣ層は、デコードされて、ＰＩＤ（ｐｒｏｃｅｓｓ  ｉｄｅｎｔｉｆｉｅｒ（プロセス識別子））、ＴＩＤ（ｔｈｒｅａｄ  ｉｄｅｎｔｉｆｉｅｒ（スレッド識別子））、などのクライアント１０２に関する情報を提供することができる。
【００１６】
オブジェクトマネージャ１０６には、名前によるオブジェクトのルックアップを容易にする名前空間が含まれてもよい。例えば、オブジェクトマネージャ１０６は、要求１０４を受信し、その名前空間を、特定の名前に関連付けされたオブジェクトを求めて検索する。種々の例において、オブジェクトおよび／またはオブジェクトへの参照は、次に、クライアント１０２に提供される。そして、クライアント１０２は、オブジェクトバインドすることができ、例えば、要求を介してＲＰＣランタイム（図示せず）にバインドする。ＲＰＣランタイムは、要求１０４を受信したことに応答して、要求１０４が、要求されたサービスのＩＤＬに従っていることを検証するべく構成されてもよい。
【００１７】
オブジェクトマネージャ１０６は、名前付きポートオブジェクト１０８等のポートオブジェクトを記憶するべく構成されてもよい。概して、ポートオブジェクトは、発信元が、サービスと通信すること、および、サービスへのアクセスを制限すること、を可能にする特定の詳細を提供することができる。例えば、ポートオブジェクトは、１つまたは複数のルールによるアクセスを制限するＡＣＬ（Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ｌｉｓｔ（アクセス制御リスト））を指定すること、および／または、必要とされるセキュリティ識別子を指定すること、ができる。さらに、ポートは、通信当事者に、識別情報を含む、他の通信当事者に関する情報、を提供してもよい。
【００１８】
要求１０４を受信した後、オブジェクトマネージャ１０６は、名前付きポートオブジェクト１０８に関連付けされたハンドル１１０を判定することができ、該ハンドルは、特定の名前に関連付けされたサービス１１２を参照するものである。次に、オブジェクトマネージャ１０６は、ハンドル１１０への参照を含む応答１１４を形成して、クライアント１０２に応答１１４を返すことができる。
【００１９】
しかし、図１の例では、サービスプロキシ１１６が導入されて、クライアント１０２とサービス１１２との間の通信をプロキシする。概して、サービスプロキシ１１６は、カーネルレベルより低い特権を持つものとしてよい。しかし、いくつかの動作は、カーネルレベルの特権を要求することができ、これは、カーネルレベルのプロセスを使用して実装されて、プロキシの代わりに、または、カーネルリソースを呼び出すことにより、１つまたは複数のカーネルレベルのアクションを実行することができる。種々の例において、サービスプロキシ１１６は、カーネル特権を用いて作動して、オブジェクトマネージャ１０６にて要求１０４を傍受することができ、名前付きポートオブジェクト１０８を別の名前にリネームすることができる。例えば、名前付きポートオブジェクト１０８が、「ＤＮＳＬｏｏｋｕｐ」という元の名前を持つとすると、名前付きポートオブジェクト１０８は、「ＤＮＳＬｏｏｋｕｐ−Ｏｒｉｇｉｎａｌ」にリネームされてもよい。別の例において、サービスプロキシ１１６は、名前付きポートオブジェクト１０８を、別の名前にリネームされてもよく、さらには、要求１０４を無くすることができる。それ故、リネーム後、名前付きポートオブジェクト１０８は、オブジェクトマネージャ１０６を介した、元の名前を使用したアクセスが可能ではなくなる。サービスプロキシ１１６を実装する装置として機能することが可能な一例のコンピューティングデバイスについて、図５に示し、その図面を参照して以下で説明する。
【００２０】
他の例において、サービスプロキシ１１６は、名前付きポートオブジェクト１０８の作成に応答するべく構成されてもよく、また、名前付きポートオブジェクト１０８をリネームしてもよい。例えば、名前付きポートオブジェクト１０８を表すオブジェクトが作成されると、イベントが作成されて、サービスプロキシ１１６に新しいオブジェクト、名前付きポートオブジェクト１０８、を通知することができる。名前付きポートオブジェクト１０８は、イベントへの応答の際にリネームされてもよい。
【００２１】
種々の実施形態において、サービスプロキシ１１６は、サービス１１２を記述するＩＤＬを参照するべく構成されてもよい。例えば、サービスプロキシ１１６は、プロキシの機能を忠実に実行するためにＩＤＬを必要とすることがある。サービスを記述するＩＤＬは、時折、失われたりアクセス不能になったりすることがある。例えば、ソフトウェアのアップデートでは、ＩＤＬのアクセス可能なコピーをサービスプロキシ１１６に提供することなく、サービスがアップデートされるかもしれない。そのような場合、サービスプロキシを停止させ、名前付きポートプロキシオブジェクト１１８を、オブジェクトマネージャ１０６から削除し、名前付きポートオブジェクト１０８を、その元の名前を持つように戻し、クライアント１０２が、ハンドル１１０を使用してサービス１１２に対してバインドされるように、することができる。他の例において、サービスプロキシ１１６はそのままであってもよいが、プロキシの機能性を実行する際に、低アクティブな役割を担うものとしてもよい。
【００２２】
サービスプロキシ１１６は、元の名前を使用して、オブジェクトマネージャ１０６にエントリを追加することができる。図１の例では、名前付きポートプロキシオブジェクト１１８は、元の名前、例えば「ＤＮＳＬｏｏｋｕｐ」、に関連付けされたオブジェクトマネージャ１０６に、追加されてもよい。それ故、名前付きポートプロキシオブジェクト１１８は、元の名前を引き継ぐことができる。名前付きポートプロキシオブジェクト１１８は、ハンドル１２０によりサービスプロキシ１１６を参照するべく構成されてもよい。ハンドル１２０は、応答１１４を介してクライアント１０２に提供されてもよく、クライアント１０２はサービスプロキシ１１６にアクセスできるようになる。
【００２３】
本例では、クライアント１０２は、名前付きポートオブジェクト１０８を求める要求１０４を送信し、サービスプロキシ１１６を参照するハンドル１２０を受け取った。それに従って、クライアント１０２は、サービス１１２を呼び出すことを見込んでハンドル１２０により参照されるサービスに対して、サービスコール１２２を行うことができるが、その代わりに、サービスプロキシ１１６を呼び出してもよい。サービスプロキシ１１６は、サービスコール１２２を受信し、該呼び出しを観測し、詳細のログをとり、および／または、該呼び出しを変更することができ、また、リダイレクション１２４を介してサービス１１２への該呼び出しをリダイレクトすることができる。
【００２４】
概して、リダイレクション１２４は、サービスコール１２２を介して送信されたメッセージを変更すること、および／または、サービスコール１２２に基づき新しいメッセージを作成すること、を要求することができる。これらの変更には、表示メッセージ受領先、表示メッセージ発信元、ＰＩＤ、ＴＩＤ、シーケンス番号、および／または、状態表示、などを変更することが含まれる。これらの変更は、「マーシャリング」がさらに含まれてもよい。マーシャリングには、データのメモリ表現の転送、データのシリアライズ、データのデシリアライズ、インターフェース要件の順守、などの作動が含まれてもよい。
【００２５】
種々の実施形態において、リダイレクション１２４は、サービス１１２を直接呼び出すことにより行われてもよい。種々の実施形態において、サービスプロキシ１１６は、オブジェクトマネージャ１０６に、（リネームされた）名前付きポートオブジェクト１０８に関連付けされたハンドルを要求することができ、また、サービス１１２を参照するハンドル１１０を受信することができる。次に、サービスプロキシ１１６は、ハンドル１１０を使用してリダイレクション１２４を行うことができる。
【００２６】
いくつかの例において、サービスプロキシ１１６はサービス応答１２６を受信することができる。サービスプロキシ１１６は、サービス応答１２６を観測すること、詳細のログをとること、および／または、サービス応答１２６を変更することができ、また、プロキシ応答１２８をクライアント１０２に提供することができる。いくつかの例において、プロキシ応答１２８は、サービス応答１２６と同じである他の例において、サービスプロキシ１１６は、サービス応答１２６の一部を変更して、プロキシ応答１２８を作成することができる。マーシャリングと同様に、上述のように、サービスプロキシ１１６は、サービス応答１２６を再マーシャリングして、プロキシ応答１２８を作出することができる。それ故、サービスプロキシ１１６は、透過的なプロキシサービスをクライアント１０２に提供することができるため、サービスコール１２２を傍受し、プロキシ応答１２８を返すことができ、これら全ては、一方で、必要に応じて、サービスプロキシ１１６に観測、ロギング、および変更を行う機会を与えながら、行われる。
【００２７】
概して、サービスプロキシ１１６は、セキュリティ関連作動を含む作動を行うべく構成されてもよく、または、かかる作動を行うセキュリティエージェントの一部であってもよい。いくつかの実施形態において、サービスプロキシ１１６またはセキュリティエージェントの他の構成要素（単数または複数）は、クライアント１０２に、悪意のあるソフトウェアが含まれることを判定することができ、かつ、１つまたは複数のサービスコールを中断させて、悪意のあるソフトウェアの影響を低減することができる。例えば、図１の例を参照すると、クライアント１０２が悪意のあるものであって、サービスコール１２２を行って、サービス１１２から悪意のあるサーバのＤＮＳルックアップを取得するものと仮定すると、サービスプロキシ１１６またはセキュリティエージェントの他の構成要素（単数または複数）が、サービスコール１２２を受信したことに応答して、または、サービス応答１２６受信したことに応答して、のいずれかで、要求を悪意のあるものとして検出することができる。そして、サービスプロキシ１１６またはセキュリティエージェントの他の構成要素（単数または複数）は、プロキシ応答１２８を介して偽のＤＮＳアドレスを与えることにより、ＤＮＳ要求に「シンクホール」を行う。従って、クライアント１０２の悪意のあるソフトウェアは、悪意のあるサーバをルックアップすることができず、ダメージを抑えることができる。かかるセキュリティエージェントの一例は、２０１２年６月８日出願の「カーネルレベルセキュリティエージェント」と題する米国特許出願第１３／４９２，６７２号に記載されており、これは参照により本明細書に組み込まれる。
【００２８】
種々の実施形態において、サービスプロキシ１１６は、クライアント１０２には、サービス１１２から機能的に区別できないものとして見えるように構成されてもよい。いくつかの実施形態において、サービスプロキシ１１６は、全体的にサービス１１２から区別できないものであってもよい。識別の錯覚を保持するために、サービスプロキシ１１６は、亜最適に挙動するように見えるものであってもよい。例えば、サービスプロキシ１１６が、サービスコール１２２を不正形式であると識別すると、最適な挙動では、サービスコール１２２を直ちに拒絶することになる。しかし、これにより、中でも、リダイレクション１２４を介してサービス１１２に接触することが全く無いことにより、識別の錯覚をもたらすことができ、それによって、エラー処理およびエラーロギング等の、サービス１１２によって作られたいずれの副次的影響も無視される。従って、最適な挙動にもかかわらず、サービスプロキシ１１６は、リダイレクション１２４を使用して、不正形式のサービスコール１２２を通してしまう。
【００２９】
種々の実施形態において、サービスプロキシ１１６は、リダイレクション１２４を呼び出すことができないものであってもよい。例えば、サービスプロキシ１１６がサービスコール１２２を受信したが、メモリ不足エラーになり、その後に、リダイレクション１２４を送信する場合、リダイレクション１２４を送信することは不可能となることがあり、および／または、望ましくないことがある。いくつかの例において、メモリ不足エラーの受信時、サービスプロキシ１１６は、メモリ使用を「クリーンアップ」して、システムに何らかのメモリを返すべく構成されてもよく、また、その後、リダイレクション１２４の実行を試みてもよい。いくつかの例において、ＲＰＣランタイムが、サービスコール１２２を処理しながら、メモリ不足で稼働する場合に行うようなことは何でも、サービスプロキシ１１６が行うように構成されてもよい。
【００３０】
種々の実施形態において、サービスプロキシ１１６は、クライアント１０２とサービス１１２との間の対話の状態を追跡するべく構成されてもよい。例えば、対話の状態は、クライアント１０２がサービスプロキシ１１６に対してバインドされているかどうか、クライアント１０２がサービス１１２に対してバインドされているかどうか、サービスプロキシ１１６が、要求１０４、応答１１４、サービスコール１２２、および／または、サービス応答１２６のいずれも読み込むことができるかどうか、および／または、サービス１１２がリダイレクション１２４を読み込むことができるかどうか、を示すことができる。いくつかの実施形態において、状態の判定は、決定的に認識できるものではないことがあるが、サービスプロキシ１１６は、推測される状態を推定および／または示すことができる。
【００３１】
図２は、プロキシを介したクライアントとサービスとの間の通信を描いた一例のアーキテクチャを示す。特に図１に対して、本明細書で説明したように、クライアント１０２は、概してサービス１１２と通信することができる。図２の例では、クライアント１０２のアドレス空間に存在するクライアント通信ポート２０２は、サービス１１２に配信するためにクライアント１０２からデータを受信するべく、また、クライアント１０２に配信するためにサービス１１２からデータを受信するべく、構成されてもよい。
【００３２】
概して、クライアント１０２は、サービス１１２とは異なるアドレス空間に存在してもよい。従って、データは、クライアント１０２とサービス１１２との間で行き来して輸送されなければならない。概して、カーネルモードプロセス−メモリ保護ルールにより制約されていない−は、クライアント１０２およびサービス１１２の代わりに、データを移動させることができる。
【００３３】
プロキシ２０４は、クライアント通信ポート２０２とサービス通信ポート２０６との間に配置されてもよい。概して、プロキシは、特に図１対して、本明細書でサービスプロキシ１１６について説明したものと同様の技術を使用して、挿入されてもよい。例えば、クライアント１０２からのバインド要求を、傍受することができ、プロキシ２０４は、媒介物として作成されてもよく、クライアント通信ポート２０２がプロキシ２０４に対してバインドされてもよい。加えて、プロキシ２０４は、サービス通信ポート２０６に対してバインドされてもよい。さらに、プロキシ１２０４は、クライアント１０２には、サービス通信ポート２０６から機能的に区別できないものとして見えるように構成されてもよい。いくつかの実施形態において、プロキシ２０４は、クライアント１０２の視点からは、全体的にサービス通信ポート２０６から区別できないものであってもよい。種々の実施形態において、クライアント通信ポート２０２、プロキシ２０４、および／または、サービス通信ポート２０６は、プロキシ２０４を介したクライアント１０２とサービス１１２との間のセッションについて特有であってもよい。種々の実施形態において、クライアント通信ポート２０２、プロキシ２０４、および／または、サービス通信ポート２０６は、オブジェクトマネージャ１０６によりインデックスされなくてもよく、例えば、名前によってインデックスされなくてもよい。種々の実施形態において、プロキシ２０４は、プロキシサービスプロセスに属するものとすることができる。プロキシ２０４を実装する装置として機能することが可能な一例のコンピューティングデバイスについて、図５に示し、その図面を参照して以下で説明する。
【００３４】
種々の実施形態において、プロキシ２０４は、クライアント通信ポート２０２とサービス通信ポート２０６との間のメッセージの、観測、ロギング、および／または、変更を行うことができる。
【００３５】
概して、クライアント通信ポート２０２とサービス通信ポート２０６との間の通信は、より小さなメッセージに制限されてもよい。より大きなメッセージが送信されると、別の形式通信が使用されて、共有メモリが活用される。
【００３６】
概して、共有メモリには、複数のプロセス用のそれぞれのアドレス空間に存在する１つまたは複数のメモリアドレスによってマッピングされる、物理メモリの一部が含まれる。１つまたは複数のメモリアドレスは、仮想アドレスとすることができる。種々の実施形態において、異なる仮想アドレスが、同じ物理アドレスにマッピングされてもよい。例えば、共有メモリは、第１のアドレス空間の第１の仮想アドレスおよび第２のアドレス空間の第２の仮想アドレスによって指定される物理メモリのページが含まれてもよい。従って、複数のプロセスが同時に共有メモリにアクセスすることができる。概して、共有メモリは、任意の包括的なプロセスの全アドレス空間のサブセットを構成するものとしてよい。
【００３７】
図２の例では、クライアント／プロキシ／サービス共有メモリ空間２０８には、共有メモリ２１０が含まれる。概して、共有メモリ空間２０８に結合されるクライアント１０２は、サービスが共有メモリ空間２０８に結合することを求める。この場合、プロキシも、共有メモリ空間２０８に結合する。従って、プロキシは、共有メモリ２１０への結合を得る。
【００３８】
種々の実施形態において、クライアント１０２は、共有メモリ２１０に、メッセージペイロード（すなわち、より大きな通信のデータ）を投入することにより、サービス１１２と通信する。そして、より小さな通信は、クライアント通信ポート２０２から、サービス通信ポート２０６に向けて送信される。概して、より小さな通信は、クライアント１０２において呼び出しプロセスのスレッドをブロックすることができる。
【００３９】
典型的な例では、クライアント１０２は、サービス通信ポート２０６が、より小さな通信を受信すること、共有メモリ２１０においてより大きな通信を読み込むこと、および、より大きな通信のデータ上に作用すること、を求めることができる。次に、サービス１１２は、より小さな通信に返信すること、または、スレッドをブロックすることから、より小さな通信を解放すること、ができる。
【００４０】
しかし、図２の例では、プロキシ２０４は、クライアント通信ポート２０２から、より小さな通信を受信する。この時、サービス１１２がより小さな通信の通知を受信する前でも、プロキシ２０４は、共有メモリ２１０の内容を検査することができる。プロキシ２０４が終了した後、プロキシ２０４は、別のより小さなメッセージをサービス通信ポート２０６に送信してもよい。他のより小さなメッセージは、より小さなメッセージと同じであってもよく、より小さなメッセージに基づいて作成されてもよい。
【００４１】
サービス１１２は、サービス通信ポート２０６からクライアント通信ポート２０２へのより小さな返信メッセージを使用して、プロキシ２０４を経由してクライアント１０２に返信してもよく、および／または、サービス１１２は、共有メモリ２１０に書き込まれたより大きな返信メッセージを使用して、クライアントに返信してもよい。クライアント１０２のブロックされたスレッドが解放される前に、プロキシ２０４が、より大きな返信メッセージまたはより小さな返信メッセージのいずれかを、調査および／または変更してもよい。
【００４２】
特に図１に対して、上記で説明したように、プロキシ２０４は、クライアント１０２から見るのと同様に、また逆に、サービス１１２から見るのと同様に、サービス通信ポート２０６からは区別できないものとして見えることが望ましいものとする。しかし、プロキシ２０４は、クライアント通信ポート２０２またはサービス通信ポート２０６のいずれとも異なるＰＩＤおよび／またはＴＩＤを有してもよい。従って、プロキシ２０４は、クライアント１０２またはサービス１１２のいずれかに、サードパーティの存在を通知する識別情報を含むメッセージを、送信することができる。この問題に対処するべく設計される種々の実施形態について、特に図３および４に対して、本明細書においてさらに検討する。
【００４３】
図３は、プロキシを介したクライアントとサービスとの間の通信を実行するクライアントへの実行可能コードの注入を描いた一例のアーキテクチャを示す。種々の例において、実行可能コードは、クライアントに関連付けされたプロセス内にスレッドとして実装されてもよい特に図１および２に対して、本明細書で説明したように、クライアント１０２は、概してサービス１１２と通信することができ、クライアント通信ポート２０２からサービス通信ポート２０６への通信が含まれる。図３の例では、プロキシ３０２を実行するスレッドが、クライアント１０２のアドレス空間に注入される．種々の実施形態において、クライアント通信ポート２０２、プロキシ３０２、および／または、サービス通信ポート２０６は、プロキシ３０２を介したクライアント１０２とサービス１１２との間のセッションについて特有であってもよい。種々の実施形態において、クライアント通信ポート２０２、プロキシ２０４、および／または、サービス通信ポート２０６は、オブジェクトマネージャ１０６によりインデックスされなくてもよく、例えば、名前によってインデックスされなくてもよい。プロキシ３０２は、プロキシ２０４と同様に動作することができるが、プロキシ２０４は、プロキシサービスプロセスに属してもよく、それに対して、プロキシ３０２は、クライアント１０２に関連付けされたクライアントプロセスに属してもよい。
【００４４】
スレッドは、カーネルレベルのパーミッションを有するプロセスにより注入されてもよい。スレッドは、クライアント１０２のアドレス空間において実行されてもよく、かつ、クライアント１０２のＰＩＤを用いてもよい従って、プロキシ３０２からの通信は、クライアント１０２に有効なＰＩＤおよびＴＩＤを当然、用いることができる。従って、プロキシ３０２からの通信の受領先は、通信のソースが、クライアント通信ポート２０２であったこと、および、異なるプロセスのものではないこと、を判定することができるプロキシ３０２を実装する装置として機能することが可能な一例のコンピューティングデバイスについて、図５に示し、その図面を参照して以下で説明する。
【００４５】
クライアント／サービス共有メモリ空間３０４は、クライアント１０２およびサービス１１２によって共有されてもよく、第３のプロセスとは共有されず、例えば、プロキシサービスプロセスとは共有されないものとする。種々の実施形態において、プロキシ３０２は、クライアント１０２のスレッドであるという理由で、共有メモリ空間３０４へのアクセスを得る。同様に、共有メモリ３０６には、クライアント１０２およびサービス１１２がアクセス可能であってもよいが、第３のプロセス（カーネルレベルプロセス以外）は可能ではないものとする。
【００４６】
種々の実施形態において、図３により描かれる機能性は、図２により描かれるようなものと同様であってよもよい。例えば、クライアント通信ポート２０２からサービス通信ポート２０６へのより小さなメッセージは、プロキシ３０２を通ることができる。同様に、共有メモリ３０６に書き込まれたより大きな通信は、クライアント１０２またはサービス１１２のいずれかが共有メモリ３０６にデータを書き込んだという表示を、プロキシ３０２が受け取る際に、プロキシ３０２により傍受されてもよい。
【００４７】
いくつかの例において、注入された実行可能コードは、プロセスの既存のスレッドのプログラム領域に注入されてもよい。これにより、注入された実行可能コードが、既存のスレッドのＰＩＤおよびＴＩＤを有して動作することが可能となるようにできる。プロセスの例
【００４８】
図４は、プロキシとして作動する一方で、メッセージを解析およびマーシャリングする例示のプロセス４００を示す。このプロセスは、論理フロー図として示され、その各動作は、ハードウェア、ソフトウェア、またはその組み合わせ、において実装することができる動作のシーケンスを表す。ソフトウェアの文脈において、動作が表すものは、１つまたは複数のプロセッサによって実行されると、列挙された動作を行う、１つまたは複数のコンピュータ可読記憶媒体に記憶されるコンピュータ実行可能命令である。一般に、コンピュータ実行可能命令には、特定の機能を実行する、または、特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造、などが含まれる。動作が記述される順番は、制限するものとして解釈されることは意図されず、任意の数の記述される動作が、任意の順番でおよび／または平行して組み合わせられて、プロセスを実装することができる。
【００４９】
プロセス４００は、特に図１から３に対して、本明細書で説明した主題に言及する。種々の実施形態において、プロセス４００は、サービスプロキシ１１６、プロキシ２０４、プロキシ３０２、などのプロキシサービスによって実行されてもよい。
【００５０】
プロセス４００は、４０２にて、メッセージを発信元から受信するステップを含む。メッセージのアドレスは、意図される受領先を示すものとしてよい。例えば、メッセージは、サービス１１２等のＬＰＣサービスにアドレス指定されてもよく、または、クライアント１０２等のクライアントにアドレス指定されてもよい。プロキシサービスは、特に図１から３に対して、本明細書に記載される種々の技術を使用して、メッセージを傍受することができる。それ故、受領先では、メッセージを受信するプロキシサービスが、意図される受領先ではないことが、分からない、または、判定することができないことがある。
【００５１】
４０４にて、メッセージを解析することができる。例えば、プロキシサービスがメッセージのログをとり、メッセージの内容が読み込まれ、プロキシサービスが、メッセージは安全、危険、または未確認であると断定し、メッセージの有効性がチェックされる、ようにすることができる。
【００５２】
種々の実施形態において、メッセージの形式は、サービス１１２に関連付けされたＩＤＬ、ＩＤＬに関連付けされたスタブによって、および／またはリバースエンジニアリングによって判定されてもよい。メッセージは、メッセージの形式に基づき解析されてもよい。例えば、形式は、メッセージ内の特定のフィールドの位置および／または形式を示してもよい。フィールドは、フィールドの値を判定するために逆参照されてもよい。
【００５３】
４０６にて、メッセージを変更することができる。特に図１に対して、本明細書で説明したように、変更には、様々な目的でメッセージを転送することが含まれてもよい。
【００５４】
概して、メッセージには、発信元の識別、受信先の識別、送信中のメッセージ型の表示、対話にフラグを立てる（共有メモリ空間内の情報の可用性にフラグを立てる、など）、および／または、クライアント１０２とサービス１１２ヘッダとの間の対話の状態の表示、を行うヘッダが含まれてもよい。ヘッダには、シーケンス番号、メッセージ識別子、ＰＩＤ、および／または、ＴＩＤ、が含まれてもよい。種々の実施形態において、カーネルおよび／またはサービス１１２は、正しくないまたは一貫性のない情報を有するメッセージを処理しないものとしてよい。従って、ヘッダを変更して、異なる情報を示す、例えば、正しいまたは求められるヘッダ情報と一貫性がある、と思われる情報を示す、ようにしてもよい。例えば、サービスプロキシが、ＬＰＣメッセージ作成リソースを使用して、新しいメッセージを作成すると仮定すると、新しいメッセージには、サービスプロキシがメッセージのソースであること示す、ヘッダ情報が含まれてもよい。そして、サービスプロキシは、ヘッダ情報を変更して、クライアント１０２またはサービス１１２などに合うようにソースを変更してもよい。別の例において、ヘッダ情報を変更して、プロキシサービスをメッセージソースとして示すようにしてもよい。種々の実施形態において、ヘッダの一部が削除されてもよい。種々の実施形態において、ヘッダの一部に記憶される値は、ゼロ値またはデフォルト値で上書きされてもよい。
【００５５】
４０８にて、メッセージをマーシャリングすることができる。概して、マーシャリングにより、特に、異なるスレッド、プロセス、および／または、コンピューティングデバイスの間の、データの共有を容易にすることができる。種々の実施形態において、マーシャリングには、データのメモリ表現の転送、データのシリアライズ、データのデシリアライズ、インターフェース要件の順守、などが含まれてもよい。
【００５６】
４１０にて、変更されたメッセージを、意図される受領先に送信することができる。システムの例
【００５７】
図５は、クライアント１０２、サービス１１２、または、サービスプロキシ１１６、プロキシ２０４、もしくはプロキシ３０２などのプロキシ、として動作可能、または、これらを含むことができる、コンピューティングデバイスの構成要素レベルのビューを示す。図示するように、コンピューティングデバイス５００は、モジュールおよびデータ５０４を記憶するシステムメモリ５０２を備える。また、コンピューティングデバイス５００には、プロセッサ（単数または複数）５０６、リムーバブル記憶装置５０８および非リムーバブル記憶装置５１０、入力装置（単数または複数）５１２、出力装置（単数または複数）５１４、ならびに、他のコンピューティングデバイス５１８と通信するための通信接続５１６、が含まれる。
【００５８】
種々の実施形態において、システムメモリ５０２は、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリ、など）、またはこの２つの組み合わせである。システムメモリ５０２に記憶されるモジュールまたはデータ５０４には、方法、スレッド、プロセス、アプリケーション、または、任意の他の種類の実行可能命令、例えば、クライアント１０２、サービス１１２、または、サービスプロキシ１１６、プロキシ２０４、もしくはプロキシ３０２などのプロキシ、の動作を実行するために利用される命令など、が含まれてもよい。モジュールおよびデータ５０４にはまた、ファイルおよびデータベースが含まれてもよい。
【００５９】
いくつかの実施形態において、プロセッサ（単数または複数）５０６は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、または、ＣＰＵおよびＧＰＵの両方、または、従来技術において既知の他の処理装置もしくは構成要素、である。
【００６０】
コンピューティングデバイス５００にはまた、追加的なデータ記憶装置（着脱可能および／または着脱不可）、例えば、磁気ディスク、光ディスク、またはテープ等、が含まれる。かかる追加的な記憶装置は、図５に、リムーバブル記憶装置５０８および非リムーバブル記憶装置５１０によって示される。有形のコンピュータ可読媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ、等の情報を記憶するための任意の方法または技術で実装される、揮発性および不揮発性、着脱可能および着脱不可、の媒体が含まれてもよいシステムメモリ５０２、リムーバブル記憶装置５０８、および非リムーバブル記憶装置５１０は全て、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、所望の情報を記憶するために使用でき、かつ、コンピューティングデバイス５００によりアクセス可能な任意の他の媒体、が含まれるがこれに限定されない。いずれのかかる有形コンピュータ可読媒体も、コンピューティングデバイス５００の一部であるとしてもよい。
【００６１】
コンピューティングデバイス５００はまた、キーボード、マウス、タッチセンサ式ディスプレイ、音声入力装置等の入力装置（単数または複数）５１２、および、ディスプレイ、スピーカ、プリンタ等の出力装置（単数または複数）５１４、を有する。これらの装置は、従来技術において周知であり、ここで詳細に検討する必要はない。
【００６２】
コンピューティングデバイス５００はまた、コンピューティングデバイス５００が他のコンピューティングデバイス５１８と通信することを可能にする、通信接続５１６を含む。
【００６３】
結論
主題について、構造的特徴および／または方法論的行為に特有の言語で説明されたが、添付の請求項において定義される主題が、特定の説明された特徴または行為に、必ずしも限定されないことを、理解されたい。むしろ、特定の特徴および行為は、請求項を実装する例示の形式として開示される。
【図１】
2017502394.tif 000003
【図２】
2017502394.tif 000004
【図３】
2017502394.tif 000005
【図４】
2017502394.tif 000006
【図５】
2017502394.tif 000007
【国際調査報告】
2017502394.tif 000008
2017502394.tif 000009