Как обеспечивается безопасность поиска в Яндексе

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

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

Инженеры Яндекса создали свое прекрасное творение – поиск Яндекса. Создали его с благородной целью - помогать людям решать их задачи. Но в 2004-2006 гг пришли соседские мальчишки-дорвейщики и попытались уничтожить это прекрасное творение. Наши ребята не стали обижаться, а сразу создали антиспам. Так начинался Отдел безопасного поиска Яндекса.

На сегодняшний день антиспам по-прежнему является одной из основных задач, которую решает наш отдел. Мы детектируем и снимаем с выдачи разнообразные дорвеи, клоакинг, всевозможные сетки псевдосайтов, мы защищаем алгоритмы ранжирования от компрометации – здесь речь идет о поисковой оптимизации: находим так называемые портянки (тексты, набитые ключевыми словами), определяем SEO-ссылки, которые закупаются с целью имитации авторитетности сайта-акцептора. Детектируем так называемые мотивированные клики (всевозможные накрутки ПФ) и очищаем сигналы, которые поступают к ранжированию, от всего этого. Кроме того, мы делаем проект Антиробот, который защищает доступность Яндекса, защищает от всевозможных DDos’ов и парсинга контента.

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

В первую очередь мы, конечно, находим вирусы на сайтах. У нас есть собственный антивирусный проект, который находит зараженные сайты и предупреждает пользователей об этом. Есть группа проектов, которая занимается интернет-мошенничеством (фишинг, кликджекинг, GSM-подписки, SMS-фрод и т.д.). Также есть группа «нежелательного контента», которая делает так, чтобы в выдаче было как можно меньше сайтов с желтой рекламой, кликандерами и другим подобным контентом. Ну и наконец, мы также занимаемся фильтрацией так называемого неуместного контента (порно и разной «жести» - контента, который может вызывать острую негативную реакцию пользователя, к которой тот не готов). Разница между нежелательным контентом и неуместным заключается в том, что в зависимости от запроса, неуместный контент может быть очень даже уместным, так например, на запрос [порно], порно это будет именно то, что поиск должен показать, а в других ситуациях подобный контент будет попросту неуместен. Нежелательный контент же является нежелательным всегда.

GSM-подписки

Основной трюк здесь состоит в том, чтобы всеми правдами и неправдами подписать пользователя мобильного интернета на некоторую «услугу». Происходит это чаще всего так:

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

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

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

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

Вот примерно так работают все антимошеннические проекты Отдела безопасного поиска Яндекса.

Неуместный контент

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

Задача вроде кажется очень простой – мы разделили запросы на два класса, разделили на два класса контент, и в зависимости от режима поиска показываем соответствующий контент. На самом деле все не так, и трудности начинаются уже при попытке ответить на вопрос: «А что же такое порнозапрос?». Если учитывать всевозможные серые зоны, то ответ на этот вопрос оказывается вовсе не таким простым. Некоторые люди говорят, что порнозапрос – это запрос по которому есть порно (Все знают про 34 правило интернета? О нем ниже). Что же касается классификации документа, то здесь тоже есть свои трудности. Документ может содержать картинки, видео, текст, на нем может быть какая-то реклама, и каждый из этих сигналов может содержать порноконтент.

34-е правило гласит, что если нечто существует, то про это уже есть порно. Мы с ребятами решили проверить этот тезис, и подняли такую бету (поиск, который недоступен пользователям, а доступен аналитикам), которая ищет исключительно по порнодокументам. Далее мы произвольно надергали какое-то количество запросов из общего потока обращений к Яндексу и сняли по ним SERP’ы. Оказалось, что только 8,7% SERP’ов были пустыми, поэтому у нас есть дополненная редакция 34-го правила интернета:

про 91,3% того, что существует, уже есть порно.

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

Чтобы решать эту задачу, группа классификации неуместного контента использует огромное количество всевозможных инструментов, технологий и библиотек – среди них и Vowpal wabbit, и Word2vec, и собственные технологии Яндекса, такие как MatrixNet, DaNet, Ethos.

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

Также интересный «хак» применяется в видео. Если пользователь находится внутри порносесси и, допустим, первый ролик – это порноролик, и третий ролик – тоже порноролик, то скорее всего второй ролик тоже был не про котят. И мы можем это использовать.

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

Как же все эти инструменты и хаки нам помогают:

У нас есть метрика Adult leakage – мы берем некоторый семпл запросов, удаляем из него то, что является порнозапросами, оставляем порядка 10 тыс. запросов и отдаем их на разметку асессорам. Асессоры по этим запросам размечают топ, и потом мы количество порнодокументов делим на количество всех документов, которые были в разметке. Значение этой метрики, приведенное на слайде, говорит нам о том, что лишь 85 документов из 100 тыс. является порнодокументами. Казалось бы – прекрасный результат. Но нет предела совершенству, как говорится, и кроме того, не нужно забывать про существование так называемой серой зоны, где и возникает у поискв большое количество проблем.

Теперь из мира медитативного анализа данных мы переместимся в стремительный рантайм и поговорим про проект

Антиробот

Зачем Яндексу нужен Антиробот? Дело в том, что до 30% запросов поступающих к поиску, задаются программами. Это не просто высокая нагрузка, это неконтролируемая нагрузка на поиск. Ничто не мешает роботу в любой момент удвоить, утроить количество своих запросов или вообще умножить его на n. Кроме того происходят попытки реверс-инжиниринга поисковых алгоритмов, многие SEO-сообщества еще не верят в то, что алгоритмы настолько сложные, что парсинг любого количества запросов вряд ли поможет понять, как это на самом деле работает. Ну и наконец, для сервисов, предоставляющих контент, например, Маркета, парсинг контента является нежелательным явлением. Поэтому мы и делаем Антиробот.

Этот проект – самый настоящий High Load, 400-500 k RPS – это абсолютно нормальная дневная нагрузка, он очень быстрый – 98% запросов обрабатывается всего за 1 мс, его составляют десятки машин.

Как это работает:

Первое, что встречает запрос пользователя, это так называемый «балансер», который балансирует нагрузку на все бэкэнды. Но прежде, чем запрос попадает на сервис, он попадает в Антиробот на проверку. Если запрос был от человека, Антиробот отвечает балансеру – «все отлично, пропускай» - и только тогда запрос попадает уже на сервис. Если Антиробот считает, что запрос роботный, он возвращает капчу и запрос до сервиса просто не доходит.

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

Антиробот Яндекса работает на MatrixNet-формуле, он машинно обучен, у нас нет ни одной эвристики «если …, то робот». Запрос, прилетая в этот процессор, разбивается на строку факторов, там более 4 тыс. факторов и при таком их количестве у нас автоматический сбор и разметка выборок, потому что нам нужны большие выборки. Кроме того, Антиробот поддерживает мультиформульность, а именно – пользователь, который является роботом на поиске, не всегда является роботом на Маркете, поэтому к пользователям этих двух сервисов должны применяться разные формулы, так как там разные паттерны поведения пользователей и роботов.

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

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

В конце доклада Екатерина привела несколько фактов, которые «всплыли» во время подготовки этого доклада и которыми просто нельзя не поделиться с общественностью:

  • Самый популярный объект в желтой рекламе – пищевая сода. Секрет успеха – она у всех есть дома, она непонятно для чего – вроде бы и что-то про лекарства, а вроде бы и про кухню, ею можно что-то мыть. Зачастую на картинках даже не обозначается проблема, которую эта сода решает, там просто изображена пачка, а пользователь уже сам додумывает проблему. Главное, что у него эта сода есть, а значит, надо кликнуть и посмотреть, что же с ней можно полезного сделать.
  • Чемпионом по умиранию в 2016 году, по мнению желтой рекламы, был Олег Газманов. В том году он покидал нас чаще других. Но сейчас, совершенно очевидно, что он теряет свои позиции, потому что лидерство захватил Леонид Якубович. Если с Олегом Газмановым чаще всего случались автомобильные катастрофы, то про Леонида Якубовича просто известно, что страна скорбит.
  • Самый сложный серый порнозапрос – [ролики для взрослых]. Что на него показывать пользователю, колдунщик видео или спорттовары?
Текст подготовлен по материалам мероприятия «Как устроен поиск Яндекса»
preview Быстрое руководство по настройке AMP на WordPress

Быстрое руководство по настройке AMP на WordPress

В статье описаны семь простых шагов, следуя которым можно быстро и легко настроить AMP на WordPress-сайте
preview Как измерять эффективность с помощью специальных параметров в Google Analytics

Как измерять эффективность с помощью специальных параметров в Google Analytics

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

Ресурсы для внешних ссылок, которые вы, возможно, еще не используете

Несмотря на то, что влияние пользовательских факторов увеличивается, бэклинки все еще удерживают позиции основного фактора ранжирования
preview Оптимизация сайтов на AngularJS для краулеров Google

Оптимизация сайтов на AngularJS для краулеров Google

Заниматься поисковой оптимизацией SPA-сайтов непросто, но возможно. Автор статьи делиться собственной SEO-методикой для одностраничных приложений на AngularJS
preview Тонкости, делающие контекстную рекламу эффективной

Тонкости, делающие контекстную рекламу эффективной

Профессионализм приходит через 10 000 часов занятий своим делом. Этот закон работает и в контекстной рекламе
preview Индекс скорости – что это такое?

Индекс скорости – что это такое?

Индекс скорости (speed index) в последнее время вызывает большой интерес. Но что он из себя представляет и как вычисляется