Partilhar via


Negação de Serviço

A negação de serviço ocorre quando um sistema está sobrecarregado de tal forma que as mensagens não podem ser processadas ou são processadas de forma extremamente lenta.

Consumo excessivo de memória

Um problema pode ocorrer ao ler um documento XML com um grande número de nomes locais, namespaces ou prefixos exclusivos. Se você estiver usando uma classe derivada de XmlReader, e chamar a LocalNamepropriedade , Prefix ou NamespaceURI para cada item, a cadeia de caracteres retornada será adicionada a um NameTablearquivo . A coleção mantida pelo NameTable nunca diminui de tamanho, criando um "vazamento de memória" virtual das alças de string.

As atenuações incluem:

  • Derive da classe e imponha uma cota NameTable de tamanho máximo. (Você não pode impedir o uso de um NameTable ou mudar o NameTable quando ele está cheio.)

  • Evite usar as propriedades mencionadas e, em vez disso, use o MoveToAttribute método com o IsStartElement método sempre que possível, esses métodos não retornam strings e, portanto, evitam o problema de encher demais a NameTable coleção.

Cliente mal-intencionado envia solicitações de licença excessivas para o serviço

Se um cliente mal-intencionado bombardear um serviço com solicitações de licença excessivas, isso pode fazer com que o servidor use memória excessiva.

Atenuação: Use as seguintes propriedades da LocalServiceSecuritySettings classe:

  • MaxCachedCookies: Controla o número máximo de time-bounded SecurityContextTokens que o servidor armazena em cache após SPNego ou SSL negociação.

  • IssuedCookieLifetime: controla o tempo de vida do SecurityContextTokens que o servidor emite após SPNego ou SSL negociação. O servidor armazena em cache o SecurityContextTokens por esse período de tempo.

  • MaxPendingSessions: Controla o número máximo de conversas seguras estabelecidas no servidor, mas para as quais nenhuma mensagem de aplicativo foi processada. Essa cota impede que os clientes estabeleçam conversas seguras no serviço, fazendo com que o serviço mantenha o estado por cliente, mas nunca as use.

  • InactivityTimeout: Controla o tempo máximo que o serviço mantém uma conversa segura ativa sem receber uma mensagem do aplicativo do cliente para a conversa. Essa cota impede que os clientes estabeleçam conversas seguras no serviço, fazendo com que o serviço mantenha o estado por cliente, mas nunca as use.

WSDualHttpBinding ou ligações personalizadas duplas requerem autenticação de cliente

Por padrão, o tem segurança WSDualHttpBinding ativada. É possível, no entanto, que se a autenticação do cliente estiver desabilitada definindo a ClientCredentialType propriedade como None, um usuário mal-intencionado possa causar um ataque de negação de serviço em um terceiro serviço. Isso pode ocorrer porque um cliente mal-intencionado pode direcionar o serviço para enviar um fluxo de mensagens para um terceiro serviço.

Para atenuar isso, não defina a propriedade como None. Também esteja ciente dessa possibilidade ao criar uma ligação personalizada que tenha um padrão de mensagem dupla.

O log de eventos de auditoria pode ser preenchido

Se um usuário mal-intencionado entender que a auditoria está habilitada, esse invasor poderá enviar mensagens inválidas que farão com que as entradas de auditoria sejam gravadas. Se o log de auditoria for preenchido dessa maneira, o sistema de auditoria falhará.

Para atenuar isso, defina a SuppressAuditFailure propriedade e true use as propriedades do Visualizador de Eventos para controlar o comportamento de auditoria. Para obter mais informações sobre como usar o Visualizador de Eventos para exibir e gerenciar logs de eventos, consulte Visualizador de Eventos. Para obter mais informações, consulte Auditoria.

Implementações inválidas de IAuthorizationPolicy podem fazer com que o serviço pare de responder

Chamar o Evaluate método em uma implementação defeituosa da IAuthorizationPolicy interface pode fazer com que o serviço pare de responder.

