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"
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