
Uno script Python per offuscare le reti wireless.
Uno script Python per offuscare reti wireless
''' Avvertenza: non sono un programmatore di professione, né mi considererei tale
La lista degli SSID comuni è stata presa da https://wigle.net/gps/gps/Stat La lista dei vendor OUI è stata estratta da http://standards.ieee.org/develop/regauth/oui/oui.txt per i vendor noti (netgear, cisco, linksys, d-link, atheros, ralink, apple)
Questa idea è nata ispirandosi al FakeAP di Black Alchemy http://www.blackalchemy.to/project/fakeap/ e ad airraid di Pettinger http://www.pettingers.org/code/airraid.html Parte della logica per l'analisi delle informazioni necessarie dai pacchetti è stata presa da Leandro Meiners ([email protected]) di Core Security Technology, dal suo script Power-Saving DoS
La differenza principale tra queste implementazioni riguarda i requisiti hardware e il modo in cui viene generato il punto di accesso fittizio.
FakeAP genera punti di accesso fittizi creando un access point tramite iw e ifconfig con una scheda wireless basata su PRISM. Il problema è che i driver PRISM sono in gran parte deprecati nella maggior parte delle distribuzioni moderne. Anche con un driver funzionante e una scheda PRISM, non sono riuscito a far funzionare FakeAP così com'era.
AirRaid è quasi identico al funzionamento di FakeAP. Tuttavia, è pensato per schede basate su Atheros e utilizza driver e utility madwifi per creare punti di accesso fittizi. Il progetto Madwifi sembra essere in gran parte in declino a favore dei driver ath5/9k. Così com'era, AirRaid non funzionava più con la mia scheda atheros.
Un altro problema di queste implementazioni era la velocità. Ogni volta che veniva creato un punto di accesso fittizio, il dispositivo wireless doveva essere spento/riacceso e riconfigurato.
Questa implementazione differisce in diversi aspetti. Non è totalmente legata a hardware specifico come FakeAP o AirRaid. Invece di creare un punto di accesso fittizio modificando le impostazioni dell'adattatore wireless e dover resettare e riconfigurare il dispositivo, sfrutta le schede wireless che supportano la packet injection.
Questo aiuta in molti modi. Supporta molti più adattatori e anche molti driver moderni che supportano la packet injection e la modalità monitor (rtl8187, ath5k, ath9k, la maggior parte dei ralink, ecc...). In breve, qualsiasi dispositivo con driver che consentono all'adattatore di funzionare in modalità monitor tramite airmon-ng può usarlo. Poiché utilizza la packet injection invece di creare realmente un access point, inietta pacchetti che sembrano provenire da veri punti di accesso.
Questo è il mio primo progetto in Python, quindi è probabile che ci siano difetti, inefficienze, possibili modi per individuare quali AP sono quelli fittizi. Ho intenzione di migliorarlo nel tempo man mano che verranno scoperti problemi e richieste di miglioramento.
Potrebbero servire meno requisiti per farlo funzionare, ma so che funziona con i seguenti:
Schede basate su Atheros con ath5k e ath9k Chipset Realtek 8187 (es. Alfa AWUS 036H) La maggior parte dei chipset Ralink
Questo è stato scritto in Python 2.7 con Scapy 2.2.0. Non ho una conoscenza approfondita di Scapy, dato che la loro documentazione è piuttosto scarsa, quindi se qualcosa è stato fatto in modo errato, fatemelo sapere. airmon-ng è stato usato per creare le interfacce monitor che consentono la packet injection.
Mi rendo anche conto che questa descrizione è più lunga del codice stesso.
Per eseguire:
Richiede Python 2.7, Scapy 2.2.0, scheda wireless con driver che supportano la packet injection
#####AVVISO VERSIONE INIZIALE#####
Praticamente non c'è logging per questo, dato che non conosco molto bene scapy a questo punto, e quando invia beacon frame e probe response, scrive "Sent 1 packets" sul terminale. Quando inviamo più pacchetti al secondo, questo inonda lo schermo con "Sent 1 packets". Sto attualmente cercando un modo per aggirare il problema e fornire un logging più utile.
Assicurati di avere una scheda di rete wireless in modalità monitor con capacità di packet injection. Io uso airmon-ng della suite aircrack-ng per farlo:
airmon-ng start <interface>
che dovrebbe mostrarti la nuova interfaccia virtuale di monitoraggio creata (qualcosa come mon 0)
FuzzAP.py accetta quattro argomenti obbligatori. Il primo argomento è l'interfaccia da usare, il secondo è il numero di punti di accesso fittizi da generare, il terzo è un file di OUI, il quarto è un file pieno di SSID
sudo python fuzzap.py <interface> <number of APs> <OUI file> <ssid file>
Se vuoi eseguirlo direttamente dalla repository:
sudo python fuzzap.py <interface> <number of APs> common.txt ssid.txt
Ecco come appare dal punto di vista di un client: http://imgur.com/QsoFP1a
QUESTO SOFTWARE È FORNITO DAI TITOLARI DEL COPYRIGHT E DAI CONTRIBUTORI "COSÌ COM'È" E OGNI GARANZIA ESPRESSA O IMPLICITA, INCLUSI, MA NON LIMITATI A, LE GARANZIE IMPLICITE DI COMMERCIABILITÀ E IDONEITÀ PER UNO SCOPO PARTICOLARE, SONO DECLINATE. IN NESSUN CASO I TITOLARI DEL COPYRIGHT O I CONTRIBUTORI SARANNO RITENUTI RESPONSABILI PER DANNI DIRETTI, INDIRETTI, INCIDENTALI, SPECIALI, ESEMPLARI O CONSEQUENZIALI (INCLUSI, MA NON LIMITATI A, APPROVVIGIONAMENTO DI BENI O SERVIZI SOSTITUTIVI; PERDITA DI UTILIZZO, DATI O PROFITTI; O INTERRUZIONE DELL'ATTIVITÀ) QUALUNQUE SIA LA CAUSA E SU QUALSIASI TEORIA DI RESPONSABILITÀ, SIA IN CONTRATTO, RESPONSABILITÀ OGGETTIVA O ILLECITO (INCLUSI NEGLIGENZA O ALTRO) DERIVANTI IN QUALSIASI MODO DALL'USO DI QUESTO SOFTWARE, ANCHE SE AVVISATI DELLA POSSIBILITÀ DI TALI DANNI. '''
TODO:
Traffico simulato tra 'AP' e 'client' Salto di canale