エンジニアの光田(@34ro)です。今回はなりすましメールを防ぐ技術について紹介します。
背景
電子メールは1960年代ころから存在していたそうですが、現在でも非常にポピュラーな通信手段です。
しかし、「メールの送り手がFromに記載のあるアドレスである」ということをプロトコルレベルで担保できないという課題があります。
メールヘッダーの「From」に記載するアドレスはメールの送信サーバの管理者が保有しているドメインに制限するような仕組みがあるわけではなく、自己申告制になっています。
送り手が好きなアドレスを書き込めるので、Fromを見ただけでは確かにその人から送られたという確証は得られません。
すなわち、第3者がなりすましてメールを送り、リンクを踏ませ、ダミーで作ったサイトに誘導し、IDやパスワードを聞き出すということができてしまいます。
いわゆるフィッシングメールです。
(このプロトコルレベルの不完全さはビットコインのトランザクション展性の話と重なりますね。暗号通貨ならフォークできますがメールはそうはいきません。)
プロトコルで担保できない事柄は別レイヤーで担保するしかありません。
なりすましメールを送られてしまうことは原理的に防げませんが、受け取ったメールがなりすましを検知するための技術が存在します。
今回はSPFとDKIM、そしてこの一件を受けて導入したDMARCについてまとめましました。
SPF
SPF(Sender Policy Framework)はメールの送信元のSMTPクライアントのIPアドレスが送信元のドメインの保有者に許可されたものであることを担保する仕組みです。
SPFにおける送信元はメールヘッダーのReceivedフィールドに指定されているサーバのドメインです。
Receivedフィールドのサーバのドメインの保有者は予めDNSにTXTレコードで「このIPアドレスからは送信されててもよい」とするホワイトリストを設定しておきます。
IPを固定したくない場合でも、Aレコードで別名を付けておけばドメインでも指定可能です。
メールを受け取ったメールサーバでは
1. メールのヘッダーのReceivedフィールドを見て送り手のドメインを取得します。
2. 送り手のドメインのDNSのTXTレコードを見に行き、SPFが設定されているかチェック
3. SPFが設定されていればclient ipがホワイトリストに含まれているかチェック
というチェックした結果「Pass」や「Neutral」といったいくつかの段階に別けてなりすましを判定します。
SPFだけでは不十分な理由
Receivedフィールドのドメインはメールの送信サーバのものなので、Fromアドレスのドメインと同一とは限りません。
メールの送信を外部のSaaSで行っている場合は別ドメインのサーバから送ることになります。
例えばメールのヘッダーがFrom: support@coincheck.comであっても送信元のサーバはamasonese.comやgmail.comというように送信元はメール配信サービス業者の保有ドメインになっています。
すなわちFromアドレスのドメイン保有者がReceivedフィールドのドメインを許可していることが担保されていないのが課題です。
また、SPFが設定されていなかった場合は、なりすましなのか、もともとそういう運用なのか区別できないという課題もあります。
DKIM
DKIM(Domainkeys Identified Mail)は電子署名を使って、メールの内容が改ざんされていないことを担保する技術です。
メールの送信サーバのドメインとFromアドレスのドメインというように複数の署名をつけることも可能です。
導入にはまずメール送信サーバの管理者が電子署名に使う秘密鍵、公開鍵を生成します。
ドメイン保有者はDNSにCNAMEやTXTレコードの形式で公開鍵を公開しておきます。
メール送信時にヘッダーに電子署名と一緒にドメインを記載しておくと、受け取ったメールサーバ側でDNSに公開鍵を問い合わせ、署名を検証して改ざんされていないことを担保します。
DKIMだけでは不十分な理由
ここでもDKIMを使っていないメールが届いたとき、改ざんされているのか、DKIMをもともと使わない運用なのか区別がつきません。
googleでは普段DKIMで送ってきている送信元からDKIMなしで送ってきていた場合、赤い鍵のマークが表示されて警告しますが、運用方針を変えただけなのと区別がつかず、なりすましであると断定することはできません。
その為多くのメールサービスでは受信ボックスに振り分けられます。
DMARC
DMARC(Domain-based Message Authentication, Reporting & Conformance)はドメイン保有者がDKIMとSPFを設定していることを表明するための仕組みです。
ドメイン保有者はDNSにTXTレコードで「DMARCポリシー」を設定します。
2012年頃から普及し始めた、電子メールの長い歴史の中でも比較的新しい技術です。
DKIMやSPFが設定されていないメールが届いたころとで、なりすましだから設定していないのか、もともとそういう運用だからなのか区別できないという課題を解決できます。
Fromアドレスのドメインの保有者がDMARCポリシーを設定することで、送るメール全てにSPFとDKIMを設定するという意思表示になります。
DMARCのレコードがあるにもかかわらずSPFとDKIMがないメールは不正だと断定できるわけです。
FromアドレスのドメインのSPF、DKIMがチェックされるので、メールの配信サーバとFromアドレスのドメインが異なっても確かにFromの方のドメイン保有者によって許可されたサーバから改ざん無く送られていることが担保できます。
検証の流れは、
1. メールを受け取ったメールサーバは、FromアドレスのドメインのDNSをチェック。DMARCのレコードがあった。
2. FromアドレスのドメインのSPFのレコードで許可されているメールサーバから送られてきたかチェック。
3. Fromアドレスのドメインで設定されているDKIMの署名をチェック。
4. いずれかのチェックにパスしなかった場合は、迷惑メールに振り分ける(この挙動はDMARCポリシーによって指定できる)。
という処理を経ます。
受け取りてのメールサーバがDMARCに対応していることが前提ですが、大手メールサービスは概ね対応しているようです。
ドメインにどのようなDMARCが設定されているかどうかはDMARC Inspectorを使ってチェックすることができます。
自分が資産を預けているサービスがメール配信に使っているドメインにDMARCが設定されていなければ、なりすましメールに注意です。
まとめ
SPF,DKIM,そしてDMARCを紹介しました。
DMARCポリシーを公開しないとSPF,DKIMでなりすましを防ぐことはできません。
DMARCは日本国内では知名度の低い技術のようで、大手サービスでも設定している割合はまだまだ低いようです。
標的にされないためにも早めの対応をご検討下さい。