Я пытаюсь уменьшить нашу уязвимость к атаке Poodle SSL 3.0 Fallback . Наши администраторы уже начали отключать SSL в пользу TLS для входящих подключений к нашим серверам. И мы также посоветовали нашей команде отключить SSL в своих веб-браузерах. Теперь я смотрю на нашу кодовую базу .NET, которая инициирует HTTPS-соединения с различными службами через System.Net.HttpWebRequest . Я считаю, что эти соединения могут быть уязвимы для атаки MITM, если они позволяют откат с TLS на SSL. Вот что я определил до сих пор. Не мог бы кто-нибудь перепроверить это, чтобы убедиться, что я прав? Эта уязвимость совершенно новая, поэтому мне еще предстоит увидеть какие-либо инструкции от Microsoft по устранению ее в .NET:
Разрешенные протоколы для класса System.Net.Security.SslStream, который поддерживает безопасную связь в .NET, устанавливаются глобально для каждого домена приложения через свойство System.Net.ServicePointManager.SecurityProtocol .
Значение этого свойства по умолчанию в .NET 4.5 равно
Ssl3 | Tls
(хотя я не могу найти подтверждающую документацию). SecurityProtocolType - это перечисление с атрибутом Flags, так что это побитовое ИЛИ этих двух значений. Вы можете проверить это в своей среде с помощью этой строки кода:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Это следует изменить на просто
Tls
или, возможноTls12
, до того, как вы инициируете какие-либо подключения в своем приложении:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Важное замечание : поскольку свойство поддерживает несколько побитовых флагов, я предполагаю, что SslStream не будет автоматически переходить к другим неуказанным протоколам во время рукопожатия. В противном случае какой смысл поддерживать несколько флагов?
Обновление TLS 1.0 против 1.1 / 1.2:
По словам эксперта по безопасности Google Адама Лэнгли, TLS 1.0 позже оказался уязвимым для POODLE, если не был реализован правильно , поэтому вам следует подумать о переходе исключительно на TLS 1.2.
Обновление для .NET Framework 4.7 и выше:
Как упоминается ниже профессором фон Лемонгарглом , начиная с версии 4.7 .NET Framework, нет необходимости использовать этот хакерский прием, поскольку настройка по умолчанию позволяет ОС выбирать наиболее безопасную версию протокола TLS. Дополнительные сведения см. В разделе « Передовые методы безопасности транспортного уровня (TLS) с .NET Framework» .