TLS における Diffie-Hellman 鍵交換の脆弱性(再掲載)

no extension

なんか node.js が今さら Logjam 攻撃に対応したとか言ってるので

upgrade from 1.0.2e to 1.0.2f. To mitigate against the Logjam attack, TLS clients now reject Diffie-Hellman handshakes with parameters shorter than 1024-bits, up from the previous limit of 768-bits.
via Node v5.6.0 (Stable)

以前 Qiita に書いた記事をこちらでも再掲載する。 ちなみに元記事は2015年5月に公開している。

ちなみに OpenSSL 1.0.2f では Logjam 攻撃への追加対応のほか,安全でない素数を生成する問題や SSLv2 をブロックできない問題に対応している。 むしろこちらの方が重要か。

安全でない素数を生成する問題については CVSSv3 基本値 CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N で 7.4 と見積もられている。

基本評価基準 評価値
攻撃元区分(AV) ネットワーク(N)
攻撃条件の複雑さ(AC) 高(H)
必要な特権レベル(PR) 不要(N)
ユーザ関与レベル(UI) 不要(N)
スコープ(S) 変更なし (U)
情報漏えいの可能性(機密性への影響, C) 高(H)
情報改ざんの可能性(完全性への影響, I) 高(H)
業務停止の可能性(可用性への影響, A) なし(N)

脆弱性の内容

通称 “Logjam” 攻撃。

かつて騒がれた FREAK 脆弱性と同じく, TLS 経路上に「中間者」がいる場合, Diffie-Hellman(DH)鍵交換で使われる鍵を輸出用の脆弱なものにダウングレードさせられる。 FEAK のときとは異なり,特定の実装の脆弱性ではなく TLS プロトコルの欠陥。

ちなみに DH 鍵交換アルゴリズムは公開鍵暗号の一種で,お互いに(もちろん第3者にも)秘密情報(秘密鍵)を知られることなく安全にセッション鍵を生成することができる。 ベースとなるロジックは「離散対数問題」と呼ばれるもので ElGamal や DSA と同系統のロジック。なので,鍵長の管理も ElGamal や DSA と同等のものが要求される。

暗号強度と各暗号方式の鍵長の関係は以下のとおり(単位はすべて bit)

Security
Strength
Symmetric
key
algorithms
FFC
(e.g., DSA, D-H)
IFC
(e.g., RSA)
ECC
(e.g., ECDSA)
$\le 80$2TDEA$L=1024$
$N=160$
$k=1024$ $f = 160\text{ - }223$
$112$3TDEA$L=2048$
$N=224$
$k=2048$ $f = 224\text{ - }255$
$128$AES-128$L=3072$
$N=256$
$k=3072$ $f = 256\text{ - }383$
$192$AES-192$L=7680$
$N=384$
$k=7680$ $f = 384\text{ - }511$
$256$AES-256$L=15360$
$N=512$
$k=15360$$f=512+$
Comparable strengths (via SP800-57 Part 1 Revision 4 )

2030年以降も安全に使える暗号強度は $128\,\mathrm{bits}$ 以上だと言われている。 Logjam 攻撃では $L=512\,\mathrm{bits}$ にダウングレードさせられるが全くお話にならない強度だということが分かるだろう。

暗号について詳しくは拙文「わかる! OpenPGP 暗号」の「暗号に関する雑多な話」あたりをどうぞ。 また FREAK については Gist にまとめているので,そちらも参考にどうぞ。

影響度(CVSS)

CVE-2015-1716 より

CVSSv2 基本値 5.0 (AV:N/AC:L/Au:N/C:P/I:N/A:N)

基本評価基準 評価値
攻撃元区分(AV) ネットワーク(N)
攻撃条件の複雑さ(AC) 低(L)
攻撃前の認証要否(Au) 不要(N)
情報漏えいの可能性(機密性への影響, C) 部分的(P)
情報改ざんの可能性(完全性への影響, I) なし(N)
業務停止の可能性(可用性への影響, A) なし(N)

CVE-2015-4000 より

CVSSv2 基本値 4.3 (AV:N/AC:M/Au:N/C:N/I:P/A:N)

基本評価基準 評価値
攻撃元区分(AV) ネットワーク(N)
攻撃条件の複雑さ(AC) 中(M)
攻撃前の認証要否(Au) 不要(N)
情報漏えいの可能性(機密性への影響, C) なし(N)
情報改ざんの可能性(完全性への影響, I) 部分的(P)
業務停止の可能性(可用性への影響, A) なし(N)

CVSS についてはデモページを参照のこと。

影響を受ける実装

また、「OpenSSL」v1.0.2b/v1.0.1nに関しては、TLS通信で暗号強度の弱い輸出グレードの暗号へ意図せずダウングレードされてしまう“Logjam”脆弱性(CVE-2015-4000)も修正されている。

  • Apple Safari : 影響あり。修正版なし
  • Android : 影響あり。修正版なし
  • Google Chrome : 影響あり。修正版なし。 Chrome 43 でも解消されてないらしい
  • Mozilla Firefox : 影響あり。修正版なし
  • OpenVPN : 影響はほとんどない?
    • TLSの脆弱性「Logjam」のOpenVPNへの影響 « yamata::memo
      • OpenVPNでは、サーバーセットアップ時に openssl dhparam コマンドを使ってOpenVPN専用のDHパラメータを生成しているため、DHパラメータを別個に生成しない使用方法よりは安全といえる。
      • openssl dhparam コマンドの実行時に鍵長を 2048ビット以上にしていれば安全。1024ビットの場合は攻撃される可能性は否定できないが、それでも簡単ではない。
      • TLS-Authが有効になっていればこの種のTLSのダウングレード攻撃は回避できる。
  • OpenSSH : 影響あり。 On OpenSSH and Logjam – Technology & Policy – Jethro Beekman

  • Logjam: PFS Deployment Guide : サーバ側での回避例

影響の有無を確認する方法

ブラウザで “The Logjam Attack” のサイトを訪れると自動的に判定してくれる。

Warning! Your web browser is vulnerable to Logjam and can be tricked into using weak encryption. You should update your browser.

と表示されると影響を受ける可能性がある。

サーバ側は “Guide to Deploying Diffie-Hellman for TLS” のページにある “Server Test” で確認できる。

参考ページ