Determinare la versione SSL / TLS utilizzando Wireshark

7

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

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

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

EDIT:

Eccoilriquadrodeidettaglidelpacchettodel4°pacchettodopoaverrichiamatounaconnessionealdatabaseeselezionandoFollow->StreamTCP:

Questoèciòchevedodurantel'analisiutilizzandoMicrosoftMessageAnalyzer.IlriquadrodeidettagliTLSèperilpacchettoClientHello.

    
posta Guru Josh 18.11.2016 - 09:22
fonte

3 risposte

6

(Aggiungere una nuova risposta che dovrebbe essere definitiva, lasciando il vecchio in giro come utile debug per come siamo arrivati qui. Il credito per puntare alla risposta effettiva nei commenti va a @ P4cK3tHuNt3R e @ dave_thompson_085)

Using Wireshark, I am trying to determine the version of SSL/TLS that is being used with the encryption of data between a client workstation and another workstation on the same LAN running SQL Server.

Stai visualizzando una connessione che utilizza MS-TDS ("Protocollo flusso dati tabulare" ):

...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 visualizzi la documentazione del protocollo TDS n , specifica che i pacchetti SSL sono incapsulati all'interno di un wrapper TDS:

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

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

  • 0x16èl'indicatorediintestazioneTLS"Handshake",
  • 0x03 0x03 è la versione TLS (TLS 1.2, come per RFC 5246 ):

    La versione del protocollo in uso. Questo documento descrive TLS Versione 1.2, che utilizza la versione {3, 3}. Il il valore di 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 diversi report sul fatto che Wireshark possa analizzare correttamente i pacchetti TDS con TLS codificato. Penso che la risposta sia ciò che hai iniziato - ti dirà che TLS è lì, ma non analizzerà i dettagli come farebbe con una sessione TLS nativa.

Come per questa domanda StackOverflow , sembra che Microsoft Network Monitor sia in grado di analizzare entrambi i livelli di incapsulamento. E un commento afferma che Microsoft Message Analyzer è l'equivalente più recente di quello strumento .

    
risposta data 23.11.2016 - 17:34
fonte
4

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

Aggiornamento dopo che un pacchetto di esempio è stato aggiunto alla domanda -

Il pacchetto che hai fornito non è chiaramente un pacchetto TLS. Osservando l'esagono che hai fornito, i primi tre ottetti dei dati TCP sono 12 01 00 , ma per un pacchetto TLS i primi tre byte dovrebbero essere 16 03 0X , dove 0x16 significa TLS "Handshake" tipo di record, 0x03 significa 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, c'è una stringa "sqlexpress2012" in chiaro nel pacchetto, che non sarebbe presente se fosse un client TLS Hello.

(Comehodeciso120100eral'iniziodeidati?Iprimi14bytedelpacchettosonol'intestazioneEthernetIsuccessivi20bytesonol'intestazioneIPIl13°bytedell'intestazioneTCPè0x50,eilprimonibblediquelbyte4volteèlalunghezzadell'intestazioneTCP,quindi5*4=20.Quindiiprimibytedeidatieffettiviinizianoa54bytein1201006c0000...)

Quindi,seWiresharknonlovisualizzacomeTLS,èperchénonloè.Dovrestirivisitarelaconfigurazionedeltuoserver.

Rispostaoriginale:

PoichétalipacchettinonsitrovanosuunaportaTLSstandard(ades.,443),ènecessariocomunicareaWiresharkdiinterpretarlicomepacchettiTLS.Perimpostazionepredefinita,laporta1433nonvieneinterpretatacomeaventeTLS;ilvalorepredefinitoperTDSdeveesserenoncrittografato.QuindidasoloWiresharknonloanalizzeràcomeTLS:

Percambiarequesto,cliccaconiltastodestrosuunodeipacchettieseleziona"Decodifica come". Assicurati che il "valore" della porta sia impostato su 1433 e quindi imposta "Corrente" su SSL:

Wireshark Finestra di dialogo

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

Infine,seguardiilriquadrodeidettagliperunodeipacchetti(tisuggeriscodiusareilserverciao,nonilclientciao,nelcasoilprotocollosiastatoregolato)vedrailaversioneTLSabbastanzachiaramente:

    
risposta data 18.11.2016 - 15:15
fonte
1

Ho appena usato questo filtro in Wireshark per trovare il traffico TLS 1.0:

ssl.handshake.version==0x0301

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

    
risposta data 03.01.2018 - 22:50
fonte

Leggi altre domande sui tag