
Vérificateur en masse de la possibilité d'usurpation de domaine utilisant une analyse des enregistrements SPF et DMARC faisant autorité, avec une logique d'usurpation personnalisée testée dans des conditions réelles et une énumération DKIM optionnelle.
Spoofy est un programme qui vérifie si une liste de domaines peut être usurpée en se basant sur les enregistrements SPF et DMARC. Vous vous demandez peut-être : « Pourquoi avons-nous besoin d'un autre outil capable de vérifier si un domaine peut être usurpé ? »
Eh bien, Spoofy est différent, et voici pourquoi :
- Logique d'usurpation personnalisée et testée manuellement (pas de suppositions ni de spéculations, résultats de tests réels)
- Découverte d'enregistrements basée sur les standards : évaluation SPF selon la RFC 7208 et parcours de l'arbre DMARC selon la RFC 9989, y compris
sp/nppour les sous-domaines- Recherches en masse précises via un résolveur partagé avec cache et basculement (1.1.1.1, 8.8.8.8, 9.9.9.9)
- Compteur de requêtes DNS SPF et de recherches void, plus détection des domaines include SPF non enregistrés
- Énumération optionnelle des sélecteurs DKIM via API
Spoofy nécessite Python 3.9+. Installez-le depuis PyPI :
pip3 install spoofy
spoofy -d example.com
Ou exécutez-le depuis un clone avec pip3 install -r requirements.txt et ./spoofy.py à la place de spoofy. L'utilisation est présentée ci-dessous :
Usage:
spoofy -d [DOMAIN] -o [stdout, xls or json] -t [NUMBER_OF_THREADS] [--dkim] [--dns-server IP]
OR
spoofy -iL [DOMAIN_LIST] -o [stdout, xls or json] -t [NUMBER_OF_THREADS] [--dkim] [--dns-server IP]
Options:
-d : Process a single domain.
-iL : Provide a file containing a list of domains to process (blank lines and # comments are skipped).
-o : Specify the output format: stdout (default), xls, or json.
-t : Set the number of threads to use (default: 4).
--dkim : Enable DKIM selector enumeration via API (optional).
--dns-server : Query this resolver instead of 1.1.1.1, 8.8.8.8 and 9.9.9.9.
Examples:
spoofy -d example.com -t 10
spoofy -d example.com --dkim
spoofy -iL domains.txt -o xls
spoofy -iL domains.txt -o json --dkim
(Le tableau d'usurpabilité liste toutes les combinaisons de configurations SPF et DMARC qui impactent la délivrabilité en boîte de réception, à l'exception des modificateurs DKIM.) Télécharger ici
| Code | Résultat | SPOOFING_POSSIBLE |
|---|---|---|
| 0 | Usurpation possible | true |
| 1 | Usurpation de sous-domaine possible | true |
| 2 | Usurpation du domaine organisationnel possible | true |
| 3 | Usurpation possible (p=quarantine avec pct < 100) | null |
| 4 | Usurpation possible (dépend de la boîte mail) | null |
| 5 | Usurpation du domaine organisationnel possible (dépend de la boîte mail) | null |
| 6 | Usurpation de sous-domaine possible (dépend de la boîte mail) | null |
| 7 | Usurpation de sous-domaine possible, usurpation du domaine organisationnel possible | true |
| 8 | Usurpation impossible | false |
| 9 | Impossible de déterminer (une requête DNS a échoué) | null |
Le verdict correspond au code testé pour le mécanisme SPF all du domaine et les balises DMARC p, sp et aspf telles qu'écrites dans l'enregistrement. spoofy/master_table.py contient le tableur sous forme de données (python3 -m spoofy.master_table le réécrit après modification du tableur), et test.py vérifie que chaque ligne est reproduite. Les entrées non couvertes par le tableau sont traitées comme suit :
p en mode enforcing avec aspf mais sans sp (24 combinaisons non testées) : sp prend la valeur de p par défaut, donc la ligne testée avec sp explicite est utilisée._dmarc) : le résultat du sous-domaine testé pour les enregistrements SPF et DMARC du parent, avec np à la place de sp lorsque le sous-domaine n'existe pas.pct inférieur à 100 avec p=quarantine : code 3, puisque le courrier non échantillonné reçoit p=none. Avec p=reject, le courrier non échantillonné est tout de même mis en quarantaine, donc pct ne change pas le verdict.t=y (mode test de la RFC 9989) : la politique descend d'un niveau (reject vers quarantine, quarantine vers none) avant la recherche.La création du tableau d'usurpabilité a impliqué de lister toutes les configurations SPF et DMARC pertinentes, de les combiner, puis de mener une collecte d'informations SPF et DMARC à l'aide d'une première version de Spoofy sur un grand nombre de domaines du gouvernement américain. Le test pour déterminer si une combinaison SPF et DMARC était usurpable ou non a été réalisé à l'aide de la suite de pentest de sécurité des emails emailspooftest avec Microsoft 365. Cependant, les tests initiaux ont été menés avec Protonmail et Gmail, mais ces services se sont avérés utiliser des vérifications de recherche inversée qui affectaient les résultats, en particulier pour les tests d'usurpation de sous-domaine. Par conséquent, Microsoft 365 a été utilisé pour les tests, car il offrait un meilleur contrôle sur le traitement du courrier.
Après les tests initiaux avec Microsoft 365, certaines combinaisons ont été retestées avec Protonmail et Gmail en raison des différences dans leur traitement des bannières dans les emails. Protonmail et Gmail peuvent placer le courrier usurpé en boîte de réception avec une bannière ou en spam sans bannière, ce qui conduit certaines combinaisons SPF et DMARC à être signalées comme « Dépend de la boîte mail » lors de l'utilisation de Spoofy. En revanche, Microsoft 365 place les deux cas en spam. Le processus de test et de collecte de données a pris plusieurs jours, après quoi un bon tableau maître a été compilé et utilisé comme base pour la logique d'usurpabilité de Spoofy.
Cet outil est uniquement destiné aux tests et à des fins académiques et ne peut être utilisé que lorsque un consentement strict a été donné. Ne l'utilisez pas à des fins illégales ! Il relève de la responsabilité de l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables. Les développeurs n'assument aucune responsabilité et ne sont pas responsables de tout usage abusif ou dommage causé par cet outil et ce logiciel.
Ce projet est sous licence Creative Commons Attribution-NonCommercial 4.0 International - voir le fichier LICENSE pour plus de détails