Я намагаюся пом’якшити нашу вразливість до нападу пуделя 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, так що це побітовое АБО з цих двох значень. Ви можете перевірити це у своєму оточенні за допомогою цього рядка коду: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 і вище:
Як згадував проф. Фон Lemongargle нижче, починаючи з версії 4.7 .NET Framework, не потрібно використовувати цей злом, оскільки налаштування за замовчуванням дозволить ОС вибрати найбільш безпечну версію протоколу TLS. Для отримання додаткової інформації див. Кращі практики безпеки транспортного шару (TLS) із .NET Framework .