古いSymantecの証明書 The SSL certificate will be distrusted in M70.

せっかく古いSymantec-rooted Infrastructure発行のサーバ証明書を持っているので実験です。distrust後も「警告」と書いてあるところがあったりしますが、「証明書のエラー」です。続行しちゃダメ。ゼッタイ。
続きを読む

サーバ証明書更新 The SSL certificate will be distrusted in M70.

ChromeおよびブラウザコミュニティによるSymantecの証明書の順次警告、無効化問題だそうで、該当する証明書(うちで該当するのはもちろん格安なDV RapidSSL)持ってるからさっさと更新せい、というメールが証明書屋さんから何度も来ました。TLSAの更新が必要なのでそれなりにめんどかったですが、本サイトも含めて2サイトの証明書を更新いたしました。皆さんどうしているのか見ようとしたところ…
続きを読む

Notable Changes in NSS 3.27 CA certs. - Removal of 'Equifax Secure Certificate Authority'

某メールサーバ宛TLSでエラー発生

確認してみます。

3つ送られた証明書の最後の証明書のi:のCA証明書が無いのでエラーになっているようです。確かにNSS 3.27で削除された(コード)ようですが念のためコピペして食わせて確認してみます。 続きを読む

Comodo affiliate RA was compromised

Comodoより重要サイトの証明書が不正な相手に発行されたという記事。RAはどこだったんでしょうか(参考1, 参考2)。ちょっと昔のnull-prefixの証明書の話とは異なります。

How to avoid fraudulent SSLでは、失効した証明書を

  • OCSPレスポンダが提供されていてOCSPをサポートしているクライアント使用でも
    • OCSPを有効にしていない
    • OCSPレスポンダの応答がタイムアウトした場合に有効な証明書とみなすようにしている

    場合に、クライアント側が有効な証明書とみなしてしまう

  • 大手ブラウザはそのような状況用にブラックリストを更新 ⇒ 最新にせよ
  • OCSPを有効にせよ、タイムアウト時に証明書を無効として扱うようにせよ
  • EV SSLを使用せよ(いきなりサーバ側の話)(現在CAはOCSPをサポートしないといけない 参照: EV SSL Certificate Guidelines 11.1.1)

などの、サーバ証明書を売る立場での説明があります。特に今回のような大きな問題の場合は、クライアントが検証用にCRLをダウンロードするタイミングよりOCSPレスポンダへの問い合わせのタイミングのほうが早い場合が多いのでしょう。

秘密鍵がポストされてしまったようなので、ブラックリストでの対応があるクライアントは最新にアップデート、OCSPに対応している場合はタイムアウトした場合も無効となることの確認が急がれます。

参考: MS01-017

CVE-2011-0411 Plaintext injection in STARTTLS

多くのSMTPクライアントはサーバ証明書を検証しない -> その場合そもそもMITMがいない確認ができていないので常にcommand injectionに脆弱な状態 -> だからこの問題は見た目より大きな問題ではない。という皮肉が効いてます…今時だとスマホアプリやIoT機器(こちらはそれなりの値段で買わないと手に入らないものが多いので比較的公開されてませんが、某社製のSSLスタックを積んでたりすると…)のサーバ証明書の検証不備の脆弱性がその状態ですね。

というわけでSTARTTLSからみでSMTP over TLS以外にもしばらく後続がありそうです。

HTTPS Everywhere – 自分で任意に指定したサイトで自動的にhttpsになるようにする – Force-TLSをやめたときの覚え書き

自動的にhttpsにするといえば、HSTSをFirefoxも4にて実装、とかのサーバ側で何かしないといけない仕組みの話題ばかりで、ブラウザ側に能動的に設定するための情報が探しにくくなったようです(Firesheepのおかげでまたそうでもなくなったようですが…)。かくて、自分で登録したサイトでhttpsを強制するFirefoxプラグイン Force-TLS

