Articles

TLS

Transport Layer Security (TLS) biedt beveiliging in de communicatie tussen twee hosts. Het biedt integriteit, authenticatie en vertrouwelijkheid. Het wordt het meest gebruikt in webbrowsers, maar kan worden gebruikt met elk protocol dat TCP gebruikt als de transportlaag.

Secure Sockets Layer (SSL) is de voorganger van het TLS-protocol. Deze namen worden vaak door elkaar gebruikt wat tot enige verwarring kan leiden:

  • Een configuratie die het SSL-protocol gebruikt (SSLv2/SSLv3) is onveilig. In plaats daarvan moet het TLS-protocol worden gebruikt.

  • X. 509-certificaten voor authenticatie worden soms ook SSL-certificaten genoemd.

  • sommige toepassingen (zoals e-mail) gebruiken een enkele poort voor zowel niet-versleutelde als versleutelde sessies. Om van niet-versleuteld naar versleuteld over te schakelen, wordt (START)TLS gebruikt. Wanneer een enkele poort direct gebruik maakt van het TLS-protocol, wordt het vaak aangeduid als SSL.

  • om historische redenen verwijst software (inclusief Wireshark) naar SSL of SSL/TLS terwijl het eigenlijk het TLS-protocol betekent, aangezien dat tegenwoordig door iedereen wordt gebruikt.

Protocolafhankelijkheden

  • TCP: Meestal gebruikt TLS TCP als transportprotocol.

TLS-dissectie in Wireshark

