è¯éºãªãå æ°å解:FREAKæ»æã®ä»çµã¿
1. ã¯ããã«
ã¡ããã©ä»æ OpenSSLãã¯ããã¨ããæ§ã
ãªTLSå®è£
ã®èå¼±æ§ã®è©³ç´°ãå
¬è¡¨ããã¾ããã
ãã®ã°ã«ã¼ãã¯ãTLSã®ãã³ãã·ã§ã¤ã¯æã®ç¶æ é·ç§»ãå³å¯ã«ãã§ãã¯ãããã¼ã«ãéçºããæ§ã ãªTLSå®è£ ã®èå¼±æ§ãçºè¦ã»å ±åãè¡ã£ã¦ããããã§ãã
ç¹ã«FREAKã¨å¼ã°ããOpenSSLã®èå¼±æ§(CVE-2015-0204)ã«é¢ãã¦ã¯ãã¡ããã©ä¿®æ£ç´å¾ã®1æåãã«
Only allow ephemeral RSA keys in export ciphersuites
ã§è¦ã¦ãã¾ããããå ·ä½çã«ã©ã®ããã«æ»æããã®ããã£ã±ãã¤ã¡ã¼ã¸ã§ããããã®ã°ã«ã¼ãã ããã¾ãè¶ çµ¶å¤æ ãªææ³ã ããããã¾ãããã»ã©æ·±å»ãããªãã ããã¨è¦è¾¼ãã§ãã¾ããã
ä»åããã®è©³ç´°ãè«æã§çºè¡¨ããã¾ãããããããå ±åããã¦ãã¾ãããèªåã§æ»æææ³ãè¦ã¤ããããªãã£ãåçãè¸ã¾ããFREAKã«ã¤ãã¦å°ã解説ãã¦ã¿ããã¨æãã¾ãã
ã¾ãã¯èå¼±æ§ã®èæ¯ããã
2. æã ã®ç±³å½æå·è¼¸åºè¦å¶ã¨SSL
ãã®æãå½å®¶å®å
¨ä¿éä¸ã®çç±ã§æããæå·æè¡ãæå·ã使ã£ã製åãªã©ã®å©ç¨ãæã¡åºãã¯åå½ã§è¦å¶ããã¦ãã¾ããã Phil ZimmermannãPGPã®ã³ã¼ããæ¸ç±åãã¦åæ³çã«ç±³å½å¤ã«æã¡åºãããã¨ã¯æåãªè©±ã§ããSSLãè¦å¶ã®å¯¾è±¡ã§90年代å¾åã¯ãæ¥æ¬ããã¯ä½å¼·åº¦ã®æå·(40bitã56bit)ãã使ããªãç±³å½è¼¸åºçã®ãã©ã¦ã¶ã¼ããã¦ã³ãã¼ãããããå¶éããã¦ããããåç¨OSãã¢ããªçã¯ãé«å¼·åº¦å¯¾å¿ã®æå·ã©ã¤ãã©ãªãåé¤ããããã®ãã使ããªãç¶æ³ã§ããã(ãã¾ã«ftp ãµã¤ãã§ç±³å½å
å°ç¨ã®ãç½®ãã¦ãã£ãããã¾ãããï¼
ãã®å¾2000å¹´ãããã«è¦å¶ãç·©åãããç±³å½å
å¤ã«é¢ãããæé«æå·å¼·åº¦ã®éä¿¡ãè¡ããããã«ãªãã¾ããã
ç±³å½å¤ç¨ã«ä½¿ããæå·ã«ã¯EXPã®è¨å·ãä»ãã¦ãã¦ãä»ã§ã以ä¸ã®ããã« OpenSSL å®è£ ãããã¾ã¾ã«ãªã£ã¦ãã¾ãã
$ openssl ciphers -v |grep EXP EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
ãªããªãå¤ãä»æ§ã®æ©è½ãå»æ¢ã§ããªãå¾æ¹äºææ§éè¦ãä»åã®èå¼±æ§ã®è¦å ã®ä¸ã¤ã§ããã
3. ephemeral RSA(ä¸æçRSA)
æã¯ã¾ã ç±³å½æå·è¼¸åºè¦å¶ãå³ããã£ãæ代ãDESãRC4çã®å ±ééµæå·æ¹å¼ã¯SSLã®ãã³ãã·ã§ã¤ã¯ã§åçã«æ±ºå®ããã®ã§ä½¿ãã強度ã®æå·ãã¯ã©ã¤ã¢ã³ãã§å©ç¨å¶éãã¦ãã¾ãããä¸æ¹ãRSAçã®å ¬ééµæå·ã®å¶é(512bit)ã¯ãã£ãããªãã®ã§ããã
ãã®ã¾ã¾ã§ã¯ããµã¼ãå´ã§ç±³å½å ããã®ã¯ã©ã¤ã¢ã³ãåãã«ã¯1024bit RSAãç±³å½å¤ããã¯512bit RSAã¨2種é¡ã®ãµã¼ã証ææ¸ãç¨æãã¦ä½¿ãåããªãã¨ãããªããªãã¾ããã¾ãé¢åã§ããããã§ä½¿ãããã®ã ephemeral RSA(ä¸æçRSA)ã¨ããæ¹å¼ã§ãã
EXPãä»ãã輸åºåãã®æå·æ¹å¼ãå©ç¨ããå ´åã«ã¯ããµã¼ãã®è¨¼ææ¸(é常ã¯1024bit)ã®RSAå
¬ééµã使ãããä¸æçã«çæãã512bité·ã®å
¬ééµããµã¼ãããã¯ã©ã¤ã¢ã³ãã«éä¿¡ãã¦å©ç¨ããã¨ãããã®ã§ã(éãã¨ãã«ã¯ãµã¼ãã®å
¬ééµã§ç½²å)ã
ã¯ã©ã¤ã¢ã³ãå´ã¯ããµã¼ãããéããã512bité·ã®ä¸æçRSAå
¬ééµã使ã£ã¦ pre_master_secret ãéãã両è
ã§åã master_secret ãå
± æãããã¨ã«ãªãã¾ãã
ç±³å½å
ã®ã¯ã©ã¤ã¢ã³ãããã¯EXPã§ãªãæå·æ¹å¼ãå©ç¨ããããé常ã¨åãããµã¼ã証ææ¸ã®RSAå
¬ééµ(1024bit)ã使ã£ã¦ pre_master_secretã®ããåããè¡ãã¾ããããã§ãµã¼ã証ææ¸1æã ãã§ç±³å½ã®æå·è¼¸åºè¦å¶ã«é©åã§ãã
æ¬æ¥ãã®512bité·ã®ä¸æçRSAã«ããéµäº¤æã¯ãEXPã®æå·æ¹å¼ã ãã«é©å¿ããããã®ã§ããããããOpenSSLã§ã¯ãEXPã§ãªãæå·æ¹å¼ã§ãå©ç¨ãã§ããããç¬èªã«æ¡å¼µãè¡ã£ã¦ãã¾ãããä»åã®FREAKæ»æã¯ãOpenSSLã®ãã®ç¬èªæ¡å¼µãçªãããã®ã§ããã
ãã® ephemeral ãªéµäº¤ææ¹å¼ã¯ãç¾å¨ PFS(Perfect Forward SecurecySecrecy) ã¨ãã¦TLSãµã¼ãã®å©ç¨ãæ¨å¥¨ããã¦ãã¾ãããã£ã¨ãRSAã§ã¯ãªãDH(DHE)ãECDH(ECDHE)ãå©ç¨ããæ¹å¼ã§ãããä»åã®FREAKæ»æã§ã¯PFSã¨ãã¦ä½å¼·åº¦RSAã使ããã¨ããèå¼±æ§ã«ã¤ãªãã£ã¦ãã¾ã£ãã¨ãã ãªãã¨ãç®èãªãã®ã§ããPFSã®éµé·ã«é¢ãã¦ã¯ãDHEã§512bitã1024bitãå©ç¨ãã¦ããå ´åããªã¹ã¯ãé«ãã2048bit以ä¸ãæ¨å¥¨ããã¦ãã¾ããèªåã使ã£ã¦ããTLSãµã¼ãã®æå·ã®éµé·ã¯æ代é
ãã«ãªã£ã¦ããªãã常ã«çæãã¦ããã¾ãããã
4. FREAKæ»æã¨ã¯
FREAKæ»æã¯ãFactoring attack on RSA-EXPORT Keys ã®ç¥ã輸åºåãã®RSAãå æ°å解ããæ»æã§ãã
以ä¸ã®4ã¤ã®æ¡ä»¶ãå¿
è¦ã§ãã
- MiTM(ä¸éè æ»æ) ãã§ãããã¨
- ãµã¼ãå´ã§EXPã®æå·æ¹å¼ã§ ephemeral RSA(512bit)ã使ãããã¨
- ãµã¼ãå´ã§ ephemeral RSAã®éµãã¢ã使ãã¾ãããã¦ãããã¨
- ã¯ã©ã¤ã¢ã³ãå´ã§EXP以å¤ã®æå·æ¹å¼ã§ã ephemeral RSA(512bit)ã使ããããæ¡å¼µããã¦ãããã¨(1.0.1kããåã®OpenSSL)
3çªç®ã®æ¡ä»¶ã§ãããRFC2246,D. 実装上の注意,D.1. 一時的 RSA 鍵ã«ã¯
512 ãããã® RSA éµã¯ããã»ã©å®å ¨ã§ã¯ãªãã®ã§ãä¸æç RSA éµã¯ã¨ãã©ãå¤æ´ããã¹ãã§ããã å ¸åçãªé»åå åå¼ã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ã¯ããã®éµã¯ä¸æ¥ãã¨ãã¾ã㯠500 ãã©ã³ã¶ã¯ã·ã§ã³ãã¨ãã§ããã°ãã以ä¸ã®é »åº¦ã§å¤æ´ãããã¨ãææ¡ããã
ã¨ãªã£ã¦ãã¾ãããç¾ç¶å¤ãã®ãµã¼ãã§ã¯ç«ã¡ä¸ããã¨ãã£ã¨åãä¸æç RSA éµã使ãç¶ããããã§ããnginxã§ã¯ã
https://github.com/nginx/nginx/blob/master/src/event/ngx_event_openssl.c#L740-L742
ã«ããããæåã®ã³ã¼ã«ããã¯ã§çæãããã®ããã£ã¨ä½¿ãç¶ãã¦ãã¾ãã
ã¾ããTLS1.0ã®æ代ã§ã¯ä¸æ¥ãã¨ã®æ´æ°ãæ¨å¥¨ã§ããããä»åã®FREAKã§ã¯ EC2 ã使ã£ã¦7æéã§512bitã®RSAéµã解ãã¦ãã¾ã£ãããã§ããæ代ã¯å¤ãã£ã¦ãã¾ãã¾ããã
ããã§ã¯ FREAKæ»æãã¹ãããæ¯ã«è¦ã¦ãã¾ãããã
ã¹ãããï¼ äºåã«ä¸æçRSAã®å æ°å解
使ãã¾ãããããã¨ãåæã«äºåã«ä¸æçRSAã®å
¬ééµãå
¥æãã¦ããã¾ããå¾ã¯åæã512bitã®æ°åãå æ°å解ãã¦2ã¤ã®ç´ æ°ãè¦ã¤ãã¾ãã
ã¹ãããï¼ ãµã¼ãå´ã輸åºç¨æå·æ¹å¼ã§ãã³ãã·ã§ã¤ã¯ããããæ¹ãã
ã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã®éã«å
¥ã込㿠MiTMæ»æãä»æãã¾ãã
ClientHelloã§è¦æ±ãã CipherSuite ã輸åºç¨ã®ãã®ã«ç½®ãæãããµã¼ãå´ãä¸æçRSAã§éµäº¤æããããä»åãã¾ãã
ãµã¼ãå´ã¯ä½¿ãã¾ããã®ä¸æçRSAå
¬ééµãéãã¾ããã¯ã©ã¤ã¢ã³ãã¯ãç¬èªæ¡å¼µãã¦ãã¾ã£ã¦ããã®ã§è¼¸åºç¨æå·ãããªãã¦ãä¸æçRSAã使ããããã«ãªã£ã¦ã¾ãã
ã¹ãããï¼ pre_master_secretã®å ¥æ
ã¯ã©ã¤ã¢ã³ãããä¸æçRSAã®å
¬ééµã§æå·åãã pre_master_secretãéããã¦ãã¾ããæ¢ã«ç§å¯éµãäºåã«è¨ç®ã§ãã¦ããã®ã§ä¸èº«ã丸è¦ãã§ããæ»æè
㯠pre_master_secretãããµã¼ãã»ã¯ã©ã¤ã¢ã³ãã¨åã master_secretãç´ã¡ã«çæãã¾ãã
ã¹ãããï¼ Finishedã®ããã·ã¥ãã¼ã¿ã®æ¹ãã
TLSãã³ãã·ã§ã¤ã¯ã®å®äºã¯ãFinishedã®ã¡ãã»ã¼ã¸ã«å«ã¾ãããã³ãã·ã§ã¤ã¯ãã¼ã¿ã¨ master_secretãåãããããã·ã¥å¤ãè¦ã¦ããã³ ãã·ã§ã¤ã¯ãæ¹ããããã¦ãªããã¨ã確èªãã¾ããæ»æè
㯠master_secretãæã£ã¦ããã®ã§èªç±ã«ããã·ã¥ãæ¹ãããã¦ãã¯ã©ã¤ã¢ã³ãã»ãµã¼ãã®ä¸¡è
ãã ã¾ãã¾ãã
ããã¼ãã»ãã¨è¦äºã§æå¿ãã¦ãã¾ãã¾ãããã®ä»ãããããTLSãã³ãã·ã§ã¤ã¯ã®ç¶æ
é·ç§»ã®å®è£
ãã°ãã¤ããèå¼±æ§ãããããå ±åãã ã¦ãã¾ãã Inria 㨠MSRãã¼ã ã®TLSã®ä¿¡é ¼æ§ãåä¸ãããåãçµã¿ã¯ãã³ãããããªã¨æãã¾ããä»å¾ãã®ãããªä¸åãæ ¹æ¬çã«è§£æ±ºããããããªæ°ãããããã³ã«ã®åãçµã¿ã§ãå§ã¾ããªãããªã¨é¡ã£ããããã¾ãã