
Una herramienta de prueba de suplantación de correo electrónico que tiene como objetivo eludir SPF/DKIM/DMARC y falsificar firmas DKIM.🍻
espoofer es una herramienta de prueba de código abierto para eludir la autenticación SPF, DKIM y DMARC en sistemas de correo electrónico. Ayuda a administradores de servidores de correo y probadores de penetración a verificar si el servidor de correo y el cliente objetivo son vulnerables a ataques de suplantación de correo electrónico o pueden ser utilizados para enviar correos falsificados.
Figura 1. Un caso de nuestros ataques de suplantación en Gmail (Solucionado, Video de demostración)
La suplantación de correo electrónico es una gran amenaza tanto para individuos como para organizaciones (Brecha de Yahoo, John Podesta). Para abordar este problema, los servicios de correo modernos y los sitios web emplean protocolos de autenticación -- SPF, DKIM y DMARC -- para prevenir la falsificación de correos.
Nuestra investigación más reciente muestra que la implementación de estos protocolos sufre una serie de problemas de seguridad, que pueden ser explotados para eludir las protecciones SPF/DKIM/DMARC. La Figura 1 demuestra uno de nuestros ataques de suplantación para eludir DKIM y DMARC en Gmail. Para más detalles técnicos, consulte nuestra charla en Black Hat USA 2020 (con video de presentación) o el artículo de USENIX Security 2020.
En este repositorio, resumimos todos los casos de prueba que encontramos y los integramos en esta herramienta para ayudar a administradores y profesionales de seguridad a identificar y localizar rápidamente dichos problemas de seguridad.
Versión LaTeX:
@inproceedings{chen-email,
author = {Jianjun Chen and Vern Paxson and Jian Jiang},
title = {Composition Kills: A Case Study of Email Sender Authentication},
booktitle = {29th {USENIX} Security Symposium ({USENIX} Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {2183--2199},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/chen-jianjun},
publisher = {{USENIX} Association},
month = aug,
}
Versión Word:
Jianjun Chen, Vern Paxson, and Jian Jiang. "Composition kills: A case study of email sender authentication." In 29th USENIX Security Symposium (USENIX Security 20), pp. 2183-2199. 2020.
git clone https://github.com/chenjj/espoofer
sudo pip3 install -r requirements.txt
Versión de Python: Python 3 (>=3.7).
espoofer tiene tres modos de trabajo: servidor ('s', modo predeterminado), cliente ('c') y manual ('m'). En modo servidor, espoofer funciona como un servidor de correo para probar la validación en servicios receptores. En modo cliente, espoofer funciona como un cliente de correo para probar la validación en servicios emisores. El modo manual se utiliza para fines de depuración.

Figura 2. Tres tipos de atacantes y sus modos de trabajo
Para ejecutar espoofer en modo servidor, necesita tener: 1) una dirección IP (1.2.3.4) cuyo puerto de salida 25 no esté bloqueado por el ISP, y 2) un dominio (attack.com).
attack.comselector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.comattack.com TXT "v=spf1 ip4:1.2.3.4 +all"
config ={
"attacker_site": b"attack.com", # attack.com
"legitimate_site_address": b"[email protected]", # legitimate.com
"victim_address": b"[email protected]", # [email protected]
"case_id": b"server_a1", # server_a1
}
Puede listar los case_id de todos los casos de prueba usando la opción -l:
python3 espoofer.py -l
python3 espoofer.py
Puede cambiar el case_id en config.py o usar la opción -id en la línea de comandos para probar diferentes casos:
python3 espoofer.py -id server_a1
Para ejecutar espoofer en modo cliente, necesita tener una cuenta en los servicios de correo objetivo. Este ataque explota la falla de algunos servicios de correo para realizar una validación suficiente de los correos recibidos de MUAs locales. Por ejemplo, [email protected] intenta hacerse pasar por [email protected].
config ={
"legitimate_site_address": b"[email protected]",
"victim_address": b"[email protected]",
"case_id": b"client_a1",
"client_mode": {
"sending_server": ("smtp.gmail.com", 587), # Servidor emisor SMTP y puerto
"username": b"[email protected]", # Nombre de usuario y contraseña de su cuenta
"password": b"su_contraseña_aqui",
},
}
Puede listar los case_id de todos los casos de prueba usando la opción -l:
python3 espoofer.py -l
Nota:
sending_serverdebe ser la dirección del servidor SMTP emisor, no la dirección del servidor receptor.
python3 espoofer.py -m c
Puede cambiar el case_id en config.py y ejecutarlo de nuevo, o puede usar la opción -id en la línea de comandos:
python3 espoofer.py -m c -id client_a1
Aquí hay un ejemplo del modo manual:
python3 espoofer.py -m m -helo attack.com -mfrom <[email protected]> -rcptto <[email protected]> -data raw_msg_here -ip 127.0.0.1 -port 25
Bienvenido a enviar un pull request para agregar su reporte de error aquí.
Puede verificarlo en el encabezado Authentication-results en los encabezados del mensaje sin procesar. Si el encabezado muestra dmarc=pass, significa que el correo ha pasado la autenticación DMARC. Puede ver algunos videos de demostración aquí.
Hay varias razones posibles si falla al enviar un correo: 1) su ISP bloquea los correos salientes hacia el puerto 25 para prevenir spam. En este caso, debe solicitar permiso al ISP; 2) la dirección IP está en la lista de spam de los servicios de correo objetivo. En muchos casos, puede resolver el problema aquí: https://www.spamhaus.org/lookup/; 3) algunos servicios de correo verifican si hay un registro PTR para la IP emisora, también puede necesitar configurar el registro PTR para eludir esta verificación; 4) el correo no puede pasar la validación de formato del servicio de correo objetivo, puede intentar un caso de prueba diferente.
Actualmente, espoofer se enfoca en eludir la autenticación SPF/DKIM/DMARC y no tiene como objetivo eludir el filtro de spam. Pero podría intentar usar una dirección IP emisora de buena reputación, un dominio y un contenido de mensaje benigno para eludir el filtro de spam.
En nuestras experiencias anteriores, algunos servicios de correo filtran correos sospechosos de manera silenciosa.
Necesitará configurar su propio servidor DNS autoritativo, en lugar de usar servicios de alojamiento DNS de terceros, ya que algunos servicios de alojamiento DNS tienen restricciones para configurar caracteres especiales. Ver issue.
Bienvenido a agregar más casos de prueba.