Udostępnij za pośrednictwem


Rozwiązywanie problemu z protokołem TLS 1.0, druga wersja

Ten dokument przedstawia najnowsze wskazówki dotyczące szybkiego identyfikowania i usuwania zależności protokołu Transport Layer Security (TLS) w wersji 1.0 w oprogramowaniu opartym na systemach operacyjnych firmy Microsoft, postępując zgodnie ze szczegółowymi informacjami na temat zmian produktów i nowych funkcji dostarczanych przez firmę Microsoft w celu ochrony własnych klientów i usług online. Ma on być używany jako punkt wyjścia do tworzenia planu migracji do środowiska sieciowego TLS 1.2 lub nowszego. Chociaż omówione tutaj rozwiązania mogą mieć zastosowanie i pomagać w usuwaniu użycia protokołu TLS 1.0 w nie-Microsoftowych systemach operacyjnych lub bibliotekach kryptograficznych, nie są one przedmiotem tego dokumentu.

Protokół TLS 1.0 to protokół zabezpieczeń zdefiniowany po raz pierwszy w 1999 r. na potrzeby ustanawiania kanałów szyfrowania za pośrednictwem sieci komputerowych. Firma Microsoft obsługuje ten protokół od czasu systemu Windows XP/Server 2003. Chociaż nie jest już domyślnym protokołem zabezpieczeń używanym przez nowoczesne systemy operacyjne, protokół TLS 1.0 jest nadal obsługiwany w celu zapewnienia zgodności z poprzednimi wersjami. Zmieniające się wymagania prawne, a także nowe luki w zabezpieczeniach w protokole TLS 1.0 zapewniają korporacjom zachętę do całkowitego wyłączenia protokołu TLS 1.0.

Firma Microsoft zaleca klientom wyprzedzanie tego problemu przez usunięcie zależności protokołu TLS 1.0 w swoich środowiskach i wyłączenie protokołu TLS 1.0 na poziomie systemu operacyjnego, jeśli to możliwe. Biorąc pod uwagę czas obsługi protokołu TLS 1.0 przez branżę oprogramowania, zdecydowanie zaleca się, aby każdy plan wycofania protokołu TLS 1.0 zawierał następujące elementy:

  • Analiza kodu w celu znalezienia/naprawienia zakodowanych na stałe wystąpień protokołów zabezpieczeń TLS 1.0 lub starszych.

  • Skanowanie punktów końcowych sieci i analiza ruchu w celu zidentyfikowania systemów operacyjnych przy użyciu protokołów TLS 1.0 lub starszych.

  • Pełne testowanie regresji za pośrednictwem całego stosu aplikacji z wyłączonym protokołem TLS 1.0.

  • Migracja starszych systemów operacyjnych i bibliotek programistycznych/struktur do wersji, które mogą domyślnie negocjować protokół TLS 1.2.

  • Testowanie zgodności w systemach operacyjnych używanych przez firmę do identyfikowania problemów z obsługą protokołu TLS 1.2.

  • Koordynacja z własnymi partnerami biznesowymi i klientami w celu powiadomienia ich o wycofaniu obsługi protokołu TLS 1.0.

  • Zrozumienie, którzy klienci mogą już nie być w stanie nawiązać połączenia z serwerami po wyłączeniu protokołu TLS 1.0.

Celem tego dokumentu jest przedstawienie zaleceń, które mogą pomóc usunąć blokady techniczne w celu wyłączenia protokołu TLS 1.0, jednocześnie zwiększając wgląd w wpływ tej zmiany na własnych klientów. Wykonanie takich badań może pomóc zmniejszyć wpływ na firmę kolejnej luki w zabezpieczeniach protokołu TLS 1.0. Na potrzeby tego dokumentu odwołania do wycofania protokołu TLS 1.0 obejmują również protokół TLS 1.1.

