Bezpieczeństwo Wi-Fi czyli łamanie haseł sieci opartych o urządzenia TP-Link

Dzisiejszy tekst dotyczy bezpieczeństwa sieci bezprzewodowych standardu 802.11, czyli dobrze znanych nam sieci Wi-Fi. Na warsztat weźmiemy jednego z najpopularniejszych dostawców domowych (i nie tylko) routerów Wi-Fi, które są powszechnie wykorzystywane z domyślnymi ustawieniami. Czemu domyślne ustawienia są złe? Czemu domyślne ustawienia akurat tego producenta są złe? Zapraszam na kolejny wpis na blogu.

Routery Wi-Fi TP-Link i konwencja haseł

Swego czasu zakupiłem do testów router Wi-Fi firmy TP-Link Archer C50 1200. Domyślne hasło do mojej sieci było 8-znakowym ciągiem cyfr. Po krótkim reserachu w Internecie oraz wśród znajomych okazało się, że to nie przypadek – TP-Link używa takich domyślnych haseł na swoich urządzeniach.

Rys. 0 Tabliczka znamionowa zakupionego sprzętu

8-znakowe hasło składające się z samych cyfr daje nam 10^8, czyli 100 000 000 kombinacji, co nie wydaje się dużą liczbą zważywszy na możliwość wykonania ataku offline oraz niską złożoność algorytmu HMAC-SHA1. Algorytm HMAC-SHA1 jest wykorzystywany podczas generowania klucza PTK, który z kolei przy pomocy algorytmu AES szyfruje kanał komunikacji między klientem a Access Pointem. Za udostępnienie informacji niezbędnych do wygenerowania klucza PTK odpowiedzialny jest protokół EAPOL.

Cały proces ustalania klucza PTK nazywa się 4 way handshake`iem, ale nie będziemy omawiać tego procesu w tym wpisie.

Rys1. 4-way handshake WPA2-PSK

Tyle teorii, przejdźmy do praktyki.

Rekonesans, pakiety deauth i przechwycenie 4-way handshake

Na początek eksperymentu wykorzystałem airodump-ng aby znaleźć sieci w moim otoczeniu. Wykorzystując dość mocną kartę Alfa AWUS1900, zdołałem odnaleźć kilkadziesiąt sieci Wi-Fi, z których prawie wszystkie (jeden wyjątek) wykorzystywały standard WPA2. Wśród odnalezionych sieci, mniej więcej 30% z nich stanowiły te uruchomione na routerach TP-Link. Być może było ich więcej, ale weryfikowałem to tylko po SSID, a nie po adresach MAC. Wśród odnalezionych sieci była też i moja – TP-Link_4AXX.

Rys. 2 Okoliczne sieci Wi-Fi wraz z moim routerem

Na potrzeby eksperymentu zestawiłem prosty, lecz wystarczający lab zawierający w sumie 3 hosty i jeden AP (Access Point).

Rys. 3 Schemat domowego laboratorium

Po chwili rozpocząłem nasłuchiwanie sieci w wykorzystaniem filtra BSSID, a wyniki w formacie pcap miały zostać zapisane do pliku „capture_wifi”. W celu odzyskania hasła do sieci w formie jawnej musimy nasłuchiwać docelową sieć i przechwycić 4-way handshake, który będzie nawiązany miedzy Access Pointem a dowolnym hostem. Można to osiągnąć na dwa sposoby:

  1. Nasłuchiwać sieć aż do momentu, gdy napotkamy handshake pomiędzy klientem łączącym się do sieci, a AP (Access Pointem)
  2. Wysłać pakiet Deauth (ang. deauthenticate) do wybranego przez nas urządzenia, który spowoduje rozłączenie się danego urządzenia z testowaną siecią. W zależności od profilu sieci urządzenie:
    1. może samoczynnie, powtórnie połączyć się do sieci
    1. może zostać manualnie, powtórnie podłączone do sieci przez użytkownika

W obydwóch przypadkach, w efekcie powinniśmy uzyskać pełny 4-way handshake pomiędzy urządzeniem, a Access Pointem. W celu rozłączenia stacji Windows 10 od sieci, wysłałem pakiety Deauth i po kilkunastu sekundach stacja odłączyła się, a następnie powtórnie podłączyła do sieci.

Rys. 4 Przechwytywanie ruchu testowanej sieci TP-Link_4AD0
Rys. 5 Odłączenie stacji Win10 od sieci przy wykorzystaniu pakietów deauth

Pod udanym odłączeniu stacji Windows 10 od sieci, airodump wykrył ramki EAPOL (odpowiedzialne za powtórne uwierzytelnienie) i zanotował ich obecność w kolumnie „Notes (patrz Rys. 4). Możemy to zweryfikować otwierając zapisany ruch w Wiresharku i wyfiltrować protokół EAPOL. Na Rys. 6 doskonale widać 4 way handshake pomiędzy routerem Tp-Link, a komputerem Windows 10.

Rys. 6 Ruch eapol przechwycony przez program airodump

Odzyskanie hasła do sieci Wi-Fi – Hashcat w praktyce

Hashcat umożliwia „odzyskiwanie” hasła do sieci w plaintexcie, w przypadku przechwycenia 4 way handshake i przekonwertowania go hasha o odpowiednim formacie.

W jaki sposób hashcat odzyskuje hasło z przechwyconego handshake?

  1. Hashcat generuje klucz PMK podstawiając kolejne testowane hasła. Wszystkie niezbędne dane do wygenerowania klucza PMK są znane.
  2. Hashcat generuje klucz PTK, wykorzystując wygenerowany PMK. Wszystkie niezbędne dane do wygenerowania klucza PTK są znane.
  3. Hashcat wylicza hash MIC przesłanej ramki EAPOL z drugiego requestu. Do tego celu używa fragmentu klucza PTK.
  4. Hashcat porównuje wyliczony własnoręcznie MIC z MICiem zawartym w ramce EAPOL.
  5. Jeżeli wartości MIC zgadzają się – podstawione w kroku 1 hasło jest prawidłowe.
  6. Jeżeli wartości MIC nie zgadzają się – Hashcat wraca do 1 kroku i testuje kolejne hasło.

Po przechwyceniu ruchu w sieci, należy przekonwertować ramki EAPOL do formatu znanego Hashcatowi. Można zrobić to za pomocą gotowego narzędzia o nazwie hcxpcapngtool.

Rys. 7 Wygenerowanie hasha dla programu Hashcat

Wygenerowany hash ma nastepujący format:

Rys 8. Format hasha trybu 22000 dla Hashcata

Po wygenerowaniu hasha nie pozostaje nic innego jak tylko spróbować złamać go metodą brute-force. Zadanie to wykonywałem na maszynie wirtualnej, bez dostępu do GPU, osiągając zawrotny hashrate 4000 H/s. Warto mieć to na uwadze, zważywszy że dedykowane układy graficzne posiadają możliwości co najmniej kilku rzędów większe niż moje. Przy 100 milionach kombinacji i 4000 H/s łatwo policzyć, że w najgorszym wypadku zadanie zostanie wykonane w 7 godzin.

Rys. 9 Rozpoczęcie ataku brute-force na wygenerowany hash

Prawidłową kombinację cyfr hashcat odnalazł po niecałych 2 godzinach.

Rys. 10 Odnalezienie prawidłowego hasła do sieci Wi-Fi

Podsumowanie

Myślę, że czas 2 godzin potrzebny do złamania 8 znakowego hasła do sieci Wi-Fi to niezły wynik, zważywszy na brak wykorzystania dedykowanych układów GPU. Hasła złożone z samych cyfr dobrze sprawdzają się w przypadku PINów, ale nie zapewniają należytej ochrony w przypadku ataków brute-force offline. Każda dodana cyfra zwiększa dziesięciokrotnie ilość możliwych kombinacji, co przy 10-znakowych haśle daje nam zawrotne 30 dni na złamanie hasha, zakładając hashrate na poziomie 4000 H/s. Czy to dobre założenie? Absolutnie nie. Pojedyncza karta GeForce 3070Ti jest w stanie osiągnąć wartości rzędu 500 kH/s, co dodatkowo skraca czas łamania do kilku godzin.

Myślę, że czas najwyższy przemyśleć migrację do standardu WPA3 w rozwiązaniach domowych oraz do WPA2-Enterprise w środowiskach biurowych. Certyfikat, który można wykorzystać w WPA2-Enterprise jest de-facto drugim factorem uwierzytelnienia, który znacząco zwiększa bezpieczeństwo sieci.

W kontekście niedawno opublikowanej podatności CVE-2024-30078, która rozpala świat cybersecurity, warto pochylić się nad bardziej przyziemnymi sprawami, nie zaniedbując jednocześnie regularnego aktualizowania swoich komputerów.

EKSTRA – Łamanie hashy w chmurze za pomocą Vast.Ai >..<

Okej, pokazanie łamania hasła WPA2-PSK to za mały temat na artykuł, nawet biorąc pod uwagę zwrócenie uwagi na krótkie domyślne hasła Tp-Link. W jaki sposób „wypożyczyć” moce obliczeniowe w chmurze, aby złamać hash w szybko i (w miarę) tanio?

Rozpocząć należy od założenia konta na stronie vast.ai, ponadto należy doładować konto kilkoma dolarami na start. Kolejny krok to wybór interesujących nas zasobów:

Rys. 11 Zasoby do wypożyczenia

Po kliknięciu „Rent”, strona przekierowuje nas do wyboru template, czyli do obrazu systemu i oprogramowania, które ma być zainstalowane na naszej instancji. Domyślnie, aplikacja proponuje nam oprogramowanie do uczenia maszynowego takie jak Tensorflow czy Pytorch. Spróbujmy odnaleźć oprogramowanie hashcat, wpisując frazę „hashcat” w wyszukiwarce.

Rys. 12 Odnalezienie template z hashcatem i wsparciem CUDA

Domyślnie, na instancji uruchomiony jest serwer SSH z możliwością zalogowania do niego, ale warto to zweryfikować klikając wcześniej „Edit”. Po zweryfikowaniu danych, wybieramy template i klikamy „Rent” na interesujących nas zasobach GPU.

Rys. 13 Uruchomienie instancji hashcata

Po wejściu w instancje, klikamy przycisk connect, który umożliwia nam połączenie przez SSH do naszych zasobów.

Rys. 14 Szczegóły instancji wraz z możliwością połączenia się do niej

W celu połączenia się do zasobów, należy dodać klucz publiczny id_rsa do instancji. Klucze można dodawać per instancja, bądź per konto.

Rys. 15 Dodanie klucza SSH do instancji

Po dodaniu klucza do instancji, nie pozostaje nic innego jak tylko połączyć się z naszymi zasobami, wykorzystując podany one-liner.

Po podłączeniu się do instancji, przeklejamy zawartość hasha do pliku i uruchamiamy hashcata – dokładnie z takimi samymi parametrami co na naszym lokalnym Linuxie.

Rys. 16 Uruchomienie hashcata na instancji vast.ai

Do dyspozycji mamy dwie potężne karty RTX 4090, które generują hashrate rzędu 5000 kH/s.

Złamanie 8 znakowego hasła składającego się z samych cyfr zajęło… 27 sekund.

Rys. 17 Złamanie 8 znakowego hasła z wykorzystaniem instancji VastAI

Dodaj komentarz


The reCAPTCHA verification period has expired. Please reload the page.