Aller au contenu

DNS Check: SPF, DKIM, DMARC, and BIMI Validation

Vérification DNS : Validation SPF, DKIM, DMARC et BIMI

Description

Sender Policy Framework (SPF), DomainKeys Identified Mail (DKIM), Domain-based Message Authentication, Reporting & Conformance (DMARC) et Brand Indicators for Message Identification (BIMI) sont des enregistrements DNS clés utilisés pour authentifier les e-mails et empêcher l'usurpation d'identité.

  • SPF : Garantit que seuls les serveurs de messagerie autorisés peuvent envoyer des e-mails au nom d'un domaine.
  • DKIM : Permet au destinataire de vérifier l'expéditeur et l'intégrité du message via une signature numérique.
  • DMARC : Aligne SPF et DKIM pour fournir des rapports et une politique de gestion des e-mails non authentifiés.
  • BIMI : Ajoute des logos de marque aux e-mails vérifiés, améliorant ainsi la reconnaissance de la marque et la confiance dans les communications par e-mail.

L'incapacité à configurer correctement ces enregistrements peut entraîner une vulnérabilité accrue aux attaques de phishing, à l'usurpation d'e-mails et une réduction de la délivrabilité des e-mails. Chaque vérification garantit que les mécanismes d'authentification des e-mails sont correctement implémentés.

Recommandation

Pour garantir une authentification appropriée des e-mails et atténuer les risques de phishing et d'usurpation d'e-mails, il est essentiel de configurer et de valider vos enregistrements DNS SPF, DKIM, DMARC et BIMI. Vous trouverez ci-dessous les étapes de configuration et de vérification de chacun de ces mécanismes pour trois configurations de serveurs de messagerie différentes.

### Valider la syntaxe de l'enregistrement SPF :

dig TXT example.com | grep "v=spf1"
### Vérifier l'absence d'enregistrements SPF :
if [ -z "$(dig +short TXT example.com | grep spf1)" ]; then
  echo "No SPF record found"
fi

### Vérifier la longueur de l'enregistrement SPF :

spf_record=$(dig TXT example.com | grep "v=spf1")
if [ ${#spf_record} -gt 255 ]; then
  echo "SPF record exceeds length limit"
fi

### Vérifier les limites de recherche 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

### Interroger l'enregistrement DKIM :

dig TXT default._domainkey.example.com | grep "v=DKIM1"

### Valider la syntaxe de l'enregistrement 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

### Vérifier la longueur de la clé 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

### Interroger l'enregistrement DMARC :

dig TXT _dmarc.example.com | grep "v=DMARC1"

### Valider la syntaxe de l'enregistrement 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

### Vérifier l'absence d'enregistrements DMARC :

if [ -z "$(dig +short TXT _dmarc.example.com)" ]; then
  echo "No DMARC record found"
fi

### Analyser la politique 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

### Interroger l'enregistrement BIMI :

dig TXT default._bimi.example.com | grep "v=BIMI1"

### Valider la syntaxe de l'enregistrement 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

### Vérifier l'URL du logo BIMI :

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

Liens

Normes

  • 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