Фонд СПО представил браузерное дополнение 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, доступных сайтам и 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-аналитики.

OpenNet

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *