SSLsplit - 透明SSL/TLS拦截
概述
SSLsplit是一种用于对SSL/TLS加密网络连接进行中间人攻击的工具。它旨在用于网络取证、应用安全分析和渗透测试。
SSLsplit设计用于透明地终止使用网络地址转换引擎重定向到它的连接。SSLsplit然后终止SSL/TLS并启动一个新的SSL/TLS连接到原始目标地址,同时记录所有传输的数据。除了基于NAT的操作外,SSLsplit还支持静态目标和使用SNI指示的服务器名称作为上游目标。SSLsplit纯粹是一个透明代理,不能作为浏览器中配置的HTTP或SOCKS代理。
SSLsplit支持IPv4和IPv6上的普通TCP、普通SSL、HTTP和HTTPS连接。它还能够动态地将普通TCP升级到SSL,以通用方式支持SMTP STARTTLS和类似的升级机制。SSLsplit完全支持服务器名称指示(SNI),并能够使用RSA、DSA和ECDSA密钥以及DHE和ECDHE密码套件。根据所构建的OpenSSL版本,SSLsplit支持SSL 3.0、TLS 1.0、TLS 1.1和TLS 1.2,也可选择支持SSL 2.0。
对于SSL和HTTPS连接,SSLsplit即时生成并签署伪造的X509v3证书,模仿原始服务器证书的主题DN、subjectAltName扩展和其他特征。SSLsplit能够使用现有的私钥可用的证书,而不是生成伪造的证书。SSLsplit支持NULL前缀CN证书,但不实现针对SSL/TLS堆栈中特定证书验证漏洞的利用。
SSLsplit实现了一些防御机制,以对抗通常会阻止MitM攻击或使其更加困难的机制。SSLsplit可以以通用方式拒绝OCSP请求。对于HTTP和HTTPS连接,SSLsplit会篡改头部以防止服务器指示的公钥固定(HPKP)、避免严格传输安全限制(HSTS)、避免证书透明度强制(Expect-CT)并防止切换到QUIC/SPDY、HTTP/2或WebSockets(Upgrade、Alternate Protocols)。HTTP压缩、编码和保持活动连接被禁用,以使日志更易读。
日志选项包括传统的SSLsplit连接和内容日志文件以及PCAP文件,并将解密的流量镜像到网络接口。此外,还可以记录证书、主密钥和本地进程信息。
有关使用SSLsplit和设置各种NAT引擎的详细信息,请参阅手册页sslsplit(1)。
要求
SSLsplit默认依赖于OpenSSL、libevent 2.x、libpcap和libnet 1.1.x库;如果省略镜像功能,则不需要libpcap和libnet。构建依赖于GNU make和PATH
中的POSIX.2环境。如果可用,使用pkg-config来定位和配置依赖项。可选的单元测试依赖于check库。
SSLsplit目前支持以下操作系统和NAT机制:
- FreeBSD:pf rdr和divert-to,ipfw fwd,ipfilter rdr
- OpenBSD:pf rdr-to和divert-to
- Linux:netfilter REDIRECT和TPROXY
- Mac OS X:pf rdr和ipfw fwd
本地进程信息(-i
)支持目前在Mac OS X和FreeBSD上可用。
SSL/TLS功能和兼容性在很大程度上取决于链接的OpenSSL版本。为获得最佳结果,请使用最新版本的OpenSSL或LibreSSL。
安装
在具备上述要求的情况下,运行:
make
make test # 可选的单元测试
make sudotest # 需要特权的可选单元测试
make install # 可选安装
依赖项使用pkg-config自动配置。如果无法检测到依赖项,且修复PKG_CONFIG_PATH
无效,您可以通过设置OPENSSL_BASE
、LIBEVENT_BASE
、LIBPCAP_BASE
、LIBNET_BASE
和/或CHECK_BASE
来手动指定它们各自的位置。
您可以通过设置PREFIX
来覆盖默认安装前缀(/usr/local
)。有关更多构建选项和构建时默认值,请参见GNUmakefile
和defaults.h
。
文档
用户文档请参阅手册页sslsplit(1)
和sslsplit.conf(5)
。有关版本之间重大变更的发行说明,请参阅NEWS.md
,有关安全漏洞披露的信息,请参阅SECURITY.md
。
许可
SSLsplit基于2条款BSD许可提供。
SSLsplit包含根据MIT和APSL许可的组件。
详情请参见LICENSE
、LICENSE.contrib
和LICENSE.third
以及相应的源文件头。
致谢
贡献者列表请参见AUTHORS.md
。
SSLsplit的灵感来自Claes M. Nyberg的mitm-ssl
和Moxie Marlinspike的sslsniff
,但不与它们共享源代码。