Partilhar via


Resolver o Problema do TLS 1.0, 2.ª Edição

Este documento apresenta as orientações mais recentes para identificar e remover rapidamente dependências do protocolo Transport Layer Security (TLS) versão 1.0 em software construído sobre sistemas operativos Microsoft, acompanhando detalhes sobre alterações no produto e novas funcionalidades fornecidas pela Microsoft para proteger os seus próprios clientes e serviços online. Destina-se a ser usado como ponto de partida para construir um plano de migração para um ambiente de rede TLS 1.2+. Embora as soluções aqui discutidas possam ser mantidas e ajudar a remover o uso do TLS 1.0 em sistemas operativos não Microsoft ou bibliotecas criptográficas, elas não são o foco deste documento.

O TLS 1.0 é um protocolo de segurança definido pela primeira vez em 1999 para estabelecer canais de encriptação em redes de computadores. Microsoft suporta este protocolo desde Windows XP/Server 2003. Embora já não seja o protocolo de segurança padrão utilizado pelos sistemas operativos modernos, o TLS 1.0 continua a ser suportado para compatibilidade retroativa. Requisitos regulamentares em evolução, bem como novas vulnerabilidades de segurança no TLS 1.0, dão às empresas o incentivo para desativar completamente o TLS 1.0.

A Microsoft recomenda que os clientes se antecipem a este problema removendo dependências do TLS 1.0 nos seus ambientes e desativando o TLS 1.0 ao nível do sistema operativo sempre que possível. Dado o tempo que o TLS 1.0 tem sido suportado pela indústria de software, é altamente recomendado que qualquer plano de descontinuação do TLS 1.0 inclua o seguinte:

  • Análise de código para encontrar/corrigir instâncias codificadas de TLS 1.0 ou protocolos de segurança anteriores.

  • Varredura de endpoints de rede e análise de tráfego para identificar sistemas operativos que utilizam protocolos TLS 1.0 ou anteriores.

  • Testes de regressão completos em toda a sua pilha de aplicações com TLS 1.0 desativado.

  • Migração de sistemas operativos antigos e bibliotecas/frameworks de desenvolvimento para versões capazes de negociar TLS 1.2 por padrão.

  • Testes de compatibilidade entre sistemas operativos usados pela sua empresa para identificar quaisquer problemas de suporte ao TLS 1.2.

  • Coordene com os seus próprios parceiros de negócio e clientes para notificá-los da sua decisão de descontinuar o TLS 1.0.

  • Compreender quais os clientes que podem já não conseguir ligar-se aos seus servidores assim que o TLS 1.0 estiver desativado.

O objetivo deste documento é fornecer recomendações que possam ajudar a eliminar bloqueios técnicos para desativar o TLS 1.0, ao mesmo tempo que aumentam a visibilidade do impacto desta mudança para os seus próprios clientes. Concluir tais investigações pode ajudar a reduzir o impacto empresarial da próxima vulnerabilidade de segurança no TLS 1.0. Para efeitos deste documento, as referências à descontinuação do TLS 1.0 incluem também o TLS 1.1.

Os programadores de software empresarial têm uma necessidade estratégica de adotar soluções mais seguras e ágeis para o futuro (também conhecidas como Agilidade Cripto) para lidar com comprometimentos futuros de protocolos de segurança. Embora este documento proponha soluções ágeis para a eliminação da codificação rígida TLS, soluções mais amplas de Agilidade Criptológica estão fora do âmbito deste documento.

O Estado Atual da Implementação do TLS 1.0 da Microsoft

A implementação do TLS 1.0 da Microsoft está livre de vulnerabilidades de segurança conhecidas. Devido ao potencial de futuros ataques de downgrade de protocolo e outras vulnerabilidades do TLS 1.0 não específicas da implementação da Microsoft, recomenda-se que as dependências de todos os protocolos de segurança anteriores ao TLS 1.2 sejam removidas, sempre que possível (TLS 1.1/1.0/ SSLv3/SSLv2).

Ao planear esta migração para TLS 1.2+, os programadores e administradores de sistemas devem estar atentos ao potencial de codificação fixa de versões do protocolo em aplicações desenvolvidas pelos seus colaboradores e parceiros. Codificação fixa aqui significa que a versão TLS é corrigida para uma versão desatualizada e menos segura do que as versões mais recentes. Versões TLS mais recentes do que a versão fixa não podem ser usadas sem modificar o programa em questão. Este tipo de problema não pode ser resolvido sem alterações ao código-fonte e implementação de atualizações de software. A codificação fixa em versões de protocolo era comum no passado para fins de teste e suporte, já que muitos navegadores e sistemas operativos diferentes tinham níveis variados de suporte a TLS.

Versões suportadas do TLS no Windows

Muitos sistemas operativos têm predefinições de versões TLS desatualizadas ou limites de suporte que precisam de ser tidos em conta.

Figura 1: Suporte a Protocolos de Segurança por Versão do SO

Sistema Operativo Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1,2 TLS 1,3
Windows Vista Ativado Ativado Ativado Não suportado Não suportado Não suportado
Windows Server 2008 Ativado Ativado Ativado Desativado* Desativado* Não suportado
Windows 7 (WS2008 R2) Ativado Ativado Ativado Desativado* Desativado* Não suportado
Windows 8 (WS2012) Disabled Ativado Ativado Ativado Ativado Não suportado
Windows 8.1 (WS2012 R2) Disabled Ativado Ativado Ativado Ativado Não suportado
Windows 10 Disabled Ativado Ativado Ativado Ativado Não suportado
Windows 11 Disabled Ativado Ativado Ativado Ativado Ativado
Windows Server 2016 Não suportado Disabled Ativado Ativado Ativado Não suportado
Windows Server 2016 Não suportado Disabled Ativado Ativado Ativado Não suportado
Windows Server 2019 Não suportado Disabled Ativado Ativado Ativado Não suportado
Edição Windows Server 2019 GS Não suportado Disabled Disabled Disabled Ativado Não suportado
Windows Server 2022 Não suportado Disabled Disabled Disabled Ativado Ativado

A edição Windows Server 2019 GS é compatível com Microsoft SDL, apenas TLS 1.2 com um conjunto restrito de suites de cifras.

A edição Windows Server 2022 é compatível com Microsoft SDL, apenas TLS 1.2 e TLS 1.3, com um conjunto restrito de suites de cifras.

O TLS 1.1/1.2 pode ser ativado no Windows Server 2008 através deste pacote opcional de atualizações do Windows.

Para mais informações sobre a descontinuação do TLS 1.0/1.1 no IE/Edge, veja Modernizar as ligações TLS no Microsoft Edge e Internet Explorer 11, Alterações que impactam a compatibilidade do site a caminho do Microsoft Edge e Desabilitação do TLS/1.0 e TLS/1.1 no novo Browser Edge

Uma forma rápida de determinar que versão do TLS será solicitada por vários clientes ao ligar-se aos seus serviços online é consultando a Handshake Simulation nos Qualys SSL Labs. Esta simulação cobre combinações de sistema operativo cliente/navegador entre fabricantes. Consulte o Apêndice A no final deste documento para um exemplo detalhado que mostra as versões do protocolo TLS negociadas por várias combinações simuladas de sistema operativo cliente/navegador ao ligar a www.microsoft.com.

Caso ainda não esteja completo, é altamente recomendado realizar um inventário dos sistemas operativos usados pela sua empresa, clientes e parceiros (os dois últimos através de contacto/comunicação direta ou, pelo menos, pela recolha de cadeias do User-Agent HTTP). Este inventário pode ser complementado por uma análise de tráfego na periferia da sua rede empresarial. Nessa situação, a análise de tráfego dará origem às versões TLS negociadas com sucesso pelos clientes/parceiros que se ligam aos seus serviços, mas o tráfego em si permanecerá encriptado.

Melhorias de Engenharia da Microsoft para eliminar dependências do TLS 1.0

Desde o lançamento v1 deste documento, a Microsoft lançou várias atualizações de software e novas funcionalidades em suporte à descontinuação do TLS 1.0. Estes são, entre outros:

  • Registo personalizado do IIS para correlacionar o IP do cliente/cadeia de agente de utilizador, URI do serviço, versão do protocolo TLS e suite de cifras.

    • Com este registo, os administradores podem finalmente quantificar a exposição dos seus clientes a TLS fracos.
  • SecureScore - Para ajudar os administradores de tenant do Office 365 a identificar o seu próprio uso fraco do TLS, o portal SecureScore foi criado para partilhar esta informação à medida que o TLS 1.0 saiu do suporte no Office 365 em outubro de 2018.

    • Este portal fornece aos administradores de tenant do Office 365 a informação valiosa de que precisam para contactar os seus próprios clientes que possam desconhecer as suas próprias dependências TLS 1.0.

    • Visite https://securescore.microsoft.com/ para obter mais informações.

  • Atualizações do .Net Framework para eliminar a codificação fixa ao nível da aplicação e prevenir dependências TLS 1.0 herdadas pelo framework.

  • Orientações para programadores e atualizações de software foram lançadas para ajudar os clientes a identificar e eliminar dependências .Net em TLS fraco: Boas práticas de Segurança da Camada de Transporte (TLS) com o .NET Framework

    • Para tua informação: todas as aplicações direcionadas a .NET 4.5 ou inferior provavelmente terão de ser modificadas para suportar TLS 1.2.
  • O TLS 1.2 foi implementado retroativamente para Windows Server 2008 SP2 e XP POSReady 2009 para assistir os clientes com obrigações de legado.

  • Mais anúncios serão feitos no início de 2019 e comunicados em atualizações subsequentes deste documento.

Encontrar e corrigir dependências TLS 1.0 no código

Para produtos que utilizam as bibliotecas criptograficas e protocolos de segurança fornecidos pelo sistema operativo Windows, os seguintes passos devem ajudar a identificar qualquer utilização fixa de TLS 1.0 nas suas aplicações:

  1. Identifique todas as instâncias do AcquireCredentialsHandle(). Isto ajuda os revisores a aproximarem-se mais dos blocos de código onde o TLS pode ser codificado fixamente.

  2. Revise quaisquer instâncias das estruturas SecPkgContext_SupportedProtocols e SecPkgContext_ConnectionInfo para TLS codificado fixamente.

  3. No código nativo, defina quaisquer atribuições não nulas de grbitEnabledProtocols a zero. Isto permite que o sistema operativo use a sua versão TLS predefinida.

  4. Desative o Modo FIPS se estiver ativado devido ao potencial conflito com as definições necessárias para desabilitar explicitamente o TLS 1.0/1.1 neste documento. Consulte o Apêndice B para mais informações.

  5. Atualize e recompile quaisquer aplicações que utilizem WinHTTP alojadas no Server 2012 ou anterior.

    1. Aplicações geridas – reconstruir e redirecionar com a versão mais recente do .NET Framework

    2. As aplicações devem adicionar código para suportar TLS 1.2 através do WinHttpSetOption

  6. Para cobrir todas as bases, analise o código-fonte e os ficheiros de configuração do serviço online para os padrões abaixo correspondentes aos valores de tipo enumerados comumente usados na codificação fixa TLS:

    1. TipoDeProtocoloDeSegurança

    2. SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL ou PROTOCOL_TLS

A solução recomendada em todos os casos acima é remover a seleção de versões do protocolo codificada e deferir para o padrão do sistema operativo. Se estiver a usar DevSkim, clique aqui para ver as regras que cobrem as verificações acima, que pode usar com o seu próprio código.

O Windows PowerShell utiliza o .NET Framework 4.5, que não inclui o TLS 1.2 como protocolo disponível. Para contornar isto, estão disponíveis duas soluções:

  1. Modificar o guião em questão para incluir o seguinte:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Adicione uma chave de registo de todo o sistema (por exemplo, via política de grupo) a qualquer máquina que precise de fazer ligações TLS 1.2 a partir de uma aplicação .NET. Isto fará com que o .NET use as versões TLS "System Default", que adicionam o TLS 1.2 como protocolo disponível, E permitirá que os scripts usem versões TLS futuras quando o sistema operativo as suportar. (ex.: TLS 1.3)

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

As soluções (1) e (2) são mutuamente exclusivas, o que significa que não precisam de ser implementadas em conjunto.

Reconstruir/redirecionar aplicações geridas usando a versão mais recente do .Net Framework

Aplicações que usam versões do framework .NET anteriores à 4.7 podem ter limitações que limitam efetivamente o suporte ao TLS 1.0, independentemente dos padrões do sistema operativo subjacente. Consulte o diagrama abaixo e as melhores práticas de Segurança da Camada de Transporte (TLS) com o .NET Framework para mais informações.

Reconstruir aplicações geridas

SystemDefaultTLSVersion tem prioridade sobre o direcionamento ao nível da aplicação para versões TLS. A melhor prática recomendada é sempre deferir para a versão padrão do sistema operativo TLS. É também a única solução cripto-ágil que permite às suas aplicações tirar partido do suporte futuro do TLS 1.3.

Se estiver a direcionar versões antigas do .NET Framework, como 4.5.2 ou 3.5, então por padrão a sua aplicação usará protocolos antigos e não recomendados, como SSL 3.0 ou TLS 1.0. É fortemente recomendado que atualize para versões mais recentes do .NET Framework, como o .NET Framework 4.6, ou defina as chaves de registo apropriadas para 'UseStrongCrypto'.

Testes com TLS 1.2+

Seguindo as correções recomendadas na secção acima, os produtos devem ser testados por regressão para erros de negociação de protocolos e compatibilidade com outros sistemas operativos da sua empresa.

  • O problema mais comum nestes testes de regressão será uma falha na negociação do TLS devido a uma tentativa de ligação ao cliente de um sistema operativo ou navegador que não suporta TLS 1.2.

    • Por exemplo, um cliente Vista falhará em negociar TLS com um servidor configurado para TLS 1.2+, pois a versão máxima suportada de TLS pelo Vista é a 1.0. Esse cliente deve ser atualizado ou desativado num ambiente TLS 1.2+.
  • Produtos que utilizam autenticação Mutual TLS baseada em certificados podem necessitar de testes adicionais de regressão, pois o código de seleção de certificados associado ao TLS 1.0 era menos expressivo do que o do TLS 1.2.

    • Se um produto negociar MTLS com um certificado a partir de uma localização não padrão (fora dos armazenamentos de certificados padrão nomeados no Windows), então esse código pode precisar de ser atualizado para garantir que o certificado é adquirido corretamente.
  • As interdependências de serviços devem ser analisadas para identificar pontos problemáticos.

    • Quaisquer serviços que interoperem com 3 serviços desegunda parte devem realizar testes de interoperabilidade adicionais com essestrês serviços.

    • Qualquer aplicação ou sistema operativo de servidor que não seja Windows em uso requer investigação/confirmação de que suportam TLS 1.2. A digitalização é a forma mais fácil de determinar isto.

Um plano simples para testar estas alterações num serviço online consiste no seguinte:

  1. Realize uma análise dos sistemas do ambiente de produção para identificar sistemas operativos que não suportem TLS 1.2.

  2. Analisar o código-fonte e os ficheiros de configuração do serviço online para TLS codificado de forma rígida, conforme descrito em "Encontrar e corrigir dependências de TLS 1.0 no código"

  3. Atualizar/recompilar as aplicações conforme necessário:

    1. Aplicativos gerenciados

      1. Reconstrua com base na versão mais recente do .NET Framework.

      2. Verifique se qualquer utilização da enumeração SSLProtocols está definida para SSLProtocols.None para usar as definições padrão do sistema operativo.

    2. Aplicações WinHTTP – reconstruir com WinHttpSetOption para suportar TLS 1.2

  4. Comece a testar num ambiente de pré-produção ou staging com todos os protocolos de segurança mais antigos que o TLS 1.2 desativados via registo.

  5. Corrigir quaisquer instâncias remanescentes de codificação fixa TLS à medida que forem encontradas nos testes. Reimplante o software e realize um novo teste de regressão.

Notificar parceiros sobre os seus planos de desativação do TLS 1.0

Depois de o hardcoding do TLS ser tratado e as atualizações do sistema operativo/framework de desenvolvimento estarem concluídas, caso opte por descontinuar o TLS 1.0, será necessário coordenar-se com os clientes e parceiros:

  • O contacto precoce com parceiros/clientes é essencial para uma implementação bem-sucedida da desaprovação do TLS 1.0. No mínimo, isto deve consistir em publicações de blogue, whitepapers ou outro conteúdo web.

  • Cada parceiro precisa de avaliar a sua própria prontidão para o TLS 1.2 através das iniciativas de análise do sistema operativo/digitalização de código/testes de regressão descritas nas secções acima.

Conclusion

Remover dependências do TLS 1.0 é uma questão complicada de gerir de ponta a ponta. A Microsoft e os parceiros da indústria estão a tomar medidas hoje para garantir que toda a nossa pilha de produtos seja mais segura por padrão, desde os componentes do sistema operativo e estruturas de desenvolvimento até às aplicações/serviços construídos nelas. Seguir as recomendações feitas neste documento ajudará a sua empresa a traçar o caminho certo e a perceber que desafios esperar. Também ajudará os seus próprios clientes a estarem mais preparados para a transição.

Apêndice A: Simulação de Handshake para vários clientes ligados a www.microsoft.com, cortesia SSLLabs.com

Resultados da simulação Handshake

Apêndice B: Descontinuação do TLS 1.0/1.1 mantendo o Modo FIPS

Siga os passos abaixo se a sua rede precisar do Modo FIPS, mas também quiser desvalorizar o TLS 1.0/1.1:

  1. Configure versões TLS através do registo, definindo "Ativado" para zero para as versões TLS indesejadas.

  2. Desative Curve 25519 (apenas no Server 2016) através de Política de Grupo.

  3. Desative quaisquer conjuntos de cifras usando algoritmos que não sejam permitidos pela publicação FIPS relevante. Para o Server 2016 (assumindo que as definições padrão estão em vigor) isto significa desativar cifras RC4, PSK e NULL.

Colaboradores/Agradecimentos a

Mark Cartwright
Bryan Sullivan
Patrick Jungles
Michael Scovetta
Tony Rice
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrei Popov
Michiko Short
Justin Burke
Governador Maharaj
Brad Turner
Sean Stevenson