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

Este documento apresenta as mais recentes orientações sobre a rápida identificação e remoção de dependências do protocolo Transport Layer Security (TLS) versão 1.0 em software criado sobre os sistemas operativos da Microsoft, seguidas de detalhes sobre as alterações do produto e as novas funcionalidades disponibilizadas pela Microsoft para proteger os seus próprios clientes e serviços online. Destina-se a ser utilizado como ponto de partida para a criação de um plano de migração para um ambiente de rede TLS 1.2+. Embora as soluções aqui debatidas possam ser mantidas e contribuir para a remoção da utilização do TLS 1.0 em sistemas operativos ou bibliotecas criptográficas que não sejam da Microsoft, não são o foco deste documento.

O TLS 1.0 é um protocolo de segurança definido pela primeira vez em 1999 para o estabelecimento de canais de encriptação em redes de computador. A Microsoft suporta este protocolo desde o Windows XP/Server 2003. Embora já não seja o protocolo de segurança predefinido utilizado pelos sistemas operativos modernos, o TLS 1.0 ainda é suportado para efeitos de retrocompatibilidade. Os requisitos regulamentares em evolução, bem como as novas vulnerabilidades de segurança no TLS 1.0 servem de incentivo às empresas para desativarem totalmente o TLS 1.0.

A Microsoft recomenda que os clientes se antecipem em relação a este problema, removendo as 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 longo período de tempo em que o TLS 1.0 foi suportado pela indústria de software, recomenda-se vivamente que qualquer plano de descontinuação do TLS 1.0 inclua o seguinte:

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

  • Rastreio de pontos finais de rede e análise de tráfego no sentido de identificar sistemas operativos que utilizem o TLS 1.0 ou protocolos mais antigos.

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

  • Migração de sistemas operativos legados e bibliotecas/arquiteturas de desenvolvimento para versões capazes de negociar o TLS 1.2 por predefinição.

  • Testes de compatibilidade em todos os sistemas operativos utilizados pela sua empresa de forma a identificar problemas de suporte do TLS 1.2.

  • Coordenação 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 deixar de conseguir estabelecer ligação aos seus servidores após a desativação do TLS 1.0.

O objetivo deste documento é fornecer recomendações que possam ajudar a remover bloqueadores técnicos à desativação do TLS 1.0 e, ao mesmo tempo, aumentar a visibilidade do impacto desta alteração nos seus próprios clientes. A realização de tais investigações pode ajudar a reduzir o impacto comercial da próxima vulnerabilidade de segurança no TLS 1.0. Para efeitos deste documento, as referências à descontinuação do TLS 1.0 também incluem o TLS 1.1.

Os programadores de software empresarial têm uma necessidade estratégica de adotar soluções mais seguras para o futuro e ágeis (também conhecida como Agilidade Criptográfica) para lidar com futuros compromissos de protocolo de segurança. Embora este documento proponha soluções ágeis para a eliminação da codificação de TLS, as soluções de Agilidade Criptográfica mais amplas não são contempladas neste documento.

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

A implementação do TLS 1.0 da Microsoft não apresenta vulnerabilidades de segurança conhecidas. Devido ao potencial de futuros ataques de mudança para uma versão anterior de protocolos e outras vulnerabilidades do TLS 1.0 que não são específicas da implementação da Microsoft, recomendamos que as dependências de todos os protocolos de segurança mais antigos do que o TLS 1.2 sejam removidas sempre que possível (TLS 1.1/1.0/SSLv3/SSLv2).

No planeamento desta migração para o TLS 1.2+, os programadores e administradores de sistema devem estar cientes do potencial para a codificação da versão do protocolo em aplicações desenvolvidas pelos seus colaboradores e parceiros. Neste caso, codificação significa que a versão do TLS é corrigida para uma versão desatualizada e menos segura do que as versões mais recentes. As versões do TLS mais recentes do que a versão codificada não podem ser utilizadas sem modificar o programa em questão. Esta classe de problema não pode ser resolvida sem alterações de código fonte e implementação de atualizações de software. No passado, a codificação de versões de protocolo era comum para fins de teste e suporte, uma vez que muitos browsers e sistemas operativos diferentes tinham níveis variados de suporte de TLS.

Versões suportadas do TLS no Windows

Muitos sistemas operativos têm predefinições de versão do TLS desatualizadas ou limites máximos de suporte que necessitam de ser contabilizados.

Figura 1: Suporte ao protocolo de segurança por versão do sistema operacional

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

O Windows Server 2019 GS edition é compatível com Microsoft SDL, TLS 1.2 apenas com um conjunto restrito de pacotes de codificação.

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

O TLS 1.1/1.2 pode ser habilitado no Windows Server 2008 por meio deste pacote opcional do Windows Update.

Para obter mais informações sobre a descontinuação do TLS 1.0/1.1 no IE/Edge, veja Modernizing TLS connections in Microsoft Edge and Internet Explorer 11 (Modernizar as ligações TLS no Microsoft Edge e Internet Explorer 11), Site compatibility-impacting changes coming to Microsoft Edge (Alterações que afetam a compatibilidade de sites chegam ao Microsoft Edge) e Disabling TLS/1.0 and TLS/1.1 in the new Edge Browser (Desativar o TLS/1.0 e o TLS/1.1 no novo Browser Edge).

