In moderne netwerken is het beveiligen van gegevensoverdracht van het grootste belang en Secure Sockets Layer (SSL) en Transport Layer Security (TLS) zijn veelgebruikte protocollen om gegevensprivacy en -beveiliging te garanderen. Er zijn echter gevallen waarin u mogelijk gecodeerd verkeer moet analyseren voor probleemoplossing, forensische analyse of netwerkbewaking. Dit technische artikel begeleidt u bij het decoderen van SSL/TLS-verkeer met Wireshark en tcpdump, twee krachtige netwerkanalysetools. We bespreken wat Wireshark en tcpdump zijn, leggen SSL- en TLS-codering uit en laten zien hoe u SSL-verkeer decodeert met een pre-master secret key of een RSA-privésleutel.
Wat zijn Wireshark en tcpdump? #
Wireshark #
Wireshark is een open-source netwerkprotocolanalysator waarmee gebruikers het verkeer op een computernetwerk kunnen vastleggen en interactief kunnen doorzoeken. Hiermee kunt u gegevens op een gedetailleerd niveau inspecteren, waardoor u inzicht krijgt in de protocollen en datapakketten die worden verzonden. Wireshark wordt veel gebruikt voor het oplossen van netwerkproblemen, protocolontwikkeling en beveiligingsanalyse.
tcpdump #
tcpdump is een command-line packet analyzer tool die netwerkverkeer vastlegt en in real-time weergeeft. Het is zeer efficiënt voor het vastleggen van gegevens van live netwerken, waardoor u pakketten kunt opslaan in een bestand (bekend als een capture file) voor latere analyse. Hoewel tcpdump de grafische interface van Wireshark mist, is het krachtig voor snelle analyse, het filteren van pakketten en het verzamelen van gegevens op externe systemen.
Wat is SSL-encryptie? #
SSL (Secure Sockets Layer) is een protocol dat is ontwikkeld door Netscape voor het verzenden van privédocumenten via internet. SSL gebruikt encryptie-algoritmen om ervoor te zorgen dat gegevens die tussen de client (bijvoorbeeld een webbrowser) en de server worden verzonden, onleesbaar zijn voor iedereen die de transmissie onderschept.
TLS (Transport Layer Security) is de opvolger van SSL en is veiliger. Hoewel TLS technisch gezien verschilt van SSL, wordt de term SSL vaak gebruikt om naar beide protocollen te verwijzen.
SSL/TLS werkt door een veilig communicatiekanaal tussen twee systemen tot stand te brengen. De belangrijkste concepten in SSL/TLS-encryptie omvatten:
- Symmetrische encryptie: er wordt één enkele sleutel gebruikt om de gegevens te coderen en decoderen.
- Asymmetrische encryptie: Er worden twee sleutels (openbaar en privé) gebruikt. Gegevens die met de openbare sleutel zijn gecodeerd, kunnen alleen met de bijbehorende privésleutel worden gedecodeerd.
- Certificaten: SSL/TLS gebruikt certificaten om de identiteit van de server en soms de client te verifiëren.
- Handshake: Het proces waarbij de client en de server een beveiligde verbinding tot stand brengen, sleutels uitwisselen en overeenstemming bereiken over encryptiemethoden.
SSL decoderen met een Pre-Master Secret Key #
De pre-master secret key is een cruciaal onderdeel in het SSL/TLS-handshakeproces. Deze sleutel wordt gebruikt om sessiesleutels te genereren, die vervolgens worden gebruikt om de daadwerkelijke gegevens die via het netwerk worden verzonden, te versleutelen. Door de pre-master secret key te verkrijgen, kunt u de sessiegegevens ontsleutelen.
Basisstappen voor het decoderen van SSL met een Pre-Master Secret Key #
Om SSL-verkeer te decoderen met behulp van de pre-master geheime sleutel, volgt u deze stappen:
1. De logbestandomgevingsvariabele instellen
2. Vastleggen met tcpdump en het logbestand verifiëren
3. Wireshark configureren voor SSL-decodering
De logbestandomgevingsvariabele instellen #
omgeving SSLKEYLOGFILE op Windows #
Op Windows-systemen moet u een omgevingsvariabele instellen om de pre-master secret keys in een logbestand op te slaan. Deze variabele, genaamd SSLKEYLOGFILE, definieert het pad waar deze sleutels worden opgeslagen.
1. Begin door met de rechtermuisknop te klikken op Deze computer en selecteren Aanbod in het menu om het menu Systeem te openen.
2. Klik op Geavanceerde systeeminstellingen in de lijst aan de linkerkant om het venster Systeem Eigenschappen te openen.
3. In de Geavanceerd Klik op het tabblad ‘Omgevingsvariabelen’ op de knop ‘Omgevingsvariabelen’.
4. Onder Gebruikersvariabelen, Klik op de Nieuw… knop. U kunt deze variabele ook onder Systeem variabelen als u SSL-sleutels voor alle gebruikers op het systeem wilt loggen. Het is echter meestal het beste om het beperkt te houden tot uw profiel.
5. In de Variabele naam veld, voer in SSLKEYLOGFILE.
In de Variabele waarde veld, voer het pad in waar u het logbestand wilt opslaan. U kunt ook klikken op Blader door bestand… om het pad te selecteren met behulp van de bestandskiezer.
Als u dit instelt als een systeembrede variabele, zorg er dan voor dat het bestand toegankelijk is voor alle gebruikers, of gebruik jokers. U kunt bijvoorbeeld gebruiken %GEBRUIKERSPROFIEL%\AppData\ssl-sleutels.log or C:\ssl-sleutels.log .
6. Als je klaar bent, klik je op OK om de wijzigingen toe te passen en door te gaan met de volgende stappen.
omgeving SSLKEYLOGFILE op Linux of Mac #
Op Linux en Mac moet u de SSLKEYLOGFILE omgevingsvariabele gebruiken exporteren. In dezelfde terminal kunt u uitvoeren tcpdump en genereert het aangegeven sleutellogbestand wanneer een SSL-verbinding wordt gedetecteerd.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
Om een permanente configuratie van de omgevingsvariabele te behouden, bewerkt u het gebruikersprofiel met een teksteditor zoals nanoVoor Linux wordt deze variabele opgeslagen in ~ / .bashrc, en op Mac wordt het gemaakt in ~ / .bash_profileVoeg vervolgens de exporteren commando voor SSLKEYLOGFILE variabele aan het einde van het bestand toevoegen en de wijzigingen opslaan.
Vastleggen met tcpdump en het logbestand verifiëren #
Om te testen of het logbestand correct wordt gegenereerd, kunt u proberen een browser te openen, tcpdump uit te voeren of een curl-commando naar een HTTPS-server te verzenden om te bevestigen dat het bestand correct wordt aangemaakt.
Als voorbeeld: in dezelfde terminal waar de omgevingsvariabelen zijn aangemaakt, wordt tcpdump gestart om het netwerkverkeer vast te leggen en wordt een curl-verzoek naar een HTTPS-service gestart om het dataverkeer te decoderen.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i elke poort 443 -w ~/capture.pcap & root@noid-01:~# curl https://(sluit vervolgens de opdracht tcpdump)
Controleer of het logbestand ~/.ssl-key.log en de verkeersopname op ~/capture.pcap zijn gegenereerd. Zie tot slot de laatste stap om het versleutelde verkeer met Wireshark te bekijken.
Als je het bestand ssl-key.log opent , zie je zoiets als het volgende:
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
Wireshark configureren voor SSL-decodering #
Zodra het vastlegsysteem pre-mastersleutels registreert, kunt u het sleutellogbestand samen met de vastgelegde pakketten gebruiken om SSL-verkeer in Wireshark te decoderen.
1. Upload het sleutellogboek en de vastlegbestanden naar het systeem waarop Wireshark is geïnstalleerd.
2. Open het verkeersregistratiebestand met Wireshark.
3. Configureer het SSL-protocol. Klik op Edit, Selecteer dan voorkeuren. Het dialoogvenster Voorkeuren wordt geopend en toont een lijst met items aan de linkerkant. Vouw de protocollen sectie, scroll naar beneden en klik op SSL. In de SSL protocolopties, zoek het veld met het label (Pre)-Master-Secret logbestandsnaamBlader naar het logbestand dat u eerder hebt ingesteld of plak het pad rechtstreeks in dit veld.
4. Pas de configuratie toe. Nadat u de (Pre)-Master-Secret logbestandsnaam, Klik OK om uw wijzigingen op te slaan en terug te keren naar Wireshark. U bent nu klaar om het vastgelegde verkeer te decoderen. Wanneer u een gecodeerd dataframe selecteert, controleert u de Packet byte-weergave. Onder de weergave zou u een tabblad moeten zien voor Gedecodeerde SSL-gegevens onder andere.
Als de sessiegegevens nog steeds onleesbaar lijken en u geen HTML ziet, kan dit komen door GZIP-compressie, die vaak wordt gebruikt door webservers zoals Apache. Klik in dat geval op het tabblad 'Niet-gecomprimeerde entiteitsbody' , dat alleen beschikbaar is wanneer SSL-decryptie is ingeschakeld. Hier kunt u de niet-gecomprimeerde broncode van de site bekijken, zoals het titel-element van de standaard Apache-pagina in platte tekst.
Een RSA-sleutel gebruiken om SSL te decoderen #
Wireshark biedt een functie waarmee u uw RSA-sleutels kunt uploaden om SSL-verkeer te decoderen. In de praktijk is het decoderen van RSA-sleutels echter verouderd.
Deze afname in gebruik is te wijten aan de invoering van Perfect Forward Secrecy (PFS), waardoor traditionele RSA-sleuteldecryptie overbodig is geworden. Met PFS vertrouwen sessies die worden onderhandeld met Diffie-Hellman niet rechtstreeks op de RSA-sleutel. In plaats daarvan genereren ze een eenmalige sleutel die alleen in RAM wordt opgeslagen en wordt gecodeerd met de sleutel op schijf.
Als u eerder een RSA-sleutel hebt gebruikt om verkeer te decoderen en u hebt gemerkt dat deze niet meer werkt, gebruikt de doelmachine waarschijnlijk Diffie-Hellman-sleuteluitwisselingen. U kunt dit bevestigen door SSL-logging in Wireshark in te schakelen.
Om logging in te schakelen:
1. Klik op Edit in het werkbalkmenu en selecteer voorkeuren.
2. Vouw de protocollen sectie aan de linkerkant, scroll naar beneden en klik op SSL.
3. Stel de locatie voor uw SSL-logbestand in door op de knop te klikken Blader knop.
Zodra logging is ingeschakeld, legt u een sessie vast met uw SSL-enabled host en controleert u de logs. Zoek naar het TLS handshake negotiation frame; u zult waarschijnlijk een DHE (of ECDHE, voor elliptic-curve keys) entry in de cipher string zien, wat aangeeft dat Diffie-Hellman key exchanges in gebruik zijn.
Als u een bericht ziet dat aangeeft dat het hoofdgeheim niet kan worden gevonden en het decoderen van de RSA-sleutel mislukt, moet u overschakelen naar de pre-master secret-methode voor het decoderen.
Naarmate PFS steeds populairder wordt, vooral met de komst van TLS 1.3, wordt de traditionele RSA-sleutelontsleuteling afgeschaft en mag er niet langer op worden vertrouwd.
Meer weten #
Het SSLKEYLOGFILE-formaat voor TLS #
Het SSLKEYLOGFILE- formaat is een tekstbestand dat wordt gebruikt om vooraf gedefinieerde geheime sleutels op te slaan voor het decoderen van TLS-verbindingen. Het bestand is gecodeerd in UTF-8, waarbij elke regel een geheim bevat dat wordt geïdentificeerd door een label, een willekeurige clientwaarde en het geheim zelf, allemaal gescheiden door spaties. Het formaat accepteert verschillende regeleinden (CRLF, CR, LF) en regels die beginnen met # worden behandeld als commentaar.
Voor TLS 1.3 corresponderen verschillende labels met verschillende fasen van het sleutelschema, zoals CLIENT_HANDSHAKE_TRAFFIC_SECRET en SERVER_TRAFFIC_SECRET_0. Voor TLS 1.2 en eerdere versies identificeert het label CLIENT_RANDOM het hoofdgeheim.
Beveiligingsoverwegingen:
Toegang tot de SSLKEYLOGBESTAND staat decodering van TLS-verkeer toe, wat een aanzienlijk beveiligingsrisico vormt. De juiste toegangscontroles zijn essentieel om ongeautoriseerde toegang of privilege-escalatie te voorkomen. Logging mag alleen worden ingeschakeld door geautoriseerde gebruikers en er moeten strikte bestandsmachtigingen worden toegepast. De geregistreerde geheimen staan niet alleen decodering toe, maar kunnen aanvallers ook in staat stellen om gegevens te wijzigen of te injecteren in actieve verbindingen, en in sommige gevallen eindpunten te imiteren of berichten te vervalsen.
Hoe werkt een tweerichtings-SSL-handshake? #
Een two-way SSL-handshake authenticeert zowel de server als de client. Dit is hoe het proces verloopt:
1. Klant Hallo: De client initieert de handshake door een "Client Hello"-bericht naar de server te sturen. Dit bericht bevat de door de client ondersteunde cipher suites en TLS-versiecompatibiliteiten.
2. Server Hallo: De server reageert met een “Server Hello”-bericht, dat het openbare certificaat van de server bevat en een verzoek om het certificaat van de client.
3. Validatie van clientcertificaten: De client verifieert het certificaat van de server. Als het geldig is, stuurt de client zijn eigen certificaat terug naar de server.
4. Validatie van servercertificaten: De server controleert het certificaat van de client. Als het certificaat van de client geldig is, wordt de sessie tot stand gebracht, waardoor veilige communicatie tussen beide partijen mogelijk is.
Is het mogelijk om passief gesnuffeld SSL/TLS-verkeer te decoderen? #
Ja, het is mogelijk om passief gesnuffeld SSL/TLS-verkeer te decoderen, maar daarvoor hebt u de RSA-sleutel nodig. Deze sleutel kan worden verkregen via legitieme middelen met de juiste autorisatie of, minder ethisch, door het te onderscheppen met een "man-in-the-middle"-aanval.