“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/

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


$ openssl s_client -connect www.akamai.com:443 -cipher EXPORT
$ openssl s_client -connect www.practical-tech.com:443 -cipher EXPORT
CONNECTED(00000003)
3073706136:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 114 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

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


$ openssl s_client -connect www.nsa.gov:443 -cipher EXPORT
CONNECTED(00000003)
depth=1 C = US, O = GeoTrust Inc., CN = GeoTrust SSL CA - G4
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=Maryland/L=Fort George G Meade/O=National Security Agency/OU=Akamai SAN SSL OV/CN=www.nsa.gov
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G4
 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G4
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE1DCCA7ygAwIBAgICA8MwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMx
FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHTAbBgNVBAMTFEdlb1RydXN0IFNTTCBD
QSAtIEc0MB4XDTE1MDIwNTA1MzcwMloXDTE2MDIwODIxMTQ0MlowgZMxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhNYXJ5bGFuZDEcMBoGA1UEBxMTRm9ydCBHZW9yZ2Ug
RyBNZWFkZTEhMB8GA1UEChMYTmF0aW9uYWwgU2VjdXJpdHkgQWdlbmN5MRowGAYD
VQQLExFBa2FtYWkgU0FOIFNTTCBPVjEUMBIGA1UEAxMLd3d3Lm5zYS5nb3YwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+6hKL64sK2vBUZJHETzSlWneR
9pPTIqajXNi7tuNbwNkoCGBxMMclMhxlVUv9dTIjW45MOICkbcfxKXbEi6BAXkJR
nIpl6Afv0WEniHiK+8HdDTPV6jBH0sYRFGae0tLhD/3iayQ60PLNVyTYqw5Y9mum
GIeGaf4xh4Hz7QTwcxjUrBkA1r4+Vgo9oHus4f0y+2/28frMX153zhPzS0gWejxW
rHljY6vRmQFaPLsuy++8dn4VQiBpoZhngnEw4zDuLNUhdhoj/LMAiIT2kPBN2wsU
o5pQW4ZGRMLs8bsVdH+Az6CGGRVMmhKTGkhSv2TrX27Yda+721bnWW2NpkRPAgMB
AAGjggF+MIIBejAfBgNVHSMEGDAWgBSsMu1ayeDeMJyQWFUmY/ZyplRf4zBXBggr
BgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9ndy5zeW1jZC5jb20wJgYI
KwYBBQUHMAKGGmh0dHA6Ly9ndy5zeW1jYi5jb20vZ3cuY3J0MA4GA1UdDwEB/wQE
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwOAYDVR0RBDEwL4IJ
bS5uc2EuZ292ggx3d3cyLm5zYS5nb3aCC3d3dy5uc2EuZ292ggduc2EuZ292MCsG
A1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9ndy5zeW1jYi5jb20vZ3cuY3JsMAwGA1Ud
EwEB/wQCMAAwWgYDVR0gBFMwUTBPBgpghkgBhvhFAQc2MEEwPwYIKwYBBQUHAgEW
M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s
ZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAAtlVZNnllOkxsQolOqZMyp9FDtMnkOH6
lUyW8J9SrCgYc5hAEYjFtdeqVQhMQq5gZUguIYLGNhEKFKqnKDuqd290K+//Qohk
Qtv+TVppB5RqPDIgU+LqeLvAAFxffR9VEuxfFB5S1NnN4xiP2/JNlfxuAEkhGYGj
T455putBdHv9Ztf5ODfIg1qSWVKNOpLaS4hEqb4hYKBoFZ/cMP51soVDUFXnQHjG
2cQn8awjc4Rr6HSQdLjFpEd4it95nycBg8sE6Z5R8bg+yTPBEvk02DmOZLni64BS
1n8d9NrXpmp5UUIsCEa50d5jGmh7ZfQv3XpPyAww3ZaBh0blhAPJ9g==
-----END CERTIFICATE-----
subject=/C=US/ST=Maryland/L=Fort George G Meade/O=National Security Agency/OU=Akamai SAN SSL OV/CN=www.nsa.gov
issuer=/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G4
---
No client certificate CA names sent
---
SSL handshake has read 2961 bytes and written 248 bytes
---
New, TLSv1/SSLv3, Cipher is EXP-DES-CBC-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : EXP-DES-CBC-SHA
    Session-ID: 5159C9BEA86864513680D2999E715D900CB7E6C4210556D2A2B1E29056C52EF0
    Session-ID-ctx:
    Master-Key: F59C4DF51FAE9EA2B3211FF902F2373DFACFCCA5170EE5127F117C12948DBE4E916710439B37FD25F2B457EF37A12C2D
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - f2 92 e9 96 46 66 2a 30-c9 b3 67 71 f7 64 b3 c7   ....Ff*0..gq.d..
    0010 - 36 a3 e3 20 e0 78 3d ba-a1 7b ef 15 b0 92 49 d4   6.. .x=..{....I.
    0020 - eb 97 d9 11 15 d4 53 85-8d f1 ea c2 0b 38 ca 7f   ......S......8..
    0030 - 50 6c cc a8 28 ee 0d d7-dd e6 e4 96 1a 8c 90 a3   Pl..(...........
    0040 - 3a 16 43 d5 e4 5b 23 06-e7 43 1f ce 24 e9 cf ad   :.C..[#..C..$...
    0050 - 8b 70 97 70 29 eb f9 3c-19 33 8a b9 79 f7 e3 65   .p.p)..<.3..y..e
    0060 - b4 82 db 82 14 2a 64 ae-91 36 3e f1 56 59 ab 79   .....*d..6>.VY.y
    0070 - 2c cd 74 64 9a 31 5b 19-b6 66 ad 49 ed ad 04 26   ,.td.1[..f.I...&
    0080 - 16 24 81 af 34 5d db f6-bf 2e fc a3 3e 84 20 da   .$..4]......>. .
    0090 - 14 93 81 f9 73 6e 84 24-44 df d2 27 ba 6b 90 fb   ....sn.$D..'.k..

    Start Time: 1425712980
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---

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

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

很多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密钥,这是一个后门。

Spread the word. Share this post!

Meet The Author

C/ASM程序员

Leave Comment