最近報告されたSSLプロトコルのバージョン3(SSLv3)の脆弱性は、中間者攻撃に悪用され、HTTPSで暗号化された平文通信の一部を抽出される可能性があります。Googleの研究者は、このような攻撃がどのように実行され得るかを説明した詳細な解説を公開しています。
これはSSL/TLSの実装に存在する脆弱性ではなく、ブロック暗号を使用する場合のSSLv3プロトコル設計上の脆弱性です。代替となるすべてのストリーム暗号にも弱点があるため、唯一の対策はNGINXおよびNGINX Plusの設定でSSLv3を無効にすることです。
NGINXでSSLv3を無効化
NGINXおよびNGINX Plusでは、SSLv3がデフォルトで有効になっており、HTTPサービスとメールサービスで使用される可能性があります。
[編集者注:TCPトラフィックのプロキシおよび負荷分散は、この記事の初回公開時には完全にはサポートされていませんでした。内容を網羅するため、以下の手順を更新し、TCPトラフィックの保護を追加しました。]
すべてのNGINXおよびNGINX Plusインスタンスで、次の手順を実行します。
- HTTPトラフィックに使用するプロトコルからSSLv3を除外します。次の
ssl_protocolsディレクティブがhttp{}ブロックに存在しない場合は追加します。すでに存在する場合は、既存のディレクティブを編集し、パラメーターリストからSSLv3を削除します。
# in the http{} configuration blockssl_protocols TLSv1 TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE‑2014‑3566)- NGINXまたはNGINX Plusインスタンスでメールトラフィックを処理する場合は、
mail{}設定ブロックで同じディレクティブを作成または編集します。
# in the mail{} configuration blockssl_protocols TLSv1 TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE‑2014‑3566)- NGINXまたはNGINX PlusインスタンスでTCPトラフィックを処理する場合は、
stream{}設定ブロックで同じディレクティブを作成または編集します。
# in the stream{} configuration blockssl_protocols TLSv1 TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE‑2014‑3566)- 設定内にあるほかのすべての
ssl_protocolsディレクティブを特定します(server{}設定ブロック内に含まれている場合があります。このブロックは、http{},mail{},stream{}の各ブロック内に配置できます)。これらのssl_protocolsディレクティブは削除することを推奨しますが、少なくともパラメーターのリストからSSLv3を削除してください。
# in every server{} block ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# omit SSLv3 because of POODLE (CVE‑2014‑3566)- 次のコマンドを実行して、設定を再読み込みします。
# nginx –s reloadこの変更による影響
最新のブラウザーとAPIクライアントはすべてTLSv1以降をサポートしています。SSLv3を無効にすると、Internet Explorer 6を使用しているWindowsXPユーザーに支障が生じます。CloudFlareの推定では、WindowsXPユーザー(同社のトラフィックの3.12%)のうち1.12%が影響を受けます。これは、ユーザー約3,000人に1人に相当します。
この変更は、Webクローラーやその他の自動ボットトラフィックにも影響する可能性があります。
今後の展望
「SSLダウングレード攻撃」では、攻撃者がSSL/TLSハンドシェイクを妨害し、クライアントとサーバーに以前のバージョンのSSL/TLSを選択させる可能性があります。SSLv3を強制的に選択させるために使用されると、SSL/TLS接続がPOODLE攻撃に対して脆弱になる可能性があります。サーバーでSSLv3を無効にすると、この攻撃は不可能になります。
Googleは、SSL/TLSの強制的なダウングレードを防止することを目的とした、TLS_FALLBACK_SCSVというSSL/TLS拡張機能を提案しました。[編集者注:この拡張機能は、RFC 7507として2015年4月に採用されました。]この拡張機能は将来的にOpenSSLに採用され、主要なブラウザにも対応するクライアント側のサポートが追加される可能性があります。これにより、WebサービスはSSLv3をサポートできるようになりますが、レガシークライアントは引き続き脆弱なままです。
とはいえ、この脆弱性を契機にSSLv3がついに廃止される可能性があります。総合的に見れば、その方がよりシンプルで信頼性の高い解決策です。
ほかにできることは?
クライアントソフトウェアを更新し、SSLv3をサポートしないようにすることを推奨します。これにより、SSLv3を無効化する更新が行われていないサービスにアクセスする際も、この攻撃から保護されます。
関連情報
- 脆弱性に関する原報告
- ImperialVioletによる、より簡潔な解説
- 複数のベンダーが推奨事項を公開しています。中でも、Ubuntuの推奨事項は特に包括的です
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります