Comment Punycode résout-il (ou envisage-t-il de résoudre) le problème avec des caractères identiques?
Dans la plupart des navigateurs, Punycode est désactivé à moins que vous ne l'activiez dans les préférences de langue.
Cela fonctionne très bien, sauf que de nombreux alphabets comme le cyrillique ont un a
identique au a
utilisé dans les scripts latins. Vous ne pouvez pas ignorer le script latin pour des raisons de compatibilité ascendante, ce qui m'amène à penser qu'ils doivent ignorer le cyrillique a
.
Différents clients ont des atténuations différentes, mais le dénominateur commun est qu'ils empêchent généralement un attaquant de mélanger des homographes d'alphabets différents en retombant en punycode si plus d'un alphabet est utilisé:
Google Chrome versions 51 et supérieures utilisent un algorithme similaire à celui utilisé par Firefox. Les versions précédentes affichent un IDN uniquement si tous ses caractères appartiennent à une (et à une seule) des langues préférées de l'utilisateur.
L'approche de Safari consiste à rendre les jeux de caractères problématiques au format Punycode. Cela peut être modifié en modifiant les paramètres des fichiers système de Mac OS X.
Les versions 22 et ultérieures de Mozilla Firefox affichent les IDN si le TLD empêche les attaques par homographes en limitant le choix des caractères pouvant être utilisés dans les noms de domaine ou les libellés ne mélangeant pas les scripts de différentes langues. Sinon, les IDN sont affichés dans Punycode.
Pour parler de votre exemple spécifique de aa.com
en script cyrillique, voici la règle de Google Chrome qui détecte cela et affiche punycode. Les autres navigateurs utilisent généralement des règles similaires:
- Si un nom d'hôte appartient à un TLD non-IDN (domaine de premier niveau) tel que "com", "net" ou "uk" et que toutes les lettres d'une étiquette donnée appartiennent à un ensemble de lettres cyrilliques ressemblant à du latin. lettres (par exemple, lettre cyrillique IE - е), affichez punycode.
Comment Punycode résout-il (ou envisage-t-il de résoudre) le problème avec des caractères identiques?
Il ne résout ni ne cherche à résoudre, puisqu'il n'a jamais été conçu pour cela (son seul but est de convertir une étiquette utilisant des caractères Unicode en une étiquette utilisant uniquement ASCII lettres minuscules, chiffres et tirets, et retour) et ce que vous sous-entendez est bien plus compliqué que vous ne le pensez.
Premièrement, ce n'est pas un problème à commencer par les IDN, vous avez exactement le même problème en ASCII! Dans certaines polices, 1
(le chiffre un), l
(la lettre l) et i
/I
(la lettre i en minuscule ou en majuscule) peuvent apparaître très proches. et créer une ambiguïté.
L'ambiguïté est le plus souvent résolue par les humains immédiatement à cause du contexte qui les entoure, qui est plus difficile à comprendre pour les ordinateurs.
Il n'y a pas d'algorithme pour "résoudre" ce problème.
Les IDN sont à la croisée de différentes normes et réglementations:
.DE
); cette FAQ à http: //www.unicode.org/faq/idn.html montre les différences, les similitudes et les problèmes entre euxbg
en cyrillique qui devient БГ
, jugé trop proche de br
qui se tient devant le Brésil - et en fait, l'ICANN vient de publier des lignes directrices pour "l'atténuation des risques" de telles cases: https: //www.icann.org/en/system/files/files/guideline-risk-mitigation-measures-evaluation-28mar19-en.pdf ), et Les gTLD IDN ont été autorisés à faire une demande lors de l'ouverture de nouveaux TLD par l'ICANN 2010-2012. Il y en a donc quelques-uns, mais pas beaucoup (voir au bas de https: //www.iana.org/domains/root/db pour des exemples, pourquoi en bas? Parce qu'ils sont ordonnés par leur forme LDH, c'est-à-dire xn--something
, donc commençant évidemment par x
ils ne viennent pas en premier par ordre alphabétique).cn
, .tw
, .kr
et .jp
partageant certains caractères), tous n’ayant pas commencé à la même heure , les règles et la liste des caractères autorisés peuvent avoir été différentes (il existe des travaux pour converger sur des ensembles communs, à différents niveaux, mais cela prend du temps).N'oubliez pas que tous les registres ne sont pas des gTLD et ne sont donc pas liés par les règles de l'ICANN, et que tous les registres ne suivent pas IDNA2008. C'est pourquoi, par exemple, vous pouvez enregistrer des noms de domaine avec des caractères emojis dans .ws
car ce ccTLD vient de décider de l'accepter, car il s'agit de leur droit juridictionnel. Essayez http: // ???? .ws /! Mais voir ce document ICANN à l'adresse https: //www.icann.org/en/system/files/files/idn-emojis-domain-names-13feb19-en.pdf pour explications sur les problèmes liés aux émoticônes dans les noms de domaine (encore plus de cas de collisions graphiques possibles, ne prenant même pas en compte les nouveaux modificateurs FitzPatrick).
Tous les bureaux d'enregistrement ne traitent pas les IDN et ne le font pas tous de la même manière. En règle générale, les registres attendent des bureaux d'enregistrement qu'ils envoient une "étiquette de langue" le long du nom de domaine à enregistrer. Cette balise de langue permet de sélectionner une liste spécifique de caractères autorisés car sinon, en l'absence de toute balise de langue, la seule règle qui prévaudra, outre les listes de caractères autorisées, est l'interdiction de mélanger deux caractères de scripts Unicode différents ( un script étant l'ensemble des caractères utilisés dans un système d'écriture donné).
L'étiquette de langue est nécessaire pour certaines langues qui doivent mélanger des caractères: si vous allez au Japon, vous verrez partout que des numéros tels que des numéros de téléphone ou des numéros d'étage sont écrits en caractères latins, pas avec les caractères japonais natifs. C'est un exemple parmi d'autres.
Pour faire écho à un point soulevé dans les commentaires ci-dessus, Verisign pour .COM
publie différentes tables de caractères autorisés pour certaines balises de langue en cyrillique (comme le russe, l'ukrainien, le bulgare, le kurde, etc.). Consultez-les à l'adresse https: //www.verisign.com/en_US/channel-resources/domain-registry-products/idn/idn-policy/registration-rules/index.xhtml ). Si vous les regardez tous, vous verrez un sous-ensemble du script cyrillique Unicode plus ASCII chiffres de 0
à 9
. Et si vous ne fournissez pas d'étiquette de langue, il vous suffit d'utiliser l'un des caractères autorisés par Verisign, à condition que tous figurent dans le même script, quel que soit le script utilisé.
Donc deux options:
aа.com
c'est-à-dire xn--a-8sb.com
en fournissant une balise de langue utilisant un caractère cyrillique, elle échouera car aucune table utilisant des caractères cyrilliques n'utilise également des caractères latins (en plus des chiffres) en même temps.Donc, ce cas spécifique ne peut pas se produire de manière réelle, mais bien sûr, il y en a effectivement d'autres qui rendent le domaine "similaire à une confusion" à un autre.
C'est le problème spécifique sur lequel vous semblez vous concentrer, des ambiguïtés dans l'affichage car plusieurs personnages se ressemblent, car ils ont une représentation graphique similaire (homographique).
Tout d’abord un constat: cela est connu depuis longtemps, et pendant longtemps quiconque le découvre est sur le point de prédire le monde Doom à cause de toute la confusion qui sera créée. Dans la pratique, nous ne le voyons pas si peu ou si peu en réalité, il apparaît donc de temps en temps dans les journaux avec un cas spécifique, mais le reste du temps, il existe très peu de cas de cybersquattage de domaine basé sur des IDN, et très peu d'hameçonnage basé sur les IDN (pour cette dernière partie, car les attaquants n'ont pas besoin de l'illusion la plus parfaite pour réussir, ils ont juste besoin de l'illusion la plus basse qui soit suffisamment efficace pour leurs cibles; si vous regardez les emails de phishing et le type d'URL que vous trouvez vous y trouvez parfois des choses laides comme http://johndoe.tretre89.webhosting.somewhere.example.com/perso/misc/895f/bank.php?account=login
et avec un texte créé autour et un bon lien, certaines personnes cliqueront encore sur cette pensée qui les mettra sur le site Web officiel de leur banque! Notez également que diverses sociétés fournissent services de surveillance de domaine aux marques, de sorte que l’enregistrement d’un domaine "semblable à une confusion" auprès d’une grande marque déclenche une alerte, tandis que les adresses URL ci-dessus, après avoir pénétré dans un hébergement Web, ne déclenchent aucune alerte avant le signaler comme phishing).
Donc, le problème/attaque existe sur le papier, mais dans la pratique, il reste pour le moment comme une affaire de curiosité et un cas Edge.
Les règles ci-dessus, et en particulier le non mélange de scripts, ont été spécifiquement mises en place pour limiter les problèmes de ce type. Comme décrit dans la réponse de Maximillian Laumeister, les navigateurs (mais rappelez-vous que nous traitons ici de noms de domaine qui apparaissent effectivement dans les URL, mais également dans de nombreux autres éléments, tels que les adresses électroniques ou les identifiants XMPP ... afin d'éviter tout problème d'interface utilisateur. contraint aux navigateurs Web) implémente généralement une règle pour revenir à la forme Punycode s’ils détectent un mélange de scripts ou pour certains TLD qu’ils jugent "dangereux".
Ils atténuent certains problèmes, mais pas tous.
Prenons раураӏ.com
. Ceci est un nom de domaine valide et il peut être enregistré car tous les caractères (pour une étiquette donnée) sont dans un script. Mais en réalité, cela n’a rien à voir avec la version ASCII _ Paypal.com
, car la première utilise uniquement des caractères cyrilliques et est traduite en LDH en xn--80aa0cbo65f.com
. Comme expliqué au début, ce problème n'apparaît pas avec les IDN. Vous avez exactement le même problème si vous restez en ASCII pur.
Interdire de tels cas sera un problème très difficile avec de nombreux cas Edge et de faux positifs. Vous pouvez imaginer: prenons chaque caractère un par un et trouvons tous les autres caractères Unicode qui sont affichés graphiquement de la même manière pour une définition similaire, et une fois que nous avons cela, nous pouvons comparer les chaînes et déterminer que раураӏ
(100 % Cyrillique) et Paypal
(100% latin) sont "identiques" et s’il en existe un, l’autre devrait être interdit. Veuillez regarder UTS # 39 pour un algorithme permettant de le faire et toutes ses mises en garde.
Outre le problème de l'affichage graphique qui dépend de la police de caractères, une fois que vous avez pris en compte les caractères asiatiques ou arabes, les choses deviennent plus complexes (même si vous ne tenez pas compte du fait que toutes les langues ne sont pas écrites de gauche à droite, l'arabe n'est pas pour un), ce qui nous amène exactement au problème des variantes.
Le chinois est un exemple célèbre et "simple". Il existe en effet un chinois "traditionnel" et un chinois "simplifié". Les deux existent toujours, en fonction du contexte ou de l'endroit, les noms de domaine doivent donc traiter avec les deux. Mais cela a-t-il du sens de permettre à deux déclarants distincts d'enregistrer l'un la version chinoise traditionnelle d'un nom et l'autre la version simplifiée? Probablement pas. Tant de registres définissent des variantes et une règle de blocage: une fois que vous définissez ce caractère, X est une variante du caractère Y, si X apparaît dans un nom, alors tout autre nom dans lequel X est remplacé par Y est interdit d’enregistrement ou ne l’est que par le même inscrit.
Parfois, les règles sont aussi éphémères: par exemple, .FR
a introduit les IDN bien après le fait qu’il existait des millions de .FR
noms de domaine existants, de sorte qu’ils ont mis en œuvre une approche de "droits acquis" qui, pour une période donnée, si vous aviez cafe.fr
par exemple, vous étiez le seul déclarant éligible pour café.fr
car il s'agissait de la "version" de fermeture IDN de celle-ci. Une fois cette période écoulée, tout nom de domaine ou toute variante de nom de domaine existant ne faisant que jouer avec des personnages était ouvert à l'enregistrement par quiconque. Mais encore une fois, rien qu'en lisant ceci, on peut penser que cela conduit à un chaos où, dans la pratique, comme observé dans ce cas ou dans un cas similaire, il n'y avait pas de réel problème (ce n'est pas un afflux massif de personnes qui essaient juste d'enregistrer des IDN pour confondre ASCII noms de domaine).
Cet extrait de Verisign FAQ à propos des IDN touche le sujet et livre la triste vérité:
Différents leaders d'opinion de la communauté technique ont suggéré différentes approches pour traiter le problème des variantes de personnage. Chaque approche comporte à la fois des aspects positifs et négatifs. Cependant, la communauté IDN est d’accord sur le fait que le problème des variantes de caractères peut ne jamais être complètement résolu car les langues sont toujours en mutation. De nouvelles variantes de caractères entre les langues continueront d'être introduites dans les langues.
Si vous examinez les tables IDN, vous verrez que les registres répertorient non seulement les caractères autorisés, par balise de langue, mais également les variantes de chaque caractère, le cas échéant. Cela crée un énorme problème de calcul lorsque les listes deviennent énormes.
Et ils n'encodent même pas tout ce qui est possible, car dans certaines langues, certains caractères ne peuvent pas apparaître à des endroits donnés ou après ou avant un autre caractère, etc. Pour gérer cela et l'avenir des tables IDN, l'IETF a créé une nouvelle norme appelée Règles de génération d'étiquettes, ou LGR, qui permet de coder toutes les règles relatives aux IDN et aux variantes dans une structure XML. N'espérez pas comprendre cette spécification sans une compréhension solide de l'Unicode, des expressions régulières et des noms de domaine.