Evercookie – вездесущие кукисы
Технология Cookies позволяет Интернет-ресурсам запоминать настройки уже однажды посетившего сайт пользователя. Сайт сохраняет настройке локально на компьютере пользователя и в следующий раз не спросит логин и пароль. Считается, что удалив сookies-информацию на своем компьютере, то сайт воспримет посетителя «как в первый раз». Но обманываться таким образом не стоит.
Даже используя все способы сохранения анонимности в интернете, прокси-серверов и VPN, изменять заголовки HTTP-запросов, которые выдают информацию о использующейся ОС, версий программного обеспечения и еще много других данных – но у ресурса все равно останутся скрытые способы зафиксировать факт его посещения. Бывают случаи, когда на это не стоит обращать внимание, но только не тогда, когда крайне нужно на сервисе представится как другой пользователь и просто сохранить полную анонимность.
Можно представить, какова будет реакция систем, направленных на борьбу с мошенничеством на сайте любой финансовой организации, если будет отслежен факт регистрации с одного компьютера нескольких аккаунтов с разными данными пользователей. И едва ли обычному пользователю сети нравится осознавать, что какие то системы следят за его интернет-деятельностью. Но об этом далее.
Принцип работы Cookies
Для начала представим немного теории.
Кукисы (Cookies в русском написании) традиционно используются для идентификации пользователя. Слово происходит от анг. «печенье», обозначающего в данном случае небольшой объемчик текстовой информации, которой сервер обменивается с браузером. Когда происходит вызов сервера пользователем, т.е. в строке браузера набирается определенный адрес, сервер может получить автоматически и информацию, хранящуюся в cookies, проанализировать ее и соответственно прореагировать.
К примеру, когда пользователь один раз авторизуется на каком-либо сайте, то его логин и пароль сохраняются в cookies в течении всего времени пребывания на ресурсе, что позволяет ходить в его пределах по разным ссылкам и документам, не вводя каждый раз эти данные. Именно таким образом сайт и запоминает пользователя. Запрос страницы браузер осуществляет, отправляя веб-серверу короткий текст HTTP-запроса.
Технически это выглядит примерно так. Для доступа к адресу www.example.org/index.html, браузер отправляет на сервер www.example.org такой запрос:
GET /index.html HTTP/1.1 Host: www.example.org
Ответ сервера выглядит как выдача на экран запрашиваемой страницы, но вместе с ней идет и HTTP-ответ, где и может содержаться команда, согласно которой браузер сохранит кукисы:
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value
Если строка Set-cookie в ответе сервера присутствует, то указанное в ней сопоставление name=value (имя = значение) браузер запоминает и при каждом последующем запросе ее значение к нему присоединяет.
GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value Accept: */*
Это работает довольно просто. Если от посетителя серверу пришли куки и у него они в базе имеются, то однозначно и имеется возможность их обработать. Таким образом, если поступила информация с актуальными данными авторизации, то логин и пароль при входе у посетителя ресурс не запросит. Стандартные кукисы имеют установленный срок, который они хранятся в памяти (однако, он может быть очень долгим), после которого они автоматически удаляются. А любую cookies-информацию пользователь может досрочно удалить самостоятельно, используя такую опцию в любом браузере.
Эта опция доставляет много беспокойства различным Интернет-ресурсам, которые не хотят так просто терять установленную связь с конкретным пользователем. Бизнес-проектам и их авторам важно знать, был ли у них уже этот человек вчера-позавчера, или это новый посетитель. Наиболее агрессивны в этом вопросе всякие анализаторы трафика, различные статистические системы и баннерные боты.
В этом аспекте и начинается использование разработчиками различных программных уловок, о которых рядовые пользователи и не ведают. Зачастую используются настолько продвинутые ухищрения, что и неопытный программер не разберется в чем тут дело.
Flash- cookies
Для этих целей помимо классических HTTP-печенек, в работе с которыми уже все освоились, используются альтернативные места хранения информации, которую браузер записывает на компьютере пользователя. Первое, о чем следует поговорить – это хранилище как хорошего, так одновременно и плохого Flash, когда он установлен на компьютере пользователя. Данные записываются в так называемые файлы LSO (Local Shared Objects) – они похожи по формату на файлы cookies и хранятся на локальных компьютерах пользователей. Схема работы с ними браузера во многом похож на работу с «печеньками», в этих фалах также хранится небольшая текстовая запись, но Flash-cookies имеют ряд преимуществ:
- Возможность работы с LSO файлами есть у всех браузеров установленных на компьютере (обычные cookie привязаны к одному браузеру). Общими для всех оказываются и информация о сессии и некоторый идентификатор, данный этому пользователю для его отслеживания.
- Flash-cookies дают возможность сохранять намного больше различных настроек пользователя и информации о нем, потому как файлы в хранилище как правило могут иметь объем до 100 Кб.
В практике трекинга пользователей возможности, предоставляемые Flash-cookies очень ценны из за простоты и доступности технологии их использования. Обычный пользователь, проводя «ревизию» в своих кукисах навряд ли задумается об очистке Flash-хранилищ. Просмотреть все интересное, хранящееся тут, можно с помощью любого просмотрщика, например FlashCookiesView.
Тут же всплывает весь набор ресурсов, которые заинтересованы в сохранении связей со своими посетителями, даже если они вдруг решат почистить кэшированную память своего браузера вместе с «печеньками».
Evercookie: кукисы всюду
Более-менее грамотные разработчики и продвинутые пользователи зачастую знают и о схеме работы LSO, но вот о разнообразных новых техниках сохранения информации и пометки данных многие просто не догадываются. А они зачастую бывают довольно хитрые, но очень продуктивные. К примеру недавно разработанные хранилища, появившиеся в HTML5 (Session Storage, Local Storage, Global Storage, Database Storage via SQLite).
Еvercookie были разработаны Сэми Камкаром, польским специалистом по безопасности. Он занимался проблемами интернет-взаимосвязей, в результате чего и родилась на свет библиотека Еvercookie на основе JavaScript. Система призвана создавать в браузере наиболее незаметные и неуязвимые кукисы. На вопрос «Зачем же эти усилия?» есть логичный ответ – для того, чтобы обнаружить повторный заход любого, даже самого ловкого пользователя. Такие живучие cookies имеют другое название — Tracking cookies. Некоторые антивирусы способны обнаруживать их как угрозу анонимности. Другими словами, если сайт использует технологии подобные evercookie, то все усилия пользователя сохранить приватность будут сведены на нет.
Секрет технологии в том, чтобы задействовать для хранения информации все доступные браузеру хранилища: контейнеры HTML5, вышеупомянутые LSO и стандартные HTTP-кукисы. Помимо этого Еvercookie используют и эксклюзивные приемы, которые оставляют на компьютере нужную пометку. И этих вариантов очень много – генерация персональных метящих PNG-изображений, использование Истории браузера, и хранение данных в контейнерах ETag и userData, последний доступен только в Internet Explorer.
Эффективность работы evercookie можно проверить опытным путем уже на сайте разработчика samy.pl/evercookie. Там есть кнопка с надписью «Click to create an evercookie», после нажатия которой в Вашем компьютере будет прописан cookie со сгенерированным случайным числом. После чего нужно пройтись по браузеру и другим приложениям, удалив кукисы и очистив кэш где только сможете.
Скорее всего пользователь ограничится удалением кукисов в настройках браузера, и будет уверен, что ему все удалось почистить. Но, даже перезагрузив страницу или закрыв и открыв браузер, нажав на кнопку «Click to rediscover cookies» произойдет чудо – сайт откуда то возродил данные и выдал число, которое сохранял в кукисах.
Но все же было удалено? Как это произошло? Давайте подробно разберемся с технологиями, задействованные в evercookie и подобных библиотеках.
Графические кукисы
Этот прием представляет особый интерес, потому как использует нестандартный подход – хранение информации в кэше посредством PNG-изображений. Когда идет процесс записи кукисов библиотекой evercookie, она обращается к своему скрипту evercookie_png.php с особенной «печенькой», содержащей текст, отличный от стандартной информации о сессии. Этот текст считывается программным PHP-сценарием, который и создает изображение в формате *. PNG, в подобранный цветах которого будет закодирована информация о посещении ресурса. В результате файл отправляется пользователю на компьютер с отметкой про хранение сроком на 20 лет. Вслед за этим специальные HTTP-кукисы удаляются.
Получив следующий запрос от пользователя, evercookie выполняет такой же как и в первом случае запрос к PHP-сценарии, но в этом случае никакие данные о пользователе не предоставляются. Сценарий сгенерировать изображение PNG не может, по причине отсутствия информации и браузеру приходит ложный HTTP-ответ «304 Not Modified», после чего браузер вынужден вытащить файл из своей локальной кэшированной памяти. Этот файл и содержит то самое изображение, которое отсылается ресурсу и попадает на страницу под тегом HTML5 Canvas. Теперь evercookie не сложно извлечь RGB-значения, считывая поочередно все пиксели рисунка Canvas и восстанавливая изначальные сохраненные кукисы. Все гениальное просто!
Трюк с Историей
Это другой прием, напрямую задействующий историю просмотрщика интерент-страниц. Как только в браузере сохраняется cookies, то технология evercookie по алгоритму Base64 все данные подлежащие сохранению превращает в набор кодов. К примеру, в результате этого кодирования получился такой набор символов — «bcde». Еvercookie, один за одним, производит запрос в фоновом режиме по таким адресам:
google.com/evercookie/cache/b google.com/evercookie/cache/bc google.com/evercookie/cache/bcd google.com/evercookie/cache/bcde google.com/evercookie/cache/bcde-
Все эти адреса, естественно, сохраняются в Истории посещений. Обратный процесс – выяснение, бывал ли пользователь уже на данном ресурсе осуществляется с помощью приема CSS History Knocker, который посредством CSS и JS-скрипта и позволяет это узнать.
Для проверки таких «печенек» evercookie проходит по всем адресам google.com/evercookie/cache выискивая все возможные символы Base64, двигаясь по одному символу начиная с «а». Как только скрип обнаруживает в Истории подходящий URL-адрес, начинает поиск по следующей букве. Получается такой себе метод сортировки. В практике весь подбор производит в считанные секунды, потому что ожидание ответов сервера тут не нужно и поиск производится локально. Момент завершения сбора данный библиотека распознает по символу «-» в конце строки. Сайт декодирует данные Base64 и получает необходимую информацию.
Да, плоховато разработчики браузеров заботятся о нашей безопасности в Сети.
Давай-давай, удаляй!
А что же произойдет, если юзер поудаляет все свои кукисы? На это у библиотеки evercookie припрятано последнее мощное оружие. Разные места хранения данных, а сейчас их десять, связаны таким образом, что если кукисы остались хотя бы в одном из них, во всех остальных они восстановятся автоматически.
Для примера – если пользователь возьмется за дело основательно и почистит стандартные кукисы, данные LSO, проверит HTML5-хранилища (что бывает редко), все равно в системе будут жить кукисы, сохраненные в виде PNG или web Истории. Посетив сайт следующий раз, можно обнаружить, что система evercookie не только запросто распознала тебя, но и возродила все ранее удаленное.
Тут стоит упомянуть и об интересной передаче «печенья» между разными браузерами, установленными в пределах одной ОС. Если есть возможность сохранения информации в Local Shared Object, то кукисы будут воспроизведены и в других браузерах.
Кроме подробно описанных способов хранения данных, evercookie использует технологию Isolated Storage, реализованную в Silverlight, а также она может «наследить» через Java-апплета.
Как применить?
Библиотека Evercookie находится в Интернете в открытом доступе, а потому каждый может ее скачать и исследовать, а также настроить под свои потребности. К использующему ее серверу никаких требований нет, нужно лишь иметь доступ к JS-сценарию, в котором и хранится код evercookie. Если необходимо задействовать Flash-кукисыи хранения в LSO, то в папке со скриптом проверьте наличие файла evercookie.swf, а за работу вариантов с хранилищем ETag и кэшированием PNG отвечают PHP-сценарии evercookie_etag.php и evercookie_png.php.
Наладить работу evercookie можно на любой страничке ресурса, подключив соответсвующий Java-script:
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> <script type="text/javascript" src="swfobject-2.2.min.js"></script> <script type="text/javascript" src="evercookie.js"></script> <script> var ec = new evercookie(); // устанавливаем cookie "id" со значением "12345" // синтаксис: ec.set(key, value) ec.set("id", "12345"); // восстанавливаем кукису с именем "id" ec.get("id", function(value) { alert("Cookie value is " + value) });
Существует альтернативный и более продвинутый способ генерировать и сохранять кукисы на основе callback-функции. Ее возможности заключаются в извлечении Cookies из всех хранилищ и сравнение их между собой.
function getCookie(best_candidate, all_candidates) { alert("The retrieved cookie is: " + best_candidate + "\n" + "You can see what each storage mechanism returned " + "by looping through the all candidates object."); for (var item in all_candidates) document.write("Storage mechanism " + item + " returned: " + all_candidates[item] + " "); } ec.get("id", getCookie); </script>
На различных ресурсах библиотека evercookie уже доказала свою действенность ,а наибольшую популярность получила среди интернет-магазинов, организаторов голосований и других. Однако, web-разработчикам следует обратить внимание на два важных момента. Другие домены тоже могут считать сохраненные evercookie кукисы и получить доступ к конфиденциальной информации, а значит хранить ее подобным образом нельзя. Вот что можно увидеть в первых строках информации файла из библиотеки evercookie.js:
*!!! SOME OF THESE ARE CROSS-DOMAIN COOKIES, THIS MEANS * OTHER SITES WILL BE ABLE TO READ SOME OF THESE COOKIES!!!
А второе – некоторые антивирусы не будут допускать пользователей на сайты, использующие эту технологию. Например, Касперский, идентифицирует скрипт evercookie как spyware.
Всеобщая доступность библиотеки evercookie немного настораживает, особенно когда путей для борьбы с ней особо не видно.
Держим оборону.
Проблем с очисткой кэша и Flash не возникает, но вот чтобы подчистить все следы evercookie, придется сильно постараться, потому как сказано выше, если забудете «печеньку» хоть в одном месте, все значения скриптом буду восстановлены во всех доступных местах хранения данных.
В результате, столкновение с этой библиотекой – это хороший тест Вашей приватности в Сети и такового режима браузера, установленного почти во всех последних разработках. Пользователями были проверены и Google Chrome, и Opera, Internet Explorer и Safari, и справится с нашествием кукисов от evercookie смог только последний. Это выяснилось, когда после закрытия и открытия этого браузера скрипт на сайте не смог восстановить никакие сторонние значения. Говоря о популярном сейчас Firefox, то evercookie не работает только когда стоит опция Noscript и все скрипты отключены – evercookie требует сначала включить javascript, а потом и флэш объект заодно. Другие плагины Firefox, направленные как раз на сохранение приватности — CookieSafe и BetterPrivacy в этом случае никак не защитили анонимность пользователя.
Стоит задуматься об этом, потому как в самое ближайшее время в библиотеку обещают добавить еще несколько технологий пометки и хранения данных:
- Применение кеширования в HTTP Authentication;
- Применение Java для генерации уникального числового значения, который пометит конкретный ПК.
И в заключение…
Как оказалось, evercookie – уже далеко не единственная в своем роде подобная библиотека. Ей на пятки наступает, а может даже в чем то и превосходит Panoptiсlick. О ней и методах борьбы с ее действиями можно найти информацию в Сети.
P.S. На поле сookies разворачиваются целые сражения, где война идет по-настоящему и щит противостоит мечу. Именно следствием популярности библиотеки стало появление продуктов, направленных на борьбу с ней. Утилита. Mil Shield не только подчистит везде, где наследила evercookie, но сделает даже больше, если верить загадочному обещанию разработчиков.