Fondacija za slobodni softver predstavila je projekat JShelter, koji razvija dodatak za pretraživač za zaštitu od prijetnji koje nastaju prilikom korištenja JavaScript-a na web stranicama, uključujući skrivenu identifikaciju, praćenje kretanja i akumulaciju korisničkih podataka. Kod projekta se distribuira pod GPLv3 licencom. Dodatak je pripremljen za Firefox, Google Chrome, Opera, Brave, Microsoft Edge i druge pretraživače bazirane na Chromium engine-u.
Projekat se razvija kao zajednička inicijativa koju finansira NLnet fondacija. Giorgio Maone, kreator dodatka NoScript, kao i osnivači J++ projekta i autori dodataka JS-Shield i JavaScript Restrictor, također su se pridružili razvoju JShelter-a. Dodatak JavaScript Restrictor se koristi kao osnova za novi projekat.
JShelter se može zamisliti kao neka vrsta zaštitnog zida za JavaScript programska sučelja dostupna web stranicama i web aplikacijama. Dodatak pruža četiri nivoa zaštite, kao i fleksibilan način konfiguracije za pristup API-ju. Nulti nivo u potpunosti omogućava pristup svim API-jima, prvi uključuje minimalno blokiranje koje ne ometa rad stranica, drugi nivo balansira između blokiranja i kompatibilnosti, a četvrti nivo uključuje strogo blokiranje svega nepotrebnog.
Postavke blokiranja API-ja mogu se vezati za pojedinačne stranice, na primjer, zaštita se može pojačati za neke stranice, a onemogućiti za druge. Također možete selektivno blokirati određene JavaScript metode, objekte, svojstva i funkcije ili promijeniti povratne vrijednosti (na primjer, proizvesti lažne informacije o sistemu). Posebna karakteristika je režim NBS (Network boundary shield), koji ne dozvoljava stranicama da koriste pretraživač kao proxy između eksterne i lokalne mreže (svi odlazni zahtevi se presreću i analiziraju).
Blokirani ili ograničeni API-ji:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp i VRFrameData.prototype.timestamp - izlaz tačnog vremena može se koristiti za identifikaciju i izvođenje napada na bočne kanale .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) - koristi se za određivanje karakteristika grafičkog podsistema prilikom identifikacije korisnika.
- AudioBuffer i AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() i analiza signala.
- WebGLRenderingContext - identifikacija kroz analizu karakteristika grafičkog steka i GPU-a.
- MediaDevices.prototype.enumerateDevices - identifikacija dobijanjem parametara i naziva kamere i mikrofona.
- navigator.deviceMemory, navigator.hardwareConcurrency - dobijanje informacija o hardveru.
- XMLHttpRequest (XHR) - prenosi prikupljene sistemske informacije na eksterni server nakon što se stranica učita.
- ArrayBuffer - izvođenje mikroarhitektonskih Spectre napada.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - izvođenje napada koji procjenjuju kašnjenja prilikom pristupa podacima.
- Geolocation API (navigator.geolocation) - pristup informacijama o lokaciji (dodatak vam omogućava da iskrivite vraćene podatke).
- Gamepad API (navigator.getGamepads()) je jedan od identifikacionih znakova koji uzima u obzir prisustvo gamepada u sistemu.
- Virtual Reality API, Mixed Reality API - upotreba parametara uređaja virtuelne stvarnosti za identifikaciju.
- window.name - curenje na više lokacija.
- navigator.sendBeacon - koristi se za web analitiku.
izvor: opennet.ru