Las herramientas que vamos a utilizar son Kismet y la suite aircrack-ng. Necesitamos una tarjeta inalámbrica capaz de inyectar paquetes en la red. En mi caso, el chipset de la tarjeta es Atheros, por lo que los drivers utilizados son los de madwifi. Por desgracia, los drivers que trae Ubuntu de madwifi no están preparados para la inyección, por lo que hay que parchearlos. Podéis descargar la última versión de madwifi aquí.
Una vez los tengáis descomprimidos, debéis editar el fichero ath/if_ath.c y añadir las dos lineas en negrita:
struct ath_softc *sc = dev->priv;
struct ieee80211com *ic = &sc->sc_ic;
struct ath_hal *ah;
HAL_STATUS status;
[…]
wh = (struct ieee80211_frame *) skb->data;
try0 = ph->try0;
try0 = (ic->ic_opmode == IEEE80211_M_MONITOR) ? 1 : ph->try0;
También tenéis parches para madwifi con aircrack aquí. Una vez hecho esto, volvemos al directorio padre y ejecutamos make, si todo va bien, ejecutamos make install y tenemos los drivers listos. Ahora un modprobe ath_pci cargará el módulo de los drivers en el kernel. Se puede añadir una entrada en /etc/modules para que el módulo se cargue cada vez que arranque el sistema.
Bien, tenemos los drivers instalados y parcheados, ahora toca instalar kismet y configurarlo. Este paso es opcional, ya que uso kismet sólo por comodidad, puesto que me da más información sobre las redes y los clientes conectados. En fin, si decides usar kismet, lo primero que tienes que hacer es descargarlo (aptitude install kismet) y configurarlo editando kismet.conf. Son sólo dos cosas las que hay que tocar en este fichero, en primer lugar:
suiduser=adrian
source=madwifi_b,wifi0,kismet
Estos son los valores en mi caso. El suiduser es el nombre del usuario de tu máquina. Source incluye chipset, nombre de interfaz, nombre de servidor (este último que sea siempre kismet). El chipset se puede consultar en la documentación de kismet, en el punto 12. Los usuarios de atheros, aseguraos de poner la interfaz wifiX, no athX, o no funcionará. Una vez hecho esto, debemos ejecutar kismet como root desde la terminal. Igual la interfaz asusta un poco, pero es sencilla, podemos ver las redes: verde encriptada, amarillo abierta. Con ’s’ podemos ordenar las redes en función de la calidad de la señal, del número de paquetes capturados… Con ‘i’ te muestra toda la información de una red en concreto, y con ‘c’ el número de personas conectadas a esa red. Se retrocede con ‘q’.
0. Poner la interfaz en modo monitor
Los usuarios de chipset atheros, debemos iniciar el modo monitor con:
airmon-ng start wifiX
donde X es el número de la interfaz. Esto creará una interfaz ath1 en modo monitor, que será la que usaremos a partir de ahora. Otros chipsets pueden funcionar con:
iwconfig ethX mode monitor
Este paso es imprescindible, si no, no podrás capturar los paquetes de las redes que haya a tu alrededor.
1. Capturando paquetes
Usaremos airodump-ng para este propósito. Existen cantidad de opciones para según cómo queramos realizar la captura. Como ya hemos fijado el objetivo con kismet, podemos reducir la captura a un canal determinado y a una red en concreto con:
airodump-ng -bssid XX:XX:XX:XX:XX:XX –channel N -w captura.cap ath1
NOTA: channel va precedido de guión doble, pese a que no se vea.
Analicemos esto. La opción -bssid indica la red a la que queremos capturar paquetes, donde las X representan la dirección mac del punto de acceso, que podemos obtener del kismet. Fijamos el canal en el que escuchamos con –channel e indicamos al programa en qué fichero realizar las capturas con -w. Si no se va a utilizar aircrack-ptw (recomiendo usarlo, es más rápido) se puede añadir la opción –ivs, ya que aircrack-ng sólo hace uso de las IVs.
2. Atacando
Tenemos varias técnicas a nuestro alcance para llevar a cabo nuestro objetivo. En realidad son 5, pero veremos las 3 más útiles (las otras dos os las dejo de deberes)
- 2.1. Desautenticación
Este ataque desconecta a los usuarios de la red, provocando tráfico ARP cuando tienen que volver a conectarse. Como habréis adivinado, es un ataque inútil si no hay clientes conectados.
aireplay-ng -0 5 -a XX:XX:XX:XX:XX:XX -c ZZ:ZZ:ZZ:ZZ:ZZ:ZZ ath1
Bien. El -0 indica el tipo de ataque (desautenticación), las X son la mac del punto de acceso contra el que realizaremos el golpe, y las Z el cliente al que queremos desconectar. Si no se especifica -c, el ataque se realiza contra todos los clientes conectados a la red. Este ataque es útil para averiguar el ESSID en redes con ESSID oculto, ya que al generar una petición de autenticación nueva podremos capturar ese dato.
- 2.2. Falsa autenticación
¿Cómo atacamos una red sin clientes? Fácil, nos autenticamos contra el AP y capturamos nuestro propio tráfico. Tened en cuenta que en realidad esto no es que hayamos accedido a la red, sino que de alguna manera nos hemos “vinculado” al router.
aireplay-ng -1 0 -e ESSID -a XX:XX:XX:XX:XX:XX -h ZZ:ZZ:ZZ:ZZ:ZZ:ZZ ath1
El -1 indica el tipo de ataque. El 0 indica cada cuanto tiempo se realizará el ataque, en este caso cada 0 segundos indica una sola vez. Si se sustituye por 10 intentará autenticarse cada 10 segundos. Con -e se indica el ESSID, con -a la mac del AP (punto de acceso) y con -h la mac que vamos a utilizar. En principio la mac especificada con -h no tiene porque ser la nuestra, ni tiene por qué ser real, si bien algunos AP no aceptan falsas macs, para los que sí lo hagan es más seguro utilizar una falsa. Existen varios motivos por los que la autenticación puede fallar, que yo haya visto:
Distancia: Estamos demasiado lejos del AP. Podemos probar a reducir la velocidad de la tarjeta con:
iwconfig interfaz rate 1M
Esto puede producir que el ataque no termine. Con la opción 0 es probable que llegue a acabar, pero con un valor distinto, puede que se trate de autenticar de nuevo antes de haber terminado la autenticación anterior. Si este es el caso, lo mejor es realizar el ataque con la opción 0 repetidas veces, con un pequeño script en bash o similar.
Filtrado MAC: La cosa se ha puesto difícil, pero no del todo. Si está activo un filtro mac, el AP rechazará nuestra autenticación, salvo que utilicemos una mac admitida. Podemos fijarnos en las macs de los clientes y anotarlas para autenticarnos con ellas cuando se hayan desconectado. También podemos realizar el ataque 0, desautenticarlos y conectarnos nosotros, pero es una manera innecesaria de dar la nota (¡el cliente real se queda sin red!).
Si funciona, obtendremos una salida similar a “Association succesfull :)”
- 2.3. Reinyección de paquetes ARP.
El airodump-ng está capturando, pero va despacio. Depender sólo de los paquetes del cliente conectado o de los que generamos nosotros con autenticaciones falsas podría alargar el proceso ad aeternum, o hacemos algo o el valor de la columna Data (el que realmente interesa) nos hará desesperar. El asunto será recoger una serie de paquetes ARP generados por el AP con los ataques 0 o 1 y los reinyectaremos para generar tráfico adicional.
aireplay-ng -3 -b XX:XX:XX:XX:XX:XX -h ZZ:ZZ:ZZ:ZZ:ZZ:ZZ ath1
El -3 indica, como siempre, el tipo de ataque, con -b indicamos la mac del AP y con -h la de algún cliente conectado a la red (Podemos ser nosotros mismos con una mac falsa del ataque 1). Adicionalmente se puede añadir con -x el número de paquetes por segundo. Suele funcionar mejor cuando se fija un valor distinto al default, que si no recuerdo mal es 400. Es importante realizar el ataque 0 o 1 para que este ataque pueda obtener algún ARP que reinyectar. Podemos poner a correr este ataque en una terminal y en otra tratar de desautenticar algún cliente o autenticarnos con una mac falsa. Si funciona, el número que hay entre paréntesis debería empezar a aumentar, y en airodump-ng, la columna Data debería crecer con rapidez.
3. Obteniendo la clave
Si usamos aircrack-ng en lugar de aircrack-ptw (recordad no usar –ivs para este método) necesitaremos alrededor de 400 000 paquetes para una clave de 64 bits, y cerca de 1 000 000 para una clave de 128 bits. Con aircrack-ptw los números son bastante menores. En cualquier caso, la ventaja es que no hace falta parar de capturar paquetes para poner a trabajar aircrack (cualquiera de los dos). Abrimos una terminal mientras se está capturando tráfico y probamos suerte con:
aircrack-ng -a 1-n 64 captura.cap
Existen otros parámetros adicionales, como -f que indica el nivel de fuerza bruta del ataque, con -a el tipo de encriptación (1 para WEP), y con -n el número de bits de la clave. Por defecto busca claves de 128 bits, así que si queremos que busque 64 se le especifica. Al buscar claves de 128 bits, también encontrará las de 64, aunque tardará algo más. Si queremos usar aircrack-ptw:
aircrack-ptw captura.cap
Bueno, eso ha sido todo por hoy, que ya me parece bastante. Espero que sea útil y si hay alguna duda o alguna puntualización, usad los comentarios que para eso están.