Gry z Wi-Fi na ESP32

Gry z Wi-Fi na ESP32

Pomysł stworzenia kieszonkowego narzędzia do analizy sieci Wi-Fi podsunął mi pomysł ten artykuł.

Dziękuję im za pomysł. Po prostu nie miałem nic do roboty.

Całość prac wykonywałem w ramach hobby, w celu dobrej zabawy i poszerzania swojej wiedzy z zakresu technologii sieciowych. Powoli, 1..4 godziny tygodniowo, od początku tego roku.
Nie planowałem żadnego praktycznego zastosowania. Te. To NIE jest narzędzie hakerskie.

Na chwilę obecną wszystkie zaplanowane funkcjonalności działają. Wszystkie źródła całkowicie gotowe do montażu, opublikowane tutaj. Są też instrukcje montażu itp. W tej notatce nie będę powielał informacji zamieszczonych na githubie. Opowiem tylko o tym, co uważam za konieczne, aby opisać osobno.

Moja opinia na temat „narzędzia uniwersalnego” i powodu wyboru ESP32

Nie twierdzę, że to prawda. Każdy ma swoje. Postaram się uzasadnić wybór sprzętu.

Zaproponowane w artykule przypadek użycia kombinacji Linux (początkowo Raspberry Pi) + „peryferia” w postaci kontrolera (STM32) + CC1110 (rdzeń 8051) i plan upchnięcia tam wszystkiego, co się da (125 kHz, NFC, 433 mHz, USB, iButton, bluetooth, ?) nie wydawały mi się odpowiednie. Jednakże, ten projekt wygląda na to, że pozostanie prywatny i zamknięty (github flipper-zero „Ta organizacja nie ma publicznych repozytoriów.”) i skierował się w stronę niezbyt popularnego sprzętu.

Być może się mylę i w przyszłości autorzy udostępnią publicznie źródła oprogramowania. Ale jeśli nie, to nie kupiłbym takiego sprzętu bez kodu źródłowego.

Moje wymagania dotyczące „narzędzia”

Pudełko powinno być małe (im mniejsze, tym lepsze).

Dlatego:

  • Nie wymaga wbudowanej baterii. Przy prądzie > 100 mA podczas pracy z Wi-Fi wbudowana bateria będzie albo duża, albo nie wytrzyma długo. Niech więc „pudełko” będzie zasilane standardowym powerbankiem. Tak czy inaczej, zawsze mam power bank w kieszeni/samochodzie.
  • Trzymaj „pudełko” Linuksa z narzędziami w środku, pisane przez wiele lat we wszystkich językach Przy małym ekranie i skromnym zestawie przycisków sterujących nie ma to sensu. Wyniki można przeglądać/przetwarzać na normalnym laptopie z pełną klawiaturą i ekranem.
  • Komponenty powinny być łatwo dostępne i powszechnie znane (dostępny SDK, wiele przykładów i dokumentacja).

W efekcie dla mnie wybór był oczywisty – ESP32.

Dla wszystkich zadań wymienionych w artykule, które skłoniły mnie do podjęcia działań, możliwości ESP32 są w zupełności wystarczające. Chociaż najbardziej chcę jeszcze zrobić:

  • Pobaw się Bluetoothem.
  • Pobaw się zakresem 433 MHz za pomocą najprostszego sprzętu (tylko modulacja amplitudy, która jest wystarczająca do praktycznych potrzeb).

Leć w maści w ESP32

  • Zestaw SDK ESP32 (IDF) jest nieco niezdarny.
  • Niektóre funkcje (na przykład stos Wi-Fi) są dostarczane bez kodu źródłowego w postaci zmontowanych bibliotek statycznych.
  • Pasmo 5 GHz nie jest obsługiwane, a praca z Wi-Fi wiąże się z pewnymi ograniczeniami i nieporadnością.

Но цена/размеры вполне компенсируют эти недостатки.

Główna funkcjonalność oprogramowania

Pokrótce opiszę funkcjonalność i moją opinię na temat...

Zarządzanie ustawieniami i przesyłanie plików z SD

Cała kontrola zewnętrzna odbywa się poprzez prostą stronę internetową, uruchamianą w osobnej pozycji menu. ESP32 uruchamia się w trybie WiFi AP i wyświetla stronę pod stałym adresem IP.

Choć rdzenie ESP32 są dość szybkie, jak wykazały eksperymenty, jednoczesne działanie wbudowanej usługi internetowej i np. trybu routera nie są zbyt kompatybilne. Dlatego nie ma dynamicznej kontroli i strona nie jest dostępna we wszystkich pozostałych trybach.
Co więcej, sterowanie dynamiczne nie jest potrzebne do celów badawczych.

Tryb pracy z pakietami Beacon

Tryby są banalne i niezbyt ciekawe. Stworzone „bo to możliwe”. Do sprawdzenia.
Istnieją przykłady w oficjalnych przykładach Espressif.

Tryb skanowania listy punktów dostępowych.
Właściwie każdy smartfon może to zrobić.
Cóż, w tym trybie lista AP zostanie zapisana.
Beaconowy spamer.
ESP32 uruchamia się jako punkt dostępowy z ukrytym identyfikatorem SSID i losowym adresem MAC i rozpoczyna wysyłanie [ramki sygnału nawigacyjnego] zgodnie z wcześniej utworzoną listą identyfikatorów SSID (utworzoną ręcznie lub uzyskaną wcześniej poprzez skanowanie listy punktów dostępowych).

Tryb wąchania pakietów WiFi

Twórcy Espressif dodali możliwość oprogramowania aplikacyjnego odbierania wszystkich pakietów Wi-Fi „lecących w powietrzu” za pośrednictwem funkcji wywołania zwrotnego. Właściwie nie wszystkie, ponieważ można ustawić tryb tylko dla jednego stałego kanału.

Na przetwarzanie funkcji wywołania zwrotnego nakładane są bardzo rygorystyczne ograniczenia czasowe. O ile dla prostego trybu zbierania statystyk nie sprawia to problemów, to dla trybu zapisu pliku PCAP na karcie SD musiałem majstrować, organizując zapis poprzez kolejkę w pamięci i semafory. Biorąc pod uwagę specyfikę, że proces wywołujący wywołanie zwrotne działa na jednym rdzeniu, a proces zapisujący na SD na innym.

Podczas „zaszumionego powietrza” część pakietów zostaje gubiona (nie ma miejsca w kolejce i są odrzucane), ale przy typowym „powietrzu” mieszkania wieczorem (5..7 AP w zasięgu wzroku), nagrywanie w PCAP kończy się bez utraty pakietów.

Dodatkowo do monitorowania i nagrywania PCAP dostępny jest tryb filtrowania w oparciu o listę MAC w nagłówkach pakietów.

Na przykład możesz śledzić wygląd osoby w klubie/kawiarni, zanim w ogóle wejdzie lub pojawi się w zasięgu wzroku. Niewiele osób wyłącza Wi-Fi i automatyczne połączenia ze znanymi punktami dostępowymi. (Teraz to wyłączam..)

Przeglądanie zarejestrowanego ruchu w Wireshark ma charakter edukacyjny i ułatwia zrozumienie map – to wszystko działa.

Tryb pracy z pakietami deauth

Domyślnie wysyłanie tych pakietów jest zabronione w bibliotece libnet80211.a, która nie zawiera źródeł. Ale łatwo to naprawić, poprawiając kilka bitów. Na początku miałem wątpliwości, czy warto wrzucać patcha. Ale po przejściu się po różnych miejscach z włączonym trybem skanowania ramki cofania uwierzytelnienia, pomyślałem: „co do cholery”. Co więcej, w esp8266 dostawa tych pakietów nie jest zamknięta, a na githubie znajdują się zestawy dla esp8266.

W wielu miejscach (nie powiem gdzie) stosuje się tę metodę tłumienia niechcianych punktów dostępowych. I nie są to „złoczyńcy”...

I też się zdziwiłem, że w niektórych miejscach nie działała mi dystrybucja Internetu z telefonu...