Deweloperzy oprogramowania dla przedsiębiorstw mają strategiczną potrzebę wdrożenia bardziej bezpiecznych i elastycznych rozwiązań (znanych inaczej jako Crypto Agiley) w celu radzenia sobie z przyszłymi zabezpieczeniami protokołu zabezpieczeń. Chociaż w tym dokumencie zaproponowano elastyczne rozwiązania eliminacji trwałego kodowania TLS, szersze rozwiązania zwinności kryptograficznej wykraczają poza zakres tego dokumentu.

Bieżąca implementacja protokołu TLS 1.0 firmy Microsoft

Implementacja protokołu TLS 1.0 firmy Microsoft jest wolna od znanych luk w zabezpieczeniach. Ze względu na potencjalne przyszłe ataki związane z obniżeniem wersji protokołu i inne luki w zabezpieczeniach protokołu TLS 1.0, które nie są specyficzne dla implementacji Microsoftu, zaleca się, aby zależności od wszystkich protokołów bezpieczeństwa starszych niż TLS 1.2 zostały usunięte, jeśli to możliwe (TLS 1.1/1.0/ SSLv3/SSLv2).

Podczas planowania tej migracji do protokołu TLS 1.2 lub nowszego deweloperzy i administratorzy systemu powinni mieć świadomość potencjału trwałego kodowania wersji protokołu w aplikacjach opracowanych przez pracowników i partnerów. Hardcoding oznacza, że wersja protokołu TLS jest sztywno ustawiona na wersję, która jest przestarzała i mniej bezpieczna niż nowsze wersje. Wersje protokołu TLS nowsze niż wersja zakodowana na stałe nie mogą być używane bez modyfikowania danego programu. Tej klasy problemu nie można rozwiązać bez zmian kodu źródłowego i wdrożenia aktualizacji oprogramowania. Hardkodowanie wersji protokołu było powszechne w przeszłości na potrzeby testowania i obsługi, ponieważ wiele różnych przeglądarek i systemów operacyjnych miało różne poziomy obsługi protokołu TLS.

Obsługiwane wersje protokołu TLS w systemie Windows

Wiele systemów operacyjnych ma nieaktualne ustawienia domyślne wersji protokołu TLS lub limity obsługi, które należy uwzględnić.

Rysunek 1. Obsługa protokołu zabezpieczeń według wersji systemu operacyjnego

System operacyjny Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2 Protokół TLS 1.3
Windows Vista Enabled Enabled Enabled Nie jest obsługiwany Nie jest obsługiwany Nie jest obsługiwany
Windows Server 2008 Enabled Enabled Enabled Wyłączone* Wyłączone* Nie jest obsługiwany
Windows 7 (WS2008 R2) Enabled Enabled Enabled Wyłączone* Wyłączone* Nie jest obsługiwany
Windows 8 (WS2012) Wyłączony Enabled Enabled Enabled Enabled Nie jest obsługiwany
Windows 8.1 (WS2012 R2) Wyłączony Enabled Enabled Enabled Enabled Nie jest obsługiwany
Windows 10 Wyłączony Enabled Enabled Enabled Enabled Nie jest obsługiwany
Windows 11 Wyłączony Enabled Enabled Enabled Enabled Enabled
Windows Server 2016 Nie jest obsługiwany Wyłączony Enabled Enabled Enabled Nie jest obsługiwany
Windows Server 2016 Nie jest obsługiwany Wyłączony Enabled Enabled Enabled Nie jest obsługiwany
Windows Server 2019 Nie jest obsługiwany Wyłączony Enabled Enabled Enabled Nie jest obsługiwany
Windows Server 2019 GS edition Nie jest obsługiwany Wyłączony Wyłączony Wyłączony Enabled Nie jest obsługiwany
Windows Server 2022 Nie jest obsługiwany Wyłączony Wyłączony Wyłączony Enabled Enabled

System Windows Server 2019 GS jest zgodny ze standardem Microsoft SDL, TLS 1.2 tylko z ograniczonym zestawem zestawów szyfrowania.

