セキュリティ研究者は、攻撃者がユーザーと 3 つの HTTPS サーバーのうち 1 つとの間の暗号化された通信を盗聴できる可能性がある新たな脆弱性を発見しました。
この問題は、多くのHTTPSサーバーが依然として古くて安全でないSSL(Secure Sockets Layer)バージョン2プロトコルをサポートしていることに起因しています。SSLv2は1996年にSSLv3に置き換えられましたが、正式に廃止されたのは2011年になってからでした。SSLv3も、より新しいTLS(Transport Layer Security)バージョン1.0、1.1、1.2に置き換えられました。
SSLv2は暗号化通信には決して使用すべきではありません。しかしながら、セキュリティ専門家はこれまで、サーバー構成におけるSSLv2のサポートがセキュリティ上の脅威となるとは考えていません。これは、最新のブラウザやその他のTLS対応クライアントがSSLv2を使用しないためです。
しかし、セキュリティ研究者のチームは、その前提が間違っていることを示しました。
新たに発表された研究論文によると、HTTPS サーバーが SSLv2 をサポートしている場合、攻撃者はこれを悪用して、たとえ最新かつ最も安全なバージョンの TLS プロトコルを使用して接続が行われている場合でも、クライアントから傍受した接続を解読できる可能性があるという。
DROWN(Decrypting RSA with Obsolete and Weakened eNcryption)と呼ばれるこの攻撃にはいくつかの前提条件がありますが、非常に現実的です。まず、標的となるHTTPSサーバーは、SSLv2をサポートするか、SSLv2をサポートする別のサーバー(例えばメールサーバー)と秘密鍵を共有する必要があります。
組織では、Web サーバーと電子メール サーバーの両方で TLS 実装に同じ秘密キーまたは証明書を使用するのが一般的です。

サーバーが DROWN 攻撃に対して脆弱であることを示す図。
攻撃者は、被害者と脆弱なサーバー間の数百のTLS接続を監視できる立場にいる必要があります。これは、長期間にわたって接続を監視したり、悪意のあるJavaScriptを使用してユーザーのブラウザに標的のウェブサイトへのバックグラウンドでの接続を繰り返し確立させたりすることで実現できます。
さらに、監視対象の接続では、ハンドシェイク中に RSA キー交換アルゴリズムを使用する必要がありますが、TLS 実装では RSA が依然として最も一般的なキー交換方法であるため、攻撃者にとってこれは問題にならないはずです。
攻撃者は接続を捕捉したら、SSLv2プロトコル経由でサーバーに接続し、クライアントのTLS接続からコピーしたRSA暗号文を改変したハンドシェイクメッセージを送信する必要があります。これらのプローブは失敗しますが、サーバーが応答する方法によって、被害者のTLS接続で使用されている秘密鍵に関する情報が漏洩します。
最悪のシナリオでは、攻撃者は観測された900件のTLS接続のうち1件を復号するために、約4万件のプローブ接続と2の50乗の計算を実行する必要があります。研究者らは、AmazonのEC2クラウドコンピューティングプラットフォーム上でこの攻撃のための計算を実行すると、約440ドルのコストがかかると推定しています。
サーバーに4万件のHTTPS接続を確立するというのは、膨大な数のように聞こえるかもしれませんが、実際にはそうではありません。Apache 2.4サーバーを使ったテストでは、研究者たちは10秒未満で1万件のHTTPSリクエストを完了しました。
2 つの既知の欠陥に対して脆弱なバージョンの OpenSSL ライブラリを使用しているサーバーに対しては、攻撃を実行するのがはるかに容易になります。
脆弱性の1つはCVE-2015-3197として追跡されており、SSLv2自体のサポートが有効になっている場合、DROWN攻撃者が無効化されたSSLv2暗号スイートを使用してサーバーに接続できる可能性があります。この脆弱性は、1月28日にリリースされたOpenSSLバージョン1.0.1rおよび1.0.2fで修正されています。
2 番目の脆弱性 CVE-2016-0703 は、DROWN 攻撃の実行にかかる時間とコストを大幅に削減します。この脆弱性は、その欠陥の影響が理解され、OpenSSL プロジェクトに報告される前の 2015 年 3 月に OpenSSL 1.0.2a、1.0.1m、1.0.0r、0.9.8zf で修正されたバグに起因しています。
CVE-2016-0703 に対して脆弱なサーバー、つまり OpenSSL ライブラリを最後に 2015 年 3 月以前に更新したサーバーの場合、1 台の PC を使用して 1 分以内に DROWN 攻撃を実行できます。
研究者らは、SSL/TLS 通信に関連付けられたポート (ポート 443 (HTTPS)、ポート 25 (STARTTLS を使用した SMTP)、ポート 110 (STARTTLS を使用した POP3)、ポート 143 (STARTTLS を使用した IMAP)、ポート 465 (SMTPS)、ポート 587 (STARTTLS を使用した SMTP)、ポート 993 (IMAPS)、ポート 995 (POP3S)) を介して SSLv2 接続を受け入れる脆弱なサーバーをインターネット上でスキャンしました。
調査の結果、HTTPSサーバーの17%が汎用DROWN攻撃バージョンに対して直接的に脆弱であることが判明しました。さらに、STARTTLSを使用するSMTPサーバーの25%、POP3SおよびIMAPSサーバーの20%、SMTPSサーバーの8%が脆弱でした。
また、SSLv2を直接サポートしていないものの、SSLv2をサポートする他のWebサーバーやメールサーバーと同じ秘密鍵を共有しているHTTPSサーバーも多数発見されました。これにより、SSLv2非対応のサーバーも脆弱となり、影響を受けるHTTPSサーバーの割合は全体で33%に上昇しました。
幸いなことに、DROWNは長期的な秘密鍵を公開しないため、脆弱なサーバーは証明書を交換する必要はありません。代わりに、この攻撃は特定のセッションでクライアントとサーバーがネゴシエートした秘密鍵のみを公開します。
1つのセッションを復号するだけでも、ユーザーのログイン認証情報、セッションCookie、その他の個人情報や金融情報が漏洩する可能性があるため、依然として大きな問題です。しかし、攻撃者は各ユーザーに対してDROWN攻撃を実行する必要があります。
サーバー管理者は、サーバー上でSSLv2のサポートが無効になっていることを確認する必要があります。研究者らは、最も一般的なTLSライブラリとWebサーバーのいくつかについて、その方法について手順を公開しています。
管理者は、サーバーがSSLv2をサポートしていない場合でも、その秘密鍵がSSLv2をサポートする可能性のある他のサーバーで再利用されないようにする必要があります。研究者らは、サーバーが脆弱であり、鍵の再利用の影響を受けるかどうかを判定するテストツールを公開しました。
Alexaのトラフィック上位100万件リストに掲載されているHTTPS対応ウェブサイトのうち、約25%が脆弱であると推定されています。これには、yahoo.com、weibo.com、360.cn、alibaba.com、buzzfeed.com、weather.com、flickr.com、dailymotion.comといった人気サイトが含まれます。