FREAK Attack on Export-Grade RSA
輸出グレード RSA に対する FREAK 攻撃
説明
この脆弱性は、サーバーが FREAK 攻撃の影響を受けやすいことを示しています。FREAK 攻撃は、TLS 接続をダウングレードし、暗号化の因数分解を通じて暗号化を解読するために、弱い輸出グレードの RSA 暗号化のサポートを悪用します。
FREAK(Factoring RSA Export Keys)は、サーバーが 1990 年代の米国の輸出制限の遺産である 512 ビットキーを使用する RSA_EXPORT 暗号スイートを受け入れた場合に発生します。脆弱なクライアントは、要求されていなくてもこれらの弱いキーを誤って受け入れるため、攻撃者はダウングレード攻撃を強制し、弱い暗号化を因数分解することができます。
仕組み:
- 中間者(Man-in-the-middle)攻撃者が、クライアントとサーバー間の TLS ハンドシェイクを傍受します。
- クライアントは強力な暗号化を要求しますが、攻撃者は RSA_EXPORT を要求するリクエストを転送します。
- サーバーは、標準の 2048 ビットキーの代わりに、弱い 512 ビットの RSA キーで応答します。
- 脆弱なクライアントは、実装のバグによりこの弱いキーを受け入れます。
- 攻撃者は 512 ビットの RSA キーを因数分解し(数時間または数日かかります)、すべてのトラフィックを復号化します。
要件:
- サーバーが RSA_EXPORT 暗号スイート(レガシーな輸出グレードの暗号化)をサポートしていること。
- クライアントが、弱いキーを受け入れる脆弱な TLS 実装を持っていること。
- ハンドシェイクを傍受および変更するための、中間者ネットワークのポジション。
- 512 ビットの RSA キーを因数分解するための計算リソース。
例のシナリオ: モバイルアプリが、パブリック WiFi 経由で銀行の API に接続します。攻撃者は TLS ハンドシェイクを傍受し、サーバーをだまして 512 ビットの輸出グレードの RSA キーを提供させます。脆弱なクライアント(古い OpenSSL を使用)は、この弱いキーを受け入れます。攻撃者はクラウドコンピューティングリソースを使用してキーの因数分解に 8 時間を費やし、その後のすべての API トラフィックを復号化して、認証トークンと財務データを盗み出します。
この脆弱性は、暗号化の強度を制限していた歴史的な米国の輸出制限を悪用するものであり、下位互換性のためにこれらの意図的に弱められた暗号スイートを現在もサポートしているレガシーシステムに影響を与えます。
推奨事項
FREAK 攻撃を緩和するには:
主要な防御策 - 輸出用暗号スイートの無効化:
# Apache - エクスポートグレード暗号の無効化
SSLCipherSuite HIGH:!aNULL:!MD5:!EXP:!RC4
# より安全な構成
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!EXP
# Nginx - エクスポート暗号を無効化する
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA;
TLS ライブラリの更新:
すべての TLS 実装にパッチが適用されていることを確認します: - OpenSSL 1.0.1k 以降(CVE-2015-0204 修正済み) - 脆弱なライブラリを使用しているモバイルアプリの更新 - 組み込みシステムおよび IoT デバイスへのパッチ適用
FREAK 脆弱性のテスト:
# エクスポート暗号サポートのテストサーバー
openssl s_client -connect example.com:443 -cipher EXPORT
# 適切に設定されていれば"no cipher match"で失敗するはずです
# SSL Labsでのテスト
curl "https://api.ssllabs.com/api/v3/analyze?host=example.com"
クライアント側の保護:
# Python - エクスポート暗号を無効化する
import ssl
context = ssl.create_default_context()
context.set_ciphers('ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!MD5:!DSS:!EXPORT')
追加の緩和策:
- 輸出用暗号のサポートを完全に削除する TLS 1.3 を使用する
- ECDHE/DHE キー交換を使用して、Perfect Forward Secrecy(PFS)を実装する
- 弱いアルゴリズムについて、暗号スイートの構成を定期的に監査する
- ダウングレードの試みを示す異常な TLS ネゴシエーションパターンを監視する
最新のブラウザーやサーバーでは輸出用暗号がデフォルトで無効になっていますが、レガシーシステムや組み込みデバイスは依然として脆弱である可能性があります。
リンク
標準
- SOC2_CONTROLS:
- CC_6_7
- CC_7_1
- CCPA:
- CCPA_1798_150
- GDPR:
- ART_32
- PCI_STANDARDS:
- REQ_4_1
- REQ_6_2
- REQ_11_3