HTTPS与中间人攻击

为什么需要HTTPS?

HTTPS的产生是为了解决HTTP明文传输不安全的问题的。HTTP 比较严重的缺点就是不安全:

  • 通信使用明文(不加密),内容可能会被窃听。
  • 不验证通信方的身份,因此有可能遭遇伪装。
  • 无法证明报文的完整性,所以有可能已遭篡改。

什么是HTTPS?

HTTPS在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

  • 信息加密:交互信息无法被窃取
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示
  • 身份证书:证明你访问的网站就是你想访问的网站

HTTPS如何工作?

HTTPS基于HTTP协议,所以先要进行HTTP三次握手建立HTTP连接。之后进行TLS四次握手建立TLS连接。

HTTPS在身份验证阶段采用非对称加密,在数据传输阶段采用对称加密。因此在TLS四次握手阶段,采用非对称加密RSA算法。

如图所示,p/q为一对密钥,经过p加密的密文通过q进行解密。反之亦然。

step1、客户端发送client Hello报文,内含客户端支持的TLS版本,加密套件,第1随机数

step2、服务器端发送Server Hello报文,内含确认使用的TLS版本,加密套件,第2随机数。并且附带服务器证书

step3、客户端验证服务器证书,并且提取出服务器公钥,生成第3随机数pre_master_key,采用服务器公钥加密,发送到服务端。同时,客户端计算三个随机数得到会话密钥,同时将迄今为止的通信内容生成一个摘要,通过会话密钥加密后发送给服务器进行校验。

step4、服务端使用服务器私钥解密得到第3随机数pre_master_key,并通过同样算法得到会话密钥,同时也生成摘要发送给客户端进行校验。

身份验证阶段结束后,此后采用会话密钥进行对称加密传输数据。


Q&A

Q:什么是服务器证书?

A:所谓的服务器证书,即经过CA私钥加密服务器公钥后形成的数字签名+服务器公钥。(加密细节此处不深究)

Q:为什么需要CA机构的介入?

A:CA(certificate authority)机构是进行验证服务器的真伪,CA机构将CA公钥内置在操作系统、浏览器,之后用公钥解密服务器发来的服务器证书验证合法性。验证合法后,就可以从中提取出服务器公钥

如何对HTTPS进行中间人攻击?

从中间人攻击原理图可以看出,进行中间人攻击的关键点只有两个:

  • MITM Server如何伪装成真正的Server;
  • MITM Client如何伪装成真正的Client。

关于第二点,由于大部分服务器不会检验客户端(可能只有网银这类会),所以我们不关注。

关于第一点,可以先分析一下如果正常MITM的流程是怎么样的。以访问baidu.com为例。

MITM Server的处理方式是从第一个SSL/TLS握手包Client Hello中提取出域名www.baidu.com,利用应用内置的CA证书创建www.baidu.com域名的公钥和私钥。创建的公钥证书在SSL/TLS握手的过程中发给Client,Client收到公钥证书后会由系统会对此证书进行校验,判断是否是百度公司持有的证书,但很明显这个证书是抓包工具伪造的。为了能够让系统校验公钥证书时认为证书是真实有效的,我们需要将抓包应用内置的CA证书手动安装到系统中,所以HTTPS抓包一定要先安装CA证书。因此只要系统层面信任MTIM工具证书即可。

细节梳理如下:

创建密钥对: MITM服务器首先生成一对密钥,包括公钥和私钥。这对密钥是用于加密和解密通信的。
生成证书签名请求(CSR): 利用生成的密钥对,MITM服务器创建一个证书签名请求(CSR)。CSR包含有关目标域名(例如www.baidu.com)以及其他相关信息的请求。
伪造证书: MITM服务器使用自己的私钥对CSR进行签名,生成一个伪造的证书。这个证书包含了目标域名和与之相关联的MITM服务器生成的公钥。值得注意的是,这个证书并未经过任何受信任的证书颁发机构签发,而是由MITM服务器自行签署的。
建立连接: 当客户端尝试连接到目标域名(例如www.baidu.com)时,MITM服务器将伪造的证书发送给客户端,作为SSL/TLS握手的一部分。
客户端校验证书: 客户端操作系统会尝试验证接收到的证书的合法性。由于证书是由MITM服务器伪造的,正常情况下客户端会产生证书错误。
安装CA证书: 为了绕过证书错误,用户需要手动将MITM工具内置的CA证书安装到操作系统中。这样,系统就会将MITM工具标记为一个受信任的证书颁发机构。
建立加密通信: 一旦客户端信任MITM服务器的伪造证书,SSL/TLS握手成功,加密通信随即建立。MITM服务器能够解密和查看加密的HTTPS通信。

此时,TLS四次握手流程如下:

step1、客户端发送client Hello报文,内含客户端支持的TLS版本,加密套件,第1随机数

step2、MITM服务器端发送Server Hello报文,内含确认使用的TLS版本,加密套件,第2随机数。并且附带服务器证书。此时服务器证书由MITM服务器通过自己生成的私钥加密,同时公钥内容为MTIM服务器自己的公钥。

step3、客户端验证服务器证书,由于在系统层面信任MITM服务器的CA证书,此时验证通过。并且提取出服务器公钥,生成第3随机数pre_master_key,采用服务器公钥加密,发送到服务端。同时,客户端计算三个随机数得到会话密钥,同时将迄今为止的通信内容生成一个摘要,通过会话密钥加密后发送给服务器进行校验。

step4、服务端使用服务器私钥解密得到第3随机数pre_master_key,并通过同样算法得到会话密钥,同时也生成摘要发送给客户端进行校验。

身份验证阶段结束后,此后采用会话密钥进行对称加密传输数据。

这也是抓包练习第一步安装CA证书并信任的原因。


Q&A

Q:安卓用户如何安装CA证书进行抓包?

A:安卓用ios的区别是,安卓是不信任用户级证书的,需要root。

updatedupdated2024-01-212024-01-21