Опубликован инструментарий с реализацией метода определения дополнений, установленных в браузере Chrome. Полученный список дополнений может использоваться для увеличения точности пассивной идентификации конкретного экземпляра браузера, в сочетании с другими косвенными признаками, такими как разрешение экрана, особенностей WebGL, списки установленных плагинов и шрифтов. Предложенная реализация проверяет установку более 1000 дополнений. Для проверки своей системы предложена online-демонстрация.
Определение дополнений производится через анализ предоставляемых дополнениями ресурсов, доступных для внешних запросов. Как правило, дополнения включают различные сопутствующие файлы, такие как изображения, которые определяются в манифесте дополнения свойством web_accessible_resources. В первой версии манифеста Chrome доступ к ресурсам не ограничивался и любой сайт мог загрузить предоставляемые ресурсы. Во второй версии манифеста доступ к подобным ресурсам по умолчанию был разрешён только для самого дополнения. В третьей версии манифеста была предоставлен возможность определить, какие ресурсы можно отдавать каким дополнениям, доменам и страницам.
Web-страницы могут запрашивать поставляемые в дополнении ресурсы при помощи метода fetch (например “fetch(‘chrome-extension://okb….nd5/test.png’)”), возвращение которым значения “false” обычно свидетельствует о том, что дополнение не установлено. Для блокирования определения дополнения по наличию ресурсов некоторые дополнения генерируют проверочный токен, необходимый для доступа к ресурсу. Вызов fetch без указания токена всегда завершается неудачей.
Как оказалось, защиту доступа к ресурсам дополнений можно обойти, оценивая время выполнения операции. Несмотря на то, что fetch при запросе без токена, всегда возвращает ошибку, время выполнения операции при наличии и отсутствии дополнения отличается – если дополнение присутствует, то запрос потребует больше времени, чем если дополнение не установлено. Оценивая время реакции можно достаточно точно определить наличие дополнения.
Некоторые дополнения, которые не включают доступные из вне ресурсы, можно определить по дополнительным свойствам. Например, дополнение MetaMask можно определить через оценку определения свойства window.ethereum (если дополнение не установлено “typeof window.ethereum” вернёт значение “undefined”).