Descifrado del tráfico SSL con Wireshark y tcpdump

Ver Categorías

Descifrado del tráfico SSL con Wireshark y tcpdump

En las redes modernas, la seguridad de la transmisión de datos es primordial, y Secure Sockets Layer (SSL) y Transport Layer Security (TLS) son protocolos ampliamente utilizados para garantizar la privacidad y seguridad de los datos. Sin embargo, existen casos en los que es posible que necesite analizar el tráfico cifrado para la resolución de problemas, el análisis forense o la supervisión de la red. Este artículo técnico le guiará en el proceso de descifrado del tráfico SSL/TLS mediante Wireshark y tcpdump, dos potentes herramientas de análisis de redes. Cubriremos qué son Wireshark y tcpdump, explicaremos el cifrado SSL y TLS y demostraremos cómo descifrar el tráfico SSL mediante una clave secreta premaestra o una clave privada RSA.

¿Qué son Wireshark y tcpdump? #

Wireshark #

Wireshark es un analizador de protocolos de red de código abierto que permite a los usuarios capturar y explorar de forma interactiva el tráfico que se ejecuta en una red informática. Permite inspeccionar los datos a un nivel granular, lo que proporciona visibilidad de los protocolos y los paquetes de datos que se transmiten. Wireshark se utiliza ampliamente para la resolución de problemas de red, el desarrollo de protocolos y el análisis de seguridad.

tcpdump #

tcpdump es una herramienta de análisis de paquetes de línea de comandos que captura el tráfico de red y lo muestra en tiempo real. Es muy eficaz para capturar datos de redes activas, lo que permite guardar paquetes en un archivo (conocido como archivo de captura) para su posterior análisis. Si bien tcpdump no tiene la interfaz gráfica de Wireshark, es potente para realizar análisis rápidos, filtrar paquetes y recopilar datos en sistemas remotos.

¿Qué es el cifrado SSL? #

SSL (Secure Sockets Layer) es un protocolo desarrollado por Netscape para transmitir documentos privados a través de Internet. SSL utiliza algoritmos de cifrado para garantizar que los datos enviados entre el cliente (por ejemplo, un navegador web) y el servidor sean ilegibles para cualquier persona que intercepte la transmisión.

TLS (Transport Layer Security) es el sucesor de SSL y es más seguro. Si bien TLS es técnicamente distinto de SSL, el término SSL se utiliza a menudo para referirse a ambos protocolos.

SSL/TLS funciona estableciendo un canal de comunicación seguro entre dos sistemas. Los conceptos clave del cifrado SSL/TLS incluyen:

  • Cifrado simétrico: se utiliza una única clave para cifrar y descifrar los datos.
  • Cifrado asimétrico: se utilizan dos claves (pública y privada); los datos cifrados con la clave pública sólo se pueden descifrar con la clave privada correspondiente.
  • Certificados: SSL/TLS utiliza certificados para verificar la identidad del servidor y, a veces, del cliente.
  • Protocolo de enlace: Proceso mediante el cual el cliente y el servidor establecen una conexión segura, intercambian claves y acuerdan métodos de cifrado.

Descifrado de SSL con una clave secreta premaestra #

La clave secreta premaestra es un componente crucial en el proceso de enlace SSL/TLS. Esta clave se utiliza para generar claves de sesión, que luego se utilizan para cifrar los datos reales transferidos a través de la red. Al obtener la clave secreta premaestra, puede descifrar los datos de la sesión.

Descifrado SSL con tcpdump y wireshark

Pasos básicos para descifrar SSL con una clave secreta premaestra #

Para descifrar el tráfico SSL utilizando la clave secreta premaestra, siga estos pasos:

1. Establecer la variable de entorno del archivo de registro
2. Capturar con tcpdump y verificar el archivo de registro
3. Configurar Wireshark para el descifrado SSL

Establecer la variable de entorno del archivo de registro #

Configuración SSLKEYLOGFILE en Windows #

En los sistemas Windows, deberá configurar una variable de entorno para almacenar las claves secretas premaestras en un archivo de registro. Esta variable, denominada SSLKEYLOGFILE, define la ruta donde se guardan estas claves.

1. Comience haciendo clic derecho en Mi PC y seleccionando Propiedades desde el menú para abrir el menú Sistema.
2. Haga clic en Configuración avanzada del sistema en la lista de la izquierda para abrir la ventana Propiedades del sistema.
3. En la sección Avanzado pestaña, haga clic en el botón “Variables de entorno”.
4. En Variables de usuario, haga clic en el botón Nuevo… botón. También puedes crear esta variable en Variables del sistema Si desea registrar claves SSL para todos los usuarios del sistema, normalmente es mejor mantenerlas limitadas a su perfil.
5. En la sección Nombre de la variable campo, introduzca SSLKEYLOGFILE.
En la sección Valor variable En el campo, ingrese la ruta donde desea guardar el archivo de registro. Alternativamente, puede hacer clic en Explorar archivo… para seleccionar la ruta utilizando el selector de archivos.
Si lo configura como una variable para todo el sistema, asegúrese de que el archivo sea accesible para todos los usuarios o utilice comodines. Por ejemplo, puede utilizar %PERFILUSUARIO%\AppData\ssl-keys.log or C:\ssl-keys.log .
6. Una vez que haya terminado, haga clic OK para aplicar los cambios y continuar con los siguientes pasos.

Configuración SSLKEYLOGFILE en Linux o Mac #

En Linux y Mac, necesitarás configurar el SSLKEYLOGFILE variable de entorno usando exportarEn la misma terminal, puedes ejecutar tcpdump y generará el archivo de registro de clave indicado cuando se detecte una conexión SSL.

raíz@noid-01:~# exportar SSLKEYLOGFILE=~/.ssl-key.log raíz@noid-01:~# tcpdump ...

Para mantener una configuración de variable de entorno permanente, edite el perfil de usuario con un editor de texto como nanoPara Linux, esta variable se almacena en ~ / .bashrc, y en Mac, se crea en ~ / .bash_profileLuego, agregue el exportar comando para SSLKEYLOGFILE variable al final del archivo y guardar los cambios.

Capturar con tcpdump y verificar el archivo de registro #

Para comprobar la generación del archivo de registro, intente abrir un navegador, usar tcpdump o ejecutar un comando curl en un servidor HTTPS para confirmar que el archivo se ha generado correctamente.

Como ejemplo, en la misma terminal donde se crearon las variables de entorno, se ejecutará tcpdump para capturar el tráfico y un curl a un servicio HTTPS para su descifrado:

root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i cualquier puerto 443 -w ~/capture.pcap & root@noid-01:~# curl https://
(luego, cierre el comando tcpdump)

Verifique que se generen el archivo de registro ~/.ssl-key.log y la captura de tráfico en ~/capture.pcap . Finalmente, consulte el último paso para ver el tráfico cifrado con Wireshark.

Si abres el archivo ssl-key.log verás algo como lo siguiente:

root@noid-01:~# cat ~/.ssl-key.log
CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0
SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1
CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c
SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa
EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4

Configurar Wireshark para el descifrado SSL #

Una vez que el sistema de captura registra las claves pre-maestras, puede usar el archivo de registro de claves junto con los paquetes capturados para descifrar el tráfico SSL en Wireshark.

1. Cargue el registro de claves y los archivos de captura en el sistema donde está instalado Wireshark.
2. Abra el archivo de captura de tráfico con Wireshark.
3. Configurar el protocolo SSL. Haga clic en Editar, A continuación, seleccione PreferenciasSe abrirá el cuadro de diálogo Preferencias, que muestra una lista de elementos a la izquierda. Expanda el Protocolos sección, desplácese hacia abajo y haga clic en SSL. En la SSL Opciones de protocolo, localice el campo etiquetado Nombre del archivo de registro (Pre)-Master-SecretBusque el archivo de registro que configuró anteriormente o pegue la ruta directamente en este campo.
4. Aplicar la configuración. Después de configurar la Nombre del archivo de registro (Pre)-Master-Secret, haga clic OK para guardar los cambios y volver a Wireshark. Ahora está listo para descifrar el tráfico capturado. Cuando seleccione un marco de datos cifrado, verifique la vista Byte del paquete. Debajo de la vista, debería ver una pestaña para Datos SSL descifrados , entre otros.

Si los datos de la sesión siguen ilegibles y no se ve ningún código HTML, puede deberse a la compresión GZIP, comúnmente utilizada por servidores web como Apache. En ese caso, haga clic en la pestaña «Cuerpo de entidad sin comprimir» , disponible solo cuando el descifrado SSL está habilitado. Allí podrá ver el código fuente sin comprimir del sitio, como el título de la página predeterminada de Apache en texto plano.

Uso de una clave RSA para descifrar SSL #

Wireshark ofrece una función que le permite cargar sus claves RSA para descifrar el tráfico SSL, pero en la práctica, el descifrado de claves RSA se ha vuelto obsoleto.

Esta disminución en el uso se debe a la adopción de Perfect Forward Secrecy (PFS), que ha dejado obsoleto el descifrado de claves RSA tradicional. Con PFS, las sesiones negociadas mediante Diffie-Hellman no dependen directamente de la clave RSA, sino que generan una clave de un solo uso que se almacena únicamente en la RAM y se cifra utilizando la clave del disco.

Si anteriormente utilizó una clave RSA para descifrar el tráfico y descubrió que ya no funciona, es probable que la máquina de destino esté utilizando intercambios de claves Diffie-Hellman. Puede confirmarlo habilitando el registro SSL en Wireshark.

Para habilitar el registro:

1. Haga clic en Editar en el menú de la barra de herramientas y seleccione Preferencias.
2. Ampliar la opción Protocolos sección de la izquierda, desplácese hacia abajo y haga clic en SSL.
3. Establezca la ubicación de su archivo de registro SSL haciendo clic en el botón Explorar .

Una vez que se habilite el registro, capture una sesión con su host habilitado para SSL y verifique los registros. Busque el marco de negociación del protocolo de enlace TLS; probablemente verá una entrada DHE (o ECDHE, para claves de curva elíptica) en la cadena de cifrado, lo que indica que se están utilizando intercambios de claves Diffie-Hellman.

Si ve un mensaje que indica que no se puede encontrar el secreto maestro y falla el descifrado de la clave RSA, deberá cambiar al método previo al secreto maestro para el descifrado.

A medida que el PFS se vuelve más común, especialmente con la llegada de TLS 1.3, el descifrado de clave RSA tradicional queda obsoleto y ya no se debe confiar en él.

Más información #

El formato SSLKEYLOGFILE para TLS #

El formato SSLKEYLOGFILE es un archivo de texto que se utiliza para almacenar claves secretas pre-maestras para descifrar conexiones TLS. El archivo está codificado en UTF-8, y cada línea contiene una clave secreta identificada por una etiqueta, un valor aleatorio del cliente y la clave secreta en sí, todo separado por espacios. El formato admite varios finales de línea (CRLF, CR, LF), y las líneas que comienzan con # se tratan como comentarios.

Para TLS 1.3, varias etiquetas corresponden a diferentes etapas de la programación de claves, como CLIENT_HANDSHAKE_TRAFFIC_SECRET y SERVER_TRAFFIC_SECRET_0. Para TLS 1.2 y versiones anteriores, la etiqueta CLIENT_RANDOM identifica la clave maestra.

Consideraciones de Seguridad:
El acceso a la ARCHIVO DE REGISTRO DE LLAVES SSL permite el descifrado del tráfico TLS, lo que supone un riesgo de seguridad importante. Los controles de acceso adecuados son esenciales para evitar el acceso no autorizado o la escalada de privilegios. El registro solo debe ser habilitado por usuarios autorizados y se deben aplicar permisos de archivo estrictos. Los secretos registrados no solo permiten el descifrado, sino que también pueden permitir a los atacantes modificar o inyectar datos en conexiones activas y, en algunos casos, suplantar puntos finales o falsificar mensajes.

¿Cómo funciona un protocolo de enlace SSL bidireccional? #

Un protocolo de enlace SSL bidireccional autentica tanto al servidor como al cliente. Así es como se desarrolla el proceso:

1. cliente hola:El cliente inicia el protocolo de enlace enviando un mensaje de "Client Hello" al servidor. Este mensaje incluye los conjuntos de cifrados compatibles con el cliente y las versiones de TLS compatibles.
2. servidor hola:El servidor responde con un mensaje “Server Hello”, que contiene el certificado público del servidor y una solicitud del certificado del cliente.
3. Validación de certificado de cliente:El cliente verifica el certificado del servidor. Si es válido, el cliente envía su propio certificado al servidor.
4. Validación de certificado de servidor:El servidor comprueba el certificado del cliente. Si el certificado del cliente es válido, se procede al establecimiento de la sesión, lo que permite una comunicación segura entre ambas partes.

¿Es posible descifrar el tráfico SSL/TLS detectado pasivamente? #

Sí, es posible descifrar el tráfico SSL/TLS interceptado de forma pasiva, pero para ello necesitará la clave RSA. Esta clave se puede obtener por medios legítimos con la debida autorización o, de forma menos ética, interceptándola mediante un ataque de tipo "man-in-the-middle".

📄 Descarga este documento en formato PDF #

    EMAIL: *

    Desarrollado por BetterDocs