Canvas fingerprint что это
Canvas fingerprint что это
Анонимность в сети очень важна. Особенно для тех, кто не хочет оставлять вообще никаких следов в интернете и не хочет, чтобы их действия отслеживались. Сегодня поговорим о том, что крадет у нас возможность действовать анонимно — о Canvas Fingerprint. Расскажем, что это такое и как работает, а также как все-таки сохранить конфиденциальность в сети.
Что такое Canvas Fingerprint
Canvas — это API HTML5, который используется для прорисовки 2D графики и анимации на веб-странице.
Помимо своего основного назначения, параметры Canvas могут быть использованы как дополнительная энтропия при снятии браузерных отпечатков. Согласно проведенному в 2016 году исследованию Принстонского университета (авторами которого являются Steven Englehardt и Arvind Narayanan, оригинал статьи здесь), было доказано, что более 5% веб-сайтов используют Canvas для получения браузерных отпечатков.
Canvas Fingerprint хуже, чем слежение за пользователями другими доступными способами. Например, он «собирает» о вас информацию даже в режиме инкогнито. И ему для работы не нужны cookie-файлы, которые легко удалить вместе с кэшем. Фактически такой «отпечаток» нельзя удалить — можно лишь обмануть систему аналитики и предоставить ей другой идентификатор. Он нигде не сохраняется на компьютере, но его могут сохранять сайты, чтобы идентифицировать пользователей.
Своеобразные цифровые уникальные отпечатки браузеров используют для самых разных целей, а именно — для:
сбора данных для аналитики, например, для определения, были ли вы на сайте впервые или уже заходили на него;
настройки персональной рекламы вплоть до указания времени посещения сайта и скрытых интересов пользователя;
слежения за пользователями в других целях.
Fingerprint в браузерах уникальны для каждого устройства — грубо говоря, если система будет анализировать вас, а потом вы включите режим инкогнито и зайдете на сайт, она вас «узнает». Зато «отпечатки» разные для браузеров — например, они будут отличаться для «Яндекс.Браузера» и Google Chrome, установленных на одном компьютере.
Как изменить Canvas Fingerprint
Есть браузеры, которые созданы для анонимного использования сети интернет и не поддерживают технологию формирования уникальных цифровых отпечатков. Это антидетект браузеры, которые могут предоставляют для каждого аккаунта независимый браузерный профиль с разными отпечатками, в том числе Canvas. Пользователи могут использовать настройки по умолчанию или изменять настройки в зависимости от своих потребностей. Сейчас существует большинство известных антидетект браузеров, таких, как Fingerprint Switcher, Multilogin, Gologin, Linken Sphere и т.д. Можете выбрать любой из них, и ваши действия в сети будут полностью анонимными.
Также, в этом помогают ещё анонимные браузеры. И самый известный из них — TOR, который также открывает путь в даркнет (темную сторону интернета). Есть и другие решения, например, Pale Moon — браузер с открытым исходным кодом на основе Firefox.
Это — один из самых простых способов подменить свой уникальный идентификатор. Установите прокси в виде плагина или используйте VPN. В вашем отпечатке заменят ip-адрес и страну, из которой вы выходите в интернет, и системы будут «отслеживать» несуществующего человека.
Каждый раз, когда вы будете использовать прокси или VPN, этот факт будет «отпечатываться» в вашем идентификаторе, и его будут переписывать. Со временем система слежения поймет, что вы стараетесь быть анонимным.
Обмануть системы слежения можно и вручную. Так вы предоставите им недостоверные данные. Например, можно:
По факту, если использовать такой способ, в вашем отпечатке будет полная неразбериха, и системы не смогут использовать его, чтобы адекватно обработать. Но это может быть неудобно и не факт, что это сработает.
В любом случае, сейчас всё больше и больше людей волнуется за свою безопасность в сети. И изменение Canvas Fingerprint постепенно становится требностью людей в повседневной жизни. Так что если вам тоже нужно изменить свои Canvas Fingerprint, то попробуйте вышесказанные методы!
Browser Fingerprint – анонимная идентификация браузеров
Валентин Васильев (Machinio.com)
Что же такое Browser Fingerprint? Или идентификация браузеров. Очень простая формулировка — это присвоение идентификатора браузеру. Формулировка простая, но идея очень сложная и интересная. Для чего она используется? Для чего мы хотим присвоить браузеру идентификатор?
Почему бы для этой цели не использовать просто http cookie? Ведь это очень просто, и все это умеют делать. Работает это, вы все знаете как.
Пользователь приходит на ваш сайт, мы читаем его cookie, если там есть какой-то идентификатор, значит, он у нас уже был, и мы знаем, кто он такой. Мы выполняем всю нашу аналитику, трекинг и т.д. в привязке к этому пользователю.
Если там идентификатора нет, значит, пользователь пришел к нам впервые. Мы генерируем идентификатор уникальный, GUI, бинарную строку какую-то, записываем это в cookie, и потом, когда пользователь придет в следующий раз, мы этот cookie прочитаем и поймем, что этот пользователь к нам пришел во второй, третий и последующий разы.
У сookie есть один большой недостаток — его можно очистить. Любой, даже технически неподкованный пользователь знает, как очищать cookie. Он нажимает «Настройки», заходит и очищает. Все, пользователь становится опять для вас анонимным, вы не знаете, кто он такой.
Все современные браузеры, даже Internet Explorer, кажется, предлагают режим инкогнито. Это такой режим, когда ничего не сохраняется, и когда пользователь посетил ваш сайт в этом режиме, он не оставляет никаких следов. Следующий раз, когда он зайдет в режиме инкогнито, вы опять же не узнаете, кто он такой и был ли он у вас до этого. Т.е. в режиме инкогнито http cookie работать не будут.
В настоящее время в связи с популярностью таких персонажей как Сноуден и т.д. многие предпочитают разные режимы приватности, анонимности в Интернете, режимы, плагины и что угодно. Все это препятствует трекингу и идентификации в Интернете. Многие пользователи этим пользуются, даже не понимая, зачем. Просто устанавливают, просто потому, что это модно. И они становятся для вас опять же анонимными. Http cookie в этом случае работать не будут.
Как программисты пытались и пытаются решить эту проблему?
Наиболее успешным проектом в сфере сохранения информации в cookie так, чтобы невозможно было ее удалить, на мой взгляд, является проект evercookie, или persistent cookie — неудаляемый cookie, трудно удаляемый cookie. Суть его заключается в том, что evercookie не просто хранит информацию в одном хранилище, таком как http cookie, он использует все доступные хранилища современных браузеров. И хранит вашу информацию, например, идентификатор. Начинает он использовать http cookies, записывает идентификатор туда, затем, если в браузере доступен Flash, он использует local shared objects для записи информации в т.н. Flash cookies.
Flash cookies до недавнего времени не очищались, когда вы очищали cookie. Лишь последние версии Google Chrome умеют очищать Flash cookie, когда вы очищаете обычные cookie. Т.е. до недавнего времени Flash cookies были практически неудаляемыми. Существовала специальная страница на сайте macromedia, куда нужно было зайти, нажать кнопку: «Да, я хочу очистить Flash cookies», и тогда они очищаются, т.е. без этой страницы было очистить невозможно.
Далее, evercookie использует Silverlight Cookies. По-другому они называются Isolated Storage. Это специальное выделенное место на жестком диске компьютера пользователя, куда пишется cookie информация. Найти это место невозможно, если вы не знаете точный путь. Оно прячется где-то в документах, Setting’ах, если на Windows, глубоко в недрах компьютера. И эти данные удалить, при помощи очистки cookie невозможно.
Далее. Evercookie использует такую инновационную технику как PNG Cookies. Суть заключается в том, что браузер отдает картинку, в которой в байты этой картинки закодирована информация, которую вы сохранили, например, идентификатор. Эта картинка отдается с директивой кэширования навсегда, допустим, на следующие 50 лет. Браузер кэширует эту картинку, а затем при последующем посещении пользователем при помощи Canvas API считываются байты из этой картинки, и восстанавливается та информация, которую вы хотели сохранить в cookie. Т.о. даже если пользователь очистил cookie, эта картинка с закодированным cookie в PNG по-прежнему будет находиться в кэше браузера, и Canvas API сможет ее считать при последующем посещении.
Evercookie использует все доступные хранилища браузера — современный HTML 5 стандарт, Session Storage, Local Storage, Indexed DB и другие.
Также используется ETag header — это http заголовок, очень короткий, но в нем можно закодировать какую-то информацию, и если установлен Java, то используется java presistence API.
Evercookie — очень умный плагин, который может сохранять ваши данные практически везде. Для обычного пользователя, который не знает всего этого, удалить эти cookies просто невозможно. Нужно посетить 6-8 мест на жестком диске, проделать ряд манипуляций для того, чтобы только их очистить. Поэтому обычный пользователь, когда посещает сайт, который использует evercookie, наверняка не будет анонимным.
Несмотря на все это, evercookie не работает в инкогнито режиме. Как только вы зашли в инкогнито режим, никакие данные не сохраняются на диске, потому что это основополагающая суть инкогнито режима — вы должны быть анонимными. А еvercookie использует хранение на жестком диске, которое в этом режиме не работает.
FingerprintJS — это маленькая библиотечка, которую я написал, и которая пытается решить эти проблемы. Я расскажу, как она это делает, и что из этого получилось.
Написал я ее в 2012 году. Я тогда работал в «КупиКупон» Ruby разработчиком. И у меня была задача сделать такую систему аналитики, чтобы учитывать не просто залогиненных пользователей, т.е. тех пользователей, которые есть у нас в системе, а также анонимных пользователей. Конкретно на сайте «КупиКупон» было много анонимных пользователей, потому что люди часто приходили извне посмотреть на какие-то купоны, скидки, предложения, у них ни у кого не было учетной записи, и поэтому система трекинга, система отслеживания посещаемых страниц, нажатия на кнопки — все это не работало, потому что пользователи были анонимными.
FingerprintJS, вообще, не использует cookie. Никакая информация не сохраняется на жестком диске компьютера, где установлен браузер. Работает в инкогнито режиме, потому что в принципе не использует хранение на жестком диске. Не имеет зависимостей, работает даже без jQuery, и размер — 1,2 Кб gzipped.
На данный момент используется в таких компаниях как Baidu, это Google в Китае, MasterCard, сайт президента США, AddThis — сайт размещениz виджетов и т.д.
Эта библиотека быстро стала очень популярной. Она используется примерно на 6-7% всех самых посещаемых сайтов в Интернете на данный момент.
Как она работает, расскажу детально. Суть ее в том, что код этой библиотеки опрашивает браузер пользователя на предмет всех специфичных и уникальных настроек и данных для этого браузера и для этой системы, для компьютера. Эти данные объединяются в огромную строку, затем они подаются на вход функции хэширования. Функция хэширования берет эти данные и превращает их в компактные красивые идентификаторы. Как детально это работает, я расскажу.
Сначала считывается userAgent navigator. Допустим, тут он обрезан, это присоединяется к итоговой строке отпечатка.
Считывается язык браузера — какой у вас язык — английский, русский, португальский и т.д. Тоже присоединяется к строке отпечатка.
Считывается часовой пояс, это количество минут от UTC:
Это –3, получается Москва.
Далее получается размер экрана, массив, глубина цвета экрана.
Затем происходит получение всех поддерживаемых HTML5 технологий, т.е. у каждого браузера поддержка отличается. FingerprintJS пытается определить, какие поддерживаются, какие — нет, и для каждой технологии результат опроса наличия этой технологии и степень ее поддержки прибавляется к итоговой функции отпечатка.
SessionStorage, LocalStorage, IndexedDB, OpenDatabase и другие всевозможные.
Опрашиваются данные, специфичные для пользователя и для платформы, такие как настройка doNotTrack (очень иронично, что настройка doNotTrack используется как раз для трекинга), cpuClass процессора, platform и другие данные.
Здесь у вас может возникнуть закономерный вопрос — ведь у очень многих пользователей эти данные они одинаковые? Допустим, пользователь живет в Москве, у него будет одинаковый язык, последний Chrome, у него будет все практически одинаково, и все эти строки, которые были получены на данном этапе, будут одинаковые. Как это поможет идентифицировать пользователя?
Есть еще 2 способа, которые добавляют уникальности.
Тут показано, как это работает. Мы получаем все эти данные. Потом мы передаем их в функцию хэширования, в FingerprintJS используется nomo hash2, и на выходе мы получаем 32-х битное число. Это и есть ваш идентификатор. Т.о., когда пользователь заходит на наш сайт, ему присваивается номер. Этот номер вы считываете и используете, как хотите, — вы базируете на нем свою аналитику и т.д.
Тут вопрос: насколько уникально и точно определение? Исследование, за основу которого было взято, было сделано компанией Electronic Frontier Foundation, у них был проект Panopticlick. Оно говорит, что уникальность составляет порядка 94%, но на реальных данных, которые были у меня, уникальность составляла около 90%-91%.
Библиотеку стало использовать много людей и компаний, и с течением времени выявился ряд недостатков. Т.е. она неидеальна, у нее есть недостатки. Самый главный недостаток — то, что точность идентификации только 90%, но есть и другие недостатки.
Я ее начал делать совсем недавно, разработка ведется на github.
Как она решает существующие проблемы? Самое главное — используется фазихэширование или localsensitivehash, или нечеткое хэширование. Такое хэширование, которое не меняется, даже если в обычном хэшировании, если вы измените хотя бы один байт входящей информации, выходящая строка тоже изменится, причем кардинальным образом. В фазихэшировании этого не происходит, тут есть порог чувствительности, когда определенный процент входящих данных может измениться, что не повлияет на исходящий отпечаток. Допустим, если поменялась в UserAgent только версия браузера, это случается очень часто, допустим, в Chrome, то результирующий отпечаток будет одинаковым, потому что версия составляет 3 или 5 % от общей длины от UserAgent.
Второе — в FingerprintJS 2 используется определение установленных шрифтов, всех шрифтов, которые установлены в системе. Чем это полезно? Если вы поставили программу, допустим, adobe pdf, то вы добавляете в систему шрифты.
Если вы поставили Microsoft Office, вы добавляете в систему шрифты; если вы поставили какой-нибудь Quick office, который имеет собственные шрифты, вы опять же добавляете в систему шрифты. И поэтому у вас может быть два абсолютно одинаковых компьютера, но на одном установлен Office, а на другом — нет. Это значит, что на первом, где нет Office, будет 320 доступных шрифтов, а, где есть Office — 1700 шрифтов. И значит, что вы сможете получить все шрифты, которые есть на этом компьютере, опять же, для итогового отпечатка. Это будет два разных отпечатка, потому что шрифты разные.
По умолчанию используется Flash, маленький swf файл размером 916 байт. Он получает список всех установленных шрифтов, причем в платформозависимом порядке, т.к. они доступны в системе, так они и будут возвращены. Если Flash не установлен, используется такая техника, она называется site chanel technic. Она впервые была опубликована на сайте lalit.org. Это определение наличия шрифта с помощью javascript only. Как это делается? Для каждого референтного шрифта, который задан по умолчанию в браузере или в системе, измеряется его ширина и высота, и этот массив ширины и высоты сохраняется. Затем к скрытому тексту (текст, кстати, огромный, допустим, 72 пикселя) применяется другой шрифт. Если этот шрифт есть в системе, текст изменит свои габариты правильно, и код, который изменяет высоту и ширину, получит новый массив, с высотой и шириной. Если он отличается от референтного, от того, который был получен при запросе дефолтного шрифта, значит, этот шрифт установлен. Если не отличается, значит, этого шрифта нет.
Очень простая идея, но она работает. На данный момент этот код может достоверно определить около 500 шрифтов без использования Flash. И, соответственно, тот компьютер, где есть Microsoft Office, и тот, где его нет, будут по-разному определены в FingerprintJS 2 за счет этой техники.
Третье отличие — WebGL Fingerprint. Это развитие идеи Сanvas Fingerprint. Суть его заключается в том, что рисуются 3D треугольники (на слайде не очень хорошо видно, но это 3D). На него накладываются эффекты, градиент, разная анизотропная фильтрация и т.д. И затем он преобразуется в байтовый массив. Результирующий байтовый массив, как и в случае с Canvas Fingerprint, будет разный на многих компьютерах. Потом к этому байтовому массиву еще добавляется информация о платформозависимых константах, которые определены в WebGL. Т.е. в WebGL есть набор констант, которые должны быть обязательно в реализации. Это глубина цвета, максимальный размер текстур… Этих констант очень много, их десятки. Код опрашивает все эти константы и, понятное дело, что на android-девайсах эти константы будут отличаться, там глубина цвета может быть другой, чем на Windows или чем на linux’е. Он опрашивает все эти константы, все это опять же складывается в огромный массив, и все это добавляется к сериализованному изображению 3D треугольника, который нарисован при помощи аппаратных эффектов.
Тут тоже такой вопрос: как это помогает идентифцировать? 3D графика очень платформозависима, версия драйверов, версия видеокарты, стандарт OpenGL в системе, версия шейдерного языка, — все это будет влиять на то, как внутри будет нарисовано это изображение. И когда оно будет преобразовано в байтовый массив, оно будет разное на многих компьютерах.
Почему WebGl Fingerprint важен? Потому что IOS 8.1 поддерживает WebGL, а это помогает идентифицировать IOS девайсы, о проблеме идентификации которых я упоминал. Поэтому WebGL повышает точность Fingerprint.
Что еще предстоит реализовать?
Как я говорил, библиотека находится в разработке и не все вещи, которые я бы хотел в ней сделать, сделаны. Вокруг нее уже есть небольшое сообщество разработчиков. Я, кстати, приглашаю всех желающих участвовать в разработке — она очень интересная, мы очень неформальны, каждый предлагает идеи, там достаточно интересно.
Что предстоит еще реализовать? WebRTC Fingerprinting.
WebRTC — это стандарт peer-to-peer коммуникаций через аудиопотоки, или это стандарт аудиокоммуникаций в современных браузерах. Он позволяет делать аудиозвонки и т.д., он поддерживается в FireFox и будет скоро поддерживаться в других браузерах.
Реализация WebRTC стандарта тоже платформозависима, она будет зависеть от той видеокарты, которая установлена в системе, от драйверов на звук и т.д. Поэтому, измеряя разные уровни латентности, разные уровни поддержки WebRTC и констант, которые зашиты в этом формате, можно получить разные итоговые отпечатки для разных компьютеров.
Будет использоваться больше плагинов для IE. Будут использованы те плагины, которые популярны в разных странах — Китае, Индии и т.д., т.е. растущие информационные рынки. В первой версии недостаточно внимания было уделено этой проблеме, а во второй версии это будет решено.
Больше информации будет собираться об ОС. Как мы это будем делать? Будет использоваться интеграция с Flash и Silverlight. Flash позволяет получать информацию о системе, такую как версия ядра, патч левел ядра. Silverlight, если на Windows, позволяет получить версию Windows, bild, номер Windows, все это доступно через Silverlight.
Пару слов о Silverlight, почему интеграция с sliverlight тоже достаточно важна? Может быть, в России Silverlight плагин не очень популярен, но в США, например, есть сервис стримингового видео Netflix, который транслирует видео, и я знаю точно, что они используют Silverlight. Ввиду того, что он поддерживает DRM (это система ограничения цифровых прав на контент), т.к. Netflix часто показывают разные свежие голливудские фильмы, они используют Silverlight для того, чтобы это видео не расходилось по Интернету. Поэтому в США у многих десктопных пользователей Интернета установлен Silverlight плагин, который, кстати, доступен и на Mac’е тоже, помимо Windows.
Будет реализовано определение наличия нескольких мониторов. Если мы запросим размеры через javascript, то получим просто два числа — это ширина и высота экрана. Если мы сделаем то же самое через Flash API, Actionscript API, мы получим массив массивов. Это значит, что если установлено несколько мониторов, где каждый подмассив — это будет размер экрана каждого монитора. Если разработчик сидит за пятью мониторами, он получит массив массивов из пяти элементов, т. о., мы узнаем, что человек сидит за пятью мониторами, а не за основным монитором, который вернул бы javascript.
Все эти данные в совокупности позволяют на данный момент получить точность определения порядка 94-95%. Но, как вы понимаете, это недостаточная точность идентификации. Тут встает вопрос: каким образом это можно улучшить, и можно ли это улучшить? Я считаю, что можно. Цель этого проекта — достичь 100% идентификации так, чтобы можно было опираться на Fingerprint в 100% случаях и гарантированно сказать: «Да, этот пользователь к нам приходил; да, я все о нем знаю, несмотря на то, что он использует инкогнито mode, tor сеть…». Не важно, все это будет определено.
Контакты
Этот доклад — расшифровка одного из лучших выступлений на конференции фронтенд-разработчиков FrontendConf.
Ну и главная новость — мы начали подготовку весеннего фестиваля «Российские интернет-технологии», в который входит восемь конференций, включая FrontendConf.
Большой Миф о Браузерном Отпечатке Canvas. Часть 1.
Раз уж ты здесь, то, наверняка, тебе известно, что отпечатки Canvas помогают отслеживать пользователей. Давай разберемся, почему ты этому веришь. Может тебе попадалось на глаза какое-то исследование или ты самостоятельно собирал информацию? Или может где-то читал, слышал? Интересно же. Так вот сегодня мы развенчиваем миф о Canvas.
Действительно, если проанализировать тысячи различных устройств с разными операционными системами и браузерами, созданными за последние 25 лет, то мы получили бы много уникальных отпечатков Canvas. Это подтверждают несколько научных работ.
Но что произойдет, если мы проанализируем только популярные на данный момент устройства и ОС? Очень занимательно знать, что сайты могут легко отследить кого-то, просматривающего Интернет с бабушкиного компьютера 15-летней давности с Windows 95 и Internet Explorer 5.0. Но отвечает ли это на вопрос, насколько уникален отпечаток вашего Dell XPS с Windows 10 и Chrome 73?
Эксперимент
Анализ всех отпечатков, используемых сайтами, занял бы у нас несколько месяцев. Поэтому мы решили ограничиться исследованием самого спорного и неправильно понятного из них – Canvas.
В сотрудничестве с местным компьютерным магазином, который продает новые и б/у компьютеры, мы получили доступ к сотням машин с разной комплектацией. Для тестирования мы выбирали только машины с различными графическими адаптерами и драйверами. В большинстве случаев тесты проходили на Windows 10 с последней версией браузера Chrome.
Итак, после тестирования более ста совершенно разных машин, мы обнаружили, что большинство из них имеют идентичный отпечаток Canvas.
Вот несколько интересных моментов из нашего исследования:
Что все это значит?
Вывод, который мы сделали заключается в том, что смешаться с толпой гораздо легче чем мы думали. Если вы используете не очень старый ноутбук с популярной моделью графического процессора, Windows 10 и одной из последних версий распространенных браузеров, таких как Chrome или Firefox, то этого уже достаточно. Та же ситуация с пользователями устройств Apple. Вам не требуется дополнительная маскировка отпечатка Canvas, поскольку сам отпечаток не добавляет особой уникальности вашему общему цифровому отпечатку.
Учитывая такие результаты, мы решили изменить режим маскировки Canvas отпечатка в Multilogin. Теперь по умолчанию защита отключена. То же самое мы сделали для AudioContext, так как этот отпечаток добавляет еще меньше уникальности, чем Canvas согласно последним научным исследованиям.
Однако, мы не меняли значение по умолчанию для защиты отпечатка WebGL Image, поскольку у нас пока недостаточно данных.
Мы не встречали популярных сайтов, которые бы использовал отпечаток WebGL Image для идентификации пользователя. Возможно, потому что этот отпечаток не так стабилен, как AudioContext или Canvas.
Другая возможная причина заключается в том, что рендеринг WebGL Image требует значительных ресурсов и иногда даже не может быть завершен в течение короткого сеанса.
Однако, когда дело доходит до метаданных WebGL, некоторые популярные сайты действительно считывают информацию и могут ее использовать как часть цифрового отпечатка пользователя. Поэтому пока что мы рекомендуем оставить маскировку WebGL включенной. В скором времени мы планируем добавить возможность раздельного включения и отключения защиты WebGL Image и Metadata.
Если наше дальнейшее исследование выявит какую-либо информацию, которая может повлиять на настройку значений по умолчанию для отпечатков WebGL, мы напишем об этом в нашем блоге.
Теперь о главном
Раз уже отпечаток Canvas не представляет значительной угрозы, если работать с распространенными моделями и ПО, то как узнать эти модели? Именно о моделях компьютеров мы расскажем во второй части обсуждения мифов о Canvas. Следите за обновлениями!