Hola a todos. Hoy os traigo un cacharro barato con el que podéis realizar una serie de pruebas en vuestra red Wi-Fi. Se trata del conocido microcontrolador (SoC) ESP8266.

Figura 1: ESP8266 con funda
Figura 1: ESP8266 con funda

Este microchip lleva un módulo Wi-Fi el cual es completamente programable. Este módulo es capaz de llevar una serie de acciones en las redes que utilicen el protocolo 802.11 en su versión b/g/n en la banda de 2,4GHz.

Figura 2: ESP8266 al desnudo 🤭
Figura 2: ESP8266 al desnudo 🤭

Como se puede ver en la imagen, la propia placa ya trae un pequeño LED y un buzzer que también son programables. Se verá más adelante algunas de las funciones que tienen. Y simplemente comentar que algunas de estas placas pueden traer incorporada, o se les puede incorporar, una pequeña pantalla.

Este dispositivo se puede comprar con una simple búsqueda en internet por un precio insignificante. Es muy probable que por menos de 10€ lo podamos conseguir.

En el caso de que querer más información sobre esta familia de dispositivos, podéis consultar la siguiente web: http://esp8266.net/

Prerrequisitos

Los prerrequisitos para poder llevar a cabo este pequeño proyecto son los siguientes:

  • Conexión a internet: para descargar todo lo necesario para la implementación del proyecto.
  • Módulo ESP8266: es el dispositivo en el cual se basa el ejercicio. Hay que tenerlo. Ya se ha comentado, no es caro.
  • Puerto USB operativo: en esta ocasión transferiremos el código haciendo uso de esta conexión.
  • Punto de acceso (AP): lo utilizaremos para hacer las pruebas.
  • Ganas de cacharrear: esto último siempre!

Introducción

Alcanzado este punto, ya hemos hablado de lo que nos hace falta. Pero no de lo que vamos a hacer con ello.

El objetivo del proyecto es compilar con el IDE Arduino el código del siguiente repositorio: https://github.com/SpacehuhnTech/esp8266_deauther.

Este repositorio pertenece a Spacehuhn Technologies. En su página de GitHub podréis encontrar otros proyectos relacionados con estos dispositivos. Todo ello gracias a la iniciativa de Stefan Kremser (@spacehuhn).

Con el proyecto compilado en nuestro dispositivo ESP8266 podremos llevar a cabo una serie de tareas. Estas son las siguientes:

  • Escaneo de AP’s y estaciones en la banda de 2,4GHz.
  • Desautenticar los clientes del AP seleccionado. (La funcionalidad estrella)
  • Creación de «falsos AP».
  • Confundir a los rastreadores Wi-Fi preguntando por SSID’s especificados por nosotros.

Instalación de Arduino

Empezamos, lo primero es instalar, si no lo tenemos ya, el IDE Arduino. Debemos instalar la versión correcta para el sistema operativo que estemos utilizando.

En el caso Linux, NO lo instalaremos desde los repositorios, ya que instala una versión que no ofrece la opción «Additional Boards Manager URLs«, esto se debe a que no cumple una serie de estándares que deben seguir los paquetes alojados en los repositorios.

Por tanto, en Linux debemos descargar el fichero desde la web siguiente: https://www.arduino.cc/en/Main/Software. Una vez hecho, descomprimimos el mismo con el comando que se muestra a continuación:

tar -xf arduino-1.8.13-linux64.tar.xz

Este comando tardará un poco ya que se trata de un archivo que pesa más de 100MB. En el caso de este ejemplo el nombre del fichero es ese. Es decir, debemos asegurarnos de sustituir el nombre del fichero que se ve en el comando por el que se haya descargado, ya que para entonces puede que se trate de otra versión y el nombre del fichero no sea el mismo.

Accedemos a la carpeta que nos ha creado el comando anterior, en esta ocasión se llama arduino-1.8.13 y observamos los ficheros que nos ha creado:

