如何用 Charles 抓 HTTPS 的包?其中原理和流程是什么?什么又是中间人攻击?
作者丨彭序猿
https://www.jianshu.com/p/210c296eb836
如何用 Charles 抓 HTTPS 的包?其中原理和流程是什么?
我们可以通过网络抓包,来分析网络请求和响应数据,甚至是可以修改请求或者响应来达到我们特殊的需求。在 Mac 环境下,一般使用 Charles 工具来进行网络抓包,当然 Charles 工具还提供了非常多其它实用的功能,在这里我们就只分析 Charles 是如何抓 HTTPS 的包的。
面对这个问题,我们首先需要了解 HTTP 通讯的流程,然后再引出 HTTPS 是什么,最后我们再看 Charles 工具是如何抓取 HTTPS 的包的。
HTTP 通讯过程及缺点
HTTP 超文本传输协议,是属于 TCP/IP 分层中的应用层,位于传输层之上(提供网络连接计算机之间的数据传输)。前面我们也知道,HTTP 为了快速的处理大量事务,确保协议的可伸缩性,所以设计的很简单:将 HTTP 的报文丢给传输层,利用传输层的 TCP 协议或者 UDP 协议来进行数据传输,然后再利用网络层的 IP 协议和数据链路层来进行最终的数据包传输。
这里我们主要看应用层和传输层:对于传输层,直接将应用层 HTTP 报文封装,然后直接传输,在这里不会做数据的加密,不会验证通信双方的身份,也不会校验报文的完整性。所以会导致一下问题:
1.由于通信报文是使用明文传输的,所以内容很容易被窃听。
2.由于不验证通信双方身份,这里很容易遭遇伪装(伪装服务器或者伪装客户端等),服务器也容易遭受 Dos 攻击。
3.不校验报文的完整性,会出现篡改报文信息的情况。
对于以上出现的问题,我们有必要对传输的报文做加密处理,校验报文的完整性,以及验证通信双方的身份。
HTTPS 通讯过程
对于上面 HTTP 出现的问题,我们需要定制一些机制和协议来完善:HTTP + 加密 + 认证 + 完整性保护 = HTTPS。然后就有了 SSL/TLS 协议,它处于应用层和传输层之间,在这里我们可以体会到分层的好处:可以很方便的扩展原有的功能。分层结构如下:
这里我们先不描述传输层 TCP 协议是如何进行三次握手(建立连接)和四次挥手(断开连接),我们直接描述 HTTPS 的通信流程:
1.对于报文的加密:有对称加密和非对称加密方式,HTTPS 采用混合加密机制,在交换密钥环节,使用非对称加密,在之后通信交换报文阶段则使用对称加密方式。
2.对于验证通信双方身份:使用 CA 证书来校验身份。
3.SSL 协议具有完整性校验
HTTPS 大概流程如下,详细的流程图可以参考下文末链接;
1.客户端将自己支持的加密算法发送给服务器,请求服务器证书;
2.服务器选取一组加密算法,并将证书返回给客户端;
3.客户端校验证书合法性,生成随机对称密钥,用公钥加密后发送给服务器;
4.服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成;
5.随后双方通过这个对称密钥进行安全的数据通信。
Charles 抓包原理
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析(这里类似中间人攻击)。配合 Charles 的 SSL 功能,Charles 还可以分析 HTTPS 协议。
对于如何使用 Charles 工具,可以参考这篇博客:Charles 从入门到精通
https://blog.devtang.com/2015/11/14/charles-introduction/
Charles 抓取 HTTPS 原理及流程
前面说过,HTTPS 可以有效防止中间人攻击,那 Charles 是如何抓取 HTTPS 包的呢
Charles 作为一个“中间人代理”,当浏览器和服务器通信时,Charles接收服务器的证书,但动态生成一张证书发送给浏览器,也就是说Charles作为中间代理在浏览器和服务器之间通信,所以通信的数据可以被Charles拦截并解密。由于Charles更改了证书,浏览器校验不通过会给出安全警告,必须安装Charles的证书后才能进行正常访问。
这里有个大前提,就是客户端信任了 Charles 自己制作的证书,然后导致 Charles 拿到 CA 证书和对称加密的公开密钥;这里我们简单总结下:
1.首先 Charles 假冒了客户端,拿到服务器的 CA 证书
2.然后 Charles 假冒了服务器,给客户端发送了一张自己制作的证书,客户端信任该证书
3.Charles 再次假冒服务器,拿到客户端的对称密钥
4.Charles 再次假冒客户端,将对称密钥加密发送给服务器,让服务器认为这次通信是没问题的,服务器发送成功响应
5.最后 Charles 假冒服务器将成功响应发给客户端
6.建立连接,客户端与 Charles 建立连接,Charles 与服务器建立连接(中间人攻击)
详细图文流程:浅谈Charles抓取HTTPS原理
https://www.jianshu.com/p/405f9d76f8c4
Charles 抓包,主要用的是中间人攻击。对于 HTTP 的话,可以直接抓取,但是对于 HTTPS,就需要在建立 HTTPS 连接的时候(SSL 连接),偷取证书和密钥。
iOS 面试题·什么是中间人攻击?如何避免?
中间人攻击的定义:中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
简单来说,攻击者在请求和响应传输途中,拦截并篡改内容。对于 HTTP 来说,由于设计的简单,不需要太多步骤就可以进行监听和修改报文;在这里主要是针对 HTTPS,HTTPS 使用了 SSL 加密协议,是一种非常安全的机制,目前并没有方法直接对这个协议进行攻击,一般都是在建立 SSL 连接时,利用中间人获取到 CA证书、非对称加密的公钥、对称加密的密钥;有了这些条件,就可以对请求和响应进行拦截和篡改。
中间人攻击需要截获请求响应
对于中间人攻击,有一个前提就是:需要截获到客户端与服务器通信的线路。
抓包工具一般都是用户主动将其设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
对于其它工具则是利用 DNS欺骗、ARP投毒、劫持网关等手段,将客户端的请求重定向到攻击者的机器,以便进行网络抓包。
SSL 证书欺骗攻击
SSL 证书欺骗攻击流程大概如下:
1.截获客户端与服务器通信的通道
2.然后在 SSL 建立连接的时候,进行中间人攻击
3.将自己伪装成客户端,获取到服务器真实有效的 CA 证书(非对称加密的公钥)
4.将自己伪装成服务器,获取到客服端的之后通信的密钥(对称加密的密钥)
5.有了证书和密钥就可以监听之后通信的内容了
这个避免方法就是:
客户端不要轻易信任证书
App 可以提前预埋证书在本地
SSL 剥离攻击
SSL 剥离就是将客户端的 HTTPS 请求降级成 HTTP 请求,阻止 HTTP 请求重定向成 HTTPS ,流程图如下:
中间人攻击主要是伪装身份,然后截取通信的内容,对于 HTTP 是可以很轻松的截获;但是对于 HTTPS,主要是在建立 SSL 连接的时候,骗取到证书和密钥;流程不是很复杂,但是这个里面会涉及到比较多的知识点。
这块知识我自己是比较匮乏的,也就只能做粗浅的总结,依旧,参考文献很棒棒。
参考文献
中间人攻击
https://zh.wikipedia.org/wiki/中间人攻击
MITM攻击(中间人攻击)
https://www.jianshu.com/p/a825de42ccbc
HTTPS连接过程以及中间人攻击劫持
http://netsecurity.51cto.com/art/201712/559836.htm
中间人攻击(MITM)姿势总结
https://www.cnblogs.com/LittleHann/p/3735602.html
推荐↓↓↓
长
按
关
注
?【16个技术公众号】都在这里!
涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 这本书,智利总统带到秘鲁的会见厅 7949712
- 2 一个金镯子省出1200元 金价真跌了 7966266
- 3 胖东来:员工不许靠父母买房买车 7859914
- 4 世界互联网大会有哪些新看点? 7721733
- 5 药监局:认定百雀羚不存在违规行为 7606847
- 6 医院CT等收费将执行新规 7506716
- 7 19岁孤儿被骗到郑州4天没吃没喝 7425329
- 8 29岁抗癌博主“一只羊吖”去世 7372281
- 9 搞钱色权色交易 王昊被“双开” 7296198
- 10 科技与文化融合的“赛博”水乡 7121496