
Transparenter Man-in-the-Middle-Proxy, der SSL/TLS-Verbindungen beendet, Zertifikate spontan fälscht und entschlüsselten Datenverkehr für Netzwerkforensik und Penetrationstests protokolliert.
SSLsplit ist ein Werkzeug für Man-in-the-Middle-Angriffe gegen SSL/TLS-verschlüsselte Netzwerkverbindungen. Es ist für Netzwerkforensik, Anwendungssicherheitsanalyse und Penetrationstests gedacht.
SSLsplit ist darauf ausgelegt, transparent Verbindungen zu beenden, die mithilfe einer Netzwerkadressübersetzungs-Engine an es weitergeleitet werden. SSLsplit beendet dann SSL/TLS und initiiert eine neue SSL/TLS-Verbindung zur ursprünglichen Zieladresse, während alle übertragenen Daten protokolliert werden. Neben dem NAT-basierten Betrieb unterstützt SSLsplit auch statische Ziele und die Verwendung des von SNI angegebenen Servernamens als Upstream-Ziel. SSLsplit ist ein reiner transparenter Proxy und kann nicht als HTTP- oder SOCKS-Proxy fungieren, der in einem Browser konfiguriert wird.
SSLsplit unterstützt reine TCP-, reine SSL-, HTTP- und HTTPS-Verbindungen über IPv4 und IPv6. Es hat auch die Fähigkeit, reines TCP dynamisch auf SSL zu aktualisieren, um SMTP STARTTLS und ähnliche Upgrade-Mechanismen generisch zu unterstützen. SSLsplit unterstützt vollständig Server Name Indication (SNI) und kann mit RSA-, DSA- und ECDSA-Schlüsseln sowie DHE- und ECDHE-Chiffriersuiten arbeiten. Abhängig von der Version von OpenSSL, gegen die gebaut wurde, unterstützt SSLsplit SSL 3.0, TLS 1.0, TLS 1.1 und TLS 1.2 und optional auch SSL 2.0.
Für SSL- und HTTPS-Verbindungen generiert und signiert SSLsplit spontan gefälschte X509v3-Zertifikate, die den Subject DN, die subjectAltName-Erweiterung und andere Merkmale des ursprünglichen Serverzertifikats nachahmen. SSLsplit hat die Fähigkeit, vorhandene Zertifikate zu verwenden, deren privater Schlüssel verfügbar ist, anstatt gefälschte zu generieren. SSLsplit unterstützt NULL-Prefix-CN-Zertifikate, implementiert aber ansonsten keine Exploits gegen bestimmte Zertifikatüberprüfungs-Schwachstellen in SSL/TLS-Stacks.
SSLsplit implementiert eine Reihe von Abwehrmechanismen gegen Mechanismen, die normalerweise MitM-Angriffe verhindern oder erschweren würden. SSLsplit kann OCSP-Anfragen auf generische Weise ablehnen. Für HTTP- und HTTPS-Verbindungen manipuliert SSLsplit Header, um vom Server angewiesenes Public-Key-Pinning (HPKP) zu verhindern, Strict-Transport-Security-Einschränkungen (HSTS) zu umgehen, Certificate-Transparency-Durchsetzung (Expect-CT) zu vermeiden und einen Wechsel zu QUIC/SPDY, HTTP/2 oder WebSockets (Upgrade, Alternate Protocols) zu verhindern. HTTP-Komprimierung, Kodierungen und Keep-Alive werden deaktiviert, um die Protokolle lesbarer zu machen.
Zu den Protokollierungsoptionen gehören traditionelle SSLsplit-Verbindungs- und Inhaltsprotokolldateien sowie PCAP-Dateien und das Spiegeln des entschlüsselten Datenverkehrs an eine Netzwerkschnittstelle. Zusätzlich können Zertifikate, Masterschlüssel und lokale Prozessinformationen protokolliert werden.
Siehe die Handbuchseite sslsplit(1) für Details zur Verwendung von SSLsplit und zur Einrichtung der verschiedenen NAT-Engines.
SSLsplit ist standardmäßig von den Bibliotheken OpenSSL, libevent 2.x, libpcap und libnet 1.1.x abhängig; libpcap und libnet werden nicht benötigt, wenn die Spiegelungsfunktion weggelassen wird. Der Build hängt von GNU make und einer POSIX.2-Umgebung in PATH ab. Wenn verfügbar, wird pkg-config verwendet, um die Abhängigkeiten zu finden und zu konfigurieren. Die optionalen Unit-Tests hängen von der Check-Bibliothek ab.
SSLsplit unterstützt derzeit die folgenden Betriebssysteme und NAT-Mechanismen:
Die Unterstützung für lokale Prozessinformationen (-i) ist derzeit auf Mac OS X und FreeBSD verfügbar.
SSL/TLS-Funktionen und Kompatibilität hängen stark von der Version von OpenSSL ab, gegen die gelinkt wird. Für optimale Ergebnisse verwenden Sie eine aktuelle Version von OpenSSL oder LibreSSL.
Wenn die obigen Voraussetzungen erfüllt sind, führen Sie aus:
make
make test # optionale Unit-Tests
make sudotest # optionale Unit-Tests mit Administratorrechten
make install # optionale Installation
Abhängigkeiten werden mit pkg-config automatisch konfiguriert. Wenn Abhängigkeiten nicht erkannt werden und die Korrektur von PKG_CONFIG_PATH nicht hilft, können Sie ihre jeweiligen Speicherorte manuell angeben, indem Sie OPENSSL_BASE, LIBEVENT_BASE, LIBPCAP_BASE, LIBNET_BASE und/oder CHECK_BASE auf die entsprechenden Präfixe setzen.
Sie können das Standard-Installationspräfix (/usr/local) überschreiben, indem Sie PREFIX setzen. Weitere Build-Optionen und Build-Standardeinstellungen finden Sie in GNUmakefile und defaults.h.
Siehe die Handbuchseiten sslsplit(1) und sslsplit.conf(5) für die Benutzerdokumentation. Siehe NEWS.md für Versionshinweise, die wichtige Änderungen zwischen den Versionen auflisten, und SECURITY.md für Informationen zur Offenlegung von Sicherheitslücken.
SSLsplit wird unter einer 2-Klausel-BSD-Lizenz bereitgestellt. SSLsplit enthält Komponenten, die unter den MIT- und APSL-Lizenzen lizenziert sind. Siehe LICENSE, LICENSE.contrib und LICENSE.third sowie die jeweiligen Quelldatei-Header für Details.
Siehe AUTHORS.md für die Liste der Mitwirkenden.
SSLsplit wurde von mitm-ssl von Claes M. Nyberg und sslsniff von Moxie Marlinspike inspiriert, teilt aber keinen Quellcode mit ihnen.