logjam脆弱性と対策

logjamとは、DH鍵交換に存在する脆弱性を利用した攻撃。
公式ソースであるWeak Diffie-Hellman and the Logjam Attackに書かれている、脆弱性の詳細と対策についてまとめる。

目次

logjamとは

ディフィー・ヘルマン鍵交換における脆弱性を利用した攻撃

  • TLSプロトコルに対する攻撃

    • 中間者攻撃によりTLSコネクションを512ビットの暗号強度まで弱くすることができる
    • 暗号化スイートとしてDHE_EXPORTをサポートする、あらゆるサーバに影響がある
  • ステートレベルでの脅威

    • HTTPS, SSH, and VPNサーバはDH鍵交換に同じ素数を使っており、脆弱性ははこの素数に依存する


サーバに脆弱性があるかのテスト

TLS Logjam Checkにてテストする。

2017-10-01 12 22 39

Warningと出れば要対策。


クライアントブラウザの脆弱性テスト

SSL/TLS Capabilities of Your Browserにてテストする。

2017-10-01 12 23 41

Logjam VulnerabilityにてYour user agent is not vulnerableと出れば問題ない。


対策


クライアント

Google Chrome (including Android Browser), Mozilla Firefox, Microsoft Internet Explorer, and Apple Safariの 最新版はすでにlogjam対策がなされている。

よって、ブラウザの最新版を利用すれば問題ない。


システム管理者or 開発者

  • TLSライブラリを最新化する
  • サーバでは2048ビット以上の暗号強度にする
  • クライアントでは1024ビット以下のDH鍵を使った場合に拒否するようにする


サーバー

  • webサーバ、メールサーバ
    • 輸出グレードの暗号スイートを禁止する
    • 2048ビットのDiffie-Hellman groupを使用する
  • SSH
    • サーバ、クライアントともに最新のOpenSSHを使用するようにする
    • OpenSSHではElliptic-Curve Diffie-Hellman Key Exchangeを推奨する

詳細については、 Guide to Deploying Diffie-Hellman for TLS に従って対策を行う


TLSにおけるDiffie-Hellman設定のためのガイド

対策方法まとめ

  • 輸出グレードの暗号スイートを無効化
    • すでに主要なブラウザは輸出暗号を利用しないようになっている
  • Elliptic-Curve Diffie-Hellman (ECDHE)を利用
  • より強固なDiffie Hellmanグループを利用
    • 2048ビット以上の暗号キーを使用
    • 安全な素数を使用


強固なDiffie Hellmanグループを利用するための設定

opensslの場合

openssl dhparam -out dhparams.pem 2048


nginxでの設定

/etc/nginx/sites-enabled/defaultにて以下のように更新

暗号スイートを設定

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

ssl_prefer_server_ciphers on;

DHパラメータを設定

ssl_dhparam {path to dhparams.pem};

最後に、設定をリロード

sudo nginx -s reload

OpenSSHでの設定

OpenSSHはlogjam攻撃に対しては安全であるが 多くのSSH実装では固定の素数を使っていたり、1024ビットの暗号キーが含まれていたりする

もっとも簡単な対策としては、クライアントにelliptic-curve Diffie-Hellman(特に Curve 25519)を使うよう 強制すること

KexAlgorithms curve25519-sha256@libssh.org

レアなケースかもしれないが、もしelliptic-curveでないDiffie-Hellmanを使いたい場合

  • Group 1 を無効にする
  • diffie-hellman-group1-sha1鍵交換も無効にする
ssh-keygen -G moduli-2048.candidates -b 2048
ssh-keygen -T moduli-2048 -f moduli-2048.candidates
このエントリーをはてなブックマークに追加
Takatomo Honda avatar
About Takatomo Honda
システム開発 / プロトタイプ開発 / 開発組織の構築 / アプリケーションの内製化 /等、お気軽にご相談ください。