2016-03-26 4 views
6

Ich habe eine Anwendung, die ich mache, die OpenSSL 1.0.2 verwendet und ich möchte den Verkehr mit Wireshark untersuchen. Wireshark kann (angeblich) TLS-Gespräche entschlüsseln, vorausgesetzt, Sie geben ihm das Pre-Master-Geheimnis.Wie extrahiere ich das Pre-Master-Geheimnis mithilfe eines OpenSSL-basierten Clients?

Wenn ich eine Cipher-Suite wie TLS_RSA_WITH_AES_256_CBC_SHA256 verwende; kann mir jemand sagen, wie man die Vor-Master-Geheimnis aus einer SSL oder SSL_CTX Struktur bekommen? Ich bin OK damit, undurchsichtige Strukturen innerhalb des SSL Objekts zu hacken - das ist nichts, was in einem Produkt geliefert würde; Ich möchte nur wissen, wie man eine Vormaster-Geheimdatei für Wireshark auffüllt.

+1

Siehe auch [Extrahieren von Pre-Master-Schlüsseln aus einer OpenSSL-Anwendung] (http://security.stackexchange.com/q/80158/29925) auf InfoSec.SE. – jww

+0

Es ist jetzt wahrscheinlich bemerkenswert, dass OpenSSL 1.1.0 wurde veröffentlicht: Viele Strukturen wurden undurchsichtig gemacht, so dass Sie wahrscheinlich ziemlich viel Hacking machen müssen. – jww

Antwort

6

Ich empfehle die Verwendung des Hauptschlüssels, der einfacher zu bekommen ist. Soweit ich weiß, existiert der Pre-Master-Schlüssel nur kurzzeitig auf dem Stack in OpenSSL. Der Hauptschlüssel ist in ssl_session_st (definiert in ssl.h im 1.0.2-Zweig, aber in einer späteren Version zu ssl_locl.h verschoben) verfügbar. Die SSL Elementvariable session ist ein Zeiger auf seine ssl_session_st (aka SSL_SESSION).

Wireshark kann den Master-Schlüssel sowie den Pre-Master-Schlüssel verwenden, um Verbindungen zu entschlüsseln. Here are the formats die Wireshark zum Zeitpunkt des Schreibens unterstützt:

  • RSA xxxx yyyy xxxx Wo die ersten 8 Bytes des verschlüsselten pre-master secret sind (hex-codiert) yyyy Wo ist der Klartext-master secret pre (HEX- codierter) (dies ist das Originalformat mit Fehlern 4349 eingeführt)

  • RSA Session-ID:xxxx Master-Key:yyyy Wo xxxx die SSL-Sitzungs-ID (hex-codiert) Wo yyyy ist die c leartext master secret (hex-codiert) (hinzugefügt, um openssl s_client Master-Key-Ausgabe zu unterstützen) Dies ist etwas irreführend, weil es nichts RSA-spezifisches darüber gibt.

  • PMS_CLIENT_RANDOM xxxx yyyy Wo xxxx ist die client_random vom Client (hex-codiert) Wo yyyy ist die unverschlüsselt geheimen Pre-Master (hex-codiert) (Dieses Format ermöglicht SSL-Verbindungen entschlüsselt werden, wenn ein Benutzer die PMS erfassen konnte jedoch die MS für eine bestimmte Sitzung mit einem SSL-Server.)

  • CLIENT_RANDOM xxxx yyyy Wo xxxx ist die client_random vom Client (hex-codiert) Wo 012.326.619 nicht wiederherstellenist das unverschlüsselt Master-Geheimnis (hex-codiert) (Dieses Format ermöglicht nicht-RSA SSL-Verbindungen entschlüsselt werden, dh ECDHE-RSA.)

Beachten Sie, dass weder der Pre-Master-Schlüssel noch den Master Schlüssel ist der symmetrische Schlüssel (Ihr Fragentitel impliziert, dass Sie es vielleicht denken). Der symmetrische Schlüssel wird aus dem Hauptschlüssel und zufälligen Client/Server-Daten abgeleitet.

+0

rhashimoto: Ja! Das ist genau die Information, die ich brauchte. Und du hast Recht - ich war verwirrt - ich dachte, dass das Geheimnis vor dem Meister der symmetrische Schlüssel war. Ich werde den Titel ändern, um das besser widerzuspiegeln, um niemanden zu verwirren. –

+1

FYI: OpenSSL 1.1.0 bietet die Funktion [SSL_SESSION_get_master_key()] (https://www.openssl.org/docs/man1.1.0/ssl/SSL_SESSION_get_master_key.html). –

Verwandte Themen