
Ideja o stvaranju prijenosnog alata za analizu WiFi mreža došla je do mene .
Zahvaljujem im na ideji. Baš sam imao slobodnog vremena.
Sav rad obavljen je kao hobi s ciljem uživanja i proširenja svog znanja iz područja mrežnih tehnologija. Polako, 1-4 sata tjedno, od početka ove godine.
Praktičnu upotrebu nisam planirao. Dakle, ovo NIJE alat za hakere.
Trenutno sav zamišljeni funkcionalnost radi. Svi izvornici, potpuno spremni za sastavljanje, . Tamo je i upute za sastavljanje itd. U ovom zapisu neću duplicirati informacije objavljene na githubu. Pričat ću samo o onome što smatram potrebnim posebno opisati.
Moje mišljenje o "univerzalnom alatu" i razlog odabira ESP32
Ne tvrdim da znam sve. Svakome je istina drugačija. Pokušat ću opravdati svoj izbor "hardvera".
kombinacija Linuxa (izvorno Raspberry Pi) + „periferije“ u obliku kontrolera (STM32) + CC1110 (jezgra 8051) i plan je smjestiti sve što je moguće (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) činila se neprikladnom za mene. Ipak, izgleda da će ostati privatno i zatvoreno (flipper-zero github "Ova organizacija nema javne repozitorije.") i otišao sam prema ne previše rasprostranjenom hardveru.
Možda griješim, i u budućnosti će autori objaviti izvore softvera u otvorenom pristupu. Ali ako ne, ne bih kupio takvu napravu bez izvornika.
Moji zahtjevi za "alat"
Kutija bi trebala biti mala (što manja, to bolje).
Dakle:
- Ugrađena baterija nije potrebna. Pri struji > 100 mA pri radu s Wifi, ugrađena baterija će ili biti velika, ili je ne će dovoljno dugo trajati. Zato neka "kutija" koristi struju iz standardnog power banka. U svakom slučaju, power bank mi uvijek leži u džepu/automobilu.
- Trebalo bi imati unutar "kutije" Linux s alatima, napisanim tijekom mnogih godina na svim jezicima s malim ekranom i osiromašenim skupom upravljačkih gumba nema smisla. Rezultate se može gledati/obrađivati i na pravom prijenosniku s pravom tipkovnicom i ekranom.
- Komponente trebaju biti lako dostupne i široko poznate (dostupan SDK, puno primjera i dokumentacije).
Kao rezultat, za mene, izbor je bio očigledan — ESP32.
Za sve zadatke navedene u članku koji me potaknuo na akciju, mogućnosti ESP32 su sasvim dovoljne. Iako je maksimum što još želim učiniti:
- Igrati se s Bluetooth-om.
- Igrati se s 433mHz opsegom s najjednostavnijim hardverom (samo amplitudna modulacija, što je dovoljno za praktične potrebe).
Žlica katrana u ESP32
- SDK (IDF) za ESP32 je pomalo neuredan.
- Dio funkcionalnosti (npr. WiFi stog) dolazi bez izvornog koda u obliku sastavljenih statičkih biblioteka.
- 5gHz opseg se ne podržava i postoje neka ograničenja i greške u radu s WiFi-om.
No, cijena/veličina sasvim kompenzira te nedostatke.
Osnovna funkcionalnost softvera
Kratko ću opisati funkcionalnost i svoje mišljenje o…
Upravljanje postavkama i učitavanje datoteka s SD-a.
Sve vanjsko upravljanje izvršava se putem najjednostavnije web stranice, pokrenute u posebnom izborniku. ESP32 pokreće u režimu WiFi AP i isporučuje stranicu na fiksnoj IP adresi.
Iako su jezgre ESP32 prilično brze, eksperimenti su pokazali da se istovremeno upravljanje ugrađenom web uslugom i, na primjer, router načinom ne podudaraju dobro. Stoga dinamičko upravljanje nije dostupno i u svim drugim režimima stranica nije dostupna.
Tim više, jer za istraživačke svrhe dinamičko upravljanje nije potrebno.
Način rada s Beacon paketima
Modovi su banali i nepretenciozni. Napravljeni su "jer se može". Za zapis.
Primjeri postoje u službenim primjerima Espressif-a.
Način skeniranja popisa AP.
U biti, to može učiniti bilo koji pametni telefon.
U ovom režimu čuva se popis AP.
Beacon spammer.
ESP32 se pokreće kao AP s skrivenim SSID-om i slučajnim MAC-om i počinje slati [beacon frame] prema unaprijed kreiranom popisu SSID-a (stalno kreiranom ili prethodno dobivenom tijekom skeniranja popisa AP).
Način sniffing paketa WiFi.
Razvijači Espressif-a dodali su mogućnost aplikativnom softveru da putem callback funkcije dobiveni svi WiFi paketi "koji prolaze zrakom". U stvarnosti, ne svi, jer se može postaviti način samo za jedan fiksni kanal.
Na obradu poziva callback funkcije nameću se stroga vremenska ograničenja. Ako to ne predstavlja problem za način jednostavnog prikupljanja statistike, za način snimanja PCAP datoteke na SD karticu trebalo je uhvatiti se u koštac, organizirajući snimanje putem reda u memoriji i semafora. Uzimajući u obzir osobitost da proces koji poziva callback radi na jednoj jezgri, a proces koji izvodi snimanje na SD na drugoj.
Kod "šumne eter" neki paketi se gube (u redu nema mjesta pa se odbacuju), ali pri tipičnom "eteru" stanova navečer (5..7 AP u vidnom polju) snimanje u PCAP uspijeva se izvršiti bez gubitka paketa.
Dodatno, za praćenje i snimanje PCAP postoje načini filtriranja po MAC popisu u zaglavljima paketa.
Na primjer, može se pratiti pojava osobe u klubu/kafiću prije nego što je uopće ušla ili se pojavila u vidnom polju. Malo tko isključuje WiFi i automatska spajanja na poznate AP. (Sad ih ja isključujem..)
Pregledavanje snimljenog prometa u Wiresharku je poučno i zanimljivo za razumijevanje kako to sve funkcionira.
Način rada s deauth paketima
Zadano, slanje tih paketa zabranjeno je u biblioteci libnet80211.a, koja dolazi bez izvornog koda. No, nije teško to kopirati, ispravivši nekoliko bajtova. Isprva sam sumnjao ima li smisla objavljivati zakrpu. No, obišavši razna mjesta s uključenim načinom skeniranja izvora slanja [deauthentication frame], pomislio sam: "što je tu čudno". Pogotovo jer u esp8266 slanje tih paketa nije zatvoreno, a na githubu postoje izgradnje za esp8266.
Na veoma mnogim mjestima (neću reći gdje) koristi se suzbijanje neželjenih AP putem ove metode. I to nisu "huligani"...
A ja sam se još čudio što mi dijeljenje interneta s telefona na mjestima ne radi...
Način praćenja broja i RSSI takvih paketa vrlo je koristan za razumijevanje "gdje ne vole lijeve AP".
Način router
Ova funkcija je, vjerojatno, najzanimljivija od svih za istraživanje.
ESP32 podržava istovremeni rad u načinu STA + SoftAP. Stoga se na njemu može implementirati klasični NAT router.
Za podršku mrežnom stogu, Espressif koristi fork (praktički bez promjena) biblioteke lwip.
No, prema zadanim postavkama, u standardnoj izgradnji, u biblioteci esp-lwip među netif sučeljima ‘ap’ (SoftAP) i ‘st’ (STA) nije predviđen prohod.
Može se naravno i bez NAT-a, ali tada nastaje problem s istovremenim povezivanjem dva ili više STA na ‘ap’ sučelje i usklađivanjem IP adresa sa mrežnog sučelja ‘st’ na ‘ap’. Tako da poteškoće nisu vrijedne toga i jednostavnije je preko NAT-a.
Tim više, postoji fork esp-lwip od martin-ger u kojem je dodana jednostavna implementacija NAT-a za IP4.
Iako su me ruke svrbjele da je prepravim čisto kozmetički (po mom mišljenju, bilo bi lakše bez fork projekta, već kroz LWIP)HOOK funkcija, definirana prilikom izrade), ali je lijenost pobijedila i koristim opciju od martin-ger kao što jest.
U router režimu gleda se dolazni i odlazni IP4 promet.
U posebnom, iz njega se izvlače podaci za prikaz na ekranu i prikupljanje statistike u datoteku:
- Ime uređaja koje se povezalo na SoftAP ESP32 (DHCP paketi)
- URL iz DNS upita (UDP port 53) od uređaja povezanog na SoftAP ESP32.
Dodatno se može uključiti snimanje prometa u PCAP datoteku.
Ovaj način je vrlo koristan, na primjer, kako bi se shvatilo što vaš telefon šalje u mrežu i kamo to ide.
Može se smisliti i drugi načini korištenja ovog režima, uz mogućnost potpunog upravljanja dolaznim i odlaznim prometom SoftAP ESP32 na razini mrežnog sučelja: Ethernet zaglavlje (destMAC[6]+srcMAC[6]+tip[2]) + payload (IP4, IP6, DCHP i drugi tipovi).
U načelu, ESP32 se sasvim dobro nosi s funkcijom WiFi->WiFi routera, propuštajući bez značajnih kašnjenja običan promet. Subjektivno, kašnjenja na telefonu povezanom preko routera na ESP32 nisu primjetna.
Nažalost, u API-ju Espressif nema mogućnosti postavljanja filtera po MAC-u povezanih na SoftAP EPS32. Umjesto toga, predlaže se reći 'doviđenja' (esp_wifi_deauth_sta) već povezanima STA, koji su 'nepoželjni'.
Filtriranje po MAC-u za povezane STA moralo se napraviti pozivom esp_wifi_deauth_sta()
Za kraj
Iako nisam smislio ništa novo u okviru rada s ESP32, možda će nekome rezultat (izvori) biti zanimljiv.
Želio bih napomenuti da sam kod pisao isključivo u obrazovne svrhe. Za 'hakiranje' i sl. namjerno je napravljen ne baš zgodnim.
Nisam pravio tiskanu ploču, budući da je za lemljenje gotovih ploča na žicu trebalo otprilike 1.5-2 sata.
I ako se pravi, treba ne od gotovih ploča sastavljati, nego od pojedinih komponenti. Tada će dimenzije biti još manje.
Izvor: habr.com
