PII Security Lockdown
Cet exemple illustre les diverses fonctionnalités de sécurité des services Windows Communication Foundation (WCF) :
- Chiffrement des informations sensibles dans le fichier de configuration du service.
- Verrouillage de certains éléments du fichier de configuration afin que les sous-répertoires de service imbriqués ne puissent pas se substituer aux paramètres.
- Contrôle de l'enregistrement des informations d'identification personnelles (PII) dans les journaux de suivi et de message.
Chacune de ces fonctionnalités peut être utilisée séparément ou simultanément afin de contrôler les divers aspects relatifs à la sécurité des services. Cet exemple ne constitue pas un guide définitif en matière de sécurisation des services WCF.
Les fichiers de configuration .NET Framework peuvent contenir des informations sensibles telles que les chaînes de connexion permettant de se connecter aux bases de données. Dans le cadre de services partagés et hébergés par le Web, le chiffrement de ces informations dans le fichier de configuration des services concernés peut s'avérer souhaitable pour assurer leur protection en cas de consultation informelle. .NET Framework 2.0 et ses versions ultérieures permettent de chiffrer certains passages des fichiers de configuration à l'aide de l'interface de programmation d'applications de protection des données Windows (Data Protection Application Programming Interface, DPAPI) ou du fournisseur de services de chiffrement RSA. Le programme aspnet_regiis.exe peut chiffrer les sections choisies d'un fichier de configuration donné à l'aide de l'interface ou du fournisseur ci-dessus.
Dans le cadre de scénarios hébergés par le Web, il est possible de placer ces services dans les sous-répertoires d'autres services. La valeur par défaut sémantique définissant les valeurs de configuration permet aux fichiers de configuration figurant dans les répertoires imbriqués de se substituer aux valeurs de configuration figurant dans le répertoire parent. Dans certaines situations et pour diverses raisons, il peut s'avérer préférable qu'une telle substitution ne soit pas possible. La configuration des services WCF prend en charge une fonctionnalité de verrouillage de valeurs de configuration. Cette fonctionnalité activée, la configuration imbriquée génère des exceptions lorsqu'un service imbriqué s'exécute à l'aide des valeurs de configuration substituées.
Cet exemple illustre comment contrôler la fonctionnalité d'enregistrement des informations d'identifications personnelles connues, telles que le nom d'utilisateur et le mot de passe, dans les journaux de suivi et de message. Par défaut, l'enregistrement des PII connues est désactivé. Toutefois, dans certaines situations, leur enregistrement peut s'avérer essentiel lors du débogage des applications. Cet exemple est basé sur Getting Started, exemple. En outre, cet exemple utilise l'enregistrement des suivis et des messages. Pour plus d'informations, consultez l'exemple Tracing and Message Logging.
Chiffrement des éléments de fichier de configuration
Pour des raisons de sécurité, dans le cadre d'un environnement partagé avec hébergement Web, le chiffrement de certains éléments de configuration tels que les chaînes de connexion aux bases de données, susceptibles de contenir des informations sensibles, peut s'avérer souhaitable. De tels éléments peuvent être chiffrés à l'aide de l'outil aspnet_regiis.exe figurant dans le dossier .NET Framework, WINDIR%\Micrsoft.NET\Framework\v2.0.50727.
Pour chiffrer les valeurs dans la section appSettings du fichier Web.config de l'exemple
Ouvrez une invite de commandes en utilisant le menu Démarrer ->, puis l'option Exécuter... Tapez cmd, puis cliquez sur OK.
Naviguez jusqu'au répertoire .NET Framework actuel en publiant la commande suivante :
cd %WINDIR%\Micrsoft.NET\Framework\v2.0.50727
.Chiffrez les paramètres de configuration appSettings du dossier Web.config en publiant la commande suivante :
aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"
.
Vous trouverez de plus amples informations sur le chiffrement des sections des fichiers de configuration en consultant les sections suivantes (pour l'interface DPAPI et le fournisseur RSA, respectivement) : Génération des applications ASP.NET sécurisées : authentification, autorisation et communication Sécurisée (page pouvant être en anglais) et Comment : chiffrer des sections de configuration dans ASP.NET 2.0 à l'aide de RSA (page pouvant être en anglais).
Verrouillage des éléments de fichier de configuration
Dans le cadre de services hébergés par le Web, il est possible de placer ces services dans les sous-répertoires d'autres services. Dans ce genre de situation, les valeurs de configuration des services placés dans ces sous-répertoires sont calculées en examinant les valeurs du fichier Machine.config. Ces valeurs sont ensuite fusionnées avec les valeurs des éventuels fichiers Web.config figurant dans les répertoires parents en descendant la hiérarchie de l'arborescence jusqu'au fichier Web.config du répertoire contenant les services concernés. Le comportement par défaut de la plupart des éléments de configuration permet aux fichiers de configuration des sous-répertoires de se substituer aux valeurs définies dans leurs répertoires parents. Dans certains cas, il peut s'avérer préférable d'empêcher une telle substitution.
Le .NET Framework propose une fonctionnalité permettant de verrouiller les éléments de configuration, provoquant ainsi la levée d'exception pendant l'exécution lorsque les fichiers de configuration des sous-répertoires tentent de se substituer aux éléments verrouillés.
Les éléments de configuration peuvent être verrouillés en spécifiant l'attribut lockItem pour un nœud du fichier de configuration. Par exemple, pour verrouiller le nœud CalculatorServiceBehavior afin que les services de calculatrice des fichiers de configuration imbriqués ne puissent pas modifier ce comportement, la configuration suivante peut être utilisée.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" lockItem="true">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Le verrouillage des éléments de configuration peut s'effectuer à un niveau plus granulaire. La valeur à laquelle lockElements est appliqué peut être spécifiée sous la forme d'une liste d'éléments afin de verrouiller un ensemble d'éléments au sein d'une collection de sous-éléments. La valeur à laquelle lockAttributes est appliqué peut être définie sous la forme d'une liste d'attributs pour verrouiller un ensemble d'attributs au sein d'un élément. Une collection entière d'éléments ou d'attributs peut être verrouillée à l'exception d'une liste spécifiée au niveau des attributs lockAllElementsExcept ou lockAllAttributesExcept sur un nœud.
Configuration de l'enregistrement des informations d'identification personnelles
L'enregistrement des PII est contrôlé par deux commutateurs : paramètre à l'échelle de l'ordinateur situé dans le fichier Machine.config permettant à l'administrateur de cet ordinateur d'autoriser ou non leur enregistrement et paramètre d'application permettant aux administrateurs d'application d'activer ou non leur enregistrement pour chaque source dans les fichiers Web.config ou App.config.
Le paramètre à l'échelle de l'ordinateur est contrôlé en affectant à enableLoggingKnownPii la valeur true ou false au niveau de l'élément machineSettings du fichier Machine.config. Par exemple, le code suivant permet aux applications d'activer l'enregistrement des PII.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
Remarque : |
---|
Le fichier Machine.config se trouve dans un emplacement par défaut : %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG. |
Si l'attribut enableLoggingKnownPii n'est pas présent dans le fichier Machine.config, l'enregistrement des PII n'est pas autorisé.
L'enregistrement des PII pour une application est activé en affectant à l'attribut logKnownPii de l'élément source la valeur true ou false dans les fichiers Web.config ou App.config. Par exemple, le code suivant active l'enregistrement des PII à la fois pour l'enregistrement des messages et des suivis.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" logKnownPii="true">
<listeners>
...
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Si l'attribut logKnownPii n'est pas spécifié, les PII ne sont pas enregistrées.
Les PII sont uniquement enregistrées si les deux attributs enableLoggingKnownPii et logKnownPii ont la valeur true.
Remarque : |
---|
System.Diagnostics ignore tous les attributs de toutes les sources, sauf le premier attribut répertorié dans le fichier de configuration. L'ajout de l'attribut logKnownPii à la seconde source du fichier de configuration est sans effet. |
Remarque : |
---|
L'exécution de cet exemple implique de modifier manuellement le fichier Machine.config. Vous devez faire très attention lorsque vous modifiez le fichier Machine.config, toutes valeurs ou syntaxes incorrectes étant susceptibles d'empêcher l'exécution des applications .NET Framework. |
Les éléments de fichier de configuration peuvent également être chiffrés à l'aide de DPAPI et RSA. Pour plus d'informations, consultez les liens suivants :
- Génération d'applications ASP.NET sécurisées : authentification, autorisation et communication sécurisée (page pouvant être en anglais)
- Comment : chiffrer des sections de configuration dans ASP.NET 2.0 à l'aide de RSA (page pouvant être en anglais)
Pour configurer, générer et exécuter l'exemple
Assurez-vous d'avoir effectué la procédure figurant à la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Modifiez le fichier Machine.config pour affecter à l'attribut enableLoggingKnownPii la valeur true en ajoutant les nœuds parents, si nécessaire.
Pour générer l'édition C# ou Visual Basic .NET de la solution, suivez les instructions figurant dans la rubrique Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans Exécution des exemples Windows Communication Foundation.
Pour procéder au nettoyage après exécution de l'exemple
- Modifiez le fichier Machine.config pour affecter à l'attribut enableLoggingKnownPii la valeur false.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.