Uma forma rápida de determinar qual a versão do TLS que será solicitada por vários clientes ao estabelecerem ligação aos seus serviços online é consultar a Simulação de Handshake em Qualys SSL Labs. Esta simulação abrange as combinações de SO/browser de cliente de vários fabricantes. Consulte o Apêndice A no fim deste documento para ver um exemplo detalhado que mostra as versões do protocolo TLS negociadas por várias combinações simuladas de SO/browser ao estabelecer ligação a www.microsoft.com.

Caso ainda não o tenha feito, recomenda-se vivamente a realização de um inventário dos sistemas operativos utilizados pela sua empresa, clientes e parceiros (os dois últimos através de contacto/comunicação ou, pelo menos, coleção de cadeias User-Agent HTTP). Este inventário pode ainda ser complementado pela análise de tráfego no limite da rede empresarial. Nesta situação, a análise de tráfego fornecerá as versões do TLS negociadas com sucesso por clientes/parceiros que estabeleçam ligação 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 a versão v1 deste documento, a Microsoft enviou uma série de atualizações de software e novas funcionalidades em apoio à descontinuação do TLS 1.0. Estes são, entre outros:

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

    • Com este registo, os administradores podem finalmente quantificar a exposição dos clientes a TLS fracos.
  • SecureScore - Para ajudar os admins de inquilinos do Office 365 a identificarem a sua própria utilização fraca do TLS, o portal SecureScore foi criado para partilhar esta informação, uma vez que o TLS 1.0 terminou o suporte no Office 365 em outubro de 2018.

    • Este portal fornece aos admins de inquilinos do Office 365 as informações valiosas de que precisam para contactarem os seus clientes que podem desconhecer as suas próprias dependências do TLS 1.0.

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

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

  • Orientações para desenvolvedores e atualizações de software foram lançadas para ajudar os clientes a identificar e eliminar dependências do .Net em TLS fraco: práticas recomendadas de TLS (Transport Layer Security) com o .NET Framework

    • FYI: Todos os aplicativos destinados ao .NET 4.5 ou inferior provavelmente terão que ser modificados para oferecer suporte ao TLS 1.2.
  • Foi feito o backport do TLS 1.2 para o Windows Server 2008 SP2 e XP POSReady 2009 para ajudar os clientes com obrigações legadas.

  • No início de 2019, serão feitos mais anúncios e comunicados em atualizações posteriores deste documento.

Localizar e corrigir dependências do TLS 1.0 em código

No caso dos produtos que utilizam os protocolos de segurança e as bibliotecas de criptografia fornecidas pelo SO Windows, os seguintes passos devem ajudar a identificar qualquer utilização do TLS 1.0 codificada nas suas aplicações:

  1. Identifique todas as instâncias de AcquireCredentialsHandle(). Esta ação ajuda os revisores a aproximarem-se mais dos blocos de código onde o TLS pode estar codificado.

  2. Analise todas as instâncias das estruturas SecPkgContext_SupportedProtocols e SecPkgContext_ConnectionInfo para TLS codificado.

  3. No código nativo, defina quaisquer atribuições que não zero de grbitEnabledProtocols como zero. Tal permite que o sistema operativo utilize a respetiva de TLS predefinida.

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

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

    1. Aplicações geridas – volte a criar e a direcionar para a versão mais recente do .NET Framework

    2. As aplicações têm de adicionar código para suportar o TLS 1.2 através da função WinHttpSetOption

  6. Para considerar todas as possibilidades, analise no código fonte e nos ficheiros de configuração do serviço online os padrões indicados abaixo que correspondem aos valores dos tipos enumerados geralmente utilizados na codificação do TLS:

    1. SecurityProtocolType

    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 da versão de protocolo codificada e diferir para a predefinição do sistema operativo. Se estiver a utilizar DevSkim, clique aqui para ver as regras que abrangem as verificações acima indicadas, que pode utilizar 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 um protocolo disponível. Para contornar este problema, estão disponíveis duas soluções:

  1. Modifique o script em questão para incluir o seguinte:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Adicione uma chave de registo a nível do sistema (por exemplo, através da política de grupo) a qualquer computador que precise de fazer ligações TLS 1.2 a partir de uma aplicação .NET. Isto fará com que o .NET utilize as versões do TLS que correspondem à "Predefinição do Sistema", que adiciona o TLS 1.2 como um protocolo disponível e permitirá que os scripts utilizem futuras versões do TLS quando o SO as suportar. (por exemplo, TLS 1.3)

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

    reg adicionar 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.

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

As aplicações que utilizam versões do .NET Framework anteriores à versão 4.7 podem ter limitações que limitam efetivamente o suporte do TLS 1.0, independentemente das predefinições do SO subjacente. Consulte o diagrama abaixo e as práticas recomendadas de TLS (Transport Layer Security) com o .NET Framework para obter mais informações.

Reconstruir aplicativos gerenciados

SystemDefaultTLSVersion tem precedência sobre a filtragem ao nível da aplicação de versões do TLS. A melhor prática recomendada é adiar sempre para a versão do TLS predefinida do SO. É também a única solução ágil em termos criptográficos, que permite que as suas aplicações tirem partido do futuro suporte do TLS 1.3.

Se estiver a filtrar versões mais antigas do .NET Framework, como a versão 4.5.2 ou 3.5, então, por predefinição, a sua aplicação utilizará os protocolos mais antigos e não recomendados, tais como o SSL 3.0 ou TLS 1.0. Recomendamos vivamente que atualize para versões mais recentes do .NET Framework, como o .NET Framework 4.6, ou que defina as chaves de registo apropriadas no sentido de utilizar "UseStrongCrypto".

Testar com o TLS 1.2+

Após as correções recomendadas na secção acima, os produtos devem ser sujeitos a um teste de regressão quanto a erros de negociação do protocolo e compatibilidade com outros sistemas operativos da sua empresa.

  • O problema mais comum neste teste de regressão será uma falha de negociação do TLS devido a uma tentativa de ligação do cliente a partir de um sistema operativo ou browser que não suporta o TLS 1.2.

    • Por exemplo, um cliente Vista não conseguirá negociar o TLS com um servidor configurado para TLS 1.2+, uma vez que a versão do TLS máxima suportada do Vista é a versão 1.0. Esse cliente deve ser atualizado para uma versão mais recente ou desativado num ambiente TLS 1.2+.
  • Os produtos que utilizem a autenticação Mútua do TLS baseada em certificado podem exigir testes de regressão adicionais, uma vez que o código de seleção de certificado associado ao TLS 1.0 era menos expressivo do que o do TLS 1.2.

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

    • Todos os serviços que interajam com serviços de terceiros devem realizar testes de interoperabilidade adicionais com esses terceiros.

    • Todas as aplicações ou sistemas operativos de servidor não Windows em utilização exigem investigação/confirmação de que conseguem suportar o TLS 1.2. A forma mais fácil de determiná-lo é através de análise.

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

  1. Realize uma análise dos sistemas de produção com o intuito de identificar os sistemas operativos que não suportam o TLS 1.2.

  2. Analise o código fonte e os ficheiros de configuração do serviço online quanto à existência de TLS codificado, tal como descrito na secção "Localizar e corrigir dependências do TLS 1.0 no código"

  3. Atualize/recompile as aplicações conforme necessário:

    1. Aplicações geridas

      1. Recompile com a versão mais recente do .NET Framework.

      2. Verifique se qualquer utilização da enumeração SSLProtocols está definida como SSLProtocols.None, de forma a utilizar as predefinições do SO.

    2. Aplicações WinHTTP – recompile com a função WinHttpSetOption para suportar o TLS 1.2

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

  5. Corrija as instâncias restantes da codificação do TLS à medida que forem encontradas nos testes. Volte a implementar o software e execute um novo teste de regressão.

Notificar os parceiros dos seus planos de descontinuação do TLS 1.0

Depois de resolvida a codificação do TLS e de concluídas as atualizações do sistema operativo/arquitetura de desenvolvimento, caso opte por descontinuar o TLS 1.0, será necessário coordenar a descontinuação com clientes e parceiros:

  • É essencial contactar antecipadamente os parceiros/clientes para uma implementação bem-sucedida da descontinuação do TLS 1.0. No mínimo, deve consistir em publicações de blogue, documentos técnicos ou outros conteúdos Web.

  • Cada um dos parceiros terá de avaliar a sua própria preparação para o TLS 1.2 através das iniciativas de teste de regressão/análise de código/sistema operativo, descritas nas secções acima.

Conclusão

A remoção das dependências do TLS 1.0 é uma questão complicada de conduzir de ponta a ponta. A Microsoft e os parceiros do setor estão, atualmente, a tomar medidas neste domínio para garantir que toda a nossa pilha de produtos é mais segura por predefinição, desde as nossas arquiteturas de desenvolvimento e componentes de SO até às aplicações/serviços criados sobre os mesmos. O seguimento das recomendações feitas neste documento ajudará a sua empresa a traçar o rumo certo e a saber que desafios esperar. Também ajudará os seus próprios clientes a ficarem mais preparados para a transição.

Apêndice A: Handshake Simulation para vários clientes que se conectam ao www.microsoft.com, cortesia SSLLabs.com

Resultados da Simulação de Handshake

Apêndice B: Desativando o TLS 1.0/1.1 enquanto mantém o modo FIPS

Siga os passos abaixo se a sua rede exigir o Modo FIPS, mas também pretender descontinuar o TLS 1.0/1.1:

  1. Configure as versões do TLS através do registo ao definir a opção "Ativado" como zero para as versões do TLS indesejadas.

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

  3. Desative todos os conjuntos de cifras que utilizem algoritmos que não sejam permitidos pela publicação FIPS relevante. No caso do Server 2016 (partindo do princípio de que as predefinições estão aplicadas), significa desativar as cifras RC4, PSK e NULL.

Contribuidores/Agradecimento

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