Reventando la autenticación de sistema abierto WEP

El objetivo de este post es ver cómo se obtiene la clave de una red WiFi protegida por autenticación de sistema abierto (Open System Authentication) mediante un ataque de fragmentación.

En primer lugar, voy a configurar el punto de acceso para que emplee este tipo de seguridad, adicionalmente, para estas pruebas iniciales, voy a quitar el filtrado MAC que, por otra parte, se cómo saltármelo.

Accedo al punto de acceso a través de la interfaz web de gestión y veo las opciones de seguridad:

Imagen20

Las opciones de seguridad tienen que ver, no sólo con la autenticación sino con el cifrado de la comunicación. Voy a establecer la opción WEP Open System y a definir la clave de acceso:

Imagen21

Como se ve voy a usar una clave de 40 bits (5 bytes) bien sencillita. Lo bueno que tiene LuCi es que, según vas escribiendo la clave, el color es rojo y se pone en negro cuando es una clave válida. Salvo y aplico la nueva configuración.

image

Como se ve, la configuración aplicada es cifrado WEP de sistema abierto empleando una clave de 40-bits.

En un post anterior, vimos la secuencia de autenticación y asociación de 802.11, voy a echarle un ojo a las tramas intercambiadas. Para ello, voy a conectarme con el cliente legítimo (Raspberry PI) y voy a capturar la secuencia de paquetes intercambiados con Wireshark.

image

La solicitud de autenticación:

image

La respuesta a autenticación desde el punto de acceso:

image

En la interfaz de administración del punto de acceso, vemos el cliente asociado a la WiFi:

image

Naturalmente, para el resto del ejercicio vamos a asumir que conocemos el BSSID, ESSID y canal del punto de acceso así como lo relativo a las características del cifrado y autenticación empleadas. Hemos visto cómo obtener esta información en posts anteriores.

Lo primero que hago es poner la interfaz en modo monitor en el canal del punto de acceso. Una vez configurada la interfaz lo que voy a hacer es una autenticación falsa con el punto de acceso. Recordemos que el mecanismo de autenticación es Open System lo que, en esencia, significa que no hay autenticación.

image

Para hacer esta autenticación falsa voy a utilizar el comando aireplay-ng con la opción 1 (autenticación falsa):

Screenshot from 2016-11-27 20-09-36

Los parámetros proporcionados al comando aireplay-ng significan:

-1. Autenticación falsa

0. Tiempo de re-asociación (en segundos)

-e HACKME_001. ESSID de la WiFi.

-a <bssid>. Dirección MAC del punto de acceso (BSSID).

-h <MAC>. Dirección MAC de la interfaz WiFi de la máquina atacante.

wlan1mon. Interfaz en modo monitor.

Y vemos, en el punto de acceso, que la estación atacante queda asociada:

image

La estación atacante ya está autenticada con el punto de acceso y asociada al mismo. Para intentar determinar la clave WEP, voy a empezar con un ataque de fragmentación (ya haré un post con la teoría). Para ello, utilizamos el comando aireplay-ng:

image

El resultado del ataque nos indica que hemos obtenido 1500 bytes del PRGA mediante el envío de fragmentos de un paquete. El keystream correspondiente se almacena en el fichero indicado.

Vamos a crear un paquete ARP y cifrarlo con el keystream obtenido en el paso anterior. Para ello usamos el comando packetforge-ng y vamos a cifrarlo (flag –y) con el PRGA obtenido en el paso anterior.

image

Una vez que tenemos el paquete ARP (arp-req) procedemos a inyectarlo en la red. En una nueva ventana de terminal, lanzo el comando airodump-ng para capturar las respuestas a los paquetes ARP que voy a ir inyectando:

image

image

Lanzamos, en la primera ventana de terminal, el comando aireplay-ng para inyectar los paquetes ARP en la red:

image

Vemos que se va incrementando el contador de paquetes enviados y, en la salida del comando airodump-ng (segunda ventana), que aumenta el número de paquetes lanzados por nuestra estación.

Finalmente, abrimos una tercera ventana de terminal y lanzamos el comando aircrack-ng para intentar obtener la clave WEP empleada para el cifrado a partir del fichero de capturas obtenido por airodump-ng:

image

Hemos tenido éxito. Comprobamos que la clave funciona conectándonos a la WiFi desde Kali.

image

image

El cifrado WEP

En el post anterior proporcioné una introducción a la seguridad WEP en redes inalámbricas, en este post vamos a ver el detalle de cómo funciona el cifrado WEP y cuáles son las vías para atacarlo. El cifrado WEP se basa en el algoritmo RC4.

