18 Июня, 2013

Разбор CAPTCHA на примерах и в картинках

BMS Consulting

Каждый из нас, наверняка, использовал компьютер для приобретения билетов на концерт, оформления заказов в интернет магазинах или просто для ведения личного журнала. Часто, перед подтверждением заказа, отправлением сообщения, система предлагает пройти нам простой тест. На самом деле, в этом и есть главная суть теста, для человека он должен оставаться простым, а для машины - невероятно сложным.
CAPTCHA поискового сервиса
компании Google
Именно такой тест называется CAPTCHA (англ. Completely Automated Public Turing test to tell Computers and Humans Apart), также известный как тип Human Interaction Proof (HIP).Существует множество вариаций таких тестов, чаще всего это изображение нескольких "размытых" букв и нашей задачей в данном случае стает правильное распознание предложенной последовательности для успешного прохождения теста. Возможность использования таких тестов достаточно широка:
  • Опросы в интернете.В Ноябре 1999, веб сайт http://slashdot.com разместил на своих страницах опрос для посетителей, о том какой же из университетов готовит лучших выпускников в области компьютерных технологий. Как и во многих других опросах того времени, отслеживание голосующих осуществлялось по уникальности IP адреса. Однако, студенты из Carnegie Mellon быстро нашли способ "накручивания" и программы стали отправлять тысячи голосов за их университет. Студенты MIT написали свою реализацию "бота", в результате чего голосование превратилось в соревнование программ. Победителем соревнования стали студенты MIT, которые финишировали с 21,156 голосов, на втором месте оказались CMU с 21,032. Остальные университеты набрали около 1,000 голосов. Конечно же такое голосование с трудом можно назвать честным.
  • Бесплатные почтовые сервисы.Достаточно много компаний (Yahoo!, Microsoft, Google, и т.д.) предлагают бесплатные почтовые сервисы, большинство, которых подвержены атакам со стороны "ботов". Ежеминутно автоматические программы могут создавать тысячи почтовых ящиков для выполнения автоматической рассылки рекламных сообщений.
    CAPTCHA почтового
    сервиса компании Yahoo!
    Для ограничения такой активности был введен тест CAPTCHA для распознания запросов, приходящих от человека. CAPTHCA сервиса Yahoo!, как показано на рисунке, предлагает нам распознать размытые буквы.
  • Поисковые боты.Владельцы некоторых веб-сайтов не хотят, чтобы поисковые службы выполняли индексацию страниц их ресурсов. Существуют HTML мета теги noindex, nofollow, noarchive, однако эти средства скорее не ограничивают доступ "ботов" в полной мере, а просят "не выполнять индексацию страницы". Поисковые "боты", принадлежащие большим компаниям, как правило, учитывают значения этих тегов, но если нужно гарантировать отсутствие автоматических запросов, то CAPTCHA станет хорошим решением.
  • Борьба с распространением червей и спама.Почтовый сервис может принимать в обработку e-mail только после успешно введенной информации теста CAPTCHA. Некоторые компании успешно используют эту идею.
  • Противостояние выполнению перебора пар логин+пароль. Benny Pinkas и Tomas Sander в своей работе "Securing Passwords Against Dictionary Attacks" предложили использовать CAPTCHA во время авторизации, что позволяет отсеивать программные попытки выполнить подбор пароля или ответа на секретный вопрос.
На первый взгляд может показаться, что построить систему с использованием теста CAPTCHA достаточно легко, однако, как показывает практика, в ряде известных реализаций присутствуют уязвимости, позволяющие автоматическим программам обходить предложенный тест.

В целом уязвимости теста можно разделить на две категории:
  • Связанные с распознанием изображения.В этом случае стоит обратить внимание на то, что распознание CAPTCHA делится на 2 этапа:
    • Определение местоположения и границ каждого из символов
    • Распознавание символа
    Можно считать не устойчивой к распознанию CAPTCHA, у которой не выполняется варьирование координат символов без видимого искажения шрифта,
    Легко распознаваемая CAPTCHA
    при этом текст достаточно контрастен по сравнению с фоном изображения. В таком случае, расположение и границы каждого из символов легко определяемый программно, что позволяет выполнить эффективное распознание с помощью специализированных или широкодоступных OCR (англ. optical character recognition, OCR) программ (список доступных программ такого типа содержится по ссылке ), а также с помощью специально обученных искуственных нейронных сетей ( пример использования такого подхода ).

    Если позиции символов не зафиксированы, возможным путем по их выделению может стать - сравнение с фоном по контрасту.
    Легко распознаваемая CAPTCHA
    В случаях когда, цвет текста сильно отличается от цвета фона, изображение может быть легко распознано. В этой ситуации стоит подумать о вариации расстояния между символами и улучшению зашумленности картинки. Показанная на картинке CAPTCHA распознается с помощью приложений PWNtcha и Captcha Sniper с вероятностью 97% и 61% соответственно.

    Однако стоит учитывать, что даже самое стойкое изображение, сгенерированное с учетом всех рекомендаций, может не выполнять возложенных на него функций. В Интернете доступен ряд сервисов, которые предлагают выполнить распознание CAPTCHA силами специально обученных сотрудников. Стоимость такого предложения может варьироваться, но начинается в среднем с 1 USD за 1000 распознаний. Также известен способ использования аудитории сайтов "для взрослых" для преодоления CAPTCHA-тестов почтовых систем. Сайты, в таком случае, перед предоставлением разрешения просмотра "клубничного" контента, предлагают посетителю распознать тест, что помогает злоумышленникам создавать дополнительные почтовые ящики для рассылки спама. Этот метод оказался очень эффективным и вырос до уровня целой индустрии.

    Существует очень много примеров реализации CAPTCHA, которые на сегодняшний день считаются не стойкими: PWNtcha - CAPTHCA decoder , A CAPTCHA in Rye , CAPTCHAs created by PHP scripts .
    Впечатляет разновидность подходов к распознанию текста CAPTCHA: Bypassing CAPTCHA with Python , Ломаем каптчу Яндекса , Разбор каптчи Xakep.ru .

  • Не связанные с распознанием изображения.В этом случае следует учитывать следующее:
    • Критично важно что бы закодированный текст или его часть не попадал в поток данных, которые передаются клиентскому браузеру. Поэтому, стоит хранить текст CAPTCHA в параметре cookies или запроса, даже в закодированном виде (угадать принцип кодирования чаще всего гораздо проще чем распознать изображение). Также в случае передачи текста, злоумышленник будет иметь возможность перехватить и подменить его во время передачи.
    • Не стоит выполнять генерацию случайного текста при выдаче страницы с формой (правильно выполнять генерацию при выдаче картинки), это дает возможность "боту" выполнить несколько запросов подряд и получить ряд изображений, содержащих одинаковый текст. Распознать текст в таком случае будет гораздо проще.
    • Не рекомендуется во время проверки брать правильный текст из сессии и сравнивать с ответом пользователя. Злоумышленник в данном случае может использовать несуществующий номер сессии без введенного проверочного текста. Этот пустой текст будет равен пустому тексту из сессии с несуществующим номером.
    • Нужно очищать значение текста, которое хранится в сессии, после каждой проверки. Злоумышленник может не выполнять запрос картинки (скрипт которой генерирует новый текст), а использовать один и тот же заранее заданный ответ.
    • После получения данных от пользователя, сессия должна удаляться в обязательном порядке, во избежание повторного использования.
    • Рекомендуется ограничивать время существования сессии.
    • Не стоит выбирать слишком короткий текст и ограничивать набор символов для генерации CAPTCHA. Например, CAPTCHA с числовой составляющей длинной в 3 символа может быть подобрана с помощью метода brute force.
    Примеры подобных уязвимостей можно найти по ссылкам: http://markitup.com/Captcha.ashx?txt=G-SG , Как обойти каптчу в Яндекс.Диск , Второй раз повторяю: я человек! .
Не обязательно тест CAPTCHA может принимать вид традиционной картинки с искаженным словом или случайным набором букв.
  • CAPTCHA может состоять из нескольких картинок со словами, как предлагает нам проект Google reCaptcha .
    reCAPTCHA от Google
    Проект для работы использует одно искаженное слово, сгенерированное компьютером, и второе - из отсканированной книги. Кроме своих прямых обязанностей по предоставлению качественного теста, проект занимается оцифровкой печатных изданий (слова из книг, которые были одинаково распознаны несколькими пользователями считаются корректными). Также reCAPTCHA может озвучить предоставленные для распознания символы, что очень удобно для людей с ограниченными возможностями.
  • Можно встретить достаточно оригинальные версии теста,
    Звуковая и графическая CAPTCHA MintEye
    keyCAPTCHA
    которые предложат нам распознать не искаженную картинку из нескольких предложенных, или предложат составить тестовую картинку из кусочков. Оригинальный подход к тесту в таких случаях может легко ввести в заблуждение при выборе надежного варианта CAPTCHA, однако не стоит думать что стойкость приведенных примеров достаточно высока. Уже разработано несколько достаточно эффективных подходов по преодолению такого теста: Решение MintEye CAPTCHA в 23 строки кода , Автоматическое распознание KeyCaptcha .
В завершение, хочется подытожить, что при выборе CAPTCHA нужно обязательно учитывать ряд правил и рекомендаций, а также выполнять тщательный поиск доступных в сети интернет подходов преодоления таких тестов. Стойкость CAPTCHA зависит не только от устойчивости изображения к распознанию, но и от качества ее реализации в веб-приложении.

P.S. Исследователи компании Microsoft Kumar Chellapilla и Patrice Simard,
Пример трудно распознаваемого теста
Пример трудно распознаваемого теста
утверждают, что уровень успешного распознания человеком хорошего CAPTCHA теста должен достигать величины 80%, при том что машина сможет распознать аналогичный тест всего лишь в 0.01% случаев. Поэтому приведенные с лева примеры CAPTCHA теста, вряд ли можно будет считать удачными с точки зрения возможного распознания человеком.





Полезные материалы
или введите имя

CAPTCHA
Ябеда
29 Июня, 2013
Keycaptcha - средство для массовой слежки за посетителями
Keycaptcha - средство для массовой слежки за посетителями и отмывания криминальных денег, оперирует из Россиии через подставные бизнес-адреса, сотрудничает с правоохранительными органами Читаем: http://bestauction.ru/showthread.php?t=14489&page=2
0 |
Анатолий
22 Апреля, 2014
пиксодром http://pixodrom.com обходит любую капчу : 100 штук за 7 центов
0 |