de TLS-dissector is volledig functioneel en ondersteunt zelfs geavanceerde functies zoals decryptie van TLS indien de juiste geheimen worden verstrekt (#TLS_Decryption).

sinds Wireshark 3.0 is de TLS-dissector hernoemd van SSL naar TLS. Het gebruik van het ssl-schermfilter geeft een waarschuwing af.

TLS-decryptie

Wireshark ondersteunt TLS-decryptie wanneer de juiste geheimen worden verstrekt. De twee beschikbare methoden zijn:

  • Key log file using per session secrets (#Using_the_.28Pre.29-Meester-Geheim).

  • decryptie met behulp van een RSA-privésleutel.

een sleutellogbestand is een universeel mechanisme dat altijd decryptie mogelijk maakt, zelfs als een Diffie-Hellman (DH) sleuteluitwisseling wordt gebruikt. De RSA private sleutel werkt alleen in een beperkt aantal gevallen.

Het key log bestand is een tekstbestand gegenereerd door toepassingen zoals Firefox, Chrome en curl wanneer de sslkeylogfile omgevingsvariabele is ingesteld. Om precies te zijn, hun onderliggende bibliotheek (NSS, OpenSSL of boringssl) schrijft de vereiste geheimen per sessie naar een bestand. Dit bestand kan vervolgens worden geconfigureerd in Wireshark (#Using_the_.28Pre.29-Meester-Geheim).

het bestand met de RSA-privésleutel kan alleen in de volgende omstandigheden worden gebruikt:

  • De versleutelingssuite die door de server is geselecteerd, Gebruikt geen (EC)DHE.
  • De protocolversie is SSLv3, (D) TLS 1.0-1.2. Het werkt niet met TLS 1.3.

  • de private sleutel komt overeen met het servercertificaat. Het werkt niet met het clientcertificaat, noch met het certificaat van de certificeringsinstantie (CA).

  • de sessie is niet hervat. De handshake moet het clientkeyexchange handshake bericht bevatten.

het sleutellogboekbestand wordt over het algemeen aanbevolen omdat het in alle gevallen werkt, maar vereist de continue mogelijkheid om de geheimen te exporteren vanuit de client of de servertoepassing. Het enige voordeel van de RSA private sleutel is dat het slechts eenmaal geconfigureerd hoeft te worden in Wireshark om decryptie mogelijk te maken, met inachtneming van de bovenstaande beperkingen.

Voorkeursinstellingen

Ga naar Bewerken – > Voorkeuren. Open De protocolstructuur en selecteer TLS. Als alternatief, selecteer een TLS-pakket in de pakketlijst, klik met de rechtermuisknop op de TLS-laag in de packet details view en open het protocol Voorkeuren menu.

de opmerkelijke TLS-protocolvoorkeuren zijn:

  • (Pre)-Master-Secret logbestandsnaam (tls.keylog_file): pad om het TLS key log bestand te lezen voor decryptie.
  • RSA keys list: opent een dialoogvenster om RSA private keys in te stellen voor decryptie. Verouderd ten gunste van het dialoogvenster Voorkeuren -> RSA-sleutels.

  • Pre-Shared-Key: wordt gebruikt om de decryptie sleutel voor PSK cipher suites in te stellen. Niet algemeen gebruikt.
  • TLS debugbestand (tls.debug_logfile): pad om interne details over het decryptie proces te schrijven. Zal de resultaten van decryptie en de sleutels die werden gebruikt in dit proces bevatten. Dit kan worden gebruikt om te diagnosticeren waarom decryptie mislukt.

de volgende TCP-protocolvoorkeuren zijn ook vereist om TLS-decryptie in te schakelen:

  • laat subsector TCP-streams opnieuw samenstellen. Standaard ingeschakeld.
  • herconfigureer Out-of-order segmenten (sinds Wireshark 3.0, standaard uitgeschakeld).

beginnend met Wireshark 3.0, een nieuw dialoogvenster RSA-sleutels kan gevonden worden bij Bewerken – > Voorkeuren -> RSA-sleutels. Gebruik in dit dialoogvenster het nieuwe sleutelbestand toevoegen… knop om een bestand te selecteren. Indien nodig wordt u om een wachtwoord gevraagd. Het nieuwe token toevoegen… de knop kan worden gebruikt om sleutels toe te voegen van een HSM die nodig zou kunnen zijn met behulp van nieuwe provider toevoegen… om te selecteren selecteer een DLL/. so bestand, en extra leverancier-specifieke configuratie.

het RSA-sleutelbestand kan een PEM-indeling private sleutel of een PKCS#12 keystore (meestal een bestand met een .pfx of .P12 uitbreiding). De PKCS # 12-sleutel is een binair bestand, maar het PEM-formaat is een tekstbestand dat er als volgt uitziet:

  • -----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----

het afgekeurde RSA keys list-dialoogvenster kan op een bepaald moment worden verwijderd. Als u sleutels wilt configureren, gebruikt u in plaats daarvan het dialoogvenster RSA-sleutels. Als u het protocol voor gedecodeerde netwerkgegevens wilt wijzigen, klikt u met de rechtermuisknop op een TLS-pakket en gebruikt u Decode als om het huidige protocol voor de TLS-poort te wijzigen. De velden IP-adres en Poort zijn niet gebruikt.

voorbeeld capture file

zie ook SampleCaptures#SSL_with_decryption_keys.

  • dump.pcapng TLSv1.2 capture met 73 cipher suites, je hebt deze premaster nodig.txt-bestand voor het decoderen van het verkeer. (gekoppeld vanuit https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)

  • tls12-dsb.PCAPNG-TLS 1.2 trace met decryptie sleutels ingebed.
  • https://github.com/wireshark/wireshark/blob/master/test/captures – de test suite bevat verschillende TLS-sporen.

schermfilter

een volledige lijst met TLS-schermfiltervelden kan worden gevonden in de schermfilterreferentie

Toon alleen het TLS-gebaseerde verkeer:

  • tls

Capture Filter

u kunt TLS-protocollen niet direct filteren tijdens het vastleggen. Echter, als je weet welke tcp poort gebruikt wordt (zie hierboven), kun je daarop filteren, bijvoorbeeld met tcp poort 443.

met behulp van het (Pre)-Master-Secret

schakelt master secret TLS-decryptie in Wireshark in en kan worden geleverd via het Key Log bestand. Het pre-master geheim is het resultaat van de sleutel uitwisseling en kan worden omgezet in een master geheim door Wireshark. Dit pre-master geheim kan worden verkregen wanneer een RSA private sleutel wordt verstrekt en een RSA sleuteluitwisseling in gebruik is.

stap-voor-stap instructies om TLS-verkeer van Chrome of Firefox in Wireshark te decoderen:

  1. sluit de browser volledig (controleer uw Taakbeheer voor de zekerheid).
  2. omgevingsvariabele SSLKEYLOGFILE instellen op het absolute pad van een beschrijfbaar bestand.

  3. start de browser.
  4. Controleer of de locatie uit stap 2 is gemaakt.
  5. in Wireshark, ga naar Voorkeuren – > protocollen -> TLS, en wijzig de voorkeur voor (Pre)-Master-Secret logbestandsnaam in het pad van stap 2.

  6. Start de Wireshark capture.
  7. Open een website, bijvoorbeeld https://www.wireshark.org/

  8. Controleer of de gedecodeerde gegevens zichtbaar zijn. Bijvoorbeeld door het TLS en (http of http2) filter te gebruiken.

Voor Windows kan een omgevingsvariabele globaal worden ingesteld zoals beschreven in deze walkthrough, maar dit wordt niet aanbevolen omdat het gemakkelijk te vergeten is en een beveiligingsprobleem kan zijn omdat het decryptie van al uw TLS-verkeer toestaat. Een betere manier om de omgevingsvariabele in te stellen is via een batchbestand. Maak een bestand start-fx.cmd met:

  • @echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox

Wijzig het sslkeylogbestand pad indien nodig, en vervang firefox met chrome voor Google Chrome. Dit mechanisme werkt momenteel (2019) niet voor Safari, Microsoft Edge en anderen, omdat hun TLS-bibliotheken (Microsoft SChannel/Apple SecureTransport) dit mechanisme niet ondersteunen. Dit mechanisme werkt ook voor andere toepassingen dan webbrowsers, maar het is afhankelijk van de TLS-bibliotheek die door de toepassing wordt gebruikt.

voorbeelden van andere toepassingen:

  • toepassingen die OpenSSL gebruiken, kunnen een GDB-of een LD_PRELOAD-truc gebruiken om de geheimen te extraheren. Dit geldt ook voor Python.

    • voor een walkthrough voor Apache HTTP Server met behulp van deze libsslkeylog.so bibliotheek, zie dit bericht.

  • voor Java-programma ‘ s kunnen secrets worden geëxtraheerd uit de TLS-debuglogvoorkeur, of rechtstreeks worden uitgevoerd in het formaat dat Wireshark vereist via een Java-agent. Twee soortgelijke projecten:
    • jSSLKeyLog: http://jsslkeylog.sourceforge.net/

    • extract-TLS-secrets: https://github.com/neykov/extract-tls-secrets

  • Python-scripts kunnen ook worden bewerkt om sleutels te dumpen.

voor een overzicht van ondersteunde TLS-toepassingen en bibliotheken, zie ook pagina 19 van Peter Wu’s SSL/TLS decryptie SharkFest’ 18 EU-presentatie.

decryptiegeheimen insluiten in een pcapng-bestand

sinds Wireshark 3.0 kunt u het TLS-sleutellogbestand in een PCAPNG-bestand insluiten. Dit maakt het veel gemakkelijker om capture-bestanden te verspreiden met decryptie geheimen, en maakt het schakelen tussen capture-bestanden gemakkelijker omdat de TLS-protocolvoorkeur niet hoeft te worden bijgewerkt. De inhoud van sleutellogboekbestandsleutels toevoegen.txt om bestand in vast te leggen.pcap en schrijf het resultaat naar out-dsb.pcapng:

  • editcap –inject-secrets tls,keys.txt in.pcap out-dsb.pcapng

het dsb-achtervoegsel staat voor decryptie Secrets Block (DSB) en maakt deel uit van de PCAPNG-specificatie.

Een key log bestand kan sleutels bevatten die niet gerelateerd zijn aan een capture bestand. Om ervoor te zorgen dat onnodige sleutels niet worden gelekt, kunt u de inject-tls-secrets.py script van https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 om het key log bestand te filteren en de vereiste geheimen toe te voegen aan een capture bestand. Het shell-script is getest met Linux en macOS, maar een Python 3-versie is ook beschikbaar voor alle platforms, waaronder Windows. Bijvoorbeeld:

  • git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap

zie ook

enkele andere protocollen zijn afgeleid van TLS. Dit omvat:

  • DTLS is gebaseerd op de TLS-standaard en draait bovenop UDP als een transportprotocol.

  • QUIC is een in-development protocol dat TLS gebruikt voor zijn encryptie, Wireshark ‘ s status kan worden gevolgd op https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.

  • https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia-artikel voor TLS

  • https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf SharkFest’16 EU-presentatie door Sake Blok op het oplossen van SSL met Wireshark/Tshark (of bekijk de video van de presentatie op de https://youtu.be/oDaDY9QCnXk)

  • https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf SharkFest’18 EU-presentatie door Peter Wu op TLS-decodering (video voor een eerdere versie van spreken in Azië https://youtu.be/bwJEBwgoeBg)

  • https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest’19 ONS presentatie door Peter Wu beschrijven van TLS versleuteling en het gebruik van embedded decodering secrets (https://youtu.be/Ha4SLHceF6w).

  • Hoe werkt SSL / TLS? – Information Security Stack Exchange

  • Keyless SSL: de Nitty gruizige technische Details met een goede introductie in TLS

  • PolarProxy van Netresec is een transparante SSL/TLS-proxy gemaakt voor incident responders en malware onderzoekers die voornamelijk is ontworpen om TLS gecodeerd verkeer van malware te onderscheppen en te decoderen. PolarProxy decodeert en versleutelt TLS-verkeer, terwijl het gedecodeerde verkeer ook wordt opgeslagen in een PCAP-bestand dat kan worden geladen in Wireshark of een intrusion detection system (IDS).

  • CategoryHowTo

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *