
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
N'hésitez pas à soumettre une pull request pour déposer votre rapport de bug ici.
Vous pouvez le vérifier dans l'en-tête "Authentication-results" dans les en-têtes bruts du message. Si l'en-tête affiche dmarc=pass, cela signifie que l'e-mail a passé l'authentification DMARC. Vous pouvez consulter quelques vidéos de démonstration ici.
Il y a plusieurs raisons possibles si vous échouez à envoyer un e-mail : 1) votre FAI bloque les e-mails sortants sur le port 25 pour empêcher le spam. Dans ce cas, vous devez demander l'autorisation au FAI ; 2) l'adresse IP est sur la liste de spam des services de messagerie cibles. Dans de nombreux cas, vous pouvez résoudre le problème ici, https://www.spamhaus.org/lookup/ ; 3) certains services de messagerie vérifient s'il existe un enregistrement PTR pour l'IP d'envoi, vous devrez peut-être également définir l'enregistrement PTR pour contourner cette vérification ; 4) l'e-mail ne peut pas passer la validation de format du service de messagerie cible, vous voudrez peut-être essayer un cas de test différent.
Actuellement, espoofer se concentre sur le contournement de l'authentification SPF/DKIM/DMARC et ne vise pas le contournement du filtre anti-spam. Mais vous pouvez essayer d'utiliser une adresse IP d'envoi réputée, un domaine et un contenu de message bénin pour contourner le filtre anti-spam.
Selon nos expériences antérieures, certains services de messagerie filtrent silencieusement les e-mails suspects.
Vous devrez configurer votre propre serveur DNS autoritaire, plutôt que d'utiliser des services d'hébergement DNS tiers, car certains services d'hébergement DNS imposent des restrictions sur la définition de caractères spéciaux. Voir problème.
N'hésitez pas à ajouter d'autres cas de test.