Анти Бот для WordPress, часть 2: что изменилось за несколько месяцев

В прошлой статье я рассказывал, как дошёл до идеи сделать свой Анти Бот для WordPress – Cloudflare для части проектов стал недоступен и начал блокировать/тормозить, а разумных по деньгам альтернатив на рынке не нашлось: DDoS-Guard с доступом к WAF оказался не по карману, у Яндекса, МТС и Ростелекома – от 10 тысяч рублей в месяц за сайт плюс тарификация по запросам, а голый .htaccess захлёбывается на списках в тысячи диапазонов IP.

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

Про офлайн-базы геолокации

Логичный вопрос, который стоит закрыть сразу: зачем вообще зависеть от внешнего сервиса определения страны по IP, если есть бесплатные офлайн-базы? Ответ оказался не таким однозначным – бесплатные офлайн-базы (что MaxMind Lite, что более свежие альтернативы вроде dpip) объективно менее точны, чем платные версии, а Анти Бот для WordPress изначально задумывался как решение, которому можно доверять в вопросах гео- и ASN-блокировки, без последующих «а почему у меня заблокировался живой посетитель из своего же города».

Поэтому вместо стороннего сервиса или готовой офлайн-базы с её нюансами точности сделали свою: офлайн-база геолокации физически лежит на нашей стороне, но умеет храниться и обновляться прямо у клиента – определение страны в основном идёт локально, без похода во внешний сервис на каждый запрос. А вот база по ASN – тот случай, где данные сознательно остаются только у нас: она курируется централизованно, клиентским установкам отдаётся уже результат, а не файл базы, – тут больше вопрос веса полноценной базы, на хостингах где вечно впритык места, вряд ли найдется место для базы размером в 2-3гб.

Честный разговор про готовые альтернативы

Ещё одна тема, которую хочу закрыть сам, не дожидаясь вопросов: почему не остановиться на поведенческих ловушках (honeypot) в формах или на одном из готовых бесплатных плагинов, которых на рынке хватает.

Тут стоит признать сразу две вещи. Honeypot действительно неплохо ловит ботов, которые пытаются заполнить форму, но он бессилен там, где боту форма вообще не нужна: парсинг контента, перебор паролей в админку, прямые запросы к уязвимым эндпоинтам – точек соприкосновения с такими атаками у него просто нет. А из платных конкурентов Wordfence Pro – действительно сильный игрок, и держится он на том же принципе, на котором раньше стоял Cloudflare: собственная база известных вредоносных IP и паттернов трафика, обновляемая централизованно сразу по всем установкам. Бесплатная версия Wordfence при этом урезана именно в части базы – свежие данные доезжают до неё с задержкой. И отдельный момент: Wordfence в какой-то момент попал в перечень сервисов с ограничениями от РКН из-за передачи данных за рубеж – для российского бизнеса это уже не вопрос эффективности защиты, а отдельный юридический риск.

Ещё один популярный вариант, Really Simple Security, эту задачу решает жёстко – банит по IP без промежуточных сценариев вроде мягкой проверки для сомнительного, но не однозначно бот-трафика. Работает, но топором, а не скальпелем.

Насколько ощутима разница между «ловушкой в форме» и «блокировкой по базе плюс мягкая проверка трафика», недавно показала практика: массовая волна взломов сайтов через свежую уязвимость в ядре WordPress, которую в комьюнити быстро окрестили wp2shell. Атака шла не через формы – один прямой запрос к уязвимому эндпоинту сразу давал исполнение кода. Honeypot и капча в формах тут были попросту не при делах, а вот блокировка по базе подозрительных IP/ASN и челлендж для трафика из нецелевых для конкретного сайта стран сработали иначе: массовые автоматические сканеры, которые ищут уязвимые установки по всему интернету, в основном шли именно оттуда и до уязвимого эндпоинта на защищённых сайтах просто не добирались. У клиентов на Анти Боте, которых застала эта волна, сайты остались целы.

Что реально поменялось в плагине

Без глубокой техники, по сути:

Появилась блокировка по ASN – то есть по конкретному хостинг- или дата-центр-провайдеру, а не только по стране или отдельному IP. Спам-боты обычно сидят пачками на одних и тех же облачных провайдерах вне зависимости от страны, и блокировка на уровне провайдера отсекает такие пачки одним правилом.

Для заблокированных по ASN или из чёрного списка IP теперь есть мягкая интерактивная проверка вместо мгновенного бана – это заметно снизило число ложных срабатываний на живых людях, заходящих через VPN размещенных на серверах с неочень хорошей репутацией.

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

Первые платящие клиенты

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

Куда дальше

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

Толчком к этому стали сайты с преимущественно зарубежной аудиторией, которые сейчас в тесте. Для них простая логика «проверка всем, кроме РФ» просто не работает – целевая аудитория сама живёт в десятках стран, и грубая гео-отсечка режет живых людей не хуже, чем ботов. Приходится настраивать точечно под каждый сайт: больше опираться на IP и ASN конкретных источников трафика, аккуратнее работать с User-Agent, и уже сейчас закладывать место под поведенческие сигналы и дополнительную информацию о провайдерах – это следующий и самый интересный шаг.

44
11