Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

sslsniff(1) [debian man page]

SSLSNIFF(1)						      General Commands Manual						       SSLSNIFF(1)

NAME
sslsniff - SSL/TLS man-in-the-middle attack tool SYNOPSIS
sslsniff [options] DESCRIPTION
This manual page documents briefly the sslsniff command. sslsniff is designed to create man-in-the-middle (MITM) attacks for SSL/TLS connections, and dynamically generates certs for the domains that are being accessed on the fly. The new certificates are constructed in a certificate chain that is signed by any certificate that is provided. sslsniff also supports other attacks like null-prefix or OCSP attacks to achieve silent interceptions of connections when possible. OPTIONS
Modes: -a Authority mode. Specify a certificate that will act as a CA. -t Targeted mode. Specify a directory full of certificates to target. Required options: -c <file|directory> File containing CA cert/key (authority mode) or directory containing a collection of certs/keys (targeted mode) -s <port> Port to listen on for SSL interception. -w <file> File to log to Optional options: -u <updateLocation> Location of any Firefox XML update files. -m <certificateChain> Location of any intermediary certificates. -h <port> Port to listen on for HTTP interception (required for fingerprinting). -f <ff,ie,safari,opera> Only intercept requests from the specified browser(s). -d Deny OCSP requests for our certificates. -p Only log HTTP POSTs -e <url> Intercept Mozilla Addon Updates -j <sha256> The sha256sum value of the addon to inject NOTES
sslsniff works only on the FORWARD traffic (not on INPUT or OUTPUT). EXAMPLES
To intercept traffic on port 8443, start sslsniff on a local port: sslsniff -a -c /usr/share/sslsniff/certs/wildcard -s 4433 -w /tmp/sslsniff.log and redirect traffic to this port using the iptables nat table: iptables -t nat -A PREROUTING -p tcp --destination-port 8443 -j REDIRECT --to-ports 4433 AUTHOR
sslsniff was written by Moxie Marlinspike. This manual page was written by Pierre Chifflier <pollux@debian.org>, for the Debian project (and may be used by others). August 16, 2009 SSLSNIFF(1)

Check Out this Related Man Page

IO::Socket::SSL::Intercept(3)				User Contributed Perl Documentation			     IO::Socket::SSL::Intercept(3)

NAME
IO::Socket::SSL::Intercept -- SSL interception (man in the middle) SYNOPSIS
use IO::Socket::SSL::Intercept; # create interceptor with proxy certificates my $mitm = IO::Socket::SSL::Intercept->new( proxy_cert_file => 'proxy_cert.pem', proxy_key_file => 'proxy_key.pem', ... ); my $listen = IO::Socket::INET->new( LocalAddr => .., Listen => .. ); while (1) { # TCP accept new client my $client = $listen->accept or next; # SSL connect to server my $server = IO::Socket::SSL->new( PeerAddr => .., SSL_verify_mode => ..., ... ) or die "ssl connect failed: $!,$SSL_ERROR"; # clone server certificate my ($cert,$key) = $mitm->clone_cert( $server->peer_certificate ); # and upgrade client side to SSL with cloned certificate IO::Socket::SSL->start_SSL($client, SSL_server => 1, SSL_cert => $cert, SSL_key => $key ) or die "upgrade failed: $SSL_ERROR"; # now transfer data between $client and $server and analyze # the unencrypted data ... } DESCRIPTION
This module provides functionality to clone certificates and sign them with a proxy certificate, thus making it easy to intercept SSL connections (man in the middle). It also manages a cache of the generated certificates. How Intercepting SSL Works Intercepting SSL connections is useful for analyzing encrypted traffic for security reasons or for testing. It does not break the end-to- end security of SSL, e.g. a properly written client will notice the interception unless you explicitly configure the client to trust your interceptor. Intercepting SSL works the following way: o Create a new CA certificate, which will be used to sign the cloned certificates. This proxy CA certificate should be trusted by the client, or (a properly written client) will throw error messages or deny the connections because it detected a man in the middle attack. Due to the way the interception works there no support for client side certificates is possible. Using openssl such a proxy CA certificate and private key can be created with: openssl genrsa -out proxy_key.pem 1024 openssl req -new -x509 -extensions v3_ca -key proxy_key.pem -out proxy_cert.pem # export as PKCS12 for import into browser openssl pkcs12 -export -in proxy_cert.pem -inkey proxy_key.pem -out proxy_cert.p12 o Configure client to connect to use intercepting proxy or somehow redirect connections from client to the proxy (e.g. packet filter redirects, ARP or DNS spoofing etc). o Accept the TCP connection from the client, e.g. don't do any SSL handshakes with the client yet. o Establish the SSL connection to the server and verify the servers certificate as usually. Then create a new certificate based on the original servers certificate, but signed by your proxy CA. This a the step where IO::Socket::SSL::Intercept helps. o Upgrade the TCP connection to the client to SSL using the cloned certificate from the server. If the client trusts your proxy CA it will accept the upgrade to SSL. o Transfer data between client and server. While the connections to client and server are both encrypted with SSL you will read/write the unencrypted data in your proxy application. METHODS
IO::Socket::SSL::Intercept helps creating the cloned certificate with the following methods: $mitm = IO::Socket::SSL::Intercept->new(%args) This creates a new interceptor object. %args should be proxy_cert X509 | proxy_cert_file filename This is the proxy certificate. It can be either given by an X509 object from Net::SSLeays internal representation, or using a file in PEM format. proxy_key EVP_PKEY | proxy_key_file filename This is the key for the proxy certificate. It can be either given by an EVP_PKEY object from Net::SSLeays internal representation, or using a file in PEM format. The key should not have a passphrase. pubkey EVP_PKEY | pubkey_file filename This optional argument specifies the public key used for the cloned certificate. It can be either given by an EVP_PKEY object from Net::SSLeays internal representation, or using a file in PEM format. If not given it will create a new public key on each call of "new". serial INTEGER This optional argument gives the starting point for the serial numbers of the newly created certificates. Default to 1. cache HASH | SUBROUTINE This optional argument gives a way to cache created certificates, so that they don't get recreated on future accesses to the same host. If the argument ist not given an internal HASH ist used. If the argument is a hash it will store for each generated certificate a hash reference with "cert" and "atime" in the hash, where "atime" is the time of last access (to expire unused entries) and "cert" is the certificate. Please note, that the certificate is in Net::SSLeays internal X509 format and can thus not be simply dumped and restored. The key for the hash is an "ident" either given to "clone_cert" or generated from the original certificate. If the argument is a subroutine it will be called as "$cache->(ident)" to get an existing certificate and with "$cache->(ident,cert)" to cache the newly created certificate. ($clone_cert,$key) = $mitm->clone_cert($original_cert,[ $ident ]) This clones the given certificate. An ident as the key into the cache can be given (like "host:port"), if not it will be created from the properties of the original certificate. It returns the cloned certificate and its key (which is the same for alle created certificates). $string = $mitm->serialize This creates a serialized version of the object (e.g. a string) which can then be used to persistantly store created certificates over restarts of the application. The cache will only be serialized if it is a HASH. To work together with Storable the "STORABLE_freeze" function is defined to call "serialize". $mitm = IO::Socket::SSL::Intercept->unserialize($string) This restores an Intercept object from a serialized string. To work together with Storable the "STORABLE_thaw" function is defined to call "unserialize". AUTHOR
Steffen Ullrich perl v5.18.2 2014-01-07 IO::Socket::SSL::Intercept(3)
Man Page