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.
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.
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.
Na potrzeby eksperymentu zestawiłem prosty, lecz wystarczający lab zawierający w sumie 3 hosty i jeden AP (Access Point).
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:
- Nasłuchiwać sieć aż do momentu, gdy napotkamy handshake pomiędzy klientem łączącym się do sieci, a AP (Access Pointem)
- 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:
- może samoczynnie, powtórnie połączyć się do sieci
- 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.
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.
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?
- Hashcat generuje klucz PMK podstawiając kolejne testowane hasła. Wszystkie niezbędne dane do wygenerowania klucza PMK są znane.
- Hashcat generuje klucz PTK, wykorzystując wygenerowany PMK. Wszystkie niezbędne dane do wygenerowania klucza PTK są znane.
- Hashcat wylicza hash MIC przesłanej ramki EAPOL z drugiego requestu. Do tego celu używa fragmentu klucza PTK.
- Hashcat porównuje wyliczony własnoręcznie MIC z MICiem zawartym w ramce EAPOL.
- Jeżeli wartości MIC zgadzają się – podstawione w kroku 1 hasło jest prawidłowe.
- 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.
Wygenerowany hash ma nastepujący format:
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.
Prawidłową kombinację cyfr hashcat odnalazł po niecałych 2 godzinach.
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:
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.
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.
Po wejściu w instancje, klikamy przycisk connect, który umożliwia nam połączenie przez SSH do naszych zasobów.
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.
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.
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.