Вечная Борьба С Парсерами, Которую Мы Вроде Бы Выиграли

Каждый более-менее крупный сайт хотя бы раз подвергался атаке.

Так произошло с нашим сервисом Руспрофиль, люди пытались парсить финансовые и юридические данные о компаниях, которые мы агрегируем последние 5 лет. Поэтому наша команда написала хорошую систему безопасности с несколькими уровнями проверок.

В этот Новый год произошла DDoS-атака, которую наша система смогла отбить менее чем за час.

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



Вечная борьба с парсерами, которую мы вроде бы выиграли

В Руспрофиле мы собираем данные из различных источников обо всех компаниях России и отображаем их в удобном интерфейсе.

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

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



Зачем кому-то воровать контент и почему он не может просто создать свою собственную базу данных?

До этого года у нас была простая модель монетизации.

Вся прибыль шла от рекламы, а трафик шел из поисковых систем.

Более 4 лет мы показываем все данные бесплатно, открыто и полностью.

И конечно, нашлись люди, которые хотели получить эти данные в готовом виде, чтобы сделать подобную систему и еще и заработать на рекламе.

Легче скопировать, чем собирать данные самостоятельно из десятков источников , анализировать, сравнивать и разбирать.

Не будем раскрывать имена, но все попытки отобрать контент были исключительно ради денег.

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

Некоторые одновременно проксировали сайт и пытались парсить данные, а иногда даже копировали наш дизайн.

Иногда воры были более изобретательными и, по крайней мере, делали свой сайт. Сейчас почти все эти сайты мертвы.

Основная причина атак и попыток всё скопировать — контент. Бесплатное свидание, которое вы сможете подарить своей аудитории и заработать на рекламе.

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

нагрузка растет аномально.

Люди пытаются вытащить все сразу, они кидаются в сотни тредов, и, соответственно, наши пользователи начинают страдать.

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



Вечная борьба с парсерами, которую мы вроде бы выиграли

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

Но можно сделать этот процесс невыгодным для злоумышленников.

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

Это помогло нам избавиться от нескольких зеркальных проектов, которые зарабатывали на нашей работе.

— А можно взять все источники и скачать оттуда данные таким же образом? вы можете резонно спросить.

Конечно вы можете.

Более того, мы не скрываем, откуда получаем информацию.

Зайти в раздел на сайте может любой желающий Источники данных и посмотрим, где мы все собираем.

Их там около пятидесяти.

К сожалению, любителям быстрого заработка недостаточно просто знать эти источники.

Мы потратили много времени на правильную интеграцию, анализ и обработку данных.

А по стоимости человеко-часов это, конечно, уже миллионы рублей.

Поэтому никто не заинтересован в построении такой системы; проще украсть готовые структурированные данные и перепродать их.



Fail2ban — первый шаг к отсеиванию мошенников

Когда нагрузка на проект от ботов стала большой, встала задача их отключить.

Как на самом деле работает парсер? Самый простой вариант — написать какой-нибудь простой скрипт, который тянет страницы и как-то их парсит, но это уже не наше дело.

Нас волнует только то, что на наш сервер постоянно кто-то стучится.

В этом случае мы видим много запросов с одного IP-адреса и, естественно, можем это просто исключить.

Мы просто баним этот IP с помощью автоматизированного решения.



Вечная борьба с парсерами, которую мы вроде бы выиграли

Скрипты для парсинга Rusprofile даже есть в публичном доступе на GitHub К сожалению, количество таких парсеров обратно пропорционально сложности решения.

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

Были даже автоматизированные решения, которые продавались на форумах.

Они умели сразу работать с Excel, где компилировались данные.

Естественно, у этих парсеров был IP компьютера, на котором запускался этот скрипт, но тут всё понятно.



Вечная борьба с парсерами, которую мы вроде бы выиграли

Есть даже скрипты для парсинга прямо в Excel Первое, что мы сделали, это начали отключать около 80% скрипткидди.

Просто забанили тех, кто слишком многого хотел по IP. Это классическая схема, техническое решение давно известно: Fail2ban, который анализирует логи и при превышении определенного порога запросов в течение определенного времени происходит бан IP-адреса.

Большинство доморощенных хакеров отвалились, но были и те, кто пошел дальше.

Они стали заходить не с одного IP-адреса, а через наборы прокси — 1000, 10000, 100000 — и тянуть нас понемногу с каждого адреса.

Тогда пришлось решать проблему по-другому.



Как ограничить парсинг, не усложняя жизнь пользователям

Одно из важнейших свойств Руспрофиля — обновление.

Дело в том, что данные об организациях постоянно меняются.

Некоторые закрываются, некоторые открываются, меняются реквизиты, учредители и юридические адреса.

Тендеры, испытания и т.д. проводятся регулярно.

И ценность заключается в предоставлении только актуальных данных.

Масштаб обновления огромен.

