SMTP (簡易メール転送プロトコル) のセキュリティ機能の概要をしめし,関連する IETF の各ドキュメントの調査内容について述べる.
1. 概要
1980 年に SMTP の初版が標準化された時点では,セキュリティに関する配慮はほとんどなかったと考えられる. しかし,インターネットの普及にともなってメールに関して様々なセキュリティ上の問題が発生し,そのつど対策がとられてきた. IETF 標準となっている SMTP 関連のセキュリティ機能としては RFC 2554 およびその改訂版である draft-siemborski-rfc2554bis-00 (R. Siemborski: SMTP Service Extension for Authentication, 2003 年 10 月発行) に記述された認証に関するサービス拡張と,RFC 3207 に記述された TLS を使用するセキュア SMTP のためのサービス拡張とがある. また,インターネット・ドラフト draft-weinman-amtp-02 (W. Weinman: AMTP - Authenticated Mail Transfer Protocol) と draft-crouzet-amtp-01 (B. Crouzet: Authenticated Mail Transfer Protocol) において SMTP にちかい認証をともなうプロトコル AMTP (Authenticated Mail Transfer Protocol) が検討されている. 以下,これらを中心として SMTP のセキュリティ機能についての調査結果を記述する.
2. 認証のための SMTP 拡張
1999 年 3 月に発行された IETF 標準 RFC 2554 (J. Myers: SMTP Service Extension for Authentication) には認証に関するサービス拡張が記述されている. このサービス拡張においては,SMTP のコマンドのひとつとして AUTH コマンドが加えられ,EHLO コマンドに対する応答に AUTH キーワードが追加されている. EHLO コマンドの応答における AUTH キーワードにつづく認証方式のなかからクライアントが適当なものを選択して AUTH コマンドによって認証方式を指定し,それに従って SMTP サーバがメールの送信者を認証する.
シーケンスの例を RFC 2554 から引用する.
S: 220 smtp.example.com ESMTP server ready C: EHLO jgm.example.com S: 250-smtp.example.com S: 250 AUTH CRAM-MD5 DIGEST-MD5 C: AUTH FOOBAR S: 504 Unrecognized authentication type. C: AUTH CRAM-MD5 S: 334 PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4= C: ZnJlZCA5ZTk1YWVlMDljNDBhZjJiODRhMGMyYjNiYmFlNzg2ZQ== S: 235 Authentication successful.
サーバからの出力には S:, クライアントからの出力には C: がつけられている.
ここでは認証方式の候補としてサーバから CRAM-MD5, DIGEST-MD5 がおくられている.最初の AUTH コマンドでクライアントはそのリストにない FOOBAR という認証方式を指定している. この要求はサーバによって拒絶されるので,クライアントはつづけて AUTH コマンドで CRAM-MD5 を指定している. これはサーバによって受理され,CRAM-MD5 に従って送信者が認証され,成功している.
3. 認証のための SMTP 拡張の改訂版
インターネット・ドラフト draft-siemborski-rfc2554bis-00 は RFC 2554 の改訂に関する最初のドラフトであり,かなり大幅な追加が試みられている. RFC 2554 におけるサーバからクライアントに認証を要求する方式のほかに,クライアントから TLS による通信を要求する機能がとりいれられている.
つぎのような 2 つの例が追加されている.
S: 220-smtp.example.com ESMTP Server C: EHLO client.example.com S: 250-smtp.example.com Hello client.example.com, pleased to meet you S: 250-AUTH GSSAPI S: 250-STARTTLS C: STARTTLS S: 220 Ready to start TLS ... TLS negotiation proceeds, further commands protected by TLS layer ... C: EHLO client.example.com S: 250-smtp.example.com Hello client.example.com, pleased to meet you S: 250-AUTH KERBEROS_V4 GSSAPI PLAIN C: AUTH PLAIN dGVzdAB0ZXN0ADEyMzQ= S: 235 Authentication successful
上記の例においてはクライアントが STARTTLS コマンドを発行したときに TLS による通信が確立される. その後,サーバから認証を要求する場合 (前節) と同様に EHLO コマンドを再実行している.
これに対して次の例においてはクライアントとサーバとが接続された時点 (すなわちこのシーケンスの最初) で TLS による通信が確立される. したがって,最初の EHLO コマンドからこのセキュアな通信路において通信される.
... TLS negotiation proceeds, further commands protected by TLS layer ... C: EHLO client.example.com S: 250-smtp.example.com Hello client.example.com, pleased to meet you S: 250-AUTH KERBEROS_V4 GSSAPI PLAIN C: AUTH PLAIN (note that there is a single space following the 334 on the following line) S: 334 C: dGVzdAB0ZXN0ADEyMzQ= S: 235 Authentication successful
4. TLS 上のセキュアな SMTP のためのサービス拡張
RFC 3207 (P. Hoffman: SMTP Service Extension for Secure SMTP over Transport Layer Security) には TLS を使用するセキュア SMTP のためのサービス拡張が記述されている. このサービス拡張においては,SMTP のコマンドのひとつとして STARTTLS コマンドが加えられ,EHLO コマンドに対する応答に STARTTLS キーワードが追加されている. EHLO コマンドの応答に STARTTLS がふくまれるときは,このサービス拡張に対応したクライアントは引数のない STARTTLS コマンドを送信し,それをきっかけとして TLS 交渉が開始される. この交渉が成功すると,それ以降のメッセージ交換は TLS 上でおこなわれる. TLS によって接続された時点でそれ以前のセッション状態はクリアされ,再度 EHLO コマンドが送信される.
シーケンスの例を RFC 3207 から引用する.
S: <waits for connection on TCP port 25> C: <opens connection> S: 220 mail.imc.org SMTP service ready C: EHLO mail.example.com S: 250-mail.imc.org offers a warm hug of welcome S: 250-8BITMIME S: 250-STARTTLS S: 250 DSN C: STARTTLS S: 220 Go ahead C: <starts TLS negotiation> C & S: <negotiate a TLS session> C & S: <check result of negotiation> C: EHLO mail.example.com S: 250-mail.imc.org touches your hand gently for a moment S: 250-8BITMIME S: 250 DSN
5. Weinman の Authenticated Mail Transfer Protocol
前記のインターネット・ドラフト draft-weinman-amtp-02 においてはトランスポート・プロトコルとして TLS を使用して匿名のメールを排除するプロトコル AMTP (Authenticated Mail Transfer Protocol) が提案されている. 6 節で示す Crouzet のプロトコルにも同一の名前がつけられているので,それと区別するため,本報告においてはこのプロトコルを AMTP:W と呼ぶことにする.
AMTP:W においてはメールの転送者 (Mail Transfer Agent, MTA) がポリシーをもち,それに合うメールだけを転送する. AMTP:W においては SMTP と同様にクライアントからサーバ (MTA) にコマンドやデータを行単位で送信する. コマンドの一部は SMTP からひきつがれている.コマンドとしては次のようなものがある (一部のコマンドだけをあげている).
- (1) EHLO
-
セッション開始時に入力するコマンドである.
このコマンドは SMTP からひきつがれている.
2 個の例を前記の draft-crouzet-weiman-02 から引用する.
C: EHLO dastardly.example.org S: 504 Authentication failed C: EHLO amtp.example.org S: 250-Greetings and felicitations S: 250-MPC DENY com/* ALLOW com/individual ALLOW com/confirmed S: 250-PIPELINING S: 250 8BITMIME
- (2) MAIL
-
MAIL コマンドには MPC (Mail Policy Code) パラメータを指定することができる.
例を前記の draft-crouzet-weiman-02 から引用する.
C: MAIL FROM:<CATS-L@list.example.com> MPC=individual/confirmed S: 250 Okay
MPC パラメータが MTA のポリシーに合うときは上記のように Okay がかえされ,メールは転送される. しかし,ポリシーに合わないときなどには次のような応答がかえされて,メールは転送されない.451 MPC temporary failure, try again later 550 MPC policy violation
- (1) USER
-
ユーザの名前とパスワードを入力するためのコマンドである.名前,パスワードは次の行に入力する.
名前はメールアドレスとは異なる.例を前記の draft-crouzet-amtp-01 から引用する (ただし,必要な部分だけを抽出し,一部を強調している).
S: 220 AMTP >> Connection successful. S: 250 AMTP >> Received from: postgrad-bc 193.1.124.54. S: 250 AMTP >> C: user S: 250 AMTP >> Server Ready C: bct 123 S: 250 AMTP >> Welcome Brice CROUZET to the AMTP server. S: 250 AMTP >> SERVER INFORMATION. S: 250 AMTP >>
ここで bct が名前であり,123 がパスワードである. - (2) RCPT
-
メールの受取人のアドレスを指定する.
このコマンドは SMTP からひきつがれている.例を前記の draft-crouzet-amtp-01 から引用する (ただし,必要な部分だけを抽出し,一部を省略している).
C: rcpt to:jdoody@master.com S: 250 Recipient accepted for "jdoody@master.com" To add or correct a recipient address, please use the command MORE TO S: 250 AMTP >>
- (3) DATA
-
メッセージの送信時に使用する.
このコマンドも SMTP からひきつがれているが,AMTP:C においてはメールの本体を入力するのに使用される.
すなわち,DATA コマンドによってヘッダは入力されない.例を前記の draft-crouzet-amtp-01 から引用する.
C: data S: 354 Enter the data of the message. End with "." on a line by itself. C: Subject: AMTP Procedure 1 C: It is a simple AMTP procedure. C: . S: 250 Mail delivery successful for "jdoody@master.com" S: 250 AMTP >>
ここでメール本体の最初の行は "Subject:" ではじまっているが,これはヘッダではない. メール本体は通信中に改変されることはない. - (4) HEAD
-
ヘッダを入力するためのコマンドである.
例を前記の draft-crouzet-amtp-01 から引用する.
C: head S: 354 Enter the header of the message. End with "." on a line by itself. C: Subject: AMTP Procedure 2 C: . S: 250 Head Command Accepted S: 250 AMTP >>
ヘッダとして発信人のアドレスは指定しない. これはサーバが自動的に付加する. したがって,詐称することはできない. 他のヘッダもサーバによってチェックされるため,不正なヘッダをつけることはできない. - (5) QUIT
-
セッションを終了するためのコマンドであり,SMTP からひきつがれている.
例を前記の draft-crouzet-amtp-01 から引用する.
C: quit S: 221 Disconnection
- (6) SELO
- SELO コマンドは ドメイン,番号,受取人 e-mail アドレスという 3 個の引数をとり (同一行に記述し),送信サーバに関する情報 (ドメイン) と,送信サーバに与える情報 (番号,アドレス) を指定する. 前記の draft-crouzet-amtp-01 には例は与えられていない.
- (7) SEMA
- SEMA コマンドは AMTP サーバのために予約されている. 引数としては受取人 e-mail アドレスと番号とをあたえる. 前記の draft-crouzet-amtp-01 には例は与えられていない.
- (8) RSET
-
クライアントがすでに入力した内容を無効にする.
RSET コマンドをふくむ例を前記の draft-crouzet-amtp-01 から引用する.
C: rcpt to:jdoody@master.com S: 250 Recipient accepted for "jdoody@master.com" To add or correct a recipient address, please use the command MORE TO S: 250 AMTP >> C: rset S: 250 AMTP >> Reset OK S: 250 AMTP >> C: data S: 503 Need RCPT before DATA "data". S: 250 AMTP >> C: rcpt to:2@master.org S: 250 Recipient accepted for "2@master.org" To add or correct a recipient address, please use the command MORE TO S: 250 AMTP >> C: data S: 354 Enter the data of the message. End with "." on a line by itself. C: Subject: AMTP Procedure 3 C: It is an AMTP procedure using RSET command. C: . S: 250 Mail in the spool for delivery for "2@master.org". S: 250 AMTP >>
ここでは,RSET コマンドによって RCPT コマンドの効果が取り消され,DATA コマンドが拒否されている. 再度 RCPT コマンドを入力することによって DATA コマンドの入力が可能になっている. - (9) NOOP
-
タイマをリセットするためのコマンドであり,SMTP からひきつがれている.
例を前記の draft-crouzet-amtp-01 から引用する.
C: noop S: 250 AMTP >> Noop OK S: 250 AMTP >>
- (10) HELP
-
コマンドの用法を確認するためのコマンドであり,SMTP からひきつがれている.
ユーザが直接,AMTP:C によってメールを送信するという特殊な場合以外は使用されないと考えられる.
例を前記の draft-crouzet-amtp-01 から引用する.
C: help S: 214 This is an AMTP Server. 214 Topics: 214 QUIT HELP RCPT HEAD DATA RSET NOOP S: 250 AMTP >> C: help data S: help for DATA S: Explanation S: 250 AMTP >>
- (11) MORE TO:
- 複数の受取人を追加指定するのに使用する. 前記の draft-crouzet-amtp-01 には例は与えられていない.
6. Crouzet の Authenticated Mail Transfer Protocol
前記のインターネット・ドラフト draft-crouzet-amtp-01 においてはメール・メッセージの内容を構造化することによってメッセージの改竄を防止するプロトコル AMTP (Authenticated Mail Transfer Protocol) が提案されている. プロトコル名として Weinman のドラフトにおけるのとおなじ Authenticated Mail Transfer Protocl が使われているが,内容は異なっている.Weinman のプロトコルと区別するため,本報告においてはこのプロトコルを AMTP:C と呼ぶことにする. ただし,Weinman のプロトコルとは焦点が異なっているので,これらのプロトコルをマージして 1 個のプロトコルを構成することは可能だと考えられる.
メッセージの構造化のためには XML を使用することが前提とされているが,AMTP:C においてはこの XML のタグを記述するかわりに,XML の各パートをことなるコマンドによってあたえるようにしている. 構造化されたメール・メッセージの例を前記の draft-crouzet-amtp-01 から引用する.
<RELAY> </RELAY> <HEAD> From: bcrouzet@master.com Send From: master.com (193.1.124.54); 09 April 2003 08:56:50 o'clock IST; Version: 2.0 Date: 09 April 2003 08:56:50 o'clock IST Message id: 1049998467218 To: jdoody@master.com Subject: AMTP Procedure 1 </HEAD> <BODY> It is a simple AMTP procedure. </BODY>
AMTP:C においては SMTP と同様にクライアントからサーバにコマンドやデータを行単位で送信する. コマンドの一部は SMTP からひきつがれているが,ほとんどのコマンドは入れ換えられている.コマンドとしては次のようなものがある.