David Larlet : artisan, contributeur et citoyen.


Archives du site biologeek.com. Publications récentes.

OpenID et phishing sont dans un bateau...

vignette

Suite aux commentaires de Bader relatifs aux problèmes de phishing, je me suis renseigné et je pense qu'il est nécessaire de mettre en garde les lecteurs un peu trop emballés par le premier billet. Il existe clairement un risque que je n'avais pas identifié plus tôt, faute d'exemples concrêts. Allons-y pour une mise en situation...

Le problème

Tout commence par un site qui vous demande de vous identifier. Ce site est un vilain pirate qui n'a pas forcément de bonnes intentions concernant votre identité. Appelons ce site vilain-pirate.com. Le mécanisme normal pour s'identifer est le suivant :

  1. un formulaire sur le site biologeek.com qui demande l'URL d'identification
  2. l'utilisateur est alors redirigé vers la page d'identification de son serveur OpenID
  3. ses identifiants sont demandés sur son serveur OpenID
  4. son profil pour le site biologeek.com est demandé sur son serveur OpenID
  5. l'utilisateur est redirigé vers biologeek.com et ce site peut récupérer les informations qui ont été approuvées par l'utilisateur
  6. l'utilisateur a maintenant accès à des fonctionnalités avancées sur biologeek.com

Vous remarquerez que le mécanisme n'est pas vraiment simple, heureusement que ce cheminement n'est suivi que si vous n'êtes pas encore identifé sur votre serveur OpenID pour l'étape 3 et que vous ne vous êtes jamais identifé sur le site pour l'étape 4. Pour un site sur lequel vous participez souvent c'est quasi-immédiat. Heureusement.

Examinons maintenant le cas où vous vous identifiez sur vilain-pirate.com :

  1. un formulaire sur le site vilain-pirate.com qui demande l'URL d'identification
  2. l'utilisateur est alors redirigé vers la page d'identification qu'il croit être celle de son serveur OpenID
  3. ses identifiants sont demandés sur son faux serveur OpenID

Je vous laisse deviner la suite... au « mieux » vague de spam avec votre identifiant, au pire prise de votre identité pour des services critiques.

Comment est-ce possible ? Les principaux serveurs d'identification sont au nombre de 4 aujourd'hui. Ce qui signifie qu'il y a très peu de pages à créer si l'on veut faire du phishing (je vous rappelle que cette technique consiste à vous faire croire que vous êtes sur un site alors que ce n'est pas la bonne URL dans votre navigateur, typiquement bio1ogeek.com par exemple) puisqu'il suffit d'une seule page (celle de l'identification) par serveur.

Bon il y aussi les vols de session mais je n'en parlerais pas ici. Le chapitre du Django Book sur la sécurité est sorti aujourd'hui et je pense que tous les développeurs web un peu consciencieux devraient aller le lire, c'est une bonne base.

Les solutions

  • Ne s'identifier que sur des sites de confiance : bon, c'est assez réducteur.
  • Prendre ses précautions lors de l'identification : vous l'avez compris, la faille est dans la redirection. Si vous êtes déjà identifié sur votre serveur, vos identifiants ne doivent pas vous être redemandés et vous passez directement à l'étape du choix du profil. Dans le cas où l'on vous redemande ces identifiants, commencez à vous inquiéter. Une bonne chose est donc de s'identifier via un favoris ou en tapant directement l'adresse dans votre navigateur. Pas vraiment simple, notament pour les nomades...
  • Options au niveau du serveur : une des solutions est que le serveur d'identification vous pose une question personnalisée. Vous saurez alors bien sûr que la page d'identification est la votre. Cela va de la photo de famille (plus visuel) au prénom de votre chat, toujours est-il que c'est une solution acceptable si le choix est assez vaste.
  • Des plugins au niveau navigateur : c'est peut-être le plus simple (encore faut-il avoir confiance dans le concepteur du plugin !), un plugin pour firefox permettant de vous identifier sur votre serveur OpenID, vous lui donnez une bonne fois pour toute et il vérifie via une connexion au démarrage que vous êtes bien identifié. Si ce n'est pas le cas, vous êtes redirigé vers la page d'identification (sécurisée via SSL) proposée en préférence.

Conclusion

L'identification est un problème critique qui met du temps à se mettre en place. OpenID en est à sa première version mais des spécifications plus élaborées pointent le bout de leur nez, ça évolue et c'est déjà bien. Quand on voit les perspectives que ça ouvre, ça met l'eau à la bouche (et sans hameçon s'il vous plaît).

[edit du 10] : il existe un plugin pour firefox.

[edit du 20] : Simon Willison propose une solution qui est loin d'être utilisable par le commun des non-geeks à mon avis...

[edit du 6 février] : L'alternative du favori mise en pratique.

[edit du 18 avril] : myOpenID propose des solutions intéressantes contre le phishing.

Articles peut-être en rapport


Commentaires

Yann le 09/01/2007 :

Effectivement, avec un peu de recul, on se rend compte que la technologie n'en est encore qu'à ses balbutiements et n'est pas tout à fait prête à être massivement déployée...

Malgré tout, OpenID paraît évoluer vite et devrait rapidement arriver à maturité... Non ?

Eric Daspet le 09/01/2007 :

Le pishing est extrêment simple : il suffit que vilain-pirate.com se connecte à votre serveur openid (il en connait l'url) et recopie l'interface et le graphisme. C'est simple à faire et peut être fait automatiquement derrière votre dos sans intervention humaine.

Avoir une question ou une marque personnelle sur votre serveur openid n'est d'aucune aide. Quand vilain-pirate.com se connecte sur votre serveur openid pour recopier l'interface, il peut tout seul proposer votre login et obtenir votre interface et votre graphisme spécifique. C'est quelque chose de public vu que c'est justement quelque chose qui intervient avant que vous tapiez le mot de passe. Aucune difficulté pour le recopier en dynamique. A vrai dire ça sera recopié sans même le faire exprès.



Maintenant ... il est où le problème ? On est dans la même problématique que partout ailleurs sur Internet. OpenId ne résoud pas la problématique du pishing, ça n'est pas son rôle, mais il ne vous y expose pas plus pour autant. Comme partout ailleurs, avant de s'identifier il faut vérifier l'url dans le navigateur, vérifier le joli cadenas SSL (et en cas de doute retapper soi même l'url).

Il n'y a pas lieu de s'inquiéter plus du pishing avec openid qu'avec quoi que ce soit d'autre. En fait c'est même l'inverse : pour peu que vous vous identifiez au préalable, vous avez un risque qui est assez faible (si on vous redemande un mot de passe, vous savez qu'il a problème vu que vous êtes déjà authentifiés).

David, biologeek le 10/01/2007 :

@Yann : j'espère ;-)

@Eric Daspet :
> Quand vilain-pirate.com se connecte sur votre serveur openid pour recopier l'interface, il peut tout seul proposer votre login et obtenir votre interface et votre graphisme spécifique.

Sauf si l'interface laisse le choix entre plusieurs photos (dont la tienne) et que ces photos changent selon l'ip qui appelle la page (sinon il en faudrait trop pour que le vilain pirate n'arrive pas à identifier laquelle revient toujours).

Même chose si l'utilisateur doit choisir entre plusieurs questions dont la sienne.

> Il n'y a pas lieu de s'inquiéter plus du pishing avec openid qu'avec quoi que ce soit d'autre.

Sauf qu'on est rarement amené à être redirigé pour entrer nos identifiants/mots de passe. C'est là où c'est dangeureux.

Eric Daspet le 10/01/2007 :

@David:

Pour les photos : pas mieux.
vilain-pirate.com a juste à faire une requête sur ton provider et recopier ce qu'il voit. Si ton provider donne le choix entre plusieurs photos, vilain-pirate.com se contente de tout recopier et te donnera le choix entre les mêmes photos.
Quand tu choisiras ta photo, c'est vilain-pirate.com qui recoit le choix, et qui peut l'utiliser ensuite.
C'est toujours la même IP qui fait ici la demande à ton provider : celle de vilain-pirate.com.

Quoi que tu demandes à l'utilisateur (photo, question ou simple mot de passe), recopier exactement la page qui compose la question/demande et intercepter la réponse (pour éventuellement la rejouer en interne) c'est simple et ça peut être fait automatiquement en temps réel.

David, biologeek le 10/01/2007 :

@Eric : dans ce cas il suffit d'inverser l'ordre les identifiants/mots de passe sont demandés dans un premier temps et les images sont affichées ensuite. Au pire, il y a corruption de l'identification mais étant donné que la seconde étape ne peut être franchie, il est toujours possible de changer son mot de passe une fois que l'on se rend compte de la supercherie...

near le 10/01/2007 :

Je vois openid interessant pour sa propre infrastructure et la perennité des comptes utilisateurs... Jamais je n'utiliserais un compte openid, même si c'était sur mon propre serveur ! Ce serait plutôt transparent pour l'utilisateur...

Pour donner un exemple : tu crées un site qui permet de partager des photos. Tu fais inscrire les utilisateurs sur un serveur openid, mais ils ne le savent pas car le serveur openid est privé, et puis ce n'est pas leur problème de toute manière. Ils se logguent aussi sur ton site grâce à ce même serveur. Plus tard, tu crées une plateforme de blog, et tu souhaites en faire profiter tes utilisiteurs (déjà heureux d'avoir un endroit sympa où échanger leurs photos) : tu veux que ce soit simple pour eux (pourquoi devraient-ils se réinscrire alors que ce nouveau service vient de toi ?) et pour toi (hmm... comment vais-je faire pour gérer les users existants ?) et c'est là qu'openid va être interessant. Certes, il n'a aucun intérêt pour tes utilisateurs "techniquement" (ils s'en foutent, ils veulent juste ne pas avoir à se réinscrire), mais pour toi, c'est une grosse épine en moins.

