TLS
Transport Layer Security (TLS) ger säkerhet i kommunikationen mellan två värdar. Det ger integritet, autentisering och konfidentialitet. Det används oftast i webbläsare, men kan användas med alla protokoll som använder TCP som transportlager.
Secure Sockets Layer (SSL) är föregångaren till TLS-protokollet. Dessa namn används ofta omväxlande vilket kan leda till viss förvirring:
-
en konfiguration som använder SSL-protokollet (SSLv2/SSLv3) är osäker. TLS-protokollet bör användas istället.
-
X. 509 certifikat för autentisering kallas ibland även SSL-certifikat.
-
Vissa program (t.ex. e-post) använder en enda port för både okrypterade och krypterade sessioner. För att ändra från okrypterad till krypterad används (START) TLS. När en enda port direkt använder TLS-protokollet kallas det ofta SSL.
- av historiska skäl hänvisar programvara (Wireshark ingår) till SSL eller SSL/TLS medan det faktiskt betyder TLS-protokollet eftersom det idag är vad alla använder.
Protokollberoende
-
TCP: Vanligtvis använder TLS TCP som sitt transportprotokoll.
TLS-dissektion i Wireshark
TLS-dissektorn är fullt funktionell och stöder till och med avancerade funktioner som dekryptering av TLS om lämpliga hemligheter tillhandahålls (#TLS_Decryption). sedan Wireshark 3.0 har TLS-dissektorn bytt namn från SSL till TLS. Användning av ssl display filter kommer att avge en varning.
TLS dekryptering
Wireshark stöder TLS dekryptering när lämpliga hemligheter tillhandahålls. De två tillgängliga metoderna är:
-
Nyckelloggfil med hemligheter per session (#Using_the_.28Pre.29-Master-Hemlighet).
- dekryptering med en RSA-privat nyckel.
en nyckelloggfil är en universell mekanism som alltid möjliggör dekryptering, även om en Diffie-Hellman (DH) nyckelutbyte används. RSA private key fungerar endast i ett begränsat antal fall.
nyckelloggfilen är en textfil som genereras av applikationer som Firefox, Chrome och curl när miljövariabeln SSLKEYLOGFILE är inställd. För att vara exakt skriver deras underliggande bibliotek (NSS, OpenSSL eller boringssl) de nödvändiga hemligheterna per session till en fil. Den här filen kan därefter konfigureras i Wireshark (#Using_the_.28Pre.29-Master-Hemlighet).
RSA private key-filen kan endast användas under följande omständigheter:
- den chiffersvit som valts av servern använder inte (EC)DHE.
-
protokollversionen är SSLv3, (D) TLS 1.0-1.2. Det fungerar inte med TLS 1.3.
-
den privata nyckeln matchar servercertifikatet. Det fungerar inte med klientcertifikatet eller certifikatutfärdaren (CA) certifikat.
-
sessionen har inte återupptagits. Handslaget måste innehålla meddelandet ClientKeyExchange handshake.
nyckelloggfilen rekommenderas vanligtvis eftersom den fungerar i alla fall, men kräver kontinuerlig förmåga att exportera hemligheterna från antingen klienten eller serverapplikationen. Den enda fördelen med den privata RSA-nyckeln är att den bara behöver konfigureras en gång i Wireshark för att möjliggöra dekryptering, med förbehåll för ovanstående begränsningar.
Inställningar
gå till redigera- > Inställningar. Öppna Protokollträdet och välj TLS. Alternativt väljer du ett TLS-paket i paketlistan, högerklickar på TLS-lagret i vyn paketdetaljer och öppnar menyn Protokollinställningar.
de anmärkningsvärda TLS-protokollinställningarna är:
- (Pre)-Master-Secret log filnamn (tls.keylog_file): sökväg för att läsa TLS-nyckelloggfilen för dekryptering.
-
RSA keys list: öppnar en dialogruta för att konfigurera RSA privata nycklar för dekryptering. Föråldrat till förmån för inställningarna- > RSA nycklar dialog.
- Pre-Shared-Key: används för att konfigurera dekrypteringsnyckeln för PSK-chiffersviter. Inte allmänt används.
- TLS felsökningsfil (tls.debug_logfile): sökväg för att skriva interna detaljer om dekrypteringsprocessen. Kommer att innehålla resultaten av dekryptering och nycklarna som användes i denna process. Detta kan användas för att diagnostisera varför dekryptering misslyckas.
följande TCP-protokollinställningar krävs också för att aktivera TLS-dekryptering:
- Tillåt subdissector att återmontera TCP-strömmar. Aktiverad som standard.
- återmontera Out-of-order segment (sedan Wireshark 3.0, inaktiverad som standard).
börjar med Wireshark 3.0, en ny RSA nycklar dialog kan hittas på Redigera – > Inställningar -> RSA nycklar. I den här dialogrutan använder du Lägg till ny nyckelfil… knapp för att välja en fil. Du kommer att bli ombedd att ange ett lösenord om det behövs. Lägg till nya token… knappen kan användas för att lägga till nycklar från en HSM som kan kräva att du använder Lägg till ny leverantör… för att välja Välj en DLL/. so-fil och ytterligare leverantörsspecifik konfiguration.
RSA-nyckelfilen kan antingen vara en PEM-format privat nyckel eller en PKCS # 12 keystore (vanligtvis en fil med en .pfx eller .P12 förlängning). PKCS # 12-tangenten är en binär fil, men PEM-formatet är en textfil som ser ut så här:
-
-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----
den föråldrade dialogrutan för RSA-nycklar kan tas bort vid någon tidpunkt. För att konfigurera nycklar, använd dialogrutan RSA-nycklar istället. För att ändra protokollet för dekrypterade nätverksdata, högerklicka på ett TLS-paket och använd Decode As för att ändra det aktuella protokollet för TLS-porten. Fälten IP-adress och Port är oanvända.
exempel fånga fil
Se även SampleCaptures#SSL_with_decryption_keys.
-
dumpa.pcapng TLSv1.2 fånga med 73 chiffer sviter, du behöver denna premaster.txt-fil för dekryptering av trafiken. (länkad från https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)
- tls12-dsb.pcapng-TLS 1.2 spår med dekrypteringsnycklar inbäddade.
-
https://github.com/wireshark/wireshark/blob/master/test/captures – testpaketet innehåller olika TLS-spår.
visningsfilter
en komplett lista över TLS – visningsfilterfält finns i visningsfilterreferensen
visa endast TLS-baserad trafik:
-
tls
Capture Filter
Du kan inte direkt filtrera TLS-protokoll när du tar. Men om du känner till TCP-porten som används (se ovan) kan du filtrera på den, till exempel med tcp-port 443.
använda (Pre)-Master-Secret
master secret möjliggör TLS-dekryptering i Wireshark och kan levereras via Nyckelloggfilen. Pre-master secret är resultatet av nyckelutbytet och kan omvandlas till en master secret av Wireshark. Denna pre-master hemlighet kan erhållas när en RSA privat nyckel tillhandahålls och en RSA nyckelutbyte är i bruk.
steg-för-steg-instruktioner för att dekryptera TLS-trafik från Chrome eller Firefox i Wireshark:
- stäng webbläsaren helt (kontrollera din Aktivitetshanterare bara för att vara säker).
-
Ange miljövariabel SSLKEYLOGFILE till den absoluta sökvägen för en skrivbar fil.
- starta webbläsaren.
- kontrollera att platsen från steg 2 skapas.
-
i Wireshark, gå till Inställningar – > protokoll -> TLS, och ändra (Pre)-Master-Secret log filnamn preferens till sökvägen från steg 2.
- starta Wireshark capture.
-
öppna en webbplats, till exempelhttps://www.wireshark.org/
-
kontrollera att de dekrypterade data är synliga. Till exempel använder du filtret tls och (http eller http2).
För Windows kan en miljövariabel ställas in globalt som beskrivs i detta genomgång, men det rekommenderas inte eftersom det är lätt att glömma och kan vara ett säkerhetsproblem eftersom det tillåter dekryptering av all din TLS-trafik. Ett bättre sätt att ställa in miljövariabeln är via en batchfil. Skapa en fil start-fx.cmd med:
-
@echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox
ändra sslkeylogfile-sökvägen efter behov och ersätt firefox med chrome för Google Chrome. Denna mekanism för närvarande (2019) fungerar inte för Safari, Microsoft Edge och andra eftersom deras TLS-bibliotek (Microsoft SChannel/Apple SecureTransport) inte stöder denna mekanism. Denna mekanism fungerar också för andra applikationer än webbläsare, men det är beroende av TLS-biblioteket som används av applikationen.
exempel på andra applikationer:
-
program som använder OpenSSL kan använda ett GDB eller ett LD_PRELOAD-trick för att extrahera hemligheterna. Detta inkluderar Python.
-
För en genomgång för Apache HTTP-Server med detta libsslkeylog.so bibliotek, se det här inlägget.
-
- för Java-program kan hemligheter extraheras från TLS-felsökningsloggpreferensen eller matas ut direkt i formatet Wireshark kräver via en Java-agent. Två liknande projekt:
-
jSSLKeyLog: http://jsslkeylog.sourceforge.net/
-
extract-TLS-secrets: https://github.com/neykov/extract-tls-secrets
-
-
Python skript kan redigeras för att dumpa nycklar samt.
för en undersökning av TLS-applikationer och bibliotek som stöds, Se även sidan 19 i Peter wus SSL/TLS-dekryptering SharkFest’18 EU-presentation.
bädda in dekrypteringshemligheter i en pcapng-fil
sedan Wireshark 3.0 kan du bädda in TLS-nyckelloggfilen i en pcapng-fil. Detta gör det mycket lättare att distribuera capture-filer med dekrypteringshemligheter och gör det lättare att växla mellan capture-filer eftersom TLS-protokollets preferens inte behöver uppdateras. För att lägga till innehållet i Nyckel loggfil nycklar.txt för att fånga filen i.pcap och skriv resultatet till out-dsb.pcapng:
-
editcap-injicera-hemligheter tls,nycklar.txt in.pcap ut-dsb.pcapng
Dsb-suffixet står för Dekrypteringshemligheter Block (DSB) och är en del av pcapng-specifikationen.
en nyckel loggfil kan innehålla nycklar som inte är relaterade till en capture-fil. För att säkerställa att onödiga nycklar inte läcker ut kan du använda inject-tls-secrets.py script från https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 för att filtrera nyckelloggfilen och lägga till nödvändiga hemligheter till en capture-fil. Skalskriptet har testats med Linux och macOS, men en Python 3-version är också tillgänglig för alla plattformar inklusive Windows. Exempel:
-
git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap
Se även
vissa andra protokoll härrör från TLS. Detta inkluderar:
-
DTLS är baserat på TLS-standarden och körs ovanpå UDP som ett transportprotokoll.
-
QUIC är ett utvecklingsprotokoll som använder TLS för kryptering, Wiresharks status kan spåras på https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.
-
https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia-artikel för TLS
- https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdfSharkFest’16 EU-presentation av Sake Blok om felsökning SSL med Wireshark/Tshark (eller titta på videon av presentationen påhttps://youtu.be/oDaDY9QCnXk)
-
https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdfsharkfest’18 EU presentation av Peter Wu på TLS dekryptering (video för ett tidigare samtal i Asien påhttps://youtu.be/bwJEBwgoeBg)
-
https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdfsharkfest’19 us presentation av Peter Wu beskriver TLS dekryptering och användning av inbäddade dekryptering hemligheter (https://youtu.be/Ha4SLHceF6w).
-
hur fungerar SSL/TLS? – Informationssäkerhet Stack Exchange
-
Keyless SSL: Nitty Gritty tekniska detaljer med en bra introduktion i TLS
-
PolarProxy från Netresec är en transparent SSL / TLS proxy skapad för incident responders och malware forskare som främst är utformad för att fånga upp och dekryptera TLS krypterad trafik från skadlig kod. PolarProxy dekrypterar och krypterar TLS-trafik, samtidigt som du sparar den dekrypterade trafiken i en PCAP-fil som kan laddas i Wireshark eller ett intrusion detection system (IDS).
-
CategoryHowTo