DNS Check: SPF, DKIM, DMARC, and BIMI Validation
DNSチェック: SPF、DKIM、DMARC、BIMIの検証
説明
Sender Policy Framework (SPF)、DomainKeys Identified Mail (DKIM)、Domain-based Message Authentication, Reporting & Conformance (DMARC)、Brand Indicators for Message Identification (BIMI) は、電子メールの認証となりすましの防止に使用される重要なDNSレコードです。
- SPF: 許可されたメールサーバーのみがドメインに代わって電子メールを送信できるようにします。
- DKIM: 受信者がデジタル署名を介して送信者とメッセージの整合性を確認できるようにします。
- DMARC: SPFとDKIMを連携させ、未認証の電子メールを処理するためのレポートとポリシーを提供します。
- BIMI: 検証済みの電子メールにブランドロゴを追加し、電子メール通信におけるブランドの認知度と信頼性を向上させます。
これらのレコードを適切に構成しないと、フィッシング攻撃や電子メールのなりすましに対する脆弱性が高まり、電子メールの到達性が低下する可能性があります。各チェックにより、電子メール認証メカニズムが正しく実装されていることが確認されます。
推奨事項
適切な電子メール認証を確実に行い、フィッシングや電子メールのなりすましのリスクを軽減するには、SPF、DKIM、DMARC、BIMIのDNSレコードを構成して検証することが不可欠です。以下に、3つの異なるメールサーバー構成について、これらの各メカニズムをセットアップおよび検証する手順を示します。
### SPFレコードの構文を検証する:
dig TXT example.com | grep "v=spf1"
if [ -z "$(dig +short TXT example.com | grep spf1)" ]; then
echo "No SPF record found"
fi
### SPFレコードの長さを確認する:
spf_record=$(dig TXT example.com | grep "v=spf1")
if [ ${#spf_record} -gt 255 ]; then
echo "SPF record exceeds length limit"
fi
### DNSルックアップ制限を検証する:
spf_check=$(dig TXT example.com | grep "v=spf1")
lookup_count=$(echo "$spf_check" | grep -o 'include' | wc -l)
if [ "$lookup_count" -gt 10 ]; then
echo "SPF record exceeds the 10 DNS lookup limit"
fi
### DKIMレコードをクエリする:
dig TXT default._domainkey.example.com | grep "v=DKIM1"
### DKIMレコードの構文を検証する:
dkim_record=$(dig TXT default._domainkey.example.com)
if [[ "$dkim_record" =~ "v=DKIM1" ]]; then
echo "Valid DKIM record"
else
echo "Invalid DKIM record syntax"
fi
### DKIMキーの長さを確認する:
dkim_key=$(dig TXT default._domainkey.example.com | grep -o "p=.*" | cut -d' ' -f2)
if [ ${#dkim_key} -lt 1024 ]; then
echo "DKIM key is too short"
fi
### DMARCレコードをクエリする:
dig TXT _dmarc.example.com | grep "v=DMARC1"
### DMARCレコードの構文を検証する:
dmarc_record=$(dig TXT _dmarc.example.com)
if [[ "$dmarc_record" =~ "v=DMARC1" ]]; then
echo "Valid DMARC record"
else
echo "Invalid DMARC record syntax"
fi
### 不足しているDMARCレコードを確認する:
if [ -z "$(dig +short TXT _dmarc.example.com)" ]; then
echo "No DMARC record found"
fi
### DMARCポリシーを分析する:
policy=$(dig TXT _dmarc.example.com | grep "p=")
if [[ "$policy" =~ "p=none" ]]; then
echo "DMARC policy is set to 'none' – no action taken on unauthenticated emails"
elif [[ "$policy" =~ "p=reject" ]]; then
echo "DMARC policy is set to 'reject' – unauthenticated emails are rejected"
elif [[ "$policy" =~ "p=quarantine" ]]; then
echo "DMARC policy is set to 'quarantine' – unauthenticated emails are flagged"
fi
### BIMIレコードをクエリする:
dig TXT default._bimi.example.com | grep "v=BIMI1"
### BIMIレコードの構文を検証する:
bimi_record=$(dig TXT default._bimi.example.com)
if [[ "$bimi_record" =~ "v=BIMI1" ]]; then
echo "Valid BIMI record"
else
echo "Invalid BIMI record syntax"
fi
### BIMIロゴのURLを検証する:
logo_url=$(dig TXT default._bimi.example.com | grep "l=" | cut -d'=' -f2)
if curl --output /dev/null --silent --head --fail "$logo_url"; then
echo "Valid logo URL"
else
echo "Invalid logo URL"
fi
リンク
標準
- SOC2_CONTROLS:
- CC_6_1
- CC_6_6
- CC_6_7
- CC_7_1
- CC_7_2
- CC_7_3
- CC_7_4
- CC_8_1
- CC_9_1
- CC_9_2
- PCI_STANDARDS:
- REQ_12_3
- REQ_12_10
- CCPA:
- CCPA_1798_150
- GDPR:
- ART_24
- ART_32
- ART_33
- ART_34
- CWE_TOP_25:
- CWE_787
- CWE_125
- CWE_416
- CWE_119
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213