Google heeft verschillende prototypes van exploits gepubliceerd die de mogelijkheid laten zien om kwetsbaarheden van het Spectre-type te exploiteren bij het uitvoeren van JavaScript-code in de browser, om de eerder toegevoegde beschermingsmethoden heen. De exploits kunnen worden gebruikt om toegang te krijgen tot het geheugen van het proces dat webinhoud in het huidige tabblad verwerkt. Voor het testen van de werking van de exploit is de website leaky.page gelanceerd, en de code met de beschrijving van de werklogica is op GitHub geplaatst.
Het voorgestelde prototype is ontworpen om een aanval uit te voeren op systemen met Intel Core i7-6500U-processors in een omgeving met Linux en Chrome 88. Voor het toepassen van de exploit in andere omgevingen zijn aanpassingen nodig. De exploitatiemethode is niet specifiek voor Intel-processors ā na de nodige aanpassing is de werking van de exploit bevestigd op systemen met CPU's van andere fabrikanten, waaronder Apple M1 op basis van de ARM-architectuur. Na enkele kleine aanpassingen is de exploit ook werkzaam in andere besturingssystemen en in andere browsers op basis van de Chromium-engine.
In een omgeving met de standaard Chrome 88 en Intel Skylake-processors is het gelukt om gegevens uit het proces dat verantwoordelijk is voor de verwerking van webinhoud in het huidige Chrome-tabblad (renderer process) te lekken met een snelheid van 1 kilobyte per seconde. Daarnaast zijn alternatieve prototypes ontwikkeld, bijvoorbeeld een exploit die, ten koste van de stabiliteit, de leksnelheid kan verhogen tot 8 kB/s door gebruik te maken van de performance.now() timer met een nauwkeurigheid van 5 microseconden (0.005 milliseconden). Ook is er een variant voorbereid die werkt met een timer-nauwkeurigheid van ƩƩn milliseconde, die kon worden gebruikt om toegang te krijgen tot het geheugen van een ander proces met een snelheid van ongeveer 60 bytes per seconde.
De gepubliceerde demonstratiecode bestaat uit drie delen. Het eerste deel kalibreert de timer om de tijd te beoordelen die nodig is voor de uitvoering van de bewerkingen die vereist zijn voor het herstellen van gegevens die in de processorcache zijn achtergebleven als gevolg van speculatieve uitvoering van CPU-instructies. Het tweede deel bepaalt de geheugenschema dat wordt gebruikt bij het plaatsen van een JavaScript-array.
De derde fase maakt direct gebruik van de Spectre-kwetsbaarheid om de inhoud van het geheugen van het huidige proces te bepalen door voorwaarden te creƫren voor speculatieve uitvoering van bepaalde operaties, waarvan de resultaten door de processor worden verworpen na het vaststellen van een mislukte voorspelling, maar de sporen van de uitvoering blijven in de algemene cache en kunnen worden hersteld met behulp van methoden om de cache-inhoud via zijkanalen te bepalen, die de toegangstijden tot gecacheerde en niet-gecacheerde gegevens analyseren.
De voorgestelde exploitatietechniek heeft geen hoogprecisie timers nodig die beschikbaar zijn via de performance.now() API, en geen ondersteuning voor SharedArrayBuffer type, waarmee arrays in gedeeld geheugen kunnen worden gemaakt. De exploit bevat een Spectre-gadget, dat gecontroleerde speculatieve uitvoering van code veroorzaakt, en een zijkanaalanalysator die de in de cache belande gegevens vaststelt die zijn verkregen tijdens de speculatieve uitvoering.
De gadget is geĆÆmplementeerd met behulp van een JavaScript-array waarin wordt geprobeerd toegang te krijgen tot een gebied buiten de buffergrenzen, wat invloed heeft op de status van de takvoorspelling vanwege de door de compiler toegevoegde buffer-groottecontrole (de processor voert speculatief een toegang uit, maar draait de status terug na controle). Voor de analyse van de cache-inhoud bij onvoldoende nauwkeurigheid van de timer is een methode voorgesteld die de door processors gebruikte Tree-PLRU cache-uitdrijvingsstrategie misleidt en die door het aantal cycli te verhogen, de tijdsverschillen bij het retourneren van waarden uit de cache en bij afwezigheid van waarden in de cache aanzienlijk kan vergroten.
Er wordt opgemerkt dat Google een prototype-exploit heeft gepubliceerd om de realiteit van aanvallen met gebruik van Spectre-kwetsbaarheden aan te tonen en om webontwikkelaars te stimuleren technieken toe te passen die de risico's van dergelijke aanvallen minimaliseren. Google is van mening dat zonder een heftige herziening van het voorgestelde prototype het niet mogelijk is om universele exploits te creƫren die niet alleen voor demonstratie, maar ook voor alomtegenwoordige toepassing gereed zijn.
Om het risico te verlagen, wordt websiteneigenaren aangeraden om de recent geĆÆmplementeerde headers Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options en SameSite Cookie te gebruiken. Deze mechanismen beschermen niet rechtstreeks tegen aanvallen, maar stellen in staat om de gegevens van de site te isoleren van lekken naar processen waarin JavaScript-code van de aanvaller kan worden uitgevoerd (lekken vinden plaats uit het geheugen van het huidige proces, waarin naast de code van de aanvaller ook gegevens van een andere site kunnen worden verwerkt die in hetzelfde tabblad is geopend). Het belangrijkste idee is om de uitvoering van de code van de site te scheiden van externe code die afkomstig is uit onbetrouwbare bronnen, bijvoorbeeld ingeladen via iframe.

Bron: opennet.ru
