Продолжаем бороться с роботами. Возьмём спам-бот на мушку и стрельнем пару раз.
Вводная
"CAPTCHA (от англ. «Completely Automated Public Turing test to tell Computers and Humans Apart» — полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей) — торговая марка Университет Карнеги - Меллона, компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером. Термин появился в 2000 году. Основная идея теста: предложить пользователю такую задачу, которую легко решает человек, но которую невозможно (или крайне трудно) научить решать компьютер. В основном это задачи на распознавание образов."
Углубляемся в проблему
Всё бы хорошо, но спамеры не дураки, хотя и уважать их за это мы не будем. Но и они могут совершать ошибки и просто не успевать что-то сделать. Одно радует - противник достойный. Находчивый и сообразительный. Очень ценю это в людях.
Итак, есть простые и элегантные способы обойти капчу:
Уязвимости защиты
При недостаточной квалификации веб-программиста бот может пройти CAPTCHA, не распознавая изображённых символов. В этом случае бот либо подменяет идентификатор сессии, либо по какой-либо информации, содержащейся на странице, определяет, какие символы изображены на картинке.
Угадывание
Если количество вариантов ответов невелико, компьютер или ботнет может попытаться угадать ответ. Например, если задача — среди 10 картинок отметить животных, получается всего 210=1024 варианта ответа. Значит, в среднем один из 1024 запросов пройдёт CAPTCHA. То есть, даже при производительности 1 запрос в секунду (реальная цифра, например, для ADSL) можно производить 3,5 успешных запроса в час. Боты используют несколько параллельно выполняющихся потоков, благодаря чему производительность бота зависит только от полосы пропускания, отданной ему в распоряжение.
Автоматизированное распознавание
Существуют программы, распознающие конкретные реализации CAPTCHA, к примеру, PWNtcha. Кроме того, существует возможность подключать модули из программ распознавания текста общего назначения (например, Fine Reader) в программы сторонних разработчиков для распознавания картинок CAPTCHA.
По отношению к автоматизированному распознаванию существуют понятия «слабая CAPTCHA» и «прочная CAPTCHA». В числе «слабостей» — фиксированный шрифт, фиксированное положение символов, отсутствие искажений, отделение символов от фона с использованием цветового ключа или размытия по Гауссу, лёгкое отделение символов друг от друга и т. д. Впрочем, иногда бывает, что прочная CAPTCHA оказывается труднораспознаваемой и для человека. Изредка встречается CAPTCHA, легко прочитываемая компьютером и с большими трудностями — человеком (например, с неконтрастной картинкой).
Если пользователь должен опознать картинку или ответить на вопрос, можно собрать базу данных всех имеющихся картинок/вопросов.
Ручное распознавание
Есть способ «распознавания», использующий человеческих ресурс и ресурс высокопосещаемых сайтов, например, сайтов порно-тематики. Робот скачивает CAPTCHA с интернет-сервиса и показывает его пользователю порносайта, с просьбой ввести код, который он видит на картинке. Взамен пользователь получает доступ к ресурсу, а робот узнаёт код, изображенный на картинке («метод леммингов»). Вариантом этого метода является сервис ''Captcha Exchange Server'', запущенный в марте 2007 года и направленный на обход картинок CAPTCHA, используемых файлообменниками. Принцип работы сервиса основан на системе баллов, которые пользователь может заработать, распознав картинки для других пользователей, и позже потратить, запустив программу автоматического скачивания с файлообменников, при этом картинки будут распознаны другими пользователями сервиса. Таким образом, пользователь может оптимизировать затраты своего времени и денег, набирая баллы, когда он всё равно находится у компьютера, и тратя их, когда ему более удобно скачивать (например, в случае, если ночью доступ в интернет обходится дешевле).
Несмотря на уязвимости, это не означает, что любая CAPTCHA-защита априори бессмысленна. Тут наблюдается извечный принцип соревнования оружия и защиты (снаряда и брони).
Ну что? Впечаплились?! Это общеизвестная информация, а значит вряд ли станет для нас серьёзным оружием...
Варианты реализации
Связка Captcha+CAPTCHA Pack даст нам такие виды капчи:
- ASCII art CAPTCHA
- CSS CAPTCHA
- Foo CAPTCHA
- Image CAPTCHA
- Lost character CAPTCHA
- Math CAPTCHA
- Phrase CAPTCHA
- Random CAPTCHA type
- Captcha Riddler
- Text CAPTCHA
- Word list CAPTCHA
Скриншоты приложены к статье - см. ниже.
Зачем это нужно?! Чем более редкий алгоритм - тем меньше вероятность, что его взломают. Если все сайты на друпал будут использовать один вариант защиты, то имеет смысл вложить и деньги, и время для его взлома, потому что в итоге спамер получит доступ ко всем сайтам на друпал! Хорошая награда.
Варианты обхода защиты
Кроме тех, которые перечислены выше нашёл ещё несколько полезных для изучения статей:
- человек! - очень обширная статья. Рекомендую!
- Битрикс - обход алгоритма (2006 год). Уже исправлено.
- капч - внушительный список. Все основные операторы мобильной связи в Украине! Правда всё на английском, но зато есть картинки...
Ссылки
- http://www.captcha.net/ Страница проекта
- http://www.captcha.ru/ CAPTCHA.ru - есть описание взломов распространённых форумов, предлагают свой вариант.
- http://blockspam.ru/ CAPTCHA 3D — генерация трехмерной CAPTCHA
- http://www.deniso.info/blog/?p=23 Альтернативная каптча для форума phpBB
- http://www.cryptographp.com Cryptographp — PHP Captcha
- http://www.captcha.net The Captcha Project
- http://captcha.megaleecher.net/ Декодирование CAPTCHA с использованием PHP
- http://www.w3.org/TR/turingtest/ Inaccessibility of CAPTCHA / W3C
- http://ocr-research.org.ua/ Декодирование CAPTCHA, своя 3D-CAPTCHA
- http://captcha.opti-mail.net Описание графической CAPTCHA, не связанной с распознаванием надписей
- http://dvk.com.ua/rapid/ Captcha Exchange Server
- http://recaptcha.net/ reCAPTCHA, проект оцифровывания книг силами пользователей через CAPTCHA-формы]. Пробовал. Во-первых, сайт предоставляет форму для капчи полностью на английском языке, а во-вторых, я не совсем доверяю этой методике. Если они предлагают распознавать нераспознанные книги, то как они проверят правильность ввода пользователем того, что он видит на отсканированной картинке. Меня это настараживает!
- http://www.xakep.ru/post/31268/default.asp Взлом Captcha на SecLab by Sachk
- http://www.xakep.ru/post/39206/default.asp Взлом Captcha на ItSec by Sachk
- http ://www.xakep.ru/post/40691/default.asp Взлом Captcha на ФМС by Sachk
- http://www.captchabot.com Распознавание Captcha - это враг, но его нужно знать в лицо! 3 цента за каждое корректное распознавание.
- http://users.altupdate.ru/cap/ Программа быстрого распознавания текстов картинок на основе обучающих шаблонов - тоже интересно посмотреть, что уже было взломано и не питать ложных иллюзий.
Рекомендации по безопасности
Как легко убедиться, что способов обойти проверку, хоть отбавляй. Поэтому этим мы и займемся. Вот некоторые рекомендации:
- Время существования сессии должно быть ограничено, пяти минут вполне хватает. Если заполняемая форма очень большая, разбейте ее на несколько частей, а сессию создавайте на последнем этапе.
- В случае получения формы, сессия должна быть немедленно удалена, чтобы избежать повторного ее использования.
- Обязательно проверяйте полученные данные на пустые значения. Это должно спасти вас от ситуации с несуществующей сессией. Это также поможет вам с проблемой VIEWSTATE, если вы программируете на ASP.NET.
- Желательно все данные о сессии хранить в Cookie и не выносить в HTML код страницы. Кстати, в HTML можно выносить фиктивные сессии, для отслеживания попыток взлома на их начальной стадии.
- Если тест находится в регистрационной форме, поставьте блокировку по IP, на повторную регистрацию. Это не панацея, но все же. В дополнение, если в генерации CAPTCHA будет принимать участие и IP адрес, то история с vBulletin с вами не повторится.
- Не генерируйте простых изображений, но и не перегибайте палку с эффектами.
Выводы
Бой не окончен. Ожидать, что будет решение на все случаи жизни не нужно. Интернет меняется, новые технологии появляются, мощность серверов растёт и поэтому нужно всё время держать руку на пульсе. Какую защиту выбрать - зависит от конкретных условий и задач. А цель этой статьи - обзор и лёгкое углубление в тему (мы ведь ещё в коде не ковырялись?!...).
Удачи!
Комментарии
Только что обнаружил возможность обойти ограничение на количество ссылок на этом сайте. В статье очень много ссылок и она попала в подозрительные на спам. Я пишу в вики-формате. Я со всех ссылок убрал спец. форматироватие - сделал их простым текстом. Фильтр меня пропустил и ... все ссылки всё равно активные! Мне - хорошо, но вообще - это не очень хорошо....
пвасилию или мне в аську стучать можно, если формат ввода изменить надо или со спама переключить.
Очень познавательно, спасибо!
Давно взято на вооружение.
супер статья !!
Уже давно существует Риддер Капча модуль (или как-то там)...
пишете вопрос (любой), на который нужно знать ответ (без выбора ответов)...
и как роботы, интересно, ответят на вопрос: "Какого цвета был флаг СССР?"...
имхо, никак...
Да, я пробовал Captcha Riddler, но отказался от него. И вот почему:
*Модуль защитит от случайного спам-робота, случайно зашедшего на ваш огонёк. Но он очень слаб для целенаправленной атаки на ваш сайт - один вопрос, который не меняется!... Спамеру достаточно один раз глянуть на вопрос и забить ответ в свой скрипт и он может завалить спамом ваш сайт.
*Вопросы могут быть очень экзотичными - это да, но важно, чтобы люди знали на них ответ. Таким образом, простых математических вопросов типа "1+2=?" будет вполне достаточно. Кроме того, эти вопросы каждый раз разные!...
Короче, разные виды капчи имеют разный уровень защиты. Пройдитесь ещё раз по ссылкам в конце статьи и вы будет знать критерии выбора сильной капчи для своего сайта. Очень интересно посмотреть какие капчи уже сломаны - ссылки тоже приведены.
Ну защита от спама - это защита от спам-ботов, ботов широко распространненых.
и тут капча это скорее осложнение для пользователей чем для ботов
У меня на вобле, капчу проходили спам-боты запросто
Но после того, как я добавил поле, напишите цифру .... в поле, они (боты) уже не проходят.
В примере с флагом, имхо, недостаток, что можно написать: красного, алого, красный, алый и тд
В смысле от бота написанногос специально под ваш ресурс, капчи не спасут
но, это надо иметь действительно стоящий того ресурс
Где то читал статью о защите без капчи.
форме добавляется еще одно поле и называется как нибудь неприметно, например, about.
ЦСС - кой устанавливаете для этого поля { visibility: hidden }
а потом проверяете, если поле заполнено - значит бот.
http://freshmeat.net/projects/kcaptcha/ - интересное решение картинки, и читается, и где стоит - спама пока нет.
Про скрытое поле я тоже читал, но оно статично и если сайтом заинтересуются опред. лица (а это может случиться при большой посещаемости или PR), то можно легко настоить робота на обход этого дела. И однажды утром вы увидите сайт заваленный спамом.
Это скорее "защита от дурака", но серьёзных людей она не остановит. Для сайта с небольшой посещаемостью это может быть хорошим решением, но не для крупного. IMHO
Про http://freshmeat.net/projects/kcaptcha/. С помощью модуля Catcha и дополнительных можно настроить такое же искажение букв...
"Да, я пробовал Captcha Riddler, но отказался от него. И вот почему:
*Модуль защитит от случайного спам-робота, случайно зашедшего на ваш огонёк. Но он очень слаб для целенаправленной атаки на ваш сайт - один вопрос, который не меняется!"
От целенаправленной атаки не защитит ничего... Обсуждалась защита именно от спам-ботов... А от людей... хм... так кто иешает вопросы менять? И спамеру придётся каждый раз заходить на мой сайт... да пожалуйста...
А если немного подумать, то можно создать много разных вопросов и чтобы они менялись или выбирались случайным образом... и что будет делать спамер? Тусоваться на моём сайте с утра до вечера? хм...
Здорово, спасибо!
Ребята ну просто смешно
1+2, вычислить как нефиг делать.
Насчет того что выдержит ли каптча защита вашего сайта или нет, вопрос конечно.
Сдается мне, что все решаемо, вопрос цены и времени.
http://www.e64f.ru/?p=45 - может тут свою картинку увидите. ))
оформление поплыло, однако.
* http://recaptcha.net/ reCAPTCHA, проект оцифровывания книг силами пользователей через CAPTCHA-формы]. Пробовал. Во-первых, сайт предоставляет форму для капчи полностью на английском языке, а во-вторых, я не совсем доверяю этой методике. Если они предлагают распознавать нераспознанные книги, то как они проверят правильность ввода пользователем того, что он видит на отсканированной картинке. Меня это настараживает!
Что за предрассудки! Если вы незнаете английского языка, это ещё не значит, что reCAPTCHA системы защиты от неправильных вводов! Система каждый день совершенствуется, а проверяет правильно ли введено слово таким образом: одно из слов на картинке серверу уже известно, а другое слово не известно.
Попробуйте сами ввести слова неправильно и Вы поймёте, что роботу будет не так просто ввести правильно все символы.
мной живым эта reCaptcha проходится в 85% случаев.
Добустим большинство будет использовать капчу на основе изображений, но каждый же может выбрать для нее свой набор символов и свой шрифт (а шрифты могут очень сильно отличаться по начертанию) - в итоге к сайтам всеравно нужен индивидуальный подход, хотя это один вариант защиты