
Framework Wi-Fi para crear pruebas de concepto, experimentos automatizados, suites de pruebas, fuzzers y más.
Presentamos un marco de trabajo para realizar experimentos Wi-Fi de manera más sencilla. Se puede utilizar para crear fuzzers, implementar nuevos ataques, crear pruebas de concepto para detectar vulnerabilidades, automatizar experimentos, implementar suites de prueba, etc.
La principal ventaja del marco de trabajo es que te permite reutilizar la funcionalidad Wi-Fi de Linux para implementar ataques y/o pruebas más fácilmente. Por ejemplo, el marco de trabajo puede conectarse a redes Wi-Fi (protegidas) por ti y puede transmitir balizas por ti al probar clientes. En general, cualquier funcionalidad Wi-Fi de Linux se puede reutilizar para implementar ataques/pruebas más rápidamente. El marco de trabajo logra esto ejecutando casos de prueba sobre el daemon de espacio de usuario hostap.
Visión general del Daemon Wi-Fi y los componentes del Marco de Trabajo.
Si eres nuevo en la realización de experimentos Wi-Fi en Linux, se recomienda leer primero el Tutorial Linux de libwifi. Cuando estés implementando ataques Wi-Fi básicos sin necesidad de reutilizar la funcionalidad de Linux, el marco de trabajo proporciona ventajas limitadas y puedes considerar implementar ataques directamente en Scapy y opcionalmente usar la biblioteca libwifi.
Para usar el marco de trabajo:
Instálalo ejecutando ./setup.sh. Consulta setup para saber qué hace este script.
Lee el tutorial de uso.
Supongamos que quieres probar si un cliente encripta tramas usando una clave totalmente a cero. Esto puede ocurrir durante un ataque de reinstalación de clave. Al usar el marco de trabajo no necesitas reimplementar toda la funcionalidad de un punto de acceso, solo necesitas escribir el siguiente caso de prueba:
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
El caso de prueba anterior creará un punto de acceso al que los clientes puedan conectarse. Después de que el cliente se conecte, se enviará un nuevo tercer mensaje del handshake de 4 vías al cliente. Un cliente vulnerable comenzará a usar una clave de encriptación totalmente a cero, lo cual el caso de prueba detecta automáticamente.
Puedes ejecutar el caso de prueba anterior usando radios Wi-Fi simuladas de la siguiente manera:
./setup/setup-hwsim.sh 4
source setup/venv/bin/activate
./run.py wlan1 example-krack-zero-key
Puedes conectarte al punto de acceso creado para probarlo (red testnetwork con contraseña passphrase):
./hostap.py wlan2
Al cambiar la configuración de red, este AP se puede configurar fácilmente para usar WPA2 o WPA3 y/o configurar para usar autenticación empresarial, sin hacer ningún cambio en el caso de prueba que escribimos. Beneficios adicionales de usar el marco de trabajo en este ejemplo son:
Consulta una descripción detallada de todos nuestros ejemplos para más ejemplos.
Este trabajo fue publicado en ACM Conference on Security and Privacy in Wireless and Mobile Networks (WiSec '21):
Trabajos que han utilizado este marco de trabajo o uno similar: