I moderne netværk er sikring af dataoverførsel altafgørende, og Secure Sockets Layer (SSL) og Transport Layer Security (TLS) er udbredte protokoller til at sikre databeskyttelse og -sikkerhed. Der er dog tilfælde, hvor du muligvis har brug for at analysere krypteret trafik til fejlfinding, retsmedicinsk analyse eller netværksovervågning. Denne tekniske artikel vil guide dig gennem dekryptering af SSL/TLS-trafik ved hjælp af Wireshark og tcpdump, to kraftfulde netværksanalyseværktøjer. Vi vil dække, hvad Wireshark og tcpdump er, forklare SSL- og TLS-kryptering og demonstrere, hvordan man dekrypterer SSL-trafik ved hjælp af en pre-master hemmelig nøgle eller en RSA privat nøgle.
Hvad er Wireshark og tcpdump? #
Wireshark #
Wireshark er en open source-netværksprotokolanalysator, der gør det muligt for brugere at registrere og interaktivt gennemse trafikken på et computernetværk. Den giver dig mulighed for at inspicere data på et detaljeret niveau, hvilket giver indsigt i de protokoller og datapakker, der transmitteres. Wireshark bruges i vid udstrækning til netværksfejlfinding, protokoludvikling og sikkerhedsanalyse.
tcpdump #
tcpdump er et kommandolinjebaseret pakkeanalyseværktøj, der registrerer netværkstrafik og viser den i realtid. Det er yderst effektivt til at indsamle data fra aktive netværk, så du kan gemme pakker i en fil (kendt som en capture-fil) til senere analyse. Selvom tcpdump mangler Wiresharks grafiske brugerflade, er det kraftfuldt til hurtig analyse, filtrering af pakker og indsamling af data på eksterne systemer.
Hvad er SSL-kryptering? #
SSL (Secure Sockets Layer) er en protokol udviklet af Netscape til overførsel af private dokumenter via internettet. SSL bruger krypteringsalgoritmer til at sikre, at data, der sendes mellem klienten (f.eks. en webbrowser) og serveren, er ulæselige for alle, der opfanger overførslen.
TLS (Transport Layer Security) er efterfølgeren til SSL og er mere sikker. Selvom TLS teknisk set er forskellig fra SSL, bruges udtrykket SSL ofte til at henvise til begge protokoller.
SSL/TLS fungerer ved at etablere en sikker kommunikationskanal mellem to systemer. Nøglekoncepterne i SSL/TLS-kryptering inkluderer:
- Symmetrisk kryptering: En enkelt nøgle bruges til at kryptere og dekryptere dataene.
- Asymmetrisk kryptering: Der anvendes to nøgler (offentlige og private); data krypteret med den offentlige nøgle kan kun dekrypteres med den tilsvarende private nøgle.
- Certifikater: SSL/TLS bruger certifikater til at verificere serverens og nogle gange klientens identitet.
- Handshake: Den proces, hvor klienten og serveren etablerer en sikker forbindelse, udveksler nøgler og aftaler krypteringsmetoder.
Dekryptering af SSL med en pre-master hemmelig nøgle #
Den hemmelige premaster-nøgle er en afgørende komponent i SSL/TLS-handshake-processen. Denne nøgle bruges til at generere sessionsnøgler, som derefter bruges til at kryptere de faktiske data, der overføres over netværket. Ved at indhente den hemmelige premaster-nøgle kan du dekryptere sessionsdataene.
Grundlæggende trin til at dekryptere SSL med en pre-master hemmelig nøgle #
Følg disse trin for at dekryptere SSL-trafik ved hjælp af den hemmelige premaster-nøgle:
1. Indstil miljøvariablen for logfilen
2. Optag med tcpdump og verificer logfilen
3. Konfigurer Wireshark til SSL-dekryptering
Indstil miljøvariablen for logfilen #
Lokal område SSLKEYLOGFILE på Windows #
På Windows-systemer skal du indstille en miljøvariabel til at gemme de hemmelige nøgler før masteren i en logfil. Denne variabel, der hedder SSLKEYLOGFILE, definerer stien, hvor disse nøgler gemmes.
1. Start med at højreklikke på Denne computer og vælge Ejendomme fra menuen for at åbne Systemmenuen.
2. Klik på Avancerede systemindstillinger i listen til venstre for at åbne vinduet Systemegenskaber.
3. I Avanceret skal du klikke på knappen "Miljøvariabler" under fanen.
4. Under BrugervariablerKlik på Ny… knap. Du kan også oprette denne variabel under Systemvariabler hvis du vil logge SSL-nøgler for alle brugere på systemet. Det er dog normalt bedst at begrænse det til din profil.
5. I Variabelt navn felt, indtast SSLKEYLOGFILE.
I Variabel værdi I feltet skal du indtaste stien, hvor du vil gemme logfilen. Alternativt kan du klikke på Gennemse fil… for at vælge stien ved hjælp af filvælgeren.
Hvis du indstiller dette som en systemomfattende variabel, skal du sørge for, at filen er tilgængelig for alle brugere, eller bruge jokertegn. Du kan f.eks. bruge %BRUGERPROFILE%\AppData\ssl-keys.log or C:\ssl-nøgler.log .
6. Når du er færdig, klik på OK for at anvende ændringerne og fortsætte med de næste trin.
Lokal område SSLKEYLOGFILE på Linux eller Mac #
På Linux og Mac skal du indstille SSLKEYLOGFILE miljøvariabel ved hjælp af eksportI den samme terminal kan du udføre tcpdump og den vil generere den angivne nøglelogfil, når en SSL-forbindelse registreres.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
For at opretholde en permanent konfiguration af miljøvariabler skal du redigere brugerprofilen med en teksteditor som f.eks. nanoFor Linux gemmes denne variabel i ~ / .bashrc, og på Mac oprettes den i ~ / .bash_profileTilføj derefter eksport kommando for SSLKEYLOGFILE variabel i slutningen af filen og gem ændringerne.
Optag med tcpdump og verificer logfilen #
For at teste genereringen af logfilerne, prøv at åbne en browser, tcpdump eller start en curl-kommando til en HTTPS-server for at bekræfte, at filen er genereret korrekt.
Som et eksempel, i den samme terminal, hvor miljøvariablen blev oprettet, tcpdump for at fange trafikken, og en curl til en HTTPS-tjeneste vil blive lanceret for at blive dekrypteret:
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i en hvilken som helst port 443 -w ~/capture.pcap & root@noid-01:~# curl https://(luk derefter tcpdump-kommandoen)
Bekræft at logfilen ~/.ssl-nøgle.log og trafikoptagelsen kl. ~/capture.pcap genereres. Se endelig det sidste trin for at se den krypterede trafik med Wireshark.
Hvis du åbner ssl-nøgle.log filen vil du se noget i retning af følgende:
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
Konfigurer Wireshark til SSL-dekryptering #
Når opsamlingssystemet logger pre-masternøgler, kan du bruge nøglelogfilen sammen med de optagne pakker til at dekryptere SSL-trafik i Wireshark.
1. Upload nøgleloggen og capture-filerne til det system, hvor Wireshark er installeret.
2. Åbn trafikoptagelsesfilen med Wireshark.
3. Konfigurer SSL-protokollen. Klik på Redigere, Vælg derefter IndstillingerDialogboksen Indstillinger åbnes og viser en liste over elementer til venstre. Udvid protokoller afsnittet, rul ned, og klik på SSL. I SSL protokolindstillinger, find feltet mærket (Pre)-Master-Secret logfilnavnGå til den logfil, du oprettede tidligere, eller indsæt stien direkte i dette felt.
4. Anvend konfigurationen. Efter indstilling af (Pre)-Master-Secret logfilnavnklik OK for at gemme dine ændringer og vende tilbage til Wireshark. Du er nu klar til at dekryptere den optagne trafik. Når du vælger en krypteret dataramme, skal du kontrollere visningen Pakkebyte. Under visningen bør du se en fane til Dekrypterede SSL-data blandt andre.
Hvis sessionsdataene stadig virker ulæselige, og du ikke kan se nogen HTML, kan det skyldes GZIP-komprimering, som almindeligvis bruges af webservere som Apache. I dette tilfælde skal du klikke på Ukomprimeret entitetsbrødtekst fanen, som kun er tilgængelig, når SSL-dekryptering er aktiveret. Her kan du se webstedets ukomprimerede kildekode, f.eks. titelelementet på standard Apache-siden i klartekst.
Brug af en RSA-nøgle til at dekryptere SSL #
Wireshark tilbyder en funktion, der giver dig mulighed for at uploade dine RSA-nøgler til dekryptering af SSL-trafik, men i praksis er RSA-nøgledekryptering blevet forældet.
Dette fald i brugen skyldes indførelsen af Perfect Forward Secrecy (PFS), som har gjort traditionel RSA-nøgledekryptering forældet. Med PFS er sessioner, der forhandles ved hjælp af Diffie-Hellman, ikke direkte afhængige af RSA-nøglen. I stedet genererer de en engangsnøgle, der kun gemmes i RAM og krypteres ved hjælp af nøglen på disken.
Hvis du tidligere har brugt en RSA-nøgle til at dekryptere trafik og har opdaget, at den ikke længere virker, bruger målmaskinen sandsynligvis Diffie-Hellman-nøgleudvekslinger. Du kan bekræfte dette ved at aktivere SSL-logføring i Wireshark.
Sådan aktiverer du logføring:
1. Klik på Redigere i værktøjslinjemenuen og vælg Indstillinger.
2. Udvid protokoller afsnittet til venstre, rul ned og klik på SSL.
3. Angiv placeringen for din SSL-logfil ved at klikke på Gennemse .
Når logføring er aktiveret, skal du optage en session med din SSL-aktiverede vært og kontrollere loggene. Kig efter TLS handshake-forhandlingsrammen; du vil sandsynligvis se en DHE-post (eller ECDHE, for elliptiske kurve-nøgler) i krypteringsstrengen, hvilket indikerer, at Diffie-Hellman-nøgleudvekslinger er i brug.
Hvis du ser en meddelelse, der angiver, at masterhemmeligheden ikke kan findes, og RSA-nøglens dekryptering mislykkes, skal du skifte til pre-masterhemmelighedsmetoden til dekryptering.
Efterhånden som PFS bliver mere udbredt, især med fremkomsten af TLS 1.3, er traditionel RSA-nøgledekryptering udfaset og bør ikke længere anvendes.
Vide mere #
SSLKEYLOGFILE-formatet til TLS #
SSLKEYLOGFILE format er en tekstfil, der bruges til at gemme pre-master hemmelige nøgler til dekryptering af TLS-forbindelser. Filen er kodet i UTF-8, hvor hver linje indeholder en hemmelighed identificeret af en etiket, en tilfældig klientværdi og selve hemmeligheden, alle adskilt af mellemrum. Formatet accepterer forskellige linjeafslutninger (CRLF, CR, LF) og linjer, der starter med # behandles som kommentarer.
For TLS 1.3 svarer flere betegnelser til forskellige stadier af nøgleplanen, f.eks. CLIENT_HANDSHAKE_TRAFFIC_SECRET og SERVER_TRAFFIC_SECRET_0. For TLS 1.2 og tidligere, KLIENT_TILFÆLDIG etiketten identificerer Master hemmelighed.
Sikkerhedsovervejelser:
Adgang til SSLKEYLOGFILE tillader dekryptering af TLS-trafik, hvilket udgør en betydelig sikkerhedsrisiko. Korrekt adgangskontrol er afgørende for at forhindre uautoriseret adgang eller eskalering af rettigheder. Logføring bør kun aktiveres af autoriserede brugere, og der bør anvendes strenge filtilladelser. De loggede hemmeligheder tillader ikke kun dekryptering, men kan også gøre det muligt for angribere at ændre eller indsætte data i aktive forbindelser og i nogle tilfælde udgive sig for at være slutpunkter eller forfalske beskeder.
Hvordan fungerer et tovejs SSL-handshake? #
Et tovejs SSL-handshake autentificerer både serveren og klienten. Sådan forløber processen:
1. Kunde HejKlienten starter handshake-processen ved at sende en "Client Hello"-besked til serveren. Denne besked indeholder klientens understøttede krypteringspakker og TLS-versionskompatibiliteter.
2. Server HejServeren svarer med en "Server Hello"-besked, som indeholder serverens offentlige certifikat og en anmodning om klientens certifikat.
3. Validering af klientcertifikatKlienten verificerer serverens certifikat. Hvis det er gyldigt, sender klienten sit eget certifikat tilbage til serveren.
4. Validering af servercertifikatServeren kontrollerer klientens certifikat. Hvis klientens certifikat er gyldigt, fortsætter sessionsoprettelsen, hvilket muliggør sikker kommunikation mellem begge parter.
Er det muligt at dekryptere passivt sniffet SSL/TLS-trafik? #
Ja, det er muligt at dekryptere passivt sniffet SSL/TLS-trafik, men du skal bruge RSA-nøglen for at gøre det. Denne nøgle kan fås på legitime måder med korrekt autorisation eller, mindre etisk forsvarligt, ved at opsnappe den ved hjælp af et "man-in-the-middle"-angreb.