Apache(httpd)の「logjam」脆弱性を修正する方法


56

最近、非公式に「logjam」と呼ばれるDiffie-Hellmanの新しい脆弱性が公開されました。このページでは、この脆弱性に対処する方法を提案しています。

TLS用のDiffie-Hellmanを正しく展開するための3つの推奨事項があります。

  1. 暗号スイートのエクスポートを無効にします。最新のブラウザーはエクスポートスイートをサポートしていませんが、FREAKおよびLogjam攻撃により、中間者攻撃者はブラウザーをだましてエクスポートグレードの暗号化を使用させ、その後TLS接続を解読できます。輸出暗号は、強力な暗号プロトコルが米国から輸出されないようにする1990年代の政策の名残です。現代のクライアントはエクスポートスイートに依存せず、それらを無効にすることにはほとんどマイナス面はありません。
  2. (エフェメラル)楕円曲線ディフィーヘルマン(ECDHE)を展開します。Elliptic-Curve Diffie-Hellman(ECDH)鍵交換は、既知の実行可能な暗号解読攻撃をすべて回避し、現在のWebブラウザーは、元の有限フィールドDiffie-HellmanよりもECDHEを優先しています。標準のDiffie-Hellmanグループを攻撃するために使用した離散ログアルゴリズムは、事前計算の利点ほど強くなく、個々のサーバーが一意の楕円曲線を生成する必要はありません。
  3. 強力でユニークなDiffie Hellmanグループを生成します。少数の固定グループが数百万台のサーバーで使用されているため、事前計算や盗聴の可能性があります。管理者は、各Webサイトまたはサーバーの「安全な」素数を使用して、一意の2048ビット以上のDiffie-Hellmanグループを生成する必要があります。

上記の推奨事項に従って、サーバーをセキュリティで保護するためのベストプラクティスの手順は何ですか?


回答:


82

リンクし記事から、この脆弱性から身を守るための3つの推奨手順があります。原則として、これらの手順はSSL / TLSで使用する可能性のあるすべてのソフトウェアに適用されますが、ここでは問題のソフトウェアであるため、Apache(httpd)に適用する特定の手順を扱います。

  1. 暗号スイートのエクスポートを無効にする

以下の2.で行う構成の変更に対処します(行!EXPORTの終わり近くで、SSLCipherSuite暗号スイートのエクスポートを無効にする方法です)。

  1. 展開(エフェメラル)楕円曲線ディフィーヘルマン(ECDHE)

このために、あなたのApacheの設定ファイルにいくつかの設定を編集する必要がある-つまりSSLProtocolSSLCipherSuiteSSLHonorCipherOrder「ベストプラクティス」のセットアップを持っています。次のようなもので十分です。

SSLProtocol             all -SSLv2 -SSLv3

SSLCipherSuite          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

SSLHonorCipherOrder     on

注意:これと同様にSSLCipherSuite使用する設定、これは常に変化しており、次のようなリソースに相談することをお勧めします。この1最新の推奨設定をチェックします。

3.強力でユニークなDiffie Hellmanグループを生成する

これを行うには、実行することができます

openssl dhparam -out dhparams.pem 2048

これにより、パラメーターが生成されている間、サーバーに大きな負荷がかかることに注意してください-別のマシンでパラメーターを生成し、scp使用するために問題のサーバーに転送するなどして、この潜在的な問題をいつでも回避できます。

dhparamsApacheで新しく生成されたApache を使用するには、Apache Documentationから:

カスタムDHパラメーターを生成するには、openssl dhparamコマンドを使用します。または、RFC 2409のセクション6.2 の次の標準1024ビットDHパラメータを、それぞれのSSLCertificateFileファイルに追加できます

(エンファシス鉱山)

次に、標準の1024ビットDHパラメータが続きます。このことから、カスタム生成されたDHパラメータがSSLCertificateFile問題の関連項目に単に追加されるだけであると推測できます。

これを行うには、次のようなものを実行します。

cat /path/to/custom/dhparam >> /path/to/sslcertfile

または、最初にリンクした記事のApacheサブセクションに従って、証明書ファイル自体を変更しない場合は、作成したカスタムdhparamsファイルを指定することもできます。

SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"

どのApache構成が特定のSSL / TLS実装に関連している場合でも-一般的にconf.d/ssl.confまたはconf.d/vhosts.confこれは、Apacheの構成方法によって異なります。

このリンクごとに、

Apache 2.4.7より前は、DHパラメーターは常に1024ビットに設定されており、ユーザーが構成することはできません。これは、Red Hatがhttpd-2.2.15-32.el6を使用してRHEL 6 Apache 2.2ディストリビューションにバックポートしたmod_ssl 2.4.7で修正されました。

Debian Wheezyでは、apache2を2.2.22-13 + deb7u4以降にアップグレードし、opensslを1.0.1e-2 + deb7u17にアップグレードします。上記のSSLCipherSuiteは完全には機能しません。代わりに、このブログに従って次を使用してください

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384: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-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384: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:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA

ディストリビューションによっては、Apacheのバージョンがこれらのバージョン番号より新しいかどうかを確認する必要があります。そうでない場合は、可能な限り更新してください。

上記の手順を実行して構成を更新し、Apacheサービスを再起動して変更を適用したら、SSLLabsおよびこの特定の脆弱性に関連する記事でテストを実行して、構成が意図したとおりであることを確認する必要があります。


1
パラメータを生成することでサーバーにかかる負荷については、別のマシンでいつでも生成でき、単純にscpするか、ファイルをターゲットサーバーにコピーアンドペーストすることもできます。実稼働サーバーでパラメーターを生成する必要はありません。
エラティエル

2
構成を変更したら、念のためSSLLabs.comでチェックを実行することもできます。
user2428118

2
Apache / 2.2.22(Ubuntu 12.04)でこの脆弱性を修正する方法はありますか?dhparams.pemをcertificate.crtに追加しましたが、weakdh.org / sysadmin.htmlはまだ文句を言います
tersmitten

2
@tersmittenこれはこれとはまったく別の質問です。
マイケルハンプトン

3
「nice」コマンドで常にキー生成を実行できます。したがって、次のように指定できます:nice 19 openssl dhparam -out dhparams.pem 2048。これはより長く働きますが、未使用のCPU時間のみを消費します。
ズニック

1

:Winni NeessenのパッチをもとにIは、Apache / 2.2.22(多分も使用可能なUbuntuの上のDebian Wheezyに、)の修正公開したhttps://flo.sh/debian-wheezy-apache2-logjam-fix/を THXを- 。ご意見をお寄せください。


3
これは、ソリューションというよりもハック的なハックです。最近のnginxをリバースプロキシとしてApacheの前に置くと、はるかに簡単になり、サードパーティのApacheに依存しなくなります。
あそこの男、

6
なぜこれらのバイナリを信頼する必要があるのですか?
CVn

2
バイナリを信頼する必要はありません。時間があれば、説明されている手順に従ってapache2.2.xを簡単に再コンパイルできます。さらに、セットアップに一意のプライマリキーがあるため、セキュリティがさらに向上します。
フロー

人々がオープンソースソフトウェアの問題を修正するパッチについて文句を言わないことを示唆します。
フロリアンハイグル

@FlorianHeigl私はそのコメントをどうしたらよいかさえわからない
...-BE77Y

-7

上記の「ハッキング」の複雑なルートを進む代わりに、メインのWebサーバーソフトウェアとして(キャッシュやプロキシだけでなく)nginxに切り替えることを検討てください。明らかに、古いApacheエンジンよりも、セキュリティに関しては現在の標準に近いようです。nginxリポジトリを使用することにより、Apacheよりも最新の安定したwebserver-engineが提供されます。

完全に切り替えました。TLSに関する多くの時間のかかる問題解決を助けてくれました-そして、私たちの構成のために、同時に多くのRAMを解放しました。実際、私が慣れ親しんでいたhttpd / apacheの無数の設定の複雑さに比べて、nginxの使用はすっきりシンプルでわかりやすいものでした。好みの問題かもしれませんが、私は転向する前にhttpd / apache rewrite / config / maintenanceにかなり流becomeになっていたので、思っていたよりも簡単でした。nginxの設定に関する適切な最新情報はオンラインで入手でき、そのユーザーベースは巨大で、非常にアクティブで、サポートしやすいです。 https://news.netcraft.com/wp-content/uploads/2018/11/wpid-wss-top-1m-share.png


3
エクスポート暗号を許可するように設定されたnginxは、エクスポート暗号を許可するように設定されたApacheサーバーとまったく同じようにLogjam攻撃に対して脆弱です。また、質問はApacheでのソリューションを求めています。
CVn

2
実際には、解決策は:(例えばDebianやCentOSのと同様に、だけでなく、バックポートバグ修正)あなたは絶対に新しいバージョンを必要とするソフトウェアのより最新のパッケージを提供して配信に切り替え、いずれかまたは自分でパッケージをビルドソースから(それは難しいことではありません)と、パッケージマネージャを使用してインストール、または古いプレーンなソースコードからインストールする(ないハードも、少しより多くの仕事を管理するためにかかります)。「Yソフトウェア内の脆弱性Xをどのように緩和しますか?」と尋ねる質問に対して、「YソフトウェアをZソフトウェアに置き換える」という回答は、しばしば有用な回答ではありません。
CVn

1
ApacheからNginxへのアップグレードはアップグレードではなく、代替です。バックポートが可能です。Apacheソリューションに多くの作業を投資している場合、それを完全に捨てて別のものに置き換えることも多くの作業を必要とします。そして、この質問は、まだ中心としたソリューションについてのApache、Nginxはありません。これについて議論するのにこれ以上時間を費やすつもりはありません。回答を投稿するときは、ページ上部で尋ねられた質問に回答するようにしてください。ApacheからNginxに切り替えることを奨励する回答を投稿する場合は、必ずNginxを許可する質問に投稿してください。
CVn

1
既知の攻撃に対して安全であるようにソフトウェアを適切に構成することは、「ハッキングの複雑なルート」ですか?ssllabs.comで単純なApache設定でA +を取得します。使用するソフトウェアを適切に設定する方法を理解するために時間をかけて調査する必要があります。ハックはありません...
Chazy Chaz

1
@Julius-ダウン投票は、質問に答える際の価値の欠如と関係がある可能性が高く、隠された「アジェンダ」の人々は明らかにnginx対apacheに対して持つかもしれません。たまたま、私の好みのためにnginxのみを使用していますが、この質問に答えたのは私でした。「他のソフトウェアへの切り替え」は、「修正方法(問題)」に対する受け入れられる答えではありません。言うまでもなく、あなたは実際の脆弱性のポイントも完全に見落としていました-それはdiffie-hellman鍵交換であり、Apache(またはnginx、またはsshd、または...)ではありませんでした
BE77Y
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.