VPN提供商能截获HTTPS的信息吗?

关注者
802
被浏览
94,130

26 个回答

谢邀,先说结论:在基础设施没有漏洞合理操作的前提下不能


(国内用户另说,见文末)

长文预警!
========

要说能否截取HTTPS的明文信息,就要从HTTPS的原理说起了。

所谓HTTPS协议,其实是指HTTP和TLS两种协议的结合。严格来说,HTTPS并不能算是一种协议,而应该被看做是HTTP协议在TLS协议之上,使用TLS加密的结果,即:信息仍然采用HTTP协议编码,但在传递时会由TLS协议来加密,从而达到避免窃听和中间人攻击的目的。

那么题主实际上想要问的问题是:假设掌握了TLS加密后的密文,是否存在没有密匙而获取明文的方法?

针对这个问题,我们从密码学的历史看起。首先要说的一点是,密码学(cryptography)和密码(password)是两个完全不同的概念。密码学指的是隐秘的传送信息的方法,而常说的“密码”则指的是用来认证身份的密匙。

据说,在公元前480年希腊人对波斯人的战争时,斯巴达的司令曾派人给前线送去这样一条腰带:
KGDEINPKLRIJLFGOKLMNISOJNTVWG
指挥官拿到后,将其缠在一条木棍上,得到了明文"Kill King",如下:
KGDEINPKLRIJLFGOKLMNISOJNTVWG
斯巴达人虽然在这次战争中失败了,但这次战争中却出现了人类历史上第一次的加密。从此以后,在不断增多的秘密通讯需求的推动下,加密装置不断地增强,发展到第二次世界大战中的“迷”,成为了机械式加密装置的巅峰。

在这之后,由于计算机技术的不断发展,更加复杂的加密方式变得可能,而更加强大的破解能力也在不断被实现。同时,由于网络链路的复杂性,任何一个环节被监听都可能导致信息的泄露,而双方也不可能预先约定一个密匙。这使得加密算法必须做到在算法被公开的情况下依然不能被破译。RSA算法,TLS协议中使用的一个算法,就做到了这一点。

RSA算法是公开密匙加密算法中的一种。在这样的算法中,每个用户拥有两个密匙:公匙和私匙。公匙是公开的,而私匙则不公开。这两个密匙数学上相互关联,但由公匙计算出私匙则几乎不可能。用公匙加密的信息可以由对应的私匙解密。这样,在用户使用网站时,网站与用户只需相互交换公匙,并用对方的公匙加密信息,就可以保证信息只有对方可以解密。破解RSA算法依赖于高效率的大数质因数分解,而目前尚没有有效的算法可以做到这一点。因此,在密匙长度足够的情况下,可以认为由RSA算法加密的信息是绝对安全的。

但是仍然存在一个问题:我们虽然确认了这个信息是由某一公匙加密的,但却不能确定这一公匙对应者的身份。如果有人在信息传递的中途拦截了这些信息,并用他自己的公匙来替换了双方的公匙,他就完成了一次中间人攻击(man-in-the-middle attack)。1586年,被伊丽莎白女王监禁的玛丽女王收获了安东尼·贝平顿的秘密信件,得知了他们秘密营救玛丽并刺杀伊丽莎白的计划。他们的信件中使用了密码,但却被当时的英格兰大臣华兴翰所截获,复制,由菲力普·马尼斯破解。在破解后,他们由模仿玛丽的笔记引诱安东尼行动,一举抓获叛逆者。由此可见中间人攻击的危害,不仅会导致信息的泄露,更会导致内容被替换,从而造成更大的损失。

为了解决这个问题,我们引入了信任链这一概念。简单地说,数字证书认证机构(CA),负责审核身份,并且对公匙做数字签名,再生成一个证书。数字签名技术同样采用RSA算法,我们只需拥有CA的公匙,就能够确认这条信息是由CA的私匙加密,从而保证了CA所生成的证书是由CA担保的。也就是说,CA替用户完成了审核身份的工作。用户只需要信任CA的公匙,就能够信任由这个CA所颁发的所有证书的身份,从而避免了上述信息交换过程中,有第三方替换了证书来进行中间人攻击的可能性。

可以看到,这一套系统中,我们做到了从两者初次交换信息开始,所有的交换(公匙,密文)都公开可见,然而攻击者仍然不能破译出明文。这一点为现代的互联网提供了极大的方便,使得用户可以方便的建立可信任的连接。

回到VPN的问题上来,虽然VPN提供者有浏览所有信息的浏览的能力,也有替换其中信息的能力,由于我们使用了信任链和公匙加密系统,他既不能查看信息的明文,也不能对明文进行替换。

