Comment cracker une clé DKIM 512 bits pour moins de 8 $ de coûts cloud
(dmarcchecker.app)- Une analyse du top 1 million de sites web a trouvé plus de 1 700 clés publiques DKIM de moins de 1 024 bits, et l’expérience vérifiait si la clé RSA DKIM 512 bits de redfin.com pouvait réellement être exploitée
- En décodant le tag
pd’un enregistrement DKIM pour obtenir le module RSAnet l’exposant publice=65537, le module a ensuite été factorisé avec CADO-NFS - Sur un serveur Hetzner avec 8 vCPU dédiés et 32 Go de RAM, il a fallu environ 86 heures pour décomposer
nen deux nombres premierspetq, puis reconstruire la clé privée RSA à partir de là - Une fois la clé privée reconstruite, des e-mails signés comme venant de
security@redfin.comont été rejetés par Gmail et Outlook, mais Yahoo Mail, Mailfence et Tuta ont renvoyédkim=pass - Avec la politique DMARC
p=reject; pct=100de redfin.com, la réussite de DKIM entraînait celle de DMARC, ce qui implique que les fournisseurs de messagerie devraient refuser les signatures DKIM RSA de moins de 1 024 bits
Le problème des clés DKIM 512 bits encore en circulation
- Une étude des enregistrements SPF, DKIM et DMARC du top 1 million de sites web a trouvé plus de 1 700 clés publiques DKIM de longueur inférieure à 1 024 bits
- Les clés RSA de moins de 1 024 bits sont considérées comme non sûres, et dans DKIM leur usage est déconseillé depuis la RFC 8301 en 2018
- Le sujet de l’expérience était une clé publique RSA 512 bits trouvée sur
key1._domainkey.redfin.com - L’objectif était de vérifier s’il était possible de reconstituer la clé privée à partir de la seule clé publique afin de signer des e-mails comme s’ils provenaient réellement du domaine d’origine
- L’expérience vérifiait aussi si de grands fournisseurs de messagerie comme Gmail, Outlook.com et Yahoo Mail accepteraient des signatures DKIM produites avec une clé trop courte
Extraction des composants RSA depuis une clé publique DKIM
- Dans le tag
pd’un enregistrement DKIM, la clé publique est encodée en ASN.1 DER, puis réencodée en Base64 - La clé publique a été lue avec
Crypto.PublicKey.RSA.import_keyen Python afin d’en extraire les composants RSA- module
n:10709580243955269690347257968368575486652256021267387585731784527165077094358215924099792804326677548390607229176966588251215467367272433485332943072098119 - exposant public
e:65537
- module
Factorisation du module avec CADO-NFS
- Pour produire la clé privée RSA, il faut décomposer le module
nen produit de deux nombres premierspetq - La factorisation a été réalisée avec CADO-NFS
- CADO-NFS est une implémentation de l’algorithme Number Field Sieve (NFS) utilisé pour factoriser de grands entiers
- Afin de ne pas monopoliser un ordinateur local pendant plusieurs jours, un serveur cloud Hetzner a été loué
- configuration : 8 vCPU dédiés, AMD EPYC série 7003, 32 Go de RAM
- OS : Ubuntu
- 32 Go de swap ont été ajoutés pour garantir suffisamment de mémoire pendant l’opération
- La factorisation a été lancée en passant le module
nàcado-nfs.py - L’ensemble du travail a pris environ 86 heures sur le serveur 8 vCPU, et
na été décomposé en les deux nombres premiers suivantsp = 97850895333751392558280999318309697780438485965134147739065017624372104720767q = 109447953515671602102748820944693252789237215829169932130613751100276125683257
- Le temps peut être réduit avec un serveur plus puissant ou une exécution distribuée sur plusieurs systèmes, et CADO-NFS simplifie ce type d’exécution distribuée
Reconstruction de la clé privée RSA
- Après avoir obtenu
p,qete, la clé privée RSA a été reconstruite avec Python et PyCryptodome - Les calculs ont utilisé les valeurs et la procédure suivantes
n = p * qphi = (p-1) * (q-1)d = inverse(e, phi)RSA.construct((n, e, d, p, q))
- Le résultat était une clé privée RSA au format PEM, intégrée à la configuration OpenDKIM pour signer les e-mails de test
Résultats de vérification DKIM selon les fournisseurs de messagerie
- La clé privée reconstruite a été ajoutée à OpenDKIM, puis des e-mails de test avec l’adresse FROM
security@redfin.comont été envoyés à plusieurs services d’hébergement e-mail - La plupart des fournisseurs ont jugé la clé 512 bits non sûre et ont rejeté la signature DKIM, mais trois ont renvoyé
dkim=pass - Résultats par fournisseur
- Gmail : FAIL
- Outlook : FAIL
- Yahoo Mail : PASS
- Zoho : FAIL
- Fastmail : FAIL
- Proton Mail : FAIL
- Mailfence : PASS
- Tuta : PASS
- GMX : FAIL
- OnMail : FAIL
- redfin.com dispose d’un enregistrement DMARC valide de la forme
v=DMARC1;p=reject;pct=100;... - Pour redfin.com, un succès de la vérification DKIM entraînait aussi un succès de la vérification DMARC, et satisfaisait également aux exigences de BIMI
Coût et mesures opérationnelles
- Il y a 30 ans, casser une clé publique RSA 512 bits relevait de la classe des supercalculateurs, mais aujourd’hui cela peut être fait sur un serveur cloud pour moins de 8 $ US
- Avec un ordinateur personnel puissant de 16 cœurs ou plus, cela pourrait être encore plus rapide et moins coûteux
- Il n’y a aucune raison de conserver des clés DKIM 512 ou 768 bits, et les fournisseurs de messagerie devraient rejeter automatiquement les signatures DKIM générées avec des clés RSA de moins de 1 024 bits
- Yahoo, Mailfence et Tuta ont reçu les résultats de l’expérience ainsi que la recommandation
- Les propriétaires de domaines devraient vérifier la présence d’anciens enregistrements DKIM dans leur configuration DNS
- le tag
pd’un enregistrement DKIM peut être contrôlé simplement en comptant le nombre de caractères Base64 - une clé publique RSA 1 024 bits comporte au minimum 216 caractères en Base64
- le tag
1 commentaires
Avis sur Hacker News
Il y a 14 ans déjà, il était possible de casser des clés RSA DKIM de 512 bits : https://blog.jgc.org/2010/06/facebooks-dkim-rsa-key-should-b...
L’idée était qu’avec une clé courte, une signature DKIM ne reste pas longtemps une preuve, ce qui préserve une forme de déni plausible en rendant difficile de prouver plus tard qu’un e-mail donné était authentique
Bien sûr, cela ne veut pas dire que la plupart des entreprises utilisaient des clés courtes pour cette raison, mais plutôt qu’il existait une certaine perception selon laquelle les clés courtes n’étaient pas entièrement mauvaises
La possibilité de déni dans DKIM est un sujet auquel je reviens depuis longtemps [1] ; ces clés courtes ne sont clairement pas une solution, mais j’y vois le résultat d’une pensée confuse autour de DKIM et d’une communauté qui ne voulait pas accepter les implications de tout système de signature des e-mails
[1] https://blog.cryptographyengineering.com/2020/11/16/ok-googl...
https://www.wired.com/2012/10/dkim-vulnerability-widespread/
En gros, en 14 ans, on est passé de quelques semaines à 8 heures
Si vous voulez essayer pour le fun, créez une clé DKIM de 4096 bits
Les vérificateurs DKIM/SPF en ligne regardent seulement le DNS et disent tous que tout est correct, mais les e-mails de test échouent
Ils affichent une explication remarquable du genre
STATUS: Fail,DKIM: Pass,SPF: PassUtiliser une clé de plus de 2048 bits dans une entrée DKIM est autorisé et valide, mais les validateurs n’étaient pas obligés de gérer les clés de plus de 2048 bits
J’ai perdu quelques cheveux en l’apprenant à mes dépens
Fait intéressant, les sites disent que les trois éléments sont corrects et valides, tout en traitant l’e-mail comme un échec
C’est probablement parce que la vérification des enregistrements DNS et la validation des e-mails sont gérées par des logiciels différents
Les validateurs doivent pouvoir vérifier les signatures avec des clés de 512 à 2048 bits, et peuvent aussi vérifier des clés plus grandes
J’ai écrit un mémoire de master sur ce sujet il y a un an ; aujourd’hui, les principaux fournisseurs de messagerie prennent tous en charge le 4096 bits, et certains vont même jusqu’à 16384 bits
Je me demande pourquoi on n’augmente pas massivement la taille des clés dans toute la cryptographie
Même si ce n’est pas une solution, ça semble au moins pouvoir faire gagner du temps
Les performances de calcul augmentent vite et on parle sans cesse d’ordinateurs quantiques, mais j’ai l’impression que tout le monde reste immobile
Certes, les grandes clés coûtent plus cher en calcul, mais nous avons aussi davantage de ressources de calcul ; ne devrait-on pas les utiliser pour la défense, pas seulement pour l’attaque ?
Même une chose simple comme forcer TLS 1.3 côté client au lieu de TLS 1.2 casse beaucoup de choses, y compris le site HN
Ces chiffres ne concernent pas le niveau de technologie des appareils, mais les limites maximales permises par la thermodynamique
En conclusion, casser AES-256 ou RSA-4096 par force brute est physiquement impossible
Les clés de 1024 bits sont en cours d’abandon depuis plus de dix ans dans de nombreux systèmes cryptographiques
À l’exception de quelques cas en retard, les clés de 2048 bits ne sont menacées que par les ordinateurs quantiques, et ceux-ci menacent RSA lui-même
Le progrès n’est pas linéaire : ce n’est pas parce que 1024 est devenu faible que 2048 va mécaniquement tomber bientôt, et même 1024 n’est pas facile à attaquer en pratique aujourd’hui
DKIM est l’une des exceptions
Côté DKIM, on attend l’adoption large de Ed25519, ce qui résoudra plusieurs désagréments
En général, la douleur est transférée directement aux utilisateurs, plutôt qu’aux opérateurs du service, avec l’espoir que les utilisateurs se plaindront assez fort pour que les opérateurs s’en préoccupent
Mais les utilisateurs risquent aussi de passer chez un concurrent qui évite qu’une petite chose comme la sécurité bloque le chiffre d’affaires
En fait, cela revient à demander : « pourquoi ne faisons-nous pas ce que nous faisons déjà ? »
Avec CADO-NFS, c’est étonnamment facile
Il y a quelques semaines, pour le travail, j’ai factorisé une clé RSA DKIM de 512 bits sur un ordinateur de bureau, et cela n’a pris que 28 heures
Plus précisément, c’était sur un AMD Zen 5 9900X
Malheureusement, les clés de 1024 bits restent hors de portée d’un effort de niveau hobbyiste, mais un projet académique de l’ampleur de celui qui a factorisé une clé de 768 bits en 2010 pourrait peut-être y parvenir : https://eprint.iacr.org/2010/006.pdf
Hier, j’ai reçu un e-mail de Bank of America au sujet d’un problème de configuration de compte
Il est vrai que j’avais créé un nouveau compte, et l’e-mail connaissait ce fait ainsi que le nom de l’entreprise, etc.
Il ne contenait aucun lien, seulement une consigne d’appeler le numéro professionnel de BofA ; j’ai vérifié le numéro sur le site de BofA, c’était le même, donc j’ai appelé
Mais personne n’a pu me dire pourquoi j’avais reçu cet e-mail ni quel était le problème avec le compte, et le conseiller n’a pas non plus trouvé de trace de l’envoi de cet e-mail
Je suis sûr à 100 % que cet e-mail venait de Bank of America
Il n’y avait aucun élément de phishing, ni lien, ni numéro de téléphone malveillant
SPF, DKIM et DMARC passaient tous dans les ARC-Authentication-Results de Google, et la clé DKIM faisait aussi 2048 bits
Quand j’ai demandé à Bank of America d’enquêter, ils m’ont répondu que “c’était probablement un message de phishing” et m’ont envoyé un lien expliquant comment se prémunir du phishing
Il est très probable qu’il s’agissait simplement d’une erreur : un système a généré un e-mail après avoir lancé trop tôt un contrôle de cohérence pendant la création du compte
Mais comme ils ont dit que c’était du “phishing”, j’ai envoyé un FedEx au CTO avec l’ensemble des éléments en pièce jointe
C’est l’un ou l’autre : soit leur clé DKIM a fuité et ils doivent immédiatement publier une alerte publique, soit des employés et des systèmes IT incompétents m’ont fait tourner en rond et perdre une heure
Dans les deux cas, je veux une enquête complète et une résolution
Certains fournisseurs DNS sont tellement mauvais qu’ils ne permettent de configurer que des clés d’une longueur de 1024 bits
Par exemple, c’est le cas de wordpress.com
Pour référence, le dernier nombre RSA cassé était RSA-250, c’est-à-dire 829 bits, et cela a pris 2700 années-cœur en 2020 [1]
En revanche, RSA-155, c’est-à-dire 512 bits, a déjà été factorisé en 1999
Ce n’est pas une situation dangereuse
[1]: https://sympa.inria.fr/sympa/arc/cado-nfs/2020-02/msg00001.h...
Au motif que cela n’offre pas un niveau de sécurité suffisant
Ce n’est pas au niveau de bloquer la NSA, mais vu que DKIM n’est qu’une couche de protection parmi d’autres, cela semble suffisant pour arrêter les spammeurs
Je me demande s’il y a une limite à la taille des enregistrements TXT, ou si certains essaient à tout prix de parser les enregistrements TXT qui ressemblent à du DKIM, échouent, puis refusent de les ajouter
Casser une clé de 512 bits pour une bonne démonstration reste une recherche en sécurité très utile, même si cela a déjà été fait
Publier “voici la liste des endroits qui utilisent encore du 512 bits, il faut migrer” est également légitime
Mais casser directement une clé réelle utilisée en production me met mal à l’aise : personnellement, j’ai l’impression que cela franchit une limite éthique
Je ne suis pas avocat, mais cela pourrait aussi être un délit, et ça semble un peu inutile
Il suffit de chercher
now no longer availabledans le texte originalEn général, quand on veut montrer qu’un système en ligne est vulnérable, on reproduit la vulnérabilité de bonne foi, on documente la recherche, puis on demande un examen
Le processus est le même qu’il s’agisse de casser un système cryptographique, d’obtenir l’exécution de code arbitraire sur une console de jeu verrouillée, de prouver qu’on peut manipuler les données d’une machine de vote, ou de montrer qu’on peut modifier des commentaires de Q&A dans Google Meet
Si vous vous contentez de dire que c’est vulnérable, on peut vous ignorer ; si vous dites que c’est vulnérable et que vous le prouvez, il devient difficile de vous ignorer
Et si, en plus, vous fixez un délai de divulgation conforme aux standards du secteur et expliquez que vous publierez la vulnérabilité après environ 60 jours de tentatives de contact, il ne reste pratiquement plus de marge pour vous ignorer
Ce n’est que des mathématiques
Ce qui est illégal, c’est d’utiliser ces mathématiques pour envoyer des e-mails frauduleux ou qui enfreignent la loi dans une juridiction donnée
Le point central, ce ne sont pas les mathématiques, mais les actions et l’intention
Signaler que quelqu’un fait quelque chose de stupide n’est pas non plus illégal, mais ces personnes peuvent essayer de vous rendre la vie difficile
Du genre : “montrer qu’un bug est exploitable, c’est acceptable, mais écrire un code de preuve de concept, c’est franchir la ligne”
Le problème, c’est que la plupart des gens n’écoutent pas la recherche en sécurité si on ne leur montre pas que c’est réellement possible
En revanche, parmi les 10 grands fournisseurs de messagerie qui ne respectaient pas correctement la RFC DKIM, 3 — Yahoo, Tuta, Mailfence — ont été publiquement nommés après notification
C’est pour ça que j’ai dû arrêter de gérer mon DNS avec Hover
Ils ne prennent pas en charge les enregistrements TXT de plus de 255 caractères, et je n’ai pas non plus trouvé d’exemple où des enregistrements segmentés fonctionnaient chez Hover
J’ai fini par utiliser Digital Ocean
Si ce genre de problème doit durer encore 10 ans, j’aimerais que la cryptographie à courbes elliptiques devienne la norme
Dans le passage “la plupart des fournisseurs ont correctement identifié les clés de 512 bits comme non sûres et ont rejeté les signatures DKIM, mais trois grands fournisseurs — Yahoo Mail, Mailfence, Tuta — ont signalé dkim=pass”, je me demande si, chez Google, la signature DKIM a vraiment échoué parce qu’elle n’était pas sûre, ou si c’était à cause d’un échec SPF
dkim=policy (weak key)C’est exactement l’exigence selon laquelle “les vérificateurs ne doivent pas considérer comme valide une signature utilisant une clé RSA de moins de 1024 bits”
Le fait que 512 bits soit un nombre grand ou petit dépend de s’il s’agit de cryptographie symétrique ou de cryptographie asymétrique
On peut considérer que la cryptographie asymétrique est toujours 8 fois plus faible que la cryptographie symétrique
DKIM étant un mécanisme asymétrique, un DKIM 512 bits correspond à 64 bits en termes de hachage symétrique, un niveau cassé depuis longtemps
Même SHA-1 en 160 bits est considéré comme cassé
Pour un DKIM d’une robustesse comparable à SHA-3 en 512 bits, il faudrait au moins 4096 bits, et cela n’inclurait toujours pas les techniques d’atténuation des attaques par rejeu de SHA-3
C’est une norme qui ajoute une signature aux en-têtes d’e-mail et permet de la vérifier
Malheureusement, DKIM ne prend en charge que les signatures
rsa-sha1etrsa-sha256: https://datatracker.ietf.org/doc/html/rfc6376/#section-3.3Ce serait bien que DKIM soit révisé pour autoriser Ed25519 ou des signatures similaires
Par exemple, l’ECC 224 bits est à peu près comparable au RSA 2048 bits
Les deux sont des approches asymétriques
À l’inverse, les courbes elliptiques asymétriques offrent une robustesse similaire à celle d’un chiffrement symétrique comme AES
Bien sûr, elles restent vulnérables aux ordinateurs quantiques