DMARC FAILが出たら、どこを確認すればいい?
メールセキュリティ製品やメールヘッダーを確認していると、
DMARC = FAIL
となっていることがあります。
しかし、DMARC FAILだけを見ても原因は分かりません。
DMARCはSPF・DKIMとHeader FromとのAlignment(アライメント)を利用して判定するためです。
例えば、
SPF = PASS
DKIM = FAIL
DMARC = FAIL
だったとしても、
「SPFはPASSしているのに、なぜDMARCはFAILなのか?」
と疑問に思うことがあります。
このような場合、単純なPASS/FAILだけではなく、メールヘッダーに記録されたドメインを一つずつ確認すると原因を切り分けられます。
この記事では、DMARC FAILが発生したときにメールヘッダーのどこを確認すればよいのかを説明します。
最初に見るのはAuthentication-Results
まず確認したいのが、
Authentication-Results:
ヘッダーです。
例えば次のような結果があったとします。
Authentication-Results:
spf=pass;
dkim=fail;
dmarc=fail
ここで重要なのは、
SPF PASS
DKIM FAIL
DMARC FAIL
という結果だけを見て終わらないことです。
次に、
SPFは「どのドメイン」についてPASSしたのか?
を確認します。
実際のAuthentication-Resultsには、受信システムによって形式は異なりますが、例えば、
spf=pass smtp.mailfrom=mail-service.example;
dkim=fail header.d=example.jp;
dmarc=fail header.from=example.jp;
のような情報が記録されます。
ここにはDMARC FAILの原因を調査するための重要な情報が含まれています。
まずHeader Fromを確認する
DMARC調査の基準になるのが、
Header From
です。
例えば、
From: user@example.jp
なら、DMARCで基準になるドメインは、
example.jp
です。
ここを最初に押さえておきます。
Header From
↓
example.jp
そしてSPFとDKIMで認証されたドメインを、このexample.jpと比較していきます。
次にSPFの認証結果を見る
例えば、
spf=pass smtp.mailfrom=mail-service.example
だったとします。
これは、
mail-service.exampleについてSPF認証に成功した
という意味です。
ここで、
SPF = PASS
だけを見てはいけません。
DMARCでは、
Header From
example.jp
と
SPF認証ドメイン
mail-service.example
のAlignmentを確認する必要があります。
この例では異なるドメインなので、
SPF認証
PASS
しかし
SPF Alignment
FAIL
となります。
つまり、このSPF PASSだけではDMARCをPASSさせることができません。
DKIMのd=を確認する
次はDKIMです。
メールヘッダーから、
DKIM-Signature:
を探します。
例えば、
DKIM-Signature:
v=1;
a=rsa-sha256;
d=example.jp;
s=selector1;
だったとします。
特に重要なのが、
d=example.jp
です。
DMARCでは、
Header From
example.jp
と
DKIM d=
example.jp
のAlignmentを確認します。
この例ならAlignmentは成立します。
しかし、
dkim=fail
だった場合は、
DKIM認証
FAIL
Alignment自体は問題なさそう
でも
DKIM認証が成功していない
ので、DKIM経由ではDMARCをPASSさせられません。
ここまでを一度整理する
今回の例では、
Header From
example.jp
に対して、
SPF
認証ドメイン:mail-service.example
認証結果:PASS
Alignment:FAIL
DKIM
d=example.jp
認証結果:FAIL
Alignment:一致するドメイン
です。
図にすると、
Header From
example.jp
│
┌───────────┴───────────┐
│ │
▼ ▼
SPF DKIM
│ │
mail-service.example example.jp
│ │
SPF PASS DKIM FAIL
│ │
Alignment FAIL 認証失敗
│ │
└───────────┬───────────┘
▼
DMARC FAIL
となります。
これなら、
SPFがPASSなのになぜDMARCがFAILしたのか
を説明できます。
SPF認証そのものは成功していますが、Header FromとのAlignmentが成立していないからです。
DKIM FAILの原因も確認する
DKIMがFAILしていたら、さらに理由を確認します。
例えば、
body hash did not verify
という情報があった場合です。
これはDKIM署名時に計算された本文のハッシュ値と、受信側で計算した本文のハッシュ値が一致しなかったことを示します。
例えば、
送信元
↓
DKIM署名
↓
メール中継サービス
↓
本文やMIME構造に変更
↓
受信サーバー
↓
body hash不一致
↓
DKIM FAIL
という可能性があります。
そのため、
DKIM FAIL
↓
不正メール確定
とは判断できません。
正常なメールでも配送途中の処理によってDKIM検証に失敗する場合があります。
Receivedヘッダーで配送経路を調べる
DKIM FAILの原因が分からない場合は、
Received:
も重要です。
Receivedヘッダーには、メールがどのサーバーを経由して届いたのかが記録されています。
例えば、
送信システム
↓
Microsoft 365
↓
外部メール中継サービス
↓
メールセキュリティ製品
↓
受信メールサーバー
という経路だったとします。
DKIM署名した後に途中のサービスが、
外部メール警告の追加
フッター追加
URL書き換え
MIME変更
メーリングリスト処理
などを行うと、DKIM検証に影響する可能性があります。
そのためDKIM FAILを調査するときは、
どこでDKIM署名されたか
だけでなく、
署名された後、どのシステムを通ったか
を見ることも重要です。
DMARC FAIL調査の順番
私は次の順番で確認すると分かりやすいと思います。
① Header Fromを確認
↓
② Authentication-Resultsを確認
↓
③ SPF結果を確認
↓
④ SPF認証ドメインを確認
↓
⑤ Header FromとのSPF Alignmentを確認
↓
⑥ DKIM結果を確認
↓
⑦ DKIM-Signatureのd=を確認
↓
⑧ Header FromとのDKIM Alignmentを確認
↓
⑨ DKIM FAILなら失敗理由を確認
↓
⑩ Receivedで配送経路を確認
これをテンプレートとして持っておくと、DMARC FAILを見たときに調査しやすくなります。
実際にはこんな表を作ると分かりやすい
メールヘッダーが長くて分かりにくい場合は、必要な情報だけ抜き出します。
| 確認項目 | 結果 |
|---|---|
| Header From | example.jp |
| SPF | PASS |
| SPF認証ドメイン | mail-service.example |
| SPF Alignment | FAIL |
| DKIM | FAIL |
DKIM d= | example.jp |
| DKIM失敗理由 | body hash did not verify |
| DMARC | FAIL |
こうすると原因がかなり見やすくなります。
今回なら、
SPFはPASS
↓
でもAlignment FAIL
DKIMはAlignment可能
↓
でも認証FAIL
結果
↓
DMARC FAIL
です。
SPF PASS・DKIM PASSなのにDMARC FAILするケース
もう一つ覚えておきたいケースがあります。
例えば、
Header From:
user@example.jp
SPF認証ドメイン:
sender-a.example
DKIM d=:
sender-b.example
で、
SPF = PASS
DKIM = PASS
だったとします。
一見すると完璧に見えます。
しかし、
Header From
example.jp
/ \
/ \
▼ ▼
sender-a.example sender-b.example
SPF PASS DKIM PASS
│ │
▼ ▼
Alignment FAIL Alignment FAIL
\ /
\ /
▼
DMARC FAIL
となることがあります。
つまり、
SPF PASS + DKIM PASS = DMARC PASS
ではありません。
この場合、SPFとDKIMはそれぞれ正常に認証されていますが、どちらもHeader FromとのAlignmentを満たしていないことが原因です。
逆にDKIM FAILでもDMARC PASSならおかしくない
例えば、
| 確認項目 | 結果 |
|---|---|
| Header From | example.jp |
| SPF | PASS |
| SPF認証ドメイン | example.jp |
| SPF Alignment | PASS |
| DKIM | FAIL |
| DMARC | PASS |
なら、
SPF
PASS
+
Alignment PASS
↓
DMARC条件成立
↓
DMARC PASS
DKIM FAIL
↓
DMARC結果には影響しない
ということがあります。
この結果は矛盾していません。
DMARCでは、SPFまたはDKIMのどちらか一方が認証とAlignmentの条件を満たせばPASSできるためです。
DMARC FAILだから即「なりすまし」とは限らない
ここも運用上重要です。
DMARC FAILは、
DMARCの認証条件を満たせなかった
という結果です。
それだけで、
DMARC FAIL
↓
100%悪意のあるメール
と断定できるわけではありません。
例えば正規のメール配信サービスを利用しているものの、送信ドメインやDKIMの設定が適切でない場合にもDMARC FAILは発生します。
また、転送やメーリングリストなど、メール配送途中の処理が認証結果に影響することもあります。
したがって実際の運用では、
SPF
DKIM
DMARC
Alignment
配送経路
送信元
メール内容
などを組み合わせて判断することが重要です。
まとめ
DMARC FAILを調査するときに重要なのは、PASS/FAILだけを見ないことです。
まず、
Header From
を基準にして、
SPF認証ドメイン
DKIM d=ドメイン
との関係を確認します。
そして、
Header From
│
┌───────────┴───────────┐
▼ ▼
SPF DKIM
│ │
認証PASS? 認証PASS?
│ │
Alignment? Alignment?
│ │
└───────────┬───────────┘
▼
DMARC判定
という順番で考えると、DMARC FAILの理由がかなり分かりやすくなります。
特に覚えておきたいのは、
SPF PASSでもDMARC FAILはあり得る
DKIM PASSでもDMARC FAILはあり得る
SPFとDKIMが両方PASSでもDMARC FAILはあり得る
DKIM FAILでもDMARC PASSはあり得る
という点です。
DMARCのトラブルを調査するときは、
「何がPASSしたか」ではなく、「どのドメインについてPASSしたのか」
まで確認することが重要です。


コメント