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

[图片] (图片来自:Deep Shit 9的广播 ) 据说 github 受到来自某机构的 TLS mim 攻击,请问什么是 TLS mim 攻击?…
关注者
458
被浏览
144,891

17 个回答

@Rio

的故事虽然生动,但是是有错误的。通过TLS加密通信,一旦会话初始化完成,想要完成中间人攻击是非常困难的。TLS的中间人攻击是针对加密会话的初始化阶段进行的,而不是实际通信的阶段。加密通信的初始化阶段,需要通过非对称密码算法来协商密钥,然后用协商好的密钥,使用对称加密算法进行实际的通信。

不知道各位有没有见过一种锁,当用钥匙打开这种锁之后,钥匙就可以拔出来了,剩下一个开着的锁头。拿着这个开着的锁,没有钥匙,一旦锁上了就开不了。这是现实生活这的一种非对称加密的物件,能上锁,但是不能开锁。

现在故事开始,假设我们回到了那个只能寄信的时代,大家都需要和知乎通信,而且通信的内容必须要保密。于是负责接收大家消息的

@顾惜朝

想出来一个办法,找了很多把上面说的那种锁(公钥),都用钥匙打开,挂在外面。需要和知乎通信的人,在通信之前,需要拥有另外一把有两个钥匙的锁(对称加密算法),然后把这把锁和其中一把钥匙(对称密钥),放进一个无法被破拆的铁盒子里面,用知乎提供的那把开着的锁把铁盒子锁上。

这时候,这个铁盒子就无法打开了,除了拥有钥匙的顾惜朝。这个装有一把锁和钥匙的铁盒子,可以放心地交到任何一个人手上,然后让他拿去给顾惜朝。顾惜朝拿到这个铁盒子之后,加密通信会话就建立了。她就会用钥匙打开铁盒子,取出锁和钥匙,写下“亲爱的知乎用户,你好,我是顾惜朝”小纸条,放进铁盒子里,然后用你提供的锁把铁盒子锁上,然后交回到你的手上。这个时候,铁盒子被你提供的锁锁上了,除了你和顾惜朝,没有别人有钥匙能够打开这个铁盒子,铁盒子也就可以安全地经过邮递送到你的手上;你收到铁盒子之后,用你自己的钥匙打开锁,读铁盒子里面的消息,然后放进新的小纸条,再寄送回去。

以上是加密通信的过程

接下来,别有用心的@匿名用户 出现了,偷偷地换掉了几个知乎打开放在外面的锁,并且自己充当了邮递员的身份在外面晃悠。当你需要和知乎通信的时候,匿名用户递给你一把他自己的锁,骗你说这把是知乎挂在外面的锁。当你把你自己的锁和钥匙放进去,然后交给匿名用户,麻烦他把这些送给顾惜朝的时候,匿名用户就可以找到另外一个铁盒子,装上自己的另外一把两个钥匙的锁,用真正的知乎提供的锁锁上,然后寄给顾惜朝。我们辛勤的顾惜朝依然会正常的收到一个铁盒子,里面装着一把锁和一把钥匙,只不过,这个锁已经不是你的了,而是匿名用户的,你的那把锁实际上在匿名用户手上。顾惜朝把“亲爱的知乎用户,你好,我是顾惜朝”的小纸条放进铁盒,然后让匿名用户带回去给你,而这个时候,匿名用户就可以打开这个小铁盒,偷看你们之间的消息,然后自己编造一条消息,放进铁盒里面,然后传回去给你。

以上是中间人攻击

为了避免中间人攻击,我们聪明的顾惜朝,发明了一种神奇的、无法撕毁、涂改和变造的小纸条(数字签名),上面写着“这把锁经过顾惜朝认证,是知乎加密通信专用锁”,然后在每一把知乎提供的锁上贴上,这样子匿名用户就不能伪造锁了,这时候这个锁叫作证书

但是问题又来了,许多新来的知乎用户不认识顾惜朝,他们怎么知道顾惜朝就是可信的,她认证的锁就是可用的?于是

@黄继新

在这个小纸条的下方又贴了一个小纸条,“顾惜朝经过黄继新的认证,可以对知乎加密通信专用锁进行认证”。黄继新不仅可以认证锁,还可以认证顾惜朝等管理员的权力,这时候黄继新就是CA。可是问题还没有解决,还是有很多知乎用户不认识黄继新,于是李开复又在黄继新的小纸条上又贴了一个小纸条,“黄继新经过李开复的认证,可以对知乎加密通信专用锁进行认证”。问题依然没有解决,还是有人不认识李开复,于是这时候需要一个权威的、人们无条件相信的机构来对李开复进行认证,这个机构就是根CA,他贴上去的小纸条就叫作根证书

以上是信任体系,另见《

既然这个世界没有绝对的“权威”,那么我们该相信谁?

》。

最后一个问题,TLS的中间人攻击怎么实施。这时候

@Rio

出场了,因为是知乎的工作人员,具有一个可信的证书,类似于“Rio经过黄继新的认证,可以对知乎加密通信专用锁进行认证”。于是他自己伪造了一个锁,然后利用上一级CA对他的信任,去骗取知乎用户使用他提供的锁初始化加密会话。因为他的锁上面有上一级CA的认证,所以你会认为这个锁是可信的,而实际上Rio通过自己拥有的证书,可以实施中间人攻击,窃取你和顾惜朝之间通信的内容。

以上便是TLS的中间人攻击。

手里掌握权力的人,只有道德能够防止他做坏事。

说些题外话:

中间人攻击在任何通信都会出现,但是防御中间人攻击的原则很简单是:

必须对认证过程的传输者/认证过程的本身真实性进行认证。

只有这样才能确认你的认证是完整的。

国内有些通信设备,因为加密能力不行,经常会假认证,空认证,不认证,降低设备的负载。

这时候通讯是正常的,但是其实也是MIM的一种了。