TextCAPTCHA: 180 million simple logic questions
textcaptcha.com
textcaptcha.com
Most captchas depend on the difficulty of the reverse transform applied to an image, especially when you don't know what the transform is. Here, the forms seem pretty regular, and the "transform" of inserting words is discrete rather than continuous, so a bit easier to reverse.
I don't even need to program something which will understand all of the patterns. I just need to program something that will understand some of the patterns, which just keeps fetching captchas until it eventually understands the format, eg "What is X plus Y?"
This captcha system is considerably more simple to break than the typical image based ones.
By applying the mathematics from the Birthday Attack (http://en.wikipedia.org/wiki/Birthday_attack), If an attacker is able to solve 15.8 million of the 180 million captchas, there will be a 50% probability that the attacker can beat the captcha.
I tried refreshing the page 10 times, generating a total of 100 captchas. Out of those, I observed 8 arithmetic problems which I entered into and solved using Wolfram Alpha. That gives roughly the 15.8m/180m necessary to break the captcha with 50% probability.
At 50% probability, again going back to the Birthday Attack mathematics, an attacker would need roughly 16.8 thousand tries before expecting a collision with one they could break.
This probability will increase if an attacker is able to successfully reverse-engineer more patterns.
Edit: thinking about this more after MichaelGG's comment, I think my math is incorrect. Either way, point still stands that Wolfram Alpha can successfully solve 8% of the captchas and other patterns should be solvable by other means too.
Just looking at it simply, if you can solve 15.8 of 180, that means that for any given test you should have an 8.77% chance of solving it (6 tests for > 50%). What am I doing wrong?
Also, it looks like some of the other questions are easy to automate. Like "how many letters are in the word 'whatever'".
Another problem with this system is that it only works for people who can read and understand English.
By the way, picking one token from the captcha and returning it beats the captcha 7% of the time, if the examples are representative. Spammer wins, since he can generate requests by the hundreds of thousands.
> The 1st number from 25, eight, 6, six and 27 is?
So is the answer 25 or 6?
I've come to the realization that CAPTCHAs aren't the solution, or at least can't be a standalone solution. Make the CAPTCHA easy enough for a human to not be blocked (pick the cat from these 3 photos) and the bot still wins 33% of the time. Make it hard enough that the user has to invest energy to 'solve' the problem in front of them and you alienate users by treating them like criminals.
Interpretation 2: It's a numerical list of numbers, numbers being ordered by value have an implicit sort applied to them, pick the first element in that sequence = 6.
#2 is a very programmer thing to do ;)
Think about it: the actual problem with spammers defeating CAPTCHAs is low quality content. I'd much prefer to expend energy trying to stop low quality content, which is often delivered by non-spammers :)
I wrote a blog post expanding on these ideas: http://cmurphycode.posterous.com/the-problem-with-captcha
Something like ReCaptcha is already for all intents and purposes bot-proof. A text captcha like this looks like a step backward.
For example: "What is ten + 1?" ...in bing: http://www.bing.com/search?setmkt=en-US&q=What+is+ten+%2... ...in google: http://www.google.com/#sclient=psy&hl=en&q=what+is+t...
Said that, they don't seem very spam-proof to me.
For more info about how hard CAPTCHAs need to be read Luis Von Ahn's papers:
A crucial part of making this a successful anti-spam system is that it is a moving target. Every user of the system must be able to write their own questions. If that happens, the spammer's task is intractable. But if there is a central site serving these, it will be worth the spammers' while to just hardcode the patterns and write a little bit of logic to parse and answer them.
Now, there's a fair bit of interesting UI design in the question of "how do I get a non-programmer to write what is in essence a very small program". My proof of concept used some cute Perl-isms to basically construct a mini-language that was restricted enough that an inexperienced programmer could "script kiddie" their way through it, and I think this is the right general direction, but you'd need a fair amount of work to really make it accessible to the masses.
(Other crucial points that he gets right: it must be text based; it must have questions that hinge on natural language understanding but not be otherwise difficult; and it must have questions that are really question templates each of which can generate infinite numbers of question instances.)
Who creates a bot specifically to overcome the CAPTCHA on a forum for a 15 year old video game with very little traffic? We're not really a significant target; I only have to ban about one spambot per week. There's a tremendously low ROI from spambots on our forum, I can't imagine it'd be worth anyone's time to even attempt to incorporate it into their CAPTCHA-breaking bot.
For non native english speakers:
"Cheese, cat, mosquito, trousers, elbow and ant: how many body parts in the list?" or "Soup, dog, trousers, house, mosquito or pink: the colour is?"arent as easy as "3+1" or reCaptcha . Not everybody speak english on the interweb...
Perhaps on the long term, but solving the captcha problem for the english-speaking (or any language, for that matter) subset of the internet population is still a very worthwhile undertaking.
For example, to solve the "Which of these is a T: W, X, Y or Z?" you would just put in a rule like "BodyPart ::= Foot | Knee | Leg | ..." "DayOfWeek ::= Monday | Tuesday | ..." "Color ::= Red | Blue | ..." and then have it match against those.
Maybe the next time I have some free time I'll see if I can go and implement it.
"Constructive Spam"
Beware if you have users that might be sensitive to such things.
For example - it would be quite easy to solve which word is capitalized - or any of the math or series questions.
10? Thirty? Thirty Six?