情報処理推進機構セキュリティセンター(IPA)
「APOP(エーポップ)方式におけるセキュリティ上の弱点(脆弱性)の注意喚起について」
そもそも平文で認証を行うPOPを利用しているユーザはほとんどいないはず…であるがこれで、いま現在一般的に行われているAPOP認証も使えないものとなってしまった。
APOPパスワード漏洩によるさらなる重大な問題は、メールの不正送信をされる危険があることだ。
単純にAPOPパスワードが漏洩するだけでは、メールサーバに保存されている受信メールの読み出しが行えることと、サーバ上のメール消去が自由にできるようになるだけである。
ここで注意が必要なのは、一般的なメール送信の認証方法はAPOP認証に通過したネットワークからを無条件で許可する、という仕組みである。
・メールの受信プロトコルがPOP/APOP
・メールの送信認証がPOP before SMTP
・SMTPサーバとPOPサーバが同じ
という環境である場合、漏洩したアカウントで自由にメールを送ることが可能になる。
SMTP認証でSMTP-AUTHが提供されている場合にはこの限りではないが、今回のAPOP問題の根本原因はMD5ハッシュのコリジョンであるから、この先も安全が保証されるわけではない。
そこで、解決方法のひとつである「POP over SSL」である。
「POP over SSL」を利用することによって、メールの読み出しクライアントとPOPサーバとの間の通信はSSLにより暗号化される。アカウントのみならずPOPサーバから読み出し中のメール本文そのものも完全に隠蔽できるわけだ(※メールサーバ間の通信は平文なので注意)。
まずは、tcpserverでSSL/TLSが利用できるようにするパッチをダウンロード。
MD5チェックサムはこちら。
cbe2443539d5289ffb5ae2a036e0ba3d ucspi-tcp-ssl-20050405.patch.gz
tcpserverにパッチを適用する。イチから構築するときは、以下のパッチも忘れずに。
「rblsmtpd をAレコード対応にするパッチ」 ucspi-tcp-0.88.a_record.patch
「glibc2.3.1以降に対応するパッチ」 ucspi-tcp-0.88.nobase.patch
(※) ucspi-tcp-0.88.errno.patch は ucspi-tcp-ssl-20050405.patch に同梱されています。
$ cd /usr/local/src/
$ wget http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz
$ gzip -d ucspi-tcp-ssl-20050405.patch.gz
$ cd ucspi-tcp-0.88
$ patch -p0 < ../ucspi-tcp-ssl-20050405.patch
patching file FILES
patching file Makefile
patching file TARGETS
patching file addcr.1
patching file argv0.1
patching file date@.1
patching file delcr.1
patching file error.h
patching file finger@.1
patching file fixcrio.1
patching file hier.c
patching file http@.1
patching file mconnect.1
patching file recordio.1
patching file tcp-environ.5
patching file tcpcat.1
patching file tcpclient.1
patching file tcprules.1
patching file tcprules.c
patching file tcprulescheck.1
patching file tcprulescheck.c
patching file tcpserver.1
patching file tcpserver.c
patching file who@.1
$ patch -p1 < ../ucspi-tcp-0.88.a_record.patch
patching file rblsmtpd.c
$ patch -p1 < ../ucspi-tcp-0.88.nobase.patch
patching file rblsmtpd.c
Hunk #2 succeeded at 228 (offset 38 lines).
新規インストールなら、下記コマンドで /usr/local/bin/tcpserver (SSL対応) がインストールされる。
$ make
$ su
# make setup check
./install
./instcheck
すでにtcpserverがインストールされているなら、現在稼働している環境に影響を与えないように、別名でインストール(上記手順で上書きでも構いません)。
$ make
$ su
# cp tcpserver /usr/local/bin/tcpserver-ssl
サーバ証明書を作成する。応答ホスト名は、クライアントの接続先ホスト名と一致させてください。
# make cert
openssl req -new -x509 -nodes \
-out cert.pem -days 366 \
-keyout cert.pem
Using configuration from /usr/share/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..++++++
..............++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]: JP
State or Province Name (full name) [Berkshire]: Tokyo
Locality Name (eg, city) [Newbury]: Chiyoda
Organization Name (eg, company) [My Company Ltd]: example.com ← 企業名・団体名・ドメイン名など
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []: mail.example.com ← 応答ホスト名
Email Address []: postmaster@example.com ← 管理者メールアドレス
作成した秘密鍵を設置し、適切にパーミッションをセット。
# mkdir /var/qmail/server.key
# cp cert.pem /var/qmail/server.key/
# chmod 700 /var/qmail/server.key/; chmod 600 /var/qmail/server.key/cert.pem
# rm cert.pem
qmail起動スクリプトの修正。tcpserver オプションに -s を追加し、-n オプションの引数に /var/qmail/server.key/cert.pem を指定する。Listenポートは「pop3s」または「995」です。
# vi /etc/rc.d/init.d/qmaild
--- (一部抜粋) ---
# port 110 POP3
/usr/local/bin/tcpserver -R -l mail.example.com 0 pop3
# port 995 POP3-SSL
/usr/local/bin/tcpserver-ssl -sR -l mail.example.com -n /var/qmail/server.key/cert.pem 0 pop3s
編集が終わったら、qmailを再起動。この状態で、110番と995番ポートが立ち上がっていればOK。
# /etc/rc.d/init.d/qmail stop
# /etc/rc.d/init.d/qmail start
# netstat -an | grep 995
いよいよ、クライアント側のメールソフトの設定を変更。
Becky!2であれば、「ツール」→「メールボックスの設定」→「基本設定タブ」→「サーバ情報」の「POP3サーバ欄」で "POP3S" にチェックを入れる。
Outlook Expressであれば、「ツール」→「アカウント」→「メールタブ」の設定アカウントを選択し、「プロパティ」の「詳細設定タブ」のサーバーのポート番号のうち、受信メールのポート番号を "993" に変更し、"このサーバーはセキュリティで保護された接続(SSL)が必要" にチェックを入れる。
Becky!2では、「詳細タブ」の「SSL/TLS関連」で "証明書を検証しない" にチェックを入れることで警告がでないようにできるが、Outlook Expressの場合では「接続しているサーバーは、確認できないセキュリティ証明書を使用しています。」と警告ポップアップが出てしまうので、秘密鍵から公開鍵を作成し、メールソフトにインポートしておこう。
秘密鍵から公開鍵をエクスポート。
# cd /var/qmail/server.key/
# openssl x509 -in cert.pem -outform DER -out cert.der
できあがった公開鍵を、メールソフトにインポートする。
この公開鍵は、WWW上に広く公開しても問題ない。(後述の、SMTP over SSLでは外部SMTPサーバからのメール受信で必要である)
Windowsであれば、手元にダウンロードした「cert.der」ファイルを右クリックし、「証明書のインストール」ウィザードからインポートする。そのさい、Verisignなどで署名されたサーバ証明書でない場合には Fingerprint (拇印) の確認画面が表示されるので、あらかじめ作成したサーバ証明書の Fingerprint も公開しておいた方がいいだろう。
サーバ証明書の Fingerprint の確認方法は、以下のコマンドで。
当サイトメールサーバの Fingerprint を晒しておく。
# openssl x509 -noout -fingerprint -sha1 -inform der -in cert.der
SHA1 Fingerprint=48:E8:6B:35:52:F0:97:30:AB:43:3D:E4:57:9B:64:42:83:58:85:D8
インポートが正常に完了すると、IEのインターネットオプションから「コンテンツタブ」→「証明書」→「信頼されたルート証明機関」に作成したサーバ証明書の Common Name で追加される。
以上で「POP over SSL」の環境は用意できた。
動作確認ができたら、qmail 起動スクリプトの標準POP3の起動エントリは忘れずに無効にしておくこと。
次回はプラスアルファの機能として「SMTP over SSL」も実装してみよう。
コメントする