Free Software Foundation esitteli JShelter-projektin, joka kehittää selaimen lisäosan suojaamaan sivustoilla JavaScriptiä käytettäessä syntyviltä uhilta, mukaan lukien piilotettu tunnistaminen, liikkeiden seuranta ja käyttäjätietojen kerääntyminen. Projektikoodia jaetaan GPLv3-lisenssillä. Lisäosa on valmistettu Firefoxille, Google Chromelle, Operalle, Bravelle, Microsoft Edgelle ja muille Chromium-moottoriin perustuville selaimille.
Hanketta kehitetään yhteishankkeena NLnet-säätiön rahoittamana. Giorgio Maone, NoScript-lisäosan luoja sekä J++-projektin perustajat sekä JS-Shield- ja JavaScript Restrictor -lisäosien kirjoittajat, liittyivät myös JShelterin kehittämiseen. Uuden projektin perustana on JavaScript Restrictor -lisäosa.
JShelteriä voidaan pitää eräänlaisena palomuurina verkkosivustoille ja verkkosovelluksille käytettävissä oleville JavaScript-ohjelmointirajapinnoille. Lisäosa tarjoaa neljä suojaustasoa sekä joustavan konfigurointitilan API:n käyttöön. Taso nolla mahdollistaa pääsyn kaikkiin API:ihin, ensimmäinen sisältää minimaalisen eston, joka ei häiritse sivujen toimintaa, toinen taso tasapainottaa eston ja yhteensopivuuden välillä ja neljäs taso sisältää kaiken tarpeettoman tiukan eston.
API-estoasetukset voidaan sitoa yksittäisiin sivustoihin, esimerkiksi suojausta voidaan vahvistaa joillakin sivustoilla ja poistaa käytöstä toisilla. Voit myös valikoivasti estää tiettyjä JavaScript-menetelmiä, objekteja, ominaisuuksia ja toimintoja tai muuttaa palautusarvoja (esimerkiksi tuottaa vääriä tietoja järjestelmästä). Erillinen ominaisuus on NBS (Network boundary shield) -tila, joka ei salli sivujen käyttää selainta välityspalvelimena ulkoisten ja paikallisten verkkojen välillä (kaikki lähtevät pyynnöt siepataan ja analysoidaan).
Estetyt tai rajoitetut sovellusliittymät:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timestamp, Gamepad.prototype.timestamp ja VRFrameData.prototype.timestamp - tarkkaa aikatulosta voidaan käyttää sivukanavahyökkäysten tunnistamiseen ja suorittamiseen .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) - käytetään määrittämään grafiikkaalijärjestelmän ominaisuudet käyttäjän tunnistamisessa.
- AudioBuffer ja AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyFrequencyAnalyysi kautta audiosignaalin()-AnalyatFrequencyData().Data.
- WebGLRenderingContext - tunnistus analysoimalla grafiikkapinon ja GPU:n ominaisuuksia.
- MediaDevices.prototype.enumerateDevices - tunnistaminen hankkimalla kameran ja mikrofonin parametrit ja nimet.
- navigator.deviceMemory, navigator.hardwareConcurrency - tietojen hankkiminen laitteistosta.
- XMLHttpRequest (XHR) - siirtää kerätyt järjestelmätiedot ulkoiselle palvelimelle sivun latauksen jälkeen.
- ArrayBuffer - suorittaa mikroarkkitehtonisia Spectre-hyökkäyksiä.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - suorittaa hyökkäyksiä, jotka arvioivat viiveitä tietojen käsittelyssä.
- Geolocation API (navigator.geolocation) - pääsy sijaintitietoihin (lisäyksen avulla voit vääristää palautettuja tietoja).
- Gamepad API (navigator.getGamepads()) on yksi tunnistusmerkeistä, joka ottaa huomioon peliohjaimen olemassaolon järjestelmässä.
- Virtual Reality API, Mixed Reality API - virtuaalitodellisuuden laiteparametrien käyttö tunnistamiseen.
- window.name - sivustojen väliset vuodot.
- navigator.sendBeacon - käytetään verkkoanalytiikkaan.
Lähde: opennet.ru