と、PC引っ越し用に覚え書きしましたが、あろうことか引っ越し先PCではサイトが追加できなかった(すごいところに設定ファイルがあったりするのだろうか)ので、問題の検証もせずにさくっと方針転換でhttps://addons.mozilla.org/firefox/tag/httpsを眺めてHTTPS Everyehereを試しました。https://www.eff.org/https-everywhere/rulesetsに従って簡単な正規表現を含むシンプルなXMLを作成。(2010/11/25追記: 自動更新版だと0.9.0よりtargetで1次フィルタするようになりました。targetが無いと気づかないうちにルール全体が無視されているので注意です。要エラーコンソールでの確認)

書かれている場所に保管してFirefox再起動。さくっと動作。設定ダイアログにも指定したものたちがちゃんと登場。ファイル作る手間があるけどルールが汎用的に作れるのでこっちの方が便利かも。

2010/11/25追記: 一部であらかじめ登録されたサイトにしか使えないと受け取れる説明がされているようですが、HTTPS Everywhereは説明や上記のとおり、自分の好きなサイトを指定できます。

2010/11/25追記: 同じく一部で家庭用の無線LANでは不要と受け取れる記述もありますが、家庭用無線LANでも暗号化無しであったり弱い暗号でtap可能であれば同じこと(パスワード漏れ & セッションハイジャックされる可能性のある状態)です。モニタポートのある有線LANのスイッチングハブや、買うのが難しいでしょうがリピータハブにアクセス可能である状況もまた同じことです。Firesheepを相手に対策するのではなく、平文パスワードと、そしてセッションハイジャック対策としてクッキーを秘匿するためにHTTPSを使用すると考えなければいけないです。URLがhttps://で始まっていても、secure無しcookieで内容にHTTPが混在していたりJavaScriptでHTTPでアクセスしにいってしまっては元も子もないじゃん、というサイトもあり、今に始まった問題では全然ないですが、script kiddieでもFiresheepで簡単にセッションハイジャックできるようになったという状況のおかげでそのようなサイトが改善されるチャンスでもあります。

HSTSはSSL/TLSが有効なコンテキストにて、Apache HTTPDならば一番簡単な使い方で

とするだけです。

server does not support RFC 5746, see CVE-2009-3555 (was: potentially vulnerable to CVE-2009-3555) Apache HTTPD + OpenSSLでRFC5746リネゴシエーション対応

CVE-2011-0411 Plaintext command injection in STARTTLSはこちら


Bug 549641の変更をここのタイトルにも入れてみました(2010/9/14) 。元々「潜在的に脆弱」という微妙なメッセージから書き起こしたエントリなので、文章のつながりが悪くなったかもしれません。


CVE-2009-3555はDescriptionによればSSL3.0(とおそらくそれより前)とTLSプロトコルにおいて、”renegotioation”でMITM攻撃者がデータを挿入可能である、というものになり、去年の11月に業界(?)を震撼(?)させたものです。

この問題を解決するべくIETFのTLSな方たちは世のため他人のため、ものすごい勢いで”secure renegotiation”(安全な再ネゴシエーション)を定義して本年2月までにRFC5746にしてくれました。

表題のメッセージはFirefoxがhttps://なサイトにアクセスした場合や、ThunderbirdがSSL,TLSでPOP3, IMAP4, SMTPアクセスした場合などなどでエラーコンソールにログされるものですが、mozilla wiki Security:Renegotiationを超訳すると、「まだ問題があるwebサーバだらけで、今よく見えるように警告してしまうとそれを無視しましょうとのたまう人が出てきて、ユーザは似たような警告も含めて無視する習慣が付いてしまうだけで世の中が幸せにならない。だから潜在的に問題のあるサーバはそっとエラーコンソールにログするだけ」とのことです。実際にはRFC5746を実装していないwebサーバとのTLS/SSL使用時に表示されるので、webサーバ側にrenegotiationを全て無効にする形でのパッチが適用されている場合、webサーバとしてはCVE-2009-3555に対して脆弱でなくでもそれを通信中のフラグ(RFC5746対応している場合にはServerHelloのextentionのrenegotiation_infoが付いてくる)では検知できないのでFirefoxのエラーコンソールに表題のメッセージがログされます。

