Рекомендательная система Retail Rocket: как мы противостояли хакерской атаке конкурента
Генеральный директор Retail Rocket Николай Хлебинский о развитии конфликта с REES46 и мерах, которые предприняли разработчики системы.
Хорошо спланированную хакерскую атаку невероятно сложно отразить, а в некоторых случаях даже непросто заметить, что компания находится под ударом. Собрать доказательства и тем более объяснить идею человеку без глубоких знаний в ИТ (например, маркетологу или юристу) — настоящий вызов.
Кроме того, злоумышленник всегда находится в более выигрышном положении: вести атаку дешевле, чем защищаться от нее, а замести следы и уйти безнаказанным при серьезном подходе более чем реально.
Немного предыстории
В марте 2017 года один из наших конкурентов вышел на рынок с очень агрессивным предложением: заплатить 100 тысяч рублей любому интернет-магазину, работающему с Retail Rocket, если по итогам сравнения наших рекомендательных систем платформа конкурента покажет худший результат.
За пять лет существования Retail Rocket нас сравнивали практически со всеми рекомендательными системами, которые есть в России и в мире, и мы всегда показывали классные результаты, но деньги нашим клиентам до этого никто не предлагал.
Предложение сопровождалось активной PR-кампанией в социальных сетях и СМИ, а сотрудники конкурента не упускали шанса вставить иронические комментарии в публичных обсуждениях этого предложения.
Такой тест не остался без внимания, и интернет-магазин товаров для детей «Дочки&Сыночки» начал сравнение трех рекомендательных систем: Retail Rocket, REES46 и внутренней системы магазина. Результаты теста нас удивили: платформа Retail Rocket демонстрировала низкие показатели, и настройки интеграции, тюнинг алгоритмов, оптимизация выдачи рекомендаций и прочее не приводили к результату.
Испробовав буквально всё, мы начали искать причины за пределами контура нашей системы и в результате обнаружили очень хитро организованную атаку на A/B-тест рекомендательных систем: тщательно скрытый фрагмент кода, который присылает в браузер пользователя, который вот-вот совершит покупку, изображение в формате PNG.
Изображение побайтово расшифровывается в текст, который скрыто исполняется как JavaScript-код, приписывающий лояльную аудиторию платформе REES46, тем самым увеличивая конверсию этой системы и снижая результаты остальных.
Кто-то потратил немало сил и проявил отличную изобретательность, пока пришел к такой «многоходовочке». Процесс исследования и выявления всех деталей этой атаки (подробно описанный в нашем инженерном блоге на «Хабрахабре») занял несколько недель у команды из восьми человек и, по самым скромным оценкам, стоил нашей компании около 1,5 миллионов рублей.
С одной стороны, мы гордимся результатами (думаю, немногие в нашей нише имеет достаточно экспертизы, чтобы повторить что-то подобное), с другой — всё это время и ресурсы мы могли бы вложить в развитие нашей платформы и проектов наших клиентов.
Отражение атаки
Когда сомнений в атаке не осталось, мы осознали, что перед нами стоит крайне сложная задача по её отражению. Во-первых, её действительно технически сложно воспроизвести, а значит, сложно доказать сам факт её наличия, и, во-вторых, в таких манипуляциях можно довольно легко и быстро замести следы.
Порядок наших действий был таким:
- Консультация с тремя юристами, проработка плана юридической защиты. Первый и самый логичный шаг. К сожалению, пришлось признать, что с точки зрения российского законодательства мы не являемся пострадавшими, и в нашем случае сделать практически ничего нельзя. В Евросоюзе или США, скорее всего, кто-то бы за такое отправился в тюрьму. Тем не менее, мы считаем такие методы конкуренции недопустимыми, это наносит ущерб всему сообществу и подрывает доверие к сложившимся практикам работы, поэтому мы подаем жалобу о недобросовестной конкуренции в ФАС. Очень важно создать прецедент, чтобы не допустить подобной ситуации в будущем.
- Встреча с командой интернет-магазина. Мы провели встречу с техническими специалистами и маркетологами магазина, вместе прошли по всем этапам расследования и объяснили, как воспроизвести каждый наш шаг. Очень важно было сделать это до того, как мы опубликуем какие-либо материалы, чтобы все смогли «вживую» увидеть, что происходит.
- Сохранение доказательств атаки на независимых внешних сервисах. Вредоносный код и другие следы атаки при обнаружении, как правило, сразу же удаляются. Скриншоты помогут не сильно — их слишком легко подделать и скомпрометировать, поэтому мы использовали сторонние сервисы (Archive.org и Runscope.com), которые по запросу любого желающего самостоятельно сохраняют все детали. Этим сервисам доверяет ИТ-сообщество, и с их помощью мы гарантировали валидность доказательств.
- Звонки ИТ-специалистам других компаний нашей отрасли. В технических аспектах этой истории разобраться непросто, поэтому мы решили привлечь специалистов других компаний из нашей отрасли (как партнеров, так и прямых конкурентов, чтобы ни у кого не было сомнения в нашей объективности) и провели ряд звонков с Flocktory, DriveBack, Diginetica, MindBox, AdSpire и другими, в процессе которых показали, как воспроизводится атака.
- Публикация расследования в инженерном блоге на «Хабрахабре». Мы специально заложили в материал максимальное количество технических деталей: нам было важно, что ИТ-сообщество как следует разберется во всем и поддержит нас. Реакция превзошла наши ожидания: публикация быстро стала самой популярной за сутки, а затем и за неделю. Рейтинг публикации превышает суммарный рейтинг всех остальных публикаций в инженерном блоге Retail Rocket — это отличный индикатор того, что у «технарей» не осталось сомнений в нашей правоте.
Разоблачение
Конечно же, мы не ожидали, что после разоблачения конкурент выйдет с поднятыми руками и напишет чистосердечное признание. Вот как развивались события в день публикации расследования:
- В 12:08 мы публикуем материал и размещаем его в соцсетях. Он начинает очень быстро распространяться. Такие истории всплывают нечасто, поэтому вскоре об этом узнала почти вся отрасль.
- Через восемь минут после публикации REES46 удаляет из публичного доступа часть функциональности, манипулирующей тестом (то самое изображение в формате PNG).
- Еще через несколько часов REES46 публикует официальный ответ, смысл которого сводится к тому, что часть вредоносного кода, на который мы ссылаемся в расследовании, ничего плохого не делает (цитата: «приведенный в пример кусок кода из V3 отвечает за отслеживание смены куки по разным городам»). А факт того, что этот код зашифрован и максимально скрыт от всех участников теста, объясняется тем, что «JavaScript вообще подозрительный язык». А ответ на то, что изображение, из которого побайтово извлекался код перемещения пользователей в сегмент REES46, стал недоступен после публикации — «да, недоступен, и что теперь?».
- К диалогу подключаются представители компаний, которые наблюдали за атакой со стороны до того, как мы опубликовали материал с расследованием.
Контрнаступление REES46
Когда становится понятно, что просто отойти от этой истории не выйдет, REES46 меняет позицию на контратакующую: теперь они представляют Retail Rocket как виновников перемещения пользователей между сегментами, а подозрительный код, созданный в начале мая (как раз когда мы увидели первые признаки манипуляции и начали отслеживать смены сегментов, этот же период указан в материалах расследования), представляют инструментом корректировки ошибки.
Однако этот ответ не выдерживает никакой критики. Во-первых, код Retail Rocket никак не влияет на сегментацию аудитории, и это станет очевидно любому, кто внимательно посмотрит на код сегментации (ветка на «Хабре», где идет обсуждение по этому вопросу).
Во-вторых, вредоносный код был добавлен не в начале мая, как заявляет REES46, а гораздо раньше: мы нашли его в предыдущей версии библиотеки REES46 («v2»), которую интернет-магазин использовал за несколько месяцев до описываемых событий. То есть перемещение лояльных пользователей происходило в течение многих месяцев.
В-третьих, если бы код действительно «восстанавливал» тех, у кого стерлись куки или сработал AdBlock, то количество пользователей, перемещаемых в сегмент REES46, примерно совпадало бы с количеством пользователей, попадающих в другие сегменты, но это не так: по данным Google Analytics, в сторону REES46 уходит в десятки раз больше трафика.
Если бы это было случайностью, конверсия перемещаемых пользователей не была бы в разы выше средней конверсии по сайту, а примерно совпадала бы с ней. Здесь очевидна манипуляция, которую отмечают и в профессиональном сообществе:
Похоже, что в REES46 просто не знали про фичу «Последовательности» в инструменте сегментации Google Analytics — она позволяет отследить изменение параметров пользователя, а не только последнее записанное значение.
И это не говоря о том, что код перемещения пользователей написан так, чтобы он не работал для пользователей из Москвы. Почему их не нужно было «возвращать», осталось загадкой. Уж не потому ли, что в Москве находились ИТ-специалисты всех участников теста?
Больше всего удивил сам факт использования скрытого перемещения пользователей в свою сторону: выглядит это, мягко говоря, нелогично.
Реакция профессионального сообщества
В итоге ни у кого не осталось сомнений в том, что на самом деле происходило, а попытки манипуляции трактовки кода были восприняты аудиторией еще более негативно.
Выводы
Проводить сравнительное тестирование конкурирующих сервисов можно только при полной уверенности в порядочности всех сторон. В b2b-сегменте многое строится на доверии, и репутация — один из главных активов бизнеса. Репутационную ошибку можно совершить только один раз и, без сомнения, об этой ошибке представители интернет-отрасли узнают достаточно быстро.
В подобных ситуациях обязательно нужно вести активную работу в правовом поле и сделать всё, чтобы виновные понесли наказание, но в нашем случае это оказалось практически невозможным.
Критически важно привлекать сторонних экспертов, чтобы они могли дать независимую оценку ситуации, потому как манипулирование техническими деталями может ввести в заблуждение тех, кто не погружен в веб-разработку достаточно глубоко, и добраться до правды будет очень сложно.
За пять лет работы мы впервые встречаемся с такой ситуацией и очень надеемся, что потраченные на расследования ресурсы не пропадут зря, а этот случай станет показательным и предостережет другие компании от подобных методов конкуренции — это не только не способствует развитию бизнеса и технологий, но вредит отрасли в целом.
Примечание vc.ru: генеральный директор центра управления конверсией REES46 Михаил Кечинов прислал в редакцию статью со своим взглядом на скандал вокруг тестирования рекомендательных систем.
© vc.ru