Proteção Estendida do Windows <extendedProtection>

Visão geral

O elemento <extendedProtection> especifica as definições que configuram a proteção estendida para autenticação do Windows no IIS 7.5.

A proteção estendida aprimora a funcionalidade existente de autenticação do Windows para mitigar ataques de retransmissão de autenticação ou ataques intermediários. Essa mitigação é realizada usando informações de segurança que são implementadas por dois mecanismos de segurança:

  • Informações de associação de canal especificadas por meio de um CBT (Token de Associação de Canal), que é usado principalmente para conexões SSL.
  • Informações de associação de serviço especificadas por um SPN (Nome do Princípio do Serviço), que é usado principalmente para conexões que não usam SSL ou quando uma conexão é estabelecida por meio de um cenário que fornece descarregamento de SSL, como um servidor proxy ou balanceador de carga.

O elemento <extendedProtection> pode conter uma coleção de elementos <spn>. Cada um deles contém um SPN exclusivo para as informações de associação de serviço. Cada SPN representa um ponto de extremidade exclusivo no caminho da conexão, que pode ser um FQDN (Nome de Domínio Totalmente Qualificado) ou um nome NetBIOS do servidor de destino ou um servidor proxy. Por exemplo, se um cliente estiver se conectando a um servidor de destino por meio de um servidor proxy, a coleção SPN no servidor de destino precisará conter o SPN para o servidor proxy. Cada SPN na coleção deve ser prefixado com "HTTP", portanto, o SPN resultante de "www.contoso.com" seria "HTTP/www.contoso.com".

Há dois atributos do elemento <extendedProtection> que configuram a associação de canal e o comportamento adicional para a proteção estendida do IIS:

  • O atributo tokenChecking configura o comportamento para verificar se há tokens de associação de canal. Os valores possíveis para esse atributo são:

    Nome Descrição
    None Esse valor especifica que o IIS não executará a verificação de token de associação de canal. Essa configuração emula o comportamento que existia antes da proteção estendida.

    O valor numérico é 0.
    Allow Esse valor especifica que a verificação de token de associação de canal está habilitada, mas não é necessária. Essa configuração permite uma comunicação segura com clientes que dão suporte à proteção estendida, mas ainda dá suporte a clientes que não são capazes de usar a proteção estendida.

    O valor numérico é 1.
    Require Esse valor especifica que a verificação de token de associação de canal é necessária. Essa configuração não fornece suporte para clientes que não dão suporte à proteção estendida.

    O valor numérico é 2.
  • O atributo sinalizadores configura um comportamento adicional para proteção estendida. Os possíveis sinalizadores são:

    Nome Descrição
    None Esse sinalizador especifica que nenhum comportamento adicional está habilitado para proteção estendida. (Por exemplo, nenhum servidor proxy está sendo usado e a verificação de SPN está habilitada e requer FQDNs.)

    O valor numérico é 0.
    Proxy Esse sinalizador especifica que parte do caminho de comunicação será por meio de um proxy ou que o cliente está se conectando diretamente ao servidor de destino por HTTP.

    O valor numérico é 1.
    NoServiceNameCheck Esse sinalizador especifica que a verificação de SPN está desabilitada; esse sinalizador não deve ser usado em cenários em que apenas SPNs estão sendo verificados.

    O valor numérico é 2.
    AllowDotlessSpn Esse sinalizador especifica que os SPNs não são necessários para serem FQDNs. A definição desse sinalizador permite SPNs baseados em NetBIOS. Observação: a definição desse sinalizador não é um cenário seguro: nomes não baseados em FQDN são vulneráveis a ataques de envenenamento por resolução de nomes.

    O valor numérico é 4.
    ProxyCohosting Esse sinalizador especifica que todo o caminho de comunicação de cliente para servidor usará somente HTTP; nenhuma parte do caminho de comunicação usará SSL e a verificação de SPN será usada. Observação: ao especificar esse sinalizador, você também deve especificar o sinalizador Proxy.

    O valor numérico é 32.

Cenários de proteção estendida

Considere o exemplo de cenário seguinte:

  • Em cada um dos cenários a seguir, você também pode especificar o sinalizador AllowDotlessSpn se o ambiente de rede der suporte a SPNs baseados em NetBIOS; no entanto, os SPNs baseados em NetBIOS não são seguros.
  • Para cada um dos cenários a seguir em que a verificação de SPN será usada e a verificação de token de associação de canal não será usada, você não deve especificar o sinalizador NoServiceNameCheck.
Cenário Sinalizadores Descrição
O cliente se conecta diretamente ao servidor de destino usando HTTP Proxy, ProxyCohosting A verificação de SPN será usada e a verificação de token de associação de canal não será usada.
O cliente se conecta diretamente ao servidor de destino usando SSL None A verificação de token de associação de canal é usada e a verificação de SPN não é usada.
O cliente se conecta ao servidor de destino por meio de um servidor proxy usando HTTP para todo o caminho Proxy, ProxyCohosting A verificação de SPN será usada e a verificação de token de associação de canal não será usada.
O cliente se conecta ao servidor de destino por meio de um servidor proxy usando SSL para todo o caminho Proxy A verificação de SPN será usada e a verificação de token de associação de canal não será usada.
O cliente se conecta ao servidor proxy usando SSL e o servidor proxy conecta-se ao servidor de destino usando HTTP (SSL de descarregamento) Proxy A verificação de SPN será usada e a verificação de token de associação de canal não será usada.

Informações Adicionais

Mais informações sobre a Proteção Estendida estão disponíveis no seguinte tópico:

Autenticação Integrada do Windows com Proteção Estendida

Nomes de entidades de serviço

Compatibilidade

Versão Observações
IIS 10.0 O elemento <extendedProtection> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <extendedProtection> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <extendedProtection> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <extendedProtection> foi introduzido no IIS 7.5.
IIS 7.0 N/D
IIS 6,0 N/D

Instalação

A instalação padrão do IIS 7 e posterior não inclui o serviço de função de autenticação do Windows. Para usar a autenticação do Windows no IIS, você deve instalar o serviço de função, desabilitar a autenticação anônima para seu site ou aplicativo e habilitar a autenticação do Windows para o site ou aplicativo.

Observação

Depois de instalar o serviço de função, o IIS 7 confirma as seguintes definições de configuração para o arquivo ApplicationHost.config.

<windowsAuthentication enabled="false" />

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
  4. Na página Funções de Servidor, expanda Servidor Web (IIS), Servidor Web, expanda Segurança e selecione Autenticação do Windows. Clique em Avançar.
    Screenshot of the Server Roles page. The Windows Authentication option is selected and highlighted. .
  5. Na página Selecionar recursos, clique em Avançar.
  6. Na página Confirmar seleções de instalação, clique em Instalar.
  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
  3. Expanda Serviços de Informações da Internet, expanda Serviços da World Wide Web, expanda Segurança e, em seguida, selecione Autenticação do Windows.
    Screenshot of the Programs and Features navigation tree. The Windows Authentication option is selected and highlighted.
  4. Clique em OK.
  5. Clique em Fechar.

Windows Server 2008 R2 ou Windows Server 2008

  1. Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.
  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).
  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.
  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, selecione Autenticação do Windows e clique em Avançar.
    Screenshot of the Select Role Services page. The Security option is expanded. The Windows Authentication option is selected and highlighted.
  5. Na página Confirmar Seleções de Instalação, clique em Instalar.
  6. Na página Resultados , clique em Fechar.

Windows Vista ou Windows 7

  1. Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.
  3. Expanda Serviços de Informações da Internet e, em seguida, Serviços World Wide Web e, em seguida, Segurança.
  4. Selecione Autenticação do Windows e clique em OK.
    Screenshot of the Programs and Features navigation tree. Windows Authentication is highlighted and selected. The Security folder is expanded.

Instruções

Como habilitar a proteção estendida para autenticação do Windows

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor, expanda Sites e, em seguida, o site, aplicativo ou serviço Web para o qual você deseja habilitar a Proteção Estendida para autenticação do Windows.

  3. Role até a seção Segurança no painel Página Inicial e clique duas vezes em Autenticação.

  4. No painel Autenticação, selecione Autenticação do Windows.

  5. Clique em Habilitar no painel Ações.
    Screenshot of the Authentication page. Windows Authentication is highlighted. The Enable button is found in the Actions pane.

  6. Clique em Configurações Avançadas no painel Ações.

  7. Quando a caixa de diálogo Configurações Avançadas for exibida, selecione uma das seguintes opções no menu suspenso Proteção Estendida:

    • Selecione Aceitar se desejar habilitar a proteção estendida e, ao mesmo tempo, fornecer suporte de nível inferior para clientes que não oferecem suporte à proteção estendida.
    • Selecione Obrigatório se desejar habilitar a proteção estendida sem fornecer suporte de nível inferior.
      Screenshot of the Advanced Settings dialog box. In the Extended Protection drop down menu, the Accept option is highlighted.
  8. Clique em OK para fechar a caixa de diálogo Configurações Avançadas.

Configuração

O elemento <extendedProtection> é configurável no nível do site, aplicativo ou diretório virtual no arquivo ApplicationHost.config.

Atributos

Atributo Descrição
flags Atributo de sinalizadores opcionais.

Especifica as configurações de comportamento adicionais para proteção estendida.

O atributo flags pode ser uma combinação dos valores a seguir; o valor padrão é None.
Nome Descrição
None

Esse sinalizador especifica que nenhum comportamento adicional está habilitado para proteção estendida. (Por exemplo, nenhum servidor proxy está sendo usado e a verificação de SPN está habilitada e requer FQDNs.)

O valor numérico é 0.

Proxy

Esse sinalizador especifica que parte do caminho de comunicação será por meio de um proxy ou que o cliente está se conectando diretamente ao servidor de destino por HTTP.

O valor numérico é 1.

NoServiceNameCheck

