コンテンツにスキップ

CCS Injection Attack on OpenSSL

OpenSSLに対するCCSインジェクション攻撃

概要

この脆弱性は、サーバーがCCSインジェクション攻撃を受けやすいことを示しています。この攻撃は、OpenSSLのChangeCipherSpecメッセージの不適切な処理を悪用し、TLSハンドシェイク中に脆弱な暗号化キーの使用を強制します。

CCS (ChangeCipherSpec) インジェクションは、マスターシークレットが正しく確立される前に、OpenSSLが順序外のCCSメッセージを許可してしまう場合に発生します。これにより、システムは実際にネゴシエートされたシークレットの代わりに、空のマスターシークレットを使用して暗号化キーを生成するため、予測可能で脆弱なキーが生成されます。

仕組み:

  1. 攻撃者は、ServerHelloの後、マスターシークレットが生成される前にTLSハンドシェイクを傍受します。
  2. 悪意のあるCCSメッセージが、クライアントとサーバーの両方の接続にインジェクトされます。
  3. 両方のエンドポイントは、空のマスターシークレット(すべてゼロ)を使用してセッションキーを生成します。
  4. 攻撃者は、予測可能で脆弱なキーを使用して、後続のすべてのトラフィックを復号化できます。

要件:

  • クライアントとサーバーの両方が脆弱なOpenSSLバージョンを使用していること
  • 中間者(man-in-the-middle)攻撃が可能なネットワークアクセス
  • OpenSSL 1.0.1+ のサーバーは特に悪用されやすい

シナリオ例: Webアプリケーションがクライアントとサーバーの両方でOpenSSL 1.0.1gを使用しています。同じネットワーク上の攻撃者がTLSハンドシェイク中にCCSメッセージをインジェクトし、空のマスターシークレットから派生した暗号化キーを使用するように両側に強制します。その後、攻撃者はログイン資格情報やセッションCookieを含むすべてのHTTPSトラフィックを復号化できます。

この脆弱性は発見されるまで15年以上にわたりOpenSSLに存在し、脆弱なOpenSSLバージョンを使用する事実上すべてのSSL/TLS接続に影響を与え、セッションの完全な侵害を可能にしました。

推奨事項

CCSインジェクション攻撃を軽減するには:

主な対策 - OpenSSLの更新:

パッチが適用されたOpenSSLバージョンに直ちに更新してください。 - OpenSSL 1.0.1h 以降 - OpenSSL 1.0.0m 以降 - OpenSSL 0.9.8za 以降

# 現在のバージョンを確認する
openssl version

# パッケージの更新
apt-get update && apt-get upgrade openssl  # Debian/Ubuntu
yum update openssl                         # RHEL/CentOS

サービスの再起動:

更新後、OpenSSLを使用しているすべてのサービスを再起動します。

systemctl restart apache2    # or nginx, postfix, etc.
systemctl restart postfix
systemctl restart dovecot

脆弱性のテスト:

# CCSインジェクション脆弱性のテストサーバー
openssl s_client -connect example.com:443 -msg 2>&1 | grep -i "early ccs"

# SSL Labsテストの使用
curl "https://api.ssllabs.com/api/v3/analyze?host=example.com"

追加の軽減策:

  • ネットワークトラフィックで異常なCCSメッセージパターンを監視する
  • 可能な限りcertificate pinningを実装して、MITM試行を検出する
  • 重要なアプリケーションにはOpenSSL以外のTLS実装(NSS、GnuTLS)を使用する
  • キーの侵害による被害を制限するためにパーフェクトフォワードシークレシー(perfect forward secrecy)を有効にする

CCSインジェクションでは秘密鍵や証明書は公開されないため、パッチ適用後の証明書の交換は不要です。

リンク

基準

  • SOC2_CONTROLS:
    • CC_6_7
    • CC_7_1
  • CCPA:
    • CCPA_1798_150
  • GDPR:
    • ART_32
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213
    • SECURITY255
    • SECURITY258
  • PCI_STANDARDS:
    • REQ_4_1
    • REQ_6_2
    • REQ_11_3