Free Software Foundation představila projekt JShelter, který vyvíjí doplněk prohlížeče pro ochranu před hrozbami, které vznikají při používání JavaScriptu na webových stránkách, včetně skryté identifikace, sledování pohybu a hromadění uživatelských dat. Kód projektu je distribuován pod licencí GPLv3. Doplněk je připraven pro Firefox, Google Chrome, Opera, Brave, Microsoft Edge a další prohlížeče založené na enginu Chromium.
Projekt vzniká jako společná iniciativa financovaná Nadací NLnet. Do vývoje JShelter se zapojil i Giorgio Maone, tvůrce doplňku NoScript, a také zakladatelé projektu J++ a autoři doplňků JS-Shield a JavaScript Restrictor. Jako základ pro nový projekt je použit doplněk JavaScript Restrictor.
JShelter lze považovat za jakýsi firewall pro programovací rozhraní JavaScriptu, která jsou k dispozici pro webové stránky a webové aplikace. Doplněk poskytuje čtyři úrovně ochrany a také flexibilní konfigurační režim pro přístup k API. Úroveň nula kompletně umožňuje přístup ke všem API, první zahrnuje minimální blokování nenarušující chod stránek, druhá úroveň balancuje mezi blokováním a kompatibilitou a čtvrtá úroveň zahrnuje striktní blokování všeho zbytečného.
Nastavení blokování API lze svázat s jednotlivými weby, například u některých webů lze posílit ochranu, u jiných deaktivovat. Můžete také selektivně blokovat určité metody JavaScriptu, objekty, vlastnosti a funkce nebo měnit návratové hodnoty (například vytvářet nepravdivé informace o systému). Samostatnou funkcí je režim NBS (Network boundary shield), který neumožňuje stránkám používat prohlížeč jako proxy mezi externími a lokálními sítěmi (všechny odchozí požadavky jsou zachycovány a analyzovány).
Blokovaná nebo omezená rozhraní API:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp a VRFrameData.prototype.timestamp – přesný časový výstup lze použít k identifikaci a provedení útoků na postranním kanálu .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) – používá se k určení vlastností grafického subsystému při identifikaci uživatele.
- Audiobuffer a Analysernode (Audiobuffer.getChanneldata (), Audiobuffer.copyfromchannel (), analysernode.getBytimedomaindata (), analySernode.getfloatTimedoma Indata (), analysernode.getbytefrequencydata () a analysernode (analýza zvuku) pomocí identifikace signálu (analysernode.getfloatfrequency)
- WebGLRenderingContext - identifikace pomocí analýzy vlastností grafického zásobníku a GPU.
- MediaDevices.prototype.enumerateDevices - identifikace získáním parametrů a názvů kamery a mikrofonu.
- navigator.deviceMemory, navigator.hardwareConcurrency - získávání informací o hardwaru.
- XMLHttpRequest (XHR) – po načtení stránky přenese shromážděné systémové informace na externí server.
- ArrayBuffer - provádění mikroarchitektonických útoků Spectre.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - provádění útoků, které vyhodnocují zpoždění při přístupu k datům.
- Geolocation API (navigator.geolocation) - přístup k informacím o poloze (doplnění umožňuje zkreslit vrácená data).
- Gamepad API (navigator.getGamepads()) je jedním z identifikačních znaků, které zohledňují přítomnost gamepadu v systému.
- Virtual Reality API, Mixed Reality API - využití parametrů zařízení virtuální reality pro identifikaci.
- window.name – úniky mezi weby.
- navigator.sendBeacon – používá se pro webovou analýzu.
Zdroj: opennet.ru