Фонд СПО представив браузерний додаток JShelter для обмеження JavaScript API

Фонд вільного ПЗ представив проект JShelter, який розвиває браузерне доповнення для захисту від загроз, що виникають під час використання JavaScript на сайтах, включаючи приховану ідентифікацію, відстеження переміщень та накопичення даних про користувача. Код проекту розповсюджується під ліцензією GPLv3. Додаток підготовлений для Firefox, Google Chrome, Opera, Brave, Microsoft Edge та інших браузерів на основі двигуна Chromium.

Проект розвивається як спільна ініціатива, яку фінансує фонд NLnet Foundation. До розробки JShelter у тому числі приєднався Джоржіо Маоне (Giorgio Maone), творець доповнення NoScript, а також засновники проекту J++ та автори доповнень JS-Shield та JavaScript Restrictor. Як основу нового проекту використано доповнення JavaScript Restrictor.

JShelter можна розглядати як подібність міжмережевого екрану для програмних інтерфейсів JavaScript, доступних сайтам та веб-застосункам. Додаток надає чотири рівні захисту, а також режим гнучкого налаштування доступу до API. Нульовий рівень дозволяє доступ до всіх API, перший включає мінімальні блокування не порушують роботу сторінок, другий рівень балансує між блокуваннями і сумісністю, а четвертий рівень включає строгу блокування всього зайвого.

Налаштування блокування API можна прив'язувати до окремих сайтів, наприклад, для якогось сайту можна посилити захист, а для якогось вимкнути. Також можна вибірково блокувати певні методи, об'єкти, властивості та функції JavaScript, або замінювати значення, що повертаються (наприклад, видавати помилкові відомості про систему). Окремо виділяється режим NBS (Network boundary shield), який не дозволяє сторінкам використовувати браузер як проксі між зовнішньою та локальною мережами (перехоплюються та аналізуються всі вихідні запити).

Блоковані або обмежувані API:

  • window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp і VRFrameData.prototype.timestamp — точний час, що видається, може використовуватися для ідентифікації та проведення атак по сторонніх каналах.
  • HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) — використовуються для визначення особливостей графічної підсистеми під час ідентифікації користувача.
  • AudioBuffer і AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() і AnalyserNode.getByteFrequencyData() і AnalyserNode. сигналів.
  • WebGLRenderingContext - ідентифікація через аналіз особливостей графічного стека та GPU.
  • MediaDevices.prototype.enumerateDevices — ідентифікація через отримання параметрів та назв камери та мікрофона.
  • navigator.deviceMemory, navigator.hardwareConcurrency — отримання інформації про обладнання.
  • XMLHttpRequest (XHR) — надсилання зібраних відомостей про систему на зовнішній сервер після завантаження сторінки.
  • ArrayBuffer – проведення мікроархітектурних атак типу Spectre.
  • WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - проведення атак, що оцінюють затримки доступу до даних.
  • Geolocation API (navigator.geolocation) — доступ до відомостей про місцезнаходження (додаток дозволяє спотворювати дані, що повертаються).
  • Gamepad API (navigator.getGamepads()) - одна з ознак ідентифікації, що враховує наявність у системі геймпада.
  • Virtual Reality API, Mixed Reality API — Використовуйте параметри пристроїв віртуальної реальності для ідентифікації.
  • window.name - міжсайтові витоку.
  • navigator.sendBeacon – використовується для web-аналітики.

Джерело: opennet.ru

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