前言

从昨天(2020-03-26)开始,国内多地出现了无法访问启用HTTPS的Github Pages、GitHub主站、京东等站点的情况,涉及电信、移动等多个运营商。上述站点的证书都被一个未被信任的自签名的证书所替代,因此被浏览器所拦截。

错误的证书

在此事件中,攻击方仅替换了目标站点的证书,目标站点仍为实际的IP。对于此事件的具体情况,我们在这就不细谈了,有兴趣的朋友可参考网络上的相关文章。本文主要要说一下和事件相关的中间人攻击(Man-in-the-middle attack, MITM攻击)。

什么是中间人攻击

首先,我们使用一个通俗的例子介绍一下中间人攻击:

李雷喜欢班上的女同学韩梅梅,于是便写了封情书请同学转交给给韩梅梅,但是同学李狗蛋偷偷把情书的内容改成了“吔屎啦你”,于是一段美好的姻缘没来得及开始就已经结束了。

对于“李雷”而言,他所知的是情书已经给了“韩梅梅”;对于“韩梅梅”而言,她所知的是“李雷”给她一封写有“吔屎啦你”的信。这就是一个典型的中间人攻击的例子,作为被信任的中间人“李狗蛋”,他可以在“李雷”以及“韩梅梅”不知情的情况下对书信做出修改。

我们看一下维基百科中关于中间人攻击概念的说明:

中间人攻击在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。

中间人攻击

简单的说,中间人攻击就是可以在通信双方不知情的情况下,监听、拦截、修改通信的信息。当前有许多的方法可以实现通信数据的拦截,例如在目标用户终端安装病毒进行拦截等。

以HTTPS为例的中间人攻击

例如我们访问某一个使用HTTP协议的网站,通信的数据都是通过明文传输,中间人容易伪造通信的内容。HTTPS的出现使得通信的安全性大幅度提高,但是,HTTPS也不是万能的。如同本次针对GitHub等站点的攻击,攻击方替换了站点的证书,但由于该证书为自签名证书而被拦截。若攻击方替换的证书为可信的证书,作为中间人便可顺利的对通信进行控制。下面是一个针对HTTPS攻击的例子。

黑客通过一些手段在用户终端安装伪造的CA根证书并劫持了用户的DNS。用户A需要在https://www.bank.com上转账10000元至用户B的账户上,下面是转账的通信过程(简化了HTTPS的具体流程):

  1. 用户A通过https://www.bank.com域名访问中间人伪造的站点,因为本地安装了攻击方签发的伪造根证书,客户端成功验证站点的证书;
  2. 用户A提交转账请求,发送数据{ account: 'user_b', amount: 10000.00 },数据通过伪造的证书加密并提交至中间人服务器;
  3. 中间人服务器使用伪造的证书解密数据并修改为{ account: 'hacker', amount: 10000.00 },并通过真实的证书提交至银行服务器;
  4. 银行服务器通过真实证书解密数据,并将用户A的余额转账至攻击方的账户中。

通常情况下,CA在签发证书前需要验证请求方是否拥有该域名。但用户端安装了不可信的CA证书,攻击方便可通过其伪造证书。对于普通用户而言,尽可能不要安装第三方提供的根证书,避免此情况发生。

几种防御中间人攻击的方法

对于站点拥有者:

  • 使用HTTPS而非HTTP,并开启HSTS
  • 对通信的数据进行加密或校验
  • 通信延迟测试[2]

对于普通用户:

  • 安装防火墙及杀毒软件
  • 谨慎使用不熟悉的网络,尤其是开放网络
  • 谨慎访问浏览器提示证书错误的站点
  • 不随意安装证书

参考资料

  1. 中间人攻击 - Wikipedia
  2. 黎松, 段海新, 李星. 域间路由中间人攻击的实时检测系统[J]. 清华大学学报(自然科学版), 2015, 55(11): 1229-1234