Browser Fingerprint \ идентификация браузеров или цифровой отпечаток устройства .

Browser Fingerprint \ идентификация браузеров или цифровой отпечаток устройства .

@dark_to_web

Предисловие .

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

Сегодня мы разберём :

• Что такое Browser Fingerprint ?

• Методы , используемые программистами для достижения идентификации пользователей .

• Как бороться ?


Что это за дерьмо ?

Browser Fingerprint — это присвоение идентификатора браузеру . Формулировка простая , но идея очень сложная и интересная .

Для чего нашему браузеру хотят присвоить идентификатор ?

Дело в том , что владельцы крупных сервисов \ сайтов хотят :

1 . Учитывать своих пользователей . Хотят знать , пришел ли пользователь к ним первый раз , пришел он во второй раз или в третий . Если пользователь пришел во второй раз , они хотят знать , на какие страницы он заходил , что он до этого делал . С анонимными пользователями это невозможно провернуть . Если у вас есть система учета записей , пользователь логинится , мы все про него знаем — мы знаем его учетную запись , его персональные данные , мы можем привязать любые действия к этому пользователю . Здесь все просто . В случае с анонимными пользователями все становится гораздо сложнее .

2 . Второй сценарий — персональная реклама . Это сейчас повсюду . Мы заходим , и вдруг нам показывают рекламу каких - нибудь пирожков , которые мы хотели купить еще вчера . Как это делается ? Это делается через идентификацию пользователей .

3 . Третий сценарий — внутренняя аналитика . Если владельцы сервиса \ сайта использует , помимо Google Analytics или Яндекс , собственную самописную систему аналитики , Fingerprint JS и Browser Fingerprint , в целом , может им помочь в достижении почти полной идентификации анонимных пользователей . Он сможет увидеть , что пользователь делал на вашем сайте , на какие страницы заходил, какие ссылки он щелкал и пр . Не составит труда построить на основе этого целую картину , карту действий пользователя . Все это достигается при помощи Browser Fingerprinting .


☂ Также следует упомянуть об использовании нижеописанных технологий в антифрод системах различных сервисов вроде Ebay , PayPal и пр .


Методы создания и увелечения точности отпечатка :

Возникает адекватный вопрос : Почему бы не использовать cookie ?

Дело в том , что у сookie есть один большой недостаток — его можно очистить . Любой , даже технически неподкованный пользователь знает , как очищать cookie . Он нажимает «Настройки» , заходит и очищает . Всё , пользователь становится опять анонимным .

Все современные браузеры , даже Internet Explorer , кажется, предлагают режим инкогнито . Это такой режим , когда ничего не сохраняется , и когда пользователь посетил сайт в этом режиме , он не оставляет никаких следов . Следующий раз , когда он зайдет в режиме инкогнито , вы опять же не узнаете , кто он такой и был ли он у вас до этого . То есть в режиме инкогнито http cookie работать не будут .

★ На смену cookie пришёл проект evercookie , или persistent cookie — неудаляемый , трудно удаляемый cookie . Суть его заключается в том , что evercookie не просто хранит информацию в одном хранилище , таком как http cookie , он использует все доступные хранилища современных браузеров . И хранит вашу информацию , например , идентификатор . Начинает он использовать http cookies , записывает идентификатор туда , затем , если в браузере доступен Flash , он использует local shared objects для записи информации в так называемом Flash cookies . Flash cookies до недавнего времени не очищались , когда вы очищали cookie . Лишь последние версии Google Chrome умеют очищать Flash cookie , когда вы очищаете обычные cookie . То есть до недавнего времени 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 и пр .

Evercookie — очень умный плагин , который может сохранять ваши данные практически везде . Для обычного пользователя , который не знает всего этого , удалить эти cookies просто невозможно . Нужно посетить 6 - 8 мест на жестком диске , проделать ряд манипуляций для того , чтобы только их очистить . Поэтому обычный пользователь , когда посещает сайт , который использует evercookie , наверняка не будет анонимным .

Несмотря на все это , evercookie не работает в инкогнито режиме . Как только вы зашли в инкогнито режим , никакие данные не сохраняются на диске , потому что это основополагающая суть инкогнито режима — вы должны быть анонимными . А еvercookie использует хранение на жестком диске , которое в этом режиме не работает .

FingerprintJS — это маленькая библиотека , которая пытается решить эту ↑ проблему . Я расскажу, как она это делает, и что из этого получилось.

FingerprintJS вообще не использует cookie . Никакая информация не сохраняется на жестком диске компьютера , где установлен браузер . Работает в инкогнито режиме , потому что в принципе не использует хранение на жестком диске . Не имеет зависимостей , работает даже без jQuery .

На данный момент используется в таких компаниях как Baidu , это Google в Китае , MasterCard , сайт президента США , AddThis — сайт размещениz виджетов и пр .

Суть ее в том , что код этой библиотеки опрашивает браузер пользователя на предмет всех специфичных и уникальных настроек и данных для этого браузера и для этой системы , для компьютера :

1 . Считывается язык браузера — какой у вас язык — английский , русский , португальский и пр . Тоже присоединяется к строке отпечатка !

2 . Считывается часовой пояс , это количество минут от UTC

3 . Далее получается размер экрана , массив , глубина цвета экрана .

4 . Затем происходит получение всех поддерживаемых HTML5 технологий . У каждого браузера поддержка отличается . FingerprintJS пытается определить , какие поддерживаются , какие — нет , и для каждой технологии результат опроса наличия этой технологии и степень ее поддержки прибавляется к итоговой функции отпечатка .

Эти данные объединяются в огромную строку , затем они подаются на вход функции хэширования . Функция хэширования берет эти данные и превращает их в компактные красивые идентификаторы .

Есть еще несколько способов , которые добавляют уникальности отпечатку :

¹⚔ Canvas Fingerprinting — еще одна техника , которая позволяет повысить точность идентификации пользователей . Суть ее заключается в том , что на скрытом Сanvas элементе рисуется определенный текст с определенными наложенными на него эффектами . И затем полученное изображение сериализуется в байтовый массив и преобразовывается в base64 при помощи вызова canvas.toDataULR() .

Но как это помогает идентифицировать браузер \ пользователя ? Оказывается , что прорисовка шрифтов , в частности , в Canvas API , очень платформозависима . Внешне идентичные одинаковые изображения , нарисованные в разных браузерах , будут преобразованы в разный байтовый массив . Почему ? Это зависит от процессора , видеокарты , драйверов видеокарты , системных библиотек , таких как direct X , систем отрисовки шрифтов , теней — все это на каждом компьютере может быть свое , поэтому результирующий байтовый массив будет отличаться практически на каждом компьютере , где будет разная аппаратная и программная начинка . И эта длинная строка , полученная при сериализации Сanvas будет присоединена к итоговому отпечатку , и мы получим огромную строку идентификатора .

²⚔ Второй — это информация о плагинах . Код опрашивает наличие всех установленных плагинов в системе . Для каждого плагина получается его описание и название , а также , что очень важно , список всех мультимедиа типов или main типов , которые поддерживают этот плагин . Вся эта информация объединяется в огромный массив строк , и этот массив тоже конкатенируется и прибавляется к строке отпечатка . Как вы понимаете , на каждом компьютере список плагинов свой , достаточно уникальный , и версии плагинов могут быть свои , и список поддерживаемых main типов тоже будет свой .

³⚔ Также следует упоминуть об WebRTC Fingerprinting .

WebRTC — это стандарт peer-to-peer коммуникаций через аудиопотоки , или это стандарт аудиокоммуникаций в современных браузерах — API , позволяющий получить доступ к камере и микрофону через браузер без каких-либо плагинов и флеша . Он позволяет делать аудиозвонки и пр . он поддерживается в FireFox и будет скоро поддерживаться в других браузерах .

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

⁴⚔ WebGL Fingerprint .

Это развитие идеи Сanvas Fingerprint . Суть его заключается в том , что рисуются 3D треугольники . На него накладываются эффекты , градиент , разная анизотропная фильтрация и т . д . И затем он преобразуется в байтовый массив . Результирующий байтовый массив , как и в случае с Canvas Fingerprint , будет разный на многих компьютерах . Потом к этому байтовому массиву еще добавляется информация о платформозависимых константах , которые определены в WebGL . То есть в WebGL есть набор констант , которые должны быть обязательно в реализации . Это глубина цвета , максимальный размер текстур . Этих констант очень много , их десятки. Код опрашивает все эти константы и , понятное дело , что на android - девайсах эти константы будут отличаться , там глубина цвета может быть другой , чем на Windows или чем на linux’е . Он опрашивает все эти константы , все это опять же складывается в огромный массив , и все это добавляется к сериализованному изображению 3D треугольника , который нарисован при помощи аппаратных эффектов .

Как это помогает идентифцировать пользователя ? 3D графика очень платформозависима , версия драйверов , версия видеокарты , стандарт OpenGL в системе , версия шейдерного языка , — все это будет влиять на то , как внутри будет нарисовано это изображение . И когда оно будет преобразовано в байтовый массив , оно будет разное на многих компьютерах .

Почему WebGl Fingerprint важен ? Потому что IOS 8.1 поддерживает WebGL , а это помогает идентифицировать IOS девайсы , поэтому WebGL повышает точность Fingerprint.


Как с этим бороться ?

¹→ Необходимо маскировать информацию о браузере и системе под распространенные конфигурации с помощью специальных утилит (например : Random Agent Spoofer в Firefox) .

²→ Использовать расширения , блокирующие элемент HTML5 Canvas (например , CanvasBlocker в Firefox , Canvas Defender или CanvasFingerprintBlock в Chrome) . С их помощью можно настраивать список доверенных сайтов , на которых разрешается выполнение элемента HTML5 Canvas .

³→ Отключить JavaScript или с помощью расширений настроить список доверенных сайтов , с которых можно выполнять JavaScript .

⁴→ Чтобы защититься , необходимо очищать все сохраненные ETag вместе с кешем браузера , либо использовать приватный режим просмотра браузера .


◦ Также нельзя не сказать о таких проектах , как например : Antidetect или FraudFox и пр . , представляющие из себя приватное по — включающее в себя всё необходимое для того , чтобы вас никоем образом не смогли идентифицировать во всемирной паутине .


По всем вопросам : @rloops



Report Page