Scriptorama.nl

Header image showing a keyboard, mouse, laptop and books on design patterns

Hoe veilig zijn CAPTCHA’s?

Scriptorama krijgt behoorlijk wat comment spam. Omdat ik alle reacties modereer, exact om deze reden krijgen jullie daar gelukkig niet zoveel van te zien. Een manier om bijvoorbeeld comment spam te voorkomen of in elk geval te verhinderen is het plaatsen van een CAPTCHA, of wel een Completely Automated Public Turing test to tell Computers and Humans Apart. Dit is over het algemeen een gegenereerd plaatje met daarin een serie nummers en/of letters. Nu zijn er technieken die tekst uit een plaatje kunnen lezen dus deze nummers en letters zijn op zo'n manier geplaatst dat dit vrijwel onmogelijk zou moeten zijn. Maar is dat het wel? Dit artikel op brains-n-brawn.com beschrijft hoe een bepaald soort CAPTCHA gebroken kan worden met een stukje vernuftig programmeer werk.

this article is about writing a comment spam bot. it ended up posting 94 comment messages to CAPTCHA protected blog pages in 10 minutes. all it does is visit a blog post and download the associated CAPTCHA image. then it uses some image processing techniques to parse out the characters in the image. each character is then run through some AI processing to figure out what letter the character image represents. finally, with the result, it posts the comment spam to the blog engine. i wrote it for a couple of reasons ... mainly to show that rel= 'nofollow' and CAPTCHA are false protection from comment spam.

Het is wel leuk om even te lezen hoe hij deze CAPTCHA's probeert te kraken. Mijn eerste reactie op zijn verhaal was dat hij CAPTCHA's aan het kraken was die allemaal geen lijnen achter de letters hebben staan en dat dergelijke CAPTCHA's zijn line-endpoint algoritme wel eens in de war kon gooien. Maar het blijkt dat er al andere projecten zijn die dergelijke CAPTCHA's al kunnen kraken.

Gelukkig geeft de schrijver nog wel een paar tips om je CAPTCHA's in elk geval zo sterk mogelijk te maken:

  • render the characters with different colors
  • make some characters darker than the background, and some lighter
  • use gradient colors for the backgrounds and the characters
  • dont align all the characters vertically
  • dont make the answers words, so that a dictionary could be used
  • use more characters and symbols
  • use uppercase and lowercase characters
  • use a different number of characters each time
  • rotate some of the characters more drastically (i.e. upside down)
  • do more overlapping of characters
  • make some pixels of a single character not touching
  • have grid lines that cross over the characters with their same color
  • consider asking natural language questions

Kortom, een CAPTCHA plaatsen is niet meteen de end-all oplossing voor comment spam. Je zult er wat meer moeite voor moeten doen.

Reageer ook!

Hier ook leuke info + tips:

http://www.pwntcha.net/test.html

"Gelukkig geeft de schrijver nog wel een paar tips om je CAPTCHA’s in elk geval zo sterk mogelijk te maken:"

Ja, probleem hiervan is dat je het niet alleen spambots erg moeilijk maakt, maar ook je gebruikers.. Denk toch dat modereren de beste oplossing is.

"consider asking natural questions". Dit is een methode die mij het meeste aanspreekt. Het probleem hiermee is wel dat je ervoor moet zorgen dat je een roterende set vragen hebt en misschien zelfs moet zorgen dat de vragen met verschillende ids worden verstuurd. Maar dat is natuurlijk makkelijk te doen met een stukje PHP.

Modereren is een mogelijkheid, alleen soms krijg je zoveel spam dat modereren eigenlijk geen optie meer is. Dan ga ik voor de ’simple questions’, zoals ”hoeveel uren heeft een dag” etc.

Ik heb al verschillende vormen gezien die vele malen makkelijker zijn dan captcha's. Zo zijn er blogs die vragen 'hoeveel is drie plus zeven?'. Nou, kun je best een custom spambotje voor schrijven, maar zodra er 1 spammer doorkomt verander je de vraag in 'wat is mijn voornaam?'. Dat zijn zulke specifieke vragen dat het de moeite niet loont om daar een spambot voor te maken voor 1 site, terwijl een spambot maken die captcha's kan lezen wel interessant is.

Hmm, de captcha die ik gebruik is zeker redelijk veilig: http://www.pwntcha.net/test.html?file=20060703221036woxqZg

@Daniel & Vincent: pwntcha had ik ook al gezien, maar geen van de captcha's die daar geupload zijn lijken herkend te worden, vandaar dat ik die achterwege heb gelaten.

pwntcha herkent alleen captcha's die eerder door de eigenaar van pwntcha zijn toegevoegd. Zo herkend hij bijna feilloos alle phpBB, invion en vBulletin images.

Als je zelf een mooie captcha hebt gemaakt en het ding herkend 'm niet dan zegt dat dus niets over de veiligheid. :)

edit: pwntcha.net is uit de lucht :(

Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>