Fundamentos del hacking Wi-Fi

Share
Fundamentos del hacking Wi-Fi
audio-thumbnail
Neroche Earth Druid
0:00
/174.347041

El acceso no autorizado a una red está regulado por ley, tiene consecuencias legales y conduce a una sanción adecuada. No soy responsable del uso malicioso de esta información. Quedas avisado.

  • Dificultad: Bastante fácil
  • Sistema operativo: Debian 13
  • Herramientas requeridas:
    1. Un dispositivo de red que permite el modo monitor (un adaptador USB o una tarjeta de red).
    2. network-manager
    3. macchanger
    4. aircrack-ng

Bienvenidos a una nueva lección sobre el hackeo de Wi-Fi, donde aprenderás a descifrar contraseñas de Wi-Fi y a realizar la desautenticación en redes WPA/WPA-2. Antes de empezar, este ataque se realizará usando una distribución GNU/Linux, Debian siendo específicos, así que algunos comandos que verás a continuación pueden variar según la distribución que utilices. Sin más detalles, vamos a echar un vistazo a cómo hackear redes Wi-Fi.

Que es el "Wi-Fi"?

Wi-Fi es una familia de redes inalámbricas basadas en el protocolo "IEEE-802.11". El protocolo "IEEE-802.11" forma parte de los estándares LAN (Red de Área Local) e implementa funciones como el control de acceso a medios (Media Access Control, "MAC"). El protocolo Wi-Fi permite la transmisión de datos mediante radiofrecuencia, que viaja por aire, lo que significa que, en lugar de ser como redes cableadas donde los paquetes se envían específicamente al emisor/receptor, en las redes Wi-Fi todos pueden ver o "escuchar" los paquetes que se envían por el aire, lo cual es una vulnerabilidad en sí misma y puede provocar vectores de ataque como los que veremos a continuación.

Pero antes de empezar, hablemos de cómo funciona la autenticación en las redes Wi-Fi, ya que antes de empezar a hackear, primero necesitamos entender qué está ocurriendo. Esto no es un libro de cocina, es una lección, así que primero deberemos entender qué estamos haciendo. Para entender la autenticación y cómo funciona (para poder romperla), debemos saber que la autenticación ocurre en 4 pasos llamados "Four-Way Handshake" (que literalmente significa "apretón de manos en 4 direcciones"). Se llama así porque se envían 4 paquetes, cada uno con cierta información. A continuación puedes ver una representación de cómo funciona la autenticación Wi-Fi (también llamada "EAPOL", que significa "Extensible Authentication Protocol over LAN", es decir, "Protocolo de autenticación extensible sobre LAN").

1. Enviando el ANonce

El primer paquete se envía desde el Punto de Acceso ("AP", que normalmente también es un router) al cliente (en este caso, nuestro ordenador). Se llama "ANonce" (Authenticator Nonce), y es un número pseudo-aleatorio ("pseudo" significa "falso", no tan aleatorio) generado durante el proceso de autenticación para asegurar que cada sesión sea única y segura.

2. Enviando el SNonce + MIC + RSNIE

Antes de recibir el paquete, el cliente ya estaba calculando su propio número pseudoaleatorio ("SNonce"), pero la ecuación no se completa hasta que el cliente recibe el "ANonce" del AP. Una vez recogido, el cliente calcula un número (que no es el "SNonce") llamado "PTK", que significa "Clave Transitoria por Pares" (en inglés "Pairwise Transient Key"). Es el resultado de combinar la dirección ANonce + SNonce + MAC del AP + dirección MAC del cliente + clave A derivada usando el algoritmo PBKDF2, que se llama "PMK".

Tras obtener el PTK, esta clave se utilizará para cifrar los datos que pasan por el cliente y el AP. El cliente entonces calcula el MIC (que significa "Message Integrity Code", es decir, "Código de integridad del mensaje"), que es un mensaje que, al igual que los hashes, garantiza la integridad del mensaje que se envía a través de la red. El MIC se calcula utilizando el algoritmo HMAC-SHA1 con el PMK, ANonce y SNonce.

Usando esta clave (la Clave Transitoria por Pares, "PTK") para cifrar la comunicación unicast (la comunicación que va de un cliente al AP), el cliente envía el SNonce junto con el MIC para permitir que el Punto de Acceso genere también un PTK para la comunicación cifrada.

3. Enviando el GTK + MIC

Tras obtener el SNonce y el MIC, el AP valida que el MIC es correcto y luego genera el PTK basado en el SNonce enviado por el cliente + el resto de los datos necesarios. Luego, (en caso de que no se hubiera generado antes) el AP genera una clave llamada "GTK" (Group Temporary Key, en español "Clave temporal de grupo"), que se usará para cifrar tráfico de difusión y multicast (tráfico que va del AP a varios clientes). Esto se genera usando el GMK ("Clave Maestra de Grupo" en inglés "Group Master Key", que se calcula por el propio AP), y luego se envía al cliente junto con otro MIC usando el PTK.

4. Acknowledgement (Confirmación)

Finalmente, el cliente recibe la clave y envía otro mensaje al AP confirmando que ha recibido el GTK, completando el handshake en 4 direcciones.

Pero entonces, ¿cómo se envía la contraseña por EAPOL y cómo pueden los hackers descifrarla para conectarse a la red?

Entonces, ¿dónde está la contraseña?

Bueno, la contraseña para acceder a la red Wi-Fi (también llamada "PSK", que significa "Pre-Shared Key") no se "envía" en sí misma, ya que eso sería muy inseguro y cualquiera que capture el handshake de 4 vías podría usarla para acceder directamente a la red. En su lugar, el cliente envía el MIC, que además de servir como prueba para la integridad de la comunicación, contiene las "pruebas" de que el cliente ha superado el desafío impuesto por el AP (en este caso, el desafío sería conocer la contraseña, conocer el "PSK") en forma de hash. Cuando se envía el MIC, lo que se envía en realidad es un hash (una cadena de longitud fija), que se ve algo así:

a387bc7067687f3de02fe3ef4567d29cf2098b1f

Y ese hash (la cadena de caracteres anterior) contenía la prueba que le indica al AP que quien lo envió (el cliente) conoce la contraseña. No sé cuál es la evidencia ni dónde está en esa cadena, pero de todas formas no debería saberlo porque el algoritmo que crea ese hash está pensado para ocultar esa evidencia, y hace su trabajo bastante bien. Sin embargo, podemos intentar recrear ese mismo hash probando diferentes PSK uno tras otro y ver qué hash se parece al anterior, y cuando finalmente obtengamos una coincidencia, entonces sabremos qué PSK está oculto detrás de ese hash.

Así que, para resumir:

  1. El handshake de 4 vías se realiza y un cliente se conecta con éxito a una red.
  2. Un hacker está observando y recogiendo información sobre nuevas conexiones en la red y finalmente consigue un apretón de manos válido.
  3. El hacker intenta replicar el hash que contiene el MIC intentando con diferentes contraseñas.
  4. Cuando finalmente la replicación tiene éxito y el MIC generado por el hacker probando diferentes contraseñas como PSK coincide con el MIC original obtenido del handshake, el hacker ahora conoce la contraseña usada originalmente.
  5. Ahora el hacker solo tiene que conectarse a la red Wi-Fi usando la contraseña que usó antes como PSK, y podrá conectarse a la red.
Representation of a Brute-Force/Dictionary attack

Hackeando redes Wi-Fi

Ahora que hemos explicado la teoría detrás del hackeo Wi-Fi, necesitaremos algunas herramientas para realizar nuestro ataque. El objetivo es acceder a una red Wi-Fi descifrando las contraseñas, y usaremos diferentes técnicas en el camino para cumplir nuestro objetivo.

Preparándonos para realizar el ataque

Primero, tendremos que instalar las herramientas que usaremos para el ataque. Necesitaremos instalar tres herramientas diferentes. La primera herramienta que necesitaremos es "macchanger", la segunda herramienta que necesitaremos es "aircrack-ng", que es un software que permite hackear por wi-fi, y la tercera que instalaremos será "network-manager", que se instala por defecto en la mayoría de gestores de ventanas (interfaces gráficas) como GNOME. No es realmente necesario, pero creo que muestra de forma muy clara las redes disponibles que tenemos a nuestro alrededor. Explicaré esta herramienta más adelante.

En primer lugar, vamos a instalar "macchanger", que es una herramienta que nos permitirá cubrir nuestras trazas una vez que terminemos el ataque. Recuerda siempre que el hackeo no solo consiste en explotar una vulnerabilidad, sino también en ser irrastreable. Esta es la medida mínima de seguridad que podemos tomar para protegernos de ser pillados con las manos en la masa. Cambiar nuestra dirección MAC es como llevar mascara. Cubrirá nuestra identidad a nivel de hardware para que los paquetes que enviemos no sean un indicio con el que identificarnos (al menos, cuando el ataque termine y ya hayamos apagado nuestro portátil). Para instalar "macchanger", usaremos el comando "apt" (que significa "Advance Packet Tool", o en español, "Herramienta de paquetería avanzada", una herramienta de gestión de paquetes de sistemas Debian y distribuciones basadas en Debian como los conocidos sistemas operativos Kali-Linux o Parrot). El comando que aparece a continuación es el necesario para instalar "macchanger".

sudo apt install macchanger -y

Ahora, vamos a instalar "aircrack-ng", que como se mencionó antes, es un conjunto de herramientas de hackeo que permite al hacker realizar diversas acciones en otros puntos de acceso Wi-Fi o clientes, como desautenticar clientes de una red (de lo que hablaremos más adelante porque es realmente importante). Por ahora, solo queremos que pueda configurar nuestra interfaz en un modo especial que nos permita recoger todo el tráfico que detectamos en nuestra radio de conexión (cuando digo "radio", me refiero al área que mi portátil puede detectar puntos de acceso y paquetes que circulan por el aire). Como hicimos antes, el siguiente comando nos permitirá instalar toda la suite "aircrack-ng".

sudo apt install aircrack-ng

A continuación, comprobaremos si el gestor de red está instalado en nuestro sistema. Para eso, usaremos (de nuevo) "apt", pero esta vez usaremos el argumento "policy" para saber si tenemos alguna versión instalada (y por tanto, si tenemos el programa instalado).

sudo apt policy network-manager

Ahora que sabemos que tenemos instalado "network-manager", tenemos disponible un conjunto de herramientas en nuestra interfaz de línea de comandos (terminal) para gestionar nuestras interfaces de red, pero lo que intentamos archivar es listar las redes disponibles que tenemos en nuestro radio para atacar. Elijo una red con la que tenga buena conexión. La red que usaremos en este ejemplo se llama "Vulnerable_Network". Para listar las redes disponibles, usaremos el siguiente comando:

nmcli device wifi list

Como podemos ver, tenemos nuestra red objetivo llamada "Vulnerable_Network". Al final de la línea podemos ver que el protocolo de protección Wi-Fi es "WPA2". Ese protocolo es vulnerable a ataques por wi-fi como la desautenticación o crackeo de contraseñas de redes wi-fi. Ahora que sabemos que nuestro objetivo es vulnerable, empezaremos a preparar el ataque. Para eso, tendremos que poner nuestra interfaz de red en modo "monitor". El modo "monitor" permite que la interfaz de red (la tarjeta de red) capture todo el tráfico al que puede llegar. Necesitaremos eso para recopilar el apretón de manos y replicar el MIC creando nuestros propios hashes basados en la información recopilada.

Para iniciar nuestra interfaz de monitor, primero detendremos los procesos relacionados con la conexión inalámbrica, ya que tendremos que detener los servicios de red para activar el modo monitor. Podemos hacerlo con este comando:

sudo airmon-ng check kill

En este ejemplo, el único proceso que detendremos es wpa_supplicant, que es el proceso que permite la conexión inalámbrica, pero muchos otros procesos relacionados con las redes wi-fi también podrían detenerse. Ahora, para activar el modo monitor en nuestra interfaz de red, podemos usar el siguiente comando:

sudo aircrack-ng start <interface>
Mi interfaz inalámbrica es "wlo1", pero la tuya podría tener cualquier otro nombre, como "wlan0", por ejemplo.

En la imagen de arriba, el propio airmon-ng encontró otros 4 procesos relacionados con la conexión inalámbrica, así que los apagó automáticamente. Aparte de eso, detectó dos interfaces físicas de red como "wlo1" (que es la que usaremos) y "wlx90de80ca54c2", que también es un adaptador de red USB que compré hace tiempo. Este estaba conectado para pruebas, pero solo es necesario una interfaz física de red que permita conexiones inalámbricas. Después de eso, el nombre de la interfaz de red que hemos elegido será "nombre original" + "mon", así que si selecciono en este ejemplo "wlo1", el nombre de la interfaz de red en modo monitor es "wlo1mon". Este es el nombre que usaremos a partir de ahora en nuestra interfaz de red.

Ahora, usaremos macchanger para aleatorizar nuestra dirección MAC para que no nos puedan identificar después de terminar el ataque. Para aleatorizar nuestra dirección MAC, primero tendremos que parar el funcionamiento de la interfaz de red usando el siguiente comando.

sudo ip link set <interface> down

Ahora, cambiaremos nuestra dirección MAC usando el siguiente comando:

sudo macchanger -r <interface>

Y finalmente, después de aleatorizar nuestra dirección MAC, ahora iniciaremos de nuevo nuestra interfaz de red con este comando.

sudo ip link set <interface> up

Y en caso de que queramos detener el modo monitor de la interfaz de red cuando hayamos terminado nuestro ataque, también podemos usar este comando.

sudo airmon-ng stop <interface>

Pero solo lo haremos cuando hayamos terminado nuestro ataque. Por ahora, debemos mantener la interfaz de red en modo monitor. Ahora es el momento de recopilar los datos que atraviesan la interfaz. En especial, queremos recopilar el apretón de manos respecto a la red que queremos atacar. Para eso, usaremos airodump-ng.

sudo airodump-ng <interface>

Pero esto solo mostrará los APs y clientes a lo largo de nuestro radio. Para recopilar el apretón de manos, debemos usar el parámetro "-w" en el comando y luego especificar el archivo en el que queremos guardar el apretón de manos para descifrar la contraseña. Además, especificaremos el canal de la red del que queremos recoger el apretón de manos para no recoger el apretón de manos de otra red que no nos interesa. Para eso, usaremos el parámetro "-c" para especificar el número 60, como se muestra abajo.

sudo airodump-ng -c 60 -w handshake <interface>

El comando anterior mostraría la siguiente información:

Performing the attack

Ahora, para entender qué significa todo esto, necesitamos observar cuidadosamente la imagen y analizar cada parte de ella. En la primera línea, vemos tres secciones.

CH 60: Ese es el canal del que realmente estamos recopilando información. Los canales en Wi-Fi se utilizan para evitar interferencias. Normalmente, los canales Wi-Fi más comunes son el 1, 6 y 11, pero hay muchos más. En este caso, estamos listando y recopilando apretones de manos de redes Wi-Fi en el canal "60".

Elapsed: 4 mins: Este es el tiempo que hemos estado recopilando información. En este caso, llevo 4 minutos esperando a mi ordenador para recopilar información sobre las redes disponibles y los dispositivos conectados.

2025-12-23 22:38: Es el momento en el que empecé a recopilar información. En mi caso, empecé a recopilar apretones de manos de las redes que se comunican a través del canal 60 a las 22:38 (10:38 PM).

Ahora tenemos dos filas más sobre información sobre puntos de acceso Wi-Fi (la fila que empieza por "BSSID" y "PWR") y otras para clientes conectados (la fila que empieza con "BSSID" y "STATION"). Hablaremos sobre las filas respecto a los APs.

BSSID: Es la dirección MAC de los puntos de acceso (APs) que tenemos disponibles.

PWR: Indica lo fuerte que es nuestra conexión con la AP. Cuanto mayor sea el número, mejor conexión tenemos con ese punto de acceso. En este caso, un punto de acceso reportado con un PWR de "-37" sería más rápido y eficiente transmitiendo datos de nuestro dispositivo al AP que otro con un PWR de "-83".

RXQ: Indica lo buena que es la recepción de paquetes de un punto de acceso. Cuanto mayor sea el número, menos paquetes se perderán durante la conexión. Junto con "PWR", indica la calidad de la red.

Beacons: Una baliza ("Beacon" en inglés) es un paquete de difusión que el AP envía para anunciar que tiene una red activa a la que conectarse. Es el paquete que permite a los clientes descubrir que tiene una red disponible a la que conectarse. La sección "Beacons" muestra cuántas balizas hemos recibido de un AP. Si el número de Beacons se detiene, significa que ya no tiene una red disponible. Al recibir balizas, podemos descubrir redes ocultas. Por eso muchas redes aparecen con el nombre "<length>: 0", porque no están pensadas para tener un nombre ya que son redes ocultas. Cada segundo, el punto de acceso envía 10 paquetes de balizas.

#Data: Indica el número de paquetes capturado por la red.

#/s: Indica el número de paquetes por segundo capturados.

CH: Indica el canal que está usando la red. Podríamos estar capturando apretones de manos de diferentes redes Wi-Fi en distintos canales, así que esta sección indica qué canal está usando la red a la que está asociado.

MB: Significa "Tasa de bits máxima" ("Maximum Bitrate" en inglés), que indica la velocidad de la red. Cuanto mayor es el número, más rápido se transmite la información a través de las redes; aunque esta no es la velocidad real, sino una representación de la velocidad máxima que la red podría alcanzar en condiciones ideales.

ENC: Indica el tipo de cifrado que está usando la red. En el caso del cifrado WPA3, no podemos aprovechar las vulnerabilidades explicadas en esta publicación. En esta publicación, trabajaremos con cifrados WPA/WPA2.

CIPHER: Indica como se encripta la información.
- WEP: Vieja e insegura. Obsoleta.
- TKIP: Se usaba hace tiempo en épocas tempranas cuando se usaba WPA. Es débil y no se recomienda su uso.
- CCMP: Basada en encriptación AES (encriptación de grado militar), es fuerte y segura. Usada en la mayoría de redes Wi-Fi.
- GCMP/GCMP-256: Encriptación nueva y aún más fuerte. Usada en WPA3 junto con CCMP.

AUTH: Es el método de autenticación utilizado en la red. En este caso, el método de autenticación en la mayoría de las redes wifi utiliza PSK, que es un elemento crucial para realizar el crackeo de contraseñas wi-fi.

ESSID: Es el nombre de la red (en este ejemplo, "Vulnerable_Network").

Y en cuanto a las filas hablando de los clientes:

BSSID: Es la dirección MAC del cliente.

STATION: Es la dirección MAC del servidor (comúnmente el punto de acceso).

PWR: Indica cuán fuerte es la conexión del cliente con el AP. Cuanto mayor sea el número, mejor conexión tiene el cliente con ese punto de acceso.

Rate: Muestra la tasa de paquetes del cliente al AP (aunque no puedo interpretar completamente la información dada en el ejemplo). Seguiré investigando esto y, con suerte, explicaré qué significa "6e - 6e" o "6e - 24", pero por ahora, es un misterio para mí ya que no he encontrado mucha información en internet para contrastar).

Lost: Muestra la cantidad de paquetes perdidos en la conexión cliente-AP.

Frames: Muestra el número de paquetes que hemos capturado con éxito.

Con esto en mente, podemos comenzar el ataque propiamente dicho. Por suerte para nosotros, atacar redes wi-fi es sorprendentemente fácil. Lo que tenemos que hacer para capturar el apretón de manos es esperar a que alguien se conecte con éxito a la red. Algunas personas tienen suerte y reciben el apretón de manos justo cuando empiezan a ejecutar airodump, otras se dedican a esperar a que alguien se conecte a una red para no levantar sospechas, y otras, que son un poco impacientes, deciden forzar una conexión exitosa. ¿Cómo haría alguien eso? Usando un método llamado "desautenticación". La desautenticación ocurre cuando un cliente decide desconectarse de una red. Sin embargo, podemos forzar a un cliente a salir de la red realizando lo que se llama un "ataque de desautenticación". Este ataque consiste en enviar paquetes a un cliente conectado al AP para forzar la salida del cliente de la red. De este modo, el cliente intentará reconectarse automáticamente a la red y entonces podremos obtener el apretón de manos. Para realizar este ataque, usaremos "aireplay-ng", usando los parámetros mostrados en el siguiente comando:

sudo aireplay -0 10 -a <mac_address_of_the_AP> -c <mac_address_of_the_client> <interface>

Con el comando mostrado arriba, enviaremos "paquetes de desautenticación" (eso es lo que significa específicamente el "-0") y para especificar la cantidad de paquetes, pondremos un número junto al parámetro. En el ejemplo anterior, enviaremos 10 paquetes, pero si ponemos un 0, aireplay enviará una cantidad ilimitada de paquetes). Tendremos que especificar la dirección MAC del punto de acceso usando el parámetro "-a", así como el cliente conectado al punto de acceso usando el "-c". De este modo, solo desautenticaremos a ese cliente específico. Queremos hacerlo porque tenemos más posibilidades de realizar la desautenticación, pero podemos optar por intentar desautenticar toda la red si queremos. Solo tendríamos que eliminar la "-c" y la dirección MAC del cliente. Esta sería la salida del comando mostrado arriba.

Sin embargo, si prefieres una forma mucho más sencilla de realizar la desautenticación, publicaré una herramienta para realizar la autenticación ejecutando solo un comando usando "deauthr.sh" así:

./deauthr.sh

Ahora solo tendríamos que esperar a que el ataque tenga éxito y entonces podremos reunir el apretón de manos. Cuando reunamos el apretón de manos, lo sabremos porque literalmente aparece en la parte superior del panel de "airodump-ng":

Como podemos ver, en la línea superior pone "WPA handshake:,,,". Aparece la dirección MAC del punto de acceso, lo que significa que lo hemos guardado con éxito, y ahora, si tenemos un diccionario lo suficientemente bueno, podremos descifrar la contraseña y obtener acceso no autorizado.

Pero, ¿qué es exactamente un diccionario? Un diccionario (en el contexto de la ciberseguridad) es una colección (realmente grande) de contraseñas almacenadas en un solo archivo. Debemos usar un diccionario para intentar el crack por razones obvias, ya que probar una contraseña una tras otra sería realmente lento. No me malinterpretes, los ataques con diccionarios son muy lentos, bueno, pero mucho más rápidos que intentar manualmente, así que eso es lo que vamos a hacer. Un diccionario se parece a esto:

...
 edizzle69
 doradaybendita
 dondonan
 derrickak47
 degrassi
 danza
 daisy
 cutiesmile
 cowboys
 cottam 
 confirm2
 codystell!
 cocaine
 chili917
 chevelle11
 castillo
 c5688768
 bye bye
 butterfly
...

Por supuesto, esto es solo un extracto de un famoso diccionario llamado "rockyou.txt", que hoy en día está obsoleto porque usa contraseñas muy débiles (como puedes ver). Esto no sirve para un ataque de diccionario, porque como puedes ver, los APs no usan contraseñas tan débiles. Puedes intentar generar las listas de palabras usando herramientas como "crunch", por ejemplo, para obtener una contraseña, o descargar una de alguna página web o torrent. Una vez que tengas una lista de palabras, podemos empezar a descifrar la contraseña con el siguiente comando.

aircrack-ng -w <wordlist> <handshake_file>.cap

En mi caso, como capturé tráfico de diferentes redes en el mismo canal, tengo la oportunidad de seleccionar la red que quiero descifrar. En este caso, seleccionaré la única red de la que obtuve el apretón de manos.

Y entonces empezará el crackeo. Ahora solo queremos esperar hasta que finalmente descifremos la contraseña, y cuando por fin la consigamos, esto es lo que veremos.

Y como podéis ver, hemos descifrado la contraseña y obtenido acceso no autorizado.

Read more