Problèmes de sécurité pour la journalisation des messages
Cette rubrique décrit comment vous pouvez protéger les données sensibles contre l’exposition dans les journaux des messages, ainsi que les événements générés par la journalisation des messages.
Problèmes de sécurité
Journalisation des informations sensibles
Windows Communication Foundation (WCF) ne modifie aucune donnée dans les en-têtes et corps spécifiques à l’application. WCF n’effectue pas non plus le suivi des informations personnelles présentes dans les en-têtes propres à l’application ou les données relatives au corps.
Lorsque la journalisation des messages est activée, les informations personnelles dans des en-têtes spécifiques à l’application, telles qu’une chaîne de requête ; et les informations de corps, telles qu’un numéro de carte de crédit, peuvent devenir visibles dans les journaux. Le déployeur d’applications est chargé d’appliquer le contrôle d’accès sur les fichiers journaux et de configuration. Si vous ne souhaitez pas que ce type d’informations soit visible, vous devez désactiver la journalisation ou filtrer une partie des données si vous souhaitez partager les journaux.
Les conseils suivants peuvent vous aider à empêcher l’exposition involontaire du contenu d’un fichier journal :
Vérifiez que les fichiers journaux sont protégés par les listes de contrôle d’accès (ACL) dans les scénarios d’hôte web et d’auto-hôte.
Choisissez une extension de fichier qui ne peut pas être facilement traitée à l’aide d’une requête Web. Par exemple, l’extension de fichier .xml n’est pas un choix sûr. Vous pouvez consulter le guide d’administration iis (Internet Information Services) pour afficher la liste des extensions qui peuvent être traitées.
Spécifiez un chemin absolu pour l’emplacement du fichier journal, qui doit se trouver en dehors du répertoire public vroot de l’hôte web pour empêcher son accès par un tiers externe à l’aide d’un navigateur Web.
Par défaut, les clés et les informations d’identification personnelle (PII), telles que le nom d’utilisateur et le mot de passe, ne sont pas enregistrées dans les traces et les messages enregistrés. Toutefois, un administrateur d’ordinateur peut utiliser l’attribut enableLoggingKnownPII
dans l’élément machineSettings
du fichier Machine.config pour permettre aux applications s’exécutant sur l’ordinateur de journaliser les informations d’identification personnelle (PII) connues. La configuration suivante montre comment procéder :
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true"/>
</system.serviceModel>
</configuration>
Un déployeur d’applications peut ensuite utiliser l’attribut logKnownPii
dans le fichier App.config ou Web.config pour activer la journalisation des informations d’identification personnelle comme suit :
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
La journalisation des informations personnelles est activée uniquement lorsque les deux paramètres sont réglés sur true
. La combinaison de deux commutateurs permet de consigner les informations d’identification personnelle connues pour chaque application.
Important
Dans .NET Framework 4.6.1, les indicateurs de logEntireMessage
et de logKnownPii
doivent également être définis sur true
dans le fichier Web.config ou le fichier App.config pour activer la journalisation des informations personnelles, comme indiqué dans l’exemple suivant <system.serviceModel><messageLogging logEntireMessage="true" logKnownPii="true" …
.
Sachez que si vous spécifiez deux sources personnalisées ou plus dans un fichier de configuration, seuls les attributs de la première source sont lus. Les autres sont ignorés. Cela signifie que, pour le fichier App.config, les informations d’identification personnelles (PII) ne sont pas enregistrées pour les deux sources, même si la journalisation des PII est explicitement activée pour la deuxième source.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="traces"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Si l’élément <machineSettings enableLoggingKnownPii="Boolean"/>
existe en dehors du fichier Machine.config, le système jette une ConfigurationErrorsException.
Les modifications sont effectives uniquement lorsque l’application démarre ou redémarre. Un événement est enregistré au démarrage lorsque les deux attributs sont définis sur true
. Un événement est également journalisé si logKnownPii
est défini sur true
, mais enableLoggingKnownPii
est false
.
L’administrateur de l’ordinateur et le déploiement d’applications doivent faire preuve d’une prudence extrême lors de l’utilisation de ces deux commutateurs. Si la journalisation des informations d’identification personnelle est activée, les clés de sécurité et les informations d’identification personnelle sont journalisées. S’il est désactivé, les données sensibles et propres à l’application sont toujours enregistrées dans les en-têtes et corps de message. Pour une discussion plus approfondie sur la confidentialité et la protection des informations personnelles contre l’exposition, consultez confidentialité des utilisateurs.
Attention
Les informations personnelles ne sont pas masquées dans les messages mal formés. Ces messages sont enregistrés as-is sans modification. Les attributs mentionnés précédemment n’ont aucun effet sur ce problème.
Écouteur de trace personnalisé
L'ajout d'un écouteur de suivi personnalisé sur la source de suivi de journalisation des messages est un privilège qui doit être réservé à l'administrateur. Cela est dû au fait que des écouteurs personnalisés malveillants peuvent être configurés pour envoyer des messages à distance, ce qui entraîne la divulgation d’informations sensibles. En outre, si vous configurez un écouteur personnalisé pour envoyer des messages sur le réseau, par exemple à une base de données distante, vous devez appliquer un contrôle d’accès approprié sur les journaux des messages sur l’ordinateur distant.
Événements déclenchés par la journalisation des messages
La liste suivante répertorie tous les événements enregistrés par l'enregistrement des messages.
Journalisation des messages : cet événement est émis lorsque la journalisation des messages est activée dans la configuration ou via WMI. Le contenu de l’événement est « La journalisation des messages a été activée. Les informations sensibles peuvent être consignées dans du texte clair, même si elles ont été chiffrées sur le câble, par exemple, des corps de message.
Déconnexion des messages : cet événement est émis lorsque la journalisation des messages est désactivée via WMI. Le contenu de l’événement est « La journalisation des messages a été désactivée ».
Journaliser les données personnelles connues : cet événement est généré lorsque la journalisation des données personnelles connues est activée. Cela se produit lorsque l’attribut
enableLoggingKnownPii
dans l’élémentmachineSettings
du fichier Machine.config est défini surtrue
et que l’attributlogKnownPii
de l’élémentsource
dans le fichier App.config ou Web.config est défini surtrue
.Informations personnelles connues non autorisées : cet événement est émis lorsque la journalisation des informations personnelles connues n’est pas autorisée. Cela se produit lorsque l’attribut
logKnownPii
de l’élémentsource
dans le fichier App.config ou Web.config est défini surtrue
, mais que l’attributenableLoggingKnownPii
dans l’élémentmachineSettings
du fichier Machine.config est défini surfalse
. Aucune exception n’est générée.
Ces événements peuvent être consultés dans l’outil Observateur d’événements fourni avec Windows. Pour plus d’informations à ce sujet, consultez Journalisation des événements.