ESP32-ով Wifi խաղեր

ESP32-ով Wifi խաղեր

Wifi ցանցերի վերլուծության փոքր գործիք ստեղծելու մտահղացումը ինձ մոտ առաջացավ այս հոդվածի հիման վրա.

Շնորհակալություն նրանց գաղափարի համար։ Ես հենց այն ժամանակ զբաղվելու բան չէի ունենում։

Աշխատանքը կատարվել է որպես հոբբի՝ նպատակ ունենալով երիտասարդանալ և ստանալ փորձառություն ցանցային տեխնologien领域: Մարշիկորեն, շաբաթական 1-4 ժամ, այս տարվա սկզբից։
Առավելապես կիրառում նախատեսված չէ: Առանցքային է, որ սա hacker-ի գործիք չէ։

Ներկայիս գիտական ֆունկցիաները աշխատում են: Ավելին, բոլոր սկզբնաղբյուրները, որոնք պատրաստ են հավաքման, դրված են այստեղԱյ那里 էլ կա հավաքման ցուցագիր և այլն։ Այս հոդվածում ես չեմ կրկնակի տեղեկատվությունը, որը թողնված է github-ում։ Դուրս կբերեն միայն այն, ինչը կարծում եմ, պետք է թարգմանել առանձին։

Իմ կարծիքը "ալդո-գործի" մասին և ESP32-ի ընտրության պատճառը

Ես չեմ առաջադառնում ճշգրտության: Այն յուրաքանչյուրյանում տարբեր է։ Փորձեմ հիմնավորել իմ ընտրությունը "հալեցում"։

Հոդվածում առաջարկված արդյունքը Linux (պատահաբար Raspberry Pi) + "պերիպերիա" ի տես STM32- контролլեր + CC1110 (8051 ядром) տարբերակի համակցումը, որը պետք է հաջողվի դրա մեջ ամեն ինչ մտցնել (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) ինձ համար անբավարար է։ Սակայն, այս նախագիծը Ծանոթների նման հսկայական մնալու է (flipper-zero github "Այս կազմակերպությունը չունի հանրային ռեպոզիտորներ.") և գնացի ավելի քիչ տարածված ապարատների ճանապարհը:

Հնարավոր է, որ սխալվում եմ, և կաթված-արա, հեղինակները կթողնեն ծրագրային ապահովման սկզբնաղբյուրները։ Բայց եթե ոչ, ապա ես նման ապարատ ձեռք չեմ առնի առանց սկզբնաղբյուրի։

Իմ պահանջները "գործիքի"

Պատկերասեղանը պետք է փոքր լինի (մինչև նվազագույնի):

Այդ իսկ պատճառով՝

  • Ինքնաուժեղ բեռն անհրաժեշտ չէ: Wifi-ի աշխատանքում ավելի քան 100 mA հոսանքի պայմաններում, ինքնաուժեղ բեռը կամ մեծ կլինի, կամ չափազանց երկար չի տևի։ Այդ պատճառով թող "փոքրիկ պետք է միացվի ստանդարտ նկարահանման սարքի միջոցով կամ էլ առկա նկարահանող սարքն իմ գրպանում/մեքենայում միշտ կգտնվի։
  • Պետք է պահպանել "փոքրիկում" Linux-ով սարքեր, առաջին հերթին բազմաթիվ լեզվերով բազմաթիվ տարիների համար փոքրիկ էկրանով և սահմանափակ կառավարման մետաղակտորի հետ ոչ մի օգտագործման իմաստ չկա։ Արդյունքները կարելի է դիտել/փորձել և նորմալ նոթբուքում՝ լիարժեք ստեղնափոփոխությամբ և էկրանի շուրջ։
  • Կազմակցությունները պետք է լինեն հեշտ տեղահատանք և հայտնի (հասանելի SDK, շատ օրինակներ և փաստաթղթեր):

