Четверг, 14 ноября, 2024

Новое на сайте

ДомойНаукаКак работает CAPTCHA и как создать нераздражающую защиту от ботов

Как работает CAPTCHA и как создать нераздражающую защиту от ботов

Что вы представляете при слове CAPTCHA? Скорее всего, бесполезную потерю времени и надоедливые челленджи на пути к использованию желаемого функционала. И такие ассоциации возникают не без причины: капча уже давно и повсеместно применяется практически на каждом сайте, но при этом она всегда так или иначе ухудшает UX, а боты продолжают спамить нас через различные каналы коммуникации. Как мы к этому пришли и что с этим можно сделать, расскажет Иван Короленко, Lead Front End Engineer «Яндекса».

Иван Короленко занимал ведущие позиции во фронтенд-разработке в финансовом секторе (банк ВТБ) и электронной коммерции (британская платформа для ритейла Mercaux). В «Яндексе», в том числе, работал в команде «Антифрода», где занимался исследованиями, разработкой и внедрением современных решений CAPTCHA.

Что такое капча?

CAPTCHA — это акроним от Completely Automated Public Turing test to tell Computers and Humans Apart, то есть полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей. Иными словами, это механизм для отсеивания ботов. Капча, в зависимости от своего типа, делает это с помощью одного челленджа или их комбинации. Самые широко известные примеры — это «Напишите текст с картинки» и Google Recaptcha v2, которая просит выбрать все светофоры/какие-то иные объекты на фотографиях. С ними сталкивался практически любой человек, который когда-либо пользовался интернетом.

Зачем нужна капча?

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

Первая капча для защиты от ботов появилась в 2000 году. Спустя 20 лет, в 2022 году, на долю ботов приходилось уже 47,4% всего интернет-трафика, поэтому в наше время работа известных сайтов уже невозможна без капчи.

Можно ли обойтись без капчи?

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

Какие бывают типы капч?

Сегодня их достаточно много. К используемым на практике относятся:

  • Графическая капча. Та самая «Напишите текст с картинки».
  • Текстовая. «Решите математический пример», «Решите загадку» и т. д.
  • С выбором изображений. «Выберите все светофоры на фото». Самый известный пример — Google Recaptcha v2.
  • С рисованием. Дается изображение, и пользователю нужно нарисовать нечто похожее пальцем или курсором.
  • Интерактивная игра. Например, забросьте баскетбольный мяч курсором в корзину или что-нибудь более необычное.
  • FunCaptcha. Капча на основе ориентации объекта в пространстве. Дается песик, стоящий на голове, его надо повернуть так, чтобы он стоял на лапках
  • Sliding CAPTCHA. Есть картинка, разрезанная на части, и эти части сдвинуты в разные стороны, надо сдвинуть их обратно в единый образ.
  • Невидимая капча. Не выдаем пользователю никакого челленджа, вместо этого смотрим скриптом на его действия на сайте и выносим вердикт — похоже на человека или нет.
  • 3D CAPTCHA. Просим выбрать самый большой красный предмет.
  • Биометрия. Например, просим приложить палец к сканеру в приложении. Зачастую не относится к типам капчи, однако я считаю, что этот тип проверки следует относить именно к капче, так как он выполняет ее функцию, причем гораздо более надежно, чем большинство других ее типов.

Как можно взломать или обойти капчу?

Зависит от типа капчи, но каждый из них можно взломать при достаточных ресурсах и желании. Например, графическая капча легко решается машинами, достаточно применить простейший ИИ. Она также легко решается с привлечением капча-ферм (это такие специальные сервисы, где люди за деньги решают челленджи). Текстовую капчу с загадкой можно решить с помощью ChatGPT или даже обычным ботом, умеющим посылать запросы в поисковик, если загадка — общеизвестная. Капчу с выбором изображений можно решить с помощью Puppeteer, если достаточно хорошо сымитировать движение курсора, чтобы не получить челлендж с картинками. Капча-фермы, опять же, легко тут помогут с решением, у них это один из самых популярных типов задач.

Читать также:
Опубликованы фото и данные суперсекретного британского компьютера

Как выглядит удобная и неудобная капча?

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

Неудобная капча, напротив, либо очень необычна, либо очень сложна. Например, на изображение наложено столько шума, что символы невозможно разобрать, либо дана настолько сложная математическая задача, что человек даже не пытается тратить на нее силы.

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

Какие сильные и слабые стороны существуют у капчи с точки зрения UX и безопасности?

  • Графическая капча

    Плюсы:

  • Всем знакома.
  • Легко решается людьми.

    Минусы:

  • Легко решается людьми (поэтому это не мешает капча-фермам делать то же самое).
  • Легко решается машинами. Достаточно применить openCV или простейшую CNN на датасете MNIST. 
  • Текстовая капча

    Плюсы:

  • Если спрашивать не отгадку, а рандомные вопросы про суть текста, то решаться будет только через продвинутую сеть с рекуррентными слоями или LLM (вроде ChatGPT).
  • Капча-фермы помогут только в том случае, если исполнитель будет владеть тем же языком, на котором написан текст. А если сделать культуро-специфичные тексты, то он должен быть знаком и с культурой определенной страны.

    Минусы:

  • Каждый раз новый челлендж для человека, это напрягает пользователя.
  • Нельзя сильно ограничить время выполнения, нужно дать пользователю время нормально подумать. Иначе будут сплошные false negative-результаты.
  • Затратно в поддержке. 
  • С выбором изображений (reCAPTCHA v2)

    Плюсы:

  • Всем знакома.

    Минусы:

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

    Плюсы:

  • Простая в решении для пользователей.
  • Несмотря на небольшую распространенность, можно быстро понять, что требуется сделать, и даже насладиться процессом.

    Минусы:

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

Возможна ли нераздражающая и одновременно надежная капча?

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

Создание удобной и надежной капчи потребует команды, состоящей из талантливых инженеров по информационной безопасности, а также UX-дизайнеров, экспертов в сфере ИИ, бэкенда и фронтенда. С такой командой разработка близкой к идеальной капчи будет вполне подъемной задачей.

Фото на обложке: изображение от pvproductions на Freepik