HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击

我常用的网络分析工具有:Fiddler、Charles 、whistle 、WireShark 和 Tcpdump

Fiddler,Charles,whistle 处理的网络协议集中在OSI 中的应用层,Wireshark 和 Tcpdump能捕获所有的网路流量数据,经常用户定位二进制协议的网络故障,因此不在本文的比较之列。 Fiddler和Charles分别适用于windows&macOS,都有各自优点。whistle的一个特点是跨平台,能在windows和macOS上运行,而且以MIT的协议进行开源。保持Fiddler 和Charles优点的同时,还增加了不少的特性。如果你有兴趣,可以继续往下阅读。

0x1 为什么是它?

我常用的网络分析工具有:Fiddler、Charles 、whistle 、WireShark 和 Tcpdump

Fiddler,Charles,whistle 处理的网络协议集中在OSI 中的应用层,Wireshark 和 Tcpdump 能捕获所有的网路流量数据,经常用户定位二进制协议的网络故障,因此不在本文的比较之列。 Fiddler 和 Charles 分别适用于 windows&macOS,都有各自优点。whistle 的一个特点是跨平台,能在 windows 和 macOS 上运行,而且以 MIT 的协议进行开源。保持 Fiddler 和 Charles 优点的同时,还增加了不少的特性。如果你有兴趣,可以继续往下阅读。

0x2 简介

whistle 是基于 Node 实现的跨平台 web 调试代理工具,whistle 与所有的 web 调试代理工具一样,主要功能是用于查看、修改 HTTP、HTTPS、Websockt 的请求响应或者作为 HTTP 代理服务器,但不同于 Fildder+Willow、Charles 通过断点的方式修改请求响应,whistle 采用的是一种类似配置 Hosts 方式,通过配置修改请求响应数据,并且提供规则分组功能及通过域名、路径、正则三种匹配方式,特别的,针对终端调试提供了 weinre,log 等功能,并支持通过 Node 模块进行扩展。

0x3 抓包原理 Man-in-the-middle

Man-in-the-middle(中间人,简称为 MITM),能够与网络通讯两端分别创建连接,交换其收到的数据,使得通讯两端都认为自己直接与对方对话,事实上整个会话都被中间人所控制。简而言之,在真正的服务端看来,中间人是客户端;而真正的客户端会认为中间人是服务端。

实现中间人攻击有各种各样的手段,这里不展开讨论。一些常见的 HTTP/HTTPS 抓包调试工具,都是通过创建本地 Proxy 服务,再修改浏览器 Proxy 设置来达到拦截流量的目的,他们的工作原理与中间人攻击一致。我用过的这一类工具有:Fiddler、Charles 和 whistle。

本文主要讨论 HTTPS 中间人,简单示意如下:

Server <---> Local Proxy <---> Browser         ^                 ^       HTTPS(1)          HTTPS(2)

上述 HTTPS(1) 连接,是中间人冒充客户端,与服务端建立的连接,由于 HTTPS 服务端一般不认证客户端身份,这一步通常没有问题。而对于 HTTPS(2) 连接来说,中间人想要冒充服务端,必须拥有对应域名的证书私钥,而攻击者要拿到私钥,只能通过这些手段:1)去网站服务器上拿;2)从 CA 处签发证书;3)自己签发证书。

要防范前两点,需要网站做好各个方面的安全防护,从主机安全到网站安全(避免私钥被盗),从域名解析安全到域名邮箱安全(避免攻击者重签证书)。而攻击者自己签发的证书,无法通过系统内置根证书的验证,默认无法用于中间人攻击。

对于 whistle 这一类调试工具来说,能够解密 HTTPS 流量的关键在于他们会往系统受信任的根证书列表导入自己的证书,这样他们的自签证书就能被浏览器信任。进入 whistle 设置中的「HTTPS」Tab,勾选相关功能后,就可以顺利解密和修改 HTTPS 流量。这时在浏览器中可以看到这样的证书链:

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第1张图片HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第2张图片

0x4 快速开始

  1. 安装 node
npm install -g node
  1. 安装 whistle
npm install -g whistle
  1. 启动 whistle
w2 startwhistle 默认端口为 8899,如果要修改端口号,可以这么启动:w2 start -p 8888重启 whistle:w2 restart关闭 whistle:w2 stop更多内容请查看命令行帮助:w2 help
  1. 配置代理
whistle 需要手动配置浏览器代理或者系统代理(代理的 ip 为 whistle 所在机器的 ip,如果是本机就填 127.0.0.1;端口号为启动时设置的端口号,默认为 8899),这里我们使用 chrome 的代理插件(SwitchyOmega)

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第3张图片

  1. 信任证书使得能够解密 https 流量
根据上面提到的原理,我们需要下载根证书,并且信任它,从来实现中间人攻击进行代理网络请求,从而实现我们的捕获数据解密

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第4张图片

0x5 开始使用

在浏览器中输入 http://127.0.0.1:8899/#network 后,可以看到下面的界面

主要分为三个部分:

  • 菜单栏,包括网络数据的导入导出通常都为 text 或者 saz 格式,后者是兼容 fiddler 的导入导出

  • 主要内容,在这里面展示了我们发出的 Http(s)请求,每一个条目都包含了

  • - Result: RFC2616 StatusCode

  • Method: RFC2616 Method

  • Protocal: Http(s) | ws(s)

  • 点击主要内容中的任一个条目,在右侧会显示对应条目的请求和响应HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第5张图片

0x6 场景一:捕获手机的网络数据包

如果我们需要在手机上对 app 进行抓包,那么同样的需要手机信任中间人生成的证书,在 safari 中打开地址 http://192.168.0.4:8899 这个地址,找到 https 选项,下载根证书并且信任它。 需要注意的是请确保你的电脑和手机处于同一个局域网。设置完成后,在手机上访问因特网的流量都会被安装在电脑上的 wistle 接管。所有的 Http(s)流量在这个工具下一览无余。你可以尽情发挥你的想象力,去做那些富有创意的事情。祝你好运

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第6张图片HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第7张图片

0x7 场景二 : 调式 websocket 网络流量

除了基本的 HTTP 协议的流量检测,同时还支持websocket协议,在浏览器中打开ws 测试网站,并发送一些文本消息.

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第8张图片

然后回到最开始的流量监测 tab 页面,查看右侧的 Frames,你会发现你刚刚发生的消息在这里全部显示出来了。HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第9张图片

0x8 场景三: 重放数据

选中左侧条目,拖动到右侧,然后就可以在右边红色方框中看到选中数据包的详情,我们可以在 Composer 菜单项中修改请求体,对改次请求就行重放。这个方法常用于软件开发过程中的网络接口调试使用,尤其在操作路径很长的场景中,有了这个工具,我们可以很便捷的从中间步骤开始测试,而不是一次失败后,全部重新开始。某些情况下,还可以辅助系统测试专家对网站安全进行测试评估,通过修改参数的方式,验证网站的安全性。HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第10张图片

0x9 场景四: 在线页面注入调式

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第11张图片

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第12张图片

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击_第13张图片

0xa 更多资源 https://cvbox.org

  • https://github.com/avwo/whistle#documentation

  • https://imququ.com/post/how-to-decrypt-https.html

  • https://tools.ietf.org/html/rfc2616#page-36

  • https://tools.ietf.org/html/rfc6455

阅读全文: http://gitbook.cn/gitchat/activity/5da7253395a37511193a0e33

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

你可能感兴趣的:(HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击)