L'authentification inter-serveurs (dans le sens, inter-domaines) est relativement chiante à gérer... combien j'ai entendu de gens me demander "comment je peux récupérer un cookie provenant d'un autre domaine". A première vue, on pourrait se dire "je sais pas où ce gars a appris à faire du developpement web, mais il devrait vite lire les specs http". Hors, pour les boites qui fournissent des services très variés (comprendre, sur différents sites), c'est créer un pseudo-protocole pour pouvoir authentifier un users à plusieurs endroits indépendants. On peut feinter et faire en sorte de pointer toujours vers la même base de données (c'est légitime, mais...), ou d'utiliser une tronçonneuse (des services d'annuaire, complexité pour pas grand chose), ou autre. Mais avec openid c'est bien, c'est beau, c'est b... propre.

La solution d'une base de données interne est bonne aussi, la quasi-totalité des sites de services doivent penser comme celà. Mais là où ça se corse, c'est comment faire pour gérer l'interopératibilité : exemple, comment MSN et Yahoo ont-ils fait pour pouvoir taper dans leurs bases respectives lorsqu'un utilisateur de MSN Messenger ajoute son copain sous Yahoo IM (et vice-versa) ? Je suis quasiment certains que les 2 bases n'avaient rien à voir, et qu'ils ont du inventer un protocole à eux pour "inter"-authentifier les utilisateurs. Vous imaginez le travail... Bien sûr, on pourrait croire qu'on aura jamais à "partager" sa base d'utilisateurs avec quelqu'un d'autre, mais le fait qu'openid existe prouve bien le contraire.

L'autre problème est la perennité. Imaginons que MSN meurt, que faire des x millions d'utilisateurs sous MSN qui se retrouvent orphelins, alors qu'ils sont encore dans les listes de Yahoosiens ? Imaginez sans un serveur type openid... ils pourraient migrer les serveurs, et continuer comme si de rien était en interne bien sûr, mais quel bazar alors qu'il y'a des solutions (presque) toutes prêtes.

Je n'ai pas lu les spécifications d'openid, je me suis juste interessé au concept de SSO (Single Sign-On). Ce que je verrais bien, c'est un super-sso, qui pourrait gérer les identités. Je ne sais pas si openid fait ça, mais ça serait bien de pouvoir dire "pour ce site je veux être untel avec telles informations", etc... Il y'a énormément de documents interessants sur le sujet.

PS : je ne pense pas que MSN et Yahoo aient eu de gros problèmes... vu le nombre d'utilisateurs, leurs architectures ont surement été bien pensées, et la "fusion" faite sans douleur :)

RockPepper.com le 24/04/2007 :

OpenID, c’est quoi ?

Tu lis partout “OpenID” ? Tes potes te parlent tout le temps d’OpenID ? On te conseille OpenID ? On te dit “OpenID, c’est le bien” ? OpenID, OpenID, OpenID, OpenID… Tu te sens seul. Oui. Seul. Non, s’il t...

noura le 04/05/2007 :

je veux savoire c'est quio la corruption?

scaf le 08/01/2008 :

Selon moi le phishing n'est pas une menace pour openID.

On vous a déjà fait du phising pour pirater votre compte de recette sur marmiton.org ou de partition de guitare ?!
- je suis près à vous passer mes identifiants si ça peut vous être utile -

Si on part sur le fait que 60% des sites que je consulte ont casiment les même identifiant me concernant, et que les services sécurisé (banque, mails) le restent, cet identifiant unique pourrait bien décharger ma mémoire d'un bon kilo d'identifiant superflu dont je me fiche royalement de leur apport en terme de sécurité.

J'ai trouvé interessant l'idée de pouvoir choisir par site le niveau d'information à transmettre.
Le must serais d'integrer ce robinet de notre "vie privée" directement depuis le navigateur, ça reglerais l'enventuel problème de phising pour des sites + sensibles.