TL;DR

Мы продолжаем усиливать нашу защиту от фингерпринтинга: теперь наши пользователи защищены от идентификации по предпочитаемому языку браузера. Начиная с версии 1.39, Brave рандомизирует информацию о ваших языках по умолчанию и об установленных вами шрифтах, которую браузер отправляет сайтам. Тем самым мы продолжаем нашу борьбу с фингерпринтингом, в которой нам нет равных.

В чём опасность того, что трекеры узнают про ваш язык?

При посещении любого сайта, ваш браузер должен сообщить ему ваш язык по умолчанию. Это помогает сайту выдать вам контент на том языке, который вы понимаете. Браузеры делают это как явно (например, с помощью заголовка Accept-Language и Web API navigator.language и navigator.languages), так и неявно (например, с помощью установленных у вас шрифтов).

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

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

Как Brave защищает от фингерпринтинга посредством Accept-Language 

Заголовок HTTP Accept-Language сообщает сайту о ваших языковых предпочтениях. Если ваш компьютер или браузер настроены на несколько языков, заголовок обычно сообщает обо всех в выбранном вами порядке. Для каждого языка браузер добавляет «вес»‎, который показывает, на сколько именно вы предпочитаете тот или иной язык. 

Например, если вы настроили ваш браузер так, что он говорит «я предпочитаю читать сайты по-английски, но если английского нет, то испанский тоже сойдёт»‎, браузер может выразить это в заголовке как  

Accept-Language: en;q=.7,es;q=.5

Эта информация в дальнейшем отсылается с каждым запросом вашего браузера в сети. Похожей информацией браузер делится и с работающими на страницах скриптами JavaScript через свойства navigator.language и navigator.languages.

Интеграция со Щитами

Благодаря новой защите от фингерпринтинга по языку браузера, Brave уменьшает количество доступной через эти API информации и рандомизирует её. Эта защита теперь работает по умолчанию через Щиты Brave. 

По умолчанию Brave будет сообщать только о вашем самом предпочитаемом языке. Например, если вы выбрали «English (United States)»‎ в качестве первого языка, а корейский как второй, браузер покажет только «en-US,en.». Вдобавок Brave рандомизирует сообщаемый вес (q) внутри определённых значений. 

Если вы включите агрессивную защиту от фингерпринтинга в щитах, Brave всегда будет сообщать о предпочтении английского языка (как это делает Tor), т.к. это является наибольшим анонимным множеством. При таких настройках Brave тоже рандомизирует сообщаемый вес (q) внутри определённых значений. 

Как Brave защищает от фингерпринтинга по шрифтам

Шрифты можно разделить на три категории:

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

  • Системные шрифты: шрифты, установленные в ОС, и общие для всех пользователей этой ОС. Поскольку трекеры и так могут выяснить, что у вас за ОС (через строку user agent, JS API и т.д.), получение информации об этих шрифтах обычно не вредит конфиденциальности, хотя установка многочисленных наборов шрифтов для различных языков может увеличить вероятность идентификации.

  • Пользовательские шрифты: дополнительные шрифты, установленные пользователем, как напрямую (скачиванием и установкой шрифта с сайта), так и косвенно (если другие программы на вашем компьютере установили шрифты: офисные программы, программы для создания и редактирования презентаций и изображений, и т.д.). Это наиболее уязвимые для фингерпринтинга шрифты.

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

Например, если вы сообщите Windows, что предпочитаете иврит и малайский, Windows установит дополнительные шрифты для этих языков. Трекер может воспользоваться этими данными для вашей идентификации, так как лишь незначительная доля пользователей сети пользуется такой комбинацией шрифтов. 

В настоящий момент мы защищаем от фингерпринтинга по шрифтам пользователей на Android, macOS и Windows. Мы не применяем эту защиту на iOS из-за платформенных ограничений и потому что WKWebView включает в себя похожие, хоть и не такие надёжные, меры защиты (Brave для iOS построен на WKWebView; Apple не разрешает нам использовать другой движок). Мы не применяем эту защиту на Linux из-за трудностей в определении того, какие шрифты являются «системными»‎ для каждого конкретного дистрибутива. 

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

Интеграция со Щитами

