Determine la versión SSL / TLS usando Wireshark

6

Con Wireshark, estoy tratando de determinar la versión de SSL / TLS que se está utilizando con el cifrado de datos entre una estación de trabajo cliente y otra estación de trabajo en la misma LAN que ejecuta SQL Server. La documentación sobre este tema sugiere ver los mensajes de ServerHello y ClientHello, pero no puedo ver ninguno de estos mensajes en la fuente de mensajes de Wireshark. Estoy usando este filtro de visualización:

tcp.len > 1 & & tcp.port == 1433

Puedo confirmar que se está produciendo el cifrado de datos y que los paquetes que se muestran con el filtro anterior están relacionados con la transferencia de datos de SQL Server que deseo examinar. Este es el aspecto del mensaje de Wireshark:

EDITAR:

AquíestáelpaneldedetallesdelpaquetedelcuartopaquetedespuésdeinvocarunaconexióndebasededatosyseleccionarSeguir->CorrientedeTCP:

EstoesloqueveocuandoanalizousandoMicrosoftMessageAnalyzer.ElpaneldedetallesdeTLSesparaelpaquetedesaludodelcliente.

    
pregunta Guru Josh 18.11.2016 - 09:22
fuente

3 respuestas

5

(Agregar una nueva respuesta que debería ser definitiva, dejar la antigua como útil depuración de cómo llegamos aquí. El crédito por señalar la respuesta real en los comentarios va a @ P4cK3tHuNt3R y @ dave_thompson_085)

  

Utilizando Wireshark, estoy tratando de determinar la versión de SSL / TLS que   se está utilizando con el cifrado de datos entre una estación de trabajo cliente   y otra estación de trabajo en la misma LAN que ejecuta SQL Server.

Está viendo una conexión que utiliza MS-TDS ("Protocolo de flujo de datos tabular" ):

...the Tabular Data Stream Protocol, which facilitates interaction with
a database server and provides for authentication and channel encryption
negotiation; specification of requests in SQL (including Bulk Insert);
invocation of a stored procedure, also known as a Remote Procedure Call
(RPC); returning of data; and Transaction Manager Requests. It is an 
application layer request/response protocol.

Si ve el Documentación del protocolo TDS n , especifica que los paquetes SSL están encapsulados dentro de un contenedor TDS:

A TLS/SSL negotiation packet is a PRELOGIN (0x12) packet header encapsulated
with TLS/SSL payload.

En el screencap de Microsoft Message Analyzer que publicaste, podemos ver el encabezado TDS (en el recuadro en Rojo, comienza con 0x12), seguido varios bytes más tarde por el paquete TLS CLIENT_HELLO (en el recuadro en Azul, comienza con 0x16 0x03 0x03):

  • 0x16eselindicadordeencabezado"Handshake" de TLS,
  • 0x03 0x03 es la versión TLS (TLS 1.2, según RFC 5246 ):

    La versión del protocolo que se está empleando. Este documento describe la versión 1.2 de TLS, que utiliza la versión {3, 3}. los el valor de versión 3.3 es histórico, derivado del uso de {3, 1} para TLS 1.0.

De modo que la respuesta simple a su pregunta, "determine la versión de SSL / TLS", es "TLS 1.2".

Ahora, he visto diversos informes sobre si Wireshark puede analizar correctamente los paquetes de TDS con TLS codificado. Creo que la respuesta es con lo que empezaste: te dirá que TLS está ahí, pero no analizará los detalles como lo haría con una sesión TLS nativa.

Según esta pregunta de StackOverflow , Parece que Microsoft Network Monitor es capaz de analizar ambos niveles de encapsulación. Y un comentario en el mismo indica que Microsoft Message Analyzer es el equivalente más reciente de esa herramienta .

    
respondido por el gowenfawr 23.11.2016 - 17:34
fuente
4

(Ignore esta respuesta, la cual me voy a enviar a los datos históricos, y lea mi otra respuesta, que explica lo que realmente está pasando)

Actualizar después de agregar un paquete de ejemplo a la pregunta -

El paquete que ha proporcionado claramente no es un paquete TLS. En cuanto al hexágono que ha proporcionado, los primeros tres octetos de los datos TCP son 12 01 00 , pero para un paquete TLS los primeros tres bytes deben ser 16 03 0X , donde 0x16 significa TLS "Handshake" tipo de registro, 0x03 significa SSLv3 / TLSv1.*, y el 0x0X indica la versión de TLS: 0x01 para TLS 1.0, 0x02 para TLS 1.1 y 0x03 para TLS 1.2.

Además, hay una cadena de texto "sqlexpress2012" en el paquete, que no estaría allí si se tratara de un Hola del Cliente TLS.

(¿Cómodecidíque120100eraelcomienzodelosdatos?Losprimeros14bytesdelpaquetesonelencabezadodeEthernet.Lossiguientes20bytessonelencabezadodeIP.El13erbytedelencabezadodeTCPes0x50,yelprimernibbledeesebytemultiplicadopor4eslalongituddelencabezadoTCP,porloque5*4=20.Porlotanto,losprimerosbytesdelosdatosrealescomienzancon54bytesen1201006c0000...)

Entonces,siWiresharknomuestraestocomoTLS,esporquenoloes.Debevolveravisitarlaconfiguracióndesuservidor.

Respuestaoriginal:

DebidoaqueesospaquetesnoestánenunpuertoTLSestándar(porejemplo,443),debedecirleaWiresharkquelosinterpretecomopaquetesTLS.Pordefecto,elpuerto1433noseinterpretacomoquetieneTLS;elvalorpredeterminadoparaTDSesestarsincifrar.Entonces,porsísolo,WiresharknoloanalizarácomoTLS:

Paracambiaresto,hagaclicconelbotónderechoenunodelospaquetesyseleccione"Decodificar como". Asegúrese de que el "valor" del puerto esté establecido en 1433 y luego configure "Actual" en SSL:

encryption