情報処理安全確保支援士に対する勉強のメモ。
SPF
SPF(Sender Policy Framework)とは、メールを送信してきたサーバのIPアドレスが、その送信元ドメインから送信を許可されたものかを、DNSを使って確認する仕組みのこと。
- IPアドレス:
192.0.2.10からの、ヘッダーfrom:user@example.comというメールを受信 example.comのSPFレコードをDNSから取得- SPFレコードで
192.0.2.10が許可されているか確認- 許可されていればSPF Pass、許可されていなければSPF Fail
SPFレコード
主に下記の要素で構成される。
- SPFのバージョン
- 許可するIPアドレス
- 挙動
+: Pass = 許可(省略可能)-: Fail = 不許可~: Soft Fail = 不許可だが受信側の処理は任せる?: Neutral = 判断しない
DNSに登録されるのは、例えば下記のようになる。
example.com. IN TXT "v=spf1 ip4:192.0.2.10 -all"その他の例
192.0.2.10は許可、それ以外は不許可:v=spf1 ip4:192.0.2.10 -all+(Pass)を明示する場合:v=spf1 +ip4:192.0.2.10 -all- IPv6も使える:
v=spf1 ip6:2001:db8::/32
192.0.2.10と192.0.2.11は許可、それ以外はSoft Fail:v=spf1 ip4:192.0.2.10 ip4:192.0.2.11 ~all
DKIM
DKIM(DomainKeys Identified Mail)とは、DMとIIM(Identified Internet Mail)の仕様を統一した認証技術のこと。仕組み的にはDMと同様だが、DKIMでは公開鍵をメールヘッダーに添付することも可能。
DM(DomainKeys)
DNSサーバで送信元ドメインに紐づけて正当なメールサーバの公開鍵を登録しておき、送信元SMTPサーバによる署名によって正当性を検証する仕組みのこと。
- 送信側SMTPサーバは秘密鍵で署名し、メールの
DomainKey-Signatureヘッダーに設定 - 受信側SMTPサーバは送信元DNSに問い合わせて公開鍵を取得し、
DomainKey-Signatureヘッダーの値を検証
DKIM-Signatureヘッダー
主に下記の要素で構成される。
v: DKIMのバージョンa: 署名アルゴリズムd: 署名したドメインs: 公開鍵を特定するセレクタ(詳細は後述)h: 署名対象のヘッダーbh: 本文のハッシュ値b: 秘密鍵で作成した署名
例えば下記のようになる。
DKIM-Signature:
v=1;
a=rsa-sha256;
d=example.com;
s=z2026;
h=from:to:subject:date;
bh=本文のハッシュ値;
b=電子署名;DKIMで確認できるのは、d=のドメインが管理する秘密鍵で署名され、署名対象部分が改ざんされていないこと。ヘッダーfromのドメインと署名したドメインが同じことは保証しない。
DNSへの登録
公開鍵はセレクタ._domainkey.ドメインでTXTレコードとしてDNSに登録する。例えば下記のようになる。
z2026._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=公開鍵"DMARC
DMARC(Domain-based Message Authentication, Reporting, and Conformance)とは、SPFやDKIMの認証結果を、ヘッダーfromのドメインと結び付けて検証し、失敗したメールの扱いを送信側ドメインが公表する仕組みのこと。
下記のいずれかがPassすれば、DMRACとしてもPassとなる。
- SPFがPass & SPFのドメインがFromと整合
- DKIMがPass & DKIMの
d=ドメインがFromと整合
ドメインの整合性(アライメント)
DMRACにおいて、SPFではヘッダーfromのドメインとエンベロープfromのドメインを、DKIMではヘッダーfromのドメインとDKIM-Signatureのドメインを比較する。このとき、どのドメインを整合しているとみなすかのモードが2種類ある。
- Relaxed: サブドメインまでは許容する
- e.g.
example.comとmail.example.comは整合しているとみなす
- e.g.
- Strict: 完全一致のみを整合とみなす
DMARCレコード
DMARCポリシーは、_dmarcを付けた名前のDNS TXTレコードとして登録する。主に下記の要素で構成される。
v: DMARCのバージョンp: DMARC失敗時の希望ポリシーnone: 何もしない、quarantine: メールを隔離する、reject:メールを拒否する- あくまでドメイン所有者の希望であり、最終的には受信側のポリシーによってどのように処理されるか決まる
rua: 集約レポートの送付先ruf: 個別の失敗レポート送付先adkim: DKIMアライメント方式r: Relaxed,s: Strict
aspf: SPFアライメント方式r: Relaxed,s: Strict
例えば下記のようになる。
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:report-a@example.com; ruf=mailto:report-f@example.com; adkim=r; aspf=r"処理の流れ
- メールを受信
_dmarc.example.comのTXTレコードを検索- SPFとDKIMを検証
- 各認証ドメインとヘッダーfromドメインの整合性を確認
- どちらか一方がPass + 整合ならDMARC Pass、そうでなければDMARC Fail
p=のポリシーを参考に処理し、必要に応じてレポートを送信
