Спрятаны у всех на виду: какие опасности скрываются в браузерных расширениях (1/2)

5 ФЕВРАЛЯ 2021 | БРАУЗЕРНЫЕ ОТПЕЧАТКИ

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

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

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

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

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

Разберем основы: браузерное расширение или плагин

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

Но вместо того, чтобы удовлетворить все потребности пользователей (как, например, гласит девиз компании Lego: «Лучшее ещё недостаточно хорошо»), компании, выпускающие браузеры, дают возможность самим пользователям изменять их продукт. Этим занимаются различные сообщества разработчиков, которые выпускают расширения и дополнения для браузеров (аддоны).

Браузер, как и конструктор Lego, может быть дополнен различными частями при помощи HTML, CSS и JavaScript.

Поэтому у многих из нас может возникнуть недопонимание в двух схожих понятиях: плагины и расширения.

Плагин — это скомпилированный файл, как правило, в виде динамической библиотеки. А расширения — скриптовый код, который использует API браузера. Некоторые плагины, например, Adobe Flash, уже не используются, а расширения всё еще довольно распространены.

Мы пользуемся браузерными расширениями ежедневно. Но, как и у всего остального, у них есть свои недостатки, которые мы рассмотрим

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

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

Браузерные расширения и присущие им опасности

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

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

Но давайте всё же разберемся в проблеме браузерных отпечатков и расширений.

Расширения как часть браузерных отпечатков

Информация из исследования «Разбор расширений: анализ безопасности браузерных расширений и управление ресурсами —2017» (англ. Extension Breakdown: Security Analysis of Browsers Extension Resources Control Policies)

Могут ли сайты увидеть ваши расширения? В отличие от плагинов, у браузеров нет таких инструментов как «navigator.plugins», которые бы сразу показывали список всех установленных расширений.

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

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

С тех пор знания в этой сфере значительно улучшились. В статье мы рассмотрим четыре основные области обнаружения браузерных расширений.

Доступность исходных данных

Расширения — это архивы файлов, которые содержат исходные данные с JavaScript, HTML, CSS и изображениями. Доступность исходных данных (англ. Web Accessible Resources (WAR)) — это метод, при помощи которого вебсайт может получить доступ к этим файлам на вашем компьютере и увидеть, установлено ли у вас расширение.

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

1<img src=”chrome-extension://AN_IMAGINERY_EXT_ID/IMAGINERY_RESOURCE.png” onload=”alert('Extension exists');” oneror=”alert('Extension does not exist');/> 

Этот метод работал для всех расширений, и в 2013 сотрудники Google Chrome предложили механизм блокировки обнаружения расширений manifest.json.

До того как появился manifest второй версии, все исходные данные расширения могли быть прочтены сайтом с любой его страницы.

Это позволяло вредоносным сайтам получать отпечаток расширений, которые были установлены у пользователя, чтобы в дальнейшем использовать его во вредоносных целях (например, через баги в XSS).

С выходом manifest 2, сайты стали видеть только те данные расширения, которые нужны были непосредственно для работы пользователя с сайтом, тем самым сохраняя персональные данные пользователя в безопасности.

В соответствии с этим обновлением, сайты могли видеть только те файлы, которые указаны в разделе web_accessible_resources (WAR) в manifest.json.

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

Изменения объектной модели документа (DOM)

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

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

Механизм случайного ID компании Firefox создает еще большую угрозу: вредоносные сайты могут использовать этот ID, чтобы отслеживать пользователей

Как же все-таки работает изменение объектной модели документа (DOM)?  Существует несколько способов влияния расширений на DOM определенной страницы. Затем, исследуя эти изменения в DOM, сайт сможет обнаружить и само браузерное расширение.

Например, одно из самых популярных расширений Grammarly (10 миллионов загрузок), добавляет на страницу атрибут data-gr-ext-installe. Используя следующий код, сайт может обнаружить, что у пользователя установлено это расширение.

1if(document.body.hasAttribute("data-gr-ext-installed")) alert("Grammarly Detected");

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

Однако все эти расширения напрямую влияют на DOM и другие браузерные объекты. Эти расширения оставляют за собой много «следов», поэтому обнаружить их не составляет труда. Так, например, расширение WebGL Fingerprint Defender, которое должно защищать ваши данные и WebGL отпечатки, на самом деле так же влияет на DOM страницы, что позволяет обнаружить это расширение.

1if(document.documentElement.dataset.hasOwnProperty("wgscriptallow")) alert("WebGL Fingerprint Defender");

Возьмем еще один пример. Это расширение Don’t Fingerprint Me, оно напрямую влияет на объект window на странице. Расширение добавляет атрибут к объекту window — dfpm, и имеет длину в 3689 знаков.

Такие расширения как «Don’t Fingerprint Me», которые якобы защищают вас, на самом деле с легкостью могут быть обнаружены

Вернемся к механизму от Firefox, о котором мы говорили выше.

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

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

Взгляните на таблицу ниже, в ней мы отобразили данные, когда случайный ID меняется, а когда — нет.

То есть если у вас несколько аккаунтов, то вы подвергаете себя риску, доверяя Firefox в сохранении ваших персональных данных.

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

Важно отметить, что каждый раз, запуская Stealthfox в Multilogin, создается случайный ID. Другими словами, ваш бизнес не будет подвержен таким атакам, если вы используете наше приложение.

При использовании Multilogin ваш бизнес не будет подвержен атакам, о которых мы рассказали выше

Анализ поведения

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

Примером такого расширения может послужить uBlock Origin — оно используется для блокировки рекламы.

Дело в том, что это расширение пытается блокировать просмотр исходных данных на своей стороне. Так, например, если сайт захочет получить доступ к документу, которого нет в manifest.json, страница откроется с ошибкой chrome://invalid.

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

Если воспроизвести это поведение, то можно будет понять, что у пользователя установлено это расширение.

1
2<link rel="prefetch" href="chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/web_accessible_resources/1x1.gif"/>
3<script>
4if(performance.getEntriesByName("chrome-extension://cjpalhdlnbpafiamejdnhcphjbkeiagm/web_accessible_resources/1x1.gif").length>0) { detectedPlugins.push("UBlock Origin");
5}
6</script>
7

Внешняя загрузка исходных данных или внутренние сообщения

Браузерные расширения состоят из нескольких частей: основной и фоновый скрипты, а также файл manifest.json и его данные.

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

Компании, разрабатывающие браузеры, придумали следующую модель защиты данных: все компоненты браузерных расширений изолированы и не могут «общаться» друг с другом напрямую.

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

Существуют определенные методы и функции, с помощью которых расширения могут передавать и получать информацию.

Так, например, расширение может открыть доступ определенным веб-страницам при помощи функции externally_connectable в файле manifest.json. В дальнейшем на этих страницах расширение сможет использовать API runtime.sendMessage, чтобы отправлять сообщения. Но для корректной работы этой функции веб-страницы должны быть расположены на домене второго уровня. Всё же всем расширениям нужно как-то передавать и получать информацию с сайтов. Некоторые расширения, например, MeetMe Dolby Voice 1.1, используют метод postMessage для обмена информацией между основным скриптом и веб страницей.

Используя эти методы, условно любой сайт может «прочитать» сообщения, которые расширения передают друг другу. А затем сайт увидит и отпечаток этих расширений, которые установлены у пользователя.

Как мы уже выяснили, расширения могут также загружать различную информацию и доступные исходные данные. Эти данные могут быть обнаружены, используя специальные API — например, Performance API, который работает следующим образом: performance.getEntries(“resource”).

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

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

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

Мы также расскажем о способах снижения риска утечки ваших персональных данных.