Conectar-se ao mecanismo de banco de dados com Proteção Estendida

Aplica-se a:SQL Server

A Proteção Estendida ajuda a prevenir ataques a relés de autenticação ao garantir que o cliente conhece o serviço a que se liga.

Proteção Estendida é uma funcionalidade dos componentes de rede implementada pelo sistema operativo. A Proteção Estendida é suportada no Windows.

O SQL Server é mais seguro quando as ligações são feitas usando a Proteção Estendida.

Lista de requisitos

Para que a Proteção Prolongada seja eficaz, todas as seguintes condições devem ser cumpridas:

  1. Utilize um driver cliente que suporte associação de canal.
  2. Ative a encriptação TLS na ligação para que o cliente possa produzir um token de ligação de canal (CBT).
  3. Ligue-se ao Nome Principal do Serviço (SPN) correto que corresponda à instância do SQL Server.
  4. Utilize a autenticação do Windows (NTLM ou Kerberos). A Proteção Estendida não se aplica à autenticação SQL.
  5. Ativar a Proteção Estendida na instância do SQL Server (definido para Permitido ou Obrigatório).

Note

Para um exemplo de cadeia de ligação em C# que suporta Proteção Estendida, veja Exemplo de cadeia de ligação.

Descrição da Proteção Estendida

A Proteção Estendida utiliza a associação de serviço e a associação de canal para ajudar a evitar um ataque de reencaminhamento de autenticação. Num ataque de relé de autenticação, um cliente capaz de realizar autenticação NTLM (por exemplo, Windows Explorer, Outlook, uma aplicação .NET SqlClient, entre outros), liga-se a um atacante (por exemplo, um servidor de ficheiros CIFS malicioso). O invasor usa as credenciais do cliente para se passar pelo cliente e autenticar um serviço (por exemplo, uma instância do Mecanismo de Banco de Dados).

Existem duas variações deste ataque:

  • Num ataque de atração, o cliente liga-se voluntariamente ao agressor.

  • Num ataque de spoofing, o cliente pretende ligar-se a um serviço válido, mas desconhece que o DNS e/ou o encaminhamento IP foram envenenados para redirecionar a ligação para o atacante em vez do serviço legítimo.

O SQL Server dá suporte à vinculação de serviço e à associação de canal para ajudar a reduzir esses ataques em instâncias do SQL Server.

Vinculação de serviço

Vinculação de serviço mitiga ataques de aliciamento ao exigir que um cliente envie um nome principal de serviço (SPN) assinado do serviço SQL Server ao qual tenciona ligar-se. Como parte da resposta de autenticação, o serviço valida se o SPN recebido no pacote corresponde ao seu próprio SPN. Se um cliente for atraído para se conectar a um invasor, o cliente incluirá o SPN assinado pelo invasor. O invasor não pode retransmitir o pacote para autenticar no serviço real do SQL Server como o cliente porque incluiria o SPN do invasor. A vinculação de serviço incorre em um custo único e insignificante, mas não resolve ataques de falsificação. A ligação de serviço ocorre quando uma aplicação cliente não utiliza encriptação para se ligar ao SQL Server.

Ligação de canal

A ligação de canal estabelece um canal seguro (Schannel) entre um cliente e uma instância do serviço SQL Server. O serviço verifica a autenticidade do cliente comparando o token de ligação de canal (CBT) do cliente específico para aquele canal com o seu próprio CBT. A vinculação de canal aborda ataques de sedução e falsificação. No entanto, ele incorre em um custo de tempo de execução maior porque requer criptografia TLS (Transport Layer Security) de todo o tráfego da sessão. A ligação de canal ocorre quando uma aplicação cliente utiliza encriptação para se ligar ao SQL Server, independentemente de a encriptação ser imposta pelo cliente ou pelo servidor.

Advertência

O SQL Server e os fornecedores de dados Microsoft para SQL Server suportam protocolos mais antigos, incluindo TLS 1.0 e SSL 3.0. Se aplicar um protocolo diferente (como TLS 1.2 ou TLS 1.3) ao fazer alterações na camada SChannel do sistema operativo, as suas ligações ao SQL Server podem falhar. Certifica-te de que tens a versão mais recente do SQL Server para suportar TLS 1.2 ou TLS 1.3. Para mais informações, consulte TLS 1.2 e TLS 1.3.

Suporte ao sistema operacional

Os links seguintes fornecem mais informações sobre como o Windows suporta a Proteção Estendida:

Suporte ao motorista

Os únicos drivers que suportam a Proteção Estendida são os baseados no Windows:

  • Driver Microsoft ODBC para SQL Server (somente no Windows)
  • Driver Microsoft OLE DB para SQL Server
  • System.Data.SqlClient (no .NET Framework para Windows)
  • Microsoft.Data.SqlClient (no Windows)

Configurações

Três definições de ligação do SQL Server afetam a associação ao serviço e a associação ao canal. Pode configurar estas definições usando o Gestor de Configuração do SQL Server ou WMI. Veja estas definições usando o aspeto Definições de Protocolo de Servidor da Gestão Baseada em Políticas.

Forçar criptografia

Os valores possíveis são Sim e Não. Para utilizar a associação de canais, defina Forçar Encriptação como Sim e todos os clientes têm de encriptar. Se for Não, só a vinculação de serviço é garantida. Force Encryption está no Protocolos para Propriedades MSSQLSERVER (guia Sinalizadores) no Gestor de Configuração do SQL Server. A partir do SQL Server 2022 (16.x), também pode definir o Force Strict Encryption para Yes para maior proteção, usando o TDS 8.0. Para obter mais informações, consulte Configurar o Mecanismo de Banco de Dados do SQL Server para criptografar conexões.

Defina Forçar Encriptação para Sim quando usado com Proteção Estendida.

Proteção estendida

Os valores possíveis são Desativado, Permitidoe Necessário. Use a variável Proteção Estendida para definir o nível de Proteção Estendida para cada instância do SQL Server. Pode encontrar a Proteção Estendida nos Protocolos para Propriedades MSSQLSERVER (Separador Avançado) no Gestor de Configuração do SQL Server.

  • Defina para Desligado para desativar a Proteção Estendida. A instância do SQL Server aceita conexões de qualquer cliente, independentemente de o cliente estar protegido ou não. Off é compatível com sistemas operacionais mais antigos e sem patches, mas é menos seguro. Use essa configuração quando os sistemas operacionais cliente não oferecerem suporte à proteção estendida.

  • Definir como Permitido para exigir Proteção Estendida para ligações de sistemas operativos que suportem Proteção Estendida. A Proteção Estendida é ignorada para ligações de sistemas operativos que não suportam Proteção Estendida. As conexões de aplicativos cliente desprotegidos em execução em sistemas operacionais cliente protegidos são rejeitadas. Essa configuração é mais segura do que Off, mas não é a mais segura. Usa este cenário em ambientes mistos. Alguns sistemas operativos suportam Proteção Estendida, outros não.

  • Definir para Obrigatório para aceitar apenas ligações de aplicações protegidas em sistemas operativos protegidos. Esta configuração é a mais segura, mas as ligações de sistemas operativos ou aplicações que não suportam Proteção Estendida não conseguem ligar-se ao SQL Server.

Para mais informações sobre as definições recomendadas, consulte Ativar encriptação com Proteção Estendida.

SPNs NTLM aceitos

Especifique a variável NTLM SPNs aceites quando mais do que um SPN conhece um servidor. Quando um cliente tenta se conectar ao servidor usando um SPN válido que o servidor não conhece, a vinculação de serviço falha. Para evitar este problema, especifique vários SPNs que representem o servidor usando os SPNs NTLM aceites. Os SPNs NTLM aceites são uma série de SPNs separados por ponto-e-vírgula. Por exemplo, para permitir que os SPNs MSSQLSvc/HostName1.Contoso.com e MSSQLSvc/HostName2.Contoso.com, digite MSSQLSvc/HostName1.Contoso.com;MSSQLSvc/HostName2.Contoso.com na caixa SPNs NTLM Aceitos. A variável tem um comprimento máximo de 2.048 caracteres. Pode encontrar SPNs NTLM aceites em Propriedades de Protocolos para MSSQLSERVER (Separador Avançado) no Gestor de Configuração do SQL Server.

Habilitar a Proteção Estendida para o mecanismo de banco de dados

Para usar a Proteção Estendida, tanto o servidor como o cliente devem ter um sistema operativo que suporte a Proteção Estendida e deve estar ativado no sistema operativo. Para mais informações sobre como ativar a Proteção Estendida para o sistema operativo, consulte Proteção Estendida para Autenticação.

Embora a Proteção Estendida e o NTLMv2 estejam ativados por defeito em todas as versões suportadas do Windows, a Proteção Estendida não está ativada por defeito para ligações ao SQL Server. Tem de o ativar manualmente no Gestor de Configuração do SQL Server.

Para ativar a Proteção Estendida para ligações ao SQL Server, os administradores têm de configurar as definições no Gestor de Configuração do SQL Server. Esta configuração inclui opções para ligação de serviço e ligação de canal para mitigar vários tipos de ataques a relé de autenticação. Para instruções detalhadas, consulte a documentação do SQL Server sobre a configuração da Proteção Estendida.

Ativar encriptação com Proteção Estendida

Aplica-se a: SQL Server

Para aumentar a segurança ao usar Windows authentication, defina a Proteção Estendida como Obrigatória e force a encriptação para Sim no Gestor de Configuração do SQL Server.

Estas definições fornecem a configuração mais segura para o SQL Server.

Note

No SQL Server 2022 (16.x) e versões posteriores, utilize Force Strict Encryption em vez de Force Encryption para permitir uma segurança mais forte via TDS 8.0.

Atualize as suas cadeias de ligação para acomodar estas alterações.

Para obter mais informações, consulte:

Depois de ativares a Proteção Estendida

Depois de ativar a Proteção Estendida no computador servidor, utilize os seguintes passos para ativar a Proteção Estendida:

  1. Vai ao Gestor de Configuração do SQL Server a partir do menu Iniciar do Windows.

  2. Expanda Configuração de Rede do SQL Server e, em seguida, clique com o botão direito do rato em Protocolos para<NomeInstância>. Selecione Propriedades.

  3. No separador Avançado , defina a Proteção Estendida para a definição apropriada tanto para ligação de canal como para ligação de serviços.

  4. Opcionalmente, quando existe mais de um SPN associado a um servidor, configure o campo SPNs NTLM aceites no separador Avançado, conforme descrito na secção Definições.

  5. Para vinculação de canais, no separador Flags , defina Forçar Encriptação para Sim. Esta definição é recomendada.

  6. Reinicie o serviço Mecanismo de Banco de Dados.

Configurar outros componentes do SQL Server

Para obter mais informações sobre como configurar o Reporting Services, consulte Proteção estendida para autenticação com o Reporting Services.

Quando utiliza o IIS para aceder a dados dos Serviços de Análise com uma ligação HTTP ou HTTPS, os Serviços de Análise podem beneficiar da Proteção Estendida fornecida pelo IIS. Para obter mais informações sobre como configurar o IIS para usar a Proteção Estendida, consulte Configurar a Proteção Estendida no IIS 7.5.

Exemplo de cadeia de conexão

No exemplo seguinte de C#, a cadeia de ligação usa Windows authentication (Integrated Security=true). O token de ligação de canal é ativado através de encriptação TLS (Encrypt=true). A validação de certificados é aplicada com TrustServerCertificate=false. Embora não seja obrigatório, HostNameInCertificate é recomendado e incluído neste exemplo.

using (var conn = new SqlConnection(
    "Server=sql01.contoso.com;" +
    "Database=AdventureWorks2025;" +
    "Integrated Security=true;" +        
    "Encrypt=true;" +                   
    "TrustServerCertificate=false;" +    
    "HostNameInCertificate=sql01.contoso.com;")) 
{
    conn.Open();
}