r   e   k   l   a   m   a
r   e   k   l   a   m   a

PIN gorszy niż hasło, czyli ataki na WPS, tylną furtkę sieci Wi-Fi

Strona główna AktualnościBEZPIECZEŃSTWO

Ktoś kiedyś powiedział, że ze zbioru {bezpieczeństwo, wygoda, niska cena} można wybrać tylko dwa elementy. Niestety spostrzeżenie to musiało być nieznane dla twórców protokołu Wireless Protected Setup (WPS), przekonanych, że zabezpieczenia sieci bezprzewodowych WPA2-PSK są zbyt skomplikowane dla przeciętnego użytkownika – i że trzeba zrobić to prościej. Zrobili więc to prościej, wprowadzając na w 2008 roku na rynek rozwiązanie, które dosłownie pozwalało uwierzytelnić urządzenia klienckie za pomocą PIN-u. Jak się kilka lat później okazało, wprowadzili tym samym rozwiązanie, które przypominało wbudowanie w mur obok okutej stalą bramy lichych drzwi ze sklejki.

Założenia były… nie, nie powiemy, że dobre. Założenia były ciekawe. Użytkownikom przeróżnych niekomputerowych urządzeń podłączanych do domowego Wi-Fi niełatwo jest wpisać często losową nazwę punktu dostępowego (SSID) i silne (tzn. długie i skomplikowane) hasło WPA/WPA2. Nikt oczywiście nie myślał o zupełnie nowym mechanizmie zabezpieczeń, były to zresztą czasy, gdy ataki siłowe stanowiły co najwyżej ciekawostkę. Chodziło raczej o wymyślenie metody, która pozwoliłaby automatycznie przekazać dane dostępowe do łączącego się z punktem dostępowym urządzenia.

Nowy protokół, który otrzymał nazwę Wireless Protected Setup, umożliwiał to w praktyce na dwa sposoby – w paśmie i poza pasmem. Ten pierwszy polega na wykorzystaniu sieci radiowej 802.11 z wykorzystaniem protokołu EAP, ten drugi wykorzystywał nośniki USB lub połączenia radiowe NFC, i w praktyce nie znalazł zastosowania. Na czym polega więc przekazanie po WPS konfiguracji w paśmie? Łączące się urządzenia wymieniają między sobą klucze, wykorzystując algorytm Diffiego-Hellmana. Uwierzytelnienie polega na przekazaniu ośmiocyfrowego PIN-u znanego urządzeniu uwierzytelniającemu (routerowi), które wprowadzić należy na urządzeniu uwierzytelnianym. Jako że jednak i wpisanie PIN-u mogłoby być za trudne dla przeciętnego użytkownika, zdecydowano się na na jeszcze prostszą metodę, czyli możliwość uwierzytelnienia klienta poprzez naciśnięcie guzika na routerze (tzw. PBC, Push-Button-Connect). Jest ona specyficznym wykorzystaniem uwierzytelnienia za pomocą PIN-u.

r   e   k   l   a   m   a

PIN nie tak bezpieczny jak PSK

Przyjrzyjmy się bliżej temu, co dzieje się w wypadku próby uwierzytelnienia za pomocą PIN-u. Na punkcie dostępowym znajdziemy zwykle gdzieś pod spodem nalepkę z ciągiem ośmiu cyfr. Użytkownik musi odczytać ten ciąg i przepisać go w interfejsie swojego obsługującego WPS urządzenia. Wychodzi się tu z (kontrowersyjnego nieco) założenia, że skoro możesz odczytać coś z naklejki pod routerem, to masz zapewne prawo do korzystania z utworzonej na nim sieci bezprzewodowej.

Wkrótce uznano, że nawet przepisanie ośmiu cyfr PIN-u może być zbyt skomplikowane, i zdecydowano się jeszcze bardziej uprościć całą procedurę. Na routerach pojawił się nowy przycisk, najczęściej oznaczony literkami „WPS”, którego naciśnięcie sprawia, że w punkcie dostępowym aktywowany jest na chwilę protokół WPS. W momencie aktywacji oba urządzenia – punkt dostępowy i klient – poszukują urządzeń działających w trybie konfiguracji. Gdy się wykryją, przeprowadzają taką samą jak w wypadku PIN procedurę uwierzytelnienia, z tym jednak że nie trzeba niczego wpisywać – stosowany jest domyślny PIN, składający się z ciągu „00000000”.

