pt
Moulé à la louche depuis 1999
Les trucs qui m'énervent... et je vais pas prendre de pincettes
Internet, informatique, logiciel libre, économie, politique, vie courante et tout le reste...

Tabjacking... est-ce vraiment un problème ?

Jeudi 27 mai 2010

La nouvelle "attaque" à la mode question sécurité semble être le Tabjacking (Je ne vais pas refaire les explications, vous pouvez les lire chez Korben).

Est-ce vraiment une menace ?

Il faut déjà que le site vous affiche une page de login d'un service que vous utilisez vraiment. Si je voyais tout à coup une page de login Facebook, je crois que ça me ferait bien marrer. Bien sûr en tapant dans les gros (GMail, Hotmail, Facebook...) il y a de bonnes chances de viser juste, mais ça risque bien de tomber à côté.

Ensuite, les sites de phishing sont généralement très rapidement repérés et bloqués par les navigateurs (par exemple la protection anti-phishing de Firefox fournie par Google), sans compter les extensions comme WOT. J'ai déjà reçu d'innombrables mail de phishing concernant free.fr pour m'apercevoir que les pages étaient déjà bloquées par Google/Firefox, OpenDNS ou WOT.

Au final, le problème vient du fait que l'utilisateur ne fait pas attention au nom de domaine affiché quant il clic sur un onglet déjà ouvert. Mais on peut imaginer une parade.

Les hashs visuels, une parade ?

Il existe des hashs visuels. On les trouve sous l'appellation d'identicon, visiglyph ou visprint. OpenSSH le fait aussi sous forme de texte.

A l'image des hashs comme MD5, les hashs visuels créent une image qui est unique. A titre d'illustration, j'ai bricolé rapidement un petit programme qui créé des hashs visuel et je propose une solution d'intégration aux navigateurs pour aider les internautes à éviter le phishing.

Mon petit programme s'appelle vizhash (jeu de mot sur "visuel", "hash" et "visage"). C'est en quelque sorte un moyen de donner un visage à un site web. Le programme prend en entrée du texte (par exemple le nom de domaine) et créé une image unique, spécifique à ce texte. vizhash possède les caractéristiques suivantes:

  • La moindre différence dans le texte en entrée créé une image totalement différente.
  • Il n'est pas possible de trouver un texte créant une image précise, sauf par force brute.
  • Comme il prend de l'unicode en entrée, les caractères ayant le même aspect graphique donneront une image totalement différente (utile maintenant que les DNS acceptent l'Unicode).
  • L'image peut être créée à n'importe quelles dimensions, tout en conservant les caractéristiques visuelles qui permettent de l'identifier.
  • L'image peut être très étirée horizontalement ou verticalement (changement de ratio) et conserve généralement les caractéristiques visuelles qui permettent de l'identifier.

Laissez moi vous donner quelques exemple: Voici différents noms de domaine que j'ai donné à manger à mon programme. Il a créé une image spécifique à chaque nom de domaine:


facebook.com

google.com

laposte.net

sebsauvage.net

twitter.com

siteduzero.com

S'il y avait une tentative de phishing, la moindre lettre différente dans le nom de domaine donnerait une image totalement différente:


sebsauvage.net

sebsauvaga.net

sebsauvag.net

sesauvage.net

L'image peut être mise à différentes dimensions ou ratios tout en gardant ses caractéristiques identifiables:


siteduzero.com
80x80

siteduzero.com
400x60

siteduzero.com
60x200

On pourrait imaginer que le navigateur calcule lui-même cette image et l'affiche, mais uniquement si l'utilisateur est dans un formulaire de login (comportant un champ de type "password"). L'internaute ayant l'habitude de voir toujours la même image lorsqu'il se connecte serait sûrement interpellé si l'image est totalement différente. Cette image ne devrait en aucun cas être affichée dans l'espace de la page, mais dans la barre d'adresse, sous forme d'icône dans la barre de navigation, voir sous forme de persona Firefox. Je n'ai malheureusement pas le temps de développer une extension Firefox, mais voici ce que ça donnerait intégré aux personas:



Bon, soyons honnête: C'est juste une idée lancée comme ça. Ma solution n'est ni belle, ni idéale: Elle fait encore appel à l'attention de l'internaute, mais elle lui donne un indice visuel fort de l'identité du site. Le fait d'utiliser les personas le rend particulièrement visible. Cet indice visuel étant généré côté navigateur à partir du nom de domaine, il ne peut être spoofé (sauf en cas de détournement DNS, mais là c'est une autre histoire).

Autres utilisations

vizhash se basant sur un hash, on peut s'en servir pour hasher des adresses IP, fournissant ainsi une identité visuelle automatique à chaque visiteur d'un site, sans révéler son adresse IP. C'est en fait très similaire au MonsterID (dont Bohwaz a fait sa version).

On pourrait également s'en servir pour des hashs de fichiers, par exemple pour vérifier qu'un téléchargement est correct: Au lieu de taper la commande md5sum en ligne de commande et de comparer deux chaînes de 32 caractères, le navigateur de fichiers pourrait être équipé d'une extension qui affiche son hash visuel et comparer rapidement avec celui affiché sur le site web. En un coup d'oeil, on voit si le fichier est correct.

Page web proposant le téléchargement:


Onglet "Vizhash" dans les propriétés du fichier:


Ainsi je n'ai aucune commande à taper, et je sais immédiatement si le fichier que j'ai récupéré est correct.

Quelques détails sur vizhash

vizhash est un petit programme d'une centaine de lignes, utilisable en ligne de commande. Le code source n'est pas formidablement compliqué. Il prend quelques options:

Usage: vizhash.py [options]

Options:
  -h, --help            show this help message and exit
  -t TEXT, --text=TEXT  Text to hash.
  -f FILE, --file=FILE  File to hash.
  -x WIDTH, --width=WIDTH
                        (Optionnal) Width of image (default:80)
  -y HEIGHT, --height=HEIGHT
                        (Optionnal) Height of image (default:80)
  -o OUTPUT, --output=OUTPUT
                        (Optionnal) Output filename (default:approximate input
                        text or filename with png extension). You can use any
                        extension supported by ImageMagick.

Il nécessite Python 2.6 et ImageMagick. La chaîne en entrée est hashée en SHA256, et la valeur de chaque octet en sortie du SHA256 sert à piloter les opérations graphiques (type d'opération, paramètres). Le programme utilise ImageMagick pour effectuer ces opérations sur les images. ImageMagick étant assez lourd, l'intégration dans un navigateur nécessiterait de refaire ça de manière plus légère. On pourrait aussi sans aucun doute améliorer la génération d'image (générateurs de textures, fractales, meilleure harmonie des couleurs...). Il y a de la place pour l'amélioration. Je diffuserai sans doute mon programme par la suite.

Voir tous les billets