Niebezpieczny Pudelek atakuje, czyli wyjaśnienie błędu w SSLv3

dodał 15 października 2014 o 10:17 w kategorii Błędy  z tagami:
Niebezpieczny Pudelek atakuje, czyli wyjaśnienie błędu w SSLv3

Kilka godzin temu badacze Google opublikowali informację o skutecznym ataku na protokół SSL. Atak ten umożliwia odczytanie zaszyfrowanych informacji przesyłanych przez użytkownika. Co to oznacza? Na to pytanie odpowiadamy w artykule.

Od kilku dni po sieci krążyły plotki o tajemniczym, nowym ataku na SSL, który wkrótce ma zostać ujawniony światu. Plotki okazały się prawdziwe – krótko po północy Google opublikowało informację o ataku na SSLv3, który nazwany został POODLE (skrót od (Padding Oracle On Downgraded Legacy Encryption). Odkrywcami ataku są Bodo Möller, Thai Duong oraz nasz rodak, Krzysztof Kotowicz.

Na czym polega atak i kto jest nim zagrożony? Poniżej trzy poziomy wyjaśnienia :) Przy okazji tu można sprawdzić podatność własnej przeglądarki.

Dla zwykłego użytkownika

Problem dotyczy tylko połączeń szyfrowanych (tych „z kłódeczką”), lecz to właśnie te połączenia są najważniejsze, bo w nich najczęściej przesyłane są faktycznie poufne dane. Nie jest to atak na serwery (nie umożliwia „włamania” na serwer), a na transmisję między przeglądarką a serwerem.

Jego przeprowadzenie wymaga od atakującego możliwości podsłuchiwania ruchu pomiędzy komputerem użytkownika a serwerem. Oznacza to, że jeśli korzystasz z dobrze zabezpieczonego, zaufanego WiFi, to raczej nie ma problemu. To samo dotyczy połączeń kablowych. Ryzyko powstaje, jeśli korzystasz z publicznych lub niezaufanych sieci WiFi (np. dworce, kawiarnie itp.). Oczywiście również połączenia kablowe czy zabezpieczone mogą zostać podsłuchane – jednak nie zrobi tego raczej „zwykły haker”, a np. NSA.

Przeprowadzenie ataku wymaga również, by przeglądarka, z której korzystasz, obsługiwała JavaScript. Oznacza to, ze większość urządzeń aplikacji na urządzeniach mobilnych (np. klient Twittera czy Facebooka) jest bezpieczna.

Gdy warunki do przeprowadzenia ataku będą spełnione, atakujący może odczytać np. Twoje ciasteczko sesyjne. Oznacza to, że będzie mógł np. przeczytać Twoją pocztę albo zobaczyć stan konta, ale nie pozna Twojego hasła ani nie zrobi w Twoim imieniu przelewu (jeśli zabezpieczony jest np. kodem SMS).

Przed atakiem można się zabezpieczyć. W zależności od używanej przeglądarki:

Firefox: trzeba wejść do ustawień (about:config) i zmienić opcję security.tls.version.min na „1”,

Chrome: trzeba uruchamiać z wiersza poleceń z parametrem -ssl-version-min=tls1 (kiedyś można było wyłączyć w opcjach, ale użytkownikom wydawało się, że TLS 1.0 jest niższy od SSLv3 i wyłączali nie to, co trzeba).

Internet Explorer: panel sterowania -> opcje internetowe -> zaawansowane -> odznaczyć „Użyj SSl 3.0”

Szczegółowe instrukcje w języku angielskim można znaleźć pod tym linkiem.

Ustawienia Internet Explorera

Ustawienia Internet Explorera

Dla średnio zaawansowanych użytkowników

Atak dotyczy protokołu SSLv3, który ma 15 lat i od dawna nie powinien być wykorzystywany. Czemu zatem ciągle obsługują go wszystkie przeglądarki? Zapewne dlatego, że obsługuje go ciągle wiele serwerów. A czemu obsługuje go wiele serwerów? Bo jest to najwyższa wersja protokołu, którą obsługuje nieśmiertelny Internet Explorer 6.

Tu krótkie przypomnienie – następcą SSLv3 jest TLS1.0 (wynika to zapewne z animozji między Microsoftem a Netscape). TLS 1.0, 1.1 i 1.2 nie są podatne na POODLE. Czemu zatem na atak podatne są przeglądarki, które obsługują TLS i łączą się z serwerami, obsługującymi TLS?

Niestety, mimo iż TLS zapewnia właściwą obsługę negocjacji protokołu w trakcie połączenia, to niektóre jego implementacje są tak popsute, że wprowadzono dodatkowy mechanizm zabezpieczający. Kiedy nie udaje się nawiązać połączenia TLS (bo np. jest notorycznie zrywane), serwer i przeglądarka wybiorą SSLv3. Pierwszym elementem ataku jest zatem oszukanie serwera, że nie da się nawiązać połączenia TLS, by doszło do połączenia SSLv3.

Do ataku niezbędny jest złośliwy JavaScript po stronie klienta. Zakładając jednak, że atakujący i tak musi móc podsłuchiwać ruch ofiary, nie jest trudno podłożyć JS do przeglądarki. Skrypt JS może być wykonany w dowolnym kontekście, ponieważ jego zadaniem jest przesyłanie do serwera, którego ciasteczko chce poznać atakujący, setek żądań za pomocą przeglądarki.

Właściwa część ataku polega na odpowiednio precyzyjnym manipulowaniu żądaniami skryptu, by w trakcie ich szyfrowania w trybie blokowym CBC zawartość ciasteczka była przesuwana o jeden bajt. Atak zaczyna się od 1 bajtu ciasteczka w ostatnim bloku, który jest uzupełniany do pełnych 8 bajtów. Dzięki odkrytej luce w protokole wystarczy maksymalnie 256 żądań do serwera, by odkryć zawartość 1 bajtu ciasteczka. W kolejnej fazie w ostatnim bloku znajdują się już 2 bajty ciasteczka – znany i nieznany. Ponownie wystarczy 256 żądań by odczytać bajt nieznany. I tak nx256, gdzie n to długość ciasteczka.

Dla użytkowników, którzy 3DEs/AES liczą ołówkiem na papierze

Nie udajemy, że wszystko rozumiemy tak dobrze, by Wam to wyjaśnić, a już na pewno nie zrobimy tego lepiej niż Adam Langley. Polecamy.

Co dalej?

Wygląda na to, że SSLv3 trzeba po prostu definitywnie wyłączyć, bez oglądania się na użytkowników IE6 i administratorów tych kilku serwerów, które jeszcze tylko ten protokół obsługują. Google zrobi to wkrótce w Chrome (obecnie blokuje przełączanie na niższy protokół, jeśli dostępny jest wyższy), w jego ślad pewnie pójdą także producenci innych przeglądarek. Administratorzy serwerów, czy chcą, czy nie, też będą musieli się dostosować.

Aktualizacja 2014-10-15 12:30
Opublikowano listę witryn, które dzisiaj w ogóle nie obsługują TLS. Są na niej takie polskie adresy jak:

  • citibank.pl
  • wakacje.pl
  • cinema-city.pl
  • jobs.pl
  • strazgraniczna.pl

Źródła: