Entschlüsseln Sie den SSL-Datenverkehr mit dem Befehlszeilenprogramm openssl

638
David B

Ich versuche, einige manuelle Datenextraktionen / -verschlüsselungen / -entschlüsselungen mit dem opensslBefehlszeilentool durchzuführen.

Ich habe RFC5246 überprüft, um herauszufinden, was ich tun muss. Es ist mir nicht völlig klar, ob ich diesen Schritt mit diesem Werkzeug ausführen kann. Ich gehe davon aus, dass der private Schlüssel in der Erläuterung der private Schlüssel ist, der beim Erstellen meines selbstsignierten Zertifikats generiert wurde.

Wenn RSA für die Serverauthentifizierung und den Schlüsselaustausch verwendet wird, generiert der Client ein 48-Byte-pre_master_secret, das mit dem öffentlichen Schlüssel des Servers verschlüsselt und an den Server gesendet wird. Der Server entschlüsselt mit dem privaten Schlüssel pre_master_secret. Beide Parteien konvertieren dann das pre_master_secret wie oben angegeben in das master_secret.

Kann mir jemand sagen, ob meine Annahmen richtig sind. Kann das opensslBefehlszeilentool verwendet und mit meinem privaten Server-Schlüssel und verschlüsseltem pre_master_secret vom Client geliefert werden, um den pre_master-Schlüssel für den Server zu generieren, damit er den Hauptschlüssel erstellen kann?

Wenn ja, bin ich mir nicht sicher, wie ich das mache, da ich mit dem Tool nicht sehr vertraut bin.

Die andere Sache, die ich hervorheben möchte, ist, dass die Verschlüsselungssuite, mit der ich arbeite, TLS_RSA_WITH_AES_256_CBC_SHA ist und ich in Wireshark sehen kann, dass das pre_master_secret vom Client 256 Byte lang ist.

2

2 Antworten auf die Frage

4
Gilles

Ich bin nicht ganz sicher, aber ich denke, die Antwort ist nein. Der opensslBefehlszeilenclient ist eine heterogene Sammlung von Tools. Die X.509-Befehle können nützlich sein, um Zertifikate zu bearbeiten, die Kryptografiebefehle sind jedoch nur für das Testen von OpenSSL selbst nützlich.

Wenn Sie kryptographische Berechnungen mit gängigen Algorithmen durchführen müssen, empfehle ich die interaktive Befehlszeile von Python mit der Cryptodome- Bibliothek.

Um SSL-Verbindungen zu entschlüsseln, ist es jedoch am einfachsten, Wireshark zu verwenden. Teilen Sie Wireshark mit, wo der private Schlüssel zu finden ist, und entschlüsselt eine TLS-Verbindung, die RSA-Verschlüsselung verwendet. Für Verbindungen, die das flüchtige Diffie-Hellman verwenden, können Sie den Datenverkehr nicht allein mit dem Schlüssel entschlüsseln. Sie benötigen zusätzliche Informationen vom Client oder vom Server .


Beachten Sie, dass die Verwendung der TLS_RSA_WITH_AES_256_CBC_SHACiphersuite aus mehreren Gründen eine schlechte Idee ist:

  • Es gibt kein Vorwärtsgeheimnis. Wenn also der private Schlüssel des Servers jemals gefährdet wird, sind auch alle Verbindungen, die mit diesem Schlüssel hergestellt werden, gefährdet. Ciphersuites, die einen Diffie-Hellman-Schlüsselaustausch (mit EDH oder ECDHE in ihrem Namen) verwenden, haben ein Forward-Secret.
  • Es verwendet die RSA-Entschlüsselung, die das Auffüllen umfasst, was eine klassische Quelle für Implementierungsfehler und Leckagen durch Seitenkanäle ist. Ciphersuites mit EDH oder ECDHE in ihrem Namen zusätzlich zu RSA oder mit DSA oder ECDSA verwenden anstelle der Entschlüsselung Signaturen und sind weniger wahrscheinlich mit Implementierungsfehlern behaftet.
  • Es wird die CBC-Entschlüsselung verwendet, bei der es sich um Auffüllen handelt, eine klassische Quelle für Implementierungsfehler und Leckagen durch Seitenkanäle. Ciphersuites ohne CBC in ihrem Namen sind weniger wahrscheinlich mit Implementierungsfehlern behaftet.
1
dave_thompson_085

RSAES-PKCS1v1_5, das SSL / TLS-Through-1.2-Einfach-RSA-Schlüsselaustausch verwendet, kann durch OpenSSL-Befehlszeilenoperationen rsautloderpkeyutl (letztere seit 1.1.0 in 2010) entschlüsselt werden . Siehe die entsprechenden Manpages, die auf Ihrem System verfügbar sein sollten, wenn nicht Windows oder Online .

Beachten Sie, dass Sie hiermit das Premaster-Geheimnis erhalten, das den Verkehr an sich nicht entschlüsseln (oder authentifizieren) kann. Sie müssen den Premaster plus Nonces verwenden, um das Hauptgeheimnis abzuleiten, und dann das Master Secret plus Nonces, um die Arbeitsschlüssel (Plural) abzuleiten. Die Ableitungsfunktion "PRF" unterscheidet sich zwischen SSLv3 (nicht mehr verwendet), TLS 1.0 und 1.1 (RFCs 2246 und 4346) und TLS 1.2 (RFC 5246). (PRF wird sich in TLS 1.3 nach dem Entwurf noch einmal unterscheiden, was jedoch auch den reinen RSA-Schlüsselaustausch vollständig eliminiert.)

Die Befehlszeile kann nicht direkt auf die SSL / TLS-PRFs zugreifen, kann jedoch die HMACs ausführen, aus denen sie erstellt werden (außer SSLv3). Die Manpage finden Sie dgstan den gleichen Stellen wie oben, und note -hmac $keykann nur mit Byte-Sequenzen umgehen, die von shell / etc übergeben werden können. Dies ist jedoch nicht alles -mac hmac -macopt hexkey:$hexkey.

Abgesehen davon stimme ich mit Gilles überein, dass es viel einfacher ist, dass wireshark dies tun. Wenn Ihr Problem darin besteht, dass Sie die Daten in einer anderen Form als einer Capture-Datei haben, verfügen wireshark distros über mehrere Hilfsprogramm-Befehlszeilen-Tools zum Bearbeiten von Dateien, die normalerweise eine gefälschte Capture erstellen können. In diesem Fall können wireshark oder tshark main dann entschlüsseln.

Danke, ich bin noch in einer großen Lernphase. Eigentlich versuche ich herauszufinden, ob ich dies in der MUMPS-Sprache tun kann, die an openssl schält. Wie stelle ich hier eine Anschlussfrage, ohne eine weitere Frage zu stellen? David B vor 5 Jahren 0
(1) Ich kenne MUMPS nicht (obwohl ich gehört habe, dass es auf M geschrumpft ist). Ich kann also nicht sagen, ob oder wie es mit den Parts umgehen kann, auf die die openssl-Befehlszeile nicht zutrifft. Das ist wahrscheinlich für Stackoverflow ein Thema (nicht hier). (2) Die allgemeine Stapelphilosophie besteht darin, eine Frage pro Q und Antworten für dieses Q zu haben (mit Links, falls dies die Erklärung erleichtert), so dass jede von Leuten gefunden werden kann, die nach diesen Themen oder Themen suchen. Wenn Sie jedoch _close_ an das Original anschließen, können Sie dieses Q bearbeiten, um es hinzuzufügen (es ist jedoch unhöflich, bereits angesprochene Probleme zu entfernen). dave_thompson_085 vor 5 Jahren 0
MUMPS wird manchmal als "M" bezeichnet. Ja, Sie sind richtig. Ich habe hier eine Anschlussfrage gestellt [Link] (https://superuser.com/questions/1342977/decrypt-ssl-traffic-with-the-ensensl-command-line-tool-continued).) Ich kann hoffentlich alle bearbeiten Ich muss in MUMPS das openssl nicht. So weit, so gut, dass ich versuche, die RFC zu lesen und mitzumachen, obwohl ich zugebe, dass ich ein bisschen zu kämpfen habe. Mein MUMPS-Programm liefert das Zertifikat, und ich bin dabei, Dinge mit der Handshake-Nachricht (en) auszuhandeln, die bisher gut aussieht. Wenn Sie oder jemand meine Folgemaßnahmen überprüfen und dies als nächstes unterstützen könnte, würde dies helfen. David B vor 5 Jahren 0