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

Ataki na Wi-Fi: narzędzia, które złamią nie tylko WEP, ale też WPA/WPA2

Strona główna AktualnościBEZPIECZEŃSTWO

W poprzednim odcinku cyklu poświęconemu ofensywnemu bezpieczeństwu Wi-Fi nauczyliśmy się przechwytywać pakiety wykorzystywanej w WPA/WPA2 wstę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 PMK i PTK się zgadzają z tym, co uzyskać można z haseł zgromadzonych w słowniku. By to zrobić, trzeba dysponować sporą mocą obliczeniową. Jak zobaczycie, dziś moc taka dostępna jest dla każdego entuzjasty, który zainwestował w odpowiednio mocną kartą graficzną.

Przygotowanie słownika

Zajmując się testami penetracyjnymi sieci bezprzewodowych dobrze jest mieć pod ręką gotowe słowniki z popularnymi hasłami. Dostosowane do polskich warunków słowniki (m.in. tworzone przez ludzi z forum Bezpieka.org) znajdziecie bez większego problemu na popularnych cyberschowkach – jeśli chcecie pozyskać wszystko, co krąży w Sieci, trzeba przygotować się na pobranie łącznie kilkudziesię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ło atakowanej sieci ma określone właściwości. To normalna sytuacja w wypadku routerów rozdawanych przez operatorów telekomunikacyjnych czy telewizje kablowe, często też takie hasła o określonym formacie są ustawianie domyślnie w nowych routerach. Zawsze to lepsze niż hasło password, ale z drugiej strony pozwala przygotować napastnikowi słownik specjalnie pod dany atak.

r   e   k   l   a   m   a

Jednym z najwygodniejszych narzędzi do tworzenia słowników z listami haseł jest program crunch. Pozwala on wygenerować nam wszystkie 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ć wielkim problemem.

Jego użycie jest proste, choć liczba wszystkich opcji nieco przytłacza. Warto przeczytać dokumentację (man crunch), ale pokażemy przynajmniej podstawowe metody. I tak polecenie crunch 8 8 ABCDEF -o slownik.txt wygeneruje nam wszystkie możliwe kombinacje ciągu złożonego ze znaków ABCDEF o długości od ośmiu do ośmiu znaków i zapisze je do pliku slownik.txt (rozmiar: 14 MB). Z kolei crunch 7 7 1234567890 -t adam@@@ -o adam.txt wygeneruje słownik zawierający siedmioznakowe hasła zaczynające się od ciągu adam i kończące trzema cyframi. Generując duże słowniki warto je od razu skompresować, np. do gzipa – robimy to dopisując do polecenia opcję -z gzip. Generując bardzo duże słowniki, warto je podzielić na odrębne pliki – polecenie crunch 10 10 abcdefghijklmnopqrstuvwxyz -b 1gb -o alfabet10 wygeneruje nam dziesięcioznakowe hasła do kolejnych plików o rozmiarach 1 GB.

Innym narzędziem, które często jest wykorzystywane do generowania takich list haseł, jest maskprocessor. By wygenerować w nim np. listę ośmioznakowych haseł, wykorzystujących tylko duże litery, należy wydać polecenie maskprocessor ?u?u?u?u?u?u?u?u -o lista.txt.

Z czego będziecie korzystać, to już zależy tylko od Was, ale crunch wydaje się nieco szybszy.

Z motyką na słońce?

W teorii możecie wziąć się za przechwycone 4-way handshake i bez GPU, wykorzystując do tego narzędzie aircrack-ng. Wystarczy mieć gotowy słownik i wydać polecenie
aircrack-ng -w [nazwa pliku słownika] -b [adres MAC punktu dostępowego] [nazwa pliku zrzutu airodumpa.cap]
– np. aircrack-ng -w slownik.txt -b 94:0C:6D:AC:57:02 WLAN*.cap. Niekiedy, po wielu latach pracy non stop procesora, klucz PSK zostanie znaleziony.

Jako że jednak ataki siłowe świetnie się paralelizują, zamiast męczyć procesor, wykorzystamy kartę graficzną (albo jeszcze lepiej – więcej kart graficznych). To pozwala przyspieszyć atak o kilka rzędów wielkości, tak, że to czego złamanie zajmowało lata, teraz zajmie dni. W tym celu jednak konieczne jest odpowiednie przygotowanie systemu.

Kali jako klaster obliczeniowy

Wykorzystanie możliwości GPU do łamania haseł wymaga zainstalowania własnościowych sterowników do karty graficznej, czy to AMD, czy Nvidii. Jako że na wykorzystywanej przez nas maszynie dysponujemy dwiema kartami Radeon HD7970, zaczniemy właśnie od sterowników AMD.

Zrobienie tego w obecnym (2.0) Kali Linuksie nastręcza nieco problemów. Instalacja pakietów fglrx z repozytoriów obecnie raczej się 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 -y

co gorsza, nie zainstalujemy ich także za pomocą instalatora dostarczanego przez producenta. Mimo że Kali bazuje na popularnym Debianie, drobne różnice w strukturze katalogów sprawiają, że zwykłe klikanie zakończy się niepowodzeniem.

Przed uruchomieniem instalatora AMD, pobranego z oficjalnej strony, 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-gnu

W katalogu, do którego pobrano instalator wydajemy polecenie unzip radeon-crimson-*.zip. Powinniśmy otrzymać katalog fglrx-* (gwiazdka oznacza numer wersji). Wchodzimy do niego poleceniem cd fglrx-* i wydajemy polecenie sudo ./amd-driver-installer-* --install. W graficznym instalatorze wybieramy standardowy proces instalacji. Po jego zakończeniu nie należy restartować komputera, lecz przeprowadzić podstawową konfigurację karty, za pomocą polecenia aticonfig --initial. Dopiero wówczas należy zrestartować komputer.

By sprawdzić poprawność działania sterowników, wydajemy polecenie fglxinfo, a zobaczyć w praktyce akcelerację grafiki 3D moż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 repozytorium dział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ąg direct rendering: Yes. Oznacza to, że dysponujemy sprzętową akceleracją grafiki.

Z siłą tysięcy rdzeni

Oszacujmy, co potrafi nasz klaster obliczeniowy, wyposażony w dwie karty Radeon HD7970. Według benchmarka oclHashcat, wykorzystując oba GPU, testuje ponad 295 tys. kluczy na sekundę. W ośmioznakowym haśle, w którym wykorzystano duże litery, mamy do czynienia z 268, tj. ponad 208 mld kombinacji. Sprawdzenie ich wszystkich zajmie więc ok. 700 tys. sekund, tj. ponad 8 dni. Mamy więc 50% szans, że w 4 dni trafimy na właściwe hasło.

Dwie karty Radeon 7970 to oczywiście nie jest wiele dla zdeterminowanego napastnika. Stacja robocza NVIDIA DIGITS, wykorzystująca cztery karty Titan X, jest w stanie sprawdzić 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 stanie sprawdzić 3 mld kluczy na sekundę, czyli ma 50% szans, że takie hasło złamie w nieco ponad 30 sekund. Miejmy nadzieję, że naszym przeciwnikiem nie jest NSA i sami spróbujmy zaatakować zdobyte 4-way handshake.

oclhashcat i cudahashcat

Jednym z najefektywniejszych narzędzi, które można tu wykorzystać, jest oclhashcat, zmodyfikowana wersja łamacza haseł hashcat, która wykorzystuje GPU. Nie obsługuje ona jednak plików w formacie .cap, trzeba skonwertować je do formatu .hccap. W tym celu wydajemy polecenie aircrack-ng [nazwy plików źródłowych .cap] -J [nazwa pliku wyjściowego].

Uwaga: obecnie dostępna w repozytoriach systemu wersja oclhashcata jest przestarzała i nie chce się uruchomić, zwracając komunikat o swojej przestarzałości. Jeśli nie chcecie instalować aktualnej wersji ze strony projektu, to najprościej jest cofnąć zegar systemowy o rok czy dwa.

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 hashcat radzi sobie też z dziesiątkami innych typów zabezpieczonych hasłem danych.