Atenuação: use apenas código confiável. Ou seja, use apenas o código que você escreveu e testou, ou que vem de um provedor confiável. Não permita que extensões não confiáveis sejam IAuthorizationPolicy conectadas ao seu código sem a devida consideração. Isso se aplica a todas as extensões usadas em uma implementação de serviço. WCF não faz qualquer distinção entre código de aplicativo e código estrangeiro que é conectado usando pontos de extensibilidade.

Tamanho máximo do token Kerberos pode precisar de redimensionamento

Se um cliente pertence a um grande número de grupos (aproximadamente 900, embora o número real varie dependendo dos grupos), um problema pode ocorrer quando o bloco do cabeçalho de uma mensagem excede 64 kilobytes. Nesse caso, você pode aumentar o tamanho máximo do token Kerberos. Também pode ser necessário aumentar o tamanho máximo da mensagem WCF para acomodar o token Kerberos maior.

O registro automático resulta em vários certificados com o mesmo nome de assunto para a máquina

O registro automático é o recurso do Windows Server 2003 para registrar automaticamente usuários e computadores para certificados. Quando uma máquina está em um domínio com o recurso habilitado, um certificado X.509 com a finalidade pretendida de autenticação de cliente é criado automaticamente e inserido no armazenamento de certificados pessoais do computador local sempre que uma nova máquina é unida à rede. No entanto, o registro automático usa o mesmo nome de assunto para todos os certificados criados no cache.

O impacto é que os serviços WCF podem falhar ao abrir em domínios com registro automático. Isso ocorre porque os critérios de pesquisa de credenciais X.509 do serviço padrão podem ser ambíguos porque existem vários certificados com o nome DNS (Sistema de Nomes de Domínio) totalmente qualificado da máquina. Um certificado tem origem no registo automático; o outro pode ser um certificado auto-emitido.

Para atenuar isso, faça referência ao certificado exato a ser usado usando um critério de pesquisa mais preciso no serviceCredentials>.< Por exemplo, use a FindByThumbprint opção e especifique o certificado por sua impressão digital exclusiva (hash).

Para obter mais informações sobre o recurso de registro automático, consulte Registro automático de certificado no Windows Server 2003.

Último de vários nomes de assunto alternativos usados para autorização

No caso raro em que um certificado X.509 contém vários nomes de assunto alternativos e você autoriza o uso do nome de assunto alternativo, a autorização pode falhar.

Proteja arquivos de configuração com ACLs

Você pode especificar declarações obrigatórias e opcionais em arquivos de código e configuração para tokens emitidos pelo CardSpace. Isso resulta em elementos correspondentes sendo emitidos em RequestSecurityToken mensagens que são enviadas para o serviço de token de segurança. Um invasor pode modificar o código ou a configuração para remover declarações necessárias ou opcionais, potencialmente fazendo com que o serviço de token de segurança emita um token que não permite acesso ao serviço de destino.

Para atenuar: Requer acesso ao computador para modificar o arquivo de configuração. Use listas de controle de acesso a arquivos (ACLs) para proteger arquivos de configuração. O WCF requer que o código esteja no diretório do aplicativo ou no cache de assembly global antes de permitir que esse código seja carregado da configuração. Use ACLs de diretório para proteger diretórios.

O número máximo de sessões seguras para um serviço é atingido

Quando um cliente é autenticado com êxito por um serviço e uma sessão segura é estabelecida com o serviço, o serviço controla a sessão até que o cliente a cancele ou a sessão expire. Cada sessão estabelecida conta em relação ao limite para o número máximo de sessões simultâneas ativas com um serviço. Quando esse limite é atingido, os clientes que tentam criar uma nova sessão com esse serviço são rejeitados até que uma ou mais sessões ativas expirem ou sejam canceladas por um cliente. Um cliente pode ter várias sessões com um serviço, e cada uma dessas sessões conta para o limite.

Nota

Quando você usa sessões com monitoração de estado, o parágrafo anterior não se aplica. Para obter mais informações sobre sessões com monitoração de estado, consulte Como criar um token de contexto de segurança para uma sessão segura.

Para atenuar isso, defina o limite para o número máximo de sessões ativas e o tempo de vida máximo para uma sessão definindo a SecurityBindingElementSecurityBindingElement propriedade da classe.

Consulte também