Παιχνίδι με Wi-Fi στο ESP32

Παιχνίδι με Wi-Fi στο ESP32

Αυτό που μου έδωσε την ιδέα να φτιάξω ένα εργαλείο τσέπης για την ανάλυση δικτύων WiFi ήταν αυτό το άρθρο.

Τους ευχαριστώ για την ιδέα. Απλώς δεν είχα τίποτα να κάνω.

Όλη η δουλειά έγινε ως μέρος ενός χόμπι με σκοπό να διασκεδάσω και να διευρύνω τις γνώσεις μου στον τομέα των δικτυακών τεχνολογιών. Σιγά σιγά, 1..4 ώρες την εβδομάδα, από την αρχή του τρέχοντος έτους.
Δεν σχεδίαζα καμία πρακτική χρήση. Εκείνοι. Αυτό ΔΕΝ είναι εργαλείο χάκερ.

Αυτή τη στιγμή, όλες οι προγραμματισμένες λειτουργίες λειτουργούν. Όλες οι πηγές, πλήρως έτοιμες για συναρμολόγηση, δημοσιεύτηκε εδώ. Υπάρχουν επίσης οδηγίες συναρμολόγησης κ.λπ. Σε αυτήν τη σημείωση, δεν θα αντιγράψω τις πληροφορίες που δημοσιεύονται στο github. Θα σας πω μόνο αυτό που θεωρώ απαραίτητο να περιγράψω ξεχωριστά.

Η άποψή μου για το «καθολικό εργαλείο» και ο λόγος επιλογής του ESP32

Δεν ισχυρίζομαι ότι είμαι η αλήθεια. Ο καθένας έχει το δικό του. Θα προσπαθήσω να δικαιολογήσω την επιλογή του υλικού μου.

Προτείνεται στο άρθρο η περίπτωση χρήσης ενός συνδυασμού Linux (αρχικά Raspberry Pi) + "περιφερειακά" με τη μορφή ελεγκτή (STM32) + CC1110 (8051 πυρήνας) και το σχέδιο να στριμώξουμε ό,τι είναι δυνατό εκεί (125kHz, NFC, 433mHz, USB, Το iButton, bluetooth, ?) δεν μου φάνηκε κατάλληλο. Ωστόσο, αυτη η εργασια Φαίνεται ότι θα παραμείνει ιδιωτικό και κλειστό (flipper-zero github "Αυτός ο οργανισμός δεν έχει δημόσιους χώρους αποθήκευσης.") και πήγε προς το μη πολύ κοινό υλικό.

Ίσως κάνω λάθος και στο μέλλον οι συγγραφείς θα κάνουν τις πηγές λογισμικού διαθέσιμες στο κοινό. Αλλά αν όχι, τότε δεν θα αγόραζα ένα τέτοιο κομμάτι υλικού χωρίς τον πηγαίο κώδικα.

Οι απαιτήσεις μου για το "εργαλείο"

Το κουτί πρέπει να είναι μικρό (όσο μικρότερο τόσο το καλύτερο).

Επομένως:

  • Δεν χρειάζεται ενσωματωμένη μπαταρία. Με ρεύμα > 100 mA όταν εργάζεστε με Wi-Fi, η ενσωματωμένη μπαταρία είτε θα είναι μεγάλη είτε δεν θα διαρκέσει πολύ. Επομένως, αφήστε το "κουτί" να τροφοδοτείται από μια τυπική τράπεζα ισχύος. Τέλος πάντων, έχω πάντα ένα power bank στην τσέπη/αυτοκίνητό μου.
  • Κρατήστε ένα "κουτί" Linux με εργαλεία μέσα, γραμμένο εδώ και πολλά χρόνια σε όλες τις γλώσσες Με μια μικρή οθόνη και ένα πενιχρό σύνολο κουμπιών ελέγχου, δεν έχει νόημα. Τα αποτελέσματα μπορούν να προβληθούν/επεξεργαστούν σε κανονικό φορητό υπολογιστή με πλήρες πληκτρολόγιο και οθόνη.
  • Τα στοιχεία πρέπει να είναι εύκολα προσβάσιμα και ευρέως γνωστά (διαθέσιμο SDK, πολλά παραδείγματα και τεκμηρίωση).

