您的位置:首页 > 业界新闻

SSL/TLS的原理以及互联网究竟是如何工作的(4)—中间人攻击,当心!

2015-01-12 10:12 246 查看
我:话说上次请TLS老兄来讲述了TLS协议到底是怎么一回事,最后提到了中间人攻击,那么......

TLS:别废话了,现在开始!首先我想要进行补充,我还有一个兄弟叫做DTLS(数据报传输层安全协议),他是基于不可靠的UDP协议工作的,成功结合了TCP和UDP的优点,但是更加复杂,具体原理是......

我:T!L!S!你能别跑题吗?上次你讲的那么高深莫测,很多人都听得晕晕乎乎的呢,这次又想介绍一个更复杂的?STOP!上次说好这次讲述中间人攻击原理的!还有,不要打断我的话!

TLS:我说,我已经说得尽可能浅显了,要知道计算机领域的很多概念根本就无法类比到现实生活中去,如果硬要进行类比会严重扭曲原意的,所以我只能平铺直叙了。再说了,比起那一百多页的RFC文档,我已经说得很简单了好吧?

我:你能别提那份文档了吗?我花了半个晚上才勉强啃了30页,后来实在是坚持不下去了,吐血级体验啊!行了,言归正传吧,能开始说中间人攻击了吗?

TLS:OK!上次聊我的原理的时候我特别强调了一定要有服务端身份验证过程(客户端身份验证过程是可选的,可有可无),那么为什么一定要有这一过程呢?

其实很简单,假设没有这一过程,那么一个恶意的第三方就可以在握手时截取通信数据,对于用户,假装成服务器;对于服务器,假装成用户。当第三方成功插入用户和服务器之间时,加密就形同虚设了,第三方可以轻易解密所有通信数据,此时解密密钥在第三方手里呢:第三方先假装成服务器与客户端完成handshake,拿到会话金钥,同时假装成客户端与服务器完成handshake,就像一个代理服务器一样代理了所有通信数据,而且客户端还根本察觉不到第三方的存在,看起来通信过程是正常的。

我:那么第三方要怎样才能插入用户和服务器之间呢?

TLS:方法太多了:

首先你的数据要经过N个路由器的中转才能到达目标网站服务器,第三方随便就能伪装成路由器或者直接在路由器上做手脚将你的数据导向他们的陷阱服务器,局域网的网关也一样;

还有就是在DNS上动手脚了:例如你要连接到www.github.com,如果用的是天朝流氓ISP的域名解析服务器,那些走狗ISP们完全可以将域名解析服务器上github网站域名对应的IP地址给篡改为陷阱服务器的IP地址,会发生什么就不用我说了;就算你使用国外的域名解析服务器,当域名解析请求跨越GFW时GFW马上会知道你要干嘛,然后抢在那个域名解析服务器响应之前伪造域名解析结果并发送回来,然后也不用我说了。

对了,提到这一点,顺便说一下GFW这半年来的“壮举”:

1,2013-01-25 大规模中间人攻击 GitHub 网站

2,2014-09-01 大规模中间人攻击 Google 网站

3,2014-10 部分 IPv6 隧道服务器中间人攻击 Google 网站

4, 2014-09-30 大规模中间人攻击 Yahoo 网站

5,2014-10-02 大规模中间人攻击 Microsoft 网站

6,2014-10-08 部分教育网 IPv6 和隧道服务器中间人攻击 Facebook 网站

7, 2014-10-18 大规模中间人攻击 Apple iCloud 网站

(咳咳,第一次已经是将近两年前了)

我:天啊!对了,GFW是怎么对付基于证书的身份认证机制的呢?

TLS:伪造证书啊!这道理就跟用假***去冒充别人是一样的啊!不过基于数字证书的身份认证机制是极为严格的,认证时要比对拥有者·颁发者·有效期·主机名·公钥这些信息,一旦发现符合这些情况就会中止连接:

1,根证书不被客户端所信任(准确来说有两种情况:1,目标网站直接采取根证书作为***明,客户端发现这一根证书不在信任列表当中,就会拒绝连接;2,目标网站的证书是被某个根证书所信任的,客户端发现这一证书本身和它所对应的根证书都不在信任列表当中,就会拒绝连接。证书之间的信任关系是怎么回事呢?具体看这里[9])

2,证书本身已经无效了(拥有者·颁发者·有效期·主机名·公钥这些信息至少其中之一对不上)

3,证书的common name (CN)无法匹配上Domain Name Server

这么说吧,基本上没有哪个第三方能过得了证书认证这一关的,但这一关最薄弱的环节其实是......你猜!

我:我上哪知道去?嗯,客户端?

TLS:接近了,准确来说有两个环节很薄弱:浏览器和用户。浏览器本身的认证机制要是出问题了,那么身份认证就完全废了。三大主流浏览器(firefox,chrome,IE)倒是一直都做得不错,但那些国产浏览器,哈哈,你懂的!尤其是360浏览器,还自吹“安全”呢,结果随便一个自签发的证书就把这货耍得团团转!

还有一个薄弱环节就是用户了,这也是最薄弱的环节:很多用户(尤其是小白用户)都根本不知道浏览器弹出的“目标网站证书有问题,是否继续连接?”这一提示意味着什么,通常都会直接选择继续,然后......那个恶意的证书就被添加到信任列表里了,也就是说攻击者下次还是能攻击成功的,而且再也没有提示了。如果是恶意的根证书,那就更糟糕了:攻击者得逞之后可以继续***一堆不同网站的证书,这些证书都是被那个恶意根证书所信任的,那么用户下次就会被毫无察觉的中间人攻击了(因为那个恶意的根证书被信任了,那么那些被恶意根证书信任的证书也被浏览器自动信任了,即使是把那些证书放到不信任列表之中都没有用!)

我:看来一旦根证书出问题,后果会相当严重。

TLS:没错。那些小白用户使得基于证书的身份认证机制几乎废掉了,但除此之外,网站根本没有其他更好的选择:其他身份认证机制还有很多,但要么用户不友好,要么不适合网站这种几乎面对着无限的不知道身份的用户的情况,所以还是得继续使用基于证书的身份认证机制(我有空会介绍其他的身份认证机制的)。

所以浏览器们吸取教训了,现在三大主流浏览器在碰到自签发的证书时都不允许用户继续连接了,而且由原先的弹出窗口变成了全屏警告,强制用户看完相关警告信息。(当然,国产浏览器除外)

我:我记得这些年天朝自己颁发了一堆证书,而且最早那个CNNIC Root被firefox默认信任之后还引发了一场大争论......

TLS:Mozilla和微软都是混蛋!他们根本就不明白,默认信任了CNNIC Root意味着什么!看看这半年GFW疯狂发起的中间人攻击吧!

GFW只要***一堆被CNNIC Root信任的伪造证书,就可以对任意HTTPS网站发起中间人攻击,而且大部分人都察觉不到!大部分人都不会去修改默认的证书信任列表,那么被CNNIC Root所信任的伪造证书就会自动被浏览器信任!同样道理,其他所有证书都是不能信的(包括那个12306的自签发根证书,根证书还不肯去CA申请一个,一定要自签发,明摆着有鬼!还有那些网银证书也是,去申请一个证书能花几个钱啊?怎么一个个都自签发呢?)!

我:看来现状很糟糕啊。

TLS:是啊。不过好在有人特别***了自动除去所有共匪证书的程序,看这里。对了,中间人攻击并不是只有伪造证书这一种的,还有一些更高级的,例如利用漏洞强制把HTTPS连接变成HTTP,以及强制把TLS降级为古老的SSL3.0再进行攻击的Poodle Attack。就在今年4月的时候OPENSSL还爆出了迄今为止最大的漏洞呢:“心脏出血”。这个漏洞是心跳协议扩展的漏洞,而要聊心跳协议就一定要和DTLS放在一起聊,所以我一开始才想介绍DTLS的......

我:STOP!下次再聊吧!

TLS:OK!下次还是......

我:我说TLS,你能给其他协议们出场机会吗?

TLS:(愤怒)OK!随你便!反正以后上HTTPS网站时,不要忘了是谁在保护你!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: