Estou tentando mitigar nossa vulnerabilidade ao ataque Poodle SSL 3.0 Fallback . Nossos administradores já começaram a desabilitar o SSL em favor do TLS para conexões de entrada para nossos servidores. E também aconselhamos nossa equipe a desabilitar o SSL em seus navegadores. Agora estou olhando nossa base de código .NET, que inicia conexões HTTPS com vários serviços por meio de System.Net.HttpWebRequest . Acredito que essas conexões podem ser vulneráveis a um ataque MITM se permitirem o fallback de TLS para SSL. Aqui está o que eu determinei até agora. Alguém poderia verificar novamente para verificar se estou certo? Esta vulnerabilidade é nova, então ainda não vi nenhuma orientação da Microsoft sobre como mitigá-la no .NET:
Os protocolos permitidos para a classe System.Net.Security.SslStream, que sustentam a comunicação segura em .NET, são definidos globalmente para cada AppDomain por meio da propriedade System.Net.ServicePointManager.SecurityProtocol .
O valor padrão dessa propriedade no .NET 4.5 é
Ssl3 | Tls(embora eu não consiga encontrar documentação para fazer backup disso). SecurityProtocolType é um enum com o atributo Flags, portanto, é um OR bit a bit desses dois valores. Você pode verificar isso em seu ambiente com esta linha de código:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Isso deve ser alterado para apenas
Tls, ou talvezTls12, antes de iniciar qualquer conexão em seu aplicativo:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Importante: como a propriedade oferece suporte a vários sinalizadores bit a bit, presumo que o SslStream não fará fallback automaticamente para outros protocolos não especificados durante o handshake. Caso contrário, qual seria o ponto de apoiar vários sinalizadores?
Atualização em TLS 1.0 vs 1.1 / 1.2:
De acordo com o especialista em segurança do Google Adam Langley, o TLS 1.0 foi posteriormente considerado vulnerável ao POODLE se não for implementado corretamente , então você deve considerar mudar para o TLS 1.2 exclusivamente.
Atualização para .NET Framework 4.7 e superior:
Conforme aludido pelo Prof Von Lemongargle abaixo, a partir da versão 4.7 do .NET Framework, não há necessidade de usar este hack, pois a configuração padrão permitirá que o SO escolha a versão do protocolo TLS mais segura. Consulte as práticas recomendadas de TLS (Transport Layer Security) com o .NET Framework para obter mais informações.