Estoy tratando de mitigar nuestra vulnerabilidad al ataque Poodle SSL 3.0 Fallback . Nuestros administradores ya han comenzado a deshabilitar SSL a favor de TLS para las conexiones entrantes a nuestros servidores. Y también hemos aconsejado a nuestro equipo que desactive SSL en sus navegadores web. Ahora estoy viendo nuestra base de código .NET, que inicia conexiones HTTPS con varios servicios a través de System.Net.HttpWebRequest . Creo que estas conexiones podrían ser vulnerables a un ataque MITM si permiten el retroceso de TLS a SSL. Esto es lo que he determinado hasta ahora. ¿Alguien podría volver a comprobar esto para verificar que estoy en lo cierto? Esta vulnerabilidad es nueva, por lo que todavía no he visto ninguna orientación de Microsoft sobre cómo mitigarla en .NET:
Los protocolos permitidos para la clase System.Net.Security.SslStream, que sustenta la comunicación segura en .NET, se configuran globalmente para cada AppDomain mediante la propiedad System.Net.ServicePointManager.SecurityProtocol .
El valor predeterminado de esta propiedad en .NET 4.5 es
Ssl3 | Tls
(aunque no puedo encontrar documentación para respaldarlo). SecurityProtocolType es una enumeración con el atributo Flags, por lo que es un OR bit a bit de esos dos valores. Puede verificar esto en su entorno con esta línea de código:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Esto debería cambiarse a solo
Tls
, o quizásTls12
, antes de iniciar cualquier conexión en su aplicación:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Importante: dado que la propiedad admite varios indicadores bit a bit, supongo que SslStream no recurrirá automáticamente a otros protocolos no especificados durante el protocolo de enlace. De lo contrario, ¿cuál sería el punto de admitir múltiples banderas?
Actualización en TLS 1.0 vs 1.1 / 1.2:
Según el experto en seguridad de Google, Adam Langley, más tarde se descubrió que TLS 1.0 era vulnerable a POODLE si no se implementaba correctamente , por lo que debería considerar pasar a TLS 1.2 exclusivamente.
Actualización para .NET Framework 4.7 y superior:
Como lo menciona el profesor Von Lemongargle a continuación, a partir de la versión 4.7 de .NET Framework, no es necesario utilizar este truco, ya que la configuración predeterminada permitirá al sistema operativo elegir la versión del protocolo TLS más segura. Consulte las mejores prácticas de seguridad de la capa de transporte (TLS) con .NET Framework para obtener más información.