To co dla użytkownika jest zwykłym przepisaniem PIN-u, dla obu urządzeń jest nieco bardziej skomplikowane. Po zainicjalizowaniu sesji EAP wymieniane jest między nimi osiem wiadomości, oznaczanych jako M1-M8. Kolejno są to:

  • M1 – przesłanie przez klienta swojego klucza publicznego w algorytmie Diffiego-Hellmana,
  • M2-M3 – przesłanie w odpowiedzi przez punkt dostępowy swojego klucza publicznego w algorytmie Diffiego-Hellmana,
  • M4-M5 – udowodnienie przez klienta posiadania poprawnych pierwszych czterech cyfr PIN-u i uzyskanie potwierdzenia od routera,
  • M6-M7 – udowodnienie przez klienta posiadania poprawnych ostatnich czterech cyfr PIN-u i uzyskanie potwierdzenia od routera z wysłaniem konfiguracji sieci,
  • M8 – przyznanie klientowi dostępu do sieci

Oczywiście by dojść do M8, poprzednie etapy muszą być wykonane poprawne. W przeciwnym wypadku punkt dostępowy wysyła wiadomość EAP-NACK (Negative-Acknowledgement). Powinien też po określonej liczbie niepoprawnych prób wyłączyć na pewien czas protokół WPS. Powinien, choć zwykle tego nie robi – niestety w większości tanich urządzeń sieciowych z jakiegoś powodu WPS zaimplementowano „po łebkach” – i albo w ogóle takiego mechanizmu licznika tam nie ma, albo on nie działa, pozwalając na nieograniczoną liczbę prób ataku siłowego online.

Ile zaś takich prób trzeba przeprowadzić, by siłowo złamać PIN? Skoro składa się on z ośmiu cyfr dziesiętnych, to liczba kombinacji wynosi 108 – sto milionów. To wciąż bardzo dużo, nawet gdyby testować jeden PIN na sekundę, sprawdzenie całej przestrzeni możliwych ciągów zajęłoby ponad trzy lata. W rzeczywistości jednak wystarczy kilka godzin. Co poszło nie tak?

O różnicy między sumą a iloczynem

W 2011 roku bezpieczeństwem sieci bezprzewodowych zatrzęsła praca Stefana Viehböcka pt. Brute forcing Wi-Fi Protected Setup: When poor design meets poor implementation. Aż dziw, że zajęło to tyle czasu – wystarczyło się w sumie wczytać w specyfikację protokołu, by zauważyć, że jest on po prostu tragicznie nieprzemyślany.

Po pierwsze, w wykorzystywanym PIN-ie ósma cyfra jest zdeterminowana – stanowi sumę kontrolną poprzednich siedmiu cyfr. Wprowadzono ją po to, by do routera nie był wysyłany niepoprawnie wprowadzony w urządzeniu PIN (ponieważ zwykły użytkownik mógłby nie umieć wpisać kolejnych ośmiu cyfr). To jednak oznacza, że liczba kombinacji spada z 108 do 107, ostatnią cyfrę możemy sobie wyliczyć z wzoru.

Algorytm na wyliczenie ósmej cyfry PIN-u WPS jest bardzo prosty. Zakładając, że PIN jest zapisany jako A1A2A3A4A5A6A7A8,

  1. Wyliczamy sumę wszystkich cyfr z nieparzystych miejsc pomnożonych przez trzy (A1×3+A3×3+A5×3+A7×3).
  2. Wyliczamy sumę wszystkich cyfr z miejsc parzystych (A2+A4+A6)
  3. Dodajemy do siebie sumy z kroku 1. i 2.
  4. Bierzemy ostatnią cyfrę z uzyskanego wyniku i odejmujemy ją od 10 – wynik jest cyfrą kontrolną (A8).

