Ataki na Wi‑Fi: narzędzia, które złamią nie tylko WEP, ale też WPA/WPA2
W poprzednimodcinku cyklu poświęconemu ofensywnemu bezpieczeństwu Wi-Finauczyliśmy się przechwytywać pakiety wykorzystywanej w WPA/WPA2wstępnej komunikacji między klientem a punktem dostępowym, tzw.4-way handshake. Posiadając te dane, możemy zgadnąćklucz PSK do sieci, sprawdzając, czy wygenerowane z niego klucze PMKi PTK się zgadzają z tym, co uzyskać można z haseł zgromadzonychw słowniku. By to zrobić, trzeba dysponować sporą mocąobliczeniową. Jak zobaczycie, dziś moc taka dostępna jest dlakażdego entuzjasty, który zainwestował w odpowiednio mocną kartągraficzną.
Przygotowanie słownika
Zajmując się testami penetracyjnymi sieci bezprzewodowych dobrzejest mieć pod ręką gotowe słowniki z popularnymi hasłami.Dostosowane do polskich warunków słowniki (m.in. tworzone przezludzi z forum Bezpieka.org) znajdziecie bez większego problemu napopularnych cyberschowkach – jeśli chcecie pozyskać wszystko, cokrąży w Sieci, trzeba przygotować się na pobranie łączniekilkudziesięciu GB danych. Z drugiej strony popularny i dośćskuteczny słownik Masters Polish Collection to raptem ok. 2 GB.
Bywa jednak i tak, że napastnik może wiedzieć, że hasłoatakowanej sieci ma określone właściwości. To normalna sytuacja wwypadku routerów rozdawanych przez operatorów telekomunikacyjnychczy telewizje kablowe, często też takie hasła o określonymformacie są ustawianie domyślnie w nowych routerach. Zawsze tolepsze niż hasło password, ale z drugiej strony pozwalaprzygotować napastnikowi słownik specjalnie pod dany atak.
Jednym z najwygodniejszych narzędzi do tworzenia słowników zlistami haseł jest program crunch. Pozwala on wygenerować namwszystkie kombinacje, które wykorzystamy do testowania. Trzeba sięprzygotować na to, że słownik będzie sporych rozmiarów, ale teżdziś w erze terabajtowych dysków nie powinno to być wielkimproblemem.
Jego użycie jest proste, choć liczba wszystkich opcji niecoprzytłacza. Warto przeczytać dokumentację (man crunch), alepokażemy przynajmniej podstawowe metody. I tak polecenie crunch 8 8ABCDEF -o slownik.txt wygeneruje nam wszystkie możliwe kombinacjeciągu złożonego ze znaków ABCDEF o długości od ośmiu do ośmiuznaków i zapisze je do pliku slownik.txt (rozmiar: 14 MB). Z koleicrunch 7 7 1234567890 -t adam@@@ -o adam.txt wygeneruje słownikzawierający siedmioznakowe hasła zaczynające się od ciągu adam ikończące trzema cyframi. Generując duże słowniki warto je odrazu skompresować, np. do gzipa – robimy to dopisując dopolecenia opcję -z gzip. Generując bardzo duże słowniki, warto jepodzielić na odrębne pliki – polecenie crunch 10 10abcdefghijklmnopqrstuvwxyz -b 1gb -o alfabet10 wygeneruje namdziesięcioznakowe hasła do kolejnych plików o rozmiarach 1 GB.
Innym narzędziem, które często jest wykorzystywane dogenerowania takich list haseł, jest maskprocessor. By wygenerować wnim np. listę ośmioznakowych haseł, wykorzystujących tylko dużelitery, należy wydać polecenie maskprocessor ?u?u?u?u?u?u?u?u -olista.txt. Z czego będziecie korzystać, to już zależy tylko odWas, ale crunch wydaje się nieco szybszy.
Z motyką na słońce?
W teorii możecie wziąć się za przechwycone 4-way handshake ibez GPU, wykorzystując do tego narzędzie aircrack-ng. Wystarczymieć gotowy słownik i wydać polecenie aircrack-ng -w [nazwa plikusłownika] -b [adres MAC punktu dostępowego] [nazwa pliku zrzutuairodumpa.cap] – np. aircrack-ng -w slownik.txt -b94:0C:6D:AC:57:02 WLAN*.cap. Niekiedy, po wielu latach pracy non stopprocesora, klucz PSK zostanie znaleziony.
Jako że jednak ataki siłowe świetnie się paralelizują,zamiast męczyć procesor, wykorzystamy kartę graficzną (albojeszcze lepiej – więcej kart graficznych). To pozwala przyspieszyćatak o kilka rzędów wielkości, tak, że to czego złamaniezajmowało lata, teraz zajmie dni. W tym celu jednak konieczne jestodpowiednie przygotowanie systemu.
Kali jako klaster obliczeniowy
Wykorzystanie możliwości GPU do łamania haseł wymagazainstalowania własnościowych sterowników do karty graficznej, czyto AMD, czy Nvidii. Jako że na wykorzystywanej przez nas maszyniedysponujemy dwiema kartami Radeon HD7970, zaczniemy właśnie odsterowników AMD.
Zrobienie tego w obecnym (2.0) Kali Linuksie nastręcza niecoproblemów. Instalacja pakietów fglrx z repozytoriów obecnie raczejsię nie powiedzie. Dla porządku przedstawiamy jednak oficjalnąmetodę:
apt-get install firmware-linux-nonfree apt-get install amd-opencl-icd apt-get install linux-headers-$(uname -r) apt-get install fglrx-atieventsd fglrx-driver fglrx-control fglrx-modules-dkms -yco gorsza, nie zainstalujemy ich także za pomocą instalatoradostarczanego przez producenta. Mimo że Kali bazuje na popularnymDebianie, drobne różnice w strukturze katalogów sprawiają, żezwykłe klikanie zakończy się niepowodzeniem.
Przed uruchomieniem instalatora AMD, pobranego z oficjalnejstrony, zainstalujmy niezbędne dodatkowe pakiety
apt-get install firmware-linux-nonfree apt-get install amd-opencl-icd apt-get install linux-headers-$(uname -r) apt-get install gcc g++ make dkms fakeroot Teraz ukryjmy katalogi na 64-bitowe biblioteki, przez które pojawiają sięproblemy:
mv /usr/lib64 /usr/.lib64 mv /usr/x86_64-linux-gnu /usr/.x86_64-linux-gnuW katalogu, do którego pobrano instalator wydajemy polecenieunzip radeon-crimson-.zip. Powinniśmy otrzymać katalog fglrx-(gwiazdka oznacza numer wersji). Wchodzimy do niego poleceniem cdfglrx-* i wydajemy polecenie sudo ./amd-driver-installer-* --install.W graficznym instalatorze wybieramy standardowy proces instalacji. Pojego zakończeniu nie należy restartować komputera, leczprzeprowadzić podstawową konfigurację karty, za pomocą poleceniaaticonfig --initial. Dopiero wówczas należy zrestartować komputer.
By sprawdzić poprawność działania sterowników, wydajemypolecenie fglxinfo, a zobaczyć w praktyce akcelerację grafiki 3Dmożemy po wydaniu polecenia fgl_glxgears.
Instalacja sterowników Nvidii jest obecnie mniej kłopotliwa.Sprawdziliśmy to na karcie GeForce 750 Ti. Pakiety z repozytoriumdziałają bezbłędnie. W konsoli wydajemy więc polecenia:
apt-get install linux-headers-$(uname -r) apt-get install nvidia-kernel-dkms Następnie należy pozbyć sięotwartych sterowników nouveau, aktywowanych przez bootmanager GRUB.W tym celu wydajemy polecenia:
sed 's/quiet/quiet nouveau.modeset=0/g' -i /etc/default/grub update-grub reboot Po restarcie systemu sprawdzamy działanie karty poleceniem glxinfo,które na samym początku listy komunikatów powinno zwrócić ciągdirect rendering: Yes. Oznacza to, że dysponujemy sprzętowąakceleracją grafiki.
Z siłą tysięcy rdzeni
Oszacujmy, co potrafi nasz klaster obliczeniowy, wyposażony wdwie karty Radeon HD7970. Według benchmarka oclHashcat,wykorzystując oba GPU, testuje ponad 295 tys. kluczy na sekundę. Wośmioznakowym haśle, w którym wykorzystano duże litery, mamy doczynienia z 268, tj. ponad 208 mld kombinacji. Sprawdzenie ichwszystkich zajmie więc ok. 700 tys. sekund, tj. ponad 8 dni. Mamywięc 50% szans, że w 4 dni trafimy na właściwe hasło.
Dwie karty Radeon 7970 to oczywiście nie jest wiele dlazdeterminowanego napastnika. Stacja robocza NVIDIADIGITS, wykorzystująca cztery karty Titan X, jest w staniesprawdzić ponad 1,1 mln kluczy na sekundę, trafiając z 50%prawdopodobieństwem na właściwy klucz w ciągu jednego dnia.Podobno NSA dysponuje klastrami obliczeniowymi, które są w staniesprawdzić 3 mld kluczy na sekundę, czyli ma 50% szans, że takiehasło złamie w nieco ponad 30 sekund. Miejmy nadzieję, że naszymprzeciwnikiem nie jest NSA i sami spróbujmy zaatakować zdobyte4-way handshake.
oclhashcat i cudahashcat
Jednym z najefektywniejszych narzędzi, które można tuwykorzystać, jest oclhashcat, zmodyfikowana wersja łamacza hasełhashcat, która wykorzystuje GPU. Nie obsługuje ona jednak plików wformacie .cap, trzeba skonwertować je do formatu .hccap. W tym celuwydajemy polecenie aircrack-ng [nazwy plików źródłowych .cap] -J[nazwa pliku wyjściowego].
Uwaga: obecnie dostępna w repozytoriach systemu wersjaoclhashcata jest przestarzała i nie chce się uruchomić, zwracająckomunikat o swojej przestarzałości. Jeśli nie chcecie instalowaćaktualnej wersji ze stronyprojektu, to najprościej jest cofnąć zegar systemowy o rok czydwa.
Atak przeprowadzamy poleceniem oclhashcat -m 2500 [nazwa pliku.hccap] [nazwa pliku słownika] -o [nazwa pliku wyjściowego]--status. Flaga -m 2500 to wybór haseł WPA/WPA2, sam hashcatradzi sobie też z dziesiątkami innych typów zabezpieczonych hasłemdanych.
Uwaga: z jakiegoś powodu w Kali plik wyjściowy, który będziezawierał hasło WPA/WPA2, zapisywany jest nie do kataloguużytkownika, ale do katalogu programu – /usr/share/oclhashcat/.
Jak widać w przedstawionym tu przypadku,zabezpieczające sieć bezprzewodową proste hasło, składające sięz kombinacji ośmiu dużych liter, zostało złamane w ciągu kilkusekund.
Uwaga: użytkownicy kart Nvidii powinii skorzystać z narzędziacudahashcat, odmiany skompilowanej pod własnościowe biblioteki CUDAtej firmy. Pod względem składni cudahashcat praktycznie niczym sięnie różni od oclhashcata, korzystającego z bibliotek OpenCL.
Pyrit
Drugim niezwykle skutecznym narzędziem jest Pyrit.Preinstalowana w Kali wersja wykrywa normalnie jedynie rdzenieprocesora głównego, które niewiele nam dadzą, wymaga więcuzupełnienia o pakiet zapewniający obsługę bibliotek OpenCL.Instalujemy go poleceniem apt-get install pyrit-opencl.
Po zainstalowaniu dodatku, należy sprawdzić możliwościprogramu, wydając polecenie pyrit benchmark. Gdy zobaczymyinformacje o rdzeniach GPU, jakimi dysponujemy, można się wziąćdo ataku na posiadany plik .cap z zarejestrowanym 4-way handshake.Zaczynamy od jego analizy, wydając polecenie pyrit -r [nazwa pliku.cap] analyze.
Jeśli plik zawiera niezbędne informacje o punkcie dostępowym ikomunikujących się z nim klientach, możemy przejść dalej. Należywypełnić bazę danych pyrita hasłami z przygotowanego wcześniejsłownika. Zaawansowani mogą zmusić program do przechowywania hasełw MySQL-u, SQLite czy PostgreSQL-u, ale w tym wypadku wystarczy namdomyślny plikowy system przechowywania danych. Importujemy do niegohasła poleceniem pyrit -i [nazwa pliku słownika]import_passwords. Teraz należy jeszcze stworzyć dlacelów testu nazwę sieci, która była nasłuchiwana, poleceniempyrit -e [nazwa ESSID] create_essid. Gdy wydamy teraz polecenie pyriteval, poznamy aktualny stan przygotowań – iloma realnymi hasłamidysponujemy dla danej sieci. Program ma bowiem jedną sporą zaletę,oszczędza nasz czas, usuwając z importowanego słownika duplikaty iwszystkie te wpisy, które nie działają z WPA/WPA2-PSK.
Siłą pyrita jest możliwość przeprowadzenia wstępnychobliczeń, podczas których nazwa sieci zostanie połączona z każdymz haseł słownika, a następnie wyliczone zostaną dla nichodpowiednie klucze PMK i zgromadzone w bazie danych. Proces tenuruchamiamy poleceniem pyrit batch. Jeśli słownik jest duży, wartozostawić komputer na noc.
Gdy baza jest już gotowa, przeprowadzamy atak poleceniem pyrit -r[nazwa pliku .cap] attack_db.
Przedstawiliśmy Wam oba popularne narzędzia do łamania haseł,gdyż wbrew temu co twierdzą ich zwolennicy, nie możnajednoznacznie powiedzieć, które z nich jest lepsze. Wiele zależyod konkretnej konfiguracji sprzętowej: wydaje się, że oclhashcat(cudahashcat) jest szybszy, w sytuacji, gdy dysponujemy kilkomakartami, w konfiguracjach z jednym GPU większe możliwości maPyrit, generujący sobie tęczowe tablice, znacznie przyspieszającetesty penetracyjne, gdy mamy do czynienia z wieloma sieciami Wi-Fi otakiej samej nazwie.
WEP wciąż się zdarza
Wielu z Was pytało w listach do redakcji o kwestię WEP – czynaprawdę zabezpieczone w ten sposób sieci bezprzewodowe możnazłamać w ciągu sekund? Niestety, tak jest naprawdę, a jeśliwciąż lubicie sobie pograć na np. konsolce Nintendo DS (któraniczego poza WEP nie obsłuży), to poradzi sobie z zabezpieczeniamiWaszej sieci każdy osiedlowy script kiddie.
Przypomnijmy: WEP (Wireless Equivalent Privacy) wykorzystuje szyfrstrumieniowy RC4 (w wersji 64- i 128-bitowej) do szyfrowania danych.Szyfrogram powstaje poprzez operację XOR na danych ze strumieniemklucza. Jako że szyfry takie łatwo atakować metodamistatystycznymi, analizując zaszyfrowane tym samym kluczem dane,wprowadzono dodatkowe zabezpieczenie, wektor inicjujący (IV) – wtym wypadku każdy pakiet dostaje swoją 24-bitową liczbę, którajest składana z kluczem. Ze względu na taką strukturę, ograniczato rozmiar klucza do 10 (dla klucza 64-bitowego) lub 26 (dla klucza128-bitowego) cyfr szesnastkowych. Wiele urządzeń dopuszcza jednak zamiast ciągu szesnastkowych cyfr znakiASCII, co znacząco zmniejsza rozmiar przestrzeni możliwych kluczy.
To właśnie słabość wektora inicjującego pogrzebałazabezpieczenie WEP. Jako że IV jest zmienny, to nadawca musiprzekazać odbiorcy jego wartość w jawnej formie. Nie ma zarazemżadnej metody, która pozwoliłaby uniknąć ponownego użyciadanego IV. Pozwala to więc na poszukiwanie kolizji w której trafimyna pakiety zaszyfrowane przy użyciu tego samego wektorainicjującego. Jako że przestrzeń IV ma rozmiar zaledwie 224,to napastnikowi wystarczy zgromadzić 212 pakietów, by osiągnąć50% szans na kolizję. To naprawdę niewiele, przy połączeniu802.11b (11 Mb/s) wystarczą na to niecałe dwie sekundy.
Atak wydaje się więc łatwy – zgromadzić odpowiednią liczbęIV, a następnie przeprowadzić relatywnie proste porównaniazłożonych ze znanym IV kluczy. Ile wynosi ta „odpowiednialiczba”? Nieważne, i tak jest za mała. Okazało się bowiem, żenapastnik nie musi specjalnie martwić się małym ruchem wpodsłuchiwanej sieci. Łatwo zmusić wykorzystujące WEP urządzeniado wygenerowania bardzo szybko dużej liczby wektorów inicjujących.Technika wstrzykiwania pakietów polega na wysyłaniunieodszyfrowanych pakietów tak, by wygenerować nowe IV.Wykorzystuje się w tym celu protokół ARP, służący do translacjiadresów IP na MAC. Żądania tego protokołu często się pojawiająw sieci, mają stałe cechy, łatwo je więc przechwycić i wysłaćponownie dowolną liczbę razy. Przechwycone żądanie zostanierozgłoszone przez punkt dostępowy, otrzymując nowy wektorinicjujący. Pozostaje tylko gromadzić pakiety i czekać na kolizje.
Przyjrzyjmy się atakowi na WEP od strony praktycznej. Wpoprzedniej części kursu opisaliśmyszczegółowo, jak przełączyć kartę sieciową na trybmonitorowania i rozpocznijmy zbieranie pakietów (airmon-ng start[nazwainterfejsu]; airodump-ng -c [kanał] --bssid [adres MAC punktudostępowego] -w [nazwa pliku zrzutu] [nazwa interfejsu]).
W kolumnie #Data widzimy liczbę zebranych pakietów. Jeśli wsieci jest już klient, który komunikuje się intensywnie z punktemdostępowym, wówczas sytuacja jest prosta, szybko zbierzemywystarczającą liczbę pakietów. Jeśli jednak tak nie jest,konieczne będzie wstrzykiwanie pakietów.
Na początku należy sprawdzić, czy moduł Wi-Fi pozwala na takieoperacje (może działać w trybie monitorowania, a zarazem nieumożliwiać wstrzykiwania pakietów) – robimy to poleceniemaireplay-ng -9 -e "[nazwasieci]" -a [adres MAC punktudostępowego] [nazwa interfejsu]. Jeśli się to uda, to zmusimypunkt dostępowy do przyjęcia pakietów od naszej karty sieciowej.Wydajemy w tym celu polecenie aireplay-ng -1 0 -e "nazwasieci"-a [adres MAC punktu dostępowego] -h [adres MAC naszego modułuWi-Fi].
Jeśli rezultat będzie pozytywny, to poleceniemaireplay-ng -3 -b [adres MAC punktu dostępowego] -h [adres MACnaszego modułu Wi-Fi] [nazwa interfejsu] możemy rozpocząćnasłuchiwanie za pakietem ARP. Po jego schwytaniu rozpocznie sięwstrzykiwanie w sieć – i zobaczymy, jak liczba zebranych pakietóww kolumnie #Data szybko rośnie.
Tak czy inaczej, dysponując już kilkoma tysiącami pakietów,można rozpocząć łamanie hasła. Robimy to poleceniem aircrack-ng-s -b [adres MAC punktu dostępowego] [nazwa pliku zrzutu.cap]. Nawetna słabym procesorze łamanie zajmuje dosłownie chwilę. Jeśliliczba pakietów okazała się niewystarczająca, aircrack-ngpoinformuje nas o tym i będzie czekał, aż airodump-ng zbierzekolejną porcję. W naszym wypadku potrzeba było ok. 20 tysięcypakietów, proces łamania, włącznie z wstrzykiwaniem pakietówzajął niespełna dwie minuty. Gdyby nie trzeba było pakietówwstrzykiwać, złamanie WEP zajęłoby kilka sekund.
Warto zauważyć, że w opisanym przypadku punkt dostępowy niefiltrował klientów po adresach MAC. Nawet jeśli jednak zastosowanebyłoby takie zabezpieczenie, to jego pokonanie jest bardzo łatwe.Wystarczy nasłuchać za pomocą airodump-ng adres MAC urządzenia,które łączy się z atakowaną siecią, a następnie zmienić naniego adres swojej karty sieciowej. Nie trzeba do tego żadnychspecjalnych narzędzi, wystarczy zwykły ifconfig. Zrobić to możnapoleceniami ifconfig wlan0 down; ifconfig wlan0 hw ether [nowy adresMAC]; ifconfig wlan0 up.
Silne hasło to nie wszystko
Czy osoby mające sieci bezprzewodowe zabezpieczonekilkunastoznakowym hasłem składającym się z dużych i małychliter, cyfr i znaków niealfanumerycznych mogą spać spokojnie, nieobawiając się nawet ataków za pomocą superkomputerów NSA?Niestety nie. Wiele popularnych routerów ma domyślnie włączonymechanizm WPS (Wi-Fi Protected Setup), będący niczym innym, jaktylko jedną wielką luką, czekającą na atak. Tę właśniekwestię (i nie tylko) przedstawimy w kolejnym odcinku Ofensywnegobezpieczeństwa.