J'en ai parlé dès que je l'ai appris, il y a bien une opportunité de phishing dans tous les navigateurs implementant la norme IDN, c'est à dire tous les navigateurs modernes (les mauvaises langues persifferont que cela exclue IE d'entrée de jeu, et ils n'auront pas tort). Cela concerne donc Firefox et Mozilla 1.7, et sûrement quelques versions précédentes.

Peut-être faudrait-il expliquer deux concepts, celui d'UTF-8 d'une part, et celui d'IDN d'autre part. Les puristes me pardonneront mes approximations, autant dues à ma méconnaissance du problème qu'à ma volonté de pédagogie sur des sujets pourtant complexes. En gros, les américains écrivent en ASCII. Cela ne nous convient pas, à nous francophones, car les accents ne sont pas présents dans ce standard. Aussi on utilise un jeu de caractères supplémentaire, ISO-8859-1. Mais il n'y a pas que les caractères accentués dans le monde, et d'autres langues utilisent d'autres alphabets (on utilise pour certaines le mot script, pour être exact). On pense en particulier au cyrillique, à l'hébreu, au chinois, au japonais et bien d'autres. Pour cela, il existe un encodage qui permet en théorie de gérer tous les jeux de caractères du monde, et il s'appelle UTF-8 (avec UTF-16, mais je ne rentre pas dans le détail). Avec UTF-8, on arrive à décrire un nombre impressionnant de caractères différents, dont certains ressemblent bigrement à des caractères qu'on retrouve dans l'alphabet occidental. C'est ce qu'on appelle un homographe, dans le jargon (deux caractères différents qui ont la même apparence ou presque). Mais ressembler bigrement, ça ne veut pas dire strictement identique, surtout pour un logiciel. On peut donc avoir deux caractères qui se ressemblent à l'écran, mais qui, d'un point de vue strictement informatique, n'ont pas le même code. Voilà pour UTF-8 et consorts.

Venons-en à IDN. Il faut savoir que pendant très longtemps (et la situation perdure à ce jour), les noms de domaine (standblog.org, mozilla-europe.org, ebay.com...) n'ont utilisé que des caractères ASCII. C'est pour cela qu'il n'y a jamais d'accents dans les noms de domaine. C'est là qu'intervient la notion d'IDN, qui permet l'utilisation de caractères UTF-8 dans les noms de domaine. C'est essentiel pour permettre au gens qui n'utilisent pas les caractères ASCII, de saisir des noms de domaines dans un alphabet (un script en fait) qui leur soit familier.

Le problème de Phishing qui nous intéresse vient de la conjugaison des deux concepts expliqués ici :

  • Avec UTF-8, deux caractères très semblables peuvent avoir des valeurs différentes (et donc traitées différemment par les logiciels) ;
  • Il est possible d'utiliser UTF-8 pour écrire des noms de domaine.

C'est ainsi qu'on peut faire croire à quelqu'un qu'il est sur le site paypal.com alors qu'il est en fait sur un site dont l'URL est en UTF-8, et dont le premier a n'est en fait pas la lettre A, mais un caractère qui lui ressemble énormément. Le problème a été envisagé depuis belle lurette, et un certain nombre de parades ont été mises en place :

  • Les gens qui délivrent des noms de domaine ne devraient pouvoir le faire que pour les alphabets/scripts correspondant à leur région (pas de noms contenant des caractère cyrilliques pour le .com, par exemple) ;
  • Certaines polices de caractère (c'est le cas sur ma machine GNU/Linux Ubuntu) affichent des différences entre les homographes ;
  • Au niveau du navigateur, il est possible de d'empêcher l'utilisation d'IDN ;

Voyons voir comment on arrive quand même à avoir du Phishing là où ça ne devrait pas être possible, en théorie :

  • D'après James Seng (qui fait réferences aux documents ad hoc, la société Verisign n'aurait pas du délivrer de nom de domaine si elle avait respecté les règles en vigueur ;
  • Firefox devrait permettre de désactiver la fonctionnalité IDN. Mais voilà, il y a un bug, qui ne devrait pas tarder à être résolu, comme l'indique cette seconde fiche, qui mentionne une version 1.0.1 de Firefox en préparation. En attendant, une solution de contournement existe aussi, dans la mesure où on ne rajoute pas d'extension. Pourtant, elle n'est guère facile à appliquer.

Enfin, il faudrait mettre en place un système qui indiquerait à l'utilisateur qu'il utilise un IDN et donc qu'il y a un risque de Phishing. Le problème est loin d'être simple en terme de convivialité d'une part (voir les reflexions de Gerv, et aussi parce que l'IDN n'est pas la source de tous les maux. Par exemple, il est possible de faire du phishing en jouant sur la ressemblance entre le chiffre 0 et la lettre O, le I et le l et autres facéties du même genre...