domingo, 20 de febrero de 2011

Rompiendo SSL a lo pobre

Existe una forma de descifrar SSL (y TLS) sin necesidad de ser un poderoso gobierno, tener la capacidad de cálculo de la NSA o ser Bruce Schneier.


Simplemente necesitamos tener acceso a la llave privada del servidor. Algunos pensaran que es imposible, que la llave privada siempre se guarda de forma segura. Pero no, en algunos casos la llave privada del servidor SSL puede ser averiguada.


Por ejemplo cuando se utiliza un software con un certificado SSL pre-configurado. Simplemente tenemos que obtener acceso a una copia de ese software y recuperar la llave privada.

En el manual probablemente indicara que es necesario cambiar el certificado SSL de ejemplo por uno seguro, pero ¿Quién se lee los manuales?

Situaciones habituales donde se pre-configuran certificados SSL inseguros:
- Servidores web portables o de instalación fácil. Por ejemplo: XAMPP, Apache2triad, Portable Apache, etc.
- Routers o pequeños dispositivos de red domésticos.
- Versiones antiguas de servidores de aplicaciones. Por ejemplo: Weblogic, Websphere, etc.

También podemos buscar llaves SSL dejadas por descuido en: repositorios de configuraciones desprotegidos, carpetas de red públicas, equipos de administradores, etc.

Incluso podemos intentar algo de Google hacking, por ejemplo:
- filetype:key server
- filetype:key private

Una vez tengamos la llave podemos utilizarla para descifrar tráfico SSL o TLS previamente capturado.

Por ejemplo supongamos que tenemos un servidor con XAMPP 1.7.4 en una red local en la que podemos hacer sniffing. A este servidor se conecta mediante HTTPS un usuario que descarga un fichero que nos interesaría obtener.

Primeramente comprobamos si el servidor SSL utiliza el certificado instalado por defecto:

Efectivamente usa un certificado inseguro. Así que vamos a la página oficial de XAMPP y descargamos la misma versión para obtener la llave privada correspondiente a este certificado.


Luego simplemente capturaríamos con Wireshark y lo configuraríamos para que pueda descifrar el tráfico adecuadamente:

Configuración: Edit > Preferences > Protocols > SSL

En esta pantalla debemos configurar el valor de “RSA keys list”, con el siguiente formato:ip_servidor,puerto,protocolo_encapsulado,localización_llave_privada

En este caso:192.168.1.2,443,http,c:\server.key

Y listo, ya podemos obtener en claro el contenido del tráfico SSL capturado:


Como podéis ver, incluso la robustez de SSL puede ser rota con pocos recursos ante una administración descuidada del servidor.

1 comentario:

  1. Bueno, en realidad no rompes la robustez de SSL, simplemente te aprovechas de errores de configuración por desidia humana :D

    ResponderEliminar