logjam脆弱性と対策
logjamとは、DH鍵交換に存在する脆弱性を利用した攻撃。
公式ソースであるWeak Diffie-Hellman and the Logjam Attackに書かれている、脆弱性の詳細と対策についてまとめる。
目次
logjamとは
ディフィー・ヘルマン鍵交換における脆弱性を利用した攻撃
TLSプロトコルに対する攻撃
- 中間者攻撃によりTLSコネクションを512ビットの暗号強度まで弱くすることができる
- 暗号化スイートとしてDHE_EXPORTをサポートする、あらゆるサーバに影響がある
ステートレベルでの脅威
- HTTPS, SSH, and VPNサーバはDH鍵交換に同じ素数を使っており、脆弱性ははこの素数に依存する
サーバに脆弱性があるかのテスト
TLS Logjam Checkにてテストする。
Warningと出れば要対策。
クライアントブラウザの脆弱性テスト
SSL/TLS Capabilities of Your Browserにてテストする。
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