Aller au contenu

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

Détectez ce problème avec Ostorlab

Ostorlab recherche ce problème dans les applications web, les API et les réseaux.

Créer un compte

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
  • OWASP_TOP_10:
    • A05_2021