背景
大家好,我是抹茶,昨天刚研究了HTTPS的加密过程,面试的时候被问“HTTPS,如何做中间人攻击?”。整个人都呆住了,加密密钥+数字证书已经确保这个数据包被加密过,且服务器无法伪造,怎么还能做中间人攻击? 面试官给到提示,那我们做抓包的时候,是如何实现的?
从抓包工具探究如何做中间人攻击
抹茶之前常用的抓包工具是whistle
在他官方的安装教程里,有这样重要的一个步骤安装根证书
。
在安装证书的环节里,有这么一步Mac安装证书后,需要手动信任证书
。
现在的问题就演变成:
- 为什么抓包HTTPS需要安装证书,这个证书起到什么作用?
- 为何需要手动信任证书
- 抓包之后整个通信流程是怎样的
为什么抓包HTTPS需要安装证书
这个问题whistle官网并没有解释,只是告诉你要装。
但是结合上一篇HTTPS——通过加密为信息传输保驾护航可以获知,数字证书的作用验明服务器的身份。同样的,在抓包工具这里的数字证书也是用作身份验证。如果抓包工具没有数字证书,浏览器是不信任抓包工具的,也就不会和抓包工具之间进行通信。
抓包工具的数字证书是需要安装到用户电脑本地。也就是中间人拦截是发生在用户本机,需要用户手动信任,浏览器才敢放心把数据包交给抓包工具,和抓包工具进行加密解密过程,抓包工具还需要把数据发送到目标服务器,所以抓包工具还起到代理服务器的功能。
在引入抓包工具后的整个的通信链路
如上图,抓包工具实际上是起到了中间人的作用,相当于一个中介。整个的通信链路具体如下:
-
浏览器将试图将数据包发送到域名A
-
因为提前安装了抓包工具并信任了抓包工具的数字证书,在数据包到达操作系统的协议栈的时候,在抓包工具启动的情况下,会根据配置的规则列表看有没有要拦截的域名,如果域名A不在拦截列表里,直接向对应的服务器发出请求,如果在拦截列表里,抓包工具会进行拦截
-
进行拦截后,因为是用的HTTPS协议,需要进行安全层立连接。抓包工具拦截了浏览器
对称加密套件
+非对称套件列表
+client-random
信息,将选中的对称加密套件
、非对称加密套件
,tool-random随机数
、抓包工具的数字证书
一同发送给浏览器。
抓包工具佯装成浏览器,给服务器发送对称加密套件
+非对称套件列表
+tool-random
。同样的,服务器也会将选中的对称加密套件
、非对称加密套件
,service-random随机数
、服务器的数字证书
返回给抓包工具。 -
在验证抓包工具的数字证书合法后,浏览器会生成一个随机数pre-master,用抓包工具的公钥加密发送给抓包工具。抓包工具用自己的私钥解读得到pre-master。抓包工具用服务器的公钥加密后,把pre-master信息发送给服务器。
-
浏览器和抓包工具用
client-random
+tool-random
+pre-master
生成对称加密的密钥master secret1
,后续这两者用这个密钥对信息进行对称加密传输。 -
抓包工具和服务器用
tool-random
+service-random
+pre-master
生成对称加密的密钥master secret2
,后续这两者用这个密钥对信息进行对称加密传输。
以上就是在通信链路中加入抓包工具后大体的通信流程,因为抓包工具是可以和服务器建立连接,所以可以起到代理的作用,把浏览器对域名A的访问转发到域名B。
总结
- 抓包工具必须安装数字证书并得到用户的授权,浏览器才会认可抓包工具身份,与之进行安全连接。
- 抓包工具是起到中介的作用,分别和浏览器、服务器进行通信。
- 因为抓包工具可以拦截浏览器请求,所以也能支持规则配置,把浏览器对域名A的访问转发到域名B。
- 准确来说,HTTPS依旧不存在中间人攻击,抓包工具算是本授权的信息拦截,攻击应该是非授权情况下的篡改。这个问题改成在HTTPS的通信链路中,抓包工具如何做拦截的可能更好回答。