Wersja systemu Windows Server 2022 jest zgodna ze standardem Microsoft SDL, protokołami TLS 1.2 i TLS 1.3 tylko z ograniczonym zestawem zestawów szyfrowania.

Protokół TLS 1.1/1.2 można włączyć w systemie Windows Server 2008 za pośrednictwem tego opcjonalnego pakietu windows Update.

Aby uzyskać więcej informacji na temat wycofywania protokołu TLS 1.0/1.1 w programie IE/Edge, zobacz Modernizowanie połączeń TLS w przeglądarkach Microsoft Edge i Internet Explorer 11, zmiany wpływające na zgodność witryny pochodzące z przeglądarki Microsoft Edge i Wyłączanie protokołów TLS/1.0 i TLS/1.1 w nowej przeglądarce Edge

Prostym sposobem określenia, jaką wersję protokołu TLS będą żądać różni klienci podczas łączenia się z usługami online, jest skorzystanie z Symulacji Połączenia na Qualys SSL Labs. Ta symulacja obejmuje kombinacje systemu operacyjnego/przeglądarki klienta w różnych producentach. Zobacz Dodatek A na końcu tego dokumentu, aby uzyskać szczegółowy przykład pokazujący wersje protokołu TLS wynegocjowane przez różne symulowane kombinacje systemu operacyjnego/przeglądarki klienta podczas nawiązywania połączenia z www.microsoft.com.

Jeśli jeszcze nie zostało to zrobione, zdecydowanie zaleca się sporządzenie spisu systemów operacyjnych używanych przez przedsiębiorstwo, klientów i partnerów (tych ostatnich za pośrednictwem działań informacyjnych/kontaktu lub co najmniej zbierania ciągów HTTP User-Agent). Ten spis może zostać dodatkowo uzupełniony przez analizę ruchu na brzegu sieci przedsiębiorstwa. W takiej sytuacji analiza ruchu umożliwi pomyślne wynegocjowanie wersji protokołu TLS przez klientów/partnerów łączących się z usługami, ale sam ruch pozostanie zaszyfrowany.

Ulepszenia inżynieryjne firmy Microsoft w celu wyeliminowania zależności protokołu TLS 1.0

Od wersji 1 tego dokumentu firma Microsoft wysłała szereg aktualizacji oprogramowania i nowych funkcji w zakresie obsługi wycofania protokołu TLS 1.0. Są to:

  • Niestandardowe rejestrowanie w IIS w celu skorelowania adresu IP klienta, ciągu agenta użytkownika, identyfikatora URI usługi, wersji protokołu TLS i pakietu szyfrującego.

    • Dzięki temu rejestrowaniu administratorzy mogą wreszcie kwantyfikować narażenie klientów na słabe protokoły TLS.
  • SecureScore — aby pomóc administratorom dzierżawy usługi Office 365 zidentyfikować własne słabe użycie protokołu TLS, portal SecureScore został skompilowany w celu udostępnienia tych informacji, ponieważ obsługa protokołu TLS 1.0 została zakończona w usłudze Office 365 w październiku 2018 r.

    • Ten portal udostępnia administratorom dzierżaw usługi Office 365 cenne informacje potrzebne do skontaktowania się z własnymi klientami, którzy mogą nie wiedzieć o własnych zależnościach protokołu TLS 1.0.

    • Aby uzyskać więcej informacji, odwiedź https://securescore.microsoft.com/.

  • Aktualizacje programu .NET Framework w celu wyeliminowania twardego kodowania na poziomie aplikacji i zapobiegania zależnościom od TLS 1.0 dziedziczonym z platformy.

  • Wydano wskazówki dla deweloperów i aktualizacje oprogramowania, aby ułatwić klientom identyfikowanie i eliminowanie zależności platformy .Net w przypadku słabego protokołu TLS: Najlepsze rozwiązania dotyczące protokołu Transport Layer Security (TLS) w programie .NET Framework

    • FYI: Wszystkie aplikacje przeznaczone dla platformy .NET 4.5 lub starszej prawdopodobnie będą musiały zostać zmodyfikowane w celu obsługi protokołu TLS 1.2.
  • Protokół TLS 1.2 został przeniesiony wstecz do systemu Windows Server 2008 z dodatkiem SP2 i XP POSReady 2009, aby pomóc klientom spełniać starsze zobowiązania.

  • Więcej ogłoszeń zostanie ogłoszonych na początku 2019 r. i przekazanych w kolejnych aktualizacjach tego dokumentu.