За день собирается несколько десятков гигабайт. Затем они обрабатываются и сохраняются в более компактной форме в нашей базе данных.

А на следующий день все повторяется.

Поэтому сначала мы решили разрешить нам парситься, но.

с такой скоростью, что мы не успевали за обновлениями.

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

Как только скорость парсинга падает ниже скорости, с которой мы обновляем данные, для бизнеса (если кражу контента можно назвать бизнесом) это становится бессмысленным, потому что данные всегда будут устаревшими.

Для этого мы начали использовать поведенческий анализ.

У реального пользователя есть определенный профиль запросов (как и что он делает, как часто).

Конечно, активность сильно варьируется.

Иногда встречаются люди, которые работают в нескольких окнах и открывают десятки ссылок.

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

Парсеры сильно различаются как по количеству запросов, так и по своему профилю.

Обычно человек загружает через браузер весь сайт со всеми стилями, изображениями, динамическими элементами, JavaScript и всем остальным.

Бот извлекает только HTML с данными.

Это происходит довольно легко.

Но со временем мы заметили, что как только мы отключали пользователя по причине непринятия статики, боты начинали заходить из headless браузеров и скачивать все целиком, как настоящие пользователи.

Но это очень невыгодно, потому что.

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

Так что сам парсинг принципиально не изменился, но количество вложений увеличилось.

Соответственно, отвалилось большое количество самых примитивных парсеров.

Когда мы перешли на модель SaaS, наш трафик упал примерно на 12-15%, в основном за счет таких скриптов.

При меньшей нагрузке на сервер мы стали зарабатывать больше, потому что отвалились паразитные запросы.

У нас по-прежнему поток около 20-30 RPS (запросов в секунду) от различных парсеров.

Но 20-30 запросов - это мелочь, а когда их тысячи.

Все это время у нас шла классическая война копья и щита.

Мы придумываем что-то новое, разработчики парсеров реагируют и находят решения, как это обойти.

Придумываем более изощренный вариант отключения потоков, они заново обновляют алгоритм.

В конечном итоге мы пришли к тому, чтобы сделать их бизнес максимально убыточным.

Нас все еще можно парсить, но этот процесс настолько сложен, что никакую коммерчески жизнеспособную информацию невозможно получить от нас в разумные сроки.

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

Вряд ли он сможет сделать это за 1 день, пока данные не обновятся.



Дополнительные методы отслеживания и блокировки

Поведенческие факторы позволяют нам отсекать большинство ложных запросов.

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

Например, пользователь сильно меняет свое поведение: раньше он открывал максимум 10 страниц в день, а теперь внезапно открыл 50 в разных окнах.

Конечно, мы не блокируем его сразу.

Пользователь увидит Google CAPTCHA, которая имеет интересный режим теневой капчи.



Вечная борьба с парсерами, которую мы вроде бы выиграли

Роботу будет сложно Теневая капча проверит браузер пользователя на предмет его сходства с ботом.

Это происходит на стороне Google, у них для этого очень большие возможности.

Благодаря своей проникновенности и огромной базе знаний Google анализирует множество факторов, которые нам недоступны.

Грубо говоря, сервис оценивает, насколько он потенциально бот, и выставляет оценку от 0 до 1. Мы установили порог, при котором если посетитель считается «роботом» и его рейтинг меньше 0,4, то его забанят. Если оно выше, то пользователь продолжает работать до тех пор, пока не начнет нарушать с большей интенсивностью.

Помимо капчи Google Shadow, существует еще и явная капча.

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

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

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

Забавно, что парсеры тоже написали в поддержку и попросили их разбанить.

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



Вечная борьба с парсерами, которую мы вроде бы выиграли

Реальный пользователь, скорее всего, никогда не увидит этот экран.

Кроме того, мы применили обфускацию.

Анализ поведения парсеров показал, что люди запускают скрипты с сотен тысяч прокси и забывают о них на несколько дней, а то и недель.

Поэтому мы решили предоставить неверные данные.

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

Но пользователю с обычным браузером мы этого, конечно, не даем.

Живой пользователь в этот момент получает капчу и не может продолжать работу, пока не выполнит ее.

Бот, игнорирующий ввод кода, продолжит получать мусорные данные.

Это также необходимо для увеличения затрат на анализ.

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

Продать эти данные невозможно, время уже потеряно, потери как в деньгах, так и в репутации.



При сбое парсинга используется DDoS

Как таковой DDoS, в общем-то, никого не интересует. Это затратное мероприятие как по деньгам, так и по ресурсам.

Кроме того, атака в чистом виде не имеет смысла, особенно с Руспрофилем.

На других рынках существует практика, когда на пике продаж, например, перед Новым годом, сайты конкурентов подвергаются атакам.

Но пикового сезона у нас нет, и все наши конкуренты — крупные компании с хорошей репутацией, которые этого делать не будут. Это вдвойне невыгодно парсерам, поскольку они потеряют доступ к данным, которые пытаются загрузить.

