Wireshark: SSL-/TLS-Traffic entschlüsseln
Immer mehr Internettraffic wird verschlüsselt übertragen. Insbesondere die Zertifizierungsstelle Let’s Encrypt hat im Laufe des letzten Jahres dazu geführt, dass auch kleinere Webseiten dank des kostenlosen Zertifikates auf die verschlüsselte Kommunikation gewechselt sind. Mittlerweile wurden sogar über 100 Millionen Zertifikate von Let’s Encrypt ausgestellt. Auch ich habe meinen Blog im November 2016 auf HTTPS umgestellt.
Der eigentlich positive Effekt hin zu mehr verschlüsseltem Traffic führt aber auch dazu, dass die Analyse und das Troubleshooting deutlich erschwert werden. Wireshark und ähnliche Programme können die verschlüsselte Kommunikation standardmäßig nicht einsehen. Abhilfe würde eine SSL-Decryption bringen, welche auf dem Prinzip eines Man-in-the-Middle-Angriffs basiert. Diesen Weg gehen beispielsweise Next-Generation Firewalls von Palo Alto, Check Point Software, Cisco, Sophos und Co. Zuhause kann diese Variante unter anderem mit Tools wie “mitmproxy” oder “Burp Suite” realisiert werden. Dies dürfte aber nicht jedermanns Sache sein. Zum Glück gibt es eine einfachere Alternative: Session Key Logging.
Selbstverständlich existieren aber auch hier Einschränkungen. Das clientseitige Logging der Session Keys funktioniert nur mit bestimmter Software, beispielsweise mit den beiden Browsern Firefox und Chrome. Dabei werden nur RSA-Keys unterstützt, Diffie-Hellman und Elliptic Curve Diffie-Hellman (ECDH) nicht.
Browser
Für Firefox muss zunächst eine neue Umgebungsvariable mit dem Namen “SSLKEYLOGFILE” angelegt werden. Dies wird in der Systemsteuerung unter “System” gemacht. Anschließend links auf “Erweiterte Systemeinstellungen” klicken und im neu geöffneten Fenster auf “Umgebungsvariablen…”. Dort kann die neue Variable “SSLKEYLOGFILE” mit dem gewünschten Pfad angelegt werden. Im Pfad sollten keine Leerzeichen auftauchen. Ich habe mich für “C:\Temp\sslkey.log” entschieden:
Damit die neue Umgebungsvariable wirksam wird, muss der Windows-User ab- und wieder angemeldet werden, alternativ hilft auch ein Neustart.
Zusätzlich sollten wir noch die Unterstützung der Diffie-Hellman-Cipher-Suiten deaktivieren, sodass der Schlüsselaustausch möglichst immer via RSA vollzogen wird. Dies funktioniert via “about:config”. Dort nach “dhe” suchen und alle gefundenen Einstellungen auf den Wert “false” ändern.
Den Erfolg dieser Maßnahme können wir über die Webseite der Universität Hannover überprüfen: https://cc.dcsec.uni-hannover.de/check
Googles Chrome ignoriert diese Umgebungsvariable seit geraumer Zeit. Stattdessen muss der Browser mit folgenden Startparametern geladen werden:
--ssl-key-log-file="C:\Temp\sslkeyChrome.log"
Auch in Google Chrome lässt sich Diffie-Hellman deaktivieren, allerdings etwas umständlicher als in Firefox. Die zu deaktivierenden Cipher-Suiten müssen ebenfalls mit einem Startparameter übergeben werden:
--cipher-suite-blacklist=0xcca9,0xcca8,0xc02b,0xc02f,0xc02c,0xc030,0xc013,0xc014
Eine Liste aller Hexcodes findet ihr im Quelltext von Chromium.
Wireshark
Wireshark unterstützt das Feature erst ab Version 1.8.0. Zunächst müssen das Programm gestartet und die Einstellungen geöffnet werden. Anschließend links im Menü die Kategorie “Protocols” mit Klick auf den Pfeil aufklappen und zum Punkt “SSL” navigieren. Dort muss der Pfad zur vorher erzeugten Datei hinterlegt werden.
Das war auch schon! Wenn ihr nun ein Paket mit TLS-Daten markiert, erscheint unten ein neuer Tab “Decrypted SSL data”. Wenn ihr diesen auswählt könnt ihr die entschlüsselten Daten einsehen.
Quellen
- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
- https://wireshark.no/index.php/2016/08/25/decrypting-ssl-traffic-with-wireshark/
- https://jimshaver.net/2015/02/11/decrypting-tls-browser-traffic-with-wireshark-the-easy-way/
- http://joji.me/en-us/blog/walkthrough-decrypt-ssl-tls-traffic-https-and-http2-in-wireshark
- https://www.m00nie.com/2015/05/decrypt-https-ssltls-with-wireshark/
- https://wiki.wireshark.org/SSL
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
1+ fuer diesen Artikel!
Vielen herzlichen Dank, Andreas!
Danke für die Anleitung. Nachdem ich die Unterstützung der Diffie-Hellman-Cipher-Suiten deaktiviert habe, ist die Seite https://www.klassikradio.de aber nicht mehr aufgeufen:
“Fehler: Gesicherte Verbindung fehlgeschlagen
Beim Verbinden mit http://www.klassikradio.de trat ein Fehler auf. Sichere Kommunikation mit der Gegenstelle ist nicht möglich: Keine gemeinsamen Verschlüsselungsalgorithmen. Fehlercode: SSL_ERROR_NO_CYPHER_OVERLAP
Die Website kann nicht angezeigt werden, da die Authentizität der erhaltenen Daten nicht verifiziert werden konnte.
Kontaktieren Sie bitte den Inhaber der Website, um ihn über dieses Problem zu informieren.”
Das ganze unter W7x64 und Firefox 62.0.3 (64-Bit).
Mittlerweile müssen die Diffie-Hellman-Cipher-Suiten nicht mehr deaktiviert werden. Habe meinen Artikel entsprechend angepasst.
Hallo Tobi,
der neue Tab „Decrypted SSL data“ mag bei mir nicht erscheinen.
Hast du eine Idee woran das liegen könnte?
BG, Joachim
(W7x64, WireShark 2.6.3, Firefox 62.0.3 (64-Bit))
Update:
mit Chrome erscheint der zusätzliche Reiter. Allerdings muss man in WireShark den Parameter anpassen, da die generierte Datei “sslkeyChrome.log” heisst.
Mein Ziel habe ich dennoch nicht erreicht. Wollte ursprünglich die Streaming URL von KlassikRadio.de herausfinden.
Probier mal im Wireshark folgenden Filter, dann solltest du die URL ganz schnell herausfinden: http.request or http.response
Bei mir stand sie direkt im dritten angezeigten Paket: https://stream.klassikradio.de/live/mp3-128/7Digital
Danke. In welchem Fenster genau stand die URL? Im “Decrypted SSL data”-Fenster?
Das “Decrypted SSL data” kommt bei nämlich nicht mehr, obwohl es gestern nachmittag noch funktionierte. Leider befürchte ich, dass WireShark, tcp und ich keine Freunde mehr werden. Bin halt kein Netzwerkler sondern eher Schrauber.
Was ich ebenfalls nicht verstehe. Warum funktioniert
https://stream.klassikradio.de/live/mp3-128/7Digital
nur im Browser aber nicht im Winamp?
Tante Google hat
http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de
als Streaming-URL ausgespukt. Die funktioniert im Browser und in Winamp.
Falls du dich nicht mit einem Amateur wie mir rumschlagen möchtest, habe ich dafür vollstes Verständnis. Aber ich hätte halt gerne herausgefunden wir man eine für Winamp funktionierende Streaming-URL herausfindet.
Ja genau, die URL stand direkt im “Decrypted SSL data”-Fenster.
Warum die URL in Winamp nicht funktioniert kann ich nicht sagen. Ich tippe aber, dass es an WinAmp liegt, da es ja seit zig Jahren nicht mehr weiterentwickelt wurde. Erst heute wurde bekannt, dass WinAmp 6 nächstes Jahr erscheinen soll, hier sollte die URL dann auch funktionieren.
Unter VLC und AIMP funktioniert die URL z.B. ohne Probleme.