news view

根据 V2EX 社区帖子, GitHub 在国内遭受大规模中间人攻击.

什么是中间人攻击? 如何防范?

什么是中间人

在用户与服务器之间的任何层, 都可以称为中间人. 包括但不仅限于:

攻击目的

  1. 阻断沟通.
  2. 伪造身份.

大多数中间人攻击都是为了伪造身份, 比如攻击者不是银行, 伪装成银行与客户进行沟通 以套取密码.

如何进行

  1. 直接劫持并替换数据包.
  2. 通过 DNS spoofing.
  3. 阻断数据包.

什么是 DNS spoofing?

https://en.wikipedia.org/wiki/DNS_spoofing https://www.cloudflare.com/learning/dns/dns-cache-poisoning/

我们经常遇到这种 DNS 攻击, 如何识别与防范以后单独写一下.

如何防范

  1. 本地客户端对等加密.
  2. 传输层加密.

本地客户端对等加密 比较简单, 应用范围有限, 目的是为了防止中间人直接获取有效信息, 提高难度.

什么是本地客户端对等加密? 比如本地向服务器传输 123 这个字符串, 但不直接传输, 而是与服务器端沟通好, 以 ! 代表 1, @ 代表 2, # 代表 3, 实际传输 !@#. 这样, 如果中间人不知道二者的加解密方法, 则无法获取有效信息.

但这种方法有很大局限性, 比如如何保证中间人不知情? 加解密方法不能通过中间人网络. 前期沟通成本高.

为了解决上述问题, 更常用的是传输层加密, 比如 HTTP over TLS, 也就是我们说的 HTTPS.

有人会问, TLS 与 SSL 是什么关系? 调侃地说: 就像 ECMAScript 与 JavaScript 的关系. 中文维基百科上有一句话: “IETF将SSL进行标准化,1999年公布第一版TLS标准文件”.

TLS 是如何防范伪造身份为目的的中间人攻击呢?

  1. 客户端发给服务器端本地可用的加密方法.
  2. 服务器端看一下自己能使用哪一种, 然后告诉客户端用什么方法加密和公钥证书.
  3. 客户端此时判断服务器的公钥证书是否可信. 证书是由第三方发放的, 如果客户端认为 该第三方可信, 即证书颁发者在自己的可信根内, 则认为服务器可信.
  4. 客户端与服务器端建立有效连接.

如果想进一步知道, 客户端与服务器端如何建立有效连接, 服务器如何信任客户端, 请看:

  1. 客户端根据公钥加密一个随机数据, 发给服务器端.
  2. 服务器端解密后得到这个随机数据.
  3. 此时双方都获得了这个随机数据, 然后双方利用这个随机数据再次对等加密收发数据.

详细的 TLS 细节请看: https://en.wikipedia.org/wiki/Transport_Layer_Security#Protocol_details

相关新闻

https://v2ex.com/t/656394 https://www.cnbeta.com/articles/tech/960295.htm

- network-security