Monitorizarea pachetelor WiFi utilizând ESP8266

Spre deosebire de rețelele de comunicație ethernet, rețelele radio fără fir (inclusiv rețelele WiFi) utilizează un mediu de transmisie ce nu poate fi controlat: aerul. Din acest motiv interceptarea pachetelor se poate face de către orice dispozitiv ce poate recepționa traficul radio pe frecvența de emisie. Bineînțeles, în cazul traficului WiFi acest lucru nu înseamnă în mod automat și pierderea confidențialității transmisiei deoarece comunicația este cifrată dar se poate determina numărul de pachete pe un anume canal (încărcarea unui anume canal WiFi).

În cadrul materialului de față vom exemplifica monitorizarea pachetelor WiFi utilizând un circuit WiFi ESP8266, mai exact o placă de dezvoltare Adafruit Feather HUZZAH ESP8266 (se poate utiliza orice placă de dezvoltare bazată pe circuitul ESP8266). Sistemul de monitorizare va dispune și de un ecran OLED monocrom pe care se va afișa graficul evoluției traficului WiFi și de un buton brick ce va permite modificarea canalului WiFi. Comunicația între placa de dezvoltare și ecranul OLED se va face prin intermediul magistralei I2C iar butonul se va conecta la un pin digital al plăcii de dezvoltare.

2

Ecranul OLED va fi alimentat la 3.3V și va avea pinii Clk și Data conectați la pinii SCL (pinul 5) și SDA (pinul 4) ai plăcii de dezvoltare. Butonul va avea ieșirea (OUT) conectată la pinul 0 al plăcii de dezvoltare. ATENȚIE!!! Alimentarea butonului are firele inversate (GND la 3.3V și VCC la GND) deoarece apăsarea butonului se va citi pe 0 logic. Placa de dezvoltare are conectat pe pinul 0 un LED ce se va aprinde la fiecare apăsare a butonului.

Pentru programarea plăcii s-a folosit Arduino IDE 1.8.5 având instalate extensia ESP8266 Community versiunea 2.4.1 și biblioteca ESP8266 and ESP32 Oled Driver for SSD1306 display versiunea 4.0.0. Programul principal se bazează pe PacketMonitor, proiect scris de Stefan Kremser. Versiunea proiectului ce a fost testată este  b6b977b din 5 aprilie 2018. Proiectul necesită următoarele mici modificări în partea de inițializare:

  • Linia 21 va deveni (magistrala I2C e conectată invers față de montajul utilizat în proiect iar adresa afișajului este 0x3c):

SSD1306 display(0x3c, 4, 5);

  • Linia 25 va deveni (butonul este conectat pe linia GPIO0):

#define btn 0

După încărcarea proiectului în memoria plăcii de dezvoltare vom putea monitoriza ce canal WiFi dorim din punctul de vedere al numărului de pachete. Monitorizarea pachetelor nu se va face pentru o anumită rețea WiFi ci pentru toate rețelele WiFi ce utilizează respectivul canal. Graficul de pe ecranul OLED ilustrează istoricul monitorizării. Sistemul poate fi utilizat atât pentru a evalua numărul de pachete radio WiFi din imediata apropiere dar și pentru stabilirea canalului WiFi pentru un nou AP (se va alege, bineînțeles, canalul cel mai puțin aglomerat).

4

Prin apăsarea butonului conectat la pinul GPIO0 se va putea incrementa numărul canalului WiFi monitorizat (de la 1 la 13 ciclic).

5

O altă funcționalitate interesantă a proiectului este detecția atacurilor WiFi de tip dezautentificare. Autorul proiectului prezentat are chiar o versiune de sistem (format dintr-un modul ESP-12 și un LED) dedicat detecției acestui tip de atac specific rețelelor WiFi: DeauthDetector.

6

Mai mult decât atât, Stefan Kremser a conceput o versiune a proiectului ce se bazează pe circuitul ESP32: proiectul PacketMonitor32. Această versiune aduce în plus o facilitate extrem de interesantă: posibilitatea de a înregistra pachetele WiFi interceptate pe o memorie SD card. Conținutul cardului de memorie poate fi analizat ulterior cu un utilitar specializat gen Wireshark.

7

Proiectul prezentat se bazează pe proprietatea circuitului WiFi ESP8266 de a funcționa în mod promiscous adică de a putea intercepta pachete chiar dacă nu îi sunt adresate. Un proiect similar este și proiectul „ESP8266 Mini Sniff”.