A Free Software Foundation presentou o proxecto JShelter, que desenvolve un complemento de navegador para protexerse contra as ameazas que xorden ao usar JavaScript en sitios web, incluíndo a identificación oculta, o seguimento de movementos e a acumulación de datos dos usuarios. O código do proxecto distribúese baixo a licenza GPLv3. O complemento está preparado para Firefox, Google Chrome, Opera, Brave, Microsoft Edge e outros navegadores baseados no motor Chromium.
O proxecto desenvólvese como unha iniciativa conxunta financiada pola Fundación NLnet. Giorgio Maone, creador do complemento NoScript, así como os fundadores do proxecto J++ e os autores dos complementos JS-Shield e JavaScript Restrictor, tamén se uniron ao desenvolvemento de JShelter. O complemento JavaScript Restrictor úsase como base para o novo proxecto.
JShelter pódese pensar como unha especie de firewall para interfaces de programación JavaScript dispoñibles para sitios web e aplicacións web. O complemento ofrece catro niveis de protección, así como un modo de configuración flexible para o acceso á API. O nivel cero permite o acceso completo a todas as API, o primeiro inclúe un bloqueo mínimo que non perturba o funcionamento das páxinas, o segundo nivel equilibra entre bloqueo e compatibilidade e o cuarto nivel inclúe un bloqueo estrito de todo o innecesario.
A configuración de bloqueo da API pódese vincular a sitios individuais; por exemplo, pódese reforzar a protección para algúns sitios e desactivarse para outros. Tamén pode bloquear selectivamente certos métodos, obxectos, propiedades e funcións de JavaScript ou cambiar os valores de retorno (por exemplo, producir información falsa sobre o sistema). Unha característica separada é o modo NBS (Network boundary shield), que non permite que as páxinas utilicen o navegador como proxy entre redes externas e locais (todas as solicitudes de saída son interceptadas e analizadas).
API bloqueadas ou restrinxidas:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp e VRFrameData.prototype.timestamp - a saída de tempo exacta pódese usar para identificar e realizar ataques de canle lateral .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()): úsase para determinar as características do subsistema gráfico ao identificar un usuario.
- Audiobuffer e Analysernode (Audiobuffer.getChanneldata (), Audiobuffer.copyfromchannel (), analysernode.getBytimedomaindata (), analySernode.getfloatTimedoma Indata (), analysernode.getbytefrequencydata () e analysernode.getBytimedomaindata () - análise de sinal de identificación mediante ()
- WebGLRenderingContext: identificación mediante a análise das características da pila de gráficos e da GPU.
- MediaDevices.prototype.enumerateDevices - identificación mediante a obtención de parámetros e nomes da cámara e do micrófono.
- navigator.deviceMemory, navigator.hardwareConcurrency - obtención de información sobre o hardware.
- XMLHttpRequest (XHR): transfire a información recollida do sistema a un servidor externo despois de cargar a páxina.
- ArrayBuffer: leva a cabo ataques Spectre microarquitectónicos.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - realizando ataques que avalían os atrasos ao acceder aos datos.
- API de xeolocalización (navigator.geolocation): acceso á información de localización (a adición permítelle distorsionar os datos devoltos).
- Gamepad API (navigator.getGamepads()) é un dos sinais de identificación que ten en conta a presenza dun gamepad no sistema.
- API de realidade virtual, API de realidade mixta: uso de parámetros de dispositivos de realidade virtual para a identificación.
- window.name - filtracións entre sitios.
- navigator.sendBeacon - usado para análise web.
Fonte: opennet.ru