Considerações de segurança com metadados

Ao usar os recursos de metadados no WCF (Windows Communication Foundation), considere as implicações de segurança da publicação, da recuperação e do uso de metadados de serviço.

Quando publicar metadados

Os serviços do WCF não publicam metadados por padrão. Para publicar metadados para um serviço WCF, você precisa habilitar explicitamente a publicação de metadados adicionando pontos de extremidade de metadados ao serviço (confira Publicação de metadados). Deixar a publicação de metadados desabilitada reduz a superfície de ataque do serviço e reduz o risco de divulgação não intencional de informações confidenciais. Nem todos os serviços precisam publicar metadados. Caso não precise publicar metadados, considere a possibilidade de mantê-los desativados. Observe que você ainda pode gerar metadados e código do cliente diretamente dos assemblies de serviço usando a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe). Para obter mais informações sobre como usar o Svcutil.exe para exportar metadados, confira Como usar o Svcutil.exe para exportar metadados do código de serviço compilado.

Como publicar metadados usando uma associação segura

As associações de metadados padrão fornecidas pelo WCF não são seguras e permitem acesso anônimo aos metadados. Os metadados de serviço que um serviço WCF publica contêm uma descrição detalhada sobre o serviço e podem conter informações confidenciais intencionalmente ou não. Por exemplo, os metadados de serviço podem conter informações sobre operações de infraestrutura que não foram destinadas a serem difundidas publicamente. Para proteger os metadados de serviço contra o acesso não autorizado, use uma associação segura para o ponto de extremidade de metadados. Os pontos de extremidade de metadados respondem às solicitações HTTP/GET que podem usar o protocolo SSL para proteger os metadados. Para obter mais informações, confira Como proteger pontos de extremidade de metadados.

A proteção dos pontos de extremidade de metadados também fornece uma forma para os solicitantes recuperarem metadados de serviço com segurança sem o risco de adulteração ou falsificação.

Como usar apenas metadados confiáveis

Você pode usar metadados de serviço para construir automaticamente os componentes de runtime necessários para chamar o serviço. Use também os metadados em tempo de design para desenvolver um aplicativo cliente ou em tempo de execução para atualizar dinamicamente a associação que um cliente usa para chamar um serviço.

Os metadados de serviço podem ser adulterados ou falsificados quando recuperados de maneira não segura. Os metadados adulterados podem redirecionar seu cliente para um serviço mal-intencionado, conter configurações de segurança comprometidas ou conter estruturas XML mal-intencionadas. Os documentos de metadados podem ser grandes e são frequentemente salvos no sistema de arquivos. Para se proteger contra adulteração e falsificação, use uma associação segura para solicitar metadados de serviço quando uma estiver disponível.

Como usar técnicas seguras para processar metadados

Os metadados de serviço são frequentemente recuperados de um serviço em uma rede usando protocolos padronizados, como o MEX (WS-MetadataExchange). Muitos formatos de metadados incluem mecanismos de referência para apontar para metadados adicionais. O tipo MetadataExchangeClient processa automaticamente as referências em documentos da linguagem WSDL, esquema XML e documentos MEX. O tamanho do objeto MetadataSet criado com base nos metadados recuperados é diretamente proporcional ao valor MaximumResolvedReferences da instância MetadataExchangeClient usada e ao valor MaxReceivedMessageSize da associação que está sendo usada por essa instância MetadataExchangeClient. Defina essas cotas com valores apropriados conforme determinado pelo seu cenário.

No WCF, os metadados de serviço são processados como XML. Ao processar documentos XML, os aplicativos devem se proteger contra estruturas XML mal-intencionadas. Use o XmlDictionaryReader com as cotas apropriadas ao processar o XML e defina a propriedade DtdProcessing como Prohibit.

O sistema de metadados no WCF é extensível, e as extensões de metadados podem ser registradas no arquivo de configuração do aplicativo (confira Como estender o sistema de metadados). As extensões de metadados podem executar um código arbitrário. Portanto, você deve proteger seu arquivo de configuração de aplicativo com ACLs (listas de controle de acesso) apropriadas e registrar apenas as implementações de extensão de metadados confiáveis.

Como validar os clientes gerados

Ao gerar o código do cliente dos metadados recuperados de uma origem que não é confiável, valide o código do cliente gerado para garantir que o cliente gerado esteja em conformidade com as políticas de segurança dos aplicativos cliente. Você pode usar um comportamento de validação para verificar as configurações na sua associação de cliente ou inspecionar visualmente o código gerado pelas ferramentas. Para ver um exemplo de como implementar um cliente que valida comportamentos, confira Validação do cliente.

Como proteger arquivos de configuração de aplicativo

O arquivo de configuração de aplicativo de um serviço pode controlar como e se os metadados são publicados. É uma boa ideia proteger o arquivo de configuração do aplicativo com ACLs (listas de controle de acesso) apropriadas para garantir que um invasor não possa modificar essas configurações.

Confira também