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).
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.
Buscaremos apartado Inicio y Recuperación > Variables de entorno
Ahora pulsaremos en Nueva para el tipo de variable de entorno de usuario.
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.
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.
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.
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.
También podemos ver el saludo en 3 pasos típico de las conexiones TCP. Lo distinguiremos de los «datos».
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.
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.
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 sesió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.
¡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.
Descubre el mejor antivirus para 2024
Accede a nuestro comparador gratuito y encuentra el antivirus que mejor se adapte a lo que necesitas y con mejor valoración de los expertos.
Ir al comparador