javascript

No place to hide — как сервисы агрессивного маркетинга преследуют вас

  • вторник, 20 июня 2017 г. в 03:14:13
https://habrahabr.ru/post/331222/
  • Реверс-инжиниринг
  • JavaScript


Интернет уже довольно давно стал некоторым подобием Дикого Запада: каждый отвечает сам за себя, а некоторые вещи из сумеречных областей морали, вроде сбора персональных данных, регулируются только тогда, когда это кому-то выгодно (да-да, мы все знаем, какие законы стоит вспомнить тут).

Давайте разберём это на примере одного сервиса, который для меня оказался абсолютно неизвестной областью тьмы, но существует уже с 2015-го года. Его название в статье упоминать не будем, но подобное можно без проблем нагуглить.

image

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

В чём же суть?


Компании вроде Google и Яндекс довольно строго подходят к хранению персональных данных, позволяющие однозначно идентифицировать пользователя в сети (а именно, Google запрещает передачу подобных данных через свои сервисы Google Analytics и Google Tag Manager. Невыполнение этих правил ведёт к предупреждению или блокировке аккаунтов нарушителей), однако это справедливо не для всех. Есть некоторые общепринятые «правила» хранения данных, но подобно пиратскому кодексу — это не строгие законы, а лишь набор рекомендаций. Все мы знаем, что сталкинг — это плохо, но когда за подобные вещи неплохо платят, то у некоторых возникает повод если не сразу заняться этим, то как минимум немного призадуматься.

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

image

Окей, есть отклонение от стандартного набора из кодов Analytics и Метрики. Есть и подозреваемый!

Следующим логичным шагом будет поискать по исходникам сочетание «vk», которым могли бы обозначить участок кода, отвечающий за идентификацию пользователя на сайте. Сделаем это в файле «pixel/index.php?img=»:

image

Итак, видим, что указана некоторая ссылка на приложение VK. Будет логично предположить, что с его помощью как раз и происходит опознание профиля посетителя, если, разумеется, он был залогинен. Адрес приложения передаётся в функцию vkPr(link), её код приведён ниже:

    function vkPr(link)
    {
        var vkprimg = (window.Image ? (new Image()) : document.createElement('img'));
        vkprimg.onload = function()
        {
            setCookiePr('XFZDGF1FQEpQVV5cSh1DRw==', link);
        }
        vkprimg.onerror = function()
        {
        	getOther();
        }
        vkprimg.src = 'https://vk.com/login?u=2&to=aW1hZ2VzL2ljb25zL2hlYWRfaWNvbnMucG5n';
    }


Тут видим, что происходит установка пикселя и куки. Пиксель при этом логинится в аккаунт посетителя, а на этом этапе должен происходить деанон пользователя. Далее, исследуем файл из папки callback и найдём в нём обращение к vk_id и установку кук со страшными префиксами «hunter». Набор данных весьма богат: от номера телефона до email и идентификатора VK.

Охота началась:

image

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

image

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

image

В нём указана страница разработчика приложения и было бы интересно перейти на неё тоже.

image

Тут мы видим пустой аккаунт, который, очевидно, создан как сервисный и заполнен ровно настолько, чтобы не привлекать внимания. Последний вход был совершён в 21:17, что заставляет задуматься об очень долгом рабочем дне в компании, создавшей это приложение.

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

image

Интересно, что изначально были явно указаны варианты диалогов с ботом, но позже их удалили Вот вырезка из объекта, с вариантами разговора:

{
"exitWeTreasure": {
"head-name": "— #{name}, подождите уходить,",
"head": "— Подождите уходить,",
"text-free": "для вас есть персональное предложение! Давайте мы перезвоним и обсудим цену для вас?",
"text_worktime": "для вас есть персональное предложение! Давайте через <br/>#{countdown} ((секунду|секунды|секунд)):countdown обсудим цену для вас?",
"text_off": "для вас есть персональное предложение! Уточните, когда вам перезвонить.",
"action_callLater": "Выбрать время звонка",
"action_call": "ОК, созвонимся!",
"action_text": "Написать письмо"
},
"didCallSucceed": {
"head-name": "— #{name},",
"head": "— Скажите,",
"text-name": "скажите, вам удалось начать разговор с менеджером?",
"text": "вам удалось начать разговор с менеджером?",
"action_yes": "Да",
"action_no": "Нет"
}
}


Выглядит знакомо, не так ли? Особенно мило выглядит часть кода, которая отвечает за общение с детьми, так как им предлагают позвонить родителям (эти выводы сделаны исходя из названий методов, к которым обращаются).

image

На этом часть, посвящённая непосредственно коду заканчивается. Далее, просто поищем в Гугле URL, с которого подгружались js-файлы.

Кто же меня преследует?


Это было просто и первый же результат приводит на сервис, который прямо сообщает о том, что занимается поиском аккаунтов Вк тех, кто посетил сайт:

image

Тут на оригинальном изображении (пришлось замазать названия этих сервисов, чтобы никому не показалось, что это такой оригинальный способ продвижения) уже видим знакомое сочетание слов с наличием vk, а в заголовке название компании-разработчика охотника за головами трекера.
Дальнейшие поиски привели к тому, что выяснилось, что эта компания существует с 2015-го года и предоставляет услуги множеству клиентов, среди которых есть и весьма известные с хорошей репутацией: от банков, до сотовых операторов. За свою долгую историю интернет-сёрфинга в неанонимном режиме, мне ни разу не писали боты с предложениями ознакомиться с каталогом товаров, так что это выглядит довольно сомнительно, но я могу и ошибаться.

Что же дальше?


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

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

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

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

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

То есть работа с данными осуществляется согласно правилам размещения приложений VK.
В этих же правилах в Пункте 2 говорится:
2. Работа с данными
2.1. Запрещается собирать и хранить пользовательские данные, включая идентификатор пользователя (User ID), в целях, не связанных с функционированием приложения. Запрашиваемые данные должны использоваться только в контексте приложения.
2.2. У приложений, размещенных на vk.com, должна быть политика конфиденциальности. Если ее нет, используется типовая политика конфиденциальности ВКонтакте.
2.3. Запрещается передавать любые пользовательские данные, автоматизированно полученные через API (включая User ID), сторонним сервисам (например, рекламным) как напрямую, так и через посредников.
2.4. Запрещается использовать пользовательские данные в любых рекламных объявлениях.

Отсюда видно, что нарушается пункты 2.3 и 2.4, которые сообщают о том, что пользовательские данные нельзя передавать третьим лицам. На самом деле, это очень напоминает историю с FindFace, но там есть нюанс, что FindFace не предназначен (формально) для рекламы и передачи ваших данных кому-либо другому ради прибыли. Здесь же ситуация в корне отличается.

Вместо завершения


В целом, сбор данных о пользователях сайтов не является чем-то плохим. Даже если не анонимно, то можно просто просить спросить разрешение у пользователя, можно ли его деанонимизировать. Конечно, разумно было бы просто предложить всем путешествовать по сети в анонимном режиме и не испытывать подобных проблем, но это не будет решением проблемы. Анонимные же данные позволяют получить представление о своей аудитории и более эффективно построить свой бизнес и его продвижение. И самое весёлое в этой истории то, что был явный промах мимо своей целевой аудитории, т.к. обычные студенты 20-25 лет навряд ли располагают возможностями для покупки яхты.

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

image

На этом я закончу свой рассказ о том, как можно найти многих из нас на просторах сети без нашего же ведома. Stay safe, stay strong.