Но иногда встречаются злопамятные «хакеры».

Перед Новым 2021 годом на сервер произошла DDoS-атака и мы точно не знаем, что ее вызвало.

Возможно, это была обида одного из парсеров, которому нам «заказали», а мы дали ему смешанные данные и он просто решил отомстить.

Причина тогда не имела особого значения.

Мы фильтровали десятки тысяч запросов в секунду и не смогли сразу это остановить.



Вечная борьба с парсерами, которую мы вроде бы выиграли

Как выглядела атака на одной из прокси-машин По большому счету, защиты от DDoS нет. Если у вас достаточно денег, вы можете успешно атаковать Google или Amazon. Что уж говорить о сайте довольно узконаправленного проекта, умещающегося в одной серверной стойке.

Здесь есть разные меры противодействия, начиная от фильтрации эшелонов прокси и заканчивая защитой на уровне провайдера.

Есть защита от DDoS Cloudflare или аналоги.

Но в первую очередь это стоит денег.

Во-вторых, они проксируют весь наш трафик через свои серверы, что довольно медленно.

И тут защита строится примерно так же, как у нас, но на большем количестве устройств.

Соответственно, они смогут выдержать огромный поток.

Получается, что в «мирное время» мы проигрываем дважды.

Первый раз — когда мы платим деньги.

Второй — когда мы проксируем весь трафик и теряем скорость.

И время ответа сайта является для нас очень важным фактором.

Мы стараемся поддерживать эту функцию на высоком уровне, поскольку у нас много клиентов со старыми компьютерами.

Несмотря на то, что время отклика у нас небольшое, с добавлением 100-150 миллисекунд от Cloudflare это уже существенный прирост. Поэтому мы решили не использовать такие средства перед серьезными атаками.

Но в тот Новый год, видимо, мы кого-то серьезно обидели.

Для атаки было использовано около 2,5 млн прокси.

Это были простые устройства, отправлявшие несколько запросов в секунду.

Причем прокси вводились постепенно.

Сначала 500 тысяч штук, потом 1 миллион, потом 1,5 миллиона и так до 2,5 миллионов на пике.

Но мы выстояли и не упали.

Да, иногда сайт тормозил, иногда начинал выдавать ошибку 503, но продолжал работать.

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

И даже при отлаженных системах всё приходилось оптимизировать и корректировать вручную на ходу.

Мы следили за реальными пользователями и старались максимально их не обижать; мы даже подготовили план Б по переходу на хостинговые решения или Cloudflare. К счастью, мы полежали минут 20-25, затем наши настройки заработали, и через час DDoS отфильтровался и в итоге прекратился.



Платный доступ как последняя защита.

или нет?

Мы долгое время оставались open source, несмотря на то, что различные наши конкуренты, например, СПАРК, Контур и другие, были платными.

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

Потом стало ясно, что пора меняться.

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

Поэтому сейчас нам не очень интересен парсинг, особенно с учетом других способов защиты.

Подавляющее большинство скрипткидди не хотят вкладывать ни рубля, а чтобы наскрести сейчас, нужно оплатить подписку.

Мы отслеживаем пользователей, сессии, и если система замечает разные устройства и IP для одного аккаунта, то пользователь просто выходит из системы.

То есть теперь вам нужно вкладывать больше денег для кражи контента.

И это, конечно, невыгодно.



Подведение итогов

Сейчас у нас хорошая, но не идеальная система.

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

Но, как говорится, важно соотношение цена/качество.

Мы способны справиться с нагрузкой в 2,5 миллиона прокси и сделали использование сайта максимально комфортным для живого пользователя.

Мы можем быстро отрезать робота, если точно определим, что это он (в среднем за 6 секунд).

Будут ли они продолжать нас разбирать? Удивительно, но да.

Но сейчас халявщики вынуждены платить и приносить нам прибыль, а если они делают это как-то нечестно, то вместо данных получают только мусор.

Проблема парсинга может затронуть абсолютно любой сайт, имеющий ценный контент. От этого страдают СМИ, различные базы данных и энциклопедии.

Как бороться с ворами – решение владельца контента.

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

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

Что касается DDoS, то новогоднюю нагрузку система выдержала неплохо, но полностью защититься от этого, к сожалению, невозможно.

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

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

В опросе могут участвовать только зарегистрированные пользователи.

Войти , Пожалуйста.

На какой ты стороне? 45,68% Разобраны сайты 185 6,42% Защищены от парсинга 26 28,4% Оба 115 19,51% Хочу узнать результат/Другое/В комментариях проголосовало 79 405 пользователей.

90 пользователей воздержались.

Теги: #информационная безопасность #ddos #программирование #ddos защита #ddos защита #данные #Открытые данные #парсинг #парсер #парсеры #парсинг контента #скрапинг #paywall

Вместе с данным постом часто просматривают: