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