SMTPはSTARTTLS拡張を使用して、SMTPをSMTPセキュア(STMPS)にアップグレードします。 [〜#〜] rfc [〜#〜] によると、クライアントとサーバーは次のようにTLSを開始します。
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
同じドキュメントで、仕様はMITMの可能性について言及しています。
サーバーから "250 STARTTLS"応答を削除することにより、中間者攻撃を仕掛けることができます。
私が仕様からそれを取得していないのは:削除とは正確にはどういう意味ですか?メッセージの内容は削除されますが、送信は空ですか? (つまり、破損している)またはそれを削除して、クライアントが受信しないようにしますか?
クライアントがメッセージを受信しないようにメッセージをドロップすることを意味する場合、サーバーは250 DSN
を送信しますか? 250-STARTTLSがドロップした場合、次のメッセージはどうなるのかはわかりません。クライアントはEHLO mail.example.com
を送信する必要があること、および250-STARTTLS
がないことをどのようにして知るのですか?
STARTTLSを使用したSMTPは、最初にサーバーへのプレーン接続を作成し、次にサーバーがサポートしている場合はTLSにアップグレードすることで機能します。サーバーは、EHLOコマンドへの応答内でSTARTTLSのサポートを示しています。真ん中の男は単にサーバーからの応答を変更し、STARTTLSをサポートするという情報を削除することができます。この場合、クライアントはSTARTTLSがサポートされておらず、TLSをアップグレードしないと考えています。
たとえば、元のSMTPダイアログは次のようになります。
<< 220 welcome to example.org
>> EHLO example.com
<< 250-example.org
<< 250-HELP
<< 250-8BITMIME
<< 250 STARTTLS
これにより、クライアントはSTARTTLSがサポートされていることを認識します。真ん中の男またはファイアウォール Cisco ASAのような (他の人も)は、プレーンテキストでトラフィックを検査するためにTLSがサポートされていないことをクライアントに信じさせるように応答を変更する可能性があります。
<< 220 welcome to example.org
>> EHLO example.com
<< 250-example.org
<< 250-HELP
<< 250-8BITMIME
<< 250 XXXXXXXX
この変更(この場合はSTARTTLSをXXXXXXXXで置き換える)により、クライアントはサーバーがTLSをサポートしていることを認識しないため、試行しません。クライアントがまだそれを試みても、サーバーのSTARTTLSを拒否するように、途中の男がクライアントのSTARTTLSコマンドを他の(多分無効な)コマンドに書き換えることができます。
この場合の正確な動作はクライアント構成に依存することに注意してください。エンドユーザーアプリケーション(つまり、MUA-メールユーザーエージェント)は、構成された単一のメールサーバーでTLSを適用するように構成されていることがよくありますが、これを使用するのは、MTA(メールサーバー-メール転送エージェント)とMTAの通信では異なります。 MTAは通常、どのネクストホップがTLSをサポートするかを事前に認識していないため、TLSが可能かどうかを確認するだけで、TLSが可能ではないように見える場合はそのまま続行します。
要約すると、このような日和見暗号化は悪い考えです。真ん中の男は、反対側が暗号化をサポートしていないと両側に単純に信じさせることができるからです。
Man-in-the-middleは、あなたとSMTPサーバーとhidesのサーバー機能ブロードキャストの間に位置し、250-STARTTLS
(これがサーバーから「250 STARTTLS」応答を削除することですの意味です)。
したがって、クライアントはTLSが可能であることを認識しません。 TLSは試行しません。そしてクライアントがそれを要求するように指示されていない場合、会話は平文で続き、MitMは自由にそれを読むことができます。
通常、メールクライアントは、「STARTTLSが利用可能な場合」、「STARTTLS」、「プレーン」などとして構成できます。ユーザーエクスペリエンスのために、多くの場合、1つ目がデフォルトです(「何があってもメールを流し続ける」)。セキュリティのために、2番目のオプションの方が明らかに優れています。