Znajdowanie i naprawianie zależności protokołu TLS 1.0 w kodzie

W przypadku produktów korzystających z bibliotek kryptograficznych i protokołów zabezpieczeń systemu operacyjnego Windows następujące kroki powinny pomóc w zidentyfikowaniu dowolnego zakodowanego na stałe użycia protokołu TLS 1.0 w aplikacjach:

  1. Zidentyfikuj wszystkie wystąpienia klasy AcquireCredentialsHandle(). Pomaga to recenzentom zbliżyć się do bloków kodu, w których protokół TLS może być zakodowany na stałe.

  2. Przejrzyj wszystkie wystąpienia struktur SecPkgContext_SupportedProtocols i SecPkgContext_ConnectionInfo pod kątem TLS zakodowanego na stałe.

  3. W kodzie natywnym ustaw wszystkie niezerowe przypisania grbitEnabledProtocols na zero. Dzięki temu system operacyjny może używać domyślnej wersji protokołu TLS.

  4. Wyłącz tryb FIPS , jeśli jest włączony z powodu potencjalnego konfliktu z ustawieniami wymaganymi do jawnego wyłączenia protokołu TLS 1.0/1.1 w tym dokumencie. Aby uzyskać więcej informacji, zobacz Dodatek B .

  5. Zaktualizuj i ponownie skompiluj wszystkie aplikacje przy użyciu winHTTP hostowanego na serwerze 2012 lub starszym.

    1. Aplikacje zarządzane — ponowne kompilowanie i ponowne dostosowywanie do najnowszej wersji programu .NET Framework

    2. Aplikacje muszą dodawać kod do obsługi protokołu TLS 1.2 za pośrednictwem protokołu WinHttpSetOption

  6. Aby pokryć wszystkie podstawy, przeskanuj kod źródłowy oraz pliki konfiguracji usługi online pod kątem poniższych wzorców odpowiadających wartościom typów wyliczeniowych, które są często używane w implementacji TLS.

    1. SecurityProtocolType

    2. SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL lub PROTOCOL_TLS

Zalecane rozwiązanie we wszystkich powyższych przypadkach polega na usunięciu wyboru wersji protokołu zakodowanego na stałe i zastosowaniu domyślnych ustawień systemu operacyjnego. Jeśli używasz metodyki DevSkim, kliknij tutaj , aby zobaczyć reguły obejmujące powyższe kontrole, których można użyć z własnym kodem.

Program Windows PowerShell używa programu .NET Framework 4.5, który nie zawiera protokołu TLS 1.2 jako dostępnego protokołu. Aby obejść ten problem, dostępne są dwa rozwiązania:

  1. Zmodyfikuj podany skrypt, aby uwzględnić następujące elementy:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Dodaj globalny klucz rejestru (np. za pośrednictwem zasad grupy) do dowolnej maszyny, która musi nawiązać połączenia TLS 1.2 przez aplikację .NET. Spowoduje to, że platforma .NET będzie używać wersji protokołu TLS "System Default", która dodaje protokół TLS 1.2 jako dostępny protokół, a skrypty będą mogły korzystać z przyszłych wersji protokołu TLS, gdy system operacyjny je obsługuje. (np. TLS 1.3)

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

Rozwiązania (1) i (2) wzajemnie się wykluczają, co oznacza, że nie muszą być wdrażane razem.

Ponowne kompilowanie/ponowne pobieranie aplikacji zarządzanych przy użyciu najnowszej wersji programu .Net Framework

Aplikacje korzystające z wersji programu .NET Framework wcześniejszych niż 4.7 mogą mieć skuteczne ograniczenia dotyczące obsługi protokołu TLS 1.0 niezależnie od podstawowych ustawień domyślnych systemu operacyjnego. Aby uzyskać więcej informacji, zapoznaj się z poniższym diagramem i najlepszymi rozwiązaniami dotyczącymi protokołu Transport Layer Security (TLS) w programie .NET Framework .

Ponowne kompilowanie aplikacji zarządzanych

SystemDefaultTLSVersion ma pierwszeństwo przed ustawieniami wersji TLS na poziomie aplikacji. Zalecanym najlepszym rozwiązaniem jest zawsze poleganie na domyślnej wersji protokołu TLS systemu operacyjnego. Jest to również jedyne rozwiązanie kryptograficzne zwinne, które umożliwia aplikacjom korzystanie z przyszłej obsługi protokołu TLS 1.3.

Jeśli używasz starszych wersji programu .NET Framework, takich jak 4.5.2 lub 3.5, domyślnie aplikacja będzie używać starszych i niezalecanych protokołów, takich jak SSL 3.0 lub TLS 1.0. Zdecydowanie zaleca się uaktualnienie do nowszych wersji programu .NET Framework, takich jak .NET Framework 4.6 lub ustawienie odpowiednich kluczy rejestru dla "UseStrongCrypto".

Testowanie przy użyciu protokołu TLS 1.2 lub nowszego

Po poprawkach zalecanych w powyższej sekcji produkty powinny być testowane regresją pod kątem błędów negocjacji protokołu i zgodności z innymi systemami operacyjnymi w przedsiębiorstwie.

  • Najczęstszym problemem w tym testowaniu regresji jest niepowodzenie negocjacji PROTOKOŁU TLS z powodu próby połączenia klienta z systemu operacyjnego lub przeglądarki, która nie obsługuje protokołu TLS 1.2.

    • Na przykład klient vista nie będzie negocjować protokołu TLS z serwerem skonfigurowanym dla protokołu TLS 1.2 lub nowszego, ponieważ maksymalna obsługiwana wersja protokołu TLS systemu Vista wynosi 1.0. Ten klient powinien zostać uaktualniony lub zlikwidowany w środowisku TLS 1.2 lub nowszym.
  • Produkty korzystające z wzajemnego uwierzytelniania TLS opartego na certyfikatach mogą wymagać dodatkowego testowania regresji, ponieważ kod wyboru certyfikatu skojarzony z protokołem TLS 1.0 był mniej ekspresyjny niż w przypadku protokołu TLS 1.2.

    • Jeśli produkt negocjuje usługę MTLS z certyfikatem z lokalizacji niestandardowej (poza standardowymi nazwanymi magazynami certyfikatów w systemie Windows), kod ten może wymagać aktualizacji, aby upewnić się, że certyfikat został uzyskany poprawnie.
  • Należy przejrzeć współzależności usług pod kątem problemów.

    • Wszelkie usługi, które współdziałają ze stronami trzecimi, powinny przeprowadzać dodatkowe testy międzyoperacyjne z tymi stronami trzecimi.

    • Wszystkie aplikacje innych niż Windows lub systemy operacyjne serwera w użyciu wymagają badania/ potwierdzenia, że mogą obsługiwać protokół TLS 1.2. Skanowanie jest najprostszym sposobem ustalenia tego.

