Lorsque vous naviguez sur un site Internet, vous veillez à ce que le cadenas soit bien vert et prenez une attention particulière à ce qu’il n’y ait pas de caractères étranges rajoutés au nom de domaine. Et pourtant, malgré ces réflexes, un attaquant peut utiliser les noms de domaine internationalisés afin d’imiter un site Internet fiable de manière presque indétectable. Explications.
par Tom Houdayer
Laboratoire (C+V)O / CNS – Laboratoire de Cryptologie et de Virologie Opérationnelles / Axe Confiance Numérique et Sécurité – ESIEA
Il vous reste 90% à lire
Définis depuis octobre 1989 (RFC1123), les noms de domaine sur Internet ne peuvent être constitués que des 26 lettres de l’alphabet, des 10 chiffres et du tiret. Ce sous-ensemble ASCII est appelé « LDH » (Letters Digits Hyphen). Rapidement est apparu le besoin d’exploiter d’autres caractères non-ASCII (comme les accents et les caractères non latins) afin d’internationaliser les noms de domaine.
C’est le standard « Unicode » avec ses jeux de caractères « UTFx » qui a été choisi. Certains TLD « Top Level Domain » (domaines de premier niveau) les autorisent tous ou partiellement. À titre d’exemple, pour les noms de domaine en « .fr », seuls les 30 caractères Unicode suivants sont autorisés (« ßàáâãäåæçèéêëìíîïñòóôõöùúûüýÿœ »).
Afin de garder un bon niveau de compatibilité pour les applications, ces noms de domaine internationalisés doivent être encodés dans l’ensemble « LDH ».
Le Punycode est la syntaxe actuelle d’encodage des caractères Unicode en LDH. Une chaîne de caractères en Punycode est préfixée par « xn-- » et les caractères non-ASCII sont encodés dans l’ensemble LDH. Par exemple, la chaîne de caractères « xn--internationalis-pnb.fr », en Punycode, correspond à « internationalisé.fr » en Unicode.
Intégration dans les navigateurs Web
Votre navigateur Web est sûrement le logiciel dans lequel vous manipulez le plus de noms de domaine. Dès 2003, les principaux navigateurs ont ajouté le support des noms de domaine internationalisés. Un utilisateur chinois peut alors accéder à un site dont le nom de domaine est composé de caractères chinois. Pour l’utilisateur, tout est transparent. Le navigateur s’occupe de convertir le nom de domaine en « LDH » afin d’effectuer une requête DNS pour obtenir l’adresse IP du serveur.
Unicode
Alors que l’ensemble LDH comporte 37 symboles, la version 9 d’Unicode en comporte 128 237 ! Un problème vient du fait qu’on peut trouver des caractères cyrilliques visuellement identiques à des caractères latins. Pourtant pour le logiciel, ce sont bel et bien deux caractères différents. Ces lettres qui se ressemblent sont souvent appelées « homoglyphes ». Il existe plusieurs homoglyphes entre l’alphabet latin et cyrillique (comme le montrent les exemples ci-dessous). Un mot composé d’homoglyphes est un homographe.
a (U+061) |
а (U+340) |
e (U+065) |
е (U+435) |
o (U+06F) |
о (U+43E) |
p (U+070) |
р (U+440) |
c (U+063) |
с (U+441) |
À gauche le caractère Unicode latin, à droite son homoglyphe cyrillique
Attaque homographique
Le 14 avril dernier, un chercheur en sécurité informatique chinois a montré une méthode de phishing quasi indétectable sur les navigateurs Web Firefox, Google Chrome et Opera. À l’aide de l’alphabet cyrillique, Xudong Zheng a enregistré le nom de domaine « xn--80ak6aa92e.com » qui s’affiche « аррӏе.com » en Unicode. On appelle cela une attaque homographique. Dans le même temps, d’autres chercheurs de chez « Wordfence », ont imité le nom de domaine « еріс.com » (« xn--e1awd7f.com »). Comme le montrent les images suivantes, l’utilisateur ne voit aucune différence entre le vrai site Web à gauche, et le faux à droite.
Le nom de domaine « xn--80ak6aa92e.com » appartenant bien à Xudong Zheng. Ce dernier peut légitimement mettre en place un certificat SSL valide proposant une connexion HTTPS sécurisée à ses clients. Il peut bien évidemment envoyer des e-mails contenant l’URL de son site à des Anglo‑saxons qui se retrouveront sur son site pensant être celui d’Apple (principe du phishing). Je vous laisse inventer la suite de l’histoire.
La société « e-Xpert Solutions » a étudié le nombre de noms de domaine, parmi le TOP « 1 million » du classement Alexa, pouvant être vulnérable. Pour cela, ils ont vérifié si le nom de domaine pouvait s’écrire à l’aide des caractères cyrilliques « aeopcyxsIjhl- ». Résultat : 14 870 sites Web sont concernés. Parmi eux, on retrouve des noms tels que Apple, PayPal, Yahoo ou encore HP.
Comment se protéger aujourd’hui de ce type d’attaque ?
De manière générale, il faut veiller à utiliser la dernière version de votre navigateur. Ces derniers ont mis en place un algorithme de détection d’attaque homographique. Les logiciels Firefox et Google Chrome utilisent un algorithme similaire. Par exemple, un nom de domaine ne peut pas mélanger des caractères provenant des alphabets latin, cyrillique et grec. Certains schémas de caractères sont également interdits. Dans sa version 38, Google Chrome interdit les noms de domaine composés uniquement de caractères cyrilliques ressemblant à des caractères latins (« асԁеһіјӏорԛѕԝхуъЬҽпгѵѡ »). Cette amélioration permet de corriger le problème avec « аррӏе.com » et « еріс.com ». Firefox ne veut pas appliquer ce correctif afin de ne pas sanctionner les sites légitimes. Pour les utilisateurs de Firefox, la discussion est toujours ouverte et aucun correctif n’a encore été publié. Mais Firefox a une force : sa personnalisation. Vous pouvez donc désactiver l’affichage des noms de domaine internationalisés. Pour cela, rendez-vous sur la page « about:config » et mettez l’option « network.IDN_show_punycode » à « true ». Les noms de domaine internationalisés s’afficheront en Punycode comme dans l’exemple ci-dessous.
Comment peut-on prévenir les futures attaques ?
Mais que faire si une nouvelle attaque homographique arrivait à contourner les algorithmes de détection ?
Comme évoqué précédemment, votre navigateur utilise le format Unicode pour l’affichage. Mais lorsqu’il effectue une requête DNS ou valide le certificat, il utilise le format Punycode. Il est donc possible de voir le nom de domaine en LDH grâce au nom enregistré dans le certificat. Pour Firefox, faites « Outils » → « Information sur la page ». Dans l’onglet « Sécurité », cliquez sur « Afficher le certificat ». On observe bien que le nom de domaine est au format Punycode.
Pour Google Chrome, ouvrez le menu puis cliquez sur « Plus d’outils » et « Outils de développement » (Ctrl+Maj+J). Dans l’onglet « Security », cliquez sur « View certificate ». La procédure est sensiblement identique sur Opera.
Conclusion
Bien qu’anciennes, les attaques homographiques de noms de domaine restent dangereuses, car elles peuvent contourner les dispositifs de détection. En utilisant des caractères cyrilliques, on obtient une URL visuellement correcte. De plus, la connexion étant sécurisée, l’utilisateur est mis en confiance grâce au cadenas vert. On peut également voir que le module « CheckMyHTTPS » (module qui permet de vérifier d’un simple clic que la connexion HTTPS n’est pas interceptée) ne montre aucun signe d’attaque (cadenas vert à droite dans l’image ci-dessous). Dans le cadre de mes études d’ingénieur à l’ESIEA (campus de Laval), je contribue au développement de ce module. Nous réfléchissons actuellement à intégrer un système complémentaire d’alerte permettant d’avertir l’internaute en cas de suspicion d’attaque homographique.