面试题:有了HTTPS,如何做中间人攻击?

264 阅读4分钟

背景

大家好,我是抹茶,昨天刚研究了HTTPS的加密过程,面试的时候被问“HTTPS,如何做中间人攻击?”。整个人都呆住了,加密密钥+数字证书已经确保这个数据包被加密过,且服务器无法伪造,怎么还能做中间人攻击? 面试官给到提示,那我们做抓包的时候,是如何实现的?

从抓包工具探究如何做中间人攻击

抹茶之前常用的抓包工具是whistle

在他官方的安装教程里,有这样重要的一个步骤安装根证书

image.png

在安装证书的环节里,有这么一步Mac安装证书后,需要手动信任证书

image.png

现在的问题就演变成:

  1. 为什么抓包HTTPS需要安装证书,这个证书起到什么作用?
  2. 为何需要手动信任证书
  3. 抓包之后整个通信流程是怎样的

为什么抓包HTTPS需要安装证书

这个问题whistle官网并没有解释,只是告诉你要装。

image.png

但是结合上一篇HTTPS——通过加密为信息传输保驾护航可以获知,数字证书的作用验明服务器的身份。同样的,在抓包工具这里的数字证书也是用作身份验证。如果抓包工具没有数字证书,浏览器是不信任抓包工具的,也就不会和抓包工具之间进行通信。

抓包工具的数字证书是需要安装到用户电脑本地。也就是中间人拦截是发生在用户本机,需要用户手动信任,浏览器才敢放心把数据包交给抓包工具,和抓包工具进行加密解密过程,抓包工具还需要把数据发送到目标服务器,所以抓包工具还起到代理服务器的功能。

在引入抓包工具后的整个的通信链路

抓包工具的完整流程.png

如上图,抓包工具实际上是起到了中间人的作用,相当于一个中介。整个的通信链路具体如下:

  • 浏览器将试图将数据包发送到域名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的通信链路中,抓包工具如何做拦截的可能更好回答。