Les CAPTCHA sont-ils un outil de sécurité ou une nuisance ?
Un ingénieur de Google casse celui de Sony avec un simple regex

Le , par Hinault Romaric, Responsable .NET
Les développeurs utilisent couramment les CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) comme moyen de sécurité pour éviter les enregistrements automatiques par des robots ou des spammeurs.

Ces composants gênèrent à l'écran des caractères dont le but est d'être difficilement déchiffrés par les « bots » mais aisément par les humains. Ils sont conçus en utilisant plusieurs techniques différentes, notamment l'utilisation d'une table de hachage chiffrée ou cachée.

Sony, pour sa part, a choisi de mettre en place un CAPTCHA en pur HTML, CSS et JavaScript. Ici, aucun caractère chiffré ni table de hachage, mais des caractères stockés directement en « clair », dans un simple fichier.

Ce choix douteux n'a pas échappé à l'ingénieur de la team Google+. Andrew Hintz a en effet constaté que l'utilisation d'un simple regex(expression régulière) était suffisante pour révéler les caractères de contrôle générés dans les pages de Sony.

Pire encore, le code JavaScript utilisé pour afficher et vérifier le CAPTCHA est tellement bien documenté qu'il peut être simplement utilisé pour programmer un bot pouvant contourner ce système.



Au delà de ce cas « d'école » (dans le mauvais sens) conçu par Sony, Andrew Hintz fait également remarquer que la plupart des CAPTCHA peuvent être décodés avec une simple combinaison de détection de contours Gaussien et d'analyse de la différence XOR des caractères.

Autrement dit, pour l'ingénieur de Google, ce système est plus une source de nuisance pour l'utilisateur qu'un outil de sécurité.

Source : Blog Google

Et vous ?

Pensez-vous que les CAPTCHA sont assez sécurisés ?

D'après vous, comment une entreprise comme Sony a-t-elle pu mettre au point un CAPTCHA aussi faible ?

Considérez-vous les CAPTCHA, comme Andrew Hintz, c'est à dire plus comme une nuisance que comme un outil de sécurité ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de rivsc rivsc - Membre actif https://www.developpez.com
le 18/07/2011 à 9:45
@lugdanum : oui les Negative Captcha sont relativement efficace ! Après c'est pareil tant que le robot est conçu pour une plateforme (wordpress, facebook...) ça va, mais quand il est conçu pour un système particulier aïe aïe !
Avatar de Laurent.B Laurent.B - Rédacteur/Modérateur https://www.developpez.com
le 20/07/2011 à 2:52
Citation Envoyé par lugdanum  Voir le message
Moi je teste depuis un bout de temps ce système:
- Un champ caché dans mes formulaires de ce style :

Ca n'a vraiment rien de particulièrement efficace, la détection du hidden est quand même extrêmement facile...
Cacher le champ avec un style peut déjà être plus malin mais bon, celui qui va s'intéresser au système trouvera rapidement la parade.

Les CAPTCHA ont eu leur utilité c'est certain mais effectivement, si un humain peut lire et retranscrire une séquence de caractères, un programme bien conçu parviendra lui aussi à le faire. Donc, globalement ça perd complètement son intérêt.

Pour que ça reste un minimum efficace il faut multiplier les variantes, de façon à ce que ce ne soit jamais identique, ni au niveau de la forme des caractères, ni au niveau des séquences de caractères, ni au niveau des couleurs ou des formes diverses qui composent le CAPTCHA.
Donc qu'un motif ne soit valable qu'une seule fois et pour un laps de temps assez court.

En plus du CAPTCHA, le code de la page et des champs doit aussi changer sans arrêt, pas de noms fixes pour les champs et pas de pattern reconnaissable. On introduit par exemple un numéro de série (unique évidemment), qui ne sert qu'une fois et qui est mis en session côté serveur (invalidable au bout d'un timeout), pour mapper chaque champ (dont le nom change tout le temps) avec les champs cibles dont seul le serveur à connaissance. Bon, le problème est qu'il faut bien indiquer le libellé des champs au niveau du formulaire pour que l'utilisateur sache où mettre quoi, et du coup le nom aléatoire des champs peut être repéré. Donc là aussi, il faut arriver à rendre aléatoire la structure du formulaire au niveau du code, sans pour autant changer son aspect visuel... Ce n'est pas simple et ça reste détectable.
On peut aussi brouiller les pistes avec du Javascript mais sans aucun algorithme côté client.
On peut également faire en sorte de détecter les tentatives trop répétitivent venant d'une IP en particulier, sans pour autant la bloquer automatiquement de manière définitive, puisqu'une IP n'a absolument rien de fiable quant à savoir si le requêtes venant de celle-ci sont toutes de la même machine.

Il y a d'autres astuces pour rendre la tâche des bots plus difficile mais il faut rester réaliste, aucun système n'est infaillible.

Donc les CAPTCHA ont sans doute au moins la capacité d'éviter que des bots basiques aient trop de facilité à passer.
Avatar de alain78 alain78 - Membre régulier https://www.developpez.com
le 20/07/2011 à 8:03
Citation Envoyé par Laurent.B  Voir le message
Pour que ça reste un minimum efficace il faut multiplier les variantes, de façon à ce que ce ne soit jamais identique, ni au niveau de la forme des caractères, ni au niveau des séquences de caractères, ni au niveau des couleurs ou des formes diverses qui composent le CAPTCHA.
Donc qu'un motif ne soit valable qu'une seule fois et pour un laps de temps assez court.

Pourquoi ne pas utiliser un système comme celui destiné à bloquer les "screen logger". Ma banque en ligne utilise une "calculatrice" pour vérifier mon mot de passe. La calculatrice est placé de manière aléatoire sur l'écran, et la position des chiffres change à chaque fois.

Il est doit facile de poser une question à l'utilisateur comme par exemple : "combien font cinq fois cinq" et faire saisir la réponse dans la "calculatrice" mouvante. Bien sûr question et réponse associée doivent varier (50 fois ?).

Bien sûr cette solution n'est pas 100% idéale, mais on peut atteindre un bon taux de réussite en complexifiant le couple question/réponse.
Il faut je pense utiliser au maximum les ressources de l'homme que la machine aura du mal (dans l'immédiat) à accéder.
Exemple :
1° j'utilise la reconnaissance par l'homme d'une séquence de symboles (ici les lettres) : CINQ FOIS CINQ au lieu d’utiliser une formule facilement identifiable par la machine 5 x 5
2° j'utilise pour la réponse un référentiel de l'homme. Dans mon exemple le référentiel est la table de multiplication par 5. Je peux utiliser un référentiel plus complexe en fonction de la population d'utilisateur que j’attends visiter le site. Exemple pour des visiteurs "scientifiques" : "combien font quatre puissance deux divisé par un" .
Attention cependant à ne pas trop complexifier le référentiel.

Et comme l'écris Laurent.B il faut multiplier en grand nombre le couple question-réponse

Avatar de Mako 5013 Mako 5013 - Membre éprouvé https://www.developpez.com
le 20/07/2011 à 9:06
Citation Envoyé par alain78  Voir le message
Pourquoi ne pas utiliser un système comme celui destiné à bloquer les "screen logger".

Il me semble que le type de CAPTCHA dont tu parles est utilisé sur un forum Ubuntu (de mémoire). Et effectivement, cela semble plutôt efficace.

Par contre, comme tu l'as bien souligné, la difficulté dans la réalisation d'un tel CAPTCHA est le choix du référentiel (pas trop simple, ni trop complexe).

Mako.
Avatar de Laurent.B Laurent.B - Rédacteur/Modérateur https://www.developpez.com
le 20/07/2011 à 9:33
Quelle est la différence entre '*' et 'FOIS' ? Le nombre de caractères... Et une fois analysé par un humain et codé dans un programme, ça revient strictement au même... Tout ce qui est visuel peut être analysé et de fait, assimilé par un programme.
C'est juste une question de temps, de moyens et d'intérêt à le faire.
Y en a qui adorent ça de craquer les systèmes que d'autres s'acharnent à essayer de complexifier et le font uniquement pour le plaisir et sans doute parfois avec une facilité déconcertante.
Avatar de ikarus ikarus - Membre à l'essai https://www.developpez.com
le 20/07/2011 à 11:32
Ca bloque quand même la majorité des spam. Qu'ils soient fait par bot ou par des humains

