ApacheのSSLCipherSuiteにRC4を設定すべきではない

  • 54
    Like
  • 1
    Comment
More than 1 year has passed since last update.

Apacheに限らないが、暗号化方式としてRC4暗号が最優先に設定されていることがままある。
これは必ずしもいいとは言えない・・・ので、その理由をまとめてみた。

そもそもRC4がよく設定されているのには理由がある。
過去BEASTという攻撃方法が発見されCBC暗号(Cipher Block Chaining:一定の長さごとに暗号化を行う方式)は全部危ない!?という感じになった。そこで登場したのがストリーム暗号の代表格RC4であり、これに設定すればOK、という流れが今にも至っているのだ。
BEAST攻撃について

ただ当時とは状況が変わり、RC4を設定するのが最適とは言えなくなってきた。

理由1 RC4は非推奨となった

まず有権者に訴えたいのは、現在RC4は脆弱性が発見され、「電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)」にて推奨されない運用監視暗号の対象になっている、ということであります。

電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)

少なくとも攻撃が困難であるSSL/TLS1.0以上で運用を行う必要がある。
ストリーム暗号RC4の安全性評価

理由2.CBC暗号利用時の対策が実装されている

当初は TLS1.1/1.2 でないと対策はできず、これに対応しているサーバー/ブラウザはほとんどないから実質無理、ということだった。
SERVER TECHNOLOGIES - HTTPS BEAST ATTACK

実際今もこの状況はあまり変わっていないが、その代わりTLS1.0でも対応できる対策がOpenSSL0.9.6dから実装されている。
BEAST, OpenSSL and Apache

SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS というオプションを 無効にする ことで対応が可能になっている。これはSSL_OP_ALLの設定にも含まれるが、SSL_OP_ALLを設定するとバージョンによってはバグが発生したり他の対策とバッティングしてSSL_OP_DONT_INSERT~が有効になってしまうこともあるので注意が必要だ(命が惜しかったら最新版にすべきか。こちらを要確認→OpenSSL)。
※また、SSL_OP_DONT_INSERT~を無効にすると一部携帯端末のブラウザで表示ができなくなることがあるので、設定時は要確認。

「OpenSSL」におけるバージョン・ロールバックの脆弱性 (0.9.8未満)
OpenSSL における暗号スイートのダウングレードに関する脆弱性 (0.9.8q未満、1.0.0c未満)
SSL_OP_ALLを設定するとBEAST対策の設定が無効化される(Apache2.4.4)

理由3 そもそもBEASTの攻撃条件はかなり厳しい

BEASTを成立させるためには1.パケットを全部盗聴できて 2.任意のリクエストをサーバーに送信できる必要がある。最近はどのブラウザでもSameOriginPolicyの実装があり、2は厳しい(BEASTのデモでもJavaアプレット/Websocket脆弱性を利用していたようだ(当然もう修正されている))。

またブラウザ側の対策も進んでいる。
BEAST/SSLの脆弱性を突く「BEAST攻撃」って何だ?
SSL/TLSの脆弱性を攻撃する”BEAST”を防ぐ修正をChromeが追加

当然新しい技術と共に抜け穴は出てくるであろうが、それと同じくらい対策も進んでいるといえる。
そのため、「BEASTが怖いからRC4」というのはより怖いほうを選択してしまっているのでは?という気がするのである。