委任と偽装
クライアント/サーバーのシナリオでは、あるサーバーが別のサーバーを呼び出して、クライアントに代わって何らかのタスクを実行するのが一般的です。 サーバーにクライアントに代わって動作する権限が与えられている状況は、委任と呼ばれます。
セキュリティの観点からは、委任に関して次の 2 つの問題が発生します。
- クライアントに代わって動作する場合、サーバーは何を許可する必要がありますか?
- クライアントの代わりに他のサーバーを呼び出すと、サーバーによってどのような ID が表示されますか?
これらの問題に対処するために、COM には次の機能があります。 クライアントは、サーバーが クライアントとして機能できる範囲を決定する偽装レベル を設定できます。 クライアントがサーバーに十分な権限を付与すると、サーバーはクライアントを偽装 (なりすまし) できます。 クライアントを偽装すると、サーバーには、クライアントが使用するアクセス許可を持つオブジェクトまたはリソースにのみアクセス権が付与されます。 クライアントとして機能するサーバーは、クローキングを有効にして独自の ID をマスクし、他の COM コンポーネントへの呼び出しでクライアントの ID を投影することもできます。
前の図に示すシナリオを考えてみましょう。A と B は C とは異なるコンピューター上のプロセスです。プロセス A は B を呼び出し、B は C を呼び出します。クライアント A は偽装レベルを設定します。 B はクローキング機能を設定します。 A が偽装を許可する権限借用レベルを設定した場合、B は A に代わって C を呼び出すときに A を偽装できます。 プロセス C に提示される ID は、クローキングが B によって有効にされたかどうかに応じて、A の ID または B の ID のいずれかになります。クローキングが有効になっている場合、C を処理するために提示される ID は A になります。クローキングが有効になっていない場合、B の ID が C に提示されます。
詳細については、次のトピックを参照してください。