MTA-STSについて


2018年09月26日RFC 8461が公開されました。MTA-STS(SMTP MTA Strict Transport Security)と呼ばれるSMTPのセキュリティに関連する新しい仕様です。最初のドラフトは2016年5月に公開されている1ので2年半ほどかけてRFCとなったようです。最終的な仕様はGoogleMicrosoftComcastOath2で策定しています。

日本語情報をあまりみかけないので少し調べてみました。

MTA-STSとは?

ざっくり書くと「SMTPで厳格にTLSを使うために、メールサーバ(MTA)がTLSに対応していることをポリシーとして宣言して、検証できるようにする仕組み」です。宣言・検証はDNSとHTTPSを組み合わせて行います。

MTA-STSが生まれた背景について、RFC 8461のIntroductionでSTARTTLSの問題点を触れています。

RFC 3207のSTARTTLSはSMTPの通信をTLSにする仕組みですが、日和見暗号化(Opportunistic Encryption)のため、相手先がTLSに対応していない場合は平文での通信となります。これには問題があって、たとえば中間者攻撃(man-in-the-middle attack、MITM)で仲介して平文にダウングレードさせたり、DNSクエリによる問合せを仲介して攻撃者の管理下にあるサーバのMXを返したり、といったことをして内容の傍受が可能となってしまいます。

この問題を解決するためにMTA-STSが考えられました。3

MTA-STSに対応するには?

次のステップを踏みます。

  • TLSに対応し、証明書等に問題がないことを確認する

https://en.internet.nl/test-mail/ などで確認できるようです。

ドメインがexample.comの場合は次のようなTXTレコードをDNSに定義して、MTA-STSのポリシーに対応することを示します。idはポリシーの更新をチェックするためのもので、タイムスタンプやランダムな数値を入れるとのこと。

_mta-sts.example.com.  IN TXT "v=STSv1; id=20181111085700Z;"

RFC 5785のwell known URLを使って、次のパスにtxtファイルを配置します。

https://mta-sts.example.com/.well-known/mta-sts.txt

ファイルの中身は次のようなkey/valueの値です。

version: STSv1
mode: enforce
max_age: 10368000
mx: mail.example.com
mx: *.example.net
mx: backupmx.example.com

versionは「STSv1」で固定です。

modeは「enforce」「testing」「none」のいずれかで、検証結果を定義します。enforceは、失敗した場合はSTARTTLSに対応していないと判断します。testingの場合はRFC 8460の SMTP TLS Reportingに沿ってレポートが行われるとのことで、たとえば次のようなTXTレコードでレポート先を指定できるようです。mxではワイルドカード(*)も使えるとのこと。

 _smtp._tls.example.com v=TLSRPTv1; rua=mailto:[email protected]

このような流れになるようです。

このチェックフローが読み取りにくかったのですが、以下がわかりやすかったです。
https://www.youtube.com/watch?v=VJKjfosckuU

Gmailの確認結果

Gmailは既にMTA-STSに対応しているようなので確認してみました。

まずはMTA-STS TXTレコードを調べてみます。

dig -t txt _mta-sts.gmail.com

結果は次のとおり、定義されていました。

;; ANSWER SECTION:
_mta-sts.gmail.com.     300     IN      TXT     "v=STSv1; id=20171114T070707;"

続いてMTA-STSのポリシーを確認してみます。以下のURLにアクセスするだけです。

Gmailではmodeが「enforce」となっていました。(記事執筆時はtestingでしたが、その後、時期不明ですがenforceに変わりました。)

ということは、SMTP TLS Reportingもありそうです。

 dig -t txt _smtp._tls.gmail.com

結果をみると次のとおり定義されていました。

;; ANSWER SECTION:
_smtp._tls.gmail.com.   300     IN      TXT     "v=TLSRPTv1;rua=mailto:[email protected]"

今回は手動で1つ1つ確認しましたが、以下のサイトを使って簡単に確認できるようになっています。
https://www.hardenize.com/

https://aykevl.nl/apps/mta-sts/ (コマンドベースもある https://github.com/aykevl/mta-sts )

参考


  1. 当時はSMTP-STSと呼ばれていた 

  2. ドラフト時点ではYahoo!, Incと表記 

  3. 関連する技術にDANE(DNS-Based Authentication of Named Entities)があるとRFCにはありますが、よくわかっていないので別の機会に…。 (参考1,参考2)