O tym, że protokół SSL w wersji 3 nie gwarantuje bezpiecznej transmisji danych wiadomo nie od dziś. Opublikowany właśnie dokument RFC 7568 całkowicie zakazuje jego wykorzystywania.
Nie ma ratunku dla SSL 3.0
Protokół SSL 3.0 (SSLv3) powstał w 1996 roku i przez wiele lat był podstawowym protokołem zabezpieczającym transmisję danych pomiędzy serwerem a klientem. O zagrożeniach wiążących się z korzystaniem z protokołu SSLv3 mówiono od dawna i dlatego był on stopniowo zastępowany przez nowsze wersje, TLS 1.0, TLS 1.1 czy w końcu przez najnowszą i najbezpieczniejszą dzisiaj wersję protokołu TLS – 1.2. Gwoździem do trumny dla SSLv3 okazała się być podatność Padding Oracle On Downgraded Legacy Encryption – POODLE. Po jej ujawnieniu w październiku ubiegłego roku na wielu serwerach usunięto SSLv3 z konfiguracji, a przeglądarki internetowe wyłączyły domyślne wsparcie dla tej wersji protokołu.
W zaproponowanym jako standard RFC 7568 zatytułowanym Deprecating Secure Sockets Layer Version 3.0 możemy przeczytać:
SSLv3 MUST NOT be used. Negotiation of SSLv3 from any version of TLS MUST NOT be permitted.
co oznacza po prostu zakaz wykorzystywania protokołu SSL w wersji 3.0.
Autorzy dokumentu, czyli R. Barnes, M. Thomson, A. Pironti i A. Langley, określają protokół SSLv3 jako całkowicie złamany, a na potwierdzenie swoich słów wskazują trzy obszary w których SSLv3 nie spełnia akceptowalnych wymagań bezpieczeństwa:
- Schematy szyfrowania – tutaj jak główny problem wskazano wykorzystywanie trybu CBC (Cipher Block Chaining) w procesie blokowego szyfrowania danych. Tryb ten posiada podatności, które mogą prowadzić do nieautoryzowanego odczytania szyfrowanych wiadomości. Obejściem tego problemu było skorzystanie ze strumieniowych algorytmów szyfrujących, głównie RC4. Obecnie jest to jednak jak wejście z deszczu pod rynnę, bo RC4 także przestał być uznawany za bezpieczny.
- Wymiana kluczy – istnieje możliwość przechwycenia wymienianych sekretów poprzez atak man-in-the-middle m.in. podczas renegocjacji połączeń SSL.
- Funkcje kryptograficzne – chodzi o korzystanie z, uznawanych obecnie za słabe, funkcji skrótu SHA-1 i MD5.
Do eliminacji podatności opisanych w punkcie 1 i 2 wykorzystano rozwiązanie oparte na tzw. rozszerzeniach, które zostały zaimplementowane dopiero w TLS 1.0, a więc ich usunięcie w SSL 3.0 nie jest możliwe. Podsumowując, SSL 3.0 posiada poważne podatności bezpieczeństwa, których nie można naprawić czy chociżby obejść i z tego powodu zakazano jego użycia.
Ograniczenia i obecny status użycia SSL 3.0
Oprócz wskazanych wyżej błędów bezpośrednio narażających użytkowników na utratę poufnych danych dodatkowym impulsem do rezygnacji z SSL 3.0 są ograniczenia przez które niemożliwe jest skorzystanie z pewnych pożądanych właściwości, które zapewniają dopiero nowsze wersję protokołu. Są to m.in.:
- brak wsparcia dla Authenticated Encryption with Additional Data (AEAD) – o tym czym jest AEAD postaram się wyjaśnić w którymś z kolejnych wpisów – póki co odsyłam do Wikipedii.
- brak wsparcia dla algorytmów opartych na krzywych eliptycznych, takich jak Elliptic Curve Diffie-Hellman (ECDH) czy Elliptic Curve Digital Signature Algorithm (ECDSA).
Na koniec sprawdźmy jeszcze jak obecnie przedstawia się wykorzystanie SSLv3. Opierając się na raporcie SSL Pulse z 11 czerwca 2015, SSLv3 był włączony na 37,7% serwerów WWW 200 000 najpopularniejszych stron. Nie oznacza to oczywiście, że komunikacja z tym serwerami odbywa się przy wykorzystaniu SSLv3. Zdecydowana większość z nich, o ile nie wszystkie, posiadają wsparcie także dla nowszych wersji i to one są wybierane do przeprowadzenia bezpiecznych, szyfrowanych transmisji. Jak informowała Mozilla przy okazji ujawnieniu podatności POODLE, Firefox notował tylko około 0.3% połączeń HTTPS korzystających z SSL 3.0. CloudFlare pisał wtedy o 0.65%. Dziś te liczby z pewnością są jeszcze mniejsze.
Z pewnością na całkowite usunięcie SSL 3.0 z konfiguracji przynajmniej 95-99% serwerów przyjdzie nam jeszcze trochę poczekać, ale ważne jest to, że SSL w wersji 3.0 nie jest już dzisiaj praktycznie wykorzystywany i nie stwarza zagrożenia dla poufności i integralności danych przesyłanych przez Internet. RFC 7568 jest potwierdzeniem tego, że czas SSLv3 definitywnie minął.