
WiFi ցանցերի վերլուծության համար գրպանային գործիք ստեղծելու գաղափարը դրդել է .
Շնորհակալություն նրանց գաղափարի համար։ Ես ուղղակի ուրիշ անելիք չունեի։
Բոլոր աշխատանքները կատարվել են որպես հոբբի՝ զվարճանալու և ցանցային տեխնոլոգիաների ոլորտում իմ գիտելիքներն ընդլայնելու նպատակով։ Կամաց-կամաց շաբաթական 1..4 ժամ այս տարվա սկզբից։
Ես չէի նախատեսում գործնական օգտագործում: Նրանք. Սա հաքերային գործիք չէ:
Այս պահին աշխատում է բոլոր նախատեսված ֆունկցիոնալությունը։ Բոլոր աղբյուրները լիովին պատրաստ են հավաքման, . Կան նաև հավաքման հրահանգներ և այլն: Այս գրառման մեջ ես չեմ կրկնօրինակի github-ում տեղադրված տեղեկատվությունը: Ես միայն կասեմ այն, ինչ անհրաժեշտ եմ համարում առանձին նկարագրել։
Իմ կարծիքը «ունիվերսալ գործիքի» և ESP32-ի ընտրության պատճառի մասին
Ես չեմ պնդում, որ գիտեմ ճշմարտությունը։ Յուրաքանչյուր մարդ ունի իր սեփականը: Ես կփորձեմ հիմնավորել սարքավորումների իմ ընտրությունը։
օգտագործման դեպքերի համադրություն Linux (սկզբնապես Raspberry Pi) + «ծայրամասային սարքերը»՝ կառավարիչի (STM32) տեսքով + CC1110 (8051 միջուկ) և դրա մեջ հնարավոր ամեն ինչ խցկելու ծրագիրը (125 կՀց, NFC, 433 ՄՀց, USB, iButton, Bluetooth, ?) ինձ համար հարմար չթվացին։ Սակայն, Կարծես թե այն կմնա մասնավոր և փակ (flipper-zero github «Այս կազմակերպությունը չունի հանրային պահեստներ») և գնաց ոչ շատ տարածված սարքաշարի ուղղությամբ:
Միգուցե ես սխալվում եմ, և ապագայում հեղինակները ծրագրային ապահովման սկզբնական կոդը հանրությանը հասանելի կդարձնեն: Բայց եթե ոչ, ապա ես չէի գնի այդպիսի սարքավորում առանց աղբյուրի կոդի:
Իմ պահանջները «գործիքի» համար
Տուփը պետք է փոքր լինի (որքան փոքր, այնքան լավ):
Ահա թե ինչու:
- Ներկառուցված մարտկոց չի պահանջվում: 100 մԱ հոսանքի դեպքում Wifi-ով աշխատելիս ներկառուցված մարտկոցը կա՛մ մեծ կլինի, կա՛մ երկար չի աշխատի: Հետեւաբար, թող «տուփը» սնուցվի ստանդարտ էներգաբանկով: Համենայն դեպս, ես միշտ իմ գրպանում/մեքենայում դրված է Power Bank:
- Պահեք «տուփի» ներսում Linux գործիքներով, գրված է երկար տարիների ընթացքում բոլոր լեզուներով հաշվի առնելով փոքր էկրանը և կառավարման կոճակների խղճուկ հավաքածուն, իմաստ չկա: Արդյունքները կարելի է դիտել/մշակել նորմալ նոութբուքի վրա՝ ամբողջական ստեղնաշարով և էկրանով:
- Բաղադրիչները պետք է լինեն հեշտությամբ հասանելի և լայնորեն հայտնի (հասանելի SDK, բազմաթիվ օրինակներ և փաստաթղթեր):
Արդյունքում ինձ համար ընտրությունն ակնհայտ էր՝ ESP32։
Հոդվածում նշված բոլոր առաջադրանքների համար, որոնք ինձ դրդեցին քայլեր ձեռնարկել, ESP32-ի հնարավորությունները բավականին բավարար են: Թեև ամենաշատը ես ուզում եմ անել սա է.
- Խաղացեք Bluetooth-ով:
- Խաղացեք 433 մՀց տիրույթով ամենապարզ սարքաշարով (միայն ամպլիտուդային մոդուլյացիան, որը բավարար է գործնական կարիքների համար):
Ճանճը քսուքի մեջ ESP32-ի համար
- SDK (IDF) ESP32-ը մի քիչ անշնորհք է:
- Որոշ գործառույթներ (օրինակ, WiFi-ի կույտ) գալիս է առանց աղբյուրի կոդի՝ կազմված ստատիկ գրադարանների տեսքով:
- 5 ԳՀց տիրույթը չի ապահովվում, և կան որոշակի սահմանափակումներ և անշնորհքություն WiFi-ի հետ աշխատելիս:
Բայց գինը/չափը լիովին փոխհատուցում է այս թերությունները։
Ծրագրաշարի հիմնական ֆունկցիոնալությունը
Ես համառոտ նկարագրելու եմ ֆունկցիոնալությունը և իմ կարծիքը...
Կառավարեք կարգավորումները և վերբեռնեք ֆայլերը SD-ից
Ամբողջ արտաքին հսկողությունը կատարվում է պարզ վեբ էջի միջոցով, որը գործարկվում է ընտրացանկի առանձին տարրից: ESP32-ը սկսվում է WiFi AP ռեժիմով և ապահովում է էջ ֆիքսված IP հասցեով:
Թեև ESP32 միջուկները բավականին արագ են, ինչպես ցույց են տվել փորձերը, ներկառուցված վեբ ծառայության միաժամանակյա գործարկումը և, օրինակ, երթուղիչի ռեժիմը լավ չեն ընթանում: Հետևաբար, չկա դինամիկ հսկողություն, և էջը հասանելի չէ մնացած բոլոր ռեժիմներում:
Ավելին, դինամիկ հսկողությունը հետազոտական նպատակների համար անհրաժեշտ չէ:
Փարոս փաթեթների ռեժիմ
Ռեժիմները սովորական են և ոչ այնքան հետաքրքիր: Պատրաստված է «որովհետև կարող են»: Պարզապես ցուցադրելու համար:
Օրինակները հասանելի են պաշտոնական Espressif օրինակներում:
AP ցուցակի սկանավորման ռեժիմ:
Իրականում, ցանկացած սմարթֆոն կարող է դա անել:
Դե, այս ռեժիմում AP ցուցակը կփրկվի:
Փարոս սպամեր:
ESP32-ը սկսվում է որպես AP՝ թաքնված SSID-ով և պատահական MAC-ով և սկսում է ուղարկել [beacon frame] SSID-ների նախապես ստեղծված ցուցակին (ձեռքով ստեղծված կամ ավելի վաղ ստացված՝ AP ցուցակը սկանավորելու միջոցով):
WiFi փաթեթի հոտի ռեժիմ
Էսպրեսիֆի մշակողները կիրառական ծրագրային ապահովման համար ավելացրել են «օդում թռչող» բոլոր WiFi փաթեթները հետ կանչելու ֆունկցիայի միջոցով ստանալու հնարավորություն: Իրականում ոչ բոլորը, քանի որ ռեժիմը կարող եք սահմանել միայն մեկ ֆիքսված ալիքի համար:
Կան շատ խիստ ժամանակային սահմանափակումներ հետադարձ կապի ֆունկցիայի կանչի մշակման համար: Եթե դա որևէ խնդիր չի առաջացնում վիճակագրության հավաքագրման պարզ ռեժիմի համար, ապա SD քարտի վրա PCAP ֆայլերի ձայնագրման ռեժիմի համար մենք ստիպված էինք շրջել՝ կազմակերպելով ձայնագրությունը հիշողության և սեմալիստների հերթի միջոցով: Հաշվի առնելով այն յուրահատկությունը, որ հետ կանչելու գործընթացն աշխատում է մի միջուկի վրա, իսկ SD-ով գրելու գործընթացը՝ մեկ այլ միջուկի վրա։
«Աղմկոտ եթերի» դեպքում որոշ փաթեթներ կորչում են (հերթում տեղ չկա, և դրանք դեն են նետվում), բայց երեկոյան բնակարանի սովորական «եթերային ալիքներով» (5..7 ԱԵԱ տեսանելիության սահմաններում) ձայնագրությունը PCAP-ում ավարտվում է առանց փաթեթի կորստի:
Բացի այդ, PCAP-ի մոնիտորինգի և ձայնագրման համար կա փաթեթների վերնագրերում MAC ցուցակի ֆիլտրման ռեժիմ:
Օրինակ, դուք կարող եք հետևել մարդու արտաքինին ակումբում/սրճարանում, նախքան նա մտնել կամ հայտնվել ձեր տեսադաշտում: Քչերն են անջատում WiFi-ը և ավտոմատ միացումը հայտնի ԱԵԱ-ներին: (Հիմա անջատում եմ...)
Wireshark-ում գրանցված երթևեկությունը դիտելը կրթական և հետաքրքիր է քարտեզները հասկանալու համար, ամեն ինչ աշխատում է:
Գործողության եղանակը Deauth փաթեթներով
Լռելյայնորեն, այս փաթեթների ուղարկումն անջատված է libnet80211.a գրադարանում, որը գալիս է առանց աղբյուրների: Բայց սա հեշտ է ուղղել՝ մի քանի բայթ կարգավորելով: Սկզբում կասկածում էի, թե արժե՞ փակցնել կարկատան։ Բայց տարբեր վայրերում զբոսնելուց հետո, երբ աղբյուրների ուղարկման սկանավորման ռեժիմը միացված էր [վատորոշման շրջանակը], ես մտածեցի. «Ի՞նչ դժոխք»: Ավելին, esp8266-ում այս փաթեթների փաթեթը փակված չէ և github-ում հավաքներ կան esp8266-ի համար։
Շատ տեղերում (չեմ ասի, թե որտեղ) անցանկալի ԱԵԱ-ների ճնշումը կիրառվում է այս մեթոդով։ Եվ սրանք «խուլիգաններ» չեն...
Եվ ես դեռ զարմանում էի, որ իմ հեռախոսի ինտերնետ բաշխումը երբեմն չի աշխատում…
Նման փաթեթների թվին և RSSI-ին հետևելու եղանակը շատ օգտակար է հասկանալու համար, թե «որտեղ ձախ AP-ները չեն սիրում»:
Ուղղորդիչի ռեժիմ
Այս հատկանիշը, հավանաբար, ամենահետաքրքիրն է ուսումնասիրելու համար:
ESP32-ն աջակցում է միաժամանակյա աշխատանքին STA + SoftAP ռեժիմում: Հետեւաբար, դրա վրա հնարավոր է ներդնել դասական NAT երթուղիչ:
Ցանցային կույտին աջակցելու համար Espressif-ն օգտագործում է lwip գրադարանի պատառաքաղը (գործնականում առանց փոփոխության):
Բայց, լռելյայնորեն, ստանդարտ ժողովում, esp-lwip գրադարանում, netif միջերեսների «ap» (SoftAP) և «st» (STA) վերահասցեավորում չի տրամադրվում:
Իհարկե, դա հնարավոր է անել առանց NAT-ի, բայց խնդիր է առաջանում «ap» ինտերֆեյսին երկու կամ ավելի STA-ների միաժամանակյա միացման և «st» ցանցային ինտերֆեյսից «ap»-ին IP հասցեների համաժամացման հետ: Այսպիսով, դժվարությունները չարժեն, և դա ավելի հեշտ է NAT-ի միջոցով:
Ավելին, կա marting-ger-ից պատառաքաղ esp-lwip, որն ավելացնում է NAT-ի պարզ իրականացում IP4-ի համար:
Թեև իմ ձեռքերը քորում էին այն վերամշակել զուտ կոսմետիկորեն (իմ կարծիքով, առանց պատառաքաղի նախագծի ավելի հեշտ կլիներ, բայց LWIP-ի միջոցովՀՈՒԿ գործառույթները, որոնք սահմանված են հավաքման ժամանակ), բայց ծուլությունը հաղթեց, և marting-ger-ի տարբերակը օգտագործվում է այնպես, ինչպես կա:
Երթուղիչի ռեժիմում դիտվում է մուտքային և ելքային IP4 տրաֆիկը:
Մասնավորապես, դրանից այն հանվում է էկրանին ցուցադրելու և ֆայլում վիճակագրություն հավաքելու համար.
- Սարքի անվանումը, որը միացել է SoftAP ESP32-ին (DHCP փաթեթներ)
- URL-ը DNS հարցումներից (UDP պորտ 53) ESP32 սարքից, որը միացված է SoftAP-ին:
Բացի այդ, դուք կարող եք միացնել երթևեկության գրանցումը PCAP ֆայլում:
Այս ռեժիմը շատ օգտակար է, օրինակ՝ հասկանալու համար, թե ինչ է ձեր հեռախոսն ուղարկում ցանց և ուր է այն գնում:
Կարող եք նաև մտածել այս ռեժիմն օգտագործելու այլ եղանակների մասին՝ հաշվի առնելով ցանցային ինտերֆեյսի մակարդակով SoftAP ESP32-ի մուտքային և ելքային տրաֆիկը ամբողջությամբ վերահսկելու հնարավորությունը. Ethernet վերնագիր (destMAC[6]+srcMAC[6]+տեսակ[2]) + ծանրաբեռնվածություն (IP4, IP6, DCHP և այլն):
Սկզբունքորեն, ESP32-ը բավականին լավ է հաղթահարում WiFi->WiFi երթուղիչի ֆունկցիան՝ անցնելով իր միջով նորմալ երթևեկության առանց որևէ հատուկ ուշացման: Սուբյեկտիվորեն ESP32-ի երթուղիչի միջոցով միացված հեռախոսի հետաձգումները նկատելի չեն:
Ցավոք, Espressif API-ում չկա տարբերակ՝ զտիչ դնելու MAC-ով, որը միացված է EPS32 SoftAP-ին: Փոխարենը առաջարկվում է «ցտեսություն» (esp_wifi_deauth_sta) ասել արդեն միացված STA-ներին, որոնք «ցանկալի չեն»։
MAC-ի զտումը միացված STA-ների համար պետք է կատարվեր esp_wifi_deauth_sta() հասցեին զանգի միջոցով:
Վերջում
Չնայած ես ESP32-ի հետ աշխատելու առումով ոչ մի նոր բան չեմ մտածել, գուցե ինչ-որ մեկին հետաքրքիր կլինի արդյունքը (աղբյուրային կոդը):
Նշեմ, որ կոդը գրել եմ բացառապես կրթական նպատակներով: Այն հատուկ պատրաստված էր ոչ այնքան հարմար «կոտրելու» և նման բաների համար։
Ես տպագիր տպատախտակ չեմ պատրաստել, քանի որ պատրաստի տախտակները մետաղալարով զոդելու համար պահանջվեց 1.5-2 ժամ:
Եվ եթե դա անեք, ապա պետք է այն հավաքեք ոչ թե պատրաստի տախտակներից, այլ առանձին բաղադրիչներից: Այնուհետեւ չափերը նույնիսկ ավելի փոքր կլինեն:
Source: www.habr.com