RC4 es un cifrador de flujo (stream cipher) muy simple que emplea dos algoritmos: un algoritmo de planificación de claves (KSA por sus siglas en inglés) y un generador de números seudoaleatorios (PRGA por sus siglas en inglés).

Sin entrar en muchos detalles de funcionamiento, el generador de números seudo-aleatorios se inicializa empleando la clave que es un secreto compartido entre los dos extremos de la comunicación. El cifrado se realiza mediante una operación de disyunción exclusiva (XOR) entre los bytes del mensaje y los bytes seudo-aleatorios de la secuencia generada por el algoritmo RC4. El descifrado en el extremo opuesto se realiza haciendo la operación XOR entre los bytes del mensaje cifrado y la secuencia de bytes seudo-aleatorios generados por el algoritmo RC4 en el extremo receptor que deberá ser la misma que la empleada en el extremo emisor.

El cifrado WEP se aplica, exclusivamente, a la porción de datos contenidas en las tramas de datos 802.11. Las cabeceras y las tramas de gestión se envían en claro. Tal y como vimos, WEP emplea un secreto compartido de 40 bits o 104 bits. A este secreto compartido se le prepone un vector de inicialización (IV) de 24 bits y el conjunto se utiliza como semilla para la inicialización del algoritmo de planificación de claves (KSA) de RC4.

En el cifrado de los datos de las tramas de datos 802.11 se calcula una suma de comprobación (CRC32) sobre los datos a retransmitir y los cuatro bytes resultantes se añaden al final de los datos. El conjunto de datos y suma de comprobación se cifra mediante una operación de disyunción exclusiva (XOR) entre los datos originales (incluyendo la suma de comprobación) y la secuencia de bytes que se obtiene del PRGA de RC4. El descifrado se hace de forma análoga, al descifrar se emplea la suma de comprobación para verificar que el proceso de descifrado ha sido correcto.

Resultado de imagen de WEP Encryption

En teoría, ambos extremos de la comunicación tienen que conocer tanto el secreto compartido como los vectores de inicialización para poder reconstruir el mensaje original.

image

El vector de inicialización viaja en claro en cada trama codificada con WEP mientras que el secreto compartido se establece durante la configuración inicial de los puntos de acceso y estaciones.

Sin embargo, en la práctica, lo que se usa para cifrar son las secuencias de números seudoaleatorios generados por el PRGA por lo que si somos capaces de obtenerlas, podremos descifrar el tráfico de la red sin necesidad de conocer el secreto compartido. El obtener los PRGA es, por lo tanto, uno de los objetivos en los ataques al cifrado WEP.

Para cifrar, lo que se hace es una operación XOR entre los bits del mensaje y los bits generados por el PRGA. En el caso de las operaciones XOR existen las siguientes relaciones:

image

Por lo tanto, si conocemos un texto en claro y el mismo texto cifrado, podemos obtener el PRGA empleado para el cifrado mediante una simple operación XOR. Una vez conocido el PRGA, podremos descifrar los mensajes cifrados con el vector de inicialización usado.

El problema es, por lo tanto, ser capaces de conseguir el suficiente número de PRGAs para poder descifrar las tramas intercambiadas y esto, como veremos, requiere el conocimiento de los mensajes en claro y la obtención de los correspondientes mensajes cifrados.

En los siguientes posts veremos algunas técnicas para obtener esta información.

Atacando WEP. Introducción

El estándar 802.11 define varios servicios que gobiernan la comunicación entre los dispositivos 802.11. Antes de que una estación pueda comunicarse con una red Ethernet a través de una conexión inalámbrica tienen que ocurrir varios eventos.

La secuencia de eventos es más o menos como sigue:

image

  1. Una vez encendida, la estación tiene que descubrir el punto de acceso al que se quiere conectar para obtener los parámetros de conexión. Este descubrimiento puede hacerse de dos formas: escuchando, de forma pasiva las tramas faro (beacon) de los puntos de acceso o bien, de forma activa, enviando sondas (probes) y esperando la respuesta de los puntos de acceso.
  2. Cuando encuentra el punto de acceso al que conectarse (punto de acceso con un SSID que se corresponde a alguno configurado en la estación) la estación, envía una solicitud de autenticación.
  3. El punto de acceso autentica a la estación o rechaza la autenticación (por ejemplo, como veíamos en el filtrado MAC). En este último caso, la comunicación finaliza en este punto.
  4. La estación solicita la asociación con el punto de acceso.
  5. El punto de acceso acepta la asociación con la estación.

