it-swarm-eu.dev

Determinare la versione SSL / TLS utilizzando Wireshark

Utilizzando Wireshark, sto cercando di determinare la versione di SSL/TLS utilizzata con la crittografia dei dati tra una workstation client e un'altra workstation sulla stessa LAN che esegue SQL Server. La documentazione su questo argomento suggerisce di esaminare i messaggi ServerHello e ClientHello ma non riesco a visualizzare tali messaggi nel feed dei messaggi di Wireshark. Sto usando questo filtro di visualizzazione:

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

Posso confermare che si sta verificando la crittografia dei dati e che i pacchetti visualizzati utilizzando il filtro sopra sono correlati al trasferimento di dati di SQL Server che desidero esaminare. Ecco come appare il feed dei messaggi di Wireshark:

enter image description here

MODIFICARE:

Ecco il riquadro dei dettagli del pacchetto del 4 ° pacchetto dopo aver richiamato una connessione al database e aver selezionato Segui -> Flusso TCP:

Packet Details Pane

Questo è quello che vedo quando analizzo utilizzando Microsoft Message Analyzer. Il riquadro dei dettagli TLS è per il pacchetto Client Hello.

Microsoft Message Analyzer Main Pane

Microsoft Message Analyzer TLS Details Pane

13
Guru Josh

(Aggiungendo una nuova risposta che dovrebbe essere definitiva, lasciando il vecchio in giro poiché è utile il debug per come siamo arrivati ​​qui. Il merito di aver puntato alla risposta effettiva nei commenti va a @ P4cK3tHuNt3R e @ dave_thompson_085)

Utilizzando Wireshark, sto cercando di determinare la versione di SSL/TLS utilizzata con la crittografia dei dati tra una workstation client e un'altra workstation sulla stessa LAN che esegue SQL Server.

Stai visualizzando una connessione che utilizza MS-TDS ("Tabular Data Stream Protocol"):

...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.

Se si visualizza documentatio protocol TDS n, specifica che i pacchetti SSL sono incapsulati in un wrapper TDS:

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

Nella screencap di Microsoft Message Analyzer che hai pubblicato, possiamo vedere l'intestazione TDS (in rosso, inizia con 0x12), seguita da diversi byte in seguito dal pacchetto TLS CLIENT_HELLO (in blu, inizia con 0x16 0x03 0x03):

TDS and encapsulated TLS headers

  • 0x16 è l'indicatore di intestazione TLS "Handshake",
  • 0x03 0x03 è la versione TLS (TLS 1.2, come da RFC 5246 ):

    La versione del protocollo utilizzato. Questo documento descrive TLS versione 1.2, che utilizza la versione {3, 3}. Il valore della versione 3.3 è storico, derivante dall'uso di {3, 1} per TLS 1.0.

Quindi la semplice risposta alla tua domanda, "determina la versione di SSL/TLS", è "TLS 1.2".

Ora, ho visto vari rapporti sul fatto che Wireshark possa analizzare correttamente i pacchetti TDS con TLS codificato. Penso che la risposta sia quella con cui hai iniziato: ti dirà che TLS è lì, ma non analizzerà i dettagli come farebbe con una sessione TLS nativa.

Secondo questa domanda StackOverflow , sembra che Microsoft Network Monitor sia in grado di analizzare entrambi i livelli di incapsulamento. E un commento in esso afferma che Microsoft Message Analyzer è il nuovo equivalente di quello strumento.

12
gowenfawr

(Ignora questa risposta, che sto lasciando per i dati storici, e leggi la mia altra risposta, che spiega cosa sta realmente succedendo)

Aggiornamento dopo l'aggiunta di un pacchetto di esempio alla domanda -

Il pacchetto che hai fornito non è chiaramente un pacchetto TLS. Guardando l'esagono che hai fornito, i primi tre ottetti dei TCP sono 12 01 00, ma per un pacchetto TLS i primi tre byte dovrebbero essere 16 03 0X, dove 0x16 indica il tipo di record "Handshake" TLS, 0x03 indica SSLv3/TLSv1. * e 0x0X indica la versione TLS - 0x01 per TLS 1.0, 0x02 per TLS 1.1 e 0x03 per TLS 1.2.

Inoltre, nel pacchetto è presente una stringa "sqlexpress2012" in chiaro, che non sarebbe presente se si trattasse di un client TLS Hello.

Marked up copy of provided packet

(Come ho deciso 12 01 00 è stato l'inizio dei dati? I primi 14 byte del pacchetto sono l'intestazione Ethernet. I successivi 20 byte sono l'intestazione IP. Il 13 ° byte dell'intestazione TCP è 0x50 e il primo nibble di quel byte per 4 volte è TCP, quindi 5 * 4 = 20. Quindi i primi byte di dati effettivi iniziano 54 byte in 12 01 00 6c 00 00 ...)

Quindi se Wireshark non lo mostrerà come TLS, è perché non lo è. È necessario rivisitare la configurazione del server.


Risposta originale:

Poiché tali pacchetti non si trovano su una porta TLS standard (ad es. 443), è necessario indicare a Wireshark di interpretarli come pacchetti TLS. Per impostazione predefinita, la porta 1433 non è interpretata come avente TLS; l'impostazione predefinita per TDS deve essere non crittografata. Quindi da solo Wireshark non lo analizzerà come TLS:

Wireshark default decoding for port 1433

Per modificarlo, fare clic con il tasto destro su uno dei pacchetti e selezionare "Decodifica come". Assicurarsi che il "valore" della porta sia impostato su 1433 e quindi impostare "Attuale" su SSL:

Wireshark "Decode As" dialog

Fai clic su OK e quando ritorni ai pacchetti vedrai che ora sono interpretati in modo più dettagliato:

Packets with SSL decoding turned on

Infine, se guardi il riquadro dei dettagli per uno dei pacchetti (ti suggerisco di usare il ciao del server, non il ciao del client, nel caso in cui il protocollo fosse regolato) vedrai la versione TLS abbastanza chiaramente:

Packet detail showing TLS version

4
gowenfawr

Uso questo filtro in Wireshark per trovare il traffico TLS 1.0:

ssl.handshake.version==0x0301

0x0302 è TLS 1.1 e 0x0303 è TLS 1.2.

1
Brett Smith