WEBlog de Félix Aimé

{ OpenSource Intelligence, Information Security, Information Warfare }

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.

CDAISI – S02E03 : Suite et « faim ».

Et hop, fin de parcours, tout le monde descend, c’était cool, hein ? Voilà, la CDAISI c’est presque terminé, enfin, terminé pour les cours. Il ne reste plus que la soutenance de stage à réaliser et me voilà dans la vie active.

Désolé pour le jeu de mot dans le titre. Enfin, concernant la licence, je reste un peu sur ma faim. Depuis l’épisode précédent, on a vu quelques trucs, mais pas tellement de choses « wahou ». A vrai dire, je me souviens plus trop de ce que l’on a fait pendant ce labs de temps, donc je vais faire cet article comme une sorte de conclusion à l’année passée.

OK. Tout d’abord, si je devrai noter de 1 à 10 l’année qui vient de se passer, je la noterai 7. Cette année a été pour moi l’occasion de revoir plusieurs choses en sécurité et d’en découvrir de nouvelles, notamment grâce aux intervenants externes, véritable clé de voute de cette formation. Ce que j’en retiens, c’est tout d’abord l’ambiance qui était agréable, notamment en fin d’année, quand les beaux jours sont revenus. Ensuite, une équipe enseignante humaine dévouée à cette licence et qui n’a pas peur d’être critiquée en vue de l’amélioration constante de cette dernière. Se remettre constamment en question est une véritable qualité qui n’est pas présente dans toutes les formations.

Concernant les cours, ils ont été exhaustifs même si certains thèmes auraient dû être plus largement abordés tels que les failles applicatives, les investigations forensics (au sens protocolaire et technique du terme), les Linux/Windows Internals (+dev), la suppression de traces, mais aussi l’aspect tactique/pivot dont peut avoir recours un attaquant lors d’exploitation de certains SI. Pour répondre à plusieurs courriels qui m’arrive de recevoir ces derniers temps concernant la licence, je pense qu’elle est adéquate pour des personnes intéressées par la sécurité informatique, notamment par l’aspect « offensif » de la chose. Si vous avez déjà plusieurs années d’expérience personnelle dans ce domaine, vous allez apprendre des choses même si une large partie des cours vous semblera basique, surtout si vous possédez une ou plusieurs spécialités.

Pour ma part, je m’en tire plutôt bien, voire même très bien diront certains. Je ne sais pas encore si je suis major ou deuxième (Hein Alexis ;), car les soutenances de stage ne sont pas encore passées. En outre, j’ai découvert des gens vraiment sympa et – sans penser à Maubeuge – je me suis quand même bien éclaté dans cette licence. Je ferai surement un article de comparaison entre les différentes formations (ou spécialités) en sécurité informatique offensive en France… (d’ailleurs, si des élèves sont intéressés pour y participer…) reste à savoir quand, car j’ai quelques projets sous la main avec des amis en ce moment. Sur ce, see ya.

Salut les copains, l’école est finie !

Après 19 ans, ça y est, pour moi, l’école est finie ! Je ferai un article sur la fin de la CDAISI dans quelques jours, histoire de se reposer un peu, de voir des potes, ce que l’on appelle des « vacances » avant l’entrée dans la vie active. Eh oui, j’ai trouvé un job ! Hu hu.