A partir de este momento, la estación puede intercambiar datos con los dispositivos conectados a la red Ethernet. El punto de acceso debe, por lo tanto, autenticar a la estación ANTES de que ésta pueda comunicarse con el resto de los dispositivos conectados.

El estándar 802.11 incluye un protocolo: WEP (Wired Equivalent Privacy – Privacidad Equivalente a Cableado) que proporciona mecanismos de seguridad en los procesos de autenticación de las estaciones y de cifrado de los datos intercambiados. El cifrado proporcionado emplea el algoritmo RC4 con claves de 64 bits (40 bits de clave y 24 bits de vector de inicialización) o 128 bits (104 bits de clave y 24 bits de vector de inicialización). Inicialmente concebido para proporcionar un nivel de seguridad equivalente al de las redes cableadas, pronto se vio que era muy vulnerable.

El estándar 802.11 define dos tipos de autenticación WEP:

  1. Autenticación de sistema abierto (Open System Authentication)
  2. Autenticación de clave compartida (Shared Key Authentication)

Autenticación de Sistema Abierto (OSA)

Permite que cualquier dispositivo se una a la red asumiendo que el dispositivo tiene un SSID que coincide con el del punto de acceso. De forma alternativa, la estación puede usar el SSID «ANY» para asociarse con cualquier punto de acceso disponible dentro de su rango con independencia del SSID.

Los pasos en la autenticación de sistema abierto son:

  1. La estación solicita la autenticación al punto de acceso (Authentication request)
  2. El punto de acceso autentica a la estación.
  3. La estación se asocia al punto de acceso y se une a la red

Autenticación de Clave Compartida (SKA)

Requiere que la estación y el punto de acceso tengan la misma clave WEP para autenticarse.

Los pasos en la autenticación de clave compartida serían:

  1. La estación solicita la autenticación al punto de acceso.
  2. El punto de acceso envía a la estación un texto reto.
  3. La estación utiliza su clave por defecto de 64 o 128 bits para cifrar el texto y devuelve el texto reto cifrado al punto de acceso.
  4. El punto de acceso descifra el texto recibido empleando la clave por defecto correspondiente a la estación. El punto de acceso compara el texto descifrado con el reto original enviado, si coinciden, el punto de acceso autentica a la estación. Si no coincide, el punto de acceso deniega la autenticación y la estación no puede asociarse al punto de acceso ni unirse a la red.
  5. La estación se asocia al punto de acceso y se une a la red.

Tamaño de Clave y Configuración

El estándar IEEE 802.11 soporta dos tamaños de clave de cifrado: 64 y 128 bits.

El tamaño de clave de 64 bits permite una clave de 5 caracteres configurada por el usuario (40 bits) y los restantes 24 bits están configurados de fábrica y no son modificables. Esta clave se emplea para cifrar todos los datos transmitidos a través del medio inalámbrico.

En el caso de las claves de 128 bits, 104 (13 caracteres) bits son configurables por el usuario y 24 bits están configurados de fábrica. Algunos proveedores permiten emplear texto ASCII para construir las claves evitando, así, el empleo de códigos hexadecimales.

Los productos soportan, generalmente hasta cuatro claves WEP de 40 bits, expresadas, cada una, como cinco grupos de dos dígitos hexadecimales. Igualmente, algunos productos soportan hasta 4 claves de 128 bits expresadas como 13 grupos de dos dígitos hexadecimales cada uno.

Uso del cifrado WEP

Normalmente hay tres opciones de cifrado cuando se emplea WEP:

  • No usar WEP. La transmisión de datos se hace en claro y para la autenticación se emplea el sistema abierto. En la configuración de los puntos de acceso esta configuración es, normalmente, sin seguridad.
  • Usar WEP para cifrado. La transmisión de datos en la red se hace cifrada mediante la clave WEP (64 o 128 bits) y algoritmo RC4. La autenticación emplea el sistema abierto.
  • Usar WEP para cifrado y autenticación. Se cifran los datos intercambiados y el mecanismo de autenticación es de clave compartida.

Los posts precedentes del lab WiFi se centraron en acceder a una red que no empleaba WEP sino otras medidas de seguridad (ocultamiento de SSID, filtrado MAC). Los siguientes posts tratarán de como acceder a redes que están protegidas por WEP para cifrado y para cifrado y autenticación.

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.

Destapando SSIDs

