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

Опубліковано інструментарій з реалізацією методу визначення додатків, встановлених у браузері 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).

Джерело: opennet.ru

Додати коментар або відгук