Logjam

提供: セキュリティ
2015年5月23日 (土) 00:48時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

Logjam とは、TLSで利用されるディフィー・ヘルマン鍵交換(Diffie-Hellman,DH)の脆弱性です。輸出可能な弱い暗号を利用させる中間者攻撃を行い、通信の内容を取得する攻撃です。

読み方

Logjam
ろぐじゃむ

概要

TLSを利用した暗号化通信の確立前にLogjamの脆弱性を利用されると、中間者攻撃により、TLS接続を512ビットの輸出グレード暗号に落とし、攻撃者が通信の内容を傍受・改ざんできます。

Diffie-Hellman の鍵共有プロトコルを攻撃するには、離散対数問題の数学的に困難な問題を解く必要があります。TLSの実装の中には、離散対数問題で利用される素数が再利用されるものがあります。問題を得には、数体ふるい方を使用し、再利用されている素数から事前に計算を行うことで、攻撃時の時間を短縮できます。この事前計算により、小さい素数を使用している、現実的な時間ないで攻撃できます。

Non export-gradeの暗号スイートで512ビット程度の素数を使用しない環境で、 FREAK(Factoring attack on RSA-EXPORT Keys)の対策で Export Cipher が無効化されていれば、影響を受けません。

影響を受けるプロトコル

多数のプロトコルがこの攻撃の影響を受けます。

脆弱性のあるサーバ

DHE_EXPORT の暗号スイートをサポートしているサーバに脆弱性が存在します。

DHE_EXPORTとは

DHE_EXPORT は、1990年代のアメリカの輸出規制に準拠して暗号強度を弱めるために、 SSL 3.0とTLS 1.0でサポートされました。輸出規制解除後も互換性維持のために、多くのプログラムでサポートが継続されました。

診断方法

https://weakdh.org/sysadmin.html にでサーバ名を入力すると確認できます。

OpenSSL 1.0.2 コマンドラインツールで DH の設定がされているサーバを診断できます。

openssl s_client -connect www.example.jp:443 -cipher "EDH"

接続情報の "Server Temp Key" を探します。

openssl s_client -connect www.example.jp:443 -cipher "EDH"|grep "Server Temp Key"

DHをサポートしていない場合は、接続が失敗します。

$ openssl s_client -connect login.yahoo.co.jp:443 -cipher "EDH"
CONNECTED(00000003)
34381592232:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:769:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 145 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated

Perfect Forward SecrecyのためにECDHをサポートしているかチェックする場合には、以下の通りです。

$ openssl s_client -connect login.yahoo.co.jp:443 -cipher "ECDHE"
CONNECTED(00000003)
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - G2
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
 0 s:/C=JP/ST=Tokyo/L=Minato-Ku/O=Yahoo Japan Corporation/CN=login.yahoo.co.jp
   i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2
 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-----END CERTIFICATE-----
subject=/C=JP/ST=Tokyo/L=Minato-Ku/O=Yahoo Japan Corporation/CN=login.yahoo.co.jp
issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3103 bytes and written 329 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: foo
    Session-ID-ctx:
    Master-Key: bar
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0010 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0020 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0030 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0040 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0050 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0060 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0070 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0080 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0090 - 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
 
    Start Time: 1432218724
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---

対策方法

  1. Export Cipher Suites を無効化します。
  2. Elliptic-Curve Diffie-Hellman(ECDHE, 楕円曲線ディフィ・ヘルマン)を使用します。DHEはやめ、ECDHEを使用しましょう。
  3. 強いユニークなDiffie Hellman Groupを作成します。多くのサーバで少数の固定グループが使われています。固定的な素数は、使用してはいけません。DHの鍵交換で使用する阻止いのサイズを2048ビットにします。

サーバがクライアントになる場合

OpenSSLがサポートしているEXPORTグレードの暗号の確認方法は以下の通りです。

openssl ciphers -s EXP -v

実行例です。

% openssl ciphers -s EXP -v
EXP-ADH-DES-CBC-SHA     SSLv3 Kx=DH(512)  Au=None Enc=DES(40)   Mac=SHA1 export
EXP-ADH-RC4-MD5         SSLv3 Kx=DH(512)  Au=None Enc=RC4(40)   Mac=MD5  export
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=DSS  Enc=DES(40)   Mac=SHA1 export
EXP-DES-CBC-SHA         SSLv3 Kx=RSA(512) Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-RC2-CBC-MD5         SSLv3 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export

関連項目




スポンサーリンク