表題のメッセージを消す==webサーバをRFC5746のsecure renegotiationに対応させるためにすることをざっくり書くと、OpenSSLとApache HTTPD(mod_ssl)2.2系列の場合、

  • 対象のwebサーバにhttps://で接続してFirefoxのエラーコンソールに表題のログが表示されることを確認。
  • 先にOpenSSLを0.9.8m以降にアップデート。(2014/4/8現在1.0.1g以降をお勧め)
  • 次にApache HTTPD 2.2系列の場合2.2.15以降(2010/9/14現在2.2.16以降をお勧め)にアップデートかリビルド。
  • 再度https://で接続してFirefoxのエラーコンソールに表題のログが表示されなくなったことを確認。

となります。(悲しいことにrenegotiationしないと続行できない状況の場合、いまだRFC5746非対応であるIE(←末尾に追記)RFC5746非対応ブラウザなどで問題になり、わざわざmod_sslにSSLInsecureRenegotiationディレクティブを使用して古いrenegotiationを有効にせざるをえなくて困っているサーバ管理者の方も多いです)

その他にもご自分のwebサーバがインターネット上にあればQualys SSL LabsのSSL Server Testにて、SSL,TLS全般の確認ができます(表示されているように、別のURLで流れさるまでの何時間かURLと結果がさらされます(その後指定すればさらされないようになりました)。さらに上位と下位は別枠で表示してくれます)。結果のMiscellaneousのRenegotiationの項に、安全なのか古いリネゴが使えてしまう状態か、などが表示されます。

クライアントのRFC5746対応も必要ですが、表題のログがエラーコンソールに出ている時点で当然古いrenegotiationを問題視しているwebブラウザを使用していることになるのでここでは考えないことにします。webブラウザのRFC5746対応はmozilla wiki Security:Renegotiationに書かれているようにhttps://ssltls.de/で確認できます(←末尾にちょっと追記)。有るべき姿はwebブラウザ、webサーバに限らず、「SSL,TLSを用いた全てのクライアントとサーバがRFC5746に対応していること」になります。

ではwebサーバとしてはCVE-2009-3555に対して脆弱でなくてもログされる場合(薦められた状態ではないですが)はというと…

例えばOpenSSLのChangeLogを見ると、

となっていて、またFreeBSD Security Advisories2009/12/3 FreeBSD-SA-09:15.sslでは

となっています。ソースレポジトリを見ると2010/6/15現在-CURRENTとRELENG_8(-STABLE), RELENG_8_1がOpenSSL 0.9.8nであり、他は OpenSSL 0.9.8eとかkとか + SA-09:15 ということになるようです。

さらにApache HTTPD 2.2.15のChangeLogでは、

となっているので、Apache HTTPD(mod_ssl) 2.2.15以降の2.2系列をOpenSSL 0.9.8m以降のライブラリでコンパイル、リンクすることでRFC5746のsecure renegotiation対応になります。

Apache HTTPDにSSLInsecureRenegotiation指定をしない前提でまとめていくと2010/6/15現在


FreeBSD 8.1(現在ベータ1,7月リリース予定)のOpenSSLは0.9.8nなのでRFC5746対応。したがってCVE-2009-3555に対しては脆弱ではない。


FreeBSD 8.0, 7.3, 7.1各セキュリティブランチを最新の状態にしている人のOpenSSLは0.9.8? + SA-09:15なのでRFC5746は対応していないが、renegotiationを全部無効にすることでCVE-2009-3555に対しては脆弱ではない。


OpenSSL 0.9.8l
あるいはFreeBSD 8.0, 7.3, 7.1各セキュリティブランチのOpenSSL(0.9.8? + SA-09:15)
 + Apache HTTPD(mod_ssl) 2.2系列全部
の場合は

  • 表題のエラーコンソールログは表示される(RFC5746非対応)
  • CVE-2009-3555についてwebサーバは脆弱ではない(ただしrenegotiationがすべて無効)

OpenSSL 0.9.8m以降(2010/6/15現在OpenSSL 1.0.0a以降をお勧めします)
 + Apache HTTPD(mod_ssl) 2.2.15以降の2.2系列
の場合は

     

  • 表題のエラーコンソールログは表示されない(RFC5746対応)
  • CVE-2009-3555についてwebサーバは脆弱ではない(RFC5746対応)

要注意なのは、Apache HTTPD 2.2.15にしただけで安心してしまう次のパターンでしょうか。現実的にMITM攻撃が成立するかは考えずにChangeLogからだけ言うとするとCVE-2009-3555に対してwebサーバは脆弱です。
OpenSSL 0.9.8k以下(FreeBSDの場合は0.9.8k以下かつSA-09:15のアップデートがされていない場合)
 + Apache HTTPD 2.2.15以降の2.2系列、
    あるいは2.2.14 + http://www.apache.org/dist/httpd/patches/apply_to_2.2.14/CVE-2009-3555-2.2.patch
の場合は、

     

  • 表題のエラーコンソールログは当然表示される(RFC5746非対応)
  • CVE-2009-3555に対しては * 脆弱である *
          (クライアントがinitiateした場合のrenegotiationを拒否しているだけ)

まずサーバ側の古いrenegotiationの実装が一掃され(同時にメジャーwebブラウザが全部RFC5746対応するという壁も大きいようで)、そしてRFC5746実装が使用され、renegotiationの一部や全部を無効にしただけのパッチがおおよそ一掃されて、それからようやく表題のエラーコンソールのログが派手な警告なりエラーなりに格上げされることになると思われますが、まだまだかかりそうですね…
例:https://bugzilla.mozilla.org/show_bug.cgi?id=555952

FreeBSD 8.0, 7.3, 7.1 + Apache HTTPD(mod_ssl)で表題のエラーコンソールログが出なくなるようにする、つまりRFC5746対応にするには、2010/6/15現在SA-09:15ではOpenSSLのrenegotiationを全部無効にしているためApache HTTPD(mod_ssl)を2.2.15にするだけでは不十分であり、こどもの日にportsがOpenSSL 0.9.8mに対応された(2010/6/15現在1.0.0a対応)ので、これを使うのが早そうです。

最後の表示では、特に/usr/lib/や/lib/ではなくて、/usr/local/lib/libssl.so.*, /usr/local/lib/libcrypto.so.*であることを確認する必要があります。

あらかじめFirefoxでhttps://接続してエラーコンソールに表題のものがログされていることを確認した後、アップデート作業後にログされなくなればRFC5746対応完了です。


Windows関連ちょっとだけ追記(2010/9/14)。 2010年8月の月例(日本だと8/11あたり)のアップデート群に含まれていたKB980436: MS10-049: Vulnerabilities in SChannel could allow remote code executionによってWindowsのTLS/SSLスタックがRFC5746対応されましたが、それが使われるWindows XPのIEで https://ssltls.de/ のペンギンさんが表示されないのを確認しようとしてたこともあって時間がとれずに一月経ってしまいました。どうやらmod_nssを使った環境を作らないとちゃんと確認できなそうなので、先ほどざっと確認した現象だけ列挙しておきます。

  1. Opera,Firefoxは結構前からペンギンさんが表示される。
  2. KB980436が適用されたWindows Vistaではペンギンさんは表示される。
  3. KB980436が適用されていてもWindows XP, 2003ではIEのバージョンによらず、ClientHelloのextentionでもSCSVでもペンギンさんは表示されない。
  4. Windows XP(IE)のClientHelloのextentionにはtype 0xFF01(renegotiation_info)しかないが、Vista(IE)やOperaはそれに加えてserver_nameやstatus_requestなどがある。
  5. HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL にUseScsvForTlsという名前のDWORD値を作成して1をセットすると、Windows XP(IE)ではClientHelloのextentionが無くなる。Firefoxはserver_nameやstatus_requestなどがある。どちらもrenegotiatoin_infoは無く、cipher suiteに0x00FFが追加されている(SCSV)。

次はmod_nss環境を作成してnssのデバッグログを吐かせるところからになりますが、誰かとっくのとうに解決していたら教えてくださいませ。

なおWindows(IE,IISなど)で古いリネゴを拒否する方法はKB980436に書かれています。レジストリをいじって

で再起動すればサーバ(IISなど)が、そして

で再起動すればクライアント(IEなど)が古いリネゴを拒否するようになります(いろいろ使えなくなるものが出るようなので、まだ不便かもしれません)。

その他の参考リンク