
Proxy transparent de type homme du milieu qui termine les connexions SSL/TLS, forge des certificats à la volée et enregistre le trafic déchiffré pour l'investigation réseau et les tests de pénétration.
SSLsplit est un outil pour les attaques de type homme-du-milieu contre les connexions réseau chiffrées SSL/TLS. Il est conçu pour être utile en forensique réseau, analyse de sécurité d'applications et tests d'intrusion.
SSLsplit est conçu pour intercepter de manière transparente les connexions qui lui sont redirigées via un moteur de traduction d'adresses réseau. SSLsplit termine ensuite SSL/TLS et établit une nouvelle connexion SSL/TLS vers l'adresse de destination d'origine, tout en journalisant toutes les données transmises. En plus du fonctionnement basé sur NAT, SSLsplit prend également en charge les destinations statiques et l'utilisation du nom de serveur indiqué par SNI comme destination amont. SSLsplit est purement un proxy transparent et ne peut pas agir comme un proxy HTTP ou SOCKS configuré dans un navigateur.
SSLsplit prend en charge les connexions TCP simple, SSL simple, HTTP et HTTPS à la fois en IPv4 et IPv6. Il a également la capacité de faire passer dynamiquement du TCP simple à SSL pour prendre en charge génériquement SMTP STARTTLS et des mécanismes de mise à niveau similaires. SSLsplit prend en charge entièrement l'indication du nom de serveur (SNI) et peut fonctionner avec des clés RSA, DSA et ECDSA ainsi que des suites de chiffrement DHE et ECDHE. Selon la version d'OpenSSL contre laquelle il est compilé, SSLsplit prend en charge SSL 3.0, TLS 1.0, TLS 1.1 et TLS 1.2, et éventuellement SSL 2.0 également.
Pour les connexions SSL et HTTPS, SSLsplit génère et signe à la volée de faux certificats X509v3, imitant le DN du sujet, l'extension subjectAltName et d'autres caractéristiques du certificat serveur d'origine. SSLsplit a la capacité d'utiliser des certificats existants dont la clé privée est disponible, au lieu d'en générer de faux. SSLsplit prend en charge les certificats CN avec préfixe NULL, mais n'implémente pas autrement d'exploits contre des vulnérabilités spécifiques de vérification de certificats dans les piles SSL/TLS.
SSLsplit implémente un certain nombre de défenses contre des mécanismes qui empêcheraient normalement les attaques MitM ou les rendraient plus difficiles. SSLsplit peut refuser les requêtes OCSP de manière générique. Pour les connexions HTTP et HTTPS, SSLsplit altère les en-têtes pour empêcher l'épinglage de clé publique (HPKP) instruit par le serveur, éviter les restrictions de sécurité stricte de transport (HSTS), éviter l'application de la transparence des certificats (Expect-CT) et empêcher le basculement vers QUIC/SPDY, HTTP/2 ou WebSockets (Upgrade, Alternate Protocols). La compression HTTP, les encodages et le keep-alive sont désactivés pour rendre les journaux plus lisibles.
Les options de journalisation incluent les fichiers journaux traditionnels de connexion et de contenu SSLsplit ainsi que les fichiers PCAP et le miroir du trafic déchiffré vers une interface réseau. De plus, les certificats, les secrets maîtres et les informations sur les processus locaux peuvent être journalisés.
Voir la page de manuel sslsplit(1) pour les détails sur l'utilisation de SSLsplit et la configuration des différents moteurs NAT.
SSLsplit dépend par défaut des bibliothèques OpenSSL, libevent 2.x, libpcap et libnet 1.1.x ; libpcap et libnet ne sont pas nécessaires si la fonction de miroir est omise. La compilation dépend de GNU make et d'un environnement POSIX.2 dans PATH. Si disponible, pkg-config est utilisé pour localiser et configurer les dépendances. Les tests unitaires optionnels dépendent de la bibliothèque check.
SSLsplit prend actuellement en charge les systèmes d'exploitation et les mécanismes NAT suivants :
Le support des informations sur les processus locaux (-i) est actuellement disponible sur Mac OS X et FreeBSD.
Les fonctionnalités et la compatibilité SSL/TLS dépendent grandement de la version d'OpenSSL liée. Pour des résultats optimaux, utilisez une version récente d'OpenSSL ou LibreSSL.
Avec les prérequis ci-dessus disponibles, exécutez :
make
make test # tests unitaires optionnels
make sudotest # tests unitaires optionnels nécessitant des privilèges
make install # installation optionnelle
Les dépendances sont auto-configurées à l'aide de pkg-config. Si les dépendances ne sont pas trouvées et que la correction de PKG_CONFIG_PATH n'aide pas, vous pouvez spécifier leurs emplacements respectifs manuellement en définissant OPENSSL_BASE, LIBEVENT_BASE, LIBPCAP_BASE, LIBNET_BASE et/ou CHECK_BASE aux préfixes respectifs.
Vous pouvez remplacer le préfixe d'installation par défaut (/usr/local) en définissant PREFIX. Pour plus d'options de compilation et de valeurs par défaut au moment de la compilation, voir GNUmakefile et defaults.h.
Voir les pages de manuel sslsplit(1) et sslsplit.conf(5) pour la documentation utilisateur. Voir NEWS.md pour les notes de version listant les changements significatifs entre les versions et SECURITY.md pour les informations sur la divulgation des vulnérabilités de sécurité.
SSLsplit est fourni sous une licence BSD à 2 clauses. SSLsplit contient des composants sous licences MIT et APSL. Voir LICENSE, LICENSE.contrib et LICENSE.third ainsi que les en-têtes des fichiers source respectifs pour plus de détails.
Voir AUTHORS.md pour la liste des contributeurs.
SSLsplit a été inspiré par mitm-ssl de Claes M. Nyberg et sslsniff de Moxie Marlinspike, mais ne partage aucun code source avec eux.