Unicode Spoofing
Par Adel KHALDI, jeudi 1 septembre 2011 à 14:25 :: General :: #419 :: rss
La norme Unicode permet de représenter n'importe quel caractère, en lui donnant un nom et un identifiant numérique. Très pratique pour les caractères exotiques, comme ceux de la langue Russe, Arabe, Chinoise, etc [1] A partir de la version Vista de Microsoft Windows, elle est supportée par défaut, contrairement à la version XP où il fallait activer le support des langues s'écrivant de droite à gauche et scripts complexes [2]
Il existe une ressemblance entre plusieurs caractères de différentes langues, comme la lettre "o" de l'alphabet latin (U+006F) et du cyrillique (U+043E)... Aussi, il existe des caractères spéciaux en Unicode, pour inverser le sens d'écriture, permettant ainsi l'écriture des langues s'écrivant de droite à gauche, ou de mixer les deux.
Quelques exemples de caractères :
- U+202E : [RTLO], permettant de forcer l'écriture de droite à gauche
- U+202B : [LTRO], permettant de forcer l'écriture de gauche à droite
- U+006F : caractère "o" latin, en minuscule
- U+1D0F : caractère "o" latin, en petite majuscule
- U+043E : caractère "o" cyrillique, en minuscule
- U+0069 : caractère "i" latin, en minuscule
- U+0456 : caractère "i" cyrillique, en minuscule.
Les cyber criminels l'ont très bien compris et l'exploitent depuis plusieurs années afin de tromper leurs victimes via des emails ou liens malveillants.
Voici quelques cas d'utilisations :
- Modifier visuellement l'affichage du nom de fichier d'un exécutable, afin de faire croire à un document Word ou à une image... ;
- Créer des fichiers locaux portant, visuellement, le même nom ;
- Créer des liens, visuellement légitimes, pointant vers des URLs arbitraires.
Pour manipuler les caractères Unicode, il suffit de les copier/coller depuis la table des caractères (charmap.exe) de Microsoft Windows vers la destination.

Afin de donner plus d’informations sur les cas d’utilisations cités ci-dessus, voici quelques fichiers d’exemples, sous Windows Seven. Pour faire plus réaliste, dans certains cas, nous avons utilisé notepad.exe en modifiant son nom et changeant son icône vers celle de l’extension voulue.
1- Renommer des fichiers arbitraires
Nous pouvons utiliser le caractère [RTLO] pour inverser l'écriture d'un nom de fichier comme suit, par exemple :
- le fichier nommé [RTLO]123.456, donnera 654.321 à l’affichage dans l’explorateur
- my_[RTLO]cod.exe, donnera my_exe.doc
- ann[RTLO]cod.exe, donnera annexe.doc
Exemples
Ici, on renomme le fichier en mycod.exe

Puis, après insertion du caractère [RTLO] entre le caractère y et c, nous obtenons :

Ici, nous plaçons le caractère [RTLO], exactement comme dans l'exemple précédent:

Des combinaisons plus complexes, avec des caractères comme [RTLO] et [LTRO], peuvent êtres faites comme :
[RTLO]cod.erialpm[LTRO]comportement.exe, donnera comportement.exemplaire.doc

La détection de la supercherie peut se faire de deux façons :
Via les propriétés du fichier :
Nous remarquons que seul le champ type de fichier permet de détecter que c’est une application et non pas un document Word.

Ou via l'interpréteur de commandes, car les caractères Unicode ne sont pas gérés. Par conséquent, ils sont remplacés par des points d'interrogations :

Cependant, tous les utilitaires testés supportent correctement l’Unicode, comme les gestionnaires d’archives :
7zip :

Winrar :
Nous remarquons que dans la barre d'adresse de Winrar, la chaîne de caractères est inversée à partir de l'endroit où le caractère [RTLO] est inséré

Winzip :

2- Mettre des fichiers avec le même nom, dans le même dossier :
Pour le faire, il suffit d'utiliser les différents caractères visuellement ressemblants, pour renommer deux fichiers différents.
Voici des exemples en image :

Cette technique peut être exploitée pour forger des URLs visiblement ressemblantes à celle ciblées (soit en réservant un nom de domaine internationalisé ressemblant à celui de la victime [3] ou en modifiant des caractères autres que ceux du nom de domaine).
3- Liens malveillants :
Un attaquant, peut inviter sa victime à visiter une URL arbitraire, comme nous pouvons le voir dans l'image ci dessous.

Pour le faire, l'attaquant a écrit l'URL comme suit :
[RTLO]http://www.google.com/moc.isxel.www//:ptth
qui sera affichée comme suit :
http://www.lexsi.com/moc.elgoog.www//:ptth
Dans l'image ci dessous, les deux lignes sont identiques, sauf que le caractère [RTLO] a été introduit dans la seconde ligne :

Un attaquant peut faire preuve d’ingéniosité en insérant ce genre de liens dans du code HTML/Javascript.
La pleine compatibilité avec l’Unicode n’est pas une vulnérabilité en soi, car il est tout à fait légitime de permettre dans un même nom de fichier, par exemple, l'écriture dans une langue s’écrivant de gauche à droite et une autre de droite à gauche.
Des mécanismes de vérification peuvent être instaurés, afin de forcer un certain modèle à respecter pour l’extension des fichiers, si celui-ci en a une.
Dans d’autres cas, une génération d’alertes peut se faire en se basant sur des expressions régulières.
Il est tout à fait possible d'utiliser l'Unicode spoofing pour ajouter plus de sécurité, comme dans l'utilisation des CAPTCHA par exemple [4]
Aujourd'hui, il est conseillé de rester vigilant et de vérifier que le support des IDNs est correctement paramétré dans Internet Explorer [5] et Mozilla Firefox [6]