Descifrar tráfico SSL con Wireshark

Es probable que alguna vez 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).

pre-master-key-master-key

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 izquierda de la pantalla y abriremos la opción indicada: Configuración avanzada del sistema.

descifrar-trc3a1fico-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 ssl1descifrar ssl2

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.

SSLKEYLOGFILE1SSLKEYLOGFILE2

 

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

¡Momento Spam! Bueno consejo, ya me entendéis 😉 Como este tutorial es un poco extenso lo aprovecho para recordaros que he creado un ranking completo de los mejores antivirus gratis Windows 10, 11, así como para Mac, Android e iOs ¡No falta detalle!. Y no sólo gratuitos, para los usuarios que de verdad valoramos la ciberseguridad, he creado el ranking de los mejores en sus versiones Premium también. ¡Espero que os sirvan de ayuda!, sin más dilación seguimos 🙂

 

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-trc3a1fico-tls-g

Usaremos la ruta de nuestro archivo de log:

 

configurar-wireshark

 

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:

escuchar-trc3a1fico-con-wireshark

 

  • 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-trc3a1fico-tls-b

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

descifrar-trc3a1fico-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-trc3a1fico-tls-i

En este ejemplo podemos ver captura de la clave de acceso mediante 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.

negociación HTTP1

Sin preshared key

negociación HTTP2

Con preshared key

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.

trc3a1fico-ssl-descifrado

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

cookies

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.

¡Listo! Esto es todo amig@s. Espero que os haya sido de utilidad. Para cualquier duda sabéis dónde estoy, dejar un comentario e intentaré resolveros las dudas lo antes posible.

Últimas Noticias

Imagen de la noticia Malware, así lo analiza un experto

Malware, así lo analiza un experto

Leer más
Imagen de la noticia Sora OpenAI ¿Es una decepción?

Sora OpenAI ¿Es una decepción?

Leer más
Imagen de la noticia Nvidia Bolsa ¿Cuál es la realidad de su desplome?

Nvidia Bolsa ¿Cuál es la realidad de su desplome?

Leer más
Imagen de la noticia AVG: Análisis en profundidad en 2025

AVG: Análisis en profundidad en 2025

Leer más
Imagen de la noticia El robo perfecto de Bitcoins (que salió mal)

El robo perfecto de Bitcoins (que salió mal)

Leer más
Imagen de la noticia Captura de pantalla en Mac: Trucos y atajos

Captura de pantalla en Mac: Trucos y atajos

Leer más
Imagen de la noticia Iphone 16 pro y Iphone 16 pro Max, reviews

Iphone 16 pro y Iphone 16 pro Max, reviews

Leer más
Imagen de la noticia Como saber si tengo un virus en el movil

Como saber si tengo un virus en el movil

Leer más
Imagen de la noticia Actualizar a Windows 11

Actualizar a Windows 11

Leer más
Imagen de la noticia Activar Windows 10 CMD

Activar Windows 10 CMD

Leer más
Imagen de la noticia Stargate, la Super IA con la que Trump quiere dominar el mundo

Stargate, la Super IA con la que Trump quiere dominar el mundo

Leer más
Imagen de la noticia DeepSeek, así se saltó las restricciones de Nvidia

DeepSeek, así se saltó las restricciones de Nvidia

Leer más
Ver Todas