
Proxy trasparente man-in-the-middle che termina le connessioni SSL/TLS, genera certificati al volo e registra il traffico decifrato per analisi forensi di rete e test di penetrazione.
SSLsplit è uno strumento per attacchi man-in-the-middle contro connessioni di rete crittografate SSL/TLS. È pensato per essere utile per la forensics di rete, l'analisi della sicurezza delle applicazioni e i penetration test.
SSLsplit è progettato per terminare in modo trasparente le connessioni che vengono reindirizzate ad esso utilizzando un motore di traduzione degli indirizzi di rete. SSLsplit quindi termina SSL/TLS e avvia una nuova connessione SSL/TLS verso l'indirizzo di destinazione originale, registrando tutti i dati trasmessi. Oltre al funzionamento basato su NAT, SSLsplit supporta anche destinazioni statiche e l'uso del nome del server indicato da SNI come destinazione upstream. SSLsplit è puramente un proxy trasparente e non può fungere da proxy HTTP o SOCKS configurato in un browser.
SSLsplit supporta connessioni TCP semplici, SSL semplici, HTTP e HTTPS su IPv4 e IPv6. Ha anche la capacità di aggiornare dinamicamente il TCP semplice a SSL per supportare genericamente SMTP STARTTLS e meccanismi di aggiornamento simili. SSLsplit supporta completamente Server Name Indication (SNI) ed è in grado di lavorare con chiavi RSA, DSA ed ECDSA e suite di cifratura DHE ed ECDHE. A seconda della versione di OpenSSL con cui è compilato, SSLsplit supporta SSL 3.0, TLS 1.0, TLS 1.1 e TLS 1.2, e opzionalmente anche SSL 2.0.
Per le connessioni SSL e HTTPS, SSLsplit genera e firma certificati X509v3 falsificati al volo, imitando il subject DN del certificato del server originale, l'estensione subjectAltName e altre caratteristiche. SSLsplit ha la capacità di utilizzare certificati esistenti di cui è disponibile la chiave privata, invece di generarli falsificati. SSLsplit supporta certificati CN con prefisso NULL ma altrimenti non implementa exploit contro specifiche vulnerabilità di verifica dei certificati negli stack SSL/TLS.
SSLsplit implementa una serie di difese contro meccanismi che normalmente impedirebbero gli attacchi MitM o li renderebbero più difficili. SSLsplit può negare le richieste OCSP in modo generico. Per le connessioni HTTP e HTTPS, SSLsplit altera gli header per impedire il public key pinning indicato dal server (HPKP), evitare le restrizioni di strict transport security (HSTS), evitare l'applicazione di Certificate Transparency (Expect-CT) e impedire il passaggio a QUIC/SPDY, HTTP/2 o WebSockets (Upgrade, Alternate Protocols). La compressione HTTP, le codifiche e il keep-alive sono disabilitati per rendere i log più leggibili.
Le opzioni di logging includono i tradizionali file di log di connessione e contenuto di SSLsplit, nonché file PCAP e il mirroring del traffico decifrato su un'interfaccia di rete. Inoltre, è possibile registrare certificati, master secrets e informazioni sui processi locali.
Vedere la pagina di manuale sslsplit(1) per i dettagli sull'uso di SSLsplit e sulla configurazione dei vari motori NAT.
SSLsplit dipende di default dalle librerie OpenSSL, libevent 2.x, libpcap e libnet 1.1.x; libpcap e libnet non sono necessari se la funzionalità di mirroring viene omessa. La compilazione dipende da GNU make e da un ambiente POSIX.2 in PATH. Se disponibile, pkg-config viene utilizzato per localizzare e configurare le dipendenze. I test unitari opzionali dipendono dalla libreria check.
SSLsplit attualmente supporta i seguenti sistemi operativi e meccanismi NAT:
Il supporto per le informazioni sui processi locali (-i) è attualmente disponibile su Mac OS X e FreeBSD.
Le funzionalità e la compatibilità SSL/TLS dipendono fortemente dalla versione di OpenSSL collegata. Per risultati ottimali, utilizzare una versione recente di OpenSSL o LibreSSL.
Con i requisiti sopra disponibili, eseguire:
make
make test # optional unit tests
make sudotest # optional unit tests requiring privileges
make install # optional install
Le dipendenze vengono autoconfigurate utilizzando pkg-config. Se le dipendenze non vengono rilevate e la correzione di PKG_CONFIG_PATH non aiuta, è possibile specificare manualmente le rispettive posizioni impostando OPENSSL_BASE, LIBEVENT_BASE, LIBPCAP_BASE, LIBNET_BASE e/o CHECK_BASE ai rispettivi prefissi.
È possibile sovrascrivere il prefisso di installazione predefinito (/usr/local) impostando PREFIX. Per ulteriori opzioni di compilazione e impostazioni predefinite in fase di compilazione, vedere GNUmakefile e defaults.h.
Vedere le pagine di manuale sslsplit(1) e sslsplit.conf(5) per la documentazione utente. Vedere NEWS.md per le note di rilascio che elencano le modifiche significative tra le versioni e SECURITY.md per informazioni sulla divulgazione delle vulnerabilità di sicurezza.
SSLsplit è fornito con una licenza BSD a 2 clausole. SSLsplit contiene componenti concessi in licenza con licenze MIT e APSL. Vedere LICENSE, LICENSE.contrib e LICENSE.third nonché le rispettive intestazioni dei file sorgente per i dettagli.
Vedere AUTHORS.md per l'elenco dei contributori.
SSLsplit è stato ispirato da mitm-ssl di Claes M. Nyberg e sslsniff di Moxie Marlinspike, ma non condivide alcun codice sorgente con essi.