那么可能的问题有哪些呢?

1. 基础设施的漏洞
假如说,用户在收到信息时,并没有进行有效的身份认证,而是选择了直接信任这一信息,就能使攻击者可以采取任意的密匙来伪造身份。这一点的例子就是前段时间著名的"Goto fail"。假如VPN的所有者掌握了这样的漏洞,就可以伪造自己的身份,从而监听甚至伪造信息。

2.不合理的操作
由信任链的结构可以看出,信任一个证书,就是选择了信任这个证书所代表的机构认证的任何证书。如果VPN的所有者诱导用户在自己的设备上信任了自己的CA,那么他只需要由这个CA颁发给自己一个证书,就可以做到伪造身份了。

下面是私货夹带时间
===============

很不幸,在国内,基本上所有的用户都很危险

为什么,因为在你安装支付宝安全插件的时候,它已经自动帮你信任了一个它自己的CA证书了。或许支付宝认为没有什么别的机构有资格认证它的身份,那支付宝又有什么资格认证其他机构的身份,认证Windows更新,认证驱动程序,认证文件加密?而这个CA证书,能做的远远不止这些。

或许你觉得我们应该信任支付宝,但是:
  1. 任何一个多余的证书都是潜在的安全威胁。如果这个证书的私匙被泄露了怎么办?如果支付宝的这个证书被用于认证除了支付宝以外的其他网站怎么办?这一点直接否定了CA存在的意义:帮助用户完成身份的审核。
  2. 对不起,我不信任一个会转发我所有流量的互联网公司。(详见为什么 Alipay 的安全插件要从 Windows 底层转发几乎所有 TCP 流量? - 网络安全
以上。
v1.2更新

使用VPN,使用无密码WI-FI等均是截获传输层数据,此问题等价于截获所有传输层数据能否破解应用层加密。

HTTPS设计目的在于应用层的端对端加密,从设计目的上来讲,HTTPS不受VPN、无密码WIFI等不安全链路的影响,链路层只能截断数据交互而不能破译。

理论归理论,实际归实际。讨论一下实际上有可能的攻击方法。
  1. 将HTTPS强行降为HTTP,并利用SSLTRIP等进行中间人攻击。目前可行的防范方法是使用HTTP Strict Transport Security,新版浏览器中均有hstspreload.appspot.com,一定程度上可以防止这类攻击。同时,HTTPS Everywhere也不失为一个好的方法。对于SSLTRIP只要细心一点很容易可以发现。
  2. 将加密协议降为旧版,如使用不安全的SSLv3协议等。此类攻击一般在最新的客户端中无效,各大浏览器都会禁用公开的不安全协议,但是不排除政府等有能力破解商业上未能完全破解的协议。
  3. 软件实现的漏洞,包括软件实现本身的漏洞,如心脏出血漏洞,和软件实现密码协议中不安全的漏洞,如随机数可以被预测,RSA中使用相差不大的两个素数,使用一个太小的素数,多组RSA密钥公用n等,都可能导致通讯被完全破解。这种漏洞对个人而言没有太好的防范方法,主要取决的服务商是否良好的配置了加密和软件是否有良好的实现。
  4. CDN与后端服务器的不安全通讯。FBI曾经利用此方法攻击Google的SSL加密通讯。这是一个值得重视的问题,由于很多CDN需要解密HTTPS通讯,导致此类攻击具有现实意义。此类方法也只是取决于服务商的安全规范,与是否使用VPN无关。
  5. 证书信任链问题,BLUECOAT等专门用于监听的证书可能会成功进行中间人攻击。包括CNNIC和支付宝,各大银行根证书都有严重的信任链问题。使用任何会添加根证书的软件请使用虚拟机。测试Burp对所有现有HSTS包括Google、Wikipedia、Facebook都可以完美截获,没有任何异常提示,除非手动点开证书链,这个一般人都不会这么做。针对信任根问题,新的解决方法是使用developer.mozilla.org/e,但是目前并没有部署,Google主页并没有,Facebook主页仅有Public-Key-Pins-Report-Only但是并没有Pinning,需要等待大规模部署。
至于量子计算机,个人认为目前还不太可能实现。相反,寻找协议的不安全实现容易得多。

VPN更多是只是能截获通讯,但是想要破解,如果你不是什么重要人物的话,估计没有人会这么做。你只要保证破解的成本高于获益,你就处于相对安全的地位了。

2016.06.02 00:45 v1.1
2016.06.02 13:36 v1.2