TLS Client-Initiated Renegotiation DoS Vulnerability
TLS クライアント起点の再ネゴシエーションによるDoS脆弱性
説明
この脆弱性は、サーバーがクライアント主導のTLS再ネゴシエーションを無制限に許可していることを示しています。これは、サーバーに高コストな暗号化操作を強制することで、サービス拒否(DoS)攻撃に悪用される可能性があります。
クライアント主導の再ネゴシエーションの脆弱性は、TLSサーバーが適切なレート制限なしに、クライアントからTLSパラメーターの再ネゴシエーション要求を繰り返し許可する場合に発生します。サーバーは再ネゴシエーション中に計算コストの高い暗号化操作を実行しなければならないため、攻撃者は最小限の労力でサーバーのリソースを枯渇させることができます。
機能の仕組み:
- 攻撃者がターゲットサーバーへのTLS接続を確立します。
- 攻撃者がTLS再ネゴシエーション要求を繰り返しトリガーします(1秒間に数千回に及ぶ場合もあります)。
- サーバーのCPUは、これらの再ネゴシエーションのハンドシェイクを処理することで飽和状態になります。
- 正当なユーザーは、著しいパフォーマンスの低下、またはサービスの完全な利用不可に直面します。
要件:
- クライアント主導の再ネゴシエーションを許可しているTLSサーバー。
- 再ネゴシエーションの試みに対するレート制限やスロットリングが存在しないこと。
- ターゲットサーバーへの接続を確立できること。
Example Scenario: 攻撃者は銀行のHTTPSウェブサイトサーバーに対して少数の接続を確立し、各接続で毎秒数百回の再ネゴシエーション要求を開始します。サーバーがこれらの暗号化操作を処理するにつれてCPU使用率は100%に急増し、正当なトランザクションがタイムアウトするか、完全に失敗する事態を引き起こします。攻撃者はわずかな攻撃接続と最小限の帯域幅で、効果的なサービス拒否(DoS)を達成します。
この攻撃は、TLS再ネゴシエーション中のクライアントとサーバー間の計算の非対称性(サーバーはクライアントよりも大幅に多くの処理を実行しなければならない)を悪用しています。そのため、HTTPS、SMTP over TLS、その他の安全なプロトコルを含む、TLSを使用するあらゆるサービスに影響を与える可能性のある、特に効率的なDoSベクトルとなります。
推奨事項
TLSのクライアント主導の再ネゴシエーションの脆弱性を緩和するには、以下の戦略を実装します:
Primary Mitigations:
-
Disable Client-Initiated Renegotiation - 最も効果的な緩和策は、クライアント主導の再ネゴシエーションを完全に無効にしつつ、必要な場合にのみサーバー主導の再ネゴシエーションを許可することです。
-
Implement Renegotiation Rate Limiting - クライアント主導の再ネゴシエーションを無効にできない場合は、クライアントが再ネゴシエーションを要求できる頻度に対して厳格なレート制限を実装します。
-
Update TLS Libraries - 再ネゴシエーションベースのDoS攻撃に対する保護を含めるため、すべてのTLS実装が最新であることを確認します。
Implementation Examples:
# Nginx設定
# クライアントの再ネゴシエーションを無効にする
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
# Apache設定
# サーバーの再ネゴシエーションを維持しつつ、クライアントの再ネゴシエーションを無効にする
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLOptions +NoRenegotiate
# OpenSSL設定 (カスタムアプリケーション用)
SSL_CTX_set_options(ctx, SSL_OP_NO_CLIENT_RENEGOTIATION);
For Load Balancers:
# F5 BIG-IP設定
modify ltm profile client-ssl my_ssl_profile {
renegotiation disabled
}
Additional Safeguards:
- 過剰な再ネゴシエーション要求を検出してブロックするためにWeb Application Firewall (WAF) をデプロイします。
- ネットワークレベルで接続および要求のレート制限を実装します。
- 再ネゴシエーションを完全に排除するTLS 1.3へのアップグレードを検討します。
- 過剰な再ネゴシエーションを試みる接続を閉じるようにネットワークのタイムアウトポリシーを設定します。
Verifying Your Configuration:
# OpenSSLを使用したクライアントの再ネゴシエーションのテスト
openssl s_client -connect example.com:443 -tls1_2
# 次に "R" と入力し、Enterを押して再ネゴシエーションを要求する
# 接続が終了するかエラーが返される場合、クライアントの再ネゴシエーションは無効化されています
リンク
標準
- SOC2_CONTROLS:
- CC_6_7
- CC_7_1
- CCPA:
- CCPA_1798_150
- HIPAA_CONTROLS:
- SECURITY252
- SECURITY212
- SECURITY213
- GDPR:
- ART_32
- PCI_STANDARDS:
- REQ_2_3
- REQ_6_5
- REQ_11_3