2015-02-24 18:19:20 +00:00
|
|
|
# SSLsplit - transparent SSL/TLS interception [![Build Status](https://travis-ci.org/droe/sslsplit.svg?branch=master)](https://travis-ci.org/droe/sslsplit)
|
2016-03-25 11:19:23 +00:00
|
|
|
Copyright (C) 2009-2016, [Daniel Roethlisberger](//daniel.roe.ch/).
|
2012-04-13 12:47:30 +00:00
|
|
|
http://www.roe.ch/SSLsplit
|
2017-08-11 12:01:51 +00:00
|
|
|
The modifications for SSLproxy are copyrighted to [Soner Tari](https://github.com/sonertari),
|
2017-08-13 01:36:33 +00:00
|
|
|
and licensed under the same terms as SSLsplit.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
## Overview
|
|
|
|
|
2017-08-11 12:01:51 +00:00
|
|
|
SSLproxy is based on SSLsplit.
|
|
|
|
|
2012-04-13 12:47:30 +00:00
|
|
|
SSLsplit is a tool for man-in-the-middle attacks against SSL/TLS encrypted
|
2015-05-01 09:54:20 +00:00
|
|
|
network connections. It is intended to be useful for network forensics,
|
|
|
|
application security analysis and penetration testing.
|
|
|
|
|
|
|
|
SSLsplit is designed to transparently terminate connections that are redirected
|
|
|
|
to it using a network address translation engine. SSLsplit then terminates
|
|
|
|
SSL/TLS and initiates a new SSL/TLS connection to the original destination
|
|
|
|
address, while logging all data transmitted. Besides NAT based operation,
|
|
|
|
SSLsplit also supports static destinations and using the server name indicated
|
|
|
|
by SNI as upstream destination. SSLsplit is purely a transparent proxy and
|
|
|
|
cannot act as a HTTP or SOCKS proxy configured in a browser.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
SSLsplit supports plain TCP, plain SSL, HTTP and HTTPS connections over both
|
2015-05-01 09:54:20 +00:00
|
|
|
IPv4 and IPv6. SSLsplit fully supports Server Name Indication (SNI) and is
|
|
|
|
able to work with RSA, DSA and ECDSA keys and DHE and ECDHE cipher suites.
|
|
|
|
Depending on the version of OpenSSL built against, SSLsplit supports SSL 3.0,
|
|
|
|
TLS 1.0, TLS 1.1 and TLS 1.2, and optionally SSL 2.0 as well.
|
|
|
|
|
|
|
|
For SSL and HTTPS connections, SSLsplit generates and signs forged X509v3
|
|
|
|
certificates on-the-fly, mimicking the original server certificate's subject
|
|
|
|
DN, subjectAltName extension and other characteristics. SSLsplit has the
|
|
|
|
ability to use existing certificates of which the private key is available,
|
|
|
|
instead of generating forged ones. SSLsplit supports NULL-prefix CN
|
|
|
|
certificates but otherwise does not implement exploits against specific
|
|
|
|
certificate verification vulnerabilities in SSL/TLS stacks.
|
|
|
|
|
|
|
|
SSLsplit implements a number of defences against mechanisms which would
|
|
|
|
normally prevent MitM attacks or make them more difficult. SSLsplit can deny
|
|
|
|
OCSP requests in a generic way. For HTTP and HTTPS connections, SSLsplit
|
2017-07-25 13:07:39 +00:00
|
|
|
removes response headers for HPKP in order to prevent server-instructed public
|
|
|
|
key pinning, for HSTS to avoid the strict transport security restrictions, and
|
|
|
|
Alternate Protocols to prevent switching to QUIC/SPDY. HTTP compression,
|
|
|
|
encodings and keep-alive are disabled to make the logs more readable.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2016-03-27 12:44:11 +00:00
|
|
|
As an experimental feature, SSLsplit supports STARTTLS and similar mechanisms,
|
|
|
|
where a protocol starts on a plain text TCP connection and is later upgraded to
|
|
|
|
SSL/TLS through protocol-specific means, such as the STARTTLS command in SMTP.
|
|
|
|
SSLsplit supports generic upgrading of TCP connections to SSL.
|
|
|
|
|
2012-04-13 12:47:30 +00:00
|
|
|
See the manual page sslsplit(1) for details on using SSLsplit and setting up
|
|
|
|
the various NAT engines.
|
|
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
SSLsplit depends on the OpenSSL and libevent 2.x libraries.
|
2012-05-13 16:22:23 +00:00
|
|
|
The build depends on GNU make and a POSIX.2 environment in `PATH`.
|
2015-05-02 10:47:10 +00:00
|
|
|
If available, pkg-config is used to locate and configure the dependencies.
|
2014-01-14 00:23:09 +00:00
|
|
|
The optional unit tests depend on the check library.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2013-12-23 12:57:57 +00:00
|
|
|
SSLsplit currently supports the following operating systems and NAT mechanisms:
|
2014-11-04 19:39:20 +00:00
|
|
|
|
2013-12-23 13:13:27 +00:00
|
|
|
- FreeBSD: pf rdr and divert-to, ipfw fwd, ipfilter rdr
|
2013-12-23 12:57:57 +00:00
|
|
|
- OpenBSD: pf rdr-to and divert-to
|
2012-04-13 12:47:30 +00:00
|
|
|
- Linux: netfilter REDIRECT and TPROXY
|
2014-11-19 21:30:01 +00:00
|
|
|
- Mac OS X: pf rdr and ipfw fwd
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2014-11-28 11:09:40 +00:00
|
|
|
Support for local process information (`-i`) is currently available on Mac OS X
|
|
|
|
and FreeBSD.
|
|
|
|
|
|
|
|
SSL/TLS features and compatibility greatly depend on the version of OpenSSL
|
2015-08-02 20:06:51 +00:00
|
|
|
linked against; for optimal results, use a recent release of OpenSSL proper.
|
|
|
|
OpenSSL forks like LibreSSL and BoringSSL may or may not work.
|
2014-11-28 11:09:40 +00:00
|
|
|
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2015-05-02 10:52:37 +00:00
|
|
|
With OpenSSL, libevent 2.x, pkg-config and check available, run:
|
|
|
|
|
2012-05-13 16:22:23 +00:00
|
|
|
make
|
|
|
|
make test # optional unit tests
|
|
|
|
make install # optional install
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2012-04-22 23:03:38 +00:00
|
|
|
Dependencies are autoconfigured using pkg-config. If dependencies are not
|
2012-05-13 16:22:23 +00:00
|
|
|
picked up and fixing `PKG_CONFIG_PATH` does not help, you can specify their
|
|
|
|
respective locations manually by setting `OPENSSL_BASE`, `LIBEVENT_BASE` and/or
|
|
|
|
`CHECK_BASE` to the respective prefixes.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2012-05-13 16:22:23 +00:00
|
|
|
You can override the default install prefix (`/usr/local`) by setting `PREFIX`.
|
2014-11-04 19:39:20 +00:00
|
|
|
For more build options see `GNUmakefile`.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
|
2014-11-28 11:09:40 +00:00
|
|
|
## Documentation
|
2012-04-13 12:47:30 +00:00
|
|
|
|
2014-11-28 11:18:40 +00:00
|
|
|
See `NEWS.md` for release notes listing significant changes between releases.
|
|
|
|
See `HACKING.md` for information on development and how to submit bug reports.
|
|
|
|
See `AUTHORS.md` for the list of contributors.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
2014-11-30 00:39:57 +00:00
|
|
|
SSLsplit is provided under a 2-clause BSD license.
|
2014-01-14 00:23:09 +00:00
|
|
|
SSLsplit contains components licensed under the MIT and APSL licenses.
|
2014-11-30 00:39:57 +00:00
|
|
|
See `LICENSE.md` and the respective source file headers for details.
|
2012-04-13 12:47:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Credits
|
|
|
|
|
2014-11-04 19:39:20 +00:00
|
|
|
SSLsplit was inspired by `mitm-ssl` by Claes M. Nyberg and `sslsniff` by Moxie
|
2012-04-13 12:47:30 +00:00
|
|
|
Marlinspike, but shares no source code with them.
|
|
|
|
|
|
|
|
|