Wstęp:
O ile łamanie kluczy WEP jest stosunkowo popularna czynnością (sporo filmów na ten temat dostępnych jest na YouTube), bo przynoszącą wymierne korzyści - czyt. dostęp do słabo zabezpieczonego łącza, o tyle nie spotkałem się jeszcze z opisem metodologii łamania zabezpieczenia WPA/WPA2 PSK z szyfrowaniem TKIP. W tamtym roku zrobiło sie głośno po udostępnieniu przez 2 Japończyków dokumentacji nt. łamania WPA w 15min, a po udoskonaleniu metody nawet w minutę. Jednak jak się okazało nie chodziło o pełne złamanie zabezpieczenia co zaowocowałoby dostępem do sieci bezprzewodowej ofiary. Panowie, wykorzystując błędy w QoS (czyli router musi mieć włączoną funkcje WMM) wstrzykiwali pakiety do wybranej sieci WLAN (ograniczenie wielkości pakietu to ok 8kB).
Atak słownikowy pozostaje wciąż jedyną metodą (jak na razie) złamania hasła. I właśnie ten temat będę starał się przybliżyć szerszej publiczności.
Ostatnimi czasy powstało dość sporo serwisów umożliwiających złamanie
hasła WPA za niewielką opłatą: http://ph33rbot.com/wpa-password-cracker/ czy opisywany na łamach OpenLinksys: http://www.wpacracker.com/ .
Prawda jest jednak taka, że owe serwisy mają już z góry przygotowane słowniki z najpopularniejszymi hasłami (angielskimi) w routerach, więc szansa, że płacąc za usługę wyrzucimy pieniądze w błoto jest bliska 100%
W internecie znajdziemy też tablice tęczowe przygotowanye specjalnie pod łamanie kluczy WPA, jednak ich skuteczność jest mizerna, a czasochłonność duża.
Dlaczego to jest tak czasochłonne?
Największym problemem przy ataku brut-force jest jak zwykle moc obliczeniowa. Potrzebujemy jej głównie przy dodawaniu do SSID hasha PMK. Na obecnych maszynach wydajność hashowania to około 3000 PMK/s co jest wartością zupełnie niewystarczającą aby w relatywnie krótkim czasie złamać klucz WPA.
Aby zminimalizować czas obliczeń możemy podjąć następujące kroki:
- stworzyć własny słownik, który będzie lepiej dopasowany do naszych potrzeb.
- wykorzystać do obliczeń kartę graficzną, która ma znacznie większą wydajność przy obliczaniu PMK niż sam procesor.
- wykonywać obliczenia na kilkunastu, kilkudziesięciu komputerach na raz - tak zwane Cloud Computing.
Dlatego całym procederem zajmiemy się od podszewki. Sami wygenerujemy odpowiedni słownik, zatrudnimy do obliczeń karty graficzne w komputerze a ostatecznie do obliczeń wykorzystamy kilka komputerów.
By zacząć zabawę potrzebujemy kilku rzeczy:
- najlepiej 100 komputerów wyposażonych w najmocniejsze karty graficzne NVIDI czy AMD.
- Komputerów kontrolowanych przez system Linux
- Handshake'a - czyli przechwyconych odpowiednich pakietów odpowiedzialnych za autoryzacje w sieci WIFI korzystającej z szyfrowania WPA-PSK TKIP.
- Programów: Aircrack-ng, Pyrit, Crunch, Cowpaty (nie jest obowiązkowy), WireShark
Do dzieła:
Na poczatek potrzebujemy przechwycic handshake'a. Do tej czynnosci wykorzystałem router na OpenWrt z zainstalowany Aircrackie'm. Mozna użyc także komputera z zainstalowanym linuxem (np. Slitaz Live CD - ktory ma spatchowane odpowiednio drivery do wstrzykiwania pakietów oraz standardowo zainstalowany pakiet Aircrack - http://download.aircrack-ng.org/slitaz-aircrack-ng-20091124.iso )
W przypadku routera musimy sobie taki pakiet zainstalować sami:
sprawdzamy czy mamy wystarczającą ilość miejsca na routerze
Cytat
df -h
Aircrack-ng potrzebuje ponad 1 MB wolnej przestrzeni.
Instalacja:
Cytat
opkg update
opkg install aircrack-ng
Standardowo przechodzimy w tryb nasłuchu (w zależnosci jakich driverow uzywamy w komendzie nalezy zmienic nazwe interfejsu bezprzewodowego).
Cytat
root@OpenWrt:~# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth0.0 no wireless extensions.
eth0.1 no wireless extensions.
br-lan no wireless extensions.
wlan0 IEEE 802.11bg Mode:Managed Access Point: Not-Associated
Tx-Power=0 dBm
RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
w zaprezentowanym przypadku jest to wlan0 - czyli ten interfejs przełączymy w tryb nasłuchu:
Czas zacząć przechwytywać pakiety na konkretnym kanale i czekac na handshek'a (kolekcjonowanie handshek'a można przyspieszyć w momencie gdy do AP podpiety jest klient wykorzystując do tego aireplay-ng -0 2 -a MAC_AP -c MAC_CLIENT mon0 )
-c - określa kanał nasłuchu (w przypadku niepodania tego parametru radio będzie skakało po kanałach co uniemożliwi nam przechwycenie handsheka)
-a - filtrowanie pokazujące tylko podłączonych klientow.
-w - zapisywanie do pliku
--encrpt - wybór rodzaju szyforwania sieci bezprzewodowej (opcjonalne)
--bbsid - MAC nadajnika w celu filtracji pakietów.
W górnym, prawym rogu w momencie przechwycenia parowania zostanie
wyświetlone :
Aby faktycznie przechwycić cały handshak'e prawdopodobnie będzie trzeba powtorzyć operację (zależne od siły sygnału). Przekonamy się o tym uruchamiając WireShark (dostępny w repozytorium prawie każdego linuxa oraz pod windows).
1. Otwieramy plik z przechwyconym parowaniem:
2. W polu Filters wprowadzamy "EAPOL" (rodzaj pakietu odpowiedzialny za handshake)
3. Sprawdzamy czy są wszystkie 4 pakiety EAPOL jeden po drugim ( nie licząc pakietow potwierdzających sukces transmisji). Transmitowane naprzemiennie raz z jednego (pierwszy pakiet powinien pochodzić z AP) raz z drugiego urządzenia. Dodatkowo pakiety muszą pochodzić z tego samego parowania, czyli musimy sprawdzić jeszcze 3 rzeczy:
- Replay Counter musi mieć tą samą wartość w pakietach (EAPOL) 1 i 2 oraz w 3 i 4
- Nounce musi mieć tą samą wartość w pakietach 1 i 3.
4.
Do wyszukanych pakietów EAPOL musimy dodać pakiet odpowiedzialny za rozgłaszanie SSID (beacon). Istotną sprawą jest aby SN pakietu z SSIDem miało mniejszą wartość od pozostałych pakietów. (na obrazku specjalnie został dobrany zły beacon bo jego wartość to 3268 a powinna być mniejsza niż 1700)
5. Dołączamy 6 (po 2 pakiety na operacjie -klient pyta, a AP odpowiada) pakietów odpowiedzialnych za wyszukiwanie AP (probe), autentykacje (authentycation) i skojarzenie (association).
6.
Na koniec dodajemy pakiety przesyłane już po wymianie kluczy (EAPOL)
i sprawdzamy czy występuje w nich parametr TKIP. (w przykładzie dodałem akurat 2 pakiety, ale nie są wymagane)
Jeżeli w przechwyconych pakietach znaleźliśmy wszystkie wyżej wymienione należy (korzystając z funkcji "mark") zaznaczyć interesujące nas pakiety i zapisać je do nowego pliku.
Gdy już mamy prawidłowy HandShake oraz znamy SSID naszej ofiary możemy przystąpić do dalszych czynności.
Analizujac hasła Netii wiemy, że składają się z 13 znaków (sporo), że występują w nich małe i wielkie litery oraz cyfry - daje to razem 62 znaki.
Dodatkowym założeniem jest, że mamy do czynienia z takimi permutacjami, że te same znaki nie występują obok siebie. Daje to nam
62*(61^12) możliwości. Sprawdzenie ich wszystkich zajmie "kilka" ładnych lat :P. Na potrzeby artykułu ograniczymy generowany słownik tylko do liter, które znajdują się w haśle oraz wszystkich cyfr.
info: Netia zawsze dodaje do swojego SSID 4 ostatnie wartości MAC adresu routera przez co nie można zastosować wcześniej przygotowanego ogólnego słownika (jak to mozna zrobic np z SSID: default, linksys, dlink) z przeliczonymi kluczami PMK.
Instalacja i zastosowanie
Do wygenerowania słownika może posłużyć nam sławny JTR albo mały skrypt Crunch w wersji 1.8 ( http://mac.softpedia.com/get/Utilities/crunch.shtml ). Nie ma sensu zapisywanie wszystkich wartości do pliku, będziemy je zatem wpompowywać bezpośrednio do Pyrit'a (http://code.google.com/p/pyrit/). Do obliczeń można wykorzystać jeszcze CowPatty co pozwoli nam na liczenie bez konieczności zapisywania czegokolwiek. Ma to wady: w momencie przerwania operacji zaczynamy wszystko od nowa oraz nie możemy wykonywać obliczeń w chmurze.
Crunch jest skryptem więc wystarczy, że go wypakujemy.
W przypadku Pyrita sprawa jest bardziej skomplikowana gdyż jest napisany w pythonie, a dostępne są tylko źródła.
Na dobry początek całego procesu instalacji warto się upewnić, że mamy już zainstalowane sterowniki do naszej karty graficznej (instalacja w Ubuntu jest tak prosta jak w Windowsie - dlatego ją pominę)
Aby móc skompilować Pyrita potrzebujemy zainstalować odpowiednie biblioteki oraz kompilator:
Wchodzimy do katalogu Pyrit i przystępujemy do kompilacji:
Cytat
python setup.py build
Cytat
sudo python setup.py install
Jeżeli wszystko przebiegnie prawidłowo możemy odpalić Pyrit'a z terminala.
Pozostało nam jeszcze dorzucenie obsługi karty graficznej (w moim przypadku to karty NVIDI).
Ściągamy Cuda-Toolkit ze strony Nvidi http://www.nvidia.com/object/cuda_get.html (wybieramy jako system Linux Ubuntu 9.04) i instalujemy poprzez uruchomienie pliku .run, Wchodzimy do folderu /pyrit/CPyrit-CUDA :
Cytat
python setup.py build
Cytat
sudo python setup.py install
Sprawdzamy czy wszystko działa jak powinno:
Cytat
pyrit list_cores
Cytat
root@OpenWrt:~$ pyrit list_cores
Pyrit 0.2.5-dev (svn r207) (C) 2008-2010 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1: 'CPU-Core (SSE2)'
#2: 'CPU-Core (SSE2)'
#3: 'CPU-Core (SSE2)'
#4: 'CPU-Core (SSE2)'
#5: 'Network-Clients'
Polecenie powinno wylistować dostępne urządzenia, które zostaną wykorzystane do obliczeń (karta graficzna występuje zamiennie z 1 rdzeniem procesora). Sprawdźmy jeszcze czy nie występują błędy przy obliczeniach (zdarza się w przypadku zbyt mocno podkręconego lub niestabilnego sprzętu):
Cytat
pyrit selftest
W końcu mamy zainstalowane i działające wszystkie komponenty i możemy przystąpić do wykonywania obliczeń:
Crunch
Przykładową składnie otrzymamy po odpaleniu skryptu:
ale można podać też własne znaki przy generowaniu słownika - następny przykład
Zostanie wygenerowany plik wordlist.txt z wyrazami mającymi minimum 8 i maximum 13 znaków (tych podanych). Mnie interesowało konkretnie coś takiego:
Cytat
./crunch 13 13 abcDEF0123456789 -p
generujemy hasła trzynastoliterowe z wykorzystaniem wymienionych znaków. -p odpowiada za permutacje:
Cytat
./crunch 3 3 abc - dałoby nam 27 wyników (3x3x3):
./crunch 3 3 abc -p - da nam to 6 wyników (3! = 3x2x1) abc, acb, bac, bca, cab, cba
info: zauważcie, że Crunch pozwala na generowanie haseł ze wcześniej określonymi znakami w konkretnym miejscu w haśle.
Pyrit
Najpierw musimy dodać SSID co do którego mamy niecne zamiary:
pomijamy tu tworzenie słownika - zamiast tego w programie pyrit tworzymy baze danych z przeliczonymi hasłami z hashem PMK (pamiętaj o wprowadzeniu SSID przed tą operacją)
info: nowa opcja import_unique_passwords znacznie przyspiesza dodawanie nowych haseł - nie sprawdza ona czy takie samo hasło występuje już w naszej bazie... co przy generowanym przez nas słowniku nie ma prawa zajść.
Aby rozpocząć liczenie wpisujemy:
Cytat
pyrit -e "NETIA-xxxx" -r /home/HandShake batch
jak wszystko poszło dobrze i mieliśmy wystarczająco cierpliwości to otrzymamy nasz upragniony klucz WPA - np: Da47Fac1527cE
Zdaję sobie sprawę, że być może łatwiej byłoby rozpracować algorytm powstawania haseł na routerach Netii niż złamać takie hasło ( z reguły w tego typu rozwiązaniach na podstawie MAC adresu i Serialu generuje sie hash np. MD5 i jego fragmenty wykorzystuje jako hasło), jednak do tego potrzeba danych z przynajmniej 4-5 routerów. Dodatkowo artykuł miał na celu przybliżyć arkana samej sztuki niż rzeczywiste włamywanie się do sieci bezprzewodowej.
W przypadku gdy mamy kilka komputerów spietych w sieci i chcemy je wykorzystać przy obliczeniach trzeba pyrita uruchomic w roli serwera ( IP: 192.168.0.1) słownika:
Cytat
pyrit relay
Na komputerach klienckich:
Cytat
pyrit serve
Teraz na serwerze należy wyedytować /.pyrit/config dodając klientów w rpc_knownclients =
na końcu uruchomić proces spinający wszystko razem:
Cytat
pyrit -u http://192.168.0.1:17934 batch
oczywiście serwer plików można pominąć gdy baza PMK znajduję się na serwerze głównym
info: aby pyrit działał prawidłowo w roli klienta/serwera nalezy otworzyć port 17934, 17935 (niektore zródła podaja, że 19935 - po prostu otworzyłem wszystkie 3). Dodatkowo wymagany jest minimalny transfer 300kB/s na komputer. Jeżeli łącze nie będzie wyrabiać mogą pojawić sie błędy. Wynika to z faktu, że implementacja obsługi sieci w pyricie jest w fazie alpha.
Pozostaje mi tylko życzyć powodzenia i wielu sukcesów w łamaniu haseł WPA.
Edytowany przez p1vo dnia 22-01-2010 23:52
· Łącznie użytkowników: 24,115 · Najnowszy użytkownik: Ja
Czat
Musisz się zalogować, aby opublikować wiadomość.
Maniek91PL
06-11-2024 22:37
dzięki !
maxikaaz
29-10-2024 14:27
@Maniek91PL - Administration=> Admin Access, i tam masz "Allow Wireless Access" do zaznaczenia
Maniek91PL
26-10-2024 22:07
siemka! ktoś przypomni co się ustawiało jeśli nie mogę wejść od strony wifi do tomato? od lan działa
overflow2
04-10-2024 17:34
Kupowałem Asusy n10u albo n12d1 ale nie widzę ich, chyba już nie produkują, Chodzi o coś nowego i taniego. Transfery niewielkie.
maxikaaz
04-10-2024 09:38
@overflow2 patrząc po dostępności funkcji w nowych kompilacjach, to chyba nawet WRT54G/GL jeszcze ma OpenVPN, albo jakiś odpowiednik... zależy, na jakie transfery liczysz.
overflow2
30-09-2024 20:53
Jaki aktualnie najtańszy router do tomato do openvpn?
maxikaaz
27-07-2024 15:07
@servee - na początek router do rozebrania i obejrzenia, ciężko wróżyć tak tylko po objawach
maxikaaz
27-07-2024 14:55
@servee - cały kontroler nie pada tak sobie z powodu "zbiegu okoliczności", więc prawdopodobnie gdzieś przepięcie.
servee
25-07-2024 13:33
@maxikaaz: działało, aż pewnego pięknego dnia przestało działać. W tym dniu była też burza, ale to raczej zbieg okoliczności.
maxikaaz
25-07-2024 11:38
@servee - o ile problem jest w obrębie samych wyjść (dławiki, warystory), to naprawialne, ale jeśli w samym SoC - to nienaprawialne ze względu na koszta. A co było przyczyną?