Free Software Foundation predstavila projekt JShelter, ktorý vyvíja doplnok prehliadača na ochranu pred hrozbami, ktoré vznikajú pri používaní JavaScriptu na webových stránkach, vrátane skrytej identifikácie, sledovania pohybu a hromadenia používateľských údajov. Kód projektu je distribuovaný pod licenciou GPLv3. Doplnok je pripravený pre Firefox, Google Chrome, Opera, Brave, Microsoft Edge a ďalšie prehliadače založené na engine Chromium.
Projekt vzniká ako spoločná iniciatíva financovaná Nadáciou NLnet. Do vývoja JShelter sa zapojil aj Giorgio Maone, tvorca doplnku NoScript, ako aj zakladatelia projektu J++ a autori doplnkov JS-Shield a JavaScript Restrictor. Ako základ pre nový projekt sa používa doplnok JavaScript Restrictor.
JShelter si možno predstaviť ako druh brány firewall pre programovacie rozhrania JavaScriptu dostupné pre webové stránky a webové aplikácie. Doplnok poskytuje štyri úrovne ochrany, ako aj flexibilný konfiguračný režim pre prístup k API. Úroveň nula úplne umožňuje prístup ku všetkým API, prvá zahŕňa minimálne blokovanie, ktoré nenarúša chod stránok, druhá úroveň balansuje medzi blokovaním a kompatibilitou a štvrtá úroveň zahŕňa prísne blokovanie všetkého nepotrebného.
Nastavenia blokovania API môžu byť prepojené s jednotlivými stránkami, napríklad pre niektoré stránky môže byť posilnená ochrana, pre iné vypnutá. Môžete tiež selektívne blokovať určité metódy, objekty, vlastnosti a funkcie JavaScriptu alebo meniť návratové hodnoty (napríklad vytvárať nepravdivé informácie o systéme). Samostatnou funkciou je režim NBS (Network boundary shield), ktorý stránkam neumožňuje používať prehliadač ako proxy medzi externými a lokálnymi sieťami (všetky odchádzajúce požiadavky sú zachytávané a analyzované).
Blokované alebo obmedzené rozhrania API:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp a VRFrameData.prototype.timestamp – výstup presného času možno použiť na identifikáciu a uskutočnenie útokov na bočný kanál .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) – používa sa na určenie vlastností grafického subsystému pri identifikácii používateľa.
- AudioBuffer a AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() a Identifikácia signálov AnalyserFrequencyData() a AnalyserFrequency signals audioget.
- WebGLRenderingContext - identifikácia prostredníctvom analýzy vlastností grafického zásobníka a GPU.
- MediaDevices.prototype.enumerateDevices - identifikácia získaním parametrov a názvov kamery a mikrofónu.
- navigator.deviceMemory, navigator.hardwareConcurrency - získavanie informácií o hardvéri.
- XMLHttpRequest (XHR) – po načítaní stránky prenáša zozbierané systémové informácie na externý server.
- ArrayBuffer - vykonávanie mikroarchitektonických útokov Spectre.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - vykonávanie útokov, ktoré vyhodnocujú oneskorenia pri prístupe k údajom.
- Geolocation API (navigator.geolocation) - prístup k informáciám o polohe (doplnok umožňuje skreslenie vrátených údajov).
- Gamepad API (navigator.getGamepads()) je jedným z identifikačných znakov, ktoré zohľadňujú prítomnosť gamepadu v systéme.
- Virtual Reality API, Mixed Reality API - využitie parametrov zariadenia virtuálnej reality na identifikáciu.
- window.name - úniky medzi stránkami.
- navigator.sendBeacon – používa sa na webovú analýzu.
Zdroj: opennet.ru