Tryb śledzenia liczby i RSSI takich pakietów jest bardzo przydatny, aby zrozumieć, „gdzie nie podoba się to lewym punktom dostępowym”.

tryb routera

Ta funkcja jest prawdopodobnie najciekawsza ze wszystkich do odkrycia.

ESP32 obsługuje jednoczesną pracę w trybie STA + SoftAP. Można więc na nim zaimplementować klasyczny router NAT.

Do obsługi stosu sieciowego Espressif wykorzystuje fork (praktycznie niezmieniony) biblioteki lwip.

Jednak domyślnie w wersji standardowej biblioteka esp-lwip nie zapewnia przesyłania dalej pomiędzy interfejsami netif „ap” (SoftAP) i „st” (STA).

Oczywiście da się to zrobić bez NAT-u, ale jest problem z jednoczesnym podłączeniem dwóch lub więcej stacji STA do interfejsu 'ap' i synchronizacją adresów IP z interfejsu sieciowego 'st' do 'ap'. Więc trudności nie są tego warte i jest łatwiej dzięki NAT.

Co więcej, istnieje fork esp-lwip firmy martin-ger, który dodaje prostą implementację NAT dla IP4.

Chociaż ręce mnie swędziały, żeby przerobić to czysto kosmetycznie (moim zdaniem łatwiej było bez rozwidlenia projektu, ale przez LWIPHOOK funkcje zdefiniowane podczas montażu), ale zwyciężyło lenistwo i użyto opcji z martin-gera w takiej postaci, w jakiej jest.

W trybie routera przeglądany jest przychodzący i wychodzący ruch IP4.

W szczególności wyodrębniane są z niego w celu wyświetlenia na ekranie i gromadzenia statystyk do pliku:

  • Nazwa urządzenia, które podłączyło się do SoftAP ESP32 (pakiety DHCP)
  • Adres URL z żądań DNS (port UDP 53) z urządzenia podłączonego do SoftAP ESP32.

Dodatkowo możesz włączyć rejestrację ruchu w pliku PCAP.

Ten tryb jest bardzo przydatny, aby na przykład zrozumieć, co Twój telefon wysyła do sieci i dokąd trafia.

Można pomyśleć o innych sposobach wykorzystania tego trybu, biorąc pod uwagę możliwość całkowitej kontroli przychodzącego i wychodzącego ruchu oprogramowania SoftAP ESP32 na poziomie interfejsu sieciowego: nagłówek Ehernet (destMAC[6]+srcMAC[6]+type[2]) + ładowność (typ IP4, IP6, DCHP itp.).

W zasadzie ESP32 całkiem nieźle radzi sobie z funkcją routera WiFi->WiFi, przepuszczając normalny ruch bez żadnych specjalnych opóźnień. Subiektywnie opóźnienia w telefonie podłączonym przez router na ESP32 nie są zauważalne.

Niestety, API Espressif nie ma możliwości ustawienia filtra dla adresów MAC podłączonych do SoftAP EPS32. Zamiast tego proponuje się pożegnać (esp_wifi_deauth_sta) z już podłączonymi stacjami STA, które są „niepożądane”.

Filtrowanie według adresu MAC dla podłączonych stacji STA musiało zostać wykonane poprzez wywołanie esp_wifi_deauth_sta()

Na zakończenie

Choć w ramach pracy z ESP32 nie wymyśliłem nic nowego, być może wynik (kod źródłowy) będzie dla kogoś interesujący.

Pragnę zaznaczyć, że kod został napisany wyłącznie w celach edukacyjnych. W przypadku „hakowania” itp. celowo uczyniono to niezbyt wygodnym.

Nie zrobiłem płytki drukowanej, ponieważ lutowanie gotowych szalików drutem zajmowało 1.5-2 godziny.

A jeśli już, to trzeba go złożyć nie z gotowych desek, ale z pojedynczych elementów. Wtedy wymiary będą jeszcze mniejsze.

Źródło: www.habr.com

Dodaj komentarz