Mais j'avoue la que Sony ils ont encore fait fort ! applaudissons !
Avatar de Laurent.B Laurent.B - Rédacteur/Modérateur https://www.developpez.com
le 20/07/2011 à 13:36
Citation Envoyé par spoutbe  Voir le message

Effectivement
Je n'ai pas tout lu mais bon ça résume bien les possibilités et les contraintes qu'impliquent un CAPTCHA.

Il ne faut pas oublier les personnes ayant un handicap, donc les CAPTCHA doivent proposer des alternatives, ouvrant ainsi davantage les portent aux crackers. Clairement, ça ne peut pas être une solution définitive.
Avatar de aspkiddy aspkiddy - Membre habitué https://www.developpez.com
le 20/07/2011 à 15:24

Je me demande si google ne l'utilise pas du tout

Je me demande alors pourquoi Google les utilise aussi

Voici un exemple de CAPTCHA sur le site Google
https://www.google.com/accounts/NewAccount?continue=http%3A%2F%2Fdocs.google.com%2Fsupport%2Fbin%2Fanswer.py%3Fhl%3Dfr%26answer%3D141062%26topic%3D1360904
Alors il faut utiliser les deux. lorsqu'il y a trop de spam...
Un champ caché et un CAPTCHA
Avatar de D.Lyre D.Lyre - Candidat au Club https://www.developpez.com
le 21/07/2011 à 10:56
J'ai été confronté au remplissage automatique d'un formulaire de contact par des bots il y a une quinzaine d'années et voici comment j'ai résolu le problème.

Constats:
1 -un bot met quelques secondes pour remplir un formulaire
2 -plusieurs champs avaient les mêmes valeurs si ils étaient rempli par un bot
3 -un humain ne peux pas remplir le formulaire en moins de quelques secondes

Solution:
-Je test le temps entre l'affichage du formulaire et le submit en mettant le time(), auquel j'enlève une valeur X pour évité qu'il soit reconnu comme tel, dans un champs hidden.
-Je test aussi les doublons dans les champs.
-Je test si le champs contient le nom du champs.

Résultat et avantages:
-aucun spam et aucune inscription par des bots depuis que j'utilise ce système
-pas de CAPTCHA à mettre en place et à gérer en fonction de l'évolution des bots
-le système ne demande aucune action de l'utilisateur

J'applique ce système sur de nombreux sites pour des formulaires d'inscription ou des formulaires de contact depuis plus de dix ans avec succès.
Avatar de VirtualCed VirtualCed - Candidat au Club https://www.developpez.com
le 30/07/2011 à 18:02
A noter que l'utilisation de reCaptcha a une double utilité. Elle aide le programme de reconnaissance de caractères lors de la numérisation d'archives du New York Times et d'anciens livres par Google !

http://www.google.com/recaptcha/learnmore

Il offre une alternative audio pour les personnes ayant des difficultés à lire.

Perso, j'adhère.
Avatar de williams1987 williams1987 - Nouveau Candidat au Club https://www.developpez.com
le 22/10/2013 à 10:41
Moi j'utilise une autre approche...je dessine mes images à la main (car c'est difficile pour un robot d'analyser une ecriture humaine) jusqu'a obtenir une banque d'image assez fournie. Je les traite afin qu'elles soient tres legeres. Je les faire lire ensuite par mes codes (java, php, ...) qui les restituent ensuite coe si ce sont eux qui les ont fabriquées (en prenant le soin de ne pas faire apparaitre le nom du fichier correspondant au niveau du client). Generalement ca a toujours marché.
Contacter le responsable de la rubrique Accueil