Las redes WiFi son inseguras por naturaleza, el medio de transmisión es abierto y accesible. A lo largo del tiempo se han ido implementando mecanismos de seguridad para proteger la información intercambiada sobre estas redes. Algunos de estos mecanismos no han sido efectivos.

Un ejemplo de una medida ineficaz, desde el punto de vista de la seguridad es ocultar el SSID de la red. Esta técnica consiste en ofuscar el SSID de forma que el punto de acceso no lo emita en claro (ejemplo claro de seguridad por oscuridad). Sin embargo, todas las estaciones que se conectan a la red deben conocerlo para poder conectarse. Ocultar el SSID es una medida orientada no a proteger sino a ocultar.

En la configuración por defecto de los puntos de acceso WiFi, éstos retransmiten el SSID en sus tramas de faro (beacon). Sin embargo, el punto de acceso se puede configurar para que no retransmita el SSID en claro. De esta forma, sólo los clientes que conozcan el SSID podrán conectarse a la red. Ocultar el SSID, como veremos, es un mecanismo de protección muy débil y no debe considerarse, bajo ningún concepto, como una medida de seguridad. Descubrir el SSID es relativamente fácil.

Con Wireshark podemos ver el SSID emitido en las tramas faro de los puntos de acceso (asumiendo que tenemos nuestra interfaz en modo captura). El SSID aparece en texto plano en el cuerpo de la trama:

Screenshot from 2016-11-05 07-28-37

La estructura de las tramas faro es como sigue:

Imagen5

Los dos primeros bytes del SSID son la longitud (¿?) (0x000a == 10) del SSID y, a continuación, aparece el propio SSID (HACKME_001).

Vamos a ocultar el SSID de nuestra red y vamos a ver cómo podemos obtener esta información. Para deshabilitar la emisión del SSID, entramos en la administración del punto de acceso y activamos la opción correspondiente. En cada equipo puede ser distinto:

Imagen3

Ponemos la interfaz en modo captura y lanzamos de nuevo Wireshark:

Screenshot from 2016-11-05 08-47-48

Imagen6

Vemos que, en lugar de los caracteres del SSID aparecen nulos (0x00) pero, aparentemente, la longitud del SSID (10) es la del SSID oculto.

Para descubrir el SSID oculto, lo único que tenemos que hacer es escuchar de forma pasiva y esperar a que se conecte un cliente legítimo a la red. La conexión del cliente generará dos tramas (probe request, probe response) de las que podemos sacar la información que nos falta.

Por ir paso a paso:

1. Obtenemos información de la WLAN a la que nos queremos conectar (comando iwlist).

Screenshot from 2016-11-05 09-04-54

Con el comando iwlist obtenemos la dirección MAC (nos va a servir para filtrar en Wireshark) y el canal.

2. Ponemos la interfaz en modo monitor:

Screenshot from 2016-11-05 09-07-49

3. Configuramos la interfaz para que escuche en el canal 9.

Screenshot from 2016-11-05 09-09-34

4. Lanzamos Wireshark y esperamos a que se conecte un cliente (Raspberry) quedándonos con las tramas Probe Request y Probe Response:

Screenshot from 2016-11-05 10-12-06

Éste es el filtro aplicado:

Imagen7

Ésta es la información de la trama Probe Request con el SSID:

Imagen8

Y ésta es la información de la trama Probe Response, asimismo con el SSID oculto:

Imagen9

Bueno, ya hemos visto cómo averiguar el SSID oculto.

Esnifando tramas 802.11

Con el entorno ya montado, lo primero que voy a hacer va a ser capturar información de las tramas 802.11 que circulan en el espacio radioléctrico de mi casa. Por supuesto, me voy a limitar a mis propios puntos de acceso (redes WLAN domésticas y la WLAN de lab) ya que, de otra forma, estaría incurriendo en una ilegalidad flagrante. Espero que si alguien lee esto, sea consciente de la responsabilidad que adquiere al montar un entorno como éste.

Por otra parte, dado que voy a estar jugando con estos temas un tiempo he decidido substituir la interfaz USB Belkin Wireless G F5D7050 por una más moderna Alfa AWUS036H con antena de 5dBi:

31vwECQvXoL

Una vez conectada y realizada la configuración básica de red con la interfaz instalada como wlan1, tenemos lo siguiente:

Screenshot from 2016-11-01 13-08-34

Voy a probar las capacidades de escaneo de la nueva interfaz mediante el comando iwlist. Lo que veo es que capta muchas redes WiFi próximas:

Screenshot from 2016-11-01 13-13-24

