コンテンツにスキップ

LOGJAM Attack on Diffie-Hellman

Diffie-Hellman に対する LOGJAM 攻撃

概要

この脆弱性は、サーバーが LOGJAM 攻撃に対して脆弱であることを示しています。この攻撃は、脆弱な Diffie-Hellman パラメータを悪用し、TLS 接続を解読可能な輸出グレードの暗号にダウングレードさせます。

LOGJAM は、TLS サーバーが DHE_EXPORT 暗号スイートをサポートしている場合、または脆弱な 512 ビット Diffie-Hellman パラメータを使用している場合に発生します。中間者(Man-in-the-Middle)攻撃者は、クライアントに強力な DHE 鍵交換から脆弱な輸出グレードの DH へのダウングレードを強制し、暗号化をオフラインの暗号解読に対して脆弱な状態にします。

攻撃の仕組み:

  1. 攻撃者はクライアントとサーバー間の TLS ハンドシェイクを傍受します。
  2. 強力な DHE 暗号から脆弱な DHE_EXPORT(512 ビット)へのダウングレードを強制します。
  3. 脆弱な DH パラメータでダウングレードされた接続をキャプチャします。
  4. 事前計算された離散対数テーブルを使用して、オフラインで 512 ビット DH を解読します。
  5. セッションキーを復元し、キャプチャされたすべてのトラフィックを復号化します。

前提条件:

  • サーバーが DHE_EXPORT 暗号スイートまたは脆弱な DH パラメータをサポートしている。
  • ダウングレードを強制するための中間者(Man-in-the-Middle)ネットワーク位置にある。
  • 一般的な DH 素数に対する事前計算された数体ふるい(number field sieve)テーブルを保持している。
  • クライアントがプロトコルダウングレード攻撃に対して脆弱である。

攻撃シナリオ例: 企業の VPN サーバーが、互換性のためにレガシーな DHE_EXPORT 暗号をサポートしています。ネットワーク上の攻撃者が従業員の接続を傍受し、512 ビット DH パラメータへのダウングレードを強制します。事前計算された暗号化テーブル(生成に約 $18,000 かかる)を使用することで、攻撃者は数時間以内に脆弱な DH 交換を解読し、すべての VPN トラフィックを復号化して、企業の認証情報や機密データを露呈させます。

この攻撃は、FREAK と同じ 1990 年代の輸出制限を悪用しており、政府が義務付けた暗号の弱体化が、世界中の何百万ものサーバーで使用されている Diffie-Hellman 鍵交換プロトコルにどのように永続的な脆弱性をもたらしたかを示しています。

推奨事項

LOGJAM 攻撃を緩和するためには:

主要な防御策 - 輸出グレード DH 暗号の無効化:

# Apache - エクスポートDH暗号を無効化する
SSLCipherSuite HIGH:!aNULL:!MD5:!EXP:!DHE

# 推奨: DHEの代わりにECDHEを使用する
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE
# Nginx - 脆弱なDH暗号を無効化する
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE:!EXPORT:!DES:!RC4:!MD5;

強力な DH パラメータの使用:

DHE が必要な場合は、カスタムの 2048 ビット以上のパラメータを生成します:

# 強力なDHパラメータの生成
openssl dhparam -out dhparams.pem 2048

# Apache: カスタムDHパラメータを使用する
SSLOpenSSLConfCmd DHParameters /path/to/dhparams.pem

# Nginx: カスタムDHパラメータを指定する
ssl_dhparam /path/to/dhparams.pem;

DHE よりも ECDHE を優先する:

ECDHE はより優れたパフォーマンスとセキュリティを提供します:

# ECDHE暗号スイートを優先する
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-CHACHA20-POLY1305

クライアント側の保護:

// Java - disable weak DH
System.setProperty("jdk.tls.disabledAlgorithms", "DH keySize < 1024");

LOGJAM のテスト:

# DHE_EXPORTサポートのテスト
nmap --script ssl-enum-ciphers -p 443 example.com | grep DHE_EXPORT

# 利用可能なDHE_EXPORT暗号がないことを示すはずです
openssl s_client -connect example.com:443 -cipher DHE-EXPORT

追加の緩和策:

  • 脆弱な DH パラメータのサポートを削除する TLS 1.3 を使用する。
  • ECDHE 鍵交換を使用して Perfect Forward Secrecy を実装する。
  • 異常な暗号ネゴシエーションパターンを監視する。
  • TLS 構成の脆弱なパラメータを定期的に監査する。

根本的な解決策は、DHE から ECDHE に移行することです。これにより、パフォーマンスが向上し、輸出グレードの脆弱性のない同等のセキュリティが提供されます。

リンク

基準

  • 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