Crypto-IT Logo
ου γαρ εστιν κρυπτον ο ου φανερον γενησεται ουδε αποκρυφον ο ου γνωσθησεται και εις φανερον ελθη
Wersja PL ENG Version

KRACK

Atak KRACK (ang. Key Reinstallation Attack, czyli Atak Powtórnego Zainstalowania Klucza) jest złożonym atakiem na protokół WPA2, będącym połączeniem ataku ze znanym szyfrogramem oraz ataku man-in-the-middle. Napastnik przeprowadza atak w czasie etapu nawiązywania połączenia przy użyciu protokołu WPA2 (jest to tak zwany handshake - ang. uścisk dłoni), wykorzystując luki w standardzie i implementacjach algorytmu.

W momencie opublikowania szczegółów tego ataku (dnia 16. października 2017) większość istniejących implementacji algorytmu WPA2 była podatna na atak KRACK. Zgodnie z wymogami czasów, autorzy ataku przygotowali odpowiednio jego publikację, zakładając stronę internetową, tworząc filmy video, a nawet przygotowując specjalne logo (dostępne w wielu rozdzielczościach). Autorzy zaproponowali poprawki w standardzie oraz konkretne zmiany w kodzie różnych implementacji WPA2, które likwidują niebezpieczeństwo wykorzystywania tego sposobu ataku.

Wydaje się, że okres życia samego ataku KRACK nie będzie specjalnie długi (większość producentów wkrótce po ujawnieniu ataku upubliczniła poprawki łatające ten błąd; poprawki o najwyższym priorytecie), ale pobieżne przedstawienie sposobu przeprowadzenia ataku wydaje się pożądane. Jest to praktyczny przykład ataku kryptograficznego na two-time-pad.

Sekretny Klucz w WPA2

Każde urządzenie podłączające się do sieci bezprzewodowej bazującej na WPA2, wymienia z routerem szereg wiadomości, na podstawie których ustalany jest wspólny sekretny klucz szyfrujący, który będzie następnie wykorzystywany do zabezpieczenia całej komunikacji. W celu zagwarantowania bezpieczeństwa, należy mieć pewność, że użyty klucz będzie unikalny, czyli w szczególności, że żaden wcześniej wynegocjowany klucz nie zostanie powtórnie wykorzystany do szyfrowania kolejnej komunikacji (przeczytaj o atakach na two-time-pad aby dowiedzieć się więcej na ten temat).

Sekretny klucz tworzony jest na bazie współdzielonego hasła dostępu do sieci. W celu zagwarantowania unikalności klucza, obie strony (klient podłączający się do sieci i router bezprzewodowy) wybierają losowe liczby (nazywane nounce) oraz uzależniają sekretny klucz od swoich adresów MAC.

W protokole WPA2, klient i router wymieniają cztery wiadomości, na podstawie których tworzony jest sekretny klucz. Dwie pierwsze wiadomości zawierają losowe numery wybrane przez każde z nich i przesyłanego do drugiego urządzenia. Po wymianie dwóch pierwszych wiadomości, router przesyła trzecią wiadomość do klienta. Zawiera ona tak zwany klucz grupy (który w tej chwili nie jest dla nas istotny) oraz powoduje wygenerowanie sekretnego klucza. Ostatnią wiadomością jest potwierdzenie przesłane przez klienta do routera.

Przebieg Ataku

Atak KRACK polega na wymuszeniu przez napastnika zastosowania przez komunikujące się strony tego samego sekretnego klucza ponownie.

Aby tego dokonać, pierwszym krokiem napastnika jest uzyskanie możliwości podszycia się za jedną z komunikujących się stron (atak man-in-the-middle). Aby tego dokonać, musi on podrobić swój adres MAC oraz być w stanie zablokować wiadomości przesyłane pomiędzy routerem a klientem.

Drugim krokiem jest przechwycenie przez napastnika trzeciej wiadomości, wymienianej podczas inicjalizacji połączenia, oraz zapamiętanie jej. Napastnik musi również przechwycić odpowiedź wysłaną przez klienta i nie dopuścić do jej otrzymania przez router.

Błąd w specyfikacji WPA2 sprawia, że oficjalny standard WPA2 zaleca, aby klient generował sekretny klucz zawsze po otrzymaniu tej trzeciej wiadomości. Umożliwia to napastnikowi powtórne wysłanie tej wiadomości, w celu powtórnego ustawienia klucza na taką samą wartość jak poprzednio (ponieważ do jego utworzenia używane są te same dane, co za poprzednim razem: hasło, nounce oraz adresy MAC).

W zależności od typu algorytmu używanego do szyfrowania dalszej komunikacji pomiędzy stronami, napastnik może skompromitować zabezpieczenia w różnym stopniu. Zakres ten waha się od poznania sekretnego klucza używanego do komunikacji w jedną stronę, poprzez poznanie klucza zabezpieczającego komunikację w obie strony (protokoły CCMP oraz GCMP), aż do całkowitą kompromitację klucza, z powodu zmuszenia urządzeń do korzystania z zerowego klucza szyfrującego (na niektórych wersjach Linuxa i Androida).

Należy tutaj zauważyć, że napastnik nie poznaje hasła przechowywanego na obu urządzeniach. Wykradany jest jedynie sekretny klucz, używany do szyfrowania wiadomości wymienianych podczas aktualnej sesji.

Ochrona przed KRACK

Sposoby zapobiegania ataku wiążą się z niewielką modyfikacją kodu odpowiedzialnego za inicjalizację połączenia WPA2.

Przede wszystkim, po otrzymaniu trzeciej wiadomości, przed zresetowaniem klucza należałoby sprawdzić czy klucz nie został już wcześniej wygenerowany. Jeśli klucz już istnieje, to należy pominąć jego ponowne wyliczenie.

Ponadto, można zablokować resetowanie wartości nounce oraz liczników (zwiększanych przy wysyłaniu wszystkich wiadomości), jeśli aktualnie klucz już istnieje i jest używany do szyfrowania komunikacji.

Podsumowanie

Przedstawiony na tej stronie atak KRACK jest ciekawym przykładem zastosowania ataku man-in-the-middle w celu umożliwienia zaatakowania szyfrowania two-time-pad.

Powyżej opisano jedynie najbardziej popularną wersję tego ataku. Autorzy przedstawili szereg przykładów ataków na podobne protokoły (Fast BSS, TDSL, PeerKey), bazujące na inicjowaniu połączenia w podobny sposób. Zaprezentowali również sposób wykradania klucza grupy oraz przedstawili zmodyfikowane ataki dla implementacji protokołów w różnych wersjach i systemach operacyjnych. Zainteresowanych czytelników odsyłam do pracy opisującej ten atak: Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2, dostępnej na stronie autorów.