S/MIMEでのバグ(ちょっとまずい)No.20557
秀まるお2 さん 04/11/16 23:16
 
 S/MIMEにちょっとまずいバグが出てしまいました。実は、V3.68付近以下にて、
S/MIME電子署名の検証に脆弱性があるという話がありました。具体的には、電子
署名に疲れた証明書の有効性が検証されてないということと、証明書パスの検証
もされてないという話でした。

 それに対して対処したつもりが、実はまったくテストしてないのがばれてしま
いました。証明書パスが間違っていても、「×」と出なくて、「○ 有効」みた
いに出てしまいます。

 前回は、証明書うんぬんについて何もメッセージを出さなかったのですが、今
回は明らかに間違ったメッセージを出します。

 とういことで、少なくとも現段階にて、S/MIME電子署名での電子証明の証明書
パスは正しく検証されてなくて、得体の知れない証明書機関の発行した怪しい証
明書であっても「×」と出ないことをご承知ください。

 一応、V4.00β5で適当な対処を入れてはいますが、なんせテスト材料が少ない
物で、果たして本当に直ってるかどうかいまいち不定ではあります。

[ ]
RE:20557 S/MIMEでのバグ(ちょっとまずいNo.20571
KOFI さん 04/11/17 12:49
 
KOFIと申します。

> 一応、V4.00β5で適当な対処を入れてはいますが、なんせテスト材料が少ない
>物で、果たして本当に直ってるかどうかいまいち不定ではあります。

試したところ、

× !!!!証明書の検証でエラー:証明書チェーンの内部エラーが発生しました。

というエラーが出て、背景が黒になるのは確認しました。すべての証明書でやったわ
けではありませんが…。背景が変わるのは良いですね。

ただ、メッセージ内容がちとわかりにくいかと。該当証明書をMMCでみてみると「情
報不足のためこの証明書を検証出来ません」というメッセージが出ます。(確かPGP
とかもそんなメッセージが出たような…)

以上、報告まで。

[ ]
RE:20571 S/MIMEでのバグ(ちょっとまずいNo.20574
秀まるお2 さん 04/11/17 13:19
 
 情報ありがとうございます。実はうちでもそのエラーが出るパターンだけは確
認できていました。ただ、他のソフトで「情報不足のため…」と出るというのは
確認してませんでした。

 その「内部エラー」とかいうエラーは、WinVerifyTrustというWindowsの関数
を呼んで返ってくるエラーそのままなんですが、何かちゃんとしたエラーコード
の取得方法があるかもしれないです。

 ということで、まだ未完成ということのつもりで、いろいろ調査してみます。

[ ]
RE:20574 S/MIMEでのバグ(ちょっとまずいNo.20577
ゆうき さん 04/11/17 15:03
 
おそらく言い出しっぺと思われるゆうきです。
V4.00β5でOpenSSLを用いてCAを作成して簡単なテストをしてみましたが、
正常に動いているみたいです。

エラーメッセージの件ですが、KOFI氏がおっしゃるとおり、
もう少しわかりやすいと助かります。
個人的にはIEの証明書のプロパティ->証明書のパス->証明書の状態の内容が
表示されるとよいのではないかと思います。
たとえば
 この証明書の発行者を検出できませんでした。
と表示されます。面倒だとは思いますが...。

他に試していて気になったのですが、暗号化の検証エラーが表示されるとき、
Email = とEmailの内容が表示されない場合があります。

あと直接関係ありませんが、送信済みメールの自動復号化ないし
暗号化前の保存の実装予定はあるのでしょうか?
予定だけ教えていただけると助かります。

[ ]
RE:20577 S/MIMEでのバグ(ちょっとまずいNo.20580
秀まるお2 さん 04/11/17 15:43
 
 テストありがとうございます。実は今日、JPCERTの人とお話したんですが、こ
ういう脆弱性情報を僕が勝手にリークしたらまずかったようです。以後気を付け
ます。

 JPCERTさんによると回避方法があって、しかも影響するソフトウェアベンダー
が当社のみの場合は、修正前に情報を公開することも可能だということなので、
とりあえずJPCERTさんでも情報公開して欲しいという風にはお願いしておきまし
た。

 あと、回避方法としては、とりあえず手っ取り早いのは、問題のメールでマウ
ス右ボタンメニューを出して、「関連するメールを開く・ログをOutlook
Expressで開く」としてOEで見てしまうという方法になります。

> 個人的にはIEの証明書のプロパティ->証明書のパス->証明書の状態の内容が
> 表示されるとよいのではないかと思います。

 Internet Explorerでの「ツール・インターネットオプション・コンテンツ」
の「証明書...」から表示される証明書ウィンドウを鶴亀メール上からも出して
やりたいと思っていろいろ方法を探したんですが見つかりませんでした。

 とりあえず証明書パスを表示するだけなら出来そうな気がします。なんとか考
えてみます。

>  この証明書の発行者を検出できませんでした。
> と表示されます。面倒だとは思いますが...。

 実は僕もよく分かってないのでなんですが、以前は
CertVerifyCertificateChainという関数を呼んでそれのエラーコードを
FormatMessage関数を通してそのまま表示するという作りになってました。それ
がなぜかうまくエラー検出してくれなかったようで、今回は、WinVerifyTrustと
いう関数を使いました。それでとりあえず、エラーの場合はエラーが返るように
はなったんだと思います。

 今回は、その関数から返るエラーコードをそのままFormatMessage関数に渡し
てメッセージ文字列に変換してるだけでして、それ以上のことは僕もまだ分から
ないです。

 やはりこのまま行き会ったりばったり的に作っていても仕方がないので、サン
プルプログラムを探してみます。

> あと直接関係ありませんが、送信済みメールの自動復号化ないし
> 暗号化前の保存の実装予定はあるのでしょうか?

 今のところいいアイデアが思いつかないです。やはり、送信の瞬間に暗号化し
てエンコードするって形にするしか無いですかね。S/MIMEの場合はパスフレーズ
の入力が必要ないので、それでもいいような気がします。Outlook Expressも送
信する瞬間に暗号化してるようだし。

 はて、そういうオプション追加か、あるいはS/MIMEの場合は常にそういう動作
(送信時に暗号化)にしようかなぁと…。

[ ]
RE:20580 S/MIMEでのバグ(ちょっとまずいNo.20585
ゆうき さん 04/11/17 17:02
 
> 今のところいいアイデアが思いつかないです。やはり、送信の瞬間に暗号化し
>てエンコードするって形にするしか無いですかね。S/MIMEの場合はパスフレーズ
>の入力が必要ないので、それでもいいような気がします。Outlook Expressも送
>信する瞬間に暗号化してるようだし。

送信時に行うのではなく、送信済みフォルダにあるメールを表示するときに
復号化して、暗号化されたメールと置き換えることはできませんか?

つまり受信メールと同じような挙動です。

上記の方法ならば、
  ・受信メールの復号化と送信済みメールの復号化の挙動の一致
  ・PGPでも実装可能
  ・送信の瞬間に暗号化する必要がない
というメリットがあるのではないかと思います。

鶴亀の実装方法は詳しくはわかりませんが、上記の方法はいかがでしょうか?

> はて、そういうオプション追加か、あるいはS/MIMEの場合は常にそういう動作
>(送信時に暗号化)にしようかなぁと…。

オプションの方が良いと思います。

[ ]
RE:20585 S/MIMEでのバグ(ちょっとまずいNo.20591
秀まるお2 さん 04/11/17 18:47
 
 僕が「送信時に暗号化」と言ったのは、あくまで、送信時に生成するエンコー
ドされたメールを生成する時に、そのエンコード元のデータ用に暗号化をするだ
けって話でして、送信したらしたで、送信済みメールが暗号化された物に置き換
わるという話ではありません。

 なので、これでもいいような気はします。暗号化された内容が知りたければ、
送信ログを見ればいいし。

> 送信時に行うのではなく、送信済みフォルダにあるメールを表示するときに
> 復号化して、暗号化されたメールと置き換えることはできませんか?

 それはつまり、現状での、受信系メールを復号する時に「復号結果の扱い」を
「現在フォルダに保存する」を指定したのと同じことを、送信系メールでも出来
るようにって話ですかね。だとしたら、それは非常に簡単な話です。

 これだと、1つ1つのメールを手作業で「復号」してやらないといけないです
が…。まぁとりあえずそれでいいってことか、あるいはそれでご不満だとしても、
そういう選択が出来ない現状の作りはおかしいので、これはこれですぐ直します。


-------
 肝心の、証明書の検証の方がまだ未完成ですが

[ ]
RE:20591 S/MIMEでのバグ(ちょっとまずいNo.20592
ゆうき さん 04/11/17 19:40
 
> それはつまり、現状での、受信系メールを復号する時に「復号結果の扱い」を
>「現在フォルダに保存する」を指定したのと同じことを、送信系メールでも出来
> るようにって話ですかね。

はいそうです。

最終的に送信済みのメールが復号化のための何らかのアクションの後に、
容易に閲覧でき、本文の検索が可能になればかまいません。

> これだと、1つ1つのメールを手作業で「復号」してやらないといけないです
>が…。

はい、僕としてはとりあえずそれで十分です。

検証の方で忙しいにも関わらず、お手数をおかけしました。

[ ]
RE:20592 S/MIMEでのバグ(ちょっとまずいNo.20593
秀まるお2 さん 04/11/17 21:12
 
 この修正だけなら簡単なので、今対応しました。一応テストもしました。

 S/MIMEでの証明書の検証については、ぼちぼちgoogle検索などしてみます。

[ ]
RE:20574 S/MIMEでのバグ(ちょっとまずいNo.20596
KOFI さん 04/11/17 22:00
 
KOFIです。

> 情報ありがとうございます。実はうちでもそのエラーが出るパターンだけは確
>認できていました。ただ、他のソフトで「情報不足のため…」と出るというのは
>確認してませんでした。

 今出来るパターンだけですが、もうちょっと詳細を報告させて頂きます。署名され
た(暗号化されていない)メールで検証しています。
(ちなみに、べつに動きがおかしいという訳ではありません。)

■メールアドレス不一致テスト
× !!!!メールの送り主と証明書のメールアドレスが一致しません。
      メールの送り主: ?????????@?????.????
○ 証明書は有効期限内です。
× !!!!証明書の検証でエラー:証明書チェーンの内部エラーが発生しました。

■証明書期限切れテスト
○ 証明書のメールアドレスとメールの送り主は一致しています。
× !!!!証明書は期限切れです。
× !!!!証明書の検証でエラー:現在のシステム時計または署名ファイルのタイムス
タンプで確認すると、必要な証明書の有効期限が切れています。

■mmc(証明書スナップイン使用)の中間証明機関等に発行元証明書がない場合
○ 証明書のメールアドレスとメールの送り主は一致しています。
○ 証明書は有効期限内です。
× !!!!証明書の検証でエラー:証明書チェーンの内部エラーが発生しました。

→これは先ほど書き込んだように、mmcでは「情報不足のためこの証明書を検証出来
ません」となります。

■すべて問題のない証明書の場合
○ 証明書のメールアドレスとメールの送り主は一致しています。
○ 証明書は有効期限内です。
○ 証明書パス(certificate chain)に問題はありせん。

> その「内部エラー」とかいうエラーは、WinVerifyTrustというWindowsの関数
>を呼んで返ってくるエラーそのままなんですが、何かちゃんとしたエラーコード
>の取得方法があるかもしれないです。

TRUST_E_PROVIDER_UNKNOWNあたりなんですかね?使ったことないのでよくわかりませ
んが…。

では。

[ ]
RE:20596 S/MIMEでのバグ(ちょっとまずいNo.20597
秀まるお2 さん 04/11/17 23:37
 
 ちゃんとエラーコードを調べてみたら、

 CERT_E_CHAINING

 となっていて、英語では、

 A certificate chain could not be built to a trusted root authority.

 というエラーだそうです。Excite翻訳で翻訳したら、

 信頼された根権威に証明書鎖を構築することができないかもしれません。

 となりました。

 とりあえず英語のまま表示しようかなぁと…。

 mmcってソフトでの話を教えていただきましたが、僕の所で同じメールを
Outlook Expressで開くと、

 ? 情報不足のためこの証明書を検証出来ません

 と出てきます。ちなみにBecky!のS/MIMEプラグインだと、

 !!!!!!!!信頼できる証明書の発行元が見つかりません

 と出ますが、そもそも僕の所では正しい証明書で署名したメールも同じエラー
が出ます。???

 まぁ、深く考えなくても、とにかく「×」が出ればいいような気がするので、
英語のままにしてみます。

[ ]
RE:20597 S/MIMEでのバグ(ちょっとまずいNo.20599
秀まるお2 さん 04/11/18 00:29
 
 すみません。元の「証明書チェインの検証がうまく出来てない」のバグの件で
すが、やっと解決策が分かりました。CertGetCertificateChainで返ってくる
CERT_CHAIN_CONTEXTの中に、TrustStatusってのがあって、そこにいろんなエ
ラー関係の情報が既に入ってました。CertVerifyCertificateChainPolicyなんて
呼ぶ必要ありませんでした。

 ただ、そこのエラーコードの説明が全部英語なので、それはそれで分かる範囲
で翻訳しつつ、分からない物は英語のまま表示します。

 証明書のパスの表示もうまく出来たし、今度こそ大丈夫かなぁと…。

 (すっかり独り言モードになってるけど)

[ ]
RE:20577 S/MIMEでのバグ(ちょっとまずいNo.20619
秀まるお2 さん 04/11/19 12:55
 
 今さらのお返事になりますが、

> 他に試していて気になったのですが、暗号化の検証エラーが表示されるとき、
> Email = とEmailの内容が表示されない場合があります。

 証明書の中に複数メールアドレスが登録されてるケースにまったく対応してま
せんでした。別のユーザー様からも指摘されました。

 暗号化/電子署名する時はちゃんとメールアドレスの別名もチェックしてまし
たが、証明書の検証の処理では完全に忘れてました。さっそく修正させていただ
きます。

[ ]
RE:20619 S/MIMEでのバグ(ちょっとまずいNo.20620
秀まるお2 さん 04/11/19 13:17
 
 すみません。さらにこれは別のバグでした。つまり、暗号化する時のエラーの
話ですね。そっちも調べて直します。

[ ]