Share via


Cloaking (COM)

Le mastruage est une fonctionnalité de sécurité COM qui détermine l’identité que le client projette vers le serveur lors de l’emprunt d’identité. Lorsque le masage est défini, le serveur intermédiaire masque sa propre identité et présente l’identité du client au serveur qu’il appelle au nom du client. Fondamentalement; l’identité cliente qui est vue par le serveur est l’identité associée au proxy. L’identité du proxy est déterminée par plusieurs facteurs, dont l’un est le type de masquant défini (le cas échéant). Le masquant n’est pas pris en charge par le fournisseur de sécurité Schannel.

Les rubriques suivantes fournissent plus d’informations sur le masage :

Types de masclage

Il existe deux types de masquage : le masquage statique et le masquage dynamique :

  • Avec le mastruage statique (EOAC_STATIC_CLOAKING), le serveur voit le jeton de thread du premier appel d’un client au serveur. Pour le premier appel, si l’identité de proxy a été précédemment définie lors d’un appel à CoSetProxyBlanket, cette identité de proxy est utilisée. Toutefois, si l’identité du proxy n’a pas été définie précédemment, le jeton de thread est utilisé. Si aucun jeton de thread n’est présent, le jeton de processus est utilisé. Pour tous les appels futurs, l’identité définie sur le premier appel est utilisée.
  • Avec le masquage dynamique (EOAC_DYNAMIC_CLOAKING), sur chaque appel, le jeton de thread actuel (s’il existe un jeton de thread) est utilisé pour déterminer l’identité du client. S’il n’y a pas de jeton de thread, le jeton de processus est utilisé. Cela signifie que les serveurs appelés au nom du client lors de l’emprunt d’identité voient l’identité du client COM à l’origine de l’appel, qui est généralement le comportement souhaité. (Bien entendu, pour que l’emprunt d’identité réussisse, le client doit avoir donné au serveur l’autorisation d’emprunter l’identité en définissant un niveau d’emprunt d’identité approprié. Pour plus d’informations, consultez Niveaux d’emprunt d’identité.) Ce type de manteau est coûteux.

Comment le masage affecte l’identité du client

Lorsqu’un appel chiffré est effectué et que le serveur demande au client son identité, il obtient généralement l’identité liée au proxy. (Parfois, le service d’authentification effectue une traduction à partir de l’identité réelle, mais généralement l’identité proxy est l’identité que le serveur voit.) Le proxy présente une identité au serveur qui dépend du type de mastruage défini et d’autres facteurs.

Pour résumer, l’identité du client est une fonction de l’ensemble d’indicateurs de masage, du jeton de processus, de la présence ou de l’absence d’un jeton de thread, et si l’identité de proxy a été définie précédemment. Le tableau suivant montre l’identité de proxy (identité cliente) résultante lorsque ces facteurs varient.

Indicateurs de mastruage Présence de jeton de thread Identité de proxy précédemment définie Identité proxy (identité cliente)
Le mastruage n’est pas défini
S’en ficher
S’en ficher
Jeton de processus ou identité d’authentification
EOAC_STATIC_CLOAKING
Présent
Non
Jeton de thread
EOAC_STATIC_CLOAKING
Présent
Oui
Identité de proxy actuelle
EOAC_STATIC_CLOAKING
Non présent
Non
Jeton de processus
EOAC_STATIC_CLOAKING
Non présent
Oui
Identité de proxy actuelle
EOAC_DYNAMIC_CLOAKING
Présent
S’en ficher
Jeton de thread
EOAC_DYNAMIC_CLOAKING
Non présent
S’en ficher
Jeton de processus

L’organigramme suivant illustre la façon dont l’identité de proxy est déterminée dans différentes situations.

Diagramme montrant le flux permettant de déterminer l’identité du proxy.

Définition du masage

Le mascarage est défini en tant qu’indicateur de fonctionnalité dans un appel à CoInitializeSecurity, qui définit le mascarrage pour l’ensemble du processus. La fonctionnalité de mascarrage est ensuite définie jusqu’à ce que le client la change par le biais d’un appel à IClientSecurity::SetBlanket (ou à CoSetProxyBlanket), qui définit le mascarrage pour le proxy.

Par défaut, le masquant n’est pas défini. Pour le définir, passez EOAC_STATIC_CLOAKING ou EOAC_DYNAMIC_CLOAKING au paramètre pCapabilities dans CoInitializeSecurity ou SetBlanket.

Lorsque le mascarnage statique est activé à l’aide de CoInitializeSecurity, chaque proxy récupère un jeton (thread ou processus) la première fois que vous effectuez un appel sur le proxy. Lorsque le mastruage statique est activé à l’aide de SetBlanket, le proxy récupère le jeton sur le thread à ce moment-là. Si aucun jeton de thread n’est disponible lors de l’appel de SetBlanket , le jeton de processus est utilisé pour l’identité du proxy. Fondamentalement, SetBlanket corrige l’identité du proxy.

Avec le masquage dynamique, l’identité du proxy est déterminée de la même façon, que le masquage dynamique soit défini à l’aide de CoInitializeSecurity ou de SetBlanket. Le jeton de thread actuel est utilisé s’il y en a un ; sinon, le jeton de processus est utilisé.

Si le mascarnage est défini pour l’ensemble du processus via un appel à CoInitializeSecurity et que vous souhaitez effectuer des appels avec le jeton de processus, n’empruntez pas l’identité lors de l’appel.

Niveaux de masage et d’emprunt d’identité

Comme mentionné précédemment, la fonctionnalité de masage détermine l’identité présentée à un serveur lors de l’emprunt d’identité. Le cloaking permet à un serveur de projeter une identité autre que la sienne sur un autre serveur qu’il appelle pour le compte du client. Le niveau d’emprunt d’identité indique la quantité d’autorité que le client a accordée au serveur.

L’emprunt d’identité sans mastrurage fonctionne, mais ce n’est peut-être pas le meilleur choix, car, dans certains cas, le serveur final doit connaître l’identité de l’appelant initial. Cela ne peut pas être réalisé sans utiliser le mastruage, car il est difficile de s’assurer que seuls les clients autorisés peuvent accéder à un ordinateur distant. Lorsque l’emprunt d’identité est utilisé sans dissipation, l’identité présentée à un serveur en aval est celle du processus d’appel immédiat.

Toutefois, le mastruage n’est pas utile sans emprunt d’identité. Le masculage n’a de sens que lorsque le client a défini un niveau d’emprunt d’identité d’emprunt d’identité ou de délégué. (Avec des niveaux d’emprunt d’identité inférieurs, le serveur ne peut pas effectuer d’appels masqués.) La réussite du mastruage dépend du nombre de limites d’ordinateurs franchies et du niveau d’emprunt d’identité, qui indique l’autorité dont dispose le serveur pour agir au nom du client.

Dans certaines situations, il est logique que le serveur définisse le masage lorsque le client définit le niveau d’emprunt d’identité sur RPC_C_IMP_LEVEL_IMPERSONATE. Toutefois, certaines limitations sont appliquées. Si le client d’origine définit le niveau d’emprunt d’identité sur RPC_C_IMP_LEVEL_IMPERSONATE, le serveur intermédiaire (agissant en tant que client sur le même ordinateur) ne peut franchir qu’une seule limite d’ordinateur. Cela est dû au fait qu’un jeton d’emprunt d’identité au niveau de l’emprunt d’identité peut être passé sur une seule limite d’ordinateur. Une fois la limite de l’ordinateur franchie, seules les ressources locales sont accessibles. L’identité présentée au serveur dépend du type de mastruage défini. Si aucun masclage n’est défini, l’identité présentée à un serveur sera celle du processus effectuant l’appel immédiat.

Pour dépasser plusieurs limites d’ordinateurs, vous devez spécifier un indicateur de fonctionnalité de mastruage approprié et l’emprunt d’identité au niveau du délégué. Avec ce type d’emprunt d’identité, les informations d’identification locales et réseau du client sont données au serveur, de sorte que le jeton d’emprunt d’identité peut franchir n’importe quel nombre de limites d’ordinateur. Là encore, l’identité présentée au serveur dépend du type de mastruage défini. Si aucun masclage n’est défini avec l’emprunt d’identité au niveau du délégué, l’identité présentée à un serveur est celle du processus qui effectue l’appel.

Par exemple, supposons que le processus A appelle B et que B appelle C. B a défini le masage et A a défini le niveau d’emprunt d’identité sur l’emprunt d’identité. Si A, B et C se trouvent sur le même ordinateur, le passage du jeton d’emprunt d’identité de A à B, puis à C fonctionne. Mais si A et C se trouvent sur le même ordinateur, et que B ne l’est pas, la transmission du jeton fonctionne entre A et B, mais pas de B à C. L’appel de B à C échoue, car B ne peut pas appeler C lors du masquage. Toutefois, si A définit le niveau d’emprunt d’identité sur délégué, le jeton peut être passé de B à C et l’appel peut réussir.

Scénarios de masage

Dans l’illustration suivante, traiter A appelle B, C, appelle D quand le mastruage n’est pas défini. Par conséquent, chaque processus intermédiaire voit l’identité du processus qui l’a appelé.

Diagramme montrant le processus lorsque le masage n’est pas défini.

Avec le masclage statique, le serveur voit l’identité de proxy qui a été définie lors du premier appel du client au serveur. La figure suivante montre un exemple de l’identité de proxy définie lors d’un appel de B à C. Lors d’un appel suivant, le processus D voit l’identité de B lorsque le masquetage statique est défini par B et C.

Diagramme montrant le processus de masage statique.

Avec le masquage dynamique, l’identité de l’appelant pendant l’emprunt d’identité est basée sur le jeton de thread actuel, le cas échéant. L’illustration suivante montre la situation où B et C définissent le masquage dynamique et D voit l’identité de A, malgré un appel antérieur de B à C.

Diagramme montrant le processus de masquage dynamique.

Délégation et emprunt d’identité