OpenWifi, una pila Wi-Fi 802.11a/g/n open source
Hoy en día el uso de una conexión WiFi es «casi indispensable» en la mayoría de los dispositivos que requieren de una conexión a internet, y cuando funciona es excelente, pero cuando hay problemas, a menudo no se pueden resolver porque el firmware es un binario de código cerrado.
Hasta cierto punto sería entendible que este código no pueda ser manipulado por los usuarios, ya que en su gran mayoría de estos, no tendrían ni por qué tener que interactuar con el código. Pero, para los que nos gusta estar trasteando detrás de, esta parte puede ser interesante para algunos y por ende tengan la espinita de poder interactuar con el código de este.
Es por eso que el proyecto OpenWiFi tiene como objetivo ofrecer una implementación WiFi SDR (Software Defined Radio) completamente de código abierto compatible con Linux y que se ejecuta en hardware FPGA.
Sobre OpenWifi
OpenWifi se desarrolla como una implementación abierta del full stack de Wi-Fi 802.11a/g/n, la forma y modulación de la señal en la que se configura programáticamente (SDR, Software Defined Radio).
OpenWifi permite crear una implementación completamente controlada de todos los componentes de un dispositivo inalámbrico, incluidas las capas de bajo nivel, en adaptadores inalámbricos convencionales implementados a nivel de chips inaccesibles para la auditoría.
OpenWifi utiliza la arquitectura SoftMAC, lo que implica la implementación de la pila inalámbrica principal 802.11 (MAC alto) en el lado del controlador y la presencia de una capa MAC baja en el lado FPGA. La pila inalámbrica utiliza el subsistema mac80211 proporcionado por el kernel de Linux.
La interacción con SDR se realiza a través de un controlador especial, ademas de que el componente de hardware se puede construir sobre la base de los transceptores universales (RF) FMCOMMS2/3/4, ADRV1CRR o AD9361 de Xilinx FPGA y Analog Devices. El coste de la solución basada en la FPGA ZYNQ NH7020 es de 400 euros.
Por la parte de las principales características del proyecto se destacan las siguientes:
- Soporte completo para 802.11a/g/n. Planeamos admitir 802.11ax.
- Ancho de banda de 20 MHz y rango de frecuencia de 70 MHz a 6 GHz.
- Modos de funcionamiento: Ad-hoc (red de dispositivos cliente), punto de acceso, estación y monitorización.
- Implementación en el lado FPGA del protocolo de capa de enlace DCF (Distributed Coordination Function) utilizando el método CSMA/CA.
- Parámetros configurables de prioridad de acceso al canal: duración RTS/CTS, CTS-to-self, SIFS, DIFS, xIFS, slot-time, etc.
- División de tiempo basada en la dirección MAC.
- Ancho de banda y frecuencia fácilmente cambiables: 2MHz para 802.11ah y 10MHz para 802.11p.
- Posibilidad de uso como radar y detector de movimiento en interiores.
- Gestión a través de las utilidades habituales de Linux, como ifconfig e iwconfig, así como una utilidad sdrctl especializada que funciona a través de netlink y le permite controlar el funcionamiento de SDR a bajo nivel (manipular registros, cambiar la configuración de división de tiempo, etc.).
- Ancho de banda cuando se prueba a través de iperf: 40~50 Mbps para TCP y 50 Mbps para UDP.
Sobre el proyecto, cabe mencionar que hace poco se dio a conocer el lanzamiento de la versión 1.4 en la cual se proporciona soporte para Raspberry PI OS 11.2 (basado en Debian 11) y el kernel de Linux con parches de Analog Devices.
Ademas de que para los investigadores de seguridad, se proporciona la capacidad de ejecutar pruebas para simular ataques de fragmentos y krack y que se ha realizado el cambio de FPGA Vivado 2021.1 (basado en ADI HDL 2021_r1).
Otro de los cambios que se destaca es que se agregó soporte para hardware nuevo: sdrpi (HexSDR SDR en Raspberry Pi), antsdr_e200 (MicroPhase ADALM-PLUTO), neptunesdr (Zynq 7020 + AD9361) y PYNQSDR (PYNQ-Z1 + AD936X).
Tambien en esta nueva versión se proporciona una imagen de tarjeta SD genérica para dispositivos de 32 y 64 bits, asi como tambien que se ha realizado la separación del código fuente para FPGA (openwifi-hw) y los archivos de flujo de bits para FPGA (openwifi-hw-img) y se proporciono el trabajo en modo loopback.
Finalmente, si estás interesado en poder conocer más al respecto, debes saber que el código de los componentes de software, así como los diagramas y descripciones de los bloques de hardware en lenguaje Verilog para FPGA, se distribuyen bajo la licencia AGPLv3 y puedes consultarlos en el siguiente enlace.
Como nota adicional, es importante que verifiquen que acceden al proyecto correcto, ya que hay otro proyecto con el mismo nombre que en estos momentos está en su versión 2.7, pero es totalmente diferente del que hablamos aquí. Es por ello que se hace la recomendación de que accedan desde el enlace que compartimos.