SSLsplit是一个通用的透明TLS / SSL代理,用于对各类安全通讯协议执行中间人***。 使用SSLsplit,能够拦截和保存基于SSL的流量,从而侦放任何安全链接。php
SSLsplit的工做原理与其余透明SSL代理工具很是类似:它充当客户端和实际服务器之间的中间人。 若是将流量重定向到运行SSLsplit的服务器(经过更改默认网关,ARP欺骗或其余方式,请参见下文),则SSLsplit将选择SSL链接并伪装为客户端正在链接的服务器。 为此,它动态生成证书,并使用客户端必须信任的CA证书的私钥对其进行签名。
例如,若是客户端但愿使用安全的Gmail SMTP服务器(端口465上的smtp.gmail.com)发送电子邮件,则SSLsplit会为“ smtp.gmail.com”建立证书,从而伪装为Gmail 邮件服务器发送给客户端。 在上游方向(指向实际的Gmail邮件服务器),SSLsplit像普通客户端同样链接到服务器-转发实际客户端在SSL套接字上写入的全部流量。浏览器
在解释了SSLsplit如何工做的基本概念以后,本节将介绍如何实际使用它来拦截SSL(和非SSL)流量。安全
本教程假定您已经将*者系统放置在受害者计算机和服务器之间的某个位置。 这能够经过许多不一样的方式完成-如下是一些示例:
*>1)使用ARP欺骗经过将错误的映射从标准网关MAC地址发布到者的IP地址来重定向受害者的流量。 您无需物理访问受害者的设备便可执行此操做。 签出arpspoof工具。
2)在受害者的网络设置中更改默认网关地址。 若是您能够访问受害者的设备,这是最简单的方法。
3)使用DNS服务器伪造DNS条目,该DNS服务器返回者针对某些(或全部)域的IP地址。 有关如何使用Dnsmasq进行DNS欺骗的信息,请参阅个人教程。
4)经过修改受害者计算机的/etc/hosts文件中的条目,重定向各个域的流量。
如上所述,最简单的方法是将受害者设备中的默认网关地址更改成者的IP地址。 这样能够确保全部流量都经过您的计算机。 并且因为之后咱们须要安装CA证书,所以不管如何咱们都须要对受害者计算机的物理访问。服务器
要下载并编译SSLsplit,请运行如下命令:
1)wget http://mirror.roe.ch/rel/sslsplit/sslsplit-0.4.7.tar.bz2
2) bunzip2 sslsplit-0.4.7.tar.bz2
3) tar xvd sslsplit-0.4.7.tar
4) cd sslsplit-0.4.7
5) apt-get install libssl-dev libevent-dev
6) make
7) mkdir /tmp/sslsplit网络
这些命令下载并提取源代码(wget,bunzip2,tar),安装必要的依赖项(apt-get),而后使用make对其进行编译。
稍后在/tmp/sslsplit建立的临时目录用于转储链接日志文件以及传入和传出SSL套接字的原始数据。并发
为了使SSLsplit充当SSL链接的中间人,它须要可以生成并签署受害人信任的证书。 为此,受害者必须在其信任库中拥有***者的根CA证书。 根据客户端的类型(台式浏览器,手机),安装根证书有所不一样(有关Firefox,Windows,Android等的信息,请参见此处)。tcp
若是您尚未自签名的CA私钥和证书,则可使用如下命令生成一个:
1) openssl genrsa -out ca.key 4096
2) openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
第一条命令生成4096位RSA私钥PEM格式(ca.key),第二个命令使用此私钥生成自签名根CA证书(ca.crt)。 稍后SSLsplit都须要二者,可是仅证书文件须要安装在浏览器或受害者的操做系统。编辑器
在此示例中,SSLsplit将在两个端口上运行:8080用于非SSL TCP链接(例如HTTP,SMTP或FTP),以及8443用于SSL链接(例如SMTP over SSL,HTTPS等)。为了转发到达 ***者的计算机访问这些内部端口后,可使用iptables中的NAT引擎。ide
1) sysctl -w net.ipv4.ip_forward=1
2) iptables -t nat -F
3) iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-ports 8080
4) iptables -t nat -A PREROUTING -p tcp —dport 443 -j REDIRECT —to-ports 8443
5) iptables -t nat -A PREROUTING -p tcp —dport 587 -j REDIRECT —to-ports 8443
6) iptables -t nat -A PREROUTING -p tcp —dport 456 -j REDIRECT —to-ports 8443
7) iptables -t nat -A PREROUTING -p tcp —dport 993 -j REDIRECT —to-ports 8443
8) iptables -t nat -A PREROUTING -p tcp —dport 5222 -j REDIRECT —to-ports 8443工具
上面的命令首先启用IP转发(sysctl ...)以启用系统的路由器功能。 运行此命令后,Linux会将不打算用于本地计算机的IP数据包转发到其标准/默认网关,从而充当路由器。 为了防止Linux当即转发全部内容,能够定义NAT规则。 在此示例中,某些数据包重定向到本地端口8080和8443。端口HTTP(80)和WhatsApp(5222)上的纯文本流量的数据包重定向到端口8080,端口HTTPS(基于SSL的流量)数据包重定向。 443),基于SSL的IMAP(993),基于SSL的SMTP(465和587)重定向到端口8443。
一旦启用IP转发并将数据包转发到相关端口,就能够启动SSLsplit。 这听起来比实际要容易,由于SSLsplit是一个很是强大的工具,所以很是灵活。 请查看SSLsplit网站上的简短文档以及更详细的SSLsplit手册页。
对于上述用例,明智的参数配置应以下所示:
1) ./sslsplit
2) -D
3) -l connections.log
4) -j /tmp/sslsplit/
5) -S logdir/
6) -k ca.key
7) -c ca.cer
8) ssl 0.0.0.0 8443
9) tcp 0.0.0.0 8080
此命令以调试模式启动SSLsplit(-D,在前台运行,没有守护程序,输出冗长),并在日志文件“ connections.log”(-l ..)中输出链接尝试。 链接的实际内容被写入“ / tmp / sslsplit / logdir /”(-j ..和-S ..)-每一个链接的每一个传入/传出TCP流都在单独的文件中。
就是这个。 假设您已经正确配置了客户端,则如今能够开始浏览并发送/接收电子邮件。
除了控制台输出外,SSLsplit还将TCP套接字会话写到上述日志目录中。 在运行SSLsplit一段时间后,日志目录中将有不少文件,每一个都是客户端与服务器之间的链接或TCP套接字。br/>root@pbox:/tmp/sslsplit/logdir#ls
每一个文件都指示打开TCP套接字的确切时间以及源IP地址和目标IP地址以及端口。 您可使用head …窥视文件,或使用喜欢的文本编辑器:
root@pbox:/tmp/sslsplit/logdir#head ***
您可使用SSLsplit侦听许多不一样的协议。 如下是HTTPS,基于SSL的IMAP和基于SSL的SMTP的一些示例。
SSLsplit运行后,客户端与实际服务器之间的全部通讯都会经过SSLsplit。 使用-D选项,SSLsplit在STDOUT上打印链接和证书伪造。 除此以外,内容被写入日志目录(“ / tmp / sslsplit / logdir /”)。 使用tail -f之类的东西/tmp/sslsplit/loggdir/20130804T162301Z-*.log,您能够跟踪服务器与客户端之间的通讯。
在上面的屏幕截图中,上方的控制台窗口显示了SSLsplit的输出。 它显示了真实的上游Facebook证书(具备指纹f5:6b:f2:44:…),以及由SSLsplit伪造的证书-天然带有不一样的指纹,由于它是由不一样的证书颁发机构签名的。
下部的控制台窗口显示了浏览器和浏览器之间HTTPS通讯的内容。
Facebook服务器。 屏幕截图示例显示了对 “ https://www.facebook.com/login.php?login_attempt=1”的HTTPS POST请求,包括个人用户名(&email = ...)和密码(&pass = …)。
若是在经过SSLsplit重定向流量时单击任何SSL / TLS加密站点上的小锁图标,则会将证书颁发给真实的通用名称(CN),组织(O)和组织单位(OU),但不会 由真正的CA发布。
上面的示例显示了由我先前生成的“假CA证书”颁发的 “ www.google.de”假证书。
在第二个示例中,我使用某工具链接到个人邮箱账户。 与基于Web的邮件客户端不一样,链接工具经过端口143上的IMAP或经过端口993上的SSL上的IMAP链接到邮件服务器。端口143上的通讯未加密,能够用其余工具(Wireshark,tcpdump等)读取 ,基于SSL的IMAP须要一个中间人代理来拆分SSL通讯。
上面的屏幕截图捕获了链接工具与端口993上的邮件IMAP服务器的初始链接。像第一个示例同样,上层控制台显示了SSLsplit调试输出(显示 SSLsplit伪造证书的方式),下层控制台显示经过SSL套接字交换的字节。
正如您在屏幕快照中看到的那样,IMAP通信包括客户端和服务器功能(1个功能)的交换,以及服务器开发人员的一些内在笑话(1 OK,这就是她写的全部...),以及 身份验证(3个登陆名“ e-mail@gmail.com”“密码”)。 后一部分多是***者最感兴趣的部分。
身份验证以后,客户端和服务器都赞成使用压缩(4 COMPRESS DEFLATE)继续对话,所以消息的其他部分天然再也不是人类可读的。 可是,因为仅压缩而不加密,所以可使用简单的Linux工具使其可读
您可能已经猜到了,该方法也适用于SSL上的SMTP:在此示例中,我使用链接工具经过端口465上的邮件SMTP服务器向本身发送了一封电子邮件。与其余两个示例同样,该屏幕快照在上部控制台窗口中显示SSLsplit输出,而在下部控制台中显示会话输出。 SMTP对话显示了对Gmail服务器的幽默问候(服务时为250-mx.google.com ...),以及使用SMTP AUTH(AUTH PLAIN ...)对Thunderbird客户端的初始登陆。 而后,它将开始使用标准SMTP命令(MAIL FROM,RCPT TO等)起草邮件。一样,最有趣的部分是纯文自己份验证:因为传输是安全的,所以密码以纯文本形式发送-仅使用Base64进行编码。