最近,有关“SSL 遭到破解”的讨论甚嚣尘上。此问题主要是由 Juliano Rizzo 和 Thai Duong 二位研究员所发表的一篇文章所引起:浏览器 SSL/TLS 漏洞攻击 (简称 BEAST。如果某些报导属实的话,那么,我们所信赖的安全连线已经破功。
此问题对大多数使用者来说,听来相当复杂,所以,请容我用“一般人的话”来说明一下这项攻击。大多数的加密方法都依赖二个条件:
攻击者不晓得信息加密时所使用的金钥为何。
然而,如果攻击者有办法骗过您的浏览器,让浏览器透过 Secure Socket Layer (SSL) 连线传送一些他们已知的纯文字内容,再加上如果攻击者有办法截取到加密过的传送内容复本,那么,他们就有可能解开信息中属于纯文字的部分。虽然,截取加密过的信息并不如取得金钥来得有用,但却能让攻击者对该信息执行加密分析。
接下来,只要经过一番努力,攻击者就可解开使用者传送至安全服务器的部分内容。值得注意的是,这种手法一次只能针对一个通讯方向进行攻击。此方法有可能解开同一信息中的其他纯文字内容 (当然还有攻击者所插入的文字)。BEAST 工具套件就是利用这种方法来解开连线阶段的 Cookie,然后再用 Cookie 来挟持使用者的连线阶段。
多年来,安全专家早就知道 TLS/SSL 含有这项先天的弱点。也就是说,BEAST 工具套件并未揭露任何我们先前所不知道的秘密。它只是将这项攻击变成一种容易使用的套件,大幅减轻执行这项攻击所需的资源和技术能力。
BEAST 如何运作
很多人说这是一种中间人 (man-in-the-middle) 攻击,但它却可以轻易地透过浏览器在区域网络上发动。视网络的组态而定,网络监听工具可以安装在目标主机或在邻近的主机上。这一点在基础架构上有许多弹性。
首先第一步就是想办法将程序代码注入目前的浏览器连线阶段。这可透过内嵌式 iframe 或跨网站程序攻击 (XSS) 这类技巧来达成。注入的程序代码必须促使浏览器透过 SSL 通道将某段已知的纯文字内容传送给服务器。此外,这也能透过简单的 Javascript 来达成。在注入这段程序代码之前,攻击者还必须截取到 SSL 使用者的网络通讯内容,不论是在目标机器上执行一个网络监听程序,或者透过中间人攻击 (man-in-the-middle) 来截取通讯内容。不管怎样,在取得上述纯文字内容和加密过的信息之后,攻击者就能利用一些加密分析工具来解开其中的 Cookie。
使用者能做些什么?
尽可能缩短 SSL 连线阶段的时间。攻击者需要一些时间来解开加密过的信息。如果连线阶段 Cookie 在攻击者解开之前就已失效,攻击就无法得逞。
当您离开某个采用 SSL 保护的网站时,请记得确实执行注销,而非只是前往其他的网站。在很多情况下,只要是确实做到注销的动作,就能让 Cookie 或连线阶段资料失效,因此就算攻击者已成功解开 Cookie 也无用武之地。
传统的标准安全实务原则依然有效。因为这项攻击的成功条件之一是攻击者必须能够进入您的网络或您的电脑。至少,随时保持资讯安全软体更新,就能让骇客不易得逞。
但是,修正此问题的最终责任还是在网站系统管理员身上。系统管理员能做些什么?
确定您的注销动作确实做到预定的功能。当使用者按下“注销”时,如果您的网站未确实让连线阶段 Cookie 失效,那么使用者就会处于危险状态。
确定在连线阶段建立时将连线阶段 Cookie 与 IP 位址绑定。如果 IP 位址改变,最好再确认一次通讯请求的来源是否为原本的使用者。虽然这样的作法无法杜绝这项攻击,但可让您的使用者较不易受到利用。
在未仔细评估风险之前,别轻易改变 SSL 加密方法。没错,RC4 的确没有这类风险,但是它的风险比 AES 大得多。而且,您最好随时注意一下IETF TLS 工作小组的最新动态。
新版的 TLS 标准已经消除了这项漏洞。但很不幸地,市面上的 HTTP 服务器和浏览器尚未全面支持这些新的标准。因此,在您做这类改变之前,请务必仔细评估您的环境和您的使用者族群。