Problemas de segurança de registro em log de mensagens
Este tópico descreve como você pode proteger dados confidenciais contra exposição em logs de mensagens, bem como eventos gerados pelo log de mensagens.
Problemas de segurança
Registrar informações confidenciais
O WCF (Windows Communication Foundation) não modifica nenhum dado no corpo e em cabeçalhos específicos do aplicativo. O WCF também não controla informações pessoais em cabeçalhos específicos do aplicativo ou dados do corpo.
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 log ou filtre parte dos dados se quiser compartilhar os logs.
As dicas a seguir podem ajudar a evitar que o conteúdo do arquivo de log seja exposto de maneira não intencional:
Verifique se os arquivos de log estão protegidos por ACL (listas de controle de acesso) em cenários de host da Web e auto-host.
Escolha uma extensão de arquivo que não possa 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 conferir o guia de administração de ISS (Serviços de Informações da Internet) para ver uma lista das extensões que podem ser usadas.
Especifique um caminho absoluto para o local do arquivo de log, que deverá estar fora da vroot do host da web para evitar que seja acessado por terceiros usando um navegador da Web.
Por padrão, chaves e PII (informações de identificação pessoal), 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 PII (informações de identificação pessoal) conhecidas. A configuração a seguir demonstra como fazer isso:
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true"/>
</system.serviceModel>
</configuration>
Em seguida, um implantador de aplicativo pode usar o atributo logKnownPii
no arquivo App.config ou Web.config para habilitar o registro em log das 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 duas opções permite a flexibilidade de registrar as PII conhecias 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 das PII, conforme mostrado no exemplo <system.serviceModel><messageLogging logEntireMessage="true" logKnownPii="true" …
a seguir.
Você deve estar ciente de que, se 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 é registrado se logKnownPii
estiver definido como true
, mas se enableLoggingKnownPii
for false
.
O administrador do computador e o implantador de aplicativos devem ter extrema cautela ao usar essas duas opções. Se o log das PII estiver habilitado, as chaves de segurança e as PII serão registradas. Se estiver desabilitado, os dados confidenciais e específicos do aplicativo ainda estarão registrados em cabeçalhos e corpos de mensagens. Para obter uma discussão mais completa sobre privacidade e proteção de PII contra a exposição, consulte Privacidade do usuário.
Cuidado
As PII não estão ocultas em mensagens malformadas. Essas mensagens são registradas como estão sem nenhuma modificação. Os atributos mencionados anteriormente não têm nenhum 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 durante a transmissão, 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
Segue uma lista 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, corpos de mensagens".
Registro em log de mensagens desativado: 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 está definido comotrue
, e o atributologKnownPii
do elementosource
no arquivo App.config ou Web.config está 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 está definido comotrue
, mas o atributoenableLoggingKnownPii
do elementomachineSettings
no arquivo Machine.config está definido comofalse
. Nenhuma exceção é gerada.
Esses eventos podem ser exibidos na ferramenta Visualizador de Eventos que vem com o Windows. Para obter mais informações sobre isso, consulte Log de eventos.