Mailsploitは何が脅威なのかを考えてみる その1
SendGridエバンジェリストの @nakansukeです。 ここ数日メール周りではMailsploitが注目を浴びてますね。海外出張中だったため若干出遅れてしまいました。。
- ‘MAILSPLOIT’ LETS HACKERS FORGE PERFECT EMAIL SPOOFS (by WIRED)
- メール送信者を偽装できる脆弱性「Mailsploit」が発見される、多くのメールクライアントに影響 (INTERNET Watch)
- メールソフト多数で「Mailsploit」の脆弱性発覚--スパム対策も回避
- 送信元を偽装できる脆弱性Mailsploit、30以上のメールソフトに影響 (ITpro)
「送信元を偽装できる」のはメールのもともとの仕様でありどうも脆弱性ということで不用意に騒ぎすぎているように思います。なので、Mailsploitのどこにどういう脅威があるのか整理したいと思います。
まずはメールのFromの整理から
メールの送信元/差出人(From)には2種類が存在します。 エンベロープFromとヘッダFromの2種類で、よく郵便物の封筒とその中に入っている便箋にそれぞれ記載されている差出人に例えられます。
- エンベロープFrom : SMTPのMAIL FROMコマンドで指定するアドレスで、メールヘッダのReturn-Pathに記載されます。そのため、受信者が直接目にすることは基本的にはありません。RFC5321.MailFromとして定義されています。
- ヘッダFrom : メールヘッダのFROMで指定されるアドレスで、メールクライアントでは送信元として表示され受信者が目にするのはこちらのアドレスです。RFC5322.Fromとして定義されています。
ヘッダFromとエンベロープFromのイメージ (引用元:dmarc.org)
なりすましの仕組み
SMTPの仕様上、ヘッダFromは好きなように指定することができるので、エンベロープFromとヘッダFromが異なっていても問題にはなりません。これがなりすましメールを簡単に実現できる理由です。 GmailなどではヘッダFromを変えるためには色々と設定が必要で、自分が保有するアドレスやその組織のアドレスしか指定できないようなルールがあって簡単には実現できませんが、メール送信用のプログラム等では簡単に指定可能です。
システムのアラートメールなどでは、差出人に適当なアドレスを指定しているケースも多いのではないでしょうか。例えばGmailから送信されたメールではないのに、ヘッダFromにGmailアドレスを指定しているのであればそれは立派ななりすましメールです。
なりすましを防ぐため認証技術の登場
受信者に見える差出人の情報を好き勝手変えることができるのでそれを悪用したメールが後を絶たず、それを防ぐための仕組みが必要とされるようになりました。
SPF/DKIMの仕組み
SPF/DKIMは、いずれも送信側ドメインのDNSサーバに自分が自分であることを証明するための情報を格納しておき、受信者がメール受信時に確認する仕組みになっています。
- SPF : DNSサーバに送信元メールサーバのIPアドレスを予め宣言しておきます。受信側では実際の送信元IPアドレスと、送信者がここから送信するとDNSに宣言しているものと一致するかを確認します。異なっていたらなりすまされているということです。
- DKIM : DKIMの場合はIPアドレスではなく、公開鍵をDNS上においておきます。そして秘密鍵で電子署名を付与して送信します。受信者は公開鍵を利用して署名が復号できるか確認します。DKIMによって送信元が正当であることとともに、メールが改ざんされていないことが確認できます。ちなみにディーキムと読みます。
SPF/DKIMが検証するドメイン
SPFはエンベロープFromドメインを検証する
RFCではSPFで検証する対象のドメインはMAIL FROMつまり、エンベロープFromであると定義されています。 多くの人が勘違いしているのですが、SPFのチェック対象はヘッダFromではありません。
なので hoge@example.com というアドレスからメールを送信するときに、example.com にSPFレコードを設定しなきゃ!となるのは正しくありません。エンベロープFromのドメインがexample.comであるならそれでいいのですが、異なるのであればそちらに設定しなければなりません。
ちなみに、SendGridの場合は、エンベロープFromのドメインは、ヘッダFromのサブドメインを使用するので、ヘッダFromドメインにSPFレコードを指定する必要はなく、既存のSPFレコードには影響を及ぼさない仕組みになっています。
参考:独自ドメインを利用する
DKIMは署名内のdタグのドメインを検証する
DKIMで検証するドメインは、ヘッダに記載されたDKIM署名のd=タグで指定されたドメインです。これまたDKIMもヘッダFromドメインを検証するわけではありません。
下のような署名が入っているのであれば、sendgrid.infoを検証します。(厳密には、smtpapi._domainkey.sendgrid.infoを検証します)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=sendgrid.info; h=from:to:subject; s=smtpapi; bh=36gYllQgpA7ZWa26ryLrOZA0+io=; b=gPvxfw3p3DVuUCBD+30D7I4X7St/a fFh1qQLSoRPniqhYBM3KE(以下略)
SPFとDKIMでなりすましは防げるか
上述の通り、SPFはエンベロープFromを検証しますし、DKIMは署名内で宣言されたドメインを検証します。そのため、それらが必ずしもヘッダFromと一致するとは限りません。そのためSPF/DKIMの認証がOKであってもそれはヘッダFromの認証が通ったというわけではなく、あくまでもエンベロープFromとDKIMのドメインが正当であるということを意味します。
が一致する時に限るということになります。
SPF/DKIMの認証が通ったというのは、あくまでも、エンベロープFromのドメインのチェックがpassしたということであり、dタグドメインの署名が正当なものであったということで、ヘッダFromの正当性を保証するものではありません。
これはMailsploitがどうこうというのは関係なく、もともとなりすましが可能であったということです。ではMailsploitは何が脅威になるのでしょうか。 ちょっと長くなってしまったのでここでいったんきって、その2に続けたいと思います。
※12/13 9:00追記 その2書きました。