Интернет 2016, не спрятаться, не скрыться. Фингерпринты, стораджи, трекеры, html5 и т.д.
// 22 марта 2016 // Безопасность
На заре становления интернета журнал «Нью-Йоркер» изобразил культовую карикатуру на пса за компьютером. Подпись гласила – «В интернете никто не знает, что ты собака». Но спустя 20 лет картина перевернулась с ног на голову. Сегодня любая собака может узнать о Вас больше, чем Вы сами.Всемирная сеть плохо совместима с тайнами личной жизни и тем более хранением секретов. О каждом вашем действии на сайте знает как минимум пользователь и сервер, а сегодня, во время популярности сторонних виджетов и плагинов, рекламных сетей, на вас смотрит на странице каждого второго сайта дюжина посторонних глаз.
Чтобы убедиться в моих словах, достаточно открыть инструменты разработчика, встроенные в популярные браузеры, такие как Chrome и Firefox. Допустим, заходим на сайт авто.ру и видим что браузер обращается к более чем 150 документам, половина из которых не имеют никакого отношения к файлам на сервере этого сайта. Заместо этого они адресуют пользователя к 10ку доменных имен, располагающихся в разных частях света, и именно сторонние файлы съедают большую часть трафика.
Что это за домены спросишь ты? Рекламные сети, платёжный сервисы, несколько социальных сетей, облака и пара виджетов, аля JivoSait, Pluso. Похожий набор данных имеется на каждом коммерческом сайте. Но суть дела в том, что твои визиты на сайт авто.ру знают ещё и владельцы этих 10 доменных имён.
Ты видишь баннер на сайте? Он загружен с крупнейшей рекламной сети принадлежащей Google или Яндекс, с его помощью поисковик узнает, что ты был на том или ином сайте. Аналогичные данные можно посмотреть в Google Analytics или в AdSense, а также в случае перехода к шрифтам Google Fronts. Рано или поздно хоть какая-то зацепка на тебя найдётся.
Это делается, чтобы рекламные системы смогли с точностью определять твой возраст, интересы, семейное положение, достаток, пол и даже состояние здоровья. Более точный таргетинг для рекламодателей дает незначительное увеличение конверсии, что приносит миллиарды долларов дополнительной прибыли. За тобой наблюдает невидимое око и это факт.
К сожалению, от него никуда не уйти, и тут лучше разобраться в другом вопросе: Как они это делают? И есть ли у тебя шансы скрыть себя?
Методы идентификации и противодействия.
Что бы следить за действиями человека в сети, надо присвоить ему идентификатор. Например, классика жанра – наши любимые печеньки (куки). О cookie’зах знают все, но никто не торопиться ставить галочку в браузере “отключить прием и хранение печенек”, да это болезненно, но +5% в пользу победы над слежкой дают.
Иногда браузеры стараются нас защитить сами, и блокируют cookie предустановленные третьей стороной, допустим, сайтом виджета. Увы, такие попытку обезопасить нас обходятся путём прогона пользователя на сервер третьей стороны и обратно – и кука уже родная. Но этот способ не совсем долгосрочный, в плане пометки пользователя.
Есть методы привязки id и более изощренные, некоторых из них я уже описывал в более ранних статьях, например библиотека Evercookie. Посмотрим, что новенького появилось ещё.
В браузере очень много недокументированных мест, где можно скрыть идентификационные данные, нужна лишь некоторая смекалка. Например, через DOM свойство window.name можно передать до 2 мб. информации, которая в дальнейшем доступна разным доменам. Минус этого метода идентификации – данные пропадают после завершения сессии.
В недавнем прошлом в обиход вошло хранение идентификатора при помощи Local Shared Objects, которые даёт Flash. LSO стал популярен благодаря сложности удаления и доступности из всех браузеров на ПК. Что на порядок круче, нежели различные для разных браузеров и легко удаляемые куки. Долгое время разработчики Adobe Flash не осознавали вреда LSO, но осознав добавили возможность их очищать, только кто этим пользуется? ))
Аналогичные LSO возможности даёт HTML5 Local Storage. Хранилище данных встроенное в браузер, очищается во время стирания куков, для разных браузеров разное. Тем не менее, специалисты заявляют, что HTML5 Local Storage используется некоторыми сайтами для хранения id пользователей.
Из экзотики – браузерные БД IndexedDB, Web SQL Database, новинки в среде хранилищ идентификаторов, но их использование уже замечено на некоторых сайтах.
А недавно, умельцы из Kissmetrics умудрились спрятать идентификаторы вглубь HTTP запросов, данные записали в поля Etag (хеш) и Last-Modified (дата последнего обновления) использующиеся для проверки кеширования версии документа. Смысл полей в сообщении браузеру о необходимости обновить страницу или нет. Он спрашивает у сервера “есть ли версия новее?”, отправляя ему хеш, по которому мы и можем идентифицировать ранее приходившего пользователя.
Если в Etag поместить идентификатор человека, то он будет храниться там, пока цела страница браузера. Данные смогут пережить удаление кук, отключенный JS, очищенные LSO, HTML5 LS. Чтобы полностью избавиться от Etag пользователю необходимо очистить кэш и историю посещений.
Кэш браузера – находка для шпиона, опознавательную метку можно непросто приложить к документу, но и вставлять в него.
Интересный способ сохранения id посетителя в постоянных редиректах по статусу 301. Сервер выдаёт такой статус при изменении адреса файла, а браузер запоминает новый урл, минуя в дальнейшем старый. Для эксплуатации в документ вставляют ссылку, ведущую к невидимой картинке, скрипту, ссылке. Если в запросе не обнаруживается параметр с id юзера, сервер возвращает 301 редирект на тот же адрес, но уже с id. Этот способ интересен тем, что с его помощью возможен кросдоменный обмен id.
Ещё одна метода – использование сохраненного совета от сервера поднимать https соединение с определенными документами – использование кеша HTTP Strict Transport Security (HSTS). Как и в методе выше, этот совет хранится в кеше и используется браузером “по памяти”, что выдает ранее приходившего пользователя.
Ноу-хау идентификации – фингерпритнинг.
Свежак в мире идентификации без вашего ведома 🙂 Фингерпринтинг! Определяет пользователя не по специальным меткам и жучкам, а по уникальным характеристикам браузера, устройства и системы. Поскольку такой метод не нуждается в хранении данные, его очень трудно избежать и легко использовать. Если cookie действуют в поле одного доменного имени, то уникальные особенности системы сохраняются при посещении всех сайтов. Это сильно облегчает процесс отслеживания пользователя, и хуже всего, что его никак нельзя отключить.
Самые простые методы фингерпринтинг – это использование уникального IP-адреса, версии браузера и системы, часового пояса, разрешения экрана, системных языков и списка шрифтов. При помощи технологии Flash к этому списку добавляются сведения об использовании мышки, клавиатуры, мультитача, камере и микрофоне. Незначительные изменения не особо повлияют на определение пользователя, ты можешь сменить монитор, поменять устройство или переехать в другую страну, но если этого не сделать единовременно, тогда вероятность определения останется на прежнем уровне.
Например, компания AddThis проводила эксперименты по особенностям отображения тех или иных шрифтов у пользователя. Для этого необходимо создать невидимый canvas, на котором отображается надпись. Хеш очерёдности отображения цвета каждого пикселя становиться идентификатором. На то, как будет отображаться шрифт на экране компьютера, влияет множество факторов, на которые трудно повлиять, а это отличное средство для отслеживания.
Ещё один метод – это анализ истории посещений. Эксперты показали, что имея историю посещений из 500 и более сайтов, можно с точностью до 70% определить пользователя, причём, если в его истории, есть случаи захода в социальные сети, тогда всё становиться намного проще. Чтобы определить посещение того или иного сайта, можно загрузить документ с нужного хостинга и по кешу понять, посещал пользователь его или нет. Также можно сослаться на ссылки посещённых сайтов отображающихся иным цветом. Есть впрочем, и более заурядный способ, а именно замаскировать сайты под капчу, тогда пользователь сам выдаст нужную информацию.
Ты спросишь, как замаскировать под капчу? За счёт отличительного оформления ссылок посещённых сайтов. Можно просить пользователя ввести текст, который он наблюдает, а благодаря CSS ссылки на посещенные сайты он не будет видеть, а не посещенные увидит и введет, так по пропущенным, например словосочетаниям можно понять, на каких сайтах он уже был.
Защищаемся.
Чтобы предотвратить отслеживания необходимо «избавиться» от Flash и его исчезновение сразу решит проблему утечки данных через LSO и некоторых параметров для фингерпринтинга. Флеш давно не является незаменимым, килл.
Безболезненно отключить HTML5 Local Storage практически невозможно, т.к. надо отказаться от кук и JS. Но тогда половина веба сломается :-), всё равно, что перерезать провода.
Тягаться с методами, использующими кеш – это заранее проигранное дело! От Etag и Last-Modified можно уйти на прокси переписывающим HTTP запросы. На этом собственно всё. От кеша, редиректа и HSTS не скрыться, их отсутствие делает беззащитным браузер от MITM атак. Одно из наиболее очевидных решений – это частое удаление кеша, я чищу кеши на автомате.
С фингерпринтинг дела обстоят ещё веселее. Хочешь удалить Flash? Тогда ты просто упростишь задачу, ведь таких как ты меньше 1%. С таким же успехом можно прятаться на улицах города с накладными усами, ковбойской шляпой и очками лётчика. Это не маскировка, а натуральный способ выдачи себя.
Я тебя немного растрою, сказав, что ожидать безоговорочной победы над трекерами не стоит, но создать некую иллюзию незаметности всё же можно. Начать стоит с выбора браузера. Safari – сразу отпадает, ведь он не удаляет куки. Chrome – хороший браузер, но параноику лучше держаться от него подальше. По итогу остаётся только FireFox, но и он не без греха.
В FF есть блокировщик рекламы, но он выключен по умолчанию. Для его включения потребуется зайти в скрытые настройки (about:config) и включить privacy.trackingprotection.enabled. Далее слева от адреса ты увидишь иконку в виде небольшого щита. Эта функция необходима чтобы, иметь возможность включать или выключать трекеры. Этот метод не только спасет от трекеров, но и ускрит работу сайтов, т.к. трафик и кол-во скриптов снизятся.
О трекерах FireFox узнает из базы Disconnect, правда его недостаток в том, что он знает заграничные метки, а вот из России сквозь него «мусор течёт рекой». Сходный функционал у плагина Ghostery, но с ним не все так просто. Он очень хорошо удаляет трекеры, но по итогу продаёт информацию о вас самим же рекламодателям. Неплохую репутацию заслужил блокировщик трекеров uBlock Origin, обязательно попробуйте.
За счёт плагина RequestPolicy Continued можно совсем запретить запросы к сторонним доменам, если их нет в белом списке. А приложение Self-Destructing Cookies убирает куки и содержимое локального хранилища после окончания сеанса. И в завершении бессменный NoScript блокирующий Flash, JavaScript и Java и активирующий их только в ручном режиме.
Готово
Даже если мы выполним все мероприятия и поставим все плагины – то все-равно что-то упустим… Зачем же так мучатся, живите честно и открыто 😀