BEAST攻撃とHeartbleedバグの後、POODLEと呼ばれるSSL / TLSの新しい脆弱性について耳にしました。悪用されないようにするにはどうすればよいですか?
- サーバーまたはクライアントのみが影響を受けますか?
- これはOpenSSL / GnuTLS固有ですか?
- どのようなサービスが影響を受けますか?HTTPSのみ、またはIMAPS、SMTPS、OpenVPNなどですか?
この脆弱性を回避する方法の例を教えてください。
BEAST攻撃とHeartbleedバグの後、POODLEと呼ばれるSSL / TLSの新しい脆弱性について耳にしました。悪用されないようにするにはどうすればよいですか?
この脆弱性を回避する方法の例を教えてください。
回答:
SSLは、インターネット上のトランスポートレベルを保護するように設計されています。「ウェブ」、つまりHTTPの場合、これはHTTPSとしてわかりますが、他のアプリケーションプロトコルにも使用されます。SSLv2は、最初に広く使用されているトランスポートセキュリティプロトコルでしたが、その後間もなく安全ではないことが判明しました。後継のSSLv3およびTLSv1は現在広くサポートされています。TLSv1.1とTLSv1.2はより新しく、多くのサポートを得ています。2014年からリリースされたすべてのWebブラウザーではなくても、ほとんどのWebブラウザーがサポートされています。
Googleのエンジニアによる最近の発見は、SSLv3はもはや使用すべきではないことを指摘しています(SSLv2はかなり前に廃止されているように)。サイト/サービスに接続できないクライアントは、おそらく非常に限られています。CloudFlareが発表された彼らの訪問者未満の0.09%がまだのSSLv3に依存していること。
簡単な解決策:SSLv3を無効にします。
はい、usn-2385-1経由でSCSV機能を追加しましたが、SSLv3を無効にせず、接続の両側にパッチが適用されている場合のみパッチが機能するため、問題を完全に軽減しません。パッケージマネージャーの通常のセキュリティ更新プログラムを通じて受け取ります。
だから、まだあなたは(それは設定可能です)のSSLv3を無効にするには、アクションを自分で取らなければなりません。クライアント/ブラウザの将来のバージョンでは、おそらくSSLv3が無効になるでしょう。例えば、Firefox 34はそうします。
実装レベルでUbuntuでSSLv3をデフォルトで完全に無効にすると、HTTPS以外のSSLを使用してもそれほど脆弱ではない可能性が高いため、メンテナーはそれを行わず、このSCSVパッチのみが適用されると思います。
本当に、そのような質問をするのをやめて、いくつかのパラグラフをスキップしてSSLv3を無効にしてください。しかし、あなたが確信していないなら、ここに行きます:
POODLEは、CBC暗号を使用したSSLv3が破損していることを示していますが、SCSVを実装してもそれは変わりません。SCSVは、通常の場合に必要な中間者攻撃で、必要に応じて一部のTLSプロトコルから下位のTLS / SSLプロトコルにダウングレードしないことのみを確認します。
TLSをまったく提供せず、SSLv3のみを提供するサーバーにアクセスする必要がある場合、ブラウザーは実際には選択肢がなく、SSLv3を使用してサーバーと通信する必要があり、ダウングレード攻撃なしで脆弱です。
TLSv1 +とSSLv3も提供するサーバー(推奨されません)にアクセスする必要があり、攻撃者によって接続がSSLv3にダウングレードされないようにしたい場合、サーバーとクライアントの両方にこのSCSVパッチが必要です。
問題を完全に軽減するには、SSLv3の無効化で十分であり、ダウングレードされることはありません。また、SSLv3のみのサーバーと通信することはできません。
以下のアプリケーション固有のセクションを参照してください。Firefox、Chrome、Apache、Nginx、およびPostfixについては、今のところ説明します。
サーバーとクライアントの両方がSSLv3を受け入れる場合(ダウングレード攻撃のために両方がTLSv1 / TLSv1.1 / TLS1.2に対応している場合でも)、脆弱性が存在します。
サーバー管理者として、あなたはのSSLv3を無効にする必要があります今、あなたのユーザーのセキュリティのために。
ユーザーとして、今すぐブラウザでSSLv3を無効にして、まだSSLv3をサポートしているWebサイトにアクセスするときに自分自身を保護する必要があります。
いいえ。これはプロトコル(設計)のバグであり、実装のバグではありません。つまり、実際にパッチを適用することはできません(古いSSLv3の設計を変更する場合を除く)。
はい、新しいOpenSSLセキュリティリリースがありますが、 SSLv3を完全に無効にすることに集中する理由について、以下をお読みください(ただし、理由はX、Y、Zの理由でSSLv3サポートが本当に必要です!)。
まあ、はい、おそらく。さらなる考えと作業のために、これを別のブログ投稿に入れました。iptables
使用できる魔法のルールがあるかもしれません!
私のブログ投稿:POODLEのiptablesを使用して、ネットワークでSSLv3を削除する方法は?
研究者が示すように、現在の攻撃ベクトルは、被害者のマシンで実行されているJavascriptを使用してサーバーに送信される平文を制御することで機能します。このベクターは、ブラウザーを使用しないHTTPS以外のシナリオには適用されません。
また、通常、SSLクライアントでは、セッションをSSLv3(ハンドシェイク機能でTLSv1 +を使用)にダウングレードすることはできませんが、ブラウザーは非常に下位互換性が必要であり、そうします。プレーンテキストの制御とHTTPヘッダーの特定の構築方法の組み合わせにより、HTTPヘッダーが悪用可能になります。
結論:今すぐ HTTPSのSSLv3を無効にし、次のサービスウィンドウで他のサービスのSSLv3を無効にします。
いいえ、これのために証明書を変更する必要はありません。この脆弱性は、セッションデータからのプレーンテキストリカバリを公開し、シークレット(セッションキーまたは証明書キーのいずれか)へのアクセスを提供しません。
攻撃者はセッションハイジャックを実行するためにセッションクッキーのような平文ヘッダーを盗むことができるだけでしょう。追加の制約は、完全な(アクティブな)MitM攻撃の必要性です。
ユーザーとして、ブラウザでSSLv3を無効にする以外に、実際にはそうではありません。さて、常に最新のセキュリティ更新プログラムをインストールするだけです。
サーバーについては、MozillaのTLSサーバーガイドに従ってください。そして、とテストのQualys' SSL Labsのテスト。あなたのサイトでA +評価を得るのはそれほど難しくありません。パッケージを更新し、Mozillaのガイドからの推奨事項を実装するだけです。
さて、SSLv3フォールバック保護と呼ばれる、TLSv1対応クライアントのダウングレード攻撃を回避するパッチがあります。TLSv1 +のセキュリティも改善されます(ダウングレード攻撃は難しく/不可能です)。Ubuntu Security勧告usn-2385-1の最新のOpenSSLバージョンからのバックポートとして提供されています。
大きな問題:クライアントとサーバーの両方が機能するには、このパッチが必要です。そのため、クライアントとサーバーの両方を更新しているときに、とにかくTLSv1 +にアップグレードする必要があります。
ただし、現時点では、ネットワークでSSLv3を廃止してください。セキュリティ標準のアップグレードに努力し、SSLv3を捨ててください。
なんらかの奇妙な理由でSSLv3が本当に必要な場合にのみ、TLSv1 +のセキュリティも向上するため、はい、インストールすることをお勧めします。Ubuntuはusn-2385-1でこの機能の更新を提供します。パッケージマネージャーの通常のセキュリティ更新プログラムを通じて受け取ります。
サーバーは、SSLv3をサポートしている場合にのみ脆弱です。ここにいくつかのオプションがあります:
OpenSSL s_clientの場合:
openssl s_client -connect <server>:<port> -ssl3
接続が成功すると、sslv3が有効になります。失敗すると、無効になります。失敗すると、次のように表示されます。
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
を使用してnmap
:
nmap --script ssl-enum-ciphers -p 443 myhostname.tld
' SSLv3: No supported ciphers found
' が出力されます。ホスト名/ポートを調整します。
cipherscanを使用します。バイナリをクローン/ダウンロードして実行します:
./cipherscan myhostname.tld
'protocols'列の下にSSLv3を含むものはリストされません。
値を開きabout:config
、検索security.tls.version.min
して設定します1
。次に、ブラウザを再起動して、開いているSSL接続をすべて削除します。
バージョン34以降のFirefoxはデフォルトでSSLv3を無効にするため、アクション(source)は不要です。ただし、現時点では、33がリリースされ、34は11月25日に設定されています。
/usr/share/applications/google-chrome.desktop
ファイルを編集します。例えば
sudo nano /usr/share/applications/google-chrome.desktop
で始まるすべての行を編集Exec=
します--ssl-version-min=tls1
。
たとえば、次のような行
Exec=/usr/bin/google-chrome-stable %U
になる
Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U
次に、ブラウザを完全に閉じてください(Chromeアプリがバックグラウンドでブラウザをアクティブに維持している可能性があります!)。
注:google-chromeパッケージの更新ごとにこの.desktop
ランチャーファイルを上書きする必要があります。SSLv3がデフォルトで無効になっているGoogle ChromeまたはChromiumブラウザは、執筆時点ではまだ発表されていません。
現在SSLv3を許可しているApache Webサーバーを実行している場合、Apache構成を編集する必要があります。DebianおよびUbuntuシステムでは、ファイルは/etc/apache2/mods-available/ssl.confです。CentOSおよびFedoraでは、ファイルは/etc/httpd/conf.d/ssl.confです。他のSSLディレクティブを使用して、Apache構成に次の行を追加する必要があります。
SSLProtocol All -SSLv2 -SSLv3
これにより、SSLv2およびSSLv3を除くすべてのプロトコルが許可されます。
MozillaのTLSサーバーガイドで説明されているように、Webサーバーの暗号スイートの構成を改善することを検討してください。例の追加:
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-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
SSLCompression off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"
次に、新しい構成が正しいかどうかを確認します(入力ミスなどはありません)。
sudo apache2ctl configtest
サーバーを再起動します。例えば
sudo service apache2 restart
CentOSおよびFedoraの場合:
systemctl restart httpd
詳細:Apacheドキュメント
次にテストします。サイトが公開されている場合は、QualysのSSL Labsツールを使用してテストします。
Nginxを実行している場合は、他のSSLディレクティブの中の構成に次の行を含めるだけです。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
MozillaのTLSサーバーガイドで説明されているように、Webサーバーの暗号スイートの構成を改善することを検討してください。例の追加:
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-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;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;
サーバーを再起動します。例えば
sudo service nginx restart
参照:Nginxのドキュメント
次にテストします。サイトが公開されて利用可能な場合は、QualysのSSL Labsツールを使用してテストします。
Lighttpdバージョン1.4.28は、SSLv2およびv3を無効にする構成オプションをサポートしています。1.4.28より前のLighttpdリリースでは、SSLv2のみを無効にできます。 Ubuntu 12.04 LTSおよびそれ以前のバージョンは、最高のlighttpd v1.4.28でインストールされるため、これらのディストリビューションでは簡単な修正は利用できません。 したがって、この修正プログラムは、12.04以降のUbuntuバージョンでのみ使用してください。
Ubuntuバージョン12.04またはDebian 6の場合、openSUSEリポジトリから更新されたlighttpdパッケージが利用可能です:http : //download.opensuse.org/repositories/server : /http/Debian_6.0
このパッケージはDebian 6(squeeze)向けですが、12.04(正確)でも動作します
を編集して/etc/lighttpd/lighttpd.conf
、ssl.engine = "enable"
ディレクティブの後に次の行を追加します
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
次に、aでlighttpdサービスを再起動し、sudo service lighttpd restart
前のセクションで説明したssl3ハンドシェイクテストを実行して、変更が正常に実装されたことを確認する必要があります。
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSLから取得。
「日和見SSL」(暗号化ポリシーが適用されておらず、プレーンも受け入れられます)の場合、何も変更する必要はありません。SSLv2でもプレーンより優れているため、サーバーを保護する必要がある場合は、とにかく「必須SSL」モードを使用する必要があります。
「必須SSL」モードがすでに構成されている場合、インバウンド接続のsmtpd_tls_mandatory_protocols設定とアウトバウンド接続のsmtp_tls_mandatory_protocolsを追加/変更するだけです。
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
オプションで、日和見暗号化に対してSSLv3も無効にする場合は(上記で説明したように不要ですが)、次のように無効にします。
smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3
Postfixを再起動します:
sudo service postfix restart
(匿名ユーザーによる未検証の編集。Sendmailに不満です。検証してください。)
これらのオプションは、のLOCAL_CONFIG
セクションで構成されますsendmail.mc
LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3
Dovecot v2.1 +では、以下に/etc/dovecot/local.conf
(またはの新しいファイル/etc/dovecot/conf.d
)を追加します:
ssl_protocols = !SSLv2 !SSLv3
Dovecotを再起動します:
sudo service dovecot restart
古いバージョンでは、ソースコードにパッチを適用する必要があります。
Courier-imapは、Ubuntu 12.04などでデフォルトでSSLv3を許可します。これを無効にし、代わりにSTARTTLSを使用してTLSを強制する必要があります。/etc/courier/imapd-ssl
構成ファイルを編集して、次の変更を反映します
IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"
SSLはHAProxy> = 1.5でサポートされています。
/etc/haproxy.cfg
ファイルを編集して、bind
行を見つけます。追加しno-sslv3
ます。例えば:
bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3
影響を受けていないようです(ソース)。
OpenVPNはTLSv1.0、または(> = 2.3.3)オプションでTLSv1.2を使用するため、POODLEの影響を受けません。
PuppetはHTTPS over SSLを使用しますが、「ブラウザ」クライアントでは使用されず、表示される攻撃ベクトルに対して脆弱ではないPuppetエージェントのみが使用されます。ただし、SSLv3を無効にすることをお勧めします。
私の推薦は使用することですstephenrjohnson / puppetmoduleをしたあなたのパペットマスターセットアップするために人形モジュールを、私はのSSLv3を殺したいくつかの時間前に。
Ubuntuは特異的であるがために、あなたが設定できるNode.jsのプードルでvulnerablityを回避するためではないかもしれないsecureOptions
しrequire('constants').SSL_OP_NO_SSLv3
、あなたがHTTPSまたはTLSサーバーを作成するとき。
追加情報については、https://gist.github.com/3rd-Eden/715522f6950044da45d8を参照してください
POODLEの脆弱性はプロトコル自体の設計上の欠陥であり、実装のバグではないため、パッチはありません。これを軽減する唯一の方法は、ApacheサーバーでSSLv3を無効にすることです。以下の行をssl.confに追加し、Apacheを正常に再起動します。
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"