Comment : activer la détection de relecture des messages
Une attaque par relecture se produit lorsqu'un intrus copie un flux de messages entre deux correspondants et relit le flux à l'un ou plusieurs des correspondants. Sauf atténuation, les ordinateurs sujets à l'attaque traiteront le flux comme messages légitimes, ce qui a des conséquences néfastes telles que des ordres redondants d'un élément.
Pour plus d'informations sur la détection des relectures de messages, consultez https://go.microsoft.com/fwlink/?LinkId=88536 (page pouvant être en anglais).
La procédure suivante illustre différentes propriétés que vous pouvez utiliser pour contrôler la détection de relecture à l'aide de Windows Communication Foundation (WCF).
Pour contrôler la détection de relecture sur le client à l'aide du code
Créez un SecurityBindingElement à utiliser dans un CustomBinding. Pour plus d'informations, consultez Comment : créer une liaison personnalisée à l'aide de SecurityBindingElement. L'exemple suivant utilise un SymmetricSecurityBindingElement créé avec le CreateKerberosBindingElement de la classe SecurityBindingElement.
Utilisez la propriété LocalClientSettings pour retourner une référence à la classe LocalClientSecuritySettings et définir les propriétés suivantes, selon le cas :
- DetectReplay. Valeur booléenne. Elle détermine si le client doit détecter les relectures à partir du serveur. La valeur par défaut est true.
- MaxClockSkew. Valeur TimeSpan. Détermine l'inclinaison d'horloge que peut tolérer le mécanisme de relecture entre le client et le serveur. Le mécanisme de sécurité examine l'horodatage envoyé et détermine s'il a été envoyé il y a trop longtemps. La valeur par défaut est 5 minutes.
- ReplayWindow. Valeur TimeSpan. Détermine pendant combien de temps un message peut vivre sur le réseau après que le serveur l'a envoyé (par le biais d'intermédiaires) avant d'atteindre le client. Le client effectue le suivi des signatures des messages envoyés dans le ReplayWindow le plus récent pour les besoins de la détection de relecture.
- ReplayCacheSize. Valeur entière. Le client stocke les signatures du message dans un cache. Ce paramètre spécifie combien de signatures le cache peut stocker. Si le nombre de messages envoyés dans la dernière fenêtre de relecture atteint la limite de cache, les nouveaux messages sont rejetés jusqu'à ce que les signatures mises en cache les plus anciennes atteignent la limite de temps. La valeur par défaut est 500000.
Pour contrôler la détection de relecture sur le service à l'aide du code
Créez un SecurityBindingElement à utiliser dans un CustomBinding.
Utilisez la propriété LocalServiceSettings pour retourner une référence à la classe LocalServiceSecuritySettings et définissez les propriétés comme décrit précédemment.
Pour contrôler la détection de relecture dans la configuration pour le client ou le service
Créez un customBinding Element.
Créez un élément <security>.
Créez un localClientSettings element ou un localServiceSettings element.
Définissez les valeurs d'attributs suivantes, le cas échéant : detectReplays, maxClockSkew, replayWindow et replayCacheSize. L'exemple suivant définit les attributs d'un élément <localServiceSettings> et d'un élément <localClientSettings> :
<customBinding> <binding name="NewBinding0"> <textMessageEncoding /> <security> <localClientSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <localServiceSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <secureConversationBootstrap /> </security> <httpTransport /> </binding> </customBinding>
Exemple
L'exemple suivant crée un SymmetricSecurityBindingElement à l'aide de la méthode CreateKerberosBindingElement et définit les propriétés de relecture de la liaison.
Étendue de relecture : sécurité de message uniquement
Notez que les procédures suivantes s'appliquent uniquement au mode de sécurité Message. Pour les modes Transport et Transport avec informations d'identification de message, les mécanismes de transport détectent les relectures.
Remarques relatives aux conversations sécurisées
Pour les liaisons qui activent les conversations sécurisées, vous pouvez ajuster ces paramètres à la fois pour le canal d'application et pour la liaison du démarrage de conversation sécurisée. Par exemple, vous pouvez désactiver les relectures pour le canal d'application mais les activer pour le canal de démarrage qui établit la conversation sécurisée.
Si vous n'utilisez pas de sessions de conversation sécurisée, la détection des relectures n'est pas garantie dans les scénarios de batterie de serveurs et lorsque le processus est recyclé. Cela s'applique aux liaisons fournies par le système suivantes :
- BasicHttpBinding.
- WSHttpBinding avec la propriété EstablishSecurityContext définie à la valeur false.
Compilation du code
- Les espaces de noms suivants sont requis pour compiler le code :
- System
- System.ServiceModel
- System.ServiceModel.Channels
Voir aussi
Référence
LocalClientSecuritySettings
LocalServiceSecuritySettings
Concepts
Conversations sécurisées et sessions sécurisées
Comment : créer une liaison personnalisée à l'aide de SecurityBindingElement