Sitzungsschlüssel für die Wireshark-Benutzeroberfläche bereitstellen?

2108
jww

Ich arbeite an einem Problem mit HTTPS. Ich vermute, dass es sich um Client-Zertifikate handelt. Ich möchte einige der verschlüsselten Handshake-Nachrichten lesen, die auf die ServerHelloDoneNachricht folgen . (Sobald der ServerHelloDonegesendet ist, wechselt der Stream normalerweise zu verschlüsselt):

Sitzungsschlüssel für die Wireshark-Benutzeroberfläche bereitstellen?

Die Wireshark-Spur wurde erzeugt mit s_client:

$ echo -e "GET / HTTP/1.1\nHost:example.net\n" | openssl s_client -connect example.net:443 -ssl3 -ign_eof -CAfile Equifax_Secure_Certificate_Authority.pem  CONNECTED(00000003) ... --- Certificate chain 0 s:/C=ES/ST=Malaga/L=Malaga/O=Example, LLC/CN=www.example.net/OU=Example IT i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority --- Server certificate -----BEGIN CERTIFICATE----- MIIExjCCA66gAwIBAgIQeee0uwSySeNXOkI+BUoMMzANBgkqhkiG9w0BAQUFADBE MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU ... doLsKI2R6RQA/7IcuTpKkvLF5wYKvmocPxYVg9FOoFvKV0wjWo6qlwsANPAVov+7 zFzZreROa7lBj8UH0IyYjLmBrbe1yMr/Cmg= -----END CERTIFICATE----- ... New, TLSv1/SSLv3, Cipher is RC4-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : RC4-SHA Session-ID: 663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15 Session-ID-ctx:  Master-Key: ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1407443412 Timeout : 7200 (sec) Verify return code: 0 (ok) ... read R BLOCK HTTP/1.1 301 Moved Permanently Cache-Control: private Content-Type: text/html; charset=utf-8 Location: /Login/Login Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Thu, 07 Aug 2014 20:29:46 GMT Content-Length: 129  <html><head><title>Object moved</title></head><body> <h2>Object moved to <a href="/Login/Login">here</a>.</h2> </body></html> ^C 

Da der Wireshark-Trace mit generiert wurde s_client, habe ich den Hauptschlüssel für die Sitzung. Ich habe den Hauptschlüssel, weil s_clienter auf das Terminal gedruckt wurde. HINWEIS : Ich beziehe mich nicht auf den öffentlichen oder privaten Schlüssel des Servers. Ich behaupte nur, einen Schlüssel für diese Sitzung zu haben.

Ich habe Secure Socket Layer (SSL) im Wireshark-Wiki besucht, aber es wird nicht gesagt, wie der Hauptschlüssel in die GUI gesteckt wird. (Sie besprechen, wie man es benutzt, aber es hat nichts mit der GUI zu tun).

Gibt es eine Möglichkeit, den Hauptschlüssel in die Wireshark-Benutzeroberfläche zu stecken, damit ich den verschlüsselten Datenverkehr lesen kann?

1
"Von oben habe ich den Hauptschlüssel." Nein, Sie nicht. Sie haben den öffentlichen Schlüssel. Das heißt, Sie können Inhalte verschlüsseln. Der private Schlüssel befindet sich auf dem Remote-Server und Sie können ihn nicht abrufen, es sei denn, Sie besitzen diesen Server. Zoredache vor 10 Jahren 1
@Zoredache - Ich habe nichts über das Schlüsselpaar des Servers behauptet. `s_client` gibt den Hauptschlüssel für die Sitzung aus. Ich habe es, weil `s_client` es auf das Terminal druckt. (Siehe auch: Ich bin nicht sicher, ob es sich dabei um das Prä-Master-Geheimnis oder das Master-Geheimnis handelt, aber ich werde das ggf. ausarbeiten). jww vor 10 Jahren 0
https://isc.sans.edu/forums/diary/Psst+Your+Browser+Knows+All+Your+Secrets/16415 cychoi vor 9 Jahren 1

1 Antwort auf die Frage

1
NuTTyX

Angenommen, Sie haben eine Datei, die den privaten Schlüssel enthält und etwas Ähnliches enthält

-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCsiEqJU4M76dlpmhb69DciXhLGkHX8mIoaQsCyy+Qx1rzSFp1L WFrDBR4v9zyyO11F8eRdc+AZqbhlzEq+HV5qH9MYnKeKJZMUlMSvE675aZzx2DWY rHdR1RyDpyxQvL8yKsAmoxY9WoesYU37gwk3al2C2lGL1MyxXT863ku0swIDAQAB [...] 2xZo60YQkK6sKoxxDZFfnE6pYGiluSaYHmem42Sn7ZWarfMFgJGS92EZXGCBQIun 6Q5pB4pxj6iUMkT7joECQAzRrRCHpKtJmFoxEZ/xhGVUpUUulCor4Xe5Mo6mJdJw ZjAAI3aJW4RWouEUPR1voTKHewFNUqXYE48zpElzpYM= -----END RSA PRIVATE KEY----- 

Sie müssen Wireshark -> Bearbeiten -> Einstellungen öffnen.

Suchen Sie in der linken Spalte unter "Protokolle" den Eintrag "SSL". Je nach Version kann die Syntax variieren. Wenn die aktuellste Version angenommen wird, klicken Sie unter "RSA-Schlüsselliste" auf Bearbeiten ..., dann auf "Neu" und füllen Sie die Felder aus. Verwenden Sie "http" als Protokoll (nicht https) und lassen Sie das Kennwort leer.

HINWEIS: In einigen Situationen können Sie nicht entschlüsseln:

  • wenn Sie nicht den gesamten Datenverkehr erfasst haben, seit dem allerersten Paket
  • Wenn der Client eine SSL-Sitzung erneut verwendet hat (überprüfen Sie das Paket "client_hello" auf "Sitzungs-ID").
  • wenn das SSL mit Forward-Geheimhaltung ausgehandelt wurde

Ich habe festgestellt, dass es auch eine andere Möglichkeit gibt: Wenn Sie sowohl Session-ID als auch Master-Key haben, können Sie eine Datei wie diese einrichten (ich habe die Daten von Ihrer openssl-Ausgabe kopiert):

RSA Session-ID:663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15 Master-Key:ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB 

Richten Sie unter SSL-Voreinstellungen auf wireshark den Dateinamen des Protokolls (Pre) -Master-Secret aus.

Denken Sie daran, eine leere Zeile in die Datei einzufügen

Danke NuTTyX. Ich habe weder den [Server] Schlüssel noch die Schlüsseldatei. Durch die Verwendung des `s_client 'von OpenSL habe ich das Hauptgeheimnis für die von Wireshark beobachtete Sitzung. jww vor 10 Jahren 0