Saltándonos el filtrado MAC

Una medida de protección empleada frecuentemente en las redes WiFi es el filtrado por dirección MAC. Esencialmente, el filtrado MAC consiste en establecer una lista blanca de direcciones MAC que pueden conectarse a la WiFi.

La funcionalidad de filtrado por dirección MAC impide la conexión de equipos, cuyas interfaz WiFi no tengan una dirección MAC que se encuentre en esta lista. Todos los que tenemos y administramos WiFis domésticas, cuando hemos implementado esta medida de seguridad, nos hemos dado cuenta de lo tedioso que es el mantenimiento. Cuando vienen amigos o familiares y te piden conectarse a la WiFi, es necesario dar de alta las correspondientes direcciones MAC.

Sin embargo, el filtrado MAC no proporciona una protección exhaustiva. Como veremos, es relativamente fácil saltárselo con las herramientas adecuadas.

En este caso, voy a usar el router D-Link y la WiFi HACKME_002. La configuración WiFi actual es:

Imagen5

Imagen7

Imagen9

Imagen11

Como vemos, el ESSID está oculto, no hay cifrado y el filtrado MAC está deshabilitado. Habilitamos el filtrado MAC añadiendo, como estación autorizada, la Raspberry:

Imagen13

Salvamos y aplicamos los cambios de configuración y rearrancamos el router. Como vemos, tenemos una única estación asociada que es la Raspberry.

Imagen15

Asumo que he obtenido (mediante los mecanismos ya contados en otros posts) el ESSID de la red (HACKME_002) y el canal de transmisión (9). En mi Kali, tengo configurada la interfaz wlan1 en modo monitor y la otra interfaz WiFi (wlan0) conectada a la WiFi doméstica:

Screenshot from 2016-11-10 13-27-51

Arranco Wireshark, pongo a capturar paquetes en la interfaz wlan1 e intento conectarme a la red HACKME_002 a través de la interfaz wlan0 de Kali. Despues de varios reintentos de conexión, la interfaz no logra conectarse:

Screenshot from 2016-11-10 13-33-25

En Wireshark vemos que Kali envía tramas de autenticación y el punto de acceso le devuelve tramas de error. Esta secuencia se reproduce a lo largo de varios intentos hasta que la interfaz wlan0 se vuelve a conectar a la red doméstica.

Imagen18

Imagen19

El filtrado MAC está impidiendo la conexión del equipo a la red. Para saltarnos el filtrado MAC lo que vamos a hacer es enmascarar la dirección MAC de la interfaz wlan0 de Kali con la dirección MAC de un equipo ya conectado a la red.

Para encontrar la dirección MAC de un equipo conectado a la red vamos a utilizar el comando airodump-ng:

Screenshot from 2016-11-10 14-00-27

El parámetro –c especifica el canal y el parámetro –bssid el BSSID del punto de acceso. Al cabo de un rato, cuando alguna estación empieza a transmitir obtenemos la información que necesitamos:

Screenshot from 2016-11-10 14-04-33

Ahora, usamos la utilidad macchanger para cambiar la dirección MAC de la interfaz wlan0. En primer lugar desactivamos la interfaz, lanzamos el enmascaramiento de MAC y volvemos a levantar la interfaz:

Screenshot from 2016-11-10 14-11-09

Una vez que tenemos enmascarada la dirección MAC procedemos a capturar paquetes con Wireshark y a intentar conectarnos a la WiFi:

Screenshot from 2016-11-10 14-19-22

Vemos que nos hemos conectado a la WiFi HACKME_002. Conseguido. En Wireshark se aprecian las tramas de autenticación:

Imagen20

Imagen21

Y el log del punto de acceso también muestra la asociación de la estación enmascarada:

Imagen23

Forzando la desconexión de los clientes WiFi

En el post anterior, vimos como podíamos forzar la desconexión de los clientes WiFi lanzando un broadcast de tramas de desconexión suplantando (spoofing) la dirección MAC del punto de acceso.

En este post vamos a ser más selectivos, vamos a hacer que se desconecte un cliente concreto (la Raspberry) de la red, mediante el envío de una trama de desconexión dirigida en concreto a ese cliente. Esto podría ser una forma de ataque de denegación de servicio, dirigido a ese cliente concreto.

En principio, lo que necesitaríamos conocer es:

  • Dirección MAC del punto de acceso.
  • Canal de conexión
  • Dirección MAC del cliente al que queremos desconectar.

Las dos primeras, como hemos visto, son fáciles de obtener y la tercera la obtendremos escuchando la red WiFi. Por lo tanto, vamos a poner la interface en modo monitor e iniciar la captura con Wireshark. Generaremos tráfico desde la Raspberry para capturarlo:

Screenshot from 2016-11-09 07-22-42

Imagen1

Tras una breve captura vemos las tramas ICMP correspondientes al ping:

Screenshot from 2016-11-09 17-39-41

Averiguamos que la estación a la que queremos forzar la desconexión tiene como dirección IP la 192.168.200.129 y, como dirección MAC la siguiente: 00:0f:60:06:6d:d7.

Lo que tenemos que hacer ahora es lanzar la trama de desconexión a la dirección MAC de la estación a la que queremos desconectar:

Screenshot from 2016-11-09 18-08-46

Vemos en Wireshark, las tramas de desconexión:

Imagen3

Y las tramas DHCP y ARP lo que nos permite ver la dirección IP asignada a la estación atacada:

Imagen6

Imagen5

Imagen7

Destapando SSIDs (en el lado salvaje)

En el anterior post descubríamos los SSIDs ocultos escuchando paciente y silenciosamente las peticiones de conexión enviadas desde las estaciones a los puntos de acceso. La ventaja de este mecanismo es que trabajamos escuchando, sin hacernos presentes en el entorno. Sin embargo, no en todos los casos, se tiene el tiempo o, simplemente escuchando, no conseguimos nada.

El objetivo de este post es presentar un método alternativo más rápido que consiste en inyectar paquetes de desconexión en la red para forzar la reconexión de los equipos al punto de acceso y, por lo tanto, forzar el revelado del SSID. La desventaja de este método es que puede hacer patente nuestra presencia a mecanismos de detección de intrusiones en la red inalámbrica.

Como puntos de partida, asumimos que conocemos la dirección MAC del punto de acceso y el canal empleado. Ya, en posts anteriores, vimos como obtenerlos (iwlist, iwconfig, etc.) por lo que no voy a volver a describirlo.

Para empezar, ponemos la interfaz wlan1 en modo monitor y la sintonizamos al canal del punto de acceso.

Screenshot from 2016-11-09 07-22-42

Para inyectar las tramas de desconexión, vamos a usar la herramienta aireplay-ng del conjunto de herramientas aircrack-ng. Arrancamos, en primer lugar Wireshark y lo ponemos a capturar paquetes. Desde una terminal, lanzamos el comando necesario para inyectar las tramas de desconexión:

Screenshot from 2016-11-09 07-36-41

Destripando el comando anterior:

  • La opción 0 indica que se trata de un ataque de desconexión forzada.
  • El número 5 es el número de tramas de desconexión lanzadas.
  • El parámetro –a establece la dirección MAC del punto de acceso a la que vamos a hacer spoofing.
  • El flag ignore-negative-one sirve para ignorar el error en caso de que no pueda determinarse el canal de la interfaz.
  • Por último se pasa la interfaz empleada para la inyección.

Poniendo el filtro adecuado en Wireshark, podemos ver las tramas de broadcast de desconexión enviadas:

Screenshot from 2016-11-09 07-48-44

Y, cambiando el filtro de nuevo para ver todas las tramas (que no sean tramas faro) emitidas o recibidas por nuestro punto de acceso, podemos ver como nuestra Raspberry se desconecta y vuelve a conectarse revelándonos el ESSID en la petición de conexión.

Screenshot from 2016-11-09 07-54-33

Simple y eficaz.