Статьи Новости Контакты

24.05.2007
Алексей Колупаев

Стоимость CAPTCHA-защиты

аспекты использования и оценка стоимости CAPTCHA-защиты

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart), один из вариантов обратного теста Тьюринга, все чаще и чаще появляется на сайтах, страдающих под натиском ботов, то есть автоматических программ — имитаторов деятельности пользователей. Это происходит в случае столкновения интересов нескольких сторон: администрации сайта, программистов, "хакеров", пользователей сайта и, возможно, некоего заказчика атаки. Впрочем, слово "хакер" здесь вполне можно употреблять без кавычек: для успешной сложной атаки необходимо действительно хорошо разбираться в веб-технологиях и противодействовать специально защищенным системам.

Рассмотрим интересы и мотивации каждой из сторон. Администрация сайта занимается своим проектом: зарабатывает на нем деньги (или получает моральное удовольствие), управляет своим персоналом (программистами, администраторами, редакторами) и радуется высокой популярности ресурса. Популярность, как правило, измеряется количеством людей, посещающих сайт и пользующихся его сервисами: читающих статьи, переписывающихся в почте, оставляющих и читающих комментарии и так далее.

Любая обширная интернет-аудитория тут же вызывает интерес тех людей, кому необходимо привлечь внимание как можно большего количества интернет-пользователей к чему-то. Назовем их заказчиками атаки. В зависимости от этики и мировоззрения заказчиков атаки это может быть как привлечение внимания к какому-то вполне нормальному сервису или информации (в таком случае мы называем это рекламой), так и вполне может оказаться, что им необходимо вовлечь максимум людей в какую-то аферу (в таком случае мы называем это мошенничеством). Привлечение внимания организуется, например, таким способом: пишется программа, сканирующая все статьи сайта и оставляющая к каждой по комментарию с привлекающими внимание словами и нужными ссылками. Как показывает практика, эта схема отлично работает — далеко не все люди понимают, что комментарий не имеет никакого отношения к статье, и переходят по ссылке. Этическая сторона таких действий, понятное дело, не берется во внимание: главное — результат.

Если вас атакуют — это обязательно кому-нибудь нужно

В первую очередь следует определить цели и средства атаки. Если атакуются комментарии в вашем блоге, построенном на одном из распространенных движков, то, скорее всего, именно ваша аудитория не является целью. Целью является аудитория всех блогов, построенных на этом движке. С позиции атакующего это выглядит примерно так: найти какой-то популярный движок блогов, написать бот, который сможет пройтись по всем записям в блоге и оставить по комментарию к каждой, затем найти список блогов, построенных на этом движке (очень поможет любой поисковик), и затем отдать адреса боту. Даже если хозяин блога удалит комментарий — некоторое время он будет виден. А учитывая масштабы атаки (реально оставлять подобные комментарии чуть ли не миллионами в день), а также бюджеты на "черное SEO" — вполне достойная цель для хакера. Его работы в данной схеме — всего несколько дней. Что характерно — такие атаки являются весьма характерными и постоянными. Поскольку к конкретному блогу атака не имеет никакого отношения, то и противодействовать ей крайне легко: достаточно слегка изменить движок так, чтобы стандартная схема атаки уже не подходила — например, изменить имя скрипта, на который уходит форма комментариев. То есть достаточно стать в чем-то уникальным, чтобы выпасть из общего ряда.

Помимо варианта массовой "бомбежки" малопосещаемых ресурсов есть также и противоположный вариант — целевая атака конкретного ресурса. То есть, например, популярного портала. В таком случае есть шанс привлечь внимание сотен тысяч пользователей, атаковав всего один сайт. В отличие от предыдущего варианта сайт будет активно защищаться — ведь его, как правило, поддерживает команда профессиональных программистов. Атаку смогут обнаружить и пресечь гораздо раньше и оперативнее, но и цель прекраснее — аудитория достаточно велика.

И, как вариант, может также случиться и атака с целью атаки — для дискредитации ресурса, удара по бренду в конкурентной борьбе. В таком случае годятся любые средства — не только рекламные сообщения в местах, где пользователи могут что-то написать, но и попытки нарушения функционирования системы как таковой. Впрочем, при разных целях инструментарий и предметная область остаются все теми же — веб-программирование.

