Problemas de segurança de registro em log de mensagens
Este tópico descreve como você pode proteger dados confidenciais contra serem expostos em logs de mensagens, bem como eventos gerados pelo registro em log de mensagens.
Preocupações com a segurança
Registrar informações confidenciais
O Windows Communication Foundation (WCF) não modifica nenhum dado em cabeçalhos e corpo específicos do aplicativo. O WCF também não rastreia informações pessoais em cabeçalhos ou nos dados de conteúdo específicos do aplicativo.
Quando o log de mensagens está habilitado, informações pessoais em cabeçalhos específicos do aplicativo, como uma cadeia de caracteres de consulta, e informações do corpo, como um número de cartão de crédito, podem ficar visíveis nos logs. O implantador de aplicativos é responsável por impor o controle de acesso nos arquivos de configuração e de log. Se você não quiser que esse tipo de informação fique visível, desabilite o registro em log ou filtre parte dos dados se quiser compartilhar os logs.
As dicas a seguir podem ajudá-lo a impedir que o conteúdo de um arquivo de log seja exposto sem querer:
Verifique se os arquivos de log estão protegidos por ACL (Listas de Controle de Acesso) tanto em cenários de host da Web quanto de auto-host.
Escolha uma extensão de arquivo que não pode ser facilmente atendida usando uma solicitação da Web. Por exemplo, a extensão de arquivo .xml não é uma opção segura. Você pode verificar o guia de administração dos Serviços de Informações da Internet (IIS) para ver uma lista de extensões que podem ser atendidas.
Especifique um caminho absoluto para o local do arquivo de log, que deve estar fora do diretório público vroot do host Web para impedir que ele seja acessado por uma parte externa usando um navegador da Web.
Por padrão, chaves e informações de identificação pessoal (PII), como nome de usuário e senha, não são registradas em rastreamentos e mensagens registradas. No entanto, um administrador de computador pode usar o atributo enableLoggingKnownPII
no elemento machineSettings
do arquivo Machine.config para permitir que aplicativos em execução no computador registrem informações conhecidas de identificação pessoal (PII). A configuração a seguir demonstra como fazer isso:
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true"/>
</system.serviceModel>
</configuration>
Um implantador de aplicativos pode usar o atributo logKnownPii
no arquivo App.config ou Web.config para habilitar o registro em log de PII da seguinte maneira:
<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>
Somente quando ambas as configurações estiverem true
é que o registro em log das PII é habilitado. A combinação de dois comutadores permite a flexibilidade de registrar a PII conhecida para cada aplicativo.
Importante
No .NET Framework 4.6.1, os sinalizadores logEntireMessage
e logKnownPii
também devem ser definidos como true
no arquivo Web.config ou no arquivo App.config para habilitar o registro em log de PII, conforme mostrado no exemplo a seguir <system.serviceModel><messageLogging logEntireMessage="true" logKnownPii="true" …
.
Você deve estar ciente de que, se você especificar duas ou mais fontes personalizadas em um arquivo de configuração, somente os atributos da primeira fonte serão lidos. Os outros são ignorados. Isso significa que, para o arquivo App.config a seguir, as PII não estão registradas em log para ambas as fontes, embora o registro em log de PII esteja explicitamente habilitado para a segunda origem.
<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>
Se o elemento <machineSettings enableLoggingKnownPii="Boolean"/>
existir fora do arquivo Machine.config, o sistema gerará um ConfigurationErrorsException.
As alterações só são efetivas quando o aplicativo é iniciado ou reiniciado. Um evento é registrado na inicialização quando ambos os atributos são definidos como true
. Um evento também será registrado se logKnownPii
estiver definido como true
, mas enableLoggingKnownPii
estiver false
.
O administrador do computador e o implantador de aplicativos devem ter extrema cautela ao usar essas duas opções. Se o registro de Informações Pessoais Identificáveis (PII) estiver habilitado, as chaves de segurança e as informações pessoais identificáveis devem ser registradas. Se estiver desabilitado, os dados confidenciais e específicos do aplicativo ainda estarão registrados em cabeçalhos e corpos de mensagens. Para uma discussão mais completa sobre privacidade e proteção de informações pessoalmente identificáveis contra exposição, consulte Privacidade do Usuário.
Cuidado
A PII não está oculta em mensagens malformadas. Essas mensagens são registradas as-is sem nenhuma modificação. Atributos mencionados anteriormente não têm efeito sobre isso.
Ouvinte de rastreamento personalizado
Adicionar um ouvinte de rastreamento personalizado na fonte de rastreamento do log de mensagens é um privilégio que deve ser restrito ao administrador. Isso ocorre porque ouvintes personalizados mal-intencionados podem ser configurados para enviar mensagens remotamente, o que leva à divulgação de informações confidenciais. Além disso, se você configurar um ouvinte personalizado para enviar mensagens no fio, como para um banco de dados remoto, você deverá impor o controle de acesso adequado nos logs de mensagens no computador remoto.
Eventos disparados pelo log de mensagens
A seguir estão listados todos os eventos emitidos pelo log de mensagens.
Registro em log de mensagens ativado: esse evento é emitido quando o log de mensagens está habilitado na configuração ou por meio do WMI. O conteúdo do evento é "O log de mensagens foi ativado." Informações confidenciais podem estar registradas em texto não criptografado, mesmo que tenham sido criptografadas durante a transmissão, por exemplo, o conteúdo das mensagens.
Desativação do registro em log de mensagens: esse evento é emitido quando o registro em log de mensagens é desabilitado por meio do WMI. O conteúdo do evento é "O registro em log de mensagens foi desativado".
Log de PII conhecidas ativado: esse evento é emitido quando o log de PII conhecidas está habilitado. Isso acontece quando o atributo
enableLoggingKnownPii
no elementomachineSettings
do arquivo Machine.config é definido comotrue
e o atributologKnownPii
do elementosource
no arquivo App.config ou Web.config é definido comotrue
.Log de PII conhecidas não permitido: esse evento é emitido quando o registro em log de PII conhecidas não é permitido. Isso acontece quando o atributo
logKnownPii
do elementosource
no arquivo App.config ou Web.config é definido comotrue
, mas o atributoenableLoggingKnownPii
no elementomachineSettings
do arquivo Machine.config é definido comofalse
. Nenhuma exceção é gerada.
Esses eventos podem ser exibidos na ferramenta Visualizador de Eventos que vem com o Windows. Para mais informações sobre isso, consulte Registro de Eventos.