Фонд СПО представил браузерное дополнение JShelter для ограничения JavaScript API
1 октября 2021 года
Фонд свободного ПО представил проект 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, доступных сайтам и web-приложениям. Дополнение предоставляет четыре уровня защиты, а также режим гибкой настройки доступа к 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.getFloatFrequencyData()) - идентификация через анализ звуковых сигналов.
- 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-аналитики.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.