Այսպիսով, ինձ համար ընտրությունը ակնառու էր` ESP32:

Հոդվածի շրջանակներում նշված բոլոր խնդիրներին ESP32-ի հնարավորությունները բավական են։ Իհարկե, ավելորդ է, որ ես կարող եմ միայն փորձարկել:

  • Bluetooth-ի հետ խաղալ։
  • 433mHz հատվածի հետ փորձարկել պարզ սարքերի միջոցով (միայն ալիքային մոդուլացնում, ինչն էլ բավարար է շուրջանակ դիմումների համար):

ESP32-ում մի վատ կողմ

  • SDK (IDF) ESP32 մի փոքր կիսանկարում է։
  • Ֆունկցիոնալության մի մասը (Wifi ստեկտոր, օրինակ) գալիս է առանց սկզբնաղբյուրների որպես հավաքված ունիպային գրադարաններ։
  • 5gHz диапазոնը միSupported չէ, եւ WiFi-ի աշխատանքում կան որոշ սահմանափակումներ եւ հարթություն:

Բայց գինը/չափերը բավականաչափ փոխհատուցում են այս թերությունները:

Ծրագրային ապահովման հիմնական ֆունկցիաները:

Կարճ կպատմեմ ֆունկցիայի եւ իմ կարծիքի մասին:

Կարգավորումների կառավարումը եւ ֆայլերի բեռնման գործընթացը SD-ից:

Բոլոր արտաքին կառավարման գործընթացները կատարվում են պարզ Web էջի միջոցով, որը սկսվում է ապրանքանիշի մենյուի առանձին կետում: ESP32-ն սկսվում է WiFi AP ռեժիմում եւ տրամադրում է էջը պինդ IP հասցեով:

Չնայած ESP32-ի միջուկները բավական արագ են, սակայն փորձերը ցույց տվեցին, որ ներկառուցված Web ծառայության եւ, օրինակ, ռոուտերի ռեժիմի համատեղ աշխատանքը միանշանակ չէ: Այդ պատճառով, դինամիկ կառավարման ռեժիմ չկա, եւ բոլոր մնացած ռեժիմներում էջը մատչելի չէ:
Հատկապես, որ հետազոտական նպատակներով դինամիկ կառավարումը հարկավոր չէ:

Beacon տուփերի հետ աշխատանքային ռեժիմ:

Ռեժիմները սովորական եւ ոչ հետաքրքիր են: Ավելացված են «ինչպես կարելի է» սկզբունքով: Ցուցանիշի համար:
Օրինակներ կան պաշտոնական Espressif օրինակներում:

AP-ների ցանկերը սկանավորելու ռեժիմ:
Դրան կարող է ցանկացած սմարթֆոն:
Այս ռեժիմում պահպանվում է AP-ների ցանկ:
Beacon Spam-er:
ESP32-ն սկսվում է որպես AP՝ գաղտնի SSID-ով եւ պատահական MAC-ով եւ սկսում է ուղարկել [beacon frame] նախապես ստեղծված SSID ցուցակից (ձեռնարկված կամ ստացված AP-ների ցանկից):

WiFi փաթեթների sniffing ռեժիմ:

Espressif-ի մշակողները ավելացրել են հնարավորությունը, որ հավելվածային ծրագրերը կարող են callback ֆունկցիայի միջոցով ստանալ բոլոր WiFi փաթեթները «օդում անցնող»: Այսինքն բոլորը չէ, որովհետեւ հնարավոր է սահմանել ռեժիմ միայն մեկ պինդ ալիքով:

Callback ֆունկցիայի գործառույթի վրա սահմանվում են շատ խիստ ժամանակային սահմանափակումներ: Եթե պարզ վիճակագրություն հավաքելու ռեժիմը խնդիրներ չի առաջացնում, ապա PCAP ֆայլի գրելն SD քարտում կազմակերպելու համար անհրաժեշտ էր որոշակի ժամանակ պահանջել, կազմակերպել գրանցումը հիշողության հերթով եւ սեմաֆորներով: Նշելով, որ ֆունկցիան, որը գործում է callback վերադառնում, անցնում է մեկ միջուկով, իսկ SD-ում գրող գործընթացը՝ մյուսով:

Հեռահարովի «ցնցված» ալիքի պատճառով որոշ փաթեթներ կորցվում են (ընտրանի հերթը տեղ չի ունենում եւ հեռանում են), բայց, երբ տարածքը սովորական «ալիք» գիշերային (5..7 AP տեսադիտման շրջանակի մեջ), գրությունը PCAP-ով կատարվում է առանց փաթեթների pertes:

Ավելացնում՝ PCAP մոնիտորինգի եւ գրանցման համար MAC-ի ցանկերի միջոցով ֆիլտրելու ռեժիմ:

Օրինակ, կարելի է հետևել մարդու հայտնվելուն ակումբում/թեյարանում, մինչև նա ընդմիշտ մտնելուց կամ հայտնվելուց: Քիչ կան, ովքեր WiFi-ն մեկնում ու ավտոմատորեն միանում են հայտնի AP-ներին: (Ես հիմա մեկնում եմ..)

Wireshark-ում գրանցված տրաֆիկը դիտելը հետաքրքրաշարժ է ու ուսուցողական, որպեսզի հասկանալ ինչպես է այն իսպառու:

Deauth փաթեթներով աշխատանքային ռեժիմ:

Ավտոմատ կերպով, այս փաթեթների փոխանցումը արգելված է libnet80211.a գրադարանում, որը հասանելի է առանց աղբյուրների։ Սակայն դա հեշտ է կրճատել, փոխելով մի քանի բիթ։ Բeginning, ես կասկածում էի, թե արդյոք արժե հրապարակել patch-ը։ Բայց տեղ-տեղ անցնելով ռադիոտածման աղբյուրները [deauthentication frame], ես մտածեցի՝ «ինչո՞ւ ոչ»։ Եվ առավել ևս, որ esp8266–ում այս փաթեթների փոխանցումը փակված չէ, և github-ում esp8266-ի համար հանդիպում են հավաքումներ։

Դուք գիտե՞ք, որտեղ շատ տեղերում (ճիշտ չեմ ասի որտեղ) օգտագործվում է undesirable AP-ների ճնշումը այս մեթոդով։ Եվ դա չի վերաբերվում «թույլ տվածներին»…

Միևնույն ժամանակ, ես դեռ կարոտել էի, որ իմ հեռախոսից ինտերնետը տեղ-տեղ չի աշխատում…

Այդ փաթեթների քանակի և RSSI-ի հետախուզական ռեժիմը շատ օգտակար է հասկանալու համար՝ «որտեղ չեն սիրում լևե AP-ները»։

Ռաութերի ռեժիմ

Այս ֆունկցիան, կարծես թե, ամենաս интересная из всех для исследования։

ESP32-ը կարող է միաժամանակ աշխատել STA + SoftAP ռեժիմներում։ Այն posibilit разрабатывать классический NAT router։

Espressif-ի ցանցային դիագրաֆը աջակցում է lwip գրադարանի fork-ը (շատ քիչ փոփոխություններով)։

Բայց, ավտոմատ կերպով, ստանդարտ հավաքման մեջ, esp-lwip գրադարանում ‘ap’ (SoftAP) և ‘st’ (STA) ցանցային ինտերֆեյսների միջեւ տարանցում չի նախատեսվել։

Իհարկե, կարելի է անել նաև առանց NAT-ի, սակայն առաջանում է դժվարություն ‘ap’ ինտերֆեյսին միացում ունեցող երկու և ավելի STA-ների միաժամանակյա կապի հարցում և IP հասցեների սինխրոնիզացմամբ ‘st’ ինտերֆեյսից ‘ap’։ Այս պատճառով դժվարությունները լավ չեն արդարացնում, և ավելի հեշտ է օգտվել NAT-ից։

Մնում է, որ գոյություն ունի martin-ger-ի կողմից esp-lwip-ի fork, որտեղ ավելացված է IP4-ի համար պարզ NAT իրականացում։

Թեև իմ ձեռքերն ուզում էին վերափոխելն այդ տեսքով (իմ կարծիքով, ավելի հեշտ էր առանց fork նախագծի, և LWIP–ի միջոցով)HOOK ֆունկցիաները, որոնք որոշվում են հավաքման ժամանակ), բայց ժայլի է հաղթեց, և martin-ger-ի տարբերակը օգտագործվում է այնպես, ինչպես կա։

Ռաութերի ռեժիմում դիտվում է մուտքային և ելքային IP4 տրաֆիկը։

Հատուկ, դա դուրս է բերվում էկրանին ցույց տալու և统计统计文件收集的信息:

  • Ամրագրված սարքի անուն, որը միացել է ESP32 SoftAP-ին (DHCP փաթեթներ)
  • Սկիզբը DNS հարցումների (UDP պորտ 53) URL-ը միացած ESP32 SoftAP-ի սարքից։

Լրացուցիչ կարող եք միացնել տրաֆիկի գրանցումը PCAP ֆայլում։

Այս ռեժիմը շատ օգտակար է, օրինակ, հասկանալու համար, թե ինչ է ձեր հեռախոսը ուղարկում ցանց և թե ուր է գնում։

Կարող եք մտածել նաև այլ օգտագործման միջոցներ այս ռեժիմի համար, հաշվի առնելով, որ համամբաց միտումնային կերպով կառավարել SoftAP ESP32-ին մուտքային և ելքային տրաֆիկը ցանցային ինտերֆեյսի մակարդակում: Ehernet պիտակ (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DCHP և այլ type)।

Հիմնականում, ESP32-ն բավականին լավ է կատարում WiFi->WiFi ռաութերի ֆունկցիան, առանց հատուկ ուշացումների անցկացնելով պարզ տրաֆիկը։ Սուբյեկտիվորեն, ESP32-ի միջոցով ռաութերում միացած հեռախոսում ուշացումներ ճանաչելի չեն։

Դաժանաբար պետք է նշեմ, որ Espressif API-ում անհնար է MAC-ով անցնել SoftAP EPS32-ով միացողների ֆիլտրացիա: Այս փոխարեն առաջարկվում է ասել «հրաժեշտ» (esp_wifi_deauth_sta) արդեն միացած STA-ներին, որոնք «անհրաժեշտ չեն»:

MAC ֆիլտրացիա միացող STA-ների համար իրականացվում է esp_wifi_deauth_sta() կանչելու միջոցով

Ընդհանուր առմամբ

Մինչև հիմա նոր բան չեմ մտածել ESP32-ի վերաբերյալ, սակայն հնարավոր է, որ որոշ մարդկանց (source-ները) արդյունքը հետաքրքրի:

Կցանկանայի նշել, որ կոդը գրել եմ բացառապես ուսումնական նպատակներով: «թափանցիկ» լինելու համար այն մասնագիտորեն ստեղծվել է այնքան էլ հարմարավետ:

Տպագրվող վահան չեմ ստեղծել, քանի որ արդեն պատրաստված վահանակների մալուխով մշակումն իմ վրա տևեց 1.5-2 ժամ:

Այստեղից էլ, եթե անելու են, ապա պետք է պատրաստված վահանակների փոխարեն հավաքել առանձին բաղադրիչներից: Այդ դեպքում չափերը կլինեն դեռ ավելի փոքր:

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster