Анонимность в Human Emulator Studio. Отпечатки браузера.

Анонимность в Human Emulator Studio. Отпечатки браузера.

Browser Fingerprint.

Ранее в статьях про анонимность мы уже затрагивали так называемые отпечатки браузера (Browser Fingerprint). Что это за отпечатки такие? По факту это средство для определения пользователя на основе получения различных параметров его системы, установленого в ней программного обеспечения, а также информации о железе самого компьютера. Всё это определяется с помощью различных JS библиотек и после обработки, преобразуется в строку отпечатка, после чего это строка преобразуется в 32-х битное число и это и будет ваш идентификатор, с помощью которого можно определить повторное посещение сайта или отследить все ваши действия на этом сайте.

Так в статье Анонимность в Human Emulator Studio. Управление информацией о браузере мы уже говорили о параметрах которые влияют на отпечаток браузера. Это userAgent строка (navigator.userAgent), а также параметры объекта navigator appVersion, appName, appCodeName, language(s), platform, product, productsub, информация о плагинах и об оборудовании, размер экрана, глубина цвета экрана.

В статье Анонимность в Human Emulator Studio. Местоположение это параметры Timezone, Интернационализация, navigator.language.

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

Сanvas Fingerprint.

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

Причём за счёт платформазависимости библиотеки Canvas API, с помощью которой выполняется рисовка, результирующий набор байтов будет уникальным практически на каждом компьютере.

Для подмены этого параметра в Human Emulator Studio используется функция объекта browser set_canvas_toDataURL

С версии 7.0.43 в качестве параметра передаётся любое число или строка на основе, которого создаётся «шум» для картинки с текстом.

пример на php:

Результат работы функции set_canvas_toDataURL .

Без использования шума:

С использованием шума:

В версии Studio 7.0.45 в команду set_canvas_toDataURL был добавлен параметр jsChangeNoise. Этот параметр содержит алгоритм изменения картинки с помощью JS. Таким образом если вы можете использовать свои алгоритмы обработки картинки, например:

В версии Studio 7.0.47 в программу была добавлена возможность получать в буфер обмена исходник картинки для дальнейшего его использования в программе. Для этого выбираем пункт меню Сервис->Скриншоты->Получить последний Based 64 кодированный массив канваса и скопировать его в буффер.

Пример использования на php полученного исходника в программе:

Результат работы:

WebGL Fingerprint.

WebGL Fingerprint это дальнейшее развитие идеи Сanvas Fingerprint.

WebGL — это JavaScript API для визуализации интерактивной 3D-графики в любом совместимом веб-браузере без использования плагинов. Приложения WebGL состоят из управляющего кода, написанного на JavaScript, и кода специальных эффектов, выполняемого на графическом процессоре компьютера. Элементы WebGL могут быть смешаны с другими элементами HTML и скомпонованы с другими частями страницы или фона страницы.

С помощью этого API рисуются 3D треугольники, на которые накладываются различные эффекты. После чего также как и с Сanvas Fingerprint полученный рисунок преобразуется в массив байтов, который будет разным на разных компьютерах.

Для работы с этим отпечатком в программу с версии 7.0.40 в объект browser была добавлена функция set_random_webgl_fingerprint. В версии 7.0.43 эта функция претерпела занчительные изменения и теперь она не генерит значение случайным образом, а создаёт его на основе заданных параметров.

Параметры для работы с функцией:
enable=true — использовать подмену или нет
noiseImage — число от 1 до 999999 — это шум накладываемый на отрисовку картинки через WebGl чем больше цифра — тем больше шум.
noiseParams — строка из чисел — длиной 100 цифр, где каждая цифра в строке используется для создания шума параметров WebGl, по которым создается WebGL Report Hash на странице https://browserleaks.com/webgl — сами параметры на той же странице — ниже : (Max Vertex Attributes,Max Vertex Uniform Vectors и т.п)

unmaskedVendor, unmaskedRenderer, glVersion, shadingLanguageVersion, vendor, renderer это строковые значения, посмотреть которые можно в таблице на странице https://browserleaks.com/webgl.

пример использования на php:

До использования подмены:

После выполнения работы примера имеем:

Функция будет действовать до перезагрузки программы или пока вы не вызовите её в следующем виде:

WebGL можно просто отключить с помощью команды объекта browser enable_gpu_rendering.

пример на php:

Google SwiftShader.

В версии 7.0.43 добавлена настройка использовать Google SwiftShader для отрисовки.

Что такое Google SwiftShader — это специальная библиотека, которая используется для высокопроизводительного рендеринга, предоставляющая реализацию графических API, выполняемую на CPU. Используется для возможности отображения расширенной 3D-графики независимо от используемого оборудования и графических драйверов. SwiftShader задействован в Chrome для работы WebGL на системах без современных GPU или для обхода проблем в графических драйверах.

Почему это важно с точки зрения анонимности, включение или отключение использования Google SwiftShader для отрисовки в Human Emulator Studio, влияет на все параметры отпечатков связанных с отрисовкой. В том числе и на информацию о графическом драйвере, в частности на параметры WebGL Unmasked Renderer.

При включённом Google SwiftShader информация о WebGL:

При отключённом Google SwiftShader:

Из рисунков видно что меняется не просто параметр Unmasked Renderer, но и результирующие строки WebGL WebGL Report Hash и WebGL Image Hash. Тоже самое происходит и с Сanvas Fingerprint, он тоже меняется в зависимости от того включено использование Google SwiftShader или отключено.

Данный параметр меняется только из настроек программы и после его изменения требуется обязательная перезагрузка программы.

Font fingerprinting.

Font fingerprinting(Системные шрифты) — это то, какие шрифты у вас есть, и как они нарисованы. На основе измерения размеров заполненных текстом HTML элементов можно построить идентификатор, который можно использовать для отслеживания одного и того же браузера с течением времени.

Вот несколько вариантов получения ваших font fingerprinting:

JS Fonts(unicode) — производятся путем измерения граничных полей определенных кодовых точек Unicode, основанных на приведенном выше исследовании.
JS Fonts (classic) — использует резервный механизм CSS для сравнения подготовленного списка шрифтов с общими семействами шрифтов.

Flash Fonts — это самый простой, Flash имеет метод, который просто возвращает массив доступных системных шрифтов.

На основе всей полученной информации опять создаются ваши уникальные идентификаторы.

При изменении масштаба браузера даже на 1 единицу изменяются и идентификаторы Font fingerprinting.

Без изменения масштаба:

после выполнения кода на php:

Как видно из рисунков определение шрифтов с помощью Flash в Human Emulator Studio отключено по умолчанию.

С версии 7.0.43 в объект browser была добавлена команда set_random_bounds_fingerprint.

Команда на вход принимает параметр

noise=-1 — шум, это число от -1 до 999999999. По умолчанию шум равен -1, то есть шума нет.

Без использования команды:

Пример использования команды на php:

После выполнения команды:

Убрать искажение с помощью команды можно так:

ClientRect.

Метод getClientRects возвращает значение, которое представляет собой набор объектов DOMRect, по одному для каждого поля границы CSS, связанного с элементом.
В зависимость от других параметров таких как разрешение, шрифты и т.д. делает это значение уникальным для каждого компьютера, а соответственно получив это значение можно вас идентифицировать по нему в дальнейшем.

На данный подмены для этого отпечатка нет, но него также влияет изменения масштаба браузера даже на 1 единицу.

пример на php:

Без изменения масштаба:

После выполнения примера на php:

В любом случае в данный момент наш отдел разработки ищет решение для подмены ClientRect.

По мере изменения или дополнения функционала связанного с отпечатками браузера данная статья будет дополняться или изменяться.

AudioContext Fingerprint.

Работает аналогично другим отпечаткам только вместо Canvas API в этом случае используется библиотека AudioContext API, это интерфейс Web Audio API, который поддерживают все современные браузеры. Использование AudioContext API для определения AudioContext fingerprint не собирает звук, воспроизводимый или записанный вашим устройством, отпечаток AudioContext является свойством самого звукового стека вашего устройства и данный метод получения вашего идентификатора независим от браузера.

Для подмены этого отпечатка в версии 7.0.43 в объект browser была добавлена функция set_random_audio_fingerprint.

Команда принимает следующие параметры :
noiseAudio — звуковой шум, может быть от 1 до 999999.
noiseFrequence — частотный шум, может быть от 1 до 99.

Без применения функции значения на сайте audiofingerprint.openwpm.com:

пример работы команды на php:

После выполнения примера.

Для того что бы сбросить по умолчанию нужно просто вызвать функцию в виде:

обсудить статью на нашем форуме


Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.