Программисты и хакеры — как добро и зло. Очень похожи, одинаково умелы и постоянно воюют

Итак, что же может противопоставить программист хакеру? Было бы наивно считать, что программист обладает большими знаниями или навыками — по сути, эти люди отличаются лишь ролями в нашей модели, сами же по себе они вообще ничем не отличаются и обладают одинаковым уровнем профессионализма. Современное состояние технологий таково, что со стороны сервера при обработке запроса нет вообще никаких предпосылок считать данные подлинными или как-то их проверить. IP-адрес может меняться с помощью прокси-серверов, любые данные, приходящие от пользователя, могут быть сфальсифицированы.

Как и любая неновая проблема, эта также имеет несколько известных подходов к решению. Алан Тьюринг, в принципе, назвал проблему задолго до появления Интернета, и проблема имела более абстрактный и философский характер: можно ли, общаясь с кем-либо дистанционно, с помощью переписки, достоверно знать — общаешься ли ты с человеком или с машиной? С появлением Интернета задача стала весьма жизненной, но создать программу — симулятор человеческого общения все так же не удается.

В нашем же случае проблема прямо обратна — автоматическими средствами (то есть без участия человека) отличить человека от машины. Называется это обратным тестом Тьюринга и в данный момент решается в виде CAPTCHA-изображений.

Идея CAPTCHA, как правило, заключается в следующем: показать в форме с комментарием еще и картинку, на которой что-то нарисовано (как правило, буквы и цифры), и в полученных данных проверять, совпадает ли соответствующий код с сохраненным на сервере. Задача распознавания образов — классическая задача класса так называемого искусственного интеллекта, то есть задача, решение которой требует имитации деятельности человеческого мозга. Ее решение в данный момент весьма и весьма нечетко — решены лишь отдельные узкие классы задач, однако распознавание нарисованных символов — как раз один из таких классов. Он называется OCR, Optical Character Recognition, и делает это весьма успешно для своего класса изображений, например для сканированных книг. Поэтому программистам приходится вносить в картинки усложняющие элементы, чтобы распространенное программное обеспечение распознавания образов не справлялось с ними и написание специализированной программы также было делом нетривиальным.

Написать действительно хорошую CAPTCHA — дело весьма непростое

Насколько сложно написать генератор CAPTCHA-картинок и насколько сложно написать для него распознаватель? В простом варианте это достаточно быстро — сделать картинку, разместить на ней несколько букв, повернуть их, проиграть с цветами, добавить шума — и картинка готова. Время создания — от пары часов до недели. Распознавать же их значительно сложнее — фактически такой генератор картинок является отдельной узкой задачей, для которой придется писать отдельный распознаватель, основанный на использовании особенностей этой картинки. Разумеется, существует несколько проектов, посвященных именно этому ремеслу.

Таким образом, написание распознавателя — штучная работа, и написать нечто универсальное здесь довольно сложно. Однако, с другой стороны, далеко не каждый веб-программист имеет какие-то знания или опыт создания систем распознавания образов, чтобы понимать, какую нужно генерировать картинку, чтобы ее сложно было распознать. В результате получается весьма печальная картина: масса бездарно написанных CAPTCHA-генераторов и некоторое количество людей, которые в состоянии их взломать, достаточное для того, чтобы их вполне можно было найти и нанять для этой работы.

Однако такой взлом обойдется уж совсем недешево — для хорошей CAPTCHA-системы распознаватель придется писать недели и месяцы. Однако есть и предельная цена — вручную CAPTCHA распознается примерно за пару центов за одну картинку. Поэтому имеет смысл делать только такую программу, которая в итоге распознает картинки дешевле или, что немаловажно, значительно быстрее.

В любом случае, из этого можно сделать следующие выводы: если вас не взламывают, возможно, вы никому не нужны. Если вас взламывают, возможно, это происходит потому, что это слишком легко, чтобы этого не сделать. Если все-таки ломают именно вас, привлекая серьезные средства и методы, знайте: ваш интерфейс стоит один цент за картинку.




Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2017 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100