Esse sinalizador especifica que a verificação de SPN está desabilitada; esse sinalizador não deve ser usado em cenários em que apenas SPNs estão sendo verificados.

O valor numérico é 2.

AllowDotlessSpn

Esse sinalizador especifica que os SPNs não são necessários para serem FQDNs. A definição desse sinalizador permite SPNs baseados em NetBIOS. Observação: a definição desse sinalizador não é um cenário seguro: nomes não baseados em FQDN são vulneráveis a ataques de envenenamento por resolução de nomes.

O valor numérico é 4.

ProxyCohosting

Esse sinalizador especifica que todo o caminho de comunicação de cliente para servidor usará somente HTTP; nenhuma parte do caminho de comunicação usará SSL e a verificação de SPN será usada. Observação: ao especificar esse sinalizador, você também deve especificar o sinalizador Proxy.

O valor numérico é 32.

tokenChecking Atributo de enumeração opcional.

Especifica o comportamento para verificar informações de associação de canal.

O atributo tokenChecking pode ser um dos valores a seguir; o valor padrão é None.
Nome Descrição
None

Esse valor especifica que o IIS não executará a verificação de token de associação de canal. Essa configuração emula o comportamento que existia antes da proteção estendida.

O valor numérico é 0.

Allow

Esse valor especifica que a verificação de token de associação de canal está habilitada, mas não é necessária. Essa configuração permite uma comunicação segura com clientes que dão suporte à proteção estendida, mas ainda dá suporte a clientes que não são capazes de usar a proteção estendida.

O valor numérico é 1.

Require

Esse valor especifica que a verificação de token de associação de canal é necessária. Essa configuração não fornece suporte para clientes que não dão suporte à proteção estendida.

O valor numérico é 2.

Elementos filho

Elemento Descrição
spn Adiciona um SPN à coleção.
clearSpns Limpa a coleção de SPNs.
removeSpn Remove um SPN da coleção.

Exemplo de configuração

O exemplo a seguir exibe um elemento <extendedProtection> que demonstra a habilitação da autenticação do Windows com proteção estendida para o Site Padrão e adiciona duas entradas SPN à coleção de SPNs.

<location path="Default Web Site">
   <system.webServer>
      <security>
         <authentication>
            <windowsAuthentication enabled="true">
               <extendedProtection tokenChecking="Allow" flags="None">
                  <spn name="HTTP/www.contoso.com" />
                  <spn name="HTTP/contoso.com" />
               </extendedProtection>
            </windowsAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

Exemplo de código

Os exemplos a seguir demonstram a configuração da autenticação do Windows com proteção estendida para o Site Padrão e adiciona duas entradas SPN à coleção de SPNs.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /extendedProtection.tokenChecking:"Allow" /extendedProtection.flags:"None" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/www.contoso.com']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/contoso.com']" /commit:apphost

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site");
         windowsAuthenticationSection["enabled"] = true;

         ConfigurationElement extendedProtectionElement = windowsAuthenticationSection.GetChildElement("extendedProtection");
         extendedProtectionElement["tokenChecking"] = @"Allow";
         extendedProtectionElement["flags"] = @"None";

         ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();

         ConfigurationElement spnElement = extendedProtectionCollection.CreateElement("spn");
         spnElement["name"] = @"HTTP/www.contoso.com";
         extendedProtectionCollection.Add(spnElement);

         ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement("spn");
         spnElement1["name"] = @"HTTP/contoso.com";
         extendedProtectionCollection.Add(spnElement1);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site")
      windowsAuthenticationSection("enabled") = True

      Dim extendedProtectionElement As ConfigurationElement = windowsAuthenticationSection.GetChildElement("extendedProtection")
      extendedProtectionElement("tokenChecking") = "Allow"
      extendedProtectionElement("flags") = "None"

      Dim extendedProtectionCollection As ConfigurationElementCollection = extendedProtectionElement.GetCollection

      Dim spnElement As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement("name") = "HTTP/www.contoso.com"
      extendedProtectionCollection.Add(spnElement)

      Dim spnElement1 As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
      spnElement1("name") = "HTTP/contoso.com"
      extendedProtectionCollection.Add(spnElement1)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

var extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection");
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow";
extendedProtectionElement.Properties.Item("flags").Value = "None";

var extendedProtectionCollection = extendedProtectionElement.Collection;

var spnElement = extendedProtectionCollection.CreateNewElement("spn");
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com";
extendedProtectionCollection.AddElement(spnElement);

var spnElement1 = extendedProtectionCollection.CreateNewElement("spn");
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com";
extendedProtectionCollection.AddElement(spnElement1);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

Set extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection")
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow"
extendedProtectionElement.Properties.Item("flags").Value = "None"

Set extendedProtectionCollection = extendedProtectionElement.Collection

Set spnElement = extendedProtectionCollection.CreateNewElement("spn")
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com"
extendedProtectionCollection.AddElement(spnElement)

Set spnElement1 = extendedProtectionCollection.CreateNewElement("spn")
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com"
extendedProtectionCollection.AddElement(spnElement1)

adminManager.CommitChanges()