FREAK

FREAK ("Factoring RSA Export Keys")とはSSL/TLSの脆弱性を突いたセキュリティエクスプロイトである。アメリカ合衆国からの暗号の輸出規制により導入された弱い暗号と、サーバ側・クライアント側の不適切な実装により、中間者攻撃を成立させることができる。

経緯 
TLSの前身となったSSLの開発当時には、アメリカからの暗号輸出には厳しい規制が課されており、公開鍵暗号であるRSA暗号については512ビットの鍵長のものしか認められなかった。1990年代当時では、この強度の暗号はアメリカ国家安全保障局（NSA）には解読可能で、その他の組織には解読不能であったが、コンピューターの性能向上、クラウドコンピューティングの一般化により、2015年時点では「50ドル、12時間程度」 で解読できる程度に脆弱なものとなっていた。2003年時点ですら「時代遅れ」とされていた にもかかわらず、それから10年以上が過ぎてもなおサーバ側で輸出暗号を受け入れる設定のままとなっていたこと、さらには輸出用の暗号でないにもかかわらず、512ビット以下のRSA鍵を受け入れる実装となっていたクライアントが存在し、輸出暗号を使用しないクライアントに対しても中間者が鍵交換に介入する余地を産んでしまった。2015年に発見されたエクスプロイトだが、既に1990年代から根本原因である脆弱性が存在していたとされる。

この欠陥は、INRIA、Microsoft Researchの研究者が発見した。そしてこのFREAK攻撃はCVE識別子でCVE-2015-0204と定義されている。

影響を受けるソフトウェアや端末にはAppleのSafari、GoogleのAndroidやOpenSSLが、ウェブサイトではアメリカ合衆国連邦政府のウェブサイトであるfbi.gov、whitehouse.gov、nsa.govで、あるセキュリティ団体はエクスHTTPSを使用するウェブサイトの36%がエクスプロイトの影響を受けるとされるというテスト結果を公表した。IP2Location LITEを使った地点解析によれば影響を受けるサーバーの35%がアメリカ合衆国にあるとされる。

エクスプロイトに関するプレス発表ではこれに関する影響を「潜在的かつ壊滅的」 並びにアメリカ合衆国からの暗号の輸出規制によるだとしている。

マイクロソフトもWindowsの全バージョンにおいてトランスポート層暗号化のSChannel実装がFREAK攻撃の影響を受けると述べている。この問題のCVEIDはCVE-2015-1637である。

、関連企業各社はこの脆弱性を修正した新たなソフトウェアの公開準備を進めている。ウェブブラウザでは、Google Chromeがバージョン41で、Operaがバージョン28でこの脆弱性に対処した。OSでは、Microsoft Windowsがサポート継続中であるServer 2003およびVista以降において、Appleでは同じくサポート継続中であるOS X 10.8以降 およびiOS 8 において対処済みである。Mozilla Firefoxはこの脆弱性の影響を受けない。

技術的な詳細 
サーバー、クライアント共に一時鍵によるRSA暗号を受け入れる場合に、もっと強い暗号を使える状況であっても一時鍵を解読できる中間者が512ビットRSAでの通信を強制できるダウングレード攻撃は、すでに1998年には報告がなされていた。
クライアントからの接続要求を中間者が書き換え、要求する暗号を輸出暗号のみにする。
サーバは512ビットの鍵と、これからの暗号通信の鍵を生成するための素材を中間者へと返す。
中間者では解読済みの鍵を使って鍵の素材を得て、サーバ・クライアントの両者に対して正しく鍵交換が成立したことを装う。
接続が成立してしまえば、中間者は手元にある鍵の素材を使って通信の復号・改竄が可能となる。

FREAKでは、クライアントが要求する暗号には輸出暗号が含まれていないが、中間者がそれのみを要求するように書き換え、さらにはクライアント側が輸出暗号の一時鍵を受け入れてしまうという実装の隙を突いて、中間者攻撃を成立させている。

関連項目 
 BEAST
 CRIME
 POODLE
 BREACH

脚注

外部リンク 
 https://www.smacktls.com/
 https://www.freakattack.com/
 http://www.sitemeer.com
 https://tools.keycdn.com/freak/
 https://infogr.am/https_sites_that_support_rsa_export_suites

エクスプロイト
暗号技術
暗号解読攻撃
2015年の計算機科学
Transport Layer Security