Saltar al contenido

Descifrar tráfico SSL con Wireshark

Descifrar tráfico TLS con Wireshark (f)

Es probable que algunavez hayas iniciado una captura con Wireshark para por ejemplo, diagnosticar el funcionamiento de un sitio web. Si es así seguro que ha llamado tu atención el hecho de que no puedes ver gran parte de la información, porque está cifrada. Veremos como descifrar tráfico SSL con Wireshark.

Wireshark es una utilidad de captura y análisis de protocolos de red. También sirve como herramienta didáctica para aprender sobre negociación en redes. Es una herramienta indispensable junto con Nmap.

¿Wireshark y SSL? SSL / TLS (es lo mismo) es un protocolo de cifrado que opera en la capa de transporte del modelo OSI. Emplea varios métodos de cifrado para mantener la seguridad de los datos en tránsito. Es decir, garantiza que solamente sean legibles para el destinatario esperado, que contará con un mecanismo para devolver el sentido original a los datos recibidos.

Dado que SSL crea un túnel seguro en un flujo de comunicación, los administradores no pueden ver datos legibles desde que entran y salen del túnel, por lo que en casos donde es necesario hacer un troubleshooting de la red, es imposible.

Así puedes analizar tráfico SSL desde Wireshark

Descifrado de TLS con clave pre-master

Utilizaremos algo llamado pre-master secret key para poder revelar los contenidos protegidos con TLS/SSL. La clave secreta pre-maestra es una clave generada por el cliente y utilizada por el servidor para derivar de ella una clave maestra que cifre la sesión.

Hay que diferenciar entre pre-master secret (S) y master secret (K). El primero es una clave generada aleatoriamente -a veces procedente de un intercambio DH o Diffie Hellmann. El segundo, es una función del primero (un derivado).

Luego existen otros conceptos adicionales como la clave privada y la clave de sesión (conocida como shared secret) que se determinan en pasos posteriores de la negociación.

El hecho de usar una clave pre-compartida nos da la ventaja de poder ver datos para los que en teoría deberíamos tener acceso al servidor que gestiona la conexión.

Pasos para escuchar los mensajes Secure Socket Layer

Requisitos

  • Navegadores: Chrome o Firefox (el resto no soportan exportar la clave privada para el tráfico HTTPS)
  • Sistema operativo: Windows, Linux o Mac OS X servirán.

Pasos a realizar

A continuación se desgranan los diferentes pasos y configuraciones, que implican:

  • Crear variable de entorno
  • Realizar una sesión de navegación con navegador soportado
  • Configurar Wireshark
  • Capturar y descifrar la sesión

Crear variable de entorno

Windows

Abriremos el panel de control de forma rápida pulsando la combinación de teclas WIN + R, escribiendo después:

control system

Nos fijaremos en la parte inquierda de la pantalla y abriremos la opción indicada: Configuración avanzada del sistema.

Descifrar tráfico SSL con Wireshark

Buscaremos apartado Inicio y Recuperación > Variables de entorno

Ahora pulsaremos en Nueva para el tipo de variable de entorno de usuario.

  • Descifrar tráfico SSL con Wireshark 2
  • Descifrar tráfico SSL con Wireshark 3

Prefiero personalmente enlazar la variable de entorno únicamente a mi usuario, ya que es con fines demostrativos. Si queréis recoger estos datos para las sesiones del resto de usuarios, podéis utilizar variables de entorno de sistema.

Si vamos a crear esto como una variable de sistema, pondremos especial cuidado en definir bien los wildcards (comodines de búsqueda) o bien en emplazar el archivo en una ruta donde todos los usuarios tengan derecho de escritura.

En la variable, escribiremos el nombre:

SSLKEYLOGFILE

Para el valor de la variable, haremos clic primero sobre examinar directorio, para definir una carpeta donde guardar el archivo de volcado de shared keys. Crearemos el citado archivo de nombre sslkey.log en la ruta indicada. Finalmente, pulsaremos sobre Examinar archivo y seleccionaremos el archivo de texto recién creado.

  • Descifrar tráfico SSL con Wireshark 4
  • Descifrar tráfico SSL con Wireshark 5

Pulsaremos aceptar y reiniciaremos el equipo para aplicar la variable de entorno.

Crear variable de entorno en Linux y Mac

En sistemas como Linux o Mac OS X tendremos que hacer básicamente lo mismo. Lo único que utilizaremos otro editor de texto como Nano o VIM, buscando las siguientes rutas según el sistema donde lo hagamos:

Derivados de Linux

nano ~/.bashrc

Mac OS

Buscaremos Launchpad, haremos clic sobre Otros y abriremos un terminar para lanzar este comando:

nano ~/.MacOSX/environment

En ambos casos, al final del archivo deberemos añadir la linea siguiente:

export SSLKEYLOGFILE=~/.ssl-key.log

Salvaremos los cambios, cerraremos la terminal y abriremos uno nuevo para verificar que está establecida con este comando:

echo $SSLKEYLOGFILE

Comprobar que se recogen las claves

Antes de continuar haremos una comprobación para saber si se están volcando. Abriremos un navegador y visitaremos cualquier web que tenga SSL habilitado por defecto. Hoy en día esto es el comportamiento estándar. Puedes usar esta web por ejemplo.

verificar-sslkeylog

En el caso de Windows (en todos es igual), deberán aparecer datos similares a estos que demuestran que funciona. En sistemas basados en Linux, haremos algo como:

cat ~/.ssl-log.key

Deberían aparecer datos similares. En caso de ser así, podemos pasar a la configuración de Wireshark para poder desencriptar sesiones SSL.

Configurar Wireshark para extraer SSL

Una vez tengamos el navegador recuperando datos gracias a las claves pre-compartidas, podemos configurar lo propio en Wireshark para que pueda interpretar esos datos por nosotros.

En Wireshark, abriremos el menú Editar > Preferencias

Bajaremos hasta el protocolo SSL (en algunas versiones más antiguas buscaremos SSL). Ahora nos situaremos en Pre-Master-Secret log filename.

Descifrar tráfico TLS (g)

Usaremos la ruta de nuestro archivo de log:

Ya podemos empezar a capturar.

Capturar y descifrar la sesión

  • Comenzaremos ahora una sesión de captura sin filtros y la dejaremos minimizada mientras volvemos al navegador
  • Visitamos un sitio web seguro (que utilice TLS).
  • Cerramos el navegador al terminar y detenemos la captura de Wireshark

Ahora estableceremos un filtro para que sea más sencillo encontrar nuestro objetivo. Usaremos estos filtros en la ventana de Wireshark.

frame contains <nombre del sitio web>

Con esto podremos ver la query o petición DNS para resolver el nombre a dirección IP del sitio. Copiamos esta dirección IP.

Descifrar tráfico TLS (b)

También podemos ver el saludo en 3 pasos típico de las conexiones TCP. Lo distinguiremos de los “datos”.

Descifrar tráfico TLS (e)

Ahora establecemos un filtro que incluya nuestra dirección IP local y la IP remota, ejemplo:

ip.addr == 172.217.16.229 and ip.addr == 192.168.1.104

Una vez seleccionada una trama cifrada, si nos fijamos en la vista de paquetes, debajo del todo, aparecerán valores como Decrypted SSL. Esto no significa que siempre vayamos a poder ver todos los datos cifrados, sino que veremos los datos ajenos a TLS que van encapsulados en estos paquetes.

Descifrar tráfico TLS (i)
En este ejemplo podemos ver captura de la clave de acceso mediate HTTP

Una forma fácil de ver la diferencia entre el uso o no de clave pre-compartida es simplemente dejar el ajuste por defecto, veremos como al habilitarla aparece la negociación HTTP/2 que de la otra forma no es visible.

  • captura-de-trc3a1fico-cifrado-con-wireshark
  • descifrar-captura-de-trc3a1fico-cifrado-con-wireshark

Si hacemos clic en la pestaña Uncompressed entity body, que solamente aparecerá con el descifrado de SSL activo, podemos ver por ejemplo el código fuente de la web.

Este otro ejemplo muestra que también podemos capturar cookies de seisón.

El hecho de ser capaz de escuchar esta negociación nos puede servir para verificar la seguridad de nuestros servidores web o para diagnosticar problemas en nuestras aplicaciones web o cliente.

Alejandro Ver todo

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

Deja tu comentario (puedes hacerlo de forma anónima)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .

A %d blogueros les gusta esto: