Фонд вольнага ПЗ прадставіў праект JShelter, які развівае браузерны дадатак для абароны ад пагроз, якія ўзнікаюць пры выкарыстанні JavaScript на сайтах, уключаючы ўтоеную ідэнтыфікацыю, адсочванне перасоўванняў і назапашванне дадзеных аб карыстачы. Код праекту распаўсюджваецца пад ліцэнзіяй GPLv3. Дадатак падрыхтавана для Firefox, Google Chrome, Opera, Brave, Microsoft Edge і іншых браўзэраў на аснове рухавічка Chromium.
Праект развіваецца як сумесная ініцыятыва, фундаваная фондам NLnet Foundation. Да распрацоўкі JShelter у тым ліку далучыўся Джорджо Маонэ (Giorgio Maone), стваральнік дадатку NoScript, а таксама заснавальнікі праекту J++ і аўтары дадаткаў JS-Shield і JavaScript Restrictor. У якасці асновы новага праекта выкарыстана дадатак JavaScript Restrictor.
JShelter можна разглядаць як падабенства міжсеткавага экрана для праграмных інтэрфейсаў JavaScript, даступных сайтам і web-прыкладанням. Дадатак дае чатыры ўзроўню абароны, а таксама рэжым гнуткай наладкі доступу да API. Нулявы ўзровень цалкам дазваляе доступ да ўсіх API, першы ўключае мінімальныя блакіроўкі не парушаюць працу старонак, другі ўзровень балансуе паміж блакіроўкамі і сумяшчальнасцю, а чацвёрты ўзровень уключае строгую блакіроўку ўсяго лішняга.
Налады блакавання API можна прывязваць да асобных сайтаў, напрыклад, для нейкага сайта можна ўзмацніць абарону, а для нейкага адключыць. Таксама можна выбарачна блакаваць вызначаныя метады, аб'екты, уласцівасці і функцыі JavaScript, ці падмяняць якія вяртаюцца значэнні (напрыклад, выдаваць ілжывыя звесткі аб сістэме). Асобна вылучаецца рэжым NBS (Network boundary shield), які не дазваляе старонкам выкарыстоўваць браўзэр у якасці проксі паміж вонкавай і лакальнай сеткамі (перахапляюцца і аналізуюцца ўсе выходныя запыты).
Блакуемыя або абмяжоўваныя API:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp і VRFrameData.prototype.timestamp - які выдаецца дакладны час можа выкарыстоўвацца для ідэнтыфікацыі і правядзенні нападаў па іншых каналах.
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) - выкарыстоўваюцца для вызначэння асаблівасцяў графічнай падсістэмы пры ідэнтыфікацыі карыстальніка.
- AudioBuffer і AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() і AnalyserNode.getByteFrequencyData() і AnalyserNode. гукавых сігналаў.
- WebGLRenderingContext - ідэнтыфікацыя праз аналіз асаблівасцяў графічнага стэка і GPU.
- MediaDevices.prototype.enumerateDevices - ідэнтыфікацыя праз атрыманне параметраў і назваў камеры і мікрафона.
- navigator.deviceMemory, navigator.hardwareConcurrency - атрыманне звестак аб абсталяванні.
- XMLHttpRequest (XHR) - перадача сабраных звестак аб сістэме на знешні сервер пасля загрузкі старонкі.
- ArrayBuffer - правядзенне мікраархітэктурных нападаў тыпу Spectre.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - правядзенне нападаў, якія ацэньваюць затрымкі пры доступе да дадзеных.
- Geolocation API (navigator.geolocation) - доступ да звестак аб месцазнаходжанні (дадатак дазваляе скажаць якія вяртаюцца дадзеныя).
- Gamepad API (navigator.getGamepads()) - адзін з прыкмет ідэнтыфікацыі, які ўлічвае наяўнасць у сістэме геймпада.
- Virtual Reality API, Mixed Reality API – выкарыстанне параметраў прылад віртуальнай рэальнасці для ідэнтыфікацыі.
- window.name - міжсайтавых ўцечкі.
- navigator.sendBeacon - выкарыстоўваецца для web-аналітыкі.
Крыніца: opennet.ru