Próbuję złagodzić naszą lukę w ataku Poodle SSL 3.0 Fallback . Nasi administratorzy już zaczęli wyłączać SSL na rzecz TLS dla połączeń przychodzących do naszych serwerów. Poradziliśmy również naszemu zespołowi, aby wyłączył SSL w swoich przeglądarkach internetowych. Patrzę teraz na naszą bazę kodu .NET, która inicjuje połączenia HTTPS z różnymi usługami za pośrednictwem System.Net.HttpWebRequest . Uważam, że te połączenia mogą być podatne na atak MITM, jeśli pozwolą na powrót z TLS do SSL. Oto, co do tej pory ustaliłem. Czy ktoś mógłby to sprawdzić dwukrotnie, aby potwierdzić, że mam rację? Ta luka jest zupełnie nowa, więc nie widziałem jeszcze żadnych wskazówek od firmy Microsoft, jak ją złagodzić w .NET:
Dozwolone protokoły dla klasy System.Net.Security.SslStream, która stanowi podstawę bezpiecznej komunikacji w .NET, są ustawiane globalnie dla każdej domeny AppDomain za pośrednictwem System.Net.ServicePointManager.SecurityProtocol właściwości .
Domyślną wartością tej właściwości w .NET 4.5 jest
Ssl3 | Tls
(chociaż nie mogę znaleźć dokumentacji, która by to potwierdzała). SecurityProtocolType to wyliczenie z atrybutem Flags, więc jest to bitowe LUB z tych dwóch wartości. Możesz to sprawdzić w swoim środowisku za pomocą tego wiersza kodu:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Należy to zmienić na sprawiedliwe
Tls
, a możeTls12
przed zainicjowaniem jakichkolwiek połączeń w aplikacji:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Ważne: ponieważ właściwość obsługuje wiele flag bitowych, zakładam, że SslStream nie będzie automatycznie wracać do innych nieokreślonych protokołów podczas uzgadniania. W przeciwnym razie jaki byłby sens obsługi wielu flag?
Aktualizacja TLS 1.0 w porównaniu z 1.1 / 1.2:
Według eksperta Google ds. Bezpieczeństwa Adama Langleya, protokół TLS 1.0 okazał się później podatny na działanie POODLE, jeśli nie został prawidłowo zaimplementowany , dlatego należy rozważyć przejście wyłącznie na TLS 1.2.
Aktualizacja dla .NET Framework 4.7 i nowszych:
Jak wspomniał prof Von Lemongargle poniżej, począwszy od wersji 4.7 .NET Framework, nie ma potrzeby używania tego hacka, ponieważ domyślne ustawienie pozwoli systemowi operacyjnemu wybrać najbezpieczniejszą wersję protokołu TLS. Aby uzyskać więcej informacji, zobacz Najważniejsze wskazówki dotyczące zabezpieczeń warstwy transportu (TLS) w programie .NET Framework .