Por último, antes de meternos en mayores profundidades, conviene recordar los detalles de las tramas 802.11 que vamos a capturar. El estándar 802.11 define tres tipos de tramas (más detalles aquí):

a) Tramas de gestión

Se encargan de la gestión de la comunicación entre los puntos de acceso y los clientes. Existen distintos tipos de tramas para controlar aspectos tales como la autenticación, las solicitudes de asociación y desasociación de puntos de acceso, tramas de faro (beacon) de los puntos de acceso, etc. En estas es en las que vamos a estar, en general, más interesados para la penetración en la red.

b) Tramas de control

Se encargan de asegurar el intercambio apropiado de datos entre los clientes y los puntos de acceso, permitiendo arbitrar el acceso al medio compartido.

c) Tramas de datos

Son las que transportan los datos intercambiados por los clientes.

La estructura de campos de las tramas 802.11 se presenta en la siguiente imagen:

802dot11_frame

Para empezar a capturar tramas, vamos a poner la interface (wlan1) en modo monitor. Para ello vamos a utilizar el script airmon-ng de la suite de herramientas aircrack-ng. En, primer lugar, vamos a comprobar si la interfaz que vamos a utilizar para captura es visible para airmon-ng ejecutando el script sin argumentos:

Screenshot from 2016-11-01 19-54-15

Vemos que aparece la interfaz wlan1, vamos a ponerla en modo monitor. Para ello, lanzamos el comando airmon-ng start wlan1:

Screenshot from 2016-11-01 19-56-57

El script crea una nueva interface en modo monitor (wlan1mon), esto se puede ver volviendo a ejecutar el script airmon-ng sin argumentos y, por supuesto, mediante el comando iwconfig.

Screenshot from 2016-11-01 19-59-48

Bien, ya tenemos la interface configurada en modo monitor, ahora, lo que tenemos que hacer es empezar a capturar los paquetes para analizarlos.

Para hacer la captura voy a utilizar el archiconocido programa Wireshark. Lanzamos desde la línea de comandos la ejecución del programa en segundo plano (wireshark &) y nos aparece la ventana principal del programa:

Screenshot from 2016-11-02 07-44-39

Seleccionamos la interface a través de la que se van a capturar los paquetes (wlan1mon) y pulsamos la aleta de tiburón azul de la parte superior izquierda para empezar la captura:

Screenshot from 2016-11-02 07-44-59

En pocos momentos, se puede capturar una gran cantidad de paquetes, sobre todo si hay distintas WLAN y éstas tienen una gran cantidad de tráfico. Vamos a emplear la funcionalidad de filtrado de Wireshark para ver sólo los paquetes de nuestro punto de acceso (BSSID = 00:11:50:86:64:ab):

Screenshot from 2016-11-02 08-09-29

Ahora vamos a ver sólo las tramas de gestión. Las tramas de gestión tienen el subcampo campo ‘type’ del campo Frame Control (fc) a 0:

Screenshot from 2016-11-02 08-13-25

Modificando el filtro podemos ir viendo los distintos tipos de tramas.

Ahora vamos a iniciar el ejercicio de capturar las tramas de la WLAN lab. Voy a asumir que, lo único que conozco es el SSID de la red (que es “HACKME_001”). Para capturar las tramas de esa WLAN necesito dos cosas:

  • El BSSID de la red (dirección MAC del punto de acceso).
  • El canal radio que emplea.

Lo primero que hago es poner la tarjeta en modo monitor:

Screenshot from 2016-11-04 15-37-50

A continuación lanzo el comando airodump-ng wlan1mon para ver las redes que detecta mi tarjeta y obtener la información precisa de la red cuyas tramas quiero capturar:

Screenshot from 2016-11-04 15-40-06

De la salida del comando puedo obtener el BSSID y el canal (9 en mi caso). Ahora sintonizo la monitorización a ese canal:

Screenshot from 2016-11-04 15-50-46

Lanzo una serie de pings desde la raspberry para generar tráfico en la red y lanzo Wireshark:

Screenshot from 2016-11-04 16-03-46

Ahora puedo ver las tramas que el punto de acceso devuelve a otros clientes de la red (en este caso la Raspberry) puedo obtener información interesante como las direcciones IP y direcciones MAC de los clientes y todo esto de forma silenciosa, sin hacer notar mi presencia. Esto era fácil porque el punto de acceso está completamente abierto y no emplea cifrado.

Empleando a fondo las capacidades de Wireshark, podríamos reconstruir conversaciones TCP y capturar información relevante intercambiada.