Captcha-me if you can !
Ceux qui me connaissent savent à quel point je hais la publicité. Alors, lorsqu’une société lie la « sécurité informatique » à la publicité tout en arguant que leur solution possède « un niveau de sécurité équivalent à celui d’un Captcha classique », j’écris un article histoire de mettre les choses au clair.
Une société française qui fait ce qu’on appelle le « buzz » en ce moment, s’est amusée à réaliser – et l’idée, faut l’admettre, est très loin d’être bête – des captchas publicitaires. En gros, l’astuce est de recopier un superbe slogan publicitaire pour valider un formulaire – le captcha – histoire qu’il s’imprime bien dans notre mémoire. Cool, n’est-ce pas ?
Un captcha, qu’est ce que c’est ?
Un captacha est – pour faire simple – un système utilisé pour sécuriser un formulaire web (pour envoyer des commentaires, par exemple) contre le spam. En effet, le spam est généré par des programmes informatiques qui peuvent valider des formulaires automatiquement et donc, envoyer des messages en masse. Les captchas servent donc pour différencier un robot (un programme informatique) d’un humain (avec une réelle intelligence). Vous en avez tous vu, cela ressemble à ceci :

Aujourd’hui, il existe plusieurs types de captchas avec des niveaux de sécurité et de complexité différents. Voici une liste que je pense exhaustive : Des captchas full texte ; « drag’n’drop » (si, si : fail) ; audio ; vidéo ; à challenge ; images ; texte dans une image et de texte – bien déformé – dans une image.
Et les publicitaires arrivèrent.
L’idée de réaliser des Captchas publicitaires, d’un point de vue annonceur – et surtout psychologique, n’est assurément pas bête du tout. Cependant, on peut en dire autre chose d’un point de vue sécurité : la fonction première et réelle d’un tel système.
En effet, lier des slogans publicitaires à des captchas est aujourd’hui une mauvaise idée. Je m’explique. Tout d’abord, le service actuel (et je veux bien croire qu’il ne soit pas assez développé) ne propose pas des milliards de possibilités de publicités, contrairement à une chaine de caractères randomisée, ou, pour une meilleure interprétation mais un rendu moins significatif, les mots du dictionnaire.
Ainsi, il est possible, pour ce qu’on appelle « un pirate informatique » (en fait, dans ce cas là, un autre annonceur voulant spammer à ma méthode « old shool », sic.) de savoir, par le hash de cette dernière, quelle est l’image publicitaire qui est chargée. Voici un petit bout de code pour ce faire :
import re,hashlib,urllib2
server = "http://showcase-left.v1.api.adyoulike.com"
# hash => word to resolv.
resolv = {"c2dfef15b77b7e6e0802f186d805e524" : "meche lover"}
# Fonction lachement repris de :
# http://blog.nexua.org/python-a-day-1-remote-md5sum/
# Moi, j'l'aime bien.
def remote_MD5_sum(url, max_file_size=100*1024*1024):
remote = urllib2.urlopen(url)
md5 = hashlib.md5()
total = 0
while True:
data = remote.read(4096)
total += 4096
if not data or total > max_file_size:
break
md5.update(data)
return md5.hexdigest()
# Recuperation de la key
connMain = urllib2.urlopen(server + "/showcase/")
key = re.findall('/challenge/(.*)"><',connMain.read())[0]
# Recuperation du token
connToken = urllib2.urlopen(server + "/challenge/" + key)
token = re.findall('token : \'(.*)\',',connToken.read())[0]
# Recuperation MD5
hash = remote_MD5_sum(server+ "/image/" +token)
print "Token : " + token
print "Key : " + key
print "MD5 : " + hash
print "Phrase : " + (resolv[hash])
Possédant une sortie à la con du type :
Token : TfypawK258aYR2gpKpLqKqM_6cgEQ7hD Key : CMllh3nYbWscfzGE7g2ob10E3IDhWoff MD5 : c2dfef15b77b7e6e0802f186d805e524 Phrase : meche lover
Ce contournement pourrait lui-même être contourné sans changer l’image d’origine, tout simplement en la bourrant de commentaires Exifs randomisés à chaque appel de cette dernière. Toutefois, cette protection ne suffirait pas car elle pourrait elle-aussi contournée facilement en calculant l’entropie ou la valeur RVB de certaines zones de l’image. Bref, sauf changer à chaque génération le slogan de la publicité, ou la publicité (visuelle) elle-même – ce qui va à l’encontre même du principe de publicité, il est alors impossible de réaliser un système sûr, basé sur une publicité : même pas besoin d’OCR les enfants !
De l’avenir des Captchas publicitaires.
Comme nous l’avons vu, cette idée, bien que sympa pour certains annonceurs aux premiers abords, possède un réel problème de sécurité. Régies publicitaires, ne vous inquiétez pas, l’entropie et les hashs fonctionnent aussi pour des captchas en flash, audios ou vidéos. Enfin, après avoir déformé le street-art en street marketing, les créations artistiques en affiches de publicité, la publicité s’attaque maintenant à des dispositifs de sécurité, stoppons-cela.