Ως αποτέλεσμα, για μένα, η επιλογή ήταν προφανής - ESP32.

Για όλες τις εργασίες που αναφέρονται στο άρθρο που με ώθησαν να αναλάβω δράση, οι δυνατότητες του ESP32 είναι αρκετά επαρκείς. Αν και το περισσότερο που θέλω να κάνω είναι:

  • Παίξτε με Bluetooth.
  • Παίξτε με το εύρος των 433mHz με το απλούστερο υλικό (μόνο διαμόρφωση πλάτους, που αρκεί για πρακτικές ανάγκες).

Fly in the ointment στο ESP32

  • Το ESP32 SDK (IDF) είναι κάπως αδέξιο.
  • Ορισμένες από τις λειτουργίες (στοίβα WiFi, για παράδειγμα) παρέχονται χωρίς πηγαίο κώδικα με τη μορφή συναρμολογημένων στατικών βιβλιοθηκών.
  • Η ζώνη των 5 gHz δεν υποστηρίζεται και υπάρχουν ορισμένοι περιορισμοί και αδεξιότητα στην εργασία με WiFi.

Αλλά η τιμή/μέγεθος αντισταθμίζει πλήρως αυτές τις ελλείψεις.

Κύρια λειτουργικότητα λογισμικού

Θα περιγράψω εν συντομία τη λειτουργικότητα και τη γνώμη μου για...

Διαχείριση ρυθμίσεων και μεταφόρτωση αρχείων από SD

Όλος ο εξωτερικός έλεγχος γίνεται μέσω μιας απλής ιστοσελίδας, η οποία εκκινείται σε ξεχωριστό στοιχείο μενού. Το ESP32 ξεκινά σε λειτουργία WiFi AP και εμφανίζει μια σελίδα σε μια σταθερή διεύθυνση IP.

Αν και οι πυρήνες ESP32 είναι αρκετά γρήγοροι, όπως έχουν δείξει πειράματα, η ταυτόχρονη λειτουργία της ενσωματωμένης υπηρεσίας Web και, για παράδειγμα, η λειτουργία του δρομολογητή δεν είναι πολύ συμβατές. Επομένως, δεν υπάρχει δυναμικός έλεγχος και η σελίδα δεν είναι διαθέσιμη σε όλες τις άλλες λειτουργίες.
Επιπλέον, ο δυναμικός έλεγχος δεν χρειάζεται για ερευνητικούς σκοπούς.

Τρόπος εργασίας με πακέτα Beacon

Οι λειτουργίες είναι απλές και όχι πολύ ενδιαφέρουσες. Κατασκευάστηκε "γιατί είναι δυνατό". Για έλεγχο.
Υπάρχουν παραδείγματα στα επίσημα παραδείγματα Espressif.

Λειτουργία σάρωσης λίστας AP.
Στην πραγματικότητα, οποιοδήποτε smartphone μπορεί να το κάνει αυτό.
Λοιπόν, σε αυτήν τη λειτουργία η λίστα AP θα αποθηκευτεί.
Beacon spammer.
Το ESP32 ξεκινά ως AP με ένα κρυφό SSID και ένα τυχαίο MAC και ξεκινά την αποστολή [beacon frame] σύμφωνα με μια προ-δημιουργημένη λίστα SSID (που δημιουργήθηκε χειροκίνητα ή αποκτήθηκε νωρίτερα με σάρωση της λίστας AP)

Λειτουργία ανίχνευσης πακέτων WiFi

Οι προγραμματιστές Espressif έχουν προσθέσει τη δυνατότητα για το λογισμικό εφαρμογών να λαμβάνει όλα τα πακέτα WiFi που «πετούν στον αέρα» μέσω της λειτουργίας επανάκλησης. Στην πραγματικότητα όχι όλα, αφού μπορείτε να ρυθμίσετε τη λειτουργία μόνο για ένα σταθερό κανάλι.

