Articles

TLS

Seguridad de la capa de transporte (TLS) proporciona seguridad en la comunicación entre dos hosts. Proporciona integridad, autenticación y confidencialidad. Se usa más comúnmente en navegadores web, pero se puede usar con cualquier protocolo que use TCP como capa de transporte.

Secure Sockets Layer (SSL) es el predecesor del protocolo TLS. Estos nombres a menudo se usan indistintamente, lo que puede llevar a cierta confusión:

  • Una configuración que utiliza el protocolo SSL (SSLv2/SSLv3) es insegura. En su lugar, se debe usar el protocolo TLS.

  • Los certificados X. 509 para autenticación a veces también se denominan certificados SSL.

  • Algunas aplicaciones (como el correo electrónico) utilizan un solo puerto para sesiones cifradas y sin cifrar. Para cambiar de cifrado a cifrado, se usa (INICIO)TLS. Cuando un solo puerto utiliza directamente el protocolo TLS, a menudo se le conoce como SSL.

  • Por razones históricas, el software (incluido Wireshark) se refiere a SSL o SSL/TLS, mientras que en realidad significa el protocolo TLS, ya que hoy en día es lo que todos usan.

Protocolo dependencias

  • TCP: Típicamente, TLS usa TCP como su protocolo de transporte.

Disección TLS en Wireshark

El disector TLS es completamente funcional e incluso admite funciones avanzadas como el descifrado de TLS si se proporcionan los secretos apropiados (#TLS_Decryption).

Desde Wireshark 3.0, el disector TLS ha sido renombrado de SSL a TLS. El uso del filtro de pantalla ssl emitirá una advertencia.

Descifrado de TLS

Wireshark admite descifrado de TLS cuando se proporcionan los secretos apropiados. Los dos métodos disponibles son:

  • Archivo de registro de claves usando secretos por sesión (#Using_the_.28Pre.29-Master-Secret).

  • Descifrado mediante una clave privada RSA.

Un archivo de registro de claves es un mecanismo universal que siempre habilita el descifrado, incluso si se utiliza un intercambio de claves Diffie-Hellman (DH). La clave privada RSA solo funciona en un número limitado de casos.

El archivo de registro de claves es un archivo de texto generado por aplicaciones como Firefox, Chrome y curl cuando se establece la variable de entorno SSLKEYLOGFILE. Para ser precisos, su biblioteca subyacente (NSS, OpenSSL o boringssl) escribe los secretos necesarios por sesión en un archivo. Este archivo se puede configurar posteriormente en Wireshark (#Using_the_.28Pre.29-Master-Secret).

El archivo de clave privada RSA solo se puede usar en las siguientes circunstancias:

  • El conjunto de cifrado seleccionado por el servidor no utiliza (EC)DHE.
  • La versión del protocolo es SSLv3, (D)TLS 1.0-1.2. No funciona con TLS 1.3.

  • La clave privada coincide con el certificado de servidor. No funciona con el certificado de cliente ni con el certificado de Entidad de Certificación (CA).

  • El período de sesiones no se ha reanudado. El apretón de manos debe incluir el mensaje de apretón de manos ClientKeyExchange.

El archivo de registro de claves se recomienda generalmente, ya que funciona en todos los casos, pero requiere la capacidad continua de exportar los secretos desde la aplicación cliente o servidor. La única ventaja de la clave privada RSA es que solo debe configurarse una vez en Wireshark para habilitar el descifrado, sujeto a las limitaciones anteriores.

Configuración de preferencias

Vaya a Editar – > Preferencias. Abra el árbol de protocolos y seleccione TLS. Alternativamente, seleccione un paquete TLS en la lista de paquetes, haga clic con el botón derecho en la capa TLS en la vista detalles del paquete y abra el menú Preferencias de protocolo.

Las preferencias notables del protocolo TLS son:

  • (Pre)-Nombre de archivo de registro secreto maestro (tls.keylog_file): ruta para leer el archivo de registro de claves TLS para descifrarlo. Lista de claves RSA: abre un cuadro de diálogo para configurar las claves privadas RSA para el descifrado. Obsoleto a favor del diálogo de preferencias -> Claves RSA.
  • Clave pre-compartida: se utiliza para configurar la clave de descifrado para conjuntos de cifrado PSK. No se usa generalmente.
  • Archivo de depuración TLS (tls.debug_logfile): ruta para escribir detalles internos sobre el proceso de descifrado. Contendrá los resultados del descifrado y las claves que se utilizaron en este proceso. Esto se puede usar para diagnosticar por qué falla el descifrado.

También se requieren las siguientes preferencias de protocolo TCP para habilitar el descifrado de TLS:

  • Permitir que el subdissector vuelva a ensamblar flujos TCP. Habilitado de forma predeterminada.
  • Volver a montar segmentos fuera de orden (desde Wireshark 3.0, desactivado de forma predeterminada).

A partir de Wireshark 3.0, se puede encontrar un nuevo diálogo de claves RSA en Editar- > Preferencias – > Claves RSA. En este cuadro de diálogo, utilice Agregar nuevo archivo de claves… botón para seleccionar un archivo. Se le solicitará una contraseña si es necesario. El token Agregar nuevo… el botón se puede usar para agregar claves desde un HSM que puede requerir el uso de Agregar nuevo proveedor… para seleccionar, seleccione un archivo DLL/. so y una configuración adicional específica del proveedor.

El archivo de clave RSA puede ser una clave privada en formato PEM o un almacén de claves PKCS#12 (normalmente un archivo con a .pfx or .extensión p12). La clave PKCS#12 es un archivo binario, pero el formato PEM es un archivo de texto que se ve así:

  • -----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----

El diálogo de lista de claves RSA obsoleto puede eliminarse en algún momento. Para configurar las claves, utilice el cuadro de diálogo Claves RSA en su lugar. Para cambiar el protocolo para los datos de red descifrados, haga clic con el botón derecho en un paquete TLS y use Decodificar Como para cambiar el protocolo Actual para el puerto TLS. Los campos Dirección IP y Puerto no se utilizan.

Archivo de captura de ejemplo

Consulte también SampleCaptures#SSL_with_decryption_keys.

  • volcado.pcapng TLSv1.2 capture con 73 conjuntos de cifrado, necesita este premaster.archivo txt para descifrar el tráfico. (vinculado desde https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)

  • tls12-dsb.rastreo pcapng-TLS 1.2 con claves de descifrado incrustadas.
  • https://github.com/wireshark/wireshark/blob/master/test/captures – El conjunto de pruebas contiene varias trazas TLS.

Filtro de pantalla

Se puede encontrar una lista completa de campos de filtro de pantalla TLS en la referencia de filtro de pantalla

Mostrar solo el tráfico basado en TLS:

  • tls

Filtro de captura

No puede filtrar directamente los protocolos TLS durante la captura. Sin embargo, si conoce el puerto TCP utilizado (consulte más arriba), puede filtrar en ese, por ejemplo, utilizando el puerto tcp 443.

Usando el (Pre)-Master-Secret

El secreto maestro habilita el descifrado TLS en Wireshark y se puede suministrar a través del Archivo de Registro de claves. El secreto pre-maestro es el resultado del intercambio de claves y Wireshark puede convertirlo en secreto maestro. Este secreto pre-maestro se puede obtener cuando se proporciona una clave privada RSA y se utiliza un intercambio de claves RSA.

Instrucciones paso a paso para descifrar el tráfico TLS de Chrome o Firefox en Wireshark:

  1. Cierre el navegador por completo (consulte el administrador de tareas para asegurarse).
  2. Establezca la variable de entorno SSLKEYLOGFILE en la ruta de acceso absoluta de un archivo con escritura.

  3. Inicie el navegador.
  4. Compruebe que se ha creado la ubicación del paso 2.
  5. En Wireshark, vaya a Preferencias – > Protocolos – > TLS, y cambie la preferencia de nombre de archivo de registro (Pre)-Maestro-Secreto a la ruta del paso 2.

  6. Iniciar la captura de Wireshark.
  7. Abrir un sitio web, por ejemplo https://www.wireshark.org/

  8. Compruebe que los datos descifrados es visible. Por ejemplo, usando el filtro tls y (http o http2).

Para Windows, una variable de entorno se puede establecer globalmente como se describe en este tutorial, pero no se recomienda, ya que es fácil de olvidar y puede ser un problema de seguridad, ya que permite descifrar todo el tráfico TLS. Una mejor manera de establecer la variable de entorno es a través de un archivo por lotes. Crear un archivo start-fx.cmd con:

  • @echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox

Cambie la ruta de acceso al archivo SSLKEYLOG según sea necesario y reemplace Firefox por chrome para Google Chrome. Este mecanismo actualmente (2019) no funciona para Safari, Microsoft Edge y otros, ya que sus bibliotecas TLS (Microsoft SChannel/Apple SecureTransport) no admiten este mecanismo. Este mecanismo también funciona para aplicaciones que no sean navegadores web, pero depende de la biblioteca TLS utilizada por la aplicación.

Ejemplos de otras aplicaciones:

  • Las aplicaciones que usan OpenSSL podrían usar un truco GDB o LD_PRELOAD para extraer los secretos. Esto incluye Python.

    • Para una guía para el servidor HTTP Apache usando esto libsslkeylog.so biblioteca, ver este post.

  • Para los programas Java, los secretos se pueden extraer de la preferencia de registro de depuración de TLS, o generar directamente en el formato que requiere Wireshark a través de un agente Java. Dos proyectos similares:
    • jSSLKeyLog:http://jsslkeylog.sourceforge.net/

    • extract-tls-secrets:https://github.com/neykov/extract-tls-secrets

  • Los scripts Python también se pueden editar para volcar claves.

Para obtener una encuesta de las aplicaciones y bibliotecas TLS compatibles, consulte también la página 19 de la presentación de Peter Wu del SharkFest’18 EU Decryption SSL/TLS.

Incrustar secretos de descifrado en un archivo pcapng

Desde Wireshark 3.0, puede incrustar el archivo de registro de claves TLS en un archivo pcapng. Esto hace que sea mucho más fácil distribuir archivos de captura con secretos de descifrado, y hace que el cambio entre archivos de captura sea más fácil, ya que la preferencia del protocolo TLS no tiene que actualizarse. Para agregar el contenido de las claves del archivo de registro de claves.txt para capturar archivos.pcap y escriba el resultado en out-dsb.pcapng:

  • editcap inject inject-secrets tls,keys.txt en.pcap out-dsb.pcapng

El sufijo dsb significa Bloque Secreto de descifrado (DSB) y forma parte de la especificación pcapng.

Un archivo de registro de claves puede contener claves que no están relacionadas con un archivo de captura. Para asegurarse de que las claves innecesarias no se filtran, puede utilizar el inject-tls-secrets.py script de https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 para filtrar el archivo de registro de claves y agregar los secretos necesarios a un archivo de captura. El script de shell ha sido probado con Linux y macOS, pero una versión de Python 3 también está disponible para todas las plataformas, incluido Windows. Ejemplo:

  • git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap

Véase también

Algunos otros protocolos se derivan de TLS. Esto incluye:

  • DTLS se basa en el estándar TLS y se ejecuta sobre UDP como protocolo de transporte.

  • QUIC es un protocolo en desarrollo que utiliza TLS para su cifrado, el estado de Wireshark se puede rastrear en https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.

  • https://en.wikipedia.org/wiki/Transport_Layer_Security Artículo de Wikipedia para TLS

  • https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf Presentación de SharkFest’16 EU de Sake Blok sobre solución de problemas SSL con Wireshark/Tshark (o vea el video de la presentación en https://youtu.be/oDaDY9QCnXk)

  • https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf Presentación de SharkFest’18 EU de Peter Wu sobre descifrado de TLS (video de una charla anterior en Asia en https://youtu.be/bwJEBwgoeBg)

  • https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest’19 US presentación de Peter Wu describiendo el descifrado TLS y el uso del descifrado incrustado secretos (https://youtu.be/Ha4SLHceF6w).

  • ¿Cómo funciona SSL/TLS trabajo? – Intercambio de Pila de seguridad de la información

  • SSL sin llave: Los detalles técnicos esenciales con una buena introducción en TLS

  • PolarProxy de Netresec es un proxy SSL/TLS transparente creado para respondedores de incidentes e investigadores de malware que está diseñado principalmente para interceptar y descifrar el tráfico cifrado TLS de malware. PolarProxy descifra y vuelve a cifrar el tráfico TLS, a la vez que guarda el tráfico descifrado en un archivo PCAP que se puede cargar en Wireshark o en un sistema de detección de intrusos (IDS).

  • CategoryHowTo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *