Posts

Si vous tenez un concours sur le web sans rien valider…

Contexte: Je suis finaliste pour le semi-concours Musique Plus “Geek Recherché” où le public est invité à influencer les juges en votant pour leur geek préféré.

Projet: Automatiser des votes, parce que je me dis que ça serait amusant et que c’est une façon comme une autre de prouver le geekness.

Analyse

2013-10-22 09-54-23On commence par vérifier quels appels JavaScript sont faits au moment où on clique sur le bouton pour voter à l’aide des “Developpers Tools” de Google Chrome (F12). On identifie alors 3 URL:

  • Gigya, un tiers parti qui fait de l’intégration sociale et qui expose un API bien documenté
  • M+ Backend, qui nous indique par le nom de la méthode qu’on a affaire à Atex Web CMS. L’étude de cas qu’ils ont réalisée pour Astral est une bonne lecture.
  • M+ Vote qui est juste un .php*

En faisant la même requête une deuxième fois, on remarque que certains paramètres changent d’une session à l’autre. Cela pourrait poser problème puisqu’il faut idéalement être capable de recréer la requête au complet.

Dans notre cas, on parle des paramètres “callback” et “_” des appels vers M+. Parce qu’on est vraiment geek et qu’on sait ces choses-là, on peut tout de suite ignorer callback parce que c’est un appel de retour pour jQuery. “_”, quant à lui, est en fait l’heure Unix (ou le epoch time) actuelle.

*Quand on a codé le jeudi 17 octobre, il n’y avait que deux appels. Je me suis rendu compte qu’ils avaient ajouté un troisième appel vers vote.musiqueplus.com en écrivant ce billet.

Solution 1

blobbChristof Graf a été le premier à arriver à une solution. Il a créé un petit programme en C# qui automatise les appels aux URLs en faisant varier la durée entre chaque appel. Il dirige alors son trafic vers le réseau TOR, qui anonymise le trafic et change d’adresse IP toutes les 10 minutes.  Cela a pour effet que M+ voit que les votes générés viennent d’adresses IP différentes et peut plus difficilement éliminer ces votes.

Défense: Retirer les votes où les IPs correspondent avec des TOR exit node.

Solution 2

J’ai moi-même écrit quelque chose de semblable en Python. Ma méthode utilise une liste de proxy et vote une fois pour chaque proxy.

Défense: Retirer les votes où les IPs correspondent avec des serveurs proxy ou juste retirer tous les IPs ne venant pas du Canada (je ne suis pas si populaire que ça en Chine).

Solution 3

mctraffic_code2SynneR y est allé un peu plus méchant, en utilisant une plateforme de publicité en ligne qui permet d’y insérer son propre html, McTraffics. Mais même si seuls les tags <img> et <a> sont permis, on peut quand même faire des appels vers des ressources JavaScript si les paramètres ne changent pas.

La méthode de SynneR a l’avantage d’utiliser des vraies machines avec des vrais IPs venant du Québec (et non pas des IPs potentiellement listés comme louche parce qu’on y trouve des web proxy ou des TOR exit node, contrairement à Chris et moi).

Défense: Ajouter un jeton anti-CSRF aux requêtes.

Dans tous les cas, nous n’avons pas pris la peine de modifier le paramètre “_” pour changer l’heure de nos votes. Alors assumant que M+ enregistre tous les paramètres lors du vote, tous les votes qui ont 1382063817115 ou 1382063676307 comme date/heure (au millième de seconde près) ne sont pas légitimes.

Conclusion

Ça nous semblait une belle opportunité de montrer que nous sommes geek. Ça n’est pas méchant: j’en parle, je documente, le vote des autres n’a pas été trafiqué et nous n’avons pas causés d’attaques de déni de service. Juste un petit projet entre chums un jeudi soir: rien de bien grave, quoi.

On en profite pour sensibiliser les gens au sujet des risques associés à exécuter un tel évènement sur Internet. Les futurs concours organisés par Musique Plus n’en seront que plus représentatifs. Au cours des prochains jours, je travaillerai avec M+ pour mitiger ce type “d’attaque” à l’avenir. Le code source des trois méthodes sera éventuellement rendu disponible.

À suivre…

Mises à jour

Comment je me sens comparé à mes collègues qui font carrière en sécurité

Comment je me sens comparé à mes collègues qui font carrière en sécurité

2013-10-24 13:05
J’ai envoyé un courriel au service de l’auditoire de Musique Plus pour leur demander si ils étaient intéressés à jaser pour mitiger un peu ce qu’on a fait avant que je libère le code. Je mentionne la politique de Rain Forest Puppy.

2013-10-24 14:07
“Votre message a été transféré aux personnes concernées.”

2013-10-31 17:00
Le “mainteneur” chez M+ ne m’a toujours pas contacté. Le code source qui a rendu ce billet possible est maintenant disponible.

Télécharger les vidéos sur le site de Musique Plus

Je n’ai pas la télévision par câble: pas besoin puisque j’ai Internet! Seul notre serveur multimédia est branché sur l’écran du salon. Je suis quelques émissions “classiques” sur Radio-Canada et Musique Plus et, heureusement, les deux permettent l’écoute d’une partie de leur programmation sur le web. Cependant, ces sites ne sont pas du tout adaptés à la navigation “de salon” (sans clavier, sur un grand écran). Je dois donc me débrouiller pour télécharger les épisodes sur mon serveur afin de les écouter plus tard avec XBMC. Read more