Figura 3: Ficheros descomprimidos Arduino
Figura 3: Ficheros descomprimidos Arduino

Como se puede observar, destacado en la imagen anterior, existe un fichero llamado install.sh. Únicamente lo que debemos hacer es ejecutarlo.

sudo ./install.sh

Una vez instalado, ejecutamos el programa. Si todo ha ido correctamente veremos lo siguiente:

Figura 4: Primera ejecución de Arduino
Figura 4: Primera ejecución de Arduino

En el caso de Windows, la instalación es tan fácil como bajarse instalador de la web anterior y seguir las instrucciones del mismo: https://www.arduino.cc/en/Main/Software

Preparando Arduino

Antes de poder compilar el software en el dispositivo, necesitamos configurar Arduino para que no ocurra ningún error. Por tanto, lo primero que debemos hacer es ejecutar el IDE e ir a «File»->»Preferences» y añadimos la URL siguiente en el campo «Additional Boards Manager URLs»: https://raw.githubusercontent.com/SpacehuhnTech/arduino/main/package_spacehuhn_index.json

Figura 5: Configuración de URL's
Figura 5: Configuración de URL’s

Hecho esto, lo siguiente es instalar una librería. Para ello debemos ir a «Tools» -> «Board» -> «Board Manager». Situados en el lugar correcto, debemos buscar la palabra «deauther». De los resultados que se muestran instalamos «Deauther ESP8266 Boards». Es el único resultado que aparece en el momento de escribir este post:

Figura 6: Deauther ESP8266 Boards
Figura 6: Deauther ESP8266 Boards

Instalación del software

Llegados a este punto, es el momento de conectar nuestro dispositivo ESP8266 al puerto USB de nuestro ordenador. Una vez conectado, debemos ir a «Tools» -> «Board». Aquí debemos asegurarnos que aparece como Deauther ESP8266 Boards. Ojo, debe poner esto último y no ESP8266 Modules.

En el caso del dispositivo del cual dispongo se trata de una placa NodeMCU. Dependiendo del dispositivo que tengamos deberemos seleccionar una u otra placa.

Alcanzado este punto, si todo ha ido bien, ya tenemos nuestra placa correctamente configurada con Arduino. Por tanto, procedemos a descargar el proyecto de GitHub.

Aquí tenemos dos opciones. Podemos descargar la versión del software desde la página de «releases» o podemos clonar el repositorio. Con la primera opción tendremos un software estable, prácticamente sin errores, pero en caso de que hayan salido nuevas funcionalidades no las podremos disfrutar.

Por otro lado, si clonamos el repositorio, podemos obtener nuevas funciones, pero también podemos obtener los nuevos bugs que el software tenga. Por ello, yo recomiendo descargar el software ya estable, en este momento se trata de la versión 2.1.0, desde la página de «releases»: https://github.com/SpacehuhnTech/esp8266_deauther/releases

En mi caso, como yo ya lo he hecho varias veces, voy a probar con la versión 2.5.0 RC2, que es la más actual. Por tanto, descargamos el fichero «.zip«.

Una vez descargado, lo descomprimimos con el comando unzip o desde el entorno gráfico. Lo que nos sea más cómodo. El resultado debe ser el siguiente:

Figura 7: Contenido de la carpeta del proyecto
Figura 7: Contenido de la carpeta del proyecto

Dentro de la carpeta denominada esp8266_deauther encontraremos un fichero que finaliza con la extensión «.ino». Este fichero será el que abriremos con el Arduino. Al hacerlo veremos lo siguiente:

Figura 8: Proyecto abierto en Arduino
Figura 8: Proyecto abierto en Arduino

En este momento tenemos la opción de ver y modificar el código si queremos. Por ejemplo, podríamos cambiar el nombre de la red Wi-Fi que crea cuando se enciende y/o la clave de esta. Estos cambios se pueden hacer luego desde la interfaz web. Así que si no queremos complicarnos más, podemos directamente compilarlo en el dispositivo.