Επιβάλλονται πολύ αυστηροί χρονικοί περιορισμοί για την επεξεργασία μιας λειτουργίας επανάκλησης. Εάν αυτό δεν προκαλεί προβλήματα στη λειτουργία απλής συλλογής στατιστικών στοιχείων, τότε για τη λειτουργία εγγραφής αρχείων PCAP στην κάρτα SD έπρεπε να τσιμπήσω, οργανώνοντας την εγγραφή μέσω μιας ουράς στη μνήμη και στους σηματοφόρους. Λαμβάνοντας υπόψη την ιδιαιτερότητα ότι η διαδικασία που καλεί την επανάκληση εκτελείται σε έναν πυρήνα και η διαδικασία που γράφει σε SD σε έναν άλλο.

Κατά τη διάρκεια του "θορυβώδους αέρα", ορισμένα πακέτα χάνονται (δεν υπάρχει χώρος στην ουρά και απορρίπτονται), αλλά με έναν τυπικό "αέρα" ενός διαμερίσματος το βράδυ (5..7 AP εντός ορατότητας), εγγραφή σε PCAP ολοκληρώνεται χωρίς απώλεια πακέτων.

Επιπλέον, για την παρακολούθηση και την εγγραφή PCAP, υπάρχει μια λειτουργία φιλτραρίσματος που βασίζεται στη λίστα MAC στις κεφαλίδες των πακέτων.

Για παράδειγμα, μπορείτε να παρακολουθείτε την εμφάνιση ενός ατόμου σε ένα κλαμπ/καφετέρια πριν ακόμη εισέλθει ή εμφανιστεί στον ορίζοντα. Λίγοι άνθρωποι απενεργοποιούν το WiFi και τις αυτόματες συνδέσεις σε γνωστά AP. (Τώρα το κλείνω..)

Η προβολή καταγεγραμμένης κίνησης στο Wireshark είναι εκπαιδευτική και ενδιαφέρουσα για την κατανόηση των χαρτών - όλα λειτουργούν.

Λειτουργία για εργασία με πακέτα Deauth

Από προεπιλογή, η αποστολή αυτών των πακέτων απαγορεύεται στη βιβλιοθήκη libnet80211.a, η οποία παρέχεται χωρίς πηγές. Αλλά είναι εύκολο να το διορθώσετε τροποποιώντας μερικά κομμάτια. Στην αρχή αμφέβαλα αν άξιζε να δημοσιεύσω patch. Αλλά αφού περπάτησα σε διάφορα μέρη με ενεργοποιημένη τη λειτουργία σάρωσης καρέ κατάργησης ταυτότητας, σκέφτηκα: «τι διάολο». Επιπλέον, στο esp8266 η παράδοση αυτών των πακέτων δεν είναι κλειστή και υπάρχουν συγκροτήματα στο github για το esp8266.

Σε πολλά μέρη (δεν θα πω πού) χρησιμοποιείται η καταστολή των ανεπιθύμητων AP μέσω αυτής της μεθόδου. Και αυτοί δεν είναι «νταήδες»...

Και εξεπλάγην επίσης που η διανομή μου στο Διαδίκτυο από το τηλέφωνό μου δεν λειτούργησε σε ορισμένα μέρη...

Η λειτουργία παρακολούθησης του αριθμού και του RSSI τέτοιων πακέτων είναι πολύ χρήσιμη για να καταλάβετε "πού δεν αρέσει στα αριστερά AP".

λειτουργία δρομολογητή

Αυτό το χαρακτηριστικό είναι ίσως το πιο ενδιαφέρον από όλα για εξερεύνηση.

Το ESP32 υποστηρίζει ταυτόχρονη λειτουργία σε λειτουργία STA + SoftAP. Επομένως, μπορείτε να εφαρμόσετε έναν κλασικό δρομολογητή NAT σε αυτό.

Για να υποστηρίξει τη στοίβα δικτύου, το Espressif χρησιμοποιεί ένα πιρούνι (σχεδόν αμετάβλητο) της βιβλιοθήκης lwip.

Όμως, από προεπιλογή, στην τυπική έκδοση, η βιβλιοθήκη esp-lwip δεν παρέχει προώθηση μεταξύ των διεπαφών netif 'ap' (SoftAP) και 'st' (STA).

Φυσικά, μπορείτε να το κάνετε χωρίς NAT, αλλά υπάρχει πρόβλημα με τη σύνδεση δύο ή περισσότερων STA στη διεπαφή «ap» και τον συγχρονισμό των διευθύνσεων IP από τη διεπαφή δικτύου «st» στο «ap». Άρα οι δυσκολίες δεν αξίζουν και είναι πιο εύκολο μέσω ΝΑΤ.

Επιπλέον, υπάρχει ένα fork esp-lwip από το martin-ger, το οποίο προσθέτει μια απλή υλοποίηση του NAT για IP4.

Αν και τα χέρια μου φαγούραζαν για να το ξαναφτιάξω καθαρά καλλυντικά (κατά τη γνώμη μου, ήταν πιο εύκολο χωρίς πιρούνι του έργου, αλλά μέσω LWIPHOOK λειτουργίες που ορίζονται κατά τη συναρμολόγηση), αλλά επικράτησε η τεμπελιά και η επιλογή από το martin-ger χρησιμοποιείται ως έχει.

Στη λειτουργία δρομολογητή, προβάλλεται η εισερχόμενη και η εξερχόμενη κίνηση IP4.

Συγκεκριμένα, εξάγονται από αυτό τα ακόλουθα για εμφάνιση στην οθόνη και συλλογή στατιστικών στοιχείων σε ένα αρχείο:

  • Όνομα της συσκευής που συνδέθηκε στο SoftAP ESP32 (πακέτα DHCP)
  • URL από αιτήματα DNS (θύρα UDP 53) από συσκευή συνδεδεμένη στο SoftAP ESP32.

Επιπλέον, μπορείτε να ενεργοποιήσετε την εγγραφή κυκλοφορίας σε ένα αρχείο PCAP.

Αυτή η λειτουργία είναι πολύ χρήσιμη, για παράδειγμα, για να κατανοήσετε, για παράδειγμα, τι στέλνει το τηλέφωνό σας στο δίκτυο και πού πηγαίνει.

Μπορείτε να σκεφτείτε άλλους τρόπους χρήσης αυτής της λειτουργίας, λαμβάνοντας υπόψη την ικανότητα πλήρους ελέγχου της εισερχόμενης και εξερχόμενης κίνησης softAP ESP32 σε επίπεδο διεπαφής δικτύου: Επικεφαλίδα Ehernet (destMAC[6]+srcMAC[6]+τύπος[2]) + ωφέλιμο φορτίο (τύπος IP4, IP6, DCHP κ.λπ.).

Καταρχήν, το ESP32 αντιμετωπίζει αρκετά καλά τη λειτουργία του δρομολογητή WiFi->WiFi, περνώντας από την κανονική κίνηση χωρίς ιδιαίτερες καθυστερήσεις. Υποκειμενικά, οι καθυστερήσεις σε ένα τηλέφωνο που είναι συνδεδεμένο μέσω δρομολογητή σε ESP32 δεν είναι αισθητές.

Δυστυχώς, το Espressif API δεν έχει τη δυνατότητα να ρυθμίσει ένα φίλτρο για MAC που είναι συνδεδεμένο στο SoftAP EPS32. Αντίθετα, προτείνεται να πούμε «αντίο» (esp_wifi_deauth_sta) σε ήδη συνδεδεμένα STA που «δεν είναι επιθυμητά».

Το φιλτράρισμα κατά MAC για τα συνδεδεμένα STA έπρεπε να γίνει μέσω της κλήσης esp_wifi_deauth_sta()

Εν κατακλείδι

Αν και δεν βρήκα κάτι νέο στο πλαίσιο της εργασίας με το ESP32, ίσως το αποτέλεσμα (πηγαίος κώδικας) να είναι ενδιαφέρον για κάποιον.

Θα ήθελα να σημειώσω ότι ο κώδικας γράφτηκε αποκλειστικά για εκπαιδευτικούς σκοπούς. Για "χακάρισμα" κ.λπ., έγινε σκόπιμα όχι πολύ βολικό.

Δεν έφτιαξα πλακέτα τυπωμένου κυκλώματος γιατί χρειάστηκαν 1.5-2 ώρες για να κολλήσω τα τελειωμένα κασκόλ με σύρμα.

Και αν το κάνετε, πρέπει να το συναρμολογήσετε όχι από έτοιμες σανίδες, αλλά από μεμονωμένα εξαρτήματα. Τότε οι διαστάσεις θα είναι ακόμη μικρότερες.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο