コンテンツにスキップ

Index

SSLv2/TLSに対するDROWN攻撃

説明

この脆弱性は、サーバーがDROWN攻撃の影響を受けやすいことを示しています。DROWN攻撃は、クロスプロトコルのBleichenbacherパディングオラクル攻撃を通じて、SSLv2のサポートを悪用して最新のTLS接続を復号化します。

DROWN(Decrypting RSA with Obsolete and Weakened encryption)は、サーバーが最新のTLSと並行して時代遅れのSSLv2プロトコルをサポートしている場合に発生します。クライアントがSSLv2を使用しない場合でも、攻撃者はSSLv2の脆弱なRSAパディング実装を悪用して、同じ秘密鍵を共有するキャプチャされたTLSセッションを復号化できます。

仕組み:

  1. 攻撃者は、クライアントとサーバー間の何百ものTLS接続をキャプチャします。
  2. 同じRSA秘密鍵を使用して、攻撃者は同じサーバーまたは異なるサーバー上のSSLv2サービスに接続します。
  3. 変更されたRSA暗号文を使用して、特別に細工されたSSLv2ハンドシェイクメッセージを送信します。
  4. SSLv2サーバーの応答は、パディングオラクルを通じて秘密鍵に関する情報を漏洩させます。
  5. 約4万回のプローブ後、攻撃者はキャプチャされたTLSセッションの1つを復号化できます。

要件:

  • ターゲットサーバーまたは関連サーバーが、同じRSA秘密鍵でSSLv2をサポートしている。
  • TLS接続でRSA鍵交換が使用されている(ECDHE/DHEではない)。
  • TLSトラフィックをキャプチャし、SSLv2サービスをプローブするためのネットワークアクセス。
  • 暗号化攻撃のための計算リソース(クラウドで約440ドル)。

例のシナリオ: 銀行のHTTPSウェブサイトは適切にSSLv2を無効にしていますが、同じインフラストラクチャ上にあるSMTP電子メールサーバーは同じRSA証明書を使用してSSLv2をサポートしています。攻撃者は顧客のウェブサイトへのTLSセッションをキャプチャし、その後、電子メールサーバーに対して細工された数千回のSSLv2接続を行います。SSLv2の脆弱なパディングオラクルは、キャプチャされたHTTPSセッションを復号化するのに十分な情報を明らかにし、ログイン認証情報や財務データを暴露します。

この攻撃は、1990年代からのレガシーな輸出グレードの暗号化制限を悪用するものであり、政府が義務付けた暗号の弱体化が数十年経った今でも最新のセキュリティを脅かし続けていることを示しています。

推奨事項

DROWN攻撃を軽減するには:

主要な防御 - SSLv2を完全に無効にする:

# Apache - SSLv2の無効化
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5:!SSLv2:!SSLv3
# Nginx - SSLv2の無効化 (すでにデフォルトで無効になっています)
ssl_protocols TLSv1.2 TLSv1.3;

OpenSSLの更新:

パッチが適用されたバージョンにアップグレードしてください: - OpenSSL 1.0.2g 以降 - OpenSSL 1.0.1s 以降 - これらのバージョンは、デフォルトでSSLv2と輸出用暗号スイートを無効にします。

同じ秘密鍵を使用するすべてのサービスを確認する:

重要:他のどのサービスもSSLv2をサポートしていないことを確認してください:

# すべてのサービスでSSLv2サポートを確認する
nmap --script ssl-enum-ciphers -p 443,993,995,25,587,465 example.com

# 特定のサービスでSSLv2をテストする
openssl s_client -connect mail.example.com:993 -ssl2

一般的に脆弱なサービス: - SMTPサーバー(ポート25、587、465) - IMAPサーバー(ポート993) - POP3サーバー(ポート995) - セカンダリウェブサーバー - ロードバランサーとプロキシ

必要に応じて新しい鍵を生成する:

すべての場所でSSLv2が無効になっていることを確認できない場合:

# 新しいRSA秘密鍵の生成
openssl genrsa -out new-private-key.pem 2048

# 新しい証明書署名要求(CSR)を作成する
openssl req -new -key new-private-key.pem -out new-csr.pem

追加の保護:

  • Perfect Forward SecrecyのためにECDHE/DHE暗号スイートを使用する。
  • 可能な限りcertificate pinningを実装する。
  • 異常なSSLv2接続の試みがないかログを監視する。
  • SSLv2トラフィックのネットワークレベルのフィルタリングを検討する。

重要な見解: SSLv2を個別に無効にしたとしても、秘密鍵を共有し、かつSSLv2をサポートしているサービスが1つでもあれば、すべての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
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213