Para subirlo tenemos que hacer clic el siguiente icono. Debemos de asegurarnos de haber configurado todo correctamente, desde las librerías hasta la placa para que se transfiera el software a la placa con éxito:

Figura 9: Botón para subir el código
Figura 9: Botón para subir el código
Figura 10: Muestra de la salida por consola
Figura 10: Muestra de la salida por consola

Esperamos a que termine. Si todo ha salido bien ya debemos de tener el dispositivo operativo para realizar los ataques nombrados. En el caso de que no sea así, debemos observar el error que muestra la salida por consola de Arduino. Este nos dirá el por qué ha fallado.

Accediendo a la interfaz web

Si hemos alcanzado este punto sin ningún tipo de error, ya lo tenemos todo preparado para empezar a jugar. Lo primero que debemos hacer es acceder a la interfaz web del «inofensivo» USB.

Para ello, escaneamos las redes Wi-Fi. Si hemos dejado todo por defecto, debe aparecer una nueva red llamada «pwned». Es recomendable cambiar el nombre de la red una vez nos conectemos, es bastante sospechoso. La contraseña de esta red es «deauther»:

Figura 11: Conexión al Wi-Fi de ESP8266
Figura 11: Conexión al Wi-Fi de ESP8266

Una vez conectados, abrimos el navegador y accedemos a la URL http://192.168.4.1. Veremos el siguiente disclaimer en el que nos dice que seamos buenos y que solo utilicemos este proyecto para aprender sobre microcontroladores, hacking y Wi-Fi. Y que por supuesto lo utilicemos en entornos controlados en los que tengamos permiso para ello. Aceptamos el aviso, ya que hemos leído y entendido lo que dice.

Figura 12: Disclaimer
Figura 12: Disclaimer

Escaneando AP’s y estaciones

Al aceptar el anterior aviso, nos lleva a la página de la interfaz en la que podemos utilizar la función de escanear para descubrir los AP’s cercanos a nosotros. Debemos tener en cuenta que el módulo Wi-Fi no tiene un largo alcance.

Automáticamente, cuando se conecta el dispositivo al puerto USB se pone a escanear. No obstante, siempre vamos a poder escanear cuando queramos haciendo uso de esta utilidad. Al hacerlo, el LED del cual dispone la placa se ilumina de color azul. Por defecto, la funcionalidad del LED viene activada:

Figura 13: LED azul señalando la operación de escaneo
Figura 13: LED azul señalando la operación de escaneo

Al escanear veremos las redes Wi-Fi de la siguiente manera:

Figura 14: Resultados del escáner
Figura 14: Resultados del escáner

Atacando al objetivo: Desautenticando clientes

Como se puede observar en la anterior imagen, para seleccionar el AP al que realizar el ataque de desautenticación debemos marcar la casilla señalada con la flecha roja.

Seleccionado el AP objetivo, debemos hacer clic en «Attacks«, que se encuentra en la parte superior de la web. Veremos el menú que se muestra a continuación en la siguiente imagen. Si, efectivamente, vemos que en el ataque llamado «Deauth» aparece un «1» en la columna «Targets» es que se ha seleccionado el AP correctamente.

Figura 15: Página de ataques
Figura 15: Página de ataques

Es recomendable atacar solamente a un AP. Si seleccionamos más es posible que perdamos la conectividad con la interfaz web, ya que el microcontrolador dará prioridad al ataque dejando de atender a las peticiones de la web. Además, si alguno de los AP’s se encuentra en otro canal Wi-Fi al nuestro, perderemos la interfaz web seguro.

No obstante, si esto ocurre, el ataque durará por defecto un total de 600s. Si no podemos controlar el dispositivo con la interfaz web, podemos simplemente desconectarlo del puerto USB.

¿En qué se basa el ataque de desautenticación? ¿Qué impacto tiene?

El ataque de desautenticación se basa en un fallo de diseño del estándar Wi-Fi 802.11. Este consiste en enviar tramas (frames) de desautenticación al AP. El único requisito es estar cerca de este AP, ya que la dirección MAC del mismo la anuncia el propio AP en claro al canal de comunicación, el aire. Es decir, no se necesita estar conectado a la red para enviar estos frames de autenticación.

Una vez el AP reciba este tipo de frame, empezará a desautenticar a los clientes que haya conectados. Si el cliente intentan conectarse, no podrá. Le aparecerá un mensaje como que la clave introducida no es correcta o que no es posible llevar a cabo la comunicación. Por tanto no podrá utilizar el servicio. Así que se puede clasificar este ataque como Denial-of-service (DoS).

Por tanto, debemos tener mucho cuidado a la hora de seleccionar la red que vamos a auditar, ya que no sabemos que puede haber conectado. Es posible que haya algún dispositivo conectado al AP objetivo que sea critico.

Por tanto, insisto. Solo debemos utilizar esta técnica en redes en las que tengamos permiso. Dicho esto, no me hago responsable del uso que le podáis dar al conocimiento que aquí se muestra.

Ejemplo de ataque

Como se puede ver en la última imagen, lo único que nos queda es hacer clic en «START» y el dispositivo empezará a enviar las tramas al AP seleccionado. Podemos verificar que está ejecutándose el ataque ya que el LED de la placa se enciende de color rojo.

El resultado en el cliente es el siguiente:

Figura 16: Cliente desautenticado
Figura 16: Cliente desautenticado

Como se puede apreciar, todo ha salido según lo planeado. El cliente ha sido desconectado de la red que ofrecía el AP y no le es posible conectarse de nuevo.

¿Existen contramedidas ante este ataque?

La respuesta es sí. De hecho, en el año 2009 se publicó el estándar Wi-Fi 802.11w. Este estándar soluciona este problema ya que todos los frames de administración se cifran.

Por tanto, para implementar una solución se debe disponer de un AP que posea este estándar. Y por supuesto, para que esta solución tenga efecto, los clientes también deben poseer este estándar. Es decir, «deben hablar al mismo idioma».

¿Por qué se sigue dando este problema en el 2020?

Debido a la gran cantidad de dispositivos antiguos que se siguen utilizando a día de hoy, no se suele aplicar el estándar mencionado, ya que como se ha dicho anteriormente, si no hablan el mismo idioma, el cliente no será capaz de conectarse al AP.

Por otro lado, muchos de los nuevos dispositivos sí que lo traen incorporado, pero no habilitado. Estos dispositivos nuevos deben tener una opción llamada protected management frames (PMF) o similar.

Además, existen herramientas para detectar si algún dispositivo está realizando este ataque de desautenticación. De hecho, existe otro proyecto con esta finalidad para el propio ESP8266.

¿Con que objetivo se realiza este ataque?

Este ataque se puede realizar con el objetivo de derivar en un Evil twin access point o en un ataque de contraseña (Password attacks).

Por supuesto, no es necesario un dispositivo ESP8266 para realizar un ataque de desautenticación. Se puede realizar con otras herramientas más sofisticadas. Simplemente se ha mostrado este método con la intención de compartir las ganas de probar cosas diferentes.

Tanto estos dos últimos ataques mencionados, como el resto de ataques que es capaz de realizar el ESP8266 con el software que le hemos instalado, os los dejo como tareas pendientes para que descubráis de qué van y cómo funcionan.

Espero que con este post hayáis aprendido algo nuevo, y si no, que por lo menos os haya gustado.

Un handshake. Hasta la próxima.

___________________________________

Recordaros que podéis seguirnos en nuestro Twitter, Instagram y Telegram.

Si te gusta la labor que realizamos a diario…

AUTOR