“FREAK SSL Attack”科普版(CVE-2015-0204)

FREAK是”Factoring RSA-EXPORT Key Attack”的缩写。

参看:

http://blog.cryptographyengineering.com/2015/03/attack-of-week-freak-or-factoring-nsa.html

这是个一群密码学家如何黑了NSA的故事,也是关于加密体系后门的故事。

一群来自INRIA、Microsoft Research和IMDEA的密码学家发现OpenSSL客户端(比如 Android系统)、Apple SSL/TLS客户端(比如Safari)存在某些漏洞,允许MITM攻击者 将受攻击的SSL/TLS会话所用的RSA算法更改成出口级RSA算法,后者意味着可以在可 接受的时间范围内对算法所用的模数进行素因子分解,从而最终解密SSL/TLS会话。

参看:

https://www.smacktls.com/ https://www.smacktls.com/smack.pdf

上世纪90年代SSL首次被引入Netscape的时候,美国政府仍对加密算法出口到美加以 外地区进行某些限制,其结果之一是销售到美加以外地区的Netscape浏览器只支持最 高512位的RSA算法(所谓出口级RSA算法)。512是RSA算法所用模数n的位数,这个长度 是一个折衷选择,理论上它确保NSA有能力分解n,而普通人或机构无法或不能在有效 时间内分解n,从而满足商业(相对军用)需求。

使用出口级RSA算法的Netscape浏览器访问位于美国本土的服务器时,后者必须支持 出口级RSA算法,同时又要支持来自使用正常RSA算法的Netscape浏览器的访问请求。 这要求存在一种算法协商机制,客户端向服务器报告自己支持的所有加密套件(其中 包括非对称加密算法的必要信息),服务器将之与自己所支持的加密套件求交集,再 从中选择加密强度最高的加密套件并通知客户端。

不管出于什么原因,美国政府后来取消了加密算法出口限制,最大可能是NSA拥有了 更强的计算能力或别的什么技术,可以在有效时间内分解更高位数的n。

不幸的是,历史原因带来的出口级加密套件并未消失,它们像僵尸隐藏在人群中一样。

通常我们不必担心出口级加密套件:


a. 绝大多数现代SSL/TLS客户端(比如浏览器)在进行加密套件协商时不提供出口级加密 套件,即”Client Hello”报文的”Cipher Suites”中不提供出口级加密套件。理论上 这意味着即使服务器支持出口级加密套件,你的SSL/TLS会话仍将使用强度更高的正 常加密套件。

b. “几乎”没有服务器仍在支持出口级加密套件。

c. 即使你意外地协商使用了出口级加密套件,一次有效攻击仍然要求攻击者分解512位 的n或者破解40位的对称密钥(一般认为这二者的破解难度相当)。这对普通攻击者来 说是可行的,但如果每次SSL/TLS会话都要这么来一下的话,计算量相当繁重。


理论与现实之间总是存在差距。来自INRIA、Microsoft Research和IMDEA的密码学家 开发了一个相当NB的工具,可以fuzz绝大多数现代SSL/TLS实现中的状态机,他们发 现了很多问题。

某些现代SSL/TLS客户端(包括Apple SecureTransport和OpenSSL)存在BUG,允许它们 在没有主动协商使用出口级RSA算法的前提下接受出口级RSA密钥。假设存在受影响的 客户端以及支持出口级加密套件的服务器,MITM攻击者可以强制降级二者之间SSL/TLS 会话的加密强度。

MITM攻击过程如下:


  1. “Client Hello”报文的”Cipher Suites”中只提供正常RSA加密套件

  2. MITM攻击者修改前者,转为请求出口级RSA加密套件

  3. 支持出口级加密套件的服务器响应以512位RSA密钥

  4. 存在前述BUG的客户端接受512位RSA密钥

  5. MITM攻击者对512位n进行素因子分解,最终得到RSA私钥d

  6. 客户端产生并加密pre_master_secret(用服务器的RSA公钥n+e加密),发送给服务器, MITM攻击者利用已知的d对之进行解密,最终掌握SSL/TLS会话安全的关键, master_secret

  7. 至此,MITM攻击者已经完全掌控了被攻击客户端、服务器之间的SSL/TLS会话,就如 明文嗅探、会话劫持一样,想干什么就干什么


可以看到,该漏洞实际破坏了前面的a假设,但b、c假设仍存在,我们仍是安全的, 是吗?

无论你把互联网的情况设想得多么糟,最终实际情况都比你想像的更糟。事实上b假 设是错的。

密歇根大学的研究人员最近针对互联网上1400万个提供HTTPS证书的网站进行了扫描, 其中36.7%支持出口级RSA加密套件,这些网站绝大多数位于CDN中(比如Akamai)。

数量庞大已经令人印象深刻,更令人惊异的是某些网站的性质:

www.nsa.gov www.whitehouse.gov www.irs.gov tips.fbi.gov connect.facebook.net

假设a、b都已幻灭,只剩下假设c还在保卫着我们。遗憾的是,祸这次确实单行了, 只不过单的不是1个而是3个。

生成RSA密钥是一项开销很大的操作。某些现代WWW服务器不会为每次SSL/TLS会话都 生成新的RSA密钥,比如”Apache mod_ssl”缺省在Apache启动之初生成一个出口级RSA 密钥,在Apache存活期间(直至重启)不断复用该密钥。

这意味着MITM攻击者可以获取RSA公钥(n+e)之后离线分解n直至成功,然后用于后续 所有新的SSL/TLS会话,在服务器重启之前都有效。

有人说存在漏洞并不意味着可实际利用,他们想看到PoC。幸运的是,此类攻击的POC 门槛不高。首先,你需要一个MITM攻击工具;其次,你需要拥有快速分解512位n的计 算能力;最后,你得去找存在漏洞的客户端、服务器。

INRIA的研究人员提供了PoC,他们搞了一个”MITM Proxy”。Nadia Heninger为该项目 提供分解512位n的帮助,分解一次大约需要7.5小时、104美元(这里我不太确认,因 为我没有用过EC2的服务)。

你可能认为这个漏洞影响并不大,从严格技术角度来说你可能是对的。

参看:

https://infogr.am/https_sites_that_support_rsa_export_suites

这里有一张图,对应支持出口级RSA加密套件的HTTPS站点的国家分布情况。

该漏洞有一个与之相关的CVE:

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0204

对于受影响的OpenSSL,s3_clnt.c中的ssl3_get_key_exchange()存在漏洞。受影响 的OpenSSL版本如下:

< 0.9.8zd < 1.0.0p < 1.0.1k

OpenSSL其实在2015.1.8就已经提供了升级版本修补该漏洞,就是太低调了。

参看:

https://tools.keycdn.com/freak http://www.freakattacktest.tk https://www.ssllabs.com/ssltest/

这是一批在线检测服务,检测目标网站是否支持出口级加密套件。你可以自己进行此 类检测:



如果看到”handshake failure”,表明目标网站不支持出口级加密套件。



这表明目标网站支持出口级加密套件。前面那些在线检测服务实际就做了这个操作。

注意,这个漏洞需要客户端、服务器同时受影响才有机会被利用,即使目标网站支持 出口级加密套件,只要你所使用的浏览器不存在漏洞,就不会被攻击。

很多Android系统的手机已经不被原厂商支持,或者即使支持也升级缓慢,而其中使 用的仍是受影响版本的OpenSSL。

Java的SSL/TLS同样受影响。

SMACK小组曾经提供了一个站点用于检测客户端是否存在FREAK漏洞,但它现在下线了。

参看:

https://freakattack.com/

这个网站同样检测客户端是否存在FREAK漏洞。用你的浏览器访问它,如果看到:

Good News! Your browser appears to be safe from the FREAK attack.

表明你的浏览器不受FREAK影响。如果看到:

Whoops! Your browser might be incompatible with our automatic vulnerability test. If this link loads without errors, you’re vulnerable

你需要进一步访问:

https://cve.freakattack.com/

比如”IE 9″将看到:

VULNERABLE!

表明”IE 9″受FREAK影响。

其实可以直接访问:

https://cve.freakattack.com/ https://cve2.freakattack.com/

但凡看到”VULNERABLE!”就表明客户端受FREAK影响,如果报:

安全连接失败 ssl_error_rx_unexpected_server_key_exch SSL连接出错 ERR_SSL_PROTOCOL_ERROR

反正只要报SSL错、看不到”VULNERABLE!”,就表明客户端不受FREAK影响。

简单测了一下,这些浏览器不受影响:

Firefox 36.0.1 Chrome 40.0.2214.115 IE 11

这些浏览器受影响:

IE 8/9

参看:

https://freakattack.com/clienttest.html

这个链接检测客户端是否存在FREAK漏洞的同时,会显示客户端在协商阶段提供的加 密套件(Cipher Suite)。

如果只想查看客户端在协商阶段提供的加密套件,还可以访问:

https://ciphers.freakattack.com/ https://www.fortify.net/sslcheck.html

据说Windows版的Chrome以及所有版本的Firefox均不受FREAK影响。即使你所用浏览 器本身是安全的,如果你使用了某些采用中间人劫持技术的其他软件,比如某些AV、 Adware软件,后者有可能使用了不安全的SSL/TLS客户端实现,从而将你重新带到沟 里去。因此,不要靠浏览器版本判断客户端是否受FREAK影响,而应该在线实测。

据说”Lotus Notes”曾经使用过一个768位的RSA密钥,这是一个后门。

发表评论