10 milionów kombinacji to wciąż jednak za dużo, jak na siłowy atak online. Jak jednak zobaczyliśmy, weryfikacja PIN-u przebiega dwuetapowo. Wpierw sprawdzana jest znajomość czterech jego pierwszych cyfr, jeśli wynik okaże się poprawny, sprawdzana jest znajomość trzech ostatnich. Oznacza to, że wcale nie sprawdzamy 107 kombinacji, ale w najgorszym razie w pierwszym etapie 104 , a w drugim 103 – tj. raptem 11 tysięcy kombinacji. Dla tej wielkości atak siłowy online jest już całkiem trywialny. Zakładając po sekundzie na próbę, sprawdzimy całą przestrzeń możliwych PIN-ów w ciągu nieco ponad trzech godzin.

Aż trudno sobie wyobrazić, jak to się stało, że projektanci protokołu WPS nie byli w stanie zauważyć tej drobnej, a kolosalnej w skutkach konsekwencji zastąpienia mnożenia dodawaniem – i że potem nie zauważyli tego wszyscy ci, którzy zajmowali się przez kilka lat jego implementacją. Wkrótce po opublikowaniu pracy Viehböcka zaczęto w niektórych routerach modyfikować firmware tak, by wyłączyć sprawdzanie ostatniej cyfry, ale w sumie niewiele to zmienia – ot zwiększa liczbę kombinacji z 11 do 20 tysięcy.

By jeszcze bardziej pogorszyć sytuację, niektórzy producenci routerów wpadli na pomysł, by generować PIN… z adresu MAC urządzenia (które przecież każdy może odczytać, skanując sieć). To częsta sytuacja w tych urządzeniach, które w ten sposób generują sobie unikatową, domyślną nazwę sieci (SSID). Zainteresowanych szczegółami zapraszamy do bloga /dev/ttys0, w którym przedstawiono algorytmy wyliczania PIN-u w popularnych modelach routerów D-Linka i Belkina.

Reaver: siłowy atak online

Do ataku na WPS napastnik nie musi mieć żadnego potężnego klastra kart graficznych, na dobrą sprawę może wykorzystać nawet tanie jednopłytkowe komputerki, takie jak Raspberry Pi 2. Taki właśnie sprzęt wykorzystaliśmy na potrzeby tego artykułu. Atakowany był router D-Link GO-RT-N150, proste urządzenie z domyślnie włączonym WPS-em, bardzo popularne z racji swojej niskiej ceny (nowy egzemplarz dostaniemy za ok. 50 zł) i całkiem dobrego sygnału.

Na Malince (z podłączonym modułem USB Wi-Fi obsługującym tryb monitorowania) uruchomiliśmy Kali Linuksa, zawierającego już preinstalowane niezbędne pakiety podstawowego narzędzia do ataków, Reavera. Znajdziemy go także w repozytoriach wielu innych dystrybucji, można też skompilować go sobie samodzielnie, ale Kali dostarcza nam narzędzia od razu gotowego do pracy.

Zaczynamy od przełączenia Wi-Fi w tryb monitorowania, poleceniem airmon-ng start [nazwa interfejsu]. Jeśli przeszkadzają jakieś procesy, należy zabić je poleceniem kill [numer procesu] i ponowić poprzednie polecenie. Zdarza się, że Reaver może mieć problemy z uzyskaniem dostępu do urządzenia sieciowego, pomaga uruchomienie na chwilę narzędzia airodump, poleceniem airodump-ng [nazwa interfejsu w trybie monitorowania – np. wlan0mon].

Teraz sprawdzimy listę sieci w otoczeniu, których punkty dostępowe mają włączone WPS. W pakiecie Reavera dostajemy do tego programik wash. Uruchamiamy go poleceniem wash -i [nazwa interfejsu w trybie monitorowania] -s -C. Opcja -s uruchamia skanowanie, opcja -C pozwala na zignorowanie komunikatów o niepoprawnych sumach kontrolnych pakietów.

Wynikiem działania programu jest lista, zawierająca adresy MAC punktów dostępowych, kanały pracy, siłę sygnału, wersję protokołu WPS, stan zabezpieczenia WPS (Locked) i nazwę sieci bezprzewodowej. Celem będzie TakaSobieSiecWPS, utworzona na wspomnianym routerze. Po zapisaniu jej adresu MAC można przystąpić do ataku. Reavera uruchamiamy poleceniem reaver -i [nazwa interfejsu w trybie monitorowania] -b [adres MAC routera] -c [kanał] -d 0 --dh-small -vv. Parametr d oznacza długość przerw między poszczególnymi próbami PIN (w tym wypadku zero, brak przerw), flaga dh-small użycie mniejszych kluczy Diffiego-Hellmana, by przyspieszyć atak, zaś vv to tryb verbose, czyli wyświetlanie wszystkich informacji o ataku.

Reaver ma tę zaletę, że pamięta stan ataku na daną sieć, czyli które wartości PIN już sprawdził, zaczyna też test od popularnych PIN-ów (takich jak 12345670, 00005678, 01230000 itp.) co pozwala w wielu wypadkach uczynić atak błyskawicznym. Pozwala też na sfałszowanie adresu MAC karty sieciowej – z wykorzystaniem parametru --mac. Ze wszystkimi opcjami Reavera możecie zapoznać się tutaj.

W trakcie swojej pracy Reaver będzie podawał informacje o kolejnych PIN-ach i stanie wymiany wiadomości M1-M4, zwykle kończących się komunikatem NACK. Po odebraniu pewnej liczby NACK-ów możemy otrzymać ostrzeżenie, że punkt dostępowy wyłączył WPS. Wówczas program będzie oczekiwał 60 sekund, by kontynuować atak. Jeśli nie chce tego zrobić, możemy wymusić ignorowanie blokady za pomocą flagi -L.

Po utrafieniu pierwszej części PIN-u, Reaver przechodzi do wymiany komunikatów M5-M6. Teraz już pójdzie szybko – po otrzymaniu wiadomości M7 dostajemy wszystkie informacje o sieci, wraz z kluczem WPS PSK.

Ciekawą alternatywą dla Reavera może być Bully. Narzędzie to, dostępne w Kali po zainstalowaniu (apt-get install bully) jest w założeniu bardzo podobne do omówionego, ale działa nieco sprawniej, przy mniejszym obciążeniu procesora i wieloma ciekawymi opcjami. Jego dokumentację znajdziecie na GitHubie.

Zabezpieczenia? Wyłącz WPS

W praktyce nie ma żadnej metody na uchronienie się przed zaprezentowanym atakiem – nawet jeśli router włącza blokadę WPS po pewnej liczbie nieudanych prób, dla cierpliwego napastnika, który może sobie pozwolić na przeprowadzenie trwającego kilka dni ataku nie stanowi to żadnej przeszkody. Co gorsze, w wielu wypadkach wcale nie trzeba tyle czekać. W 2014 roku szwajcarski haker Dominique Bongard przedstawił atak Pixie Dust („magiczny pył”), który wykorzystując słabości w generatorze liczb pseudolosowych, wykorzystywanych podczas szyfrowania wiadomości M3, pozwala zaatakować PIN offline, co w praktyce skraca czas ataku do kilku minut. W następnym odcinku cyklu Ofensywne Bezpieczeństwo przedstawimy ten atak bardziej szczegółowo.

Jedyne, co możemy więc Wam polecić, to jak najszybciej wyłączyć WPS w ustawieniach routera, z którego korzystacie. Jeśli jest to niemożliwe (są tanie modele, w których nie ma takiej opcji), można spróbować sięgnąć po alternatywne firmware, takie jak OpenWRT lub DD-WRT. Jeśli zaś i to jest niemożliwe (urządzenie jest zbyt słabe, nie ma dla niego żadnego lepszego oprogramowania) – pozostaje router wyrzucić i kupić coś lepszego.

© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.