Impronta digitale passiva del client HTTPS

7

È possibile impronte digitali passive di un client HTTPS, basato esclusivamente sui dati visibili a una rete che intercetta di nascosto?

In altre parole, considera una casella di monitoraggio della rete in grado di visualizzare tutti i pacchetti (ma non conosce le chiavi private e controlla solo passivamente il traffico). Può dedurre una ragionevole ipotesi sulla versione del client utilizzata, basata solo su ciò che è visibile nella traccia della rete? Ad esempio, possiamo indovinare quale browser e quale versione viene utilizzata sul lato client?

Ovviamente TLS crittografa i dati e il payload, ma ci sono alcuni valori che vengono inviati in chiaro: l'insieme di ciphersuites suggerite dal client, la data / ora del client (primi 4 byte di client_random ), un elenco dei metodi di compressione supportati dal client e un elenco di estensioni TLS supportate dal client e, naturalmente, l'ordine dei valori in ciascuno di questi elenchi. C'è abbastanza variazione qui per inferire quale browser l'utente sta usando e distinguere tra i principali browser? C'è abbastanza da distinguere tra le versioni del browser?

Sto pensando a qualcosa di analogo a p0f (che fa fingerprinting del sistema operativo passivo ), ma qui noi ' sto cercando la parte non crittografata di una connessione HTTPS (piuttosto che le intestazioni TCP), e qui l'obiettivo è di dedurre il client browser / HTTPS utilizzato dall'host client (piuttosto che dedurre il sistema operativo utilizzato dal client).

    
posta D.W. 17.06.2016 - 01:28
fonte

3 risposte

2

Lee Brotherston ha parlato al DerbyCon 2015 su Attacchi furtivi e Smarter Defending con TLS Fingerprinting - diapositive - video .

Ha anche rilasciato il codice per seguire il discorso - link

Quanto segue è tratto dal suo sito web - link

Transport Layer Security (TLS) provides security in the form of encryption to all manner of network connections from legitimate financial transactions, to private conversations, and malware calling home. The inability for an eavesdropper to analyze this encrypted traffic protects its users, whether they are legitimate or malicious. Those using TLS operate under the assumption that although an eavesdropper can easily observe the existence of their session, its source and destination IP addresses, that the content itself is secure and unreadable without access to cryptographic keying material at one or both ends of the connection. On the surface this holds true, barring any configuration flaws or exploitable vulnerabilities. However, using TLS Fingerprinting, it is easy to quickly and passively determine which client is being used, and then to apply this information from both the attacker and the defender perspectives.

[...]

FingerprinTLS

FingerprinTLS is designed to rapidly identify known TLS connections and to fingerprint unknown TLS connections. Input is taken either via live network sniffing or reading a PCAP file. Output for recognized connections is (currently) in human readable form and for unknown fingerprints in the JSON format used for the fingerprint definitions.

Fingerprints which are generated can be exported as a C struct by Fingerprintout and compiled back into FingerprinTLS to enable detecting in future instances.

Lee dimostra quanto sia facile catturare i client di impronte digitali dalle firme TLS in un discorso successivo che ha fatto a SecTor CA - link : controlla le diapositive 66 e 69-70.

fingerprintls -i en0 -s

Mostra anche come importare nuove firme qui - link

Un'altra dimostrazione mostra come sfruttare il Berkeley Packet Filter (BPF) da altri strumenti e framework come Wireshark, tcpdump e / o libpcap - link

Infine, Lee analizza una copia campione dal videogioco Pokemon Go su un dispositivo Android - link

Sicuramente i metodi più vecchi descritti da alcune delle altre risposte qui potrebbero essere ancora pertinenti, ma ti suggerisco di controllare il lavoro precedente. Per ulteriori informazioni sul lavoro svolto da SSLLab, consulta - link - che è un modulo Apache per impronte digitali client client passive

    
risposta data 24.07.2016 - 08:28
fonte
0

Sì, è possibile eseguire alcune impronte digitali del traffico SSL. Sebbene si possa trovare un'impronta digitale di un client come la maggior parte di loro utilizzerà una delle librerie comuni come openssl. Quindi potresti essere in grado di impronte digitali di diverse versioni di queste librerie rispetto a curl vs firefox vs wget.

    
risposta data 17.06.2016 - 02:33
fonte
0

Sì. In questo modo è possibile impronte digitali dei client. Esistono anche alcuni strumenti esistenti che implementano questo.

Tuttavia, sembra non essere molto preciso. Potrebbe essere in grado di riconoscere un tipo di browser principale (ad es. Firefox, Chrome, Safari), ma è improbabile che sia in grado di identificare con precisione il numero di versione e qualsiasi impronta ottenuta in questo modo abbia una probabilità significativa di essere ambigua. Sembra che ci siano spesso più client che potrebbero essere coerenti con la traccia SSL osservata, e in questo modo si ottengono in genere solo alcuni bit di entropia in questo modo.

Lo strumento p0f include il supporto per inferire il client TLS basato su una traccia, utilizzando un database di impronte digitali. Puoi trovare le descrizioni di come funziona sulla pagina github di SSL Labs .

Il seguente documento discute anche degli esperimenti per impronte digitali dei client TLS in questo modo:

Martin Husák, Milan Čermák, Tomáš Jirsık, Pavel Čeleda. Analisi del traffico HTTPS e identificazione del client mediante impronte digitali passive SSL / TLS . URASIP Journal on Information Security, 2016

    
risposta data 24.06.2016 - 07:19
fonte