DMARC FAILの原因をメールヘッダーから調査する方法|SPF・DKIM・Alignmentの見方

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 Fromexample.jp
SPFPASS
SPF認証ドメインmail-service.example
SPF AlignmentFAIL
DKIMFAIL
DKIM d=example.jp
DKIM失敗理由body hash did not verify
DMARCFAIL

こうすると原因がかなり見やすくなります。

今回なら、

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 Fromexample.jp
SPFPASS
SPF認証ドメインexample.jp
SPF AlignmentPASS
DKIMFAIL
DMARCPASS

なら、

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したのか」

まで確認することが重要です。


コメント

タイトルとURLをコピーしました