
Proxy transparente de intermediário que encerra conexões SSL/TLS, forja certificados em tempo real e registra o tráfego descriptografado para perícia forense de rede e testes de penetração.
O SSLsplit é uma ferramenta para ataques de intermediário (man-in-the-middle) contra conexões de rede criptografadas com SSL/TLS. Ele foi projetado para ser útil em análises forenses de rede, análise de segurança de aplicações e testes de penetração.
O SSLsplit foi concebido para encerrar transparentemente conexões que são redirecionadas a ele usando um mecanismo de tradução de endereços de rede. O SSLsplit então encerra o SSL/TLS e inicia uma nova conexão SSL/TLS para o endereço de destino original, registrando todos os dados transmitidos. Além da operação baseada em NAT, o SSLsplit também suporta destinos estáticos e o uso do nome do servidor indicado pelo SNI como destino upstream. O SSLsplit é puramente um proxy transparente e não pode atuar como um proxy HTTP ou SOCKS configurado num navegador.
O SSLsplit suporta conexões TCP simples, SSL simples, HTTP e HTTPS sobre IPv4 e IPv6. Também tem a capacidade de atualizar dinamicamente TCP simples para SSL para suportar generically SMTP STARTTLS e mecanismos de atualização semelhantes. O SSLsplit suporta completamente Server Name Indication (SNI) e é capaz de trabalhar com chaves RSA, DSA e ECDSA e suítes de cifra DHE e ECDHE. Dependendo da versão do OpenSSL com a qual foi compilado, o SSLsplit suporta SSL 3.0, TLS 1.0, TLS 1.1 e TLS 1.2, e opcionalmente também SSL 2.0.
Para conexões SSL e HTTPS, o SSLsplit gera e assina certificados X509v3 falsificados on-the-fly, imitando o sujeito DN, a extensão subjectAltName e outras características do certificado do servidor original. O SSLsplit tem a capacidade de usar certificados existentes cuja chave privada está disponível, em vez de gerar certificados falsificados. O SSLsplit suporta certificados CN com prefixo NULL, mas não implementa exploits contra vulnerabilidades específicas de verificação de certificados em pilhas SSL/TLS.
O SSLsplit implementa várias defesas contra mecanismos que normalmente impediriam ataques MitM ou os tornariam mais difíceis. O SSLsplit pode negar pedidos OCSP de forma genérica. Para conexões HTTP e HTTPS, o SSLsplit altera cabeçalhos para evitar pinning de chave pública instruído pelo servidor (HPKP), evitar restrições de transporte estritas (HSTS), evitar a aplicação da Certificate Transparency (Expect-CT) e impedir a mudança para QUIC/SPDY, HTTP/2 ou WebSockets (Upgrade, Protocolos Alternativos). A compressão, codificações e keep-alive HTTP são desativados para tornar os registos mais legíveis.
As opções de registo incluem ficheiros de registo tradicionais de conexão e conteúdo do SSLsplit, bem como ficheiros PCAP e espelhamento de tráfego descriptografado para uma interface de rede. Adicionalmente, podem ser registados certificados, segredos mestre e informações de processo local.
Consulte a página de manual sslsplit(1) para detalhes sobre como usar o SSLsplit e configurar os vários motores NAT.
O SSLsplit depende, por padrão, das bibliotecas OpenSSL, libevent 2.x, libpcap e libnet 1.1.x; libpcap e libnet não são necessárias se a funcionalidade de espelhamento for omitida. A compilação depende do GNU make e de um ambiente POSIX.2 em PATH. Se disponível, o pkg-config é usado para localizar e configurar as dependências. Os testes unitários opcionais dependem da biblioteca check.
O SSLsplit atualmente suporta os seguintes sistemas operativos e mecanismos NAT:
O suporte para informações de processo local (-i) está atualmente disponível no Mac OS X e FreeBSD.
As funcionalidades e compatibilidade SSL/TLS dependem muito da versão do OpenSSL com a qual está ligado. Para melhores resultados, utilize uma versão recente do OpenSSL ou LibreSSL.
Com os requisitos acima disponíveis, execute:
make
make test # testes unitários opcionais
make sudotest # testes unitários opcionais que requerem privilégios
make install # instalação opcional
As dependências são autoconfiguradas usando pkg-config. Se as dependências não forem detectadas e corrigir PKG_CONFIG_PATH não ajudar, pode especificar as suas localizações manualmente definindo OPENSSL_BASE, LIBEVENT_BASE, LIBPCAP_BASE, LIBNET_BASE e/ou CHECK_BASE para os respetivos prefixos.
Pode substituir o prefixo de instalação padrão (/usr/local) definindo PREFIX. Para mais opções de compilação e valores predefinidos em tempo de compilação, consulte GNUmakefile e defaults.h.
Consulte as páginas de manual sslsplit(1) e sslsplit.conf(5) para documentação do utilizador. Consulte NEWS.md para notas de lançamento listando alterações significativas entre versões e SECURITY.md para informações sobre divulgação de vulnerabilidades de segurança.
O SSLsplit é fornecido sob uma licença BSD de 2 cláusulas.
O SSLsplit contém componentes licenciados sob as licenças MIT e APSL.
Consulte LICENSE, LICENSE.contrib e LICENSE.third, bem como os cabeçalhos dos respetivos ficheiros fonte para detalhes.
Consulte AUTHORS.md para a lista de contribuidores.
O SSLsplit foi inspirado em mitm-ssl por Claes M. Nyberg e sslsniff por Moxie Marlinspike, mas não partilha código fonte com eles.