Archive for Wireless

Auditando la red wifi de mi universidad

Dentro de este pequeño mundo de la seguridad informática he tenido la suerte de conocer a grandes personas, con las cuales he compartido más de un año de trabajo dentro del equipo de SVT y a los que estoy más que agradecido por el buen hacer que han tenido conmigo. Así que, queridos lectores, permitidme dedicar el post de hoy a esta familia, que se lo merecen en toda regla.

Hoy, como veremos, tenemos por delante un artículo un poco diferente de los que estamos acostumbrados, ya que el contenido relevante es un vídeo que grabé para la defensa de mi trabajo de final de grado. Éste, tiene por objetivo demostrar como era posible extraer las credenciales de los usuarios (alumnos y profesores) de la red eduroam de la Universidad de Lleida, mi antigua universidad.

En este caso, se trata de un hecho muy importante en referencia a los términos de seguridad, ya que la misma contraseña que se emplea para acceder a la red inalámbrica también se utiliza para acceder al correo, al campus virtual y a todo lo que deriva de éste, como puede ser el expediente o todo lo relacionado con las asignaturas, la entrega de prácticas y las notas e incluso, permite iniciar sesión en nombre de la víctima en cualquier máquina puesta a disposición del público. En breves palabras, la misma contraseña no simplemente permite acceder a los datos privados del usuario sino que también permite robar la identidad de la persona afectada, en todos los ámbitos.

Desde el punto de vista técnico, la red eduroam en cuestión, está configurada con cifrado CCMP (WPA2) y con una autenticación 802.1x, conocida coloquialmente como Enterprise, que en este caso emplea la propia autenticación a través del protocolo PAP dentro de un túnel TLS (TTLS/PAP).

Los puntos principales que se tratan en el vídeo son los siguientes:

  • Configuración del terminal Android para dicha red.
  • Motivo por el cual podemos realizar la suplantación de un punto de acceso legítimo.
  • Herramientas que podría utilizar un atacante y su correspondiente aplicación.
  • Análisis del entorno real.

Aquí tenéis el enlace del video:

Una vez publicado el vídeo, significa que el Departamento de Sistemas de la universidad me ha dado autorización para hacerlo. Esto es debido a que ya ha tomado las medidas oportunas para solventar la inconveniencia.

Sin más, espero que haya sido de vuestro agrado. Y recordad, averiguar la contraseña es simplemente un daño colateral. ¿Qué pasaría si nuestro punto de acceso falso diera por válida la autenticación del usuario, le ofreciera servicio DHCP y acceso a Internet? El usuario no lo notaría, ya que creería que está en la red legítima, pero nosotros tendríamos comunicación directa con su dispositivo, sin ningún tipo restricción, y además, sobre un escenario man in the middle (MitM). ¿Lo dejamos para otro vídeo? 😉

¡Saludos!

Ferran Verdés

Enlace del vídeo: https://youtu.be/XmKokmOYdV0

La seguridad actual de la autenticación inalámbrica PSK (III)

En esta tercera entrega, llega el momento de extraer nuestras propias conclusiones sobre la seguridad actual de la autenticación PSK. Resulta que con la ejecución de Pyrit en una instancia g2.8xlarge del Cloud de Amazon, se obtiene un rendimiento interesante en el cómputo de claves:

011 - pyrit benchmark AMAZON

Tal y como se puede observar en la ilustración anterior, se cuenta con un cálculo de 115.265 claves/segundo, un incremento más que considerable en referencia a las 836 claves/s iniciales de mi máquina virtual.

Pero esto no termina aquí. Aún podemos mejorar la capcidad de cómputo y de una forma más que considerable. Existen dos opciones:

  • Ejecución de Pyrit en modo distribuido.
  • Utilizar tablas PMK precomputadas.

Una vez más, debido a la magnitud que debe respetar el artículo, es necesario focalizar nuestros esfuerzos en una de las opciones anteriores y, en este caso, se ha optado por mostrar la velocidad extrema que se consigue con las tablas PMK precomputadas.

Read more

La seguridad actual de la autenticación inalámbrica PSK (II)

Este segundo artículo, de carácter más práctico, define el conjunto de herramientas a utilizar y además, se ha esquematizado para que sea un pequeño tutorial que nos permita efectuar la instalación de las mismas en las máquinas del Cloud.

Para los lectores que no desean conocer en profundidad los detalles técnicos, se recomienda obviar esta parte y saltar directamente a la tercera.

Empecemos.

Primeramente, necesitamos localizar un herramienta que sea capaz de utilizar toda la potencia de cómputo de nuestro hardware con el fin de cumplir con nuestro objetivo, que es calcular el mayor número posible de claves PSK por segundo, tal y como hemos comentado en la primera entrega. Para lograr la tarea, se propone la utilización de Pyrit.

Pyrit

Es una herramienta muy potente que permite realizar ataques a la autenticación WPA/WPA2-PSK. Destaca por tener la propiedad, a diferencia de otras herramientas, de utilizar la potencia extra de las GPUs para acelerar de forma extraordinaria el proceso de cómputo de las claves PSK. Se encuentra escrita mayormente en Python, pero también cuenta con algunos módulos escritos en C (cpyrit-cuda, cpyrit-opencl) que se encargan de permitir el uso de las tarjetas gráficas. Además, entre otras funcionalidades, nos brinda la posibilidad de crear tablas de claves PSK precomputadas.

Por otro lado, necesitamos un software intermediario que permita la interacción con las tarjetas gráficas. En este caso, se trabajará con CUDA Toolkit.

CUDA

CUDA son las siglas de Compute Unified Device Architecture (en Castellano, Arquitectura Unificada de Dispositivos de Cómputo) y hace referencia a un framework desarrollado por NVIDIA que permite a los programadores de C y C++ aprovechar la potencia del procesamiento paralelo de sus tarjetas gráficas, con el fin de proporcionar un incremento del rendimiento del sistema.

Con las dos herramientas anteriores y conjuntamente con el Cloud, ya tenemos todos los componentes necesarios. Sólo nos queda realizar la instalación de este software a una máquina remota y en el caso del panel de NIMBIX, la secuencia de pasos a realizar es la siguiente:

Read more

La seguridad actual de la autenticación inalámbrica PSK (I)

Han pasado ya algunos años desde que el estándar 802.11i fue ratificado en Junio de 2004, y algunas cosas han cambiado desde aquel entonces, dando énfasis en la capacidad de computación de las máquinas. No obstante, sobre la misma línea, nada nuevo está presente en la autenticación WPA, que como ya sabemos se encuentra dividida en dos bloques:

  • WPA Enterprise Authentication: donde se utiliza el estándar 802.1x y normalmente un servidor Radius para efectuar Authentication, Authorization y Accounting (AAA).
  • WPA Personal Authentication: donde se emplea una passphrase precompartida por todos los integrantes de la red (similar a WEP).

En esta secuencia de artículos, primeramente veremos los fundamentos del ataque sobre la autenticación PSK (Pre Shared Key), también conocida como autenticación “Personal”, y posteriormente lo pondremos en práctica sobre el Cloud de NIMBIX y de Amazon para extraer nuestras propias conclusiones.

Partiendo de la base de tener en posesión un handshake, sólo nos queda por dar una pequeña pincelada a la generación de la PTK (Pairwise Transient Key):

Diagrama generación PTK

Como podemos ver, la clave precompartida, denominada passphrase, se pasa a una función conocida como PBKDF2, utilizada en PKCS#5, conjuntamente con los siguientes parámetros:

  • El SSID y su longitud.
  • El número de iteraciones a realizar, 4096.
  • La longitud de la clave resultante, 256.

Read more

Mejorando BSSID Finder

Siguiendo el hilo tratado en el post de hace algunos días, BSSID Finder, vamos a ver cómo podemos ampliar nuestro pequeño script, sin salir del ámbito de scapy, para que no sea meramente una aplicación informativa. En esta ocasión, he subido el código fuente en un repositorio de Github, disponible en este enlace.

¿Qué va a hacer el programa?

  1. Buscará los distintos BSSIDs para un ESSID determinado.
  2. Mostrará por pantalla los resultados encontrados, permitiendo seleccionar un BSSID específico o todos a la vez, con el objetivo de desautenticar sus correspondientes clientes inalámbricos.
  3. Finalmente, lanzará automáticamente los paquetes de desautenticación.

Veamos un ejemplo de su ejecución:

exec

Efectivamente, una vez seleccionada la opción All, realiza el envío de los correspondientes paquetes de desautenticación para todos los BSSIDs encontrados. Una vez más, Wireshark nos ayuda a corroborarlo:

wireshark

Podemos ver en la imagen que se ha aplicado un filtro para mostrar únicamente los paquetes del tipo gestión (0) y el subtipo deauthentication (12), el cual nos permite observar un paquete que tiene como Destination Address (DA) el valor broadcast y como Source Address (SA) y BSSID la dirección MAC del punto de acceso. No es casualidad, ya que la definición de estos valores se ha indicado explícitamente en el código. Veamos:

deauth_clients

En este caso, lo que tenemos es que a partir del objeto iterable bssids, vamos a enviar un número determinado de paquetes para cada bssid que contenga, definido por count, y en un intervalo de 0.2 segundos, definido por inter.

Cada paquete constará de tres capas, todas proporcionadas por scapy:

  • RadioTap(): se trata de una capa que proporciona información adicional sobre el paquete, como puede ser el canal por el que se transmite o la intensidad de señal de la fuente emisora una vez se ha recibido. Es una capa gestionada por el driver del adaptador inalámbrico y no es parte del estándar IEEE 802.11, con lo cual algunos drivers pueden simplemente ignorarla. En el código no se ha introducido información adicional al respecto.
  • Dot11(): representa propiamente el formato 802.11 y en este caso se le indica que encapsulará un paquete de desautenticación mediante las especificaciones de type=0 y subtype=12. Además, también define las direcciones MAC y su correspondiente ordenación según la especificación To DS=0 y From DS=0:

ToDS

FromDS Addr 1 Addr 2 Addr 3

Addr 4

0

0 DA SA

BSSID

0

1 DA BSSID

SA

1

0 BSSID SA

DA

1

1 RA TA DA

SA

Las siglas de la tabla hacen referencia a:

  • DA: dirección destinación.
  • SA: dirección origen.
  • RA: dirección del receptor.
  • TA: dirección del transmisor.
  • BSSID: dirección del AP.

Caso 00: la trama es parte de una red Ad-Hoc (IBSS), en que dos o más estaciones se comunican entre sí, o bien no está destinada a salir del entorno inalámbrico. Los beacon frames mantienen esta estructura y de hecho, cualquier trama de control o gestión.

Caso 01: la trama está entrando al entorno inalámbrico y proviene de un sistema de distribución (del Inglés, Distribution System (DS)). Un ejemplo puede ser una trama procedente del DS que va dirigida a la estación cliente y que será reenviada por el punto de acceso.

Caso 10: la trama abandona el entorno inalámbrico y es destinada a un nodo de la red del sistema de distribución. Un ejemplo es cuando una estación solicita una dirección IP (DHCP Request) y la solicitud es reenviada por el punto de acceso al servidor DHCP que reside en la red del sistema de distribución.

Caso 11: la trama está involucrada en una red del sistema de distribución inalámbrico (del Inglés, Wireless Distribution System (WDS)). Un ejemplo es cuando un punto de acceso se comunica con otro.

  • Dot11Deauth(): es la capa correspondiente a los paquetes de desautenticación y en la que sólo se puede especificar el motivo por el cual se solicita el proceso. Esta vez, se ha indicado “Unspecified reason” mediante el valor 1.

Podemos comprobar que, si durante la ejecución del script tenemos en correcta ejecución Airodump-ng, éste nos notificará de la captura de un handshake. Y no se acaba aquí, ya que también existe la posibilidad de efectuar un ataque DoS a las estaciones clientes si se introduce una cantidad suficientemente grande de paquetes a enviar, en lugar de 5 como se ha especificado en el ejemplo.

Finalmente, a modo conclusión, queda por destacar, una vez más, la potencialidad que nos brinda scapy y de la cual hemos sido testigos en este post.

¡Os animo a que lo probéis!

¡Saludos!

 Ferran Verdés

BSSID Finder

En este post veremos que sólo 20 líneas de python son las necesarias para complementar el comportamiento de un sniffer y lograr que éste cumpla con nuestras necesidades. No obstante, el objetivo principal es proporcionar una introducción práctica a la librería scapy.

Este script resulta útil cuando en las auditorías wifi se requiere el conocimiento de los distintos AP de la organización que están a nuestro alcance. Un objetivo claro puede ser, por ejemplo, suplantar la identidad de los puntos de acceso para el envío de paquetes de desautenticación a las estaciones clientes.

Evidentemente esta tarea se puede realizar de forma manual, simplemente lanzado airodump-ng y anotando los bssid de interés, y cruzando los dedos para que no existan demasiados puntos de acceso. No obstante, contemplar las posibilidades del script resulta interesante, ya que son muy extensas. Por ejemplo, con pocas líneas es posible automatizar el envío de los paquetes de desautenticación y al final, todo se reducirá en un cd y un enter.

Para hacer uso del script, como siempre, debemos disponer de nuestra tarjeta en modo monitor:

monitor_mode

La sentencia “airmon-ng check kill” nos permite matar los procesos que pueden interferir con nuestro modo monitor de la tarjeta. Es muy recomendable usar esta sentencia, ya que nos podemos ahorrar la posibilidad de obtener un comportamiento no deseado de la misma, y en consecuencia, una situación de confusión.

Read more