Articles

TLS

Transport Layer Security (TLS) bietet Sicherheit bei der Kommunikation zwischen zwei Hosts. Es bietet Integrität, Authentifizierung und Vertraulichkeit. Es wird am häufigsten in Webbrowsern verwendet, kann jedoch mit jedem Protokoll verwendet werden, das TCP als Transportschicht verwendet.

Secure Sockets Layer (SSL) ist der Vorgänger des TLS-Protokolls. Diese Namen werden häufig synonym verwendet, was zu Verwirrung führen kann:

  • Eine Konfiguration, die das SSL-Protokoll (SSLv2/SSLv3) verwendet, ist unsicher. Stattdessen sollte das TLS-Protokoll verwendet werden.

  • X.509-Zertifikate zur Authentifizierung werden manchmal auch als SSL-Zertifikate bezeichnet.

  • Einige Anwendungen (z. B. E-Mail) verwenden einen einzigen Port für unverschlüsselte und verschlüsselte Sitzungen. Um von unverschlüsselt zu verschlüsselt zu wechseln, wird (START-)TLS verwendet. Wenn ein einzelner Port das TLS-Protokoll direkt verwendet, wird es oft als SSL bezeichnet.

  • Aus historischen Gründen bezieht sich Software (einschließlich Wireshark) auf SSL oder SSL / TLS, während es tatsächlich das TLS-Protokoll bedeutet, da dies heutzutage von allen verwendet wird.

Protokoll-Abhängigkeiten

  • TCP: In der Regel verwendet TLS TCP als Transportprotokoll.

TLS-Dissektion in Wireshark

Der TLS-Dissektor ist voll funktionsfähig und unterstützt sogar erweiterte Funktionen wie die Entschlüsselung von TLS, wenn entsprechende Geheimnisse bereitgestellt werden (#TLS_Decryption).

Seit Wireshark 3.0 wurde der TLS-Dissektor von SSL in TLS umbenannt. Bei Verwendung des SSL-Anzeigefilters wird eine Warnung ausgegeben.

TLS-Entschlüsselung

Wireshark unterstützt die TLS-Entschlüsselung, wenn entsprechende Geheimnisse bereitgestellt werden. Die beiden verfügbaren Methoden sind:

  • Schlüsselprotokolldatei mit sitzungsbezogenen Geheimnissen (#Using_the_.28Pre.29-Meister-Geheimnis).

  • Entschlüsselung mit einem privaten RSA-Schlüssel.

Eine Schlüsselprotokolldatei ist ein universeller Mechanismus, der die Entschlüsselung immer ermöglicht, selbst wenn ein Diffie-Hellman (DH) -Schlüsselaustausch verwendet wird. Der private RSA-Schlüssel funktioniert nur in einer begrenzten Anzahl von Fällen.

Die Schlüsselprotokolldatei ist eine Textdatei, die von Anwendungen wie Firefox, Chrome und Curl generiert wird, wenn die Umgebungsvariable SSLKEYLOGFILE gesetzt ist. Um genau zu sein, schreibt ihre zugrunde liegende Bibliothek (NSS, OpenSSL oder boringssl) die erforderlichen Geheimnisse pro Sitzung in eine Datei. Diese Datei kann anschließend in Wireshark konfiguriert werden (#Using_the_.28Pre.29-Meister-Geheimnis).

Die private RSA-Schlüsseldatei kann nur unter den folgenden Umständen verwendet werden:

  • Die vom Server ausgewählte Chiffriersuite verwendet nicht (EC)DHE.
  • Die Protokollversion ist SSLv3, (D)TLS 1.0-1.2. Es funktioniert nicht mit TLS 1.3.

  • Der private Schlüssel entspricht dem Serverzertifikat. Es funktioniert weder mit dem Clientzertifikat noch mit dem Zertifikat der Zertifizierungsstelle (Certificate Authority, CA).

  • Die Sitzung wurde nicht fortgesetzt. Der Handshake muss die ClientKeyExchange-Handshake-Nachricht enthalten.

Die Schlüssellogdatei wird allgemein empfohlen, da sie in allen Fällen funktioniert, aber die kontinuierliche Fähigkeit erfordert, die Geheimnisse entweder aus der Client- oder der Serveranwendung zu exportieren. Der einzige Vorteil des privaten RSA-Schlüssels besteht darin, dass er nur einmal in Wireshark konfiguriert werden muss, um die Entschlüsselung zu ermöglichen, vorbehaltlich der oben genannten Einschränkungen.

Einstellungen

Gehen Sie zu Bearbeiten -> Einstellungen. Öffnen Sie den Protokollbaum und wählen Sie TLS. Alternativ können Sie ein TLS-Paket in der Paketliste auswählen, mit der rechten Maustaste auf den TLS-Layer in der Ansicht Paketdetails klicken und das Menü Protokolleinstellungen öffnen.

Die wichtigsten Einstellungen für das TLS-Protokoll sind:

  • (Pre)-Master-Secret log filename (tls.keylog_file): Pfad zum Lesen der TLS-Schlüssellogdatei zur Entschlüsselung.
  • RSA-Schlüsselliste: Öffnet einen Dialog zum Konfigurieren privater RSA-Schlüssel für die Entschlüsselung. Veraltet zugunsten des Dialogs Einstellungen -> RSA-Schlüssel.

  • Pre-Shared-Key: wird verwendet, um den Entschlüsselungsschlüssel für PSK-Chiffriersuiten zu konfigurieren. Nicht allgemein verwendet.
  • TLS-Debug-Datei (tls.debug_logfile): Pfad zum Schreiben interner Details über den Entschlüsselungsprozess. Enthält die Ergebnisse der Entschlüsselung und die Schlüssel, die in diesem Prozess verwendet wurden. Dies kann verwendet werden, um zu diagnostizieren, warum die Entschlüsselung fehlschlägt.

Die folgenden TCP-Protokolleinstellungen sind ebenfalls erforderlich, um die TLS-Entschlüsselung zu aktivieren:

  • Zulassen, dass Subdissector TCP-Streams wieder zusammensetzt. Standardmäßig aktiviert.
  • Setzen Sie Out-of-Order-Segmente wieder zusammen (seit Wireshark 3.0, standardmäßig deaktiviert).

Beginnend mit Wireshark 3.0, ein neuer RSA-Schlüsseldialog kann unter Edit -> Preferences -> RSA Keys gefunden werden. Verwenden Sie in diesem Dialogfeld die Option Neue Schlüsseldatei hinzufügen… taste, um eine Datei auszuwählen. Sie werden bei Bedarf zur Eingabe eines Passworts aufgefordert. Das neue Token hinzufügen… button kann verwendet werden, um Schlüssel von einem HSM hinzuzufügen, für die möglicherweise die Verwendung von Add new provider erforderlich ist… so wählen Sie eine DLL / SO-Datei und zusätzliche herstellerspezifische Konfiguration.

Die RSA-Schlüsseldatei kann entweder ein privater Schlüssel im PEM-Format oder ein PKCS#12-Schlüsselspeicher sein (normalerweise eine Datei mit einem .pfx oder .p12 Verlängerung). Der PKCS # 12-Schlüssel ist eine Binärdatei, aber das PEM-Format ist eine Textdatei, die wie folgt aussieht:

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

Der veraltete RSA-Schlüssellistendialog kann irgendwann entfernt werden. Verwenden Sie zum Konfigurieren von Schlüsseln stattdessen das Dialogfeld RSA-Schlüssel. Um das Protokoll für entschlüsselte Netzwerkdaten zu ändern, klicken Sie mit der rechten Maustaste auf ein TLS-Paket und verwenden Sie Decode As, um das aktuelle Protokoll für den TLS-Port zu ändern. Die Felder IP-Adresse und Port werden nicht verwendet.

Beispiel-Capture-Datei

Siehe auch SampleCaptures#SSL_with_decryption_keys.

  • dump.pcapng TLSv1.2. mit 73 Cipher Suites benötigen Sie diesen Premaster.txt-Datei zum Entschlüsseln des Datenverkehrs. (verlinkt von https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)

  • tls12-dsb.pcapng – TLS 1.2 Trace mit eingebetteten Entschlüsselungsschlüsseln.
  • https://github.com/wireshark/wireshark/blob/master/test/captures – Die Testsuite enthält verschiedene TLS-Traces.

Anzeigefilter

Eine vollständige Liste der TLS-Anzeigefilterfelder finden Sie in der Anzeigefilterreferenz

Nur den TLS-basierten Datenverkehr anzeigen:

  • tls

Erfassungsfilter

Sie können TLS-Protokolle während der Erfassung nicht direkt filtern. Wenn Sie jedoch den verwendeten TCP-Port kennen (siehe oben), können Sie diesen filtern, z. B. mit TCP-Port 443.

Verwendung des (Pre)-Master-Secrets

Das Master-Secret ermöglicht die TLS-Entschlüsselung in Wireshark und kann über die Key-Log-Datei bereitgestellt werden. Das Pre-Master Secret ist das Ergebnis des Schlüsselaustausches und kann von Wireshark in ein Master Secret umgewandelt werden. Dieses Pre-Master-Geheimnis kann erhalten werden, wenn ein privater RSA-Schlüssel bereitgestellt wird und ein RSA-Schlüsselaustausch verwendet wird.

Schritt-für-Schritt-Anleitung zum Entschlüsseln von TLS-Datenverkehr von Chrome oder Firefox in Wireshark:

  1. Schließen Sie den Browser vollständig (überprüfen Sie Ihren Task-Manager, um sicherzugehen).
  2. Setzen Sie die Umgebungsvariable SSLKEYLOGFILE auf den absoluten Pfad einer beschreibbaren Datei.

  3. Starten Sie den Browser.
  4. Stellen Sie sicher, dass der Speicherort aus Schritt 2 erstellt wurde.
  5. Gehen Sie in Wireshark zu Preferences -> Protocols -> TLS und ändern Sie die Einstellung (Pre)-Master-Secret log filename in den Pfad aus Schritt 2.

  6. Starten Sie die Wireshark-Erfassung.
  7. Öffnen Sie eine Website, zum Beispiel https://www.wireshark.org/

  8. Überprüfen Sie, ob die entschlüsselten Daten sichtbar sind. Verwenden Sie beispielsweise den Filter tls und (http oder http2).

Für Windows kann eine Umgebungsvariable global festgelegt werden, wie in dieser exemplarischen Vorgehensweise beschrieben. Dies wird jedoch nicht empfohlen, da dies leicht zu vergessen ist und ein Sicherheitsproblem darstellen kann, da es die Entschlüsselung Ihres gesamten TLS-Datenverkehrs ermöglicht. Eine bessere Möglichkeit, die Umgebungsvariable festzulegen, ist eine Batchdatei. Erstellen Sie eine Datei Start-fx.cmd with:

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

Ändern Sie den Pfad der SSLKEYLOG-Datei nach Bedarf und ersetzen Sie Firefox durch Chrome für Google Chrome. Dieser Mechanismus funktioniert derzeit (2019) nicht für Safari, Microsoft Edge und andere, da ihre TLS-Bibliotheken (Microsoft SChannel / Apple SecureTransport) diesen Mechanismus nicht unterstützen. Dieser Mechanismus funktioniert auch für andere Anwendungen als Webbrowser, hängt jedoch von der von der Anwendung verwendeten TLS-Bibliothek ab.

Beispiele für andere Anwendungen:

  • Anwendungen, die OpenSSL verwenden, könnten einen GDB- oder einen LD_PRELOAD-Trick verwenden, um die Geheimnisse zu extrahieren. Dazu gehört Python.

    • Für eine exemplarische Vorgehensweise für Apache HTTP Server mit diesem libsslkeylog.so bibliothek, siehe diesen Beitrag.

  • Für Java-Programme können Geheimnisse aus der TLS-Debug-Protokolleinstellung extrahiert oder direkt in dem Format ausgegeben werden, das Wireshark über einen Java-Agenten benötigt. Zwei ähnliche Projekte:
    • jSSLKeyLog: http://jsslkeylog.sourceforge.net/

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

  • Python-Skripte können bearbeitet werden, um auch Schlüssel zu sichern.

Eine Übersicht über unterstützte TLS-Anwendungen und -Bibliotheken finden Sie auch auf Seite 19 von Peter Wus SSL/TLS Decryption SharkFest’18 EU presentation.

Einbetten von Entschlüsselungsgeheimnissen in eine pcapng-Datei

Seit Wireshark 3.0 können Sie die TLS-Schlüssellogdatei in eine pcapng-Datei einbetten. Dies macht es viel einfacher, Capture-Dateien mit Entschlüsselungsgeheimnissen zu verteilen, und erleichtert das Umschalten zwischen Capture-Dateien, da die TLS-Protokolleinstellung nicht aktualisiert werden muss. So fügen Sie den Inhalt der Key-Log-Datei Schlüssel.txt zu erfassen datei in.pcap und schreiben Sie das Ergebnis in out-dsb.pcapng:

  • editcap –inject-secrets tls,Schlüssel.txt ein.pcap aus-dsb.pcapng

Das Suffix dsb steht für Decryption Secrets Block (DSB) und ist Teil der pcapng-Spezifikation.

Eine Schlüsselprotokolldatei kann Schlüssel enthalten, die nicht mit einer Erfassungsdatei zusammenhängen. Um sicherzustellen, dass keine unnötigen Schlüssel durchgesickert sind, können Sie die inject-tls-secrets.py skript von https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24, um die Schlüssellogdatei zu filtern und die erforderlichen Geheimnisse zu einer Capture-Datei hinzuzufügen. Das Shell-Skript wurde mit Linux und macOS getestet, aber eine Python 3-Version ist auch für alle Plattformen einschließlich Windows verfügbar. Beispiel:

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

Siehe auch

Einige andere Protokolle sind von TLS abgeleitet. Dazu gehören:

  • DTLS basiert auf dem TLS-Standard und läuft auf UDP als Transportprotokoll.

  • QUIC ist ein in der Entwicklung befindliches Protokoll, das TLS für seine Verschlüsselung verwendet, der Status von Wireshark kann unter https://github.com/quicwg/base-drafts/wiki/Tools#wireshark verfolgt werden.

  • https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia-Artikel für TLS

  • https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf SharkFest’16 EU Präsentation von Sake Blok zur Fehlerbehebung bei SSL mit Wireshark/Tshark (oder sehen Sie sich das Video der Präsentation unter https://youtu.be/oDaDY9QCnXk)

  • https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf SharkFest’18 EU Präsentation von Peter Wu zur TLS-Entschlüsselung (Video für einen früheren Vortrag in Asien unter https://youtu.be/bwJEBwgoeBg)

  • https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest’19 US-Präsentation von Peter Wu über die TLS-Entschlüsselung und die Verwendung von Embedded Decryption geheimnisse (https://youtu.be/Ha4SLHceF6w).

  • Wie funktioniert SSL/TLS? – Information Security Stack Exchange

  • Keyless SSL: Die wichtigsten technischen Details mit einer guten Einführung in TLS

  • PolarProxy von Netresec ist ein transparenter SSL / TLS-Proxy, der für Incident Responder und Malware-Forscher entwickelt wurde und in erster Linie dazu dient, TLS-verschlüsselten Datenverkehr von Malware abzufangen und zu entschlüsseln. PolarProxy entschlüsselt und verschlüsselt den TLS-Datenverkehr erneut und speichert den entschlüsselten Datenverkehr in einer PCAP-Datei, die in Wireshark oder ein Intrusion Detection System (IDS) geladen werden kann.

  • Kategoriehowto

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.