Uwaga: z jakiegoś powodu w Kali plik wyjściowy, który będzie zawierał hasło WPA/WPA2, zapisywany jest nie do katalogu uż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 kilku sekund.

Uwaga: użytkownicy kart Nvidii powinii skorzystać z narzędzia cudahashcat, odmiany skompilowanej pod własnościowe biblioteki CUDA tej 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 rdzenie procesora głównego, które niewiele nam dadzą, wymaga więc uzupeł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ści programu, wydając polecenie pyrit benchmark. Gdy zobaczymy informacje 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 i komunikujących się z nim klientach, możemy przejść dalej. Należy wypełnić bazę danych pyrita hasłami z przygotowanego wcześniej słownika. Zaawansowani mogą zmusić program do przechowywania haseł w MySQL-u, SQLite czy PostgreSQL-u, ale w tym wypadku wystarczy nam domyślny plikowy system przechowywania danych. Importujemy do niego hasła poleceniem pyrit -i [nazwa pliku słownika] import_passwords.

Teraz należy jeszcze stworzyć dla celów testu nazwę sieci, która była nasłuchiwana, poleceniem pyrit -e [nazwa ESSID] create_essid. Gdy wydamy teraz polecenie pyrit eval, poznamy aktualny stan przygotowań – iloma realnymi hasłami dysponujemy dla danej sieci. Program ma bowiem jedną sporą zaletę, oszczędza nasz czas, usuwając z importowanego słownika duplikaty i wszystkie te wpisy, które nie działają z WPA/WPA2-PSK.

Siłą pyrita jest możliwość przeprowadzenia wstępnych obliczeń, podczas których nazwa sieci zostanie połączona z każdym z haseł słownika, a następnie wyliczone zostaną dla nich odpowiednie klucze PMK i zgromadzone w bazie danych. Proces ten uruchamiamy poleceniem pyrit batch. Jeśli słownik jest duży, warto zostawić 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żna jednoznacznie powiedzieć, które z nich jest lepsze. Wiele zależy od konkretnej konfiguracji sprzętowej: wydaje się, że oclhashcat (cudahashcat) jest szybszy, w sytuacji, gdy dysponujemy kilkoma kartami, w konfiguracjach z jednym GPU większe możliwości ma Pyrit, generujący sobie tęczowe tablice, znacznie przyspieszające testy penetracyjne, gdy mamy do czynienia z wieloma sieciami Wi-Fi o takiej samej nazwie.

WEP wciąż się zdarza

Wielu z Was pytało w listach do redakcji o kwestię WEP – czy naprawdę zabezpieczone w ten sposób sieci bezprzewodowe można złamać w ciągu sekund? Niestety, tak jest naprawdę, a jeśli wciąż lubicie sobie pograć na np. konsolce Nintendo DS (która niczego poza WEP nie obsłuży), to poradzi sobie z zabezpieczeniami Waszej sieci każdy osiedlowy script kiddie.

Przypomnijmy: WEP (Wireless Equivalent Privacy) wykorzystuje szyfr strumieniowy RC4 (w wersji 64- i 128-bitowej) do szyfrowania danych. Szyfrogram powstaje poprzez operację XOR na danych ze strumieniem klucza. Jako że szyfry takie łatwo atakować metodami statystycznymi, analizując zaszyfrowane tym samym kluczem dane, wprowadzono dodatkowe zabezpieczenie, wektor inicjujący (IV) – w tym wypadku każdy pakiet dostaje swoją 24-bitową liczbę, która jest składana z kluczem. Ze względu na taką strukturę, ogranicza to rozmiar klucza do 10 (dla klucza 64-bitowego) lub 26 (dla klucza 128-bitowego) cyfr szesnastkowych. Wiele urządzeń dopuszcza jednak zamiast ciągu szesnastkowych cyfr znaki ASCII, co znacząco zmniejsza rozmiar przestrzeni możliwych kluczy.

To właśnie słabość wektora inicjującego pogrzebała zabezpieczenie WEP. Jako że IV jest zmienny, to nadawca musi przekazać odbiorcy jego wartość w jawnej formie. Nie ma zarazem żadnej metody, która pozwoliłaby uniknąć ponownego użycia danego IV. Pozwala to więc na poszukiwanie kolizji w której trafimy na pakiety zaszyfrowane przy użyciu tego samego wektora inicjują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łączeniu 802.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ównania złożonych ze znanym IV kluczy. Ile wynosi ta „odpowiednia liczba”? Nieważne, i tak jest za mała. Okazało się bowiem, że napastnik nie musi specjalnie martwić się małym ruchem w podsłuchiwanej sieci. Łatwo zmusić wykorzystujące WEP urządzenia do wygenerowania bardzo szybko dużej liczby wektorów inicjujących. Technika wstrzykiwania pakietów polega na wysyłaniu nieodszyfrowanych pakietów tak, by wygenerować nowe IV. Wykorzystuje się w tym celu protokół ARP, służący do translacji adresó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 zostanie rozgłoszone przez punkt dostępowy, otrzymując nowy wektor inicjujący. Pozostaje tylko gromadzić pakiety i czekać na kolizje.

Przyjrzyjmy się atakowi na WEP od strony praktycznej. W poprzedniej części kursu opisaliśmy szczegółowo, jak przełączyć kartę sieciową na tryb monitorowania i rozpocznijmy zbieranie pakietów (airmon-ng start [nazwainterfejsu]; airodump-ng -c [kanał] --bssid [adres MAC punktu dostępowego] -w [nazwa pliku zrzutu] [nazwa interfejsu]).

W kolumnie #Data widzimy liczbę zebranych pakietów. Jeśli w sieci jest już klient, który komunikuje się intensywnie z punktem dostępowym, wówczas sytuacja jest prosta, szybko zbierzemy wystarczają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 takie operacje (może działać w trybie monitorowania, a zarazem nie umożliwiać wstrzykiwania pakietów) – robimy to poleceniem aireplay-ng -9 -e "[nazwasieci]" -a [adres MAC punktu dostępowego] [nazwa interfejsu]. Jeśli się to uda, to zmusimy punkt 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łu Wi-Fi].

Jeśli rezultat będzie pozytywny, to poleceniem aireplay-ng -3 -b [adres MAC punktu dostępowego] -h [adres MAC naszego 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ów w 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]. Nawet na słabym procesorze łamanie zajmuje dosłownie chwilę. Jeśli liczba pakietów okazała się niewystarczająca, aircrack-ng poinformuje nas o tym i będzie czekał, aż airodump-ng zbierze kolejną porcję. W naszym wypadku potrzeba było ok. 20 tysięcy pakietów, proces łamania, włącznie z wstrzykiwaniem pakietów zajął niespełna dwie minuty. Gdyby nie trzeba było pakietów wstrzykiwać, złamanie WEP zajęłoby kilka sekund.

Warto zauważyć, że w opisanym przypadku punkt dostępowy nie filtrował klientów po adresach MAC. Nawet jeśli jednak zastosowane był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ć na niego adres swojej karty sieciowej. Nie trzeba do tego żadnych specjalnych narzędzi, wystarczy zwykły ifconfig. Zrobić to można poleceniami ifconfig wlan0 down; ifconfig wlan0 hw ether [nowy adres MAC]; ifconfig wlan0 up.

Silne hasło to nie wszystko

Czy osoby mające sieci bezprzewodowe zabezpieczone kilkunastoznakowym hasłem składającym się z dużych i małych liter, cyfr i znaków niealfanumerycznych mogą spać spokojnie, nie obawiając się nawet ataków za pomocą superkomputerów NSA? Niestety nie. Wiele popularnych routerów ma domyślnie włączony mechanizm WPS (Wi-Fi Protected Setup), będący niczym innym, jak tylko jedną wielką luką, czekającą na atak. Tę właśnie kwestię (i nie tylko) przedstawimy w kolejnym odcinku Ofensywnego bezpieczeństwa.

© 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.