Опубликован инструментарий для определения дополнений, установленных в Chrome

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

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

Web-страницы могут запрашивать поставляемые в дополнении ресурсы при помощи метода fetch, например «fetch(‘chrome-extension://okb….nd5/test.png’)», возвращение которым значения «false» обычно свидетельствует о том, что дополнение не установлено. Для блокирования определения некоторые дополнения генерируют проверочный токен, необходимый для доступа к ресурсу. Вызов fetch без указания токена всегда завершается неудачей.

Как оказалось, защиту доступа к ресурсам дополнений можно обойти, оценивая время выполнения операции. Несмотря на то, что fetch при запросе без токена, всегда возвращает ошибку, время выполнения операции при наличии и отсутствии дополнения отличается — если дополнение присутствует, то запрос потребует дольше времени, чем если дополнение не установлено. Оценивая время реакции можно достаточно точно определить наличие защищённого дополнения.

Некоторые дополнения, которые не включают доступные из вне ресурсы, можно определить по дополнительным свойствам. Например, дополнение MetaMask можно определить через оценку определения свойства window.ethereum (если дополнение не установлено typeof window.ethereum вернёт значение «undefined»).

Источник: http://www.opennet.ru/opennews/art.shtml?num=57379