Prosta strategia testowania tych zmian w usłudze online składa się z następujących elementów:

  1. Przeprowadź skanowanie systemów środowiska produkcyjnego w celu zidentyfikowania systemów operacyjnych, które nie obsługują protokołu TLS 1.2.

  2. Skanuj kod źródłowy i pliki konfiguracji usługi online dla zakodowanego na stałe protokołu TLS zgodnie z opisem w temacie "Znajdowanie i naprawianie zależności protokołu TLS 1.0 w kodzie"

  3. Zaktualizuj/ponownie skompiluj aplikacje zgodnie z wymaganiami:

    1. Aplikacje zarządzane

      1. Ponownie skompiluj najnowszą wersję programu .NET Framework.

      2. Sprawdź, czy wyliczenie SSLProtocols jest ustawione na wartość SSLProtocols.None, aby używać domyślnych ustawień systemowych.

    2. Aplikacje WinHTTP — ponowne kompilowanie za pomocą platformy WinHttpSetOption w celu obsługi protokołu TLS 1.2

  4. Rozpocznij testowanie w środowisku przedprodukcyjnym lub przejściowym ze wszystkimi protokołami zabezpieczeń starszymi niż TLS 1.2 wyłączone za pośrednictwem rejestru.

  5. Napraw wszystkie pozostałe przypadki na sztywno zakodowanego protokołu TLS, gdy są napotykane w trakcie testowania. Ponownie wdróż oprogramowanie i wykonaj nowy przebieg testu regresji.

Powiadamianie partnerów o planach wycofania protokołu TLS 1.0

Po rozwiązaniu problemu z hardkodowaniem TLS oraz zakończeniu aktualizacji systemu operacyjnego/frameworku programistycznego, jeśli zdecydujesz się na wycofanie się z użytkowania TLS 1.0, konieczne będzie koordynowanie działań z klientami i partnerami.

  • Wczesne nawiązywanie kontaktu z partnerami i klientami jest niezbędne do pomyślnego wycofania protokołu TLS 1.0. Co najmniej powinno to obejmować wpisy w blogu, oficjalne dokumenty lub inną zawartość internetową.

  • Partnerzy muszą ocenić własną gotowość protokołu TLS 1.2 za pośrednictwem inicjatyw dotyczących testowania skanowania/regresji systemu operacyjnego/kodu opisanych w powyższych sekcjach.

Podsumowanie

Usuwanie zależności od protokołu TLS 1.0 jest złożonym zagadnieniem, które należy rozwiązać w całości. Firma Microsoft i partnerzy branżowi podejmują dziś działania w celu zapewnienia, że cały stos produktów jest domyślnie bezpieczniejszy, od naszych składników systemu operacyjnego i struktur programistycznych do aplikacji/usług utworzonych na ich podstawie. Wykonanie zaleceń opisanych w tym dokumencie pomoże firmie wyznaczyć właściwy kierunek rozwoju i zrozumieć, jakim wyzwaniom można się spodziewać. Pomoże to również własnym klientom w przygotowaniu się do przejścia.

Dodatek A: Symulacja uzgadniania dla różnych aplikacji klienckich łączących się z www.microsoft.com, za sprawą uprzejmości SSLLabs.com

Wyniki symulacji negocjacji

Dodatek B: Wycofanie protokołu TLS 1.0/1.1 przy zachowaniu trybu FIPS

Wykonaj poniższe kroki, jeśli sieć wymaga trybu FIPS, ale chcesz również wycofać protokół TLS 1.0/1.1:

  1. Skonfiguruj wersje protokołu TLS za pośrednictwem rejestru, ustawiając wartość "Włączone" na zero dla niechcianych wersji protokołu TLS.

  2. Wyłącz krzywą 25519 (tylko serwer 2016) za pośrednictwem zasad grupy.

  3. Wyłącz wszystkie zestawy szyfrowania przy użyciu algorytmów, które nie są dozwolone przez odpowiednią publikację FIPS. W przypadku serwera 2016 (przy założeniu, że ustawienia domyślne obowiązują) oznacza to wyłączenie szyfrów RC4, PSK i NULL.

Współautorzy/Dziękujemy

Mark Cartwright
Bryan Sullivan
Patrick Jungles
Michael Scovetta
Tony Rice
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrei Popov
Michiko Short
Justin Burke
Gov Maharaj
Brad Turner
Sean Stevenson