И в агрессивных настройках, и в настройках по умолчанию Brave разрешает сайтам доступ ко всем веб-шрифтам, системным шрифтам для выбранного вами в этот момент языка, и рандомизированному («сфарбленному»‎) множеству пользовательских шрифтов. Как и со всеми такими рандомизирующими методами защиты от фингерпринтинга, множество пользовательских шрифтов, доступное странице, определяется случайным образом для каждого сайта и каждой сессии, а сайт всегда сможет получить доступ к одним и тем же шрифтам на протяжении одной браузерной сессии.

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

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

  • Увеличение пользовательского контроля: пользователи Brave, которые хотели бы передавать больше информации о своих языковых предпочтениях сайтам, могут легко настроить свой браузер. Для отключения защиты от фингерпринтинга по языку и шрифтам нужно перейти на brave://settings/shields и выключить опцию Уменьшить идентифицируемость моих языковых предпочтений.

  • Гибкость: мы будем контролировать этот механизм защиты по мере его внедрения. Если мы увидим проблемы с совместимостью, мы откорректируем эту защиту так, что она не будет ломать сайты.

Сравнение с другими браузерами

Несмотря на то, что Brave — самый конфиденциальный из всех популярных браузеров, другие браузеры тоже предпринимают важные шаги в области подобной защиты. Вот что они умеют:

  • Safari: Наиболее похожая на Brave защита. Safari сообщает сайтам только самый предпочитаемый язык в Accept-Language и navigator.languages и даёт сайтам доступ только к системным шрифтам для текущего языка пользователя. Принципиальная разница заключается в том, что Brave немного рандомизирует источники данных для того, чтобы сбить трекеры с толку, и предоставляет возможность отключения такой защиты. 

  • Firefox: предоставляет некоторые механизмы защиты от фингерпринтинга по языку браузера, но по умолчанию они отключены. Если пользователь включит защиту от фингерпринтинга, Firefox похожим образом ограничит набор шрифтов, которые сайт сможет использовать. 

  • Chrome и Edge: не предоставляют защиту от фингерпринтинга по языку браузера, хотя оба браузера рассматривают возможность включения подобных защитных мер в рамках предложения Privacy Budget, которое вызывает у нас серьёзные опасения

Комментарии (27)


  1. ivan386
    16.06.2022 10:27
    +1

    Помнится мне какой-то браузер обещал вообще избавиться от Useragent. Я решил поэксперементировать с удалением агента и языковых предпочтений. Многие сайты работают нормально. Один сайт сломался так как не ожидает null там где должен быть агент. Второй сайт до недавнего времени игнорил а потом агрессивно начал заставлять обновить браузер.

    Хабр по умолчанию выводит английскую версию а без скриптов похоже с неё никак не переключится. Приходится в ручную в адресной строке менять en на ru.

    Ещё бы Accept заголовок убрать и посмотреть что тогда будет с сайтами.


    1. BraveSoftware Автор
      16.06.2022 11:42

      Сейчас все браузеры очень медленно двигаются в сторону избавления от строки User-Agent и замены её на Client Hints

      https://chromestatus.com/feature/6311349754789888


  1. Aleksandr-JS-Developer
    16.06.2022 11:23

    Больше всего меня смущает, как щедро устроен User Agent. Даже, казалось бы, в Tor в UA указано, что это Tor. Нужно в этот UA, если совсем никак без него, ставить платформу (например, 'ios;phone ') и движок.

    Наверняка есть какой-то хороший инструмент (например, расширение под хром), который вместо реального UA подставляет произвольную строку. Мне бы очень пригодился)


    1. BraveSoftware Автор
      16.06.2022 11:44

      Есть расширения. Или можно в девтулах в хроме заменить юзер-агент. Но скрее всего, вам это особо не нужно, т.к. множество сайтов просто сломаются без известного юзерагента.

      По этой причине, например, Брейв и Вивальди используют юзерагент хрома, а не свой собственный. Ну и мимо юзерагента в финегрпринтинговые скрипты утекает такая прорва информации (шрифты, канвас, client hints и т. д.), что из-за него беспокоится даже и смысла нет :)


      1. ivan386
        16.06.2022 12:45

        По моему опыту большинству сайтов пофиг на агент.


      1. ivan386
        16.06.2022 13:20

        Проверил на топ 100 популярных сайтов в России. Из 100 только 30 отказались показывать контент.


    1. domix32
      17.06.2022 02:56

      Странно, я был уверен, что они продолжают притворяться обычной мозиллой.


      1. BraveSoftware Автор
        17.06.2022 10:54

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


  1. dom1n1k
    16.06.2022 12:21
    +2

    Brave рандомизирует информацию о ваших языках по умолчанию и об установленных вами шрифтах
    Если там реально рандом, то это и правда не даст связать между собой разные сессии одного пользователя, но привлекает потенциальное внимание.
    Не лучше ли реализовать опцию типа «имитировать самый популярный по моей стране шаблон»? Ну типа делаем вид, что мы стандартная установка Windows по умолчанию плюс офис и больше ничего.


    1. BraveSoftware Автор
      16.06.2022 12:36

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


      1. dom1n1k
        16.06.2022 13:14
        +1

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


        1. expdxx
          16.06.2022 23:45

          Эмпирически - это не задача для программиста) Нам нужно придумать и реализовать алгоритм, сжечь сотни человекочасов, но все-таки выбирать нечто обобщенное, которое будет работать само и не будет требовать актуализации данных через n времени. Ну и вообще, ручной труд - это так несовременно. Правда, я не знаю, какие сервера могут поделиться подобной информацией.

          А если без шуток - да, это наиболее здравая идея. По количеству стран составить некий мэппинг и подставлять его в зависимости от реального региона пользователя.


  1. ifap
    16.06.2022 14:12
    +1

    Brave рандомизирует информацию о ваших языках по умолчанию

    Ценой вероятности получить искомый сайт совсем не на искомом языке.

    и об установленных вами шрифтах, которую браузер отправляет сайтам.

    Кхм... а зачем браузеру вообще отправлять эту информацию сайтам?


    1. dom1n1k
      16.06.2022 14:39

      Статья не раскрывает этот вопрос, но скорее всего тут неудачное слово. Инфа о шрифтах никуда не отправляется в явном виде, её получают косвенным образом. Обычно для этого просто рендерят некую строку разными шрифтами, входящими в дистибутивы популярных ОС и программ (офис, фш и пр). И смотрят длину div-а в пикселях - если она отличается от аналогичной строки шрифтом по умолчанию, значит такой шрифт в системе, вероятно, есть.

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


      1. BraveSoftware Автор
        16.06.2022 14:53

        Есть и попроще проверки, см https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/check


        1. dom1n1k
          16.06.2022 15:00

          Наверное есть, но реальность такова:
          https://github.com/fingerprintjs/fingerprintjs/blob/master/src/sources/fonts.ts


          1. BraveSoftware Автор
            16.06.2022 19:10

            Ну это какая-то старая запопселая реальность :D

            Нормальные тесты у гражданина Эбрахама https://github.com/abrahamjuliot/creepjs/blob/master/docs/tests/fonts.js#L959


            1. dom1n1k
              16.06.2022 20:45

              Да, старая - но популярная в реальной жизни. Количество звезд на гитхабе намекает.

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


              1. BraveSoftware Автор
                17.06.2022 10:52

                Да, это всё совершенно верно.

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


    1. BraveSoftware Автор
      16.06.2022 14:57

      Кхм... а зачем браузеру вообще отправлять эту информацию сайтам?

      Да вот зачем-то так исторически сложилось, теперь все страдаем.

      В 103 хром завезли чуть более лучшую штуку, Local Font Access API. Оно хотя бы явно спрашивает пермиссию у пользователя на запрос к перечню локальных шрифтов. https://chromestatus.com/feature/6234451761692672

      Есть довольно интересная статья, в которой затрагивается в т. ч. вопрос приватности


      1. ifap
        16.06.2022 15:03

        Так почему бы Вам просто не отключить отправку этой информации вовсе или хотя бы оставить это на усмотрение пользователя?


        1. BraveSoftware Автор
          17.06.2022 10:44

          Так мы примерно во всех статьях одно и тоже пишем, что основная наша задача - это максимально возможная приватность без ущерба для пользования интернетом.

          Если просто всё отключать и не пущать - сломаются сайты.

          На усмотрение пользователя у нас есть переключатель между стандартной защитой и агрессивной (в иконке льва в омнибоксе). В агрессивном режиме браузер всегда говорит что предпочитает английский язык и точка


          1. ifap
            17.06.2022 10:54

            Все может сломаться из-за отсутствия в UA указания на разрядность ОС, но мы же говорим не о всем, а о конкретной фиче. Из-за отсутствия информации о поддерживаемых гарнитурах что-то ломается?


            1. BraveSoftware Автор
              17.06.2022 11:53

              Представьте как сайты будут выглядеть, если все тексты будут написаны одним Arial'ом. И что скажут 50 миллионов пользователей про это


              1. ifap
                17.06.2022 12:06

                Даже представлять не нужно - у мну Arial стоит дефолтным и сайтам запрещено загружать свои шрифты ;) Но мы же о другом: почему бы пользователю при его желании не щелкать по носу слишком любопытные сайты?


                1. BraveSoftware Автор
                  17.06.2022 13:46

                  Уважуха :D

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


                  1. ifap
                    17.06.2022 13:51

                    Да за что уважуха-то? Мне просто сайты для инфы, а не любоваться на них. Рубленая гарнитура удобнее для моих глаз - вот и весь секрет.