Saltar a contenido

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

Comprobación de DNS: Validación de SPF, DKIM, DMARC y BIMI

Descripción

Sender Policy Framework (SPF), DomainKeys Identified Mail (DKIM), Domain-based Message Authentication, Reporting & Conformance (DMARC) y Brand Indicators for Message Identification (BIMI) son registros DNS clave que se utilizan para autenticar el correo electrónico y evitar la suplantación de identidad.

  • SPF: Garantiza que solo los servidores de correo autorizados puedan enviar correos electrónicos en nombre de un dominio.
  • DKIM: Permite al destinatario verificar el remitente y la integridad del mensaje a través de una firma digital.
  • DMARC: Alinea SPF y DKIM para proporcionar informes y una política para el manejo de correos electrónicos no autenticados.
  • BIMI: Agrega logotipos de marca a los correos electrónicos verificados, mejorando el reconocimiento de marca y la confianza en las comunicaciones por correo electrónico.

Si no configura correctamente estos registros, se puede generar una mayor vulnerabilidad a los ataques de phishing, la suplantación de correo electrónico y una reducción en la capacidad de entrega de correo electrónico. Cada verificación garantiza que los mecanismos de autenticación de correo electrónico se implementen correctamente.

Recomendación

Para garantizar la autenticación adecuada del correo electrónico y mitigar el riesgo de phishing y suplantación de correo electrónico, es esencial configurar y validar sus registros DNS de SPF, DKIM, DMARC y BIMI. A continuación se detallan los pasos para configurar y verificar cada uno de estos mecanismos para tres configuraciones diferentes de servidores de correo electrónico.

### Validar la sintaxis del registro SPF:

dig TXT example.com | grep "v=spf1"
### Verificar si faltan registros SPF:
if [ -z "$(dig +short TXT example.com | grep spf1)" ]; then
  echo "No SPF record found"
fi

### Verificar la longitud del registro SPF:

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

### Verificar los límites de búsqueda de 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

### Consultar el registro DKIM:

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

### Validar la sintaxis del registro 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

### Verificar la longitud de la clave 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

### Consultar el registro DMARC:

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

### Validar la sintaxis del registro 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

### Verificar si faltan registros DMARC:

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

### Analizar la política 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

### Consultar el registro BIMI:

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

### Validar la sintaxis del registro 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

### Verificar la